summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Luc Gyger <jean-luc.gyger@vysual.ch>2016-02-11 10:01:12 +0100
committerJean-Luc Gyger <jean-luc.gyger@vysual.ch>2016-02-11 10:01:12 +0100
commitd70861a8f9368773f2f0291454e9420174e6c14a (patch)
treee44a32e401211422fb05da355c9eef4d5934d9e9
parentd32f65815eb6feb4bcb8a0c85572f722d7826342 (diff)
parent275f16b90a92c62935cb691d11e0bd124acf64e4 (diff)
Merge branch 'master' of https://github.com/majuca/prado
-rw-r--r--.buildpath5
-rw-r--r--.gitignore10
-rw-r--r--.travis.yml7
-rw-r--r--COPYRIGHT2
-rw-r--r--HISTORY49
-rw-r--r--README.md6
-rw-r--r--UPGRADE8
-rwxr-xr-xbin/prado-cli.php6
-rw-r--r--build.xml37
-rw-r--r--buildscripts/apigen/pradosoft/404.latte16
-rw-r--r--buildscripts/apigen/pradosoft/@elementlist.latte26
-rw-r--r--buildscripts/apigen/pradosoft/@layout.latte161
-rw-r--r--buildscripts/apigen/pradosoft/annotation-group.latte117
-rw-r--r--buildscripts/apigen/pradosoft/class.latte149
-rw-r--r--buildscripts/apigen/pradosoft/combined.js.latte13
-rw-r--r--buildscripts/apigen/pradosoft/config.neon57
-rw-r--r--buildscripts/apigen/pradosoft/constant.latte32
-rw-r--r--buildscripts/apigen/pradosoft/deprecated.latte120
-rw-r--r--buildscripts/apigen/pradosoft/elementlist.js.latte10
-rw-r--r--buildscripts/apigen/pradosoft/function.latte45
-rw-r--r--buildscripts/apigen/pradosoft/js/jquery.autocomplete.js178
-rw-r--r--buildscripts/apigen/pradosoft/js/jquery.cookie.js202
-rw-r--r--buildscripts/apigen/pradosoft/js/jquery.min.js9
-rw-r--r--buildscripts/apigen/pradosoft/js/main.js92
-rw-r--r--buildscripts/apigen/pradosoft/namespace.latte16
-rw-r--r--buildscripts/apigen/pradosoft/opensearch.xml.latte13
-rw-r--r--buildscripts/apigen/pradosoft/overview.latte68
-rw-r--r--buildscripts/apigen/pradosoft/package.latte16
-rw-r--r--buildscripts/apigen/pradosoft/resources/collapsed.pngbin271 -> 2881 bytes
-rw-r--r--buildscripts/apigen/pradosoft/resources/combined.js1219
-rw-r--r--buildscripts/apigen/pradosoft/resources/footer.pngbin8232 -> 7948 bytes
-rw-r--r--buildscripts/apigen/pradosoft/resources/style.css86
-rw-r--r--buildscripts/apigen/pradosoft/robots.txt.latte11
-rw-r--r--buildscripts/apigen/pradosoft/sitemap.xml.latte25
-rw-r--r--buildscripts/apigen/pradosoft/source.latte20
-rw-r--r--buildscripts/apigen/pradosoft/todo.latte112
-rw-r--r--buildscripts/apigen/pradosoft/tree.latte41
-rw-r--r--buildscripts/phing/tasks/ApiGen4Task.php435
-rw-r--r--buildscripts/phpbuilder/build.php6
-rw-r--r--buildscripts/texbuilder/Page2Tex.php6
-rw-r--r--buildscripts/texbuilder/quickstart/pages.php43
-rw-r--r--buildscripts/texbuilder/quickstart/quickstart.tex6
-rw-r--r--buildscripts/texbuilder/sqlmap/sqlmap.tex2
-rw-r--r--buildscripts/texbuilder/time-tracker/preface.tex9
-rw-r--r--buildscripts/texbuilder/time-tracker/time-tracker.tex2
-rw-r--r--composer.json36
-rw-r--r--composer.lock1904
-rwxr-xr-xdemos/blog-tutorial/protected/common/fr/TopicList.tpl62
-rwxr-xr-xdemos/blog-tutorial/protected/common/id/TopicList.tpl62
-rwxr-xr-xdemos/blog-tutorial/protected/layout/MainLayout.php3
-rwxr-xr-xdemos/blog-tutorial/protected/layout/MainLayout.tpl26
-rwxr-xr-xdemos/blog-tutorial/protected/layout/fr/MainLayout.tpl54
-rwxr-xr-xdemos/blog-tutorial/protected/layout/id/MainLayout.tpl54
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day1/CreateContact.page18
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day1/Setup.page12
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day1/ShareLayout.page20
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day1/fr/CreateContact.page202
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day1/fr/Setup.page160
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day1/fr/ShareLayout.page180
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day1/fr/directories.gifbin3611 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day1/fr/directories2.gifbin4147 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day1/fr/directories3.gifbin3531 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day1/fr/output.gifbin13379 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day1/id/CreateContact.page203
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day1/id/Setup.page163
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day1/id/ShareLayout.page178
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day1/id/directories.gifbin3611 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day1/id/directories2.gifbin4147 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day1/id/directories3.gifbin3531 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day1/id/output.gifbin13379 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day2/ConnectDB.page8
-rw-r--r--demos/blog-tutorial/protected/pages/Day2/CreateAR.page6
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day2/CreateDB.page2
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day2/fr/ConnectDB.page47
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day2/fr/CreateAR.page177
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day2/fr/CreateDB.page70
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day2/fr/ER.gifbin4444 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day2/fr/ER.vsdbin73216 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day2/fr/directories.gifbin4580 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day2/fr/directories2.gifbin6795 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day2/id/ConnectDB.page46
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day2/id/CreateAR.page178
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day2/id/CreateDB.page69
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day2/id/ER.gifbin4444 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day2/id/directories.gifbin4580 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day2/id/directories2.gifbin6795 -> 0 bytes
-rw-r--r--demos/blog-tutorial/protected/pages/Day2/wsat_login.pngbin47951 -> 45418 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/Auth.page8
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/CreateAdminUser.page12
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/CreateEditUser.page4
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/CreateLoginUser.page2
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/CreateNewUser.page8
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/fr/Auth.page106
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/fr/CreateAdminUser.page144
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/fr/CreateEditUser.page215
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/fr/CreateLoginUser.page161
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/fr/CreateNewUser.page212
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/fr/Overview.page42
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/fr/directories.gifbin10329 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/fr/output.gifbin10006 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/fr/output2.gifbin9222 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/fr/output3.gifbin9464 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/id/Auth.page102
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/id/CreateAdminUser.page137
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/id/CreateEditUser.page212
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/id/CreateLoginUser.page162
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/id/CreateNewUser.page210
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/id/Overview.page26
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/id/directories.gifbin10329 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/id/output.gifbin10006 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/id/output2.gifbin9222 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day3/id/output3.gifbin9464 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/CreateListPost.page4
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/CreateNewPost.page2
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/fr/CreateEditPost.page136
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/fr/CreateListPost.page182
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/fr/CreateNewPost.page144
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/fr/CreateReadPost.page135
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/fr/Overview.page28
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/fr/directories.gifbin11129 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/fr/output.gifbin3406 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/fr/output2.gifbin6326 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/fr/output3.gifbin11874 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/fr/output4.gifbin11916 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/id/CreateEditPost.page133
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/id/CreateListPost.page185
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/id/CreateNewPost.page142
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/id/CreateReadPost.page135
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/id/Overview.page26
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/id/directories.gifbin11129 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/id/output.gifbin3406 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/id/output2.gifbin6326 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/id/output3.gifbin11874 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day4/id/output4.gifbin11916 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day5/ErrorLogging.page2
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day5/Performance.page2
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day5/UseTheme.page4
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day5/fr/ErrorLogging.page158
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day5/fr/Performance.page66
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day5/fr/Summary.page41
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day5/fr/UseTheme.page138
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day5/fr/output.gifbin4282 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day5/fr/output2.gifbin7798 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day5/fr/output3.gifbin5190 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day5/id/ErrorLogging.page159
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day5/id/Performance.page67
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day5/id/Summary.page36
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day5/id/UseTheme.page138
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day5/id/output.gifbin4282 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day5/id/output2.gifbin7798 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Day5/id/output3.gifbin5190 -> 0 bytes
-rwxr-xr-xdemos/blog-tutorial/protected/pages/Overview.page4
-rwxr-xr-xdemos/blog-tutorial/protected/pages/fr/Overview.page17
-rwxr-xr-xdemos/blog-tutorial/protected/pages/fr/Requirements.page37
-rwxr-xr-xdemos/blog-tutorial/protected/pages/id/Overview.page17
-rwxr-xr-xdemos/blog-tutorial/protected/pages/id/Requirements.page38
-rw-r--r--[-rwxr-xr-x]demos/blog-tutorial/themes/PradoSoft/pradologo.gifbin3039 -> 2583 bytes
-rwxr-xr-xdemos/blog/protected/Common/BlogDataModule.php12
-rwxr-xr-xdemos/blog/protected/Common/BlogErrorHandler.php12
-rwxr-xr-xdemos/blog/protected/Common/BlogException.php12
-rwxr-xr-xdemos/blog/protected/Common/BlogPage.php12
-rwxr-xr-xdemos/blog/protected/Common/BlogUser.php12
-rwxr-xr-xdemos/blog/protected/Common/BlogUserManager.php12
-rwxr-xr-xdemos/blog/protected/Common/XListMenu.php12
-rwxr-xr-xdemos/blog/protected/Common/schema.sql4
-rwxr-xr-xdemos/blog/protected/Layouts/MainLayout.php12
-rwxr-xr-xdemos/blog/protected/Layouts/MainLayout.tpl2
-rwxr-xr-xdemos/blog/protected/Pages/Admin/AdminMenu.php12
-rwxr-xr-xdemos/blog/protected/Pages/Admin/ConfigMan.php12
-rwxr-xr-xdemos/blog/protected/Pages/Admin/PostMan.php12
-rwxr-xr-xdemos/blog/protected/Pages/Admin/UserMan.php12
-rwxr-xr-xdemos/blog/protected/Pages/ErrorReport.php12
-rwxr-xr-xdemos/blog/protected/Pages/Posts/EditCategory.php12
-rwxr-xr-xdemos/blog/protected/Pages/Posts/EditPost.php12
-rwxr-xr-xdemos/blog/protected/Pages/Posts/ListPost.php12
-rwxr-xr-xdemos/blog/protected/Pages/Posts/MyPost.php12
-rwxr-xr-xdemos/blog/protected/Pages/Posts/NewCategory.php12
-rwxr-xr-xdemos/blog/protected/Pages/Posts/NewPost.php12
-rwxr-xr-xdemos/blog/protected/Pages/Posts/ViewPost.php12
-rwxr-xr-xdemos/blog/protected/Pages/Users/EditUser.php12
-rwxr-xr-xdemos/blog/protected/Pages/Users/NewUser.php12
-rwxr-xr-xdemos/blog/protected/Pages/Users/ViewUser.php12
-rwxr-xr-xdemos/blog/protected/Portlets/AccountPortlet.php12
-rwxr-xr-xdemos/blog/protected/Portlets/ArchivePortlet.php12
-rwxr-xr-xdemos/blog/protected/Portlets/CategoryPortlet.php12
-rwxr-xr-xdemos/blog/protected/Portlets/CommentPortlet.php12
-rwxr-xr-xdemos/blog/protected/Portlets/LoginPortlet.php12
-rwxr-xr-xdemos/blog/protected/Portlets/Portlet.php12
-rwxr-xr-xdemos/blog/protected/Portlets/SearchPortlet.php12
-rwxr-xr-xdemos/chat/protected/pages/Home.page2
-rwxr-xr-xdemos/composer/protected/pages/Layout.tpl2
-rwxr-xr-xdemos/composer/themes/PradoSoft/style.css2
-rwxr-xr-xdemos/personal/protected/Pages/Layout.tpl4
-rwxr-xr-xdemos/quickstart/protected/controls/Comments/CommentBlock.tpl1
-rwxr-xr-xdemos/quickstart/protected/controls/DocLink.php2
-rwxr-xr-xdemos/quickstart/protected/controls/Layout.php3
-rwxr-xr-xdemos/quickstart/protected/controls/Layout.tpl9
-rwxr-xr-xdemos/quickstart/protected/controls/SampleLayout.tpl2
-rw-r--r--demos/quickstart/protected/controls/TopicList.tpl2
-rwxr-xr-xdemos/quickstart/protected/controls/de/Layout.tpl61
-rwxr-xr-xdemos/quickstart/protected/controls/de/RequiresVersion.tpl1
-rwxr-xr-xdemos/quickstart/protected/controls/de/RunBar.tpl4
-rwxr-xr-xdemos/quickstart/protected/controls/de/SearchBox.tpl3
-rwxr-xr-xdemos/quickstart/protected/controls/de/TopicList.tpl115
-rwxr-xr-xdemos/quickstart/protected/controls/es/Layout.tpl61
-rwxr-xr-xdemos/quickstart/protected/controls/es/RequiresVersion.tpl1
-rwxr-xr-xdemos/quickstart/protected/controls/es/RunBar.tpl4
-rwxr-xr-xdemos/quickstart/protected/controls/es/SampleLayout.tpl32
-rwxr-xr-xdemos/quickstart/protected/controls/es/SearchBox.tpl3
-rwxr-xr-xdemos/quickstart/protected/controls/es/SinceVersion.tpl1
-rw-r--r--demos/quickstart/protected/controls/es/TopicList.tpl112
-rwxr-xr-xdemos/quickstart/protected/controls/fr/Layout.tpl61
-rwxr-xr-xdemos/quickstart/protected/controls/fr/RunBar.tpl4
-rwxr-xr-xdemos/quickstart/protected/controls/fr/SampleLayout.tpl32
-rwxr-xr-xdemos/quickstart/protected/controls/fr/SearchBox.tpl3
-rw-r--r--demos/quickstart/protected/controls/fr/TopicList.tpl110
-rwxr-xr-xdemos/quickstart/protected/controls/id/Layout.tpl61
-rwxr-xr-xdemos/quickstart/protected/controls/id/RequiresVersion.tpl1
-rwxr-xr-xdemos/quickstart/protected/controls/id/RunBar.tpl4
-rwxr-xr-xdemos/quickstart/protected/controls/id/SampleLayout.tpl32
-rwxr-xr-xdemos/quickstart/protected/controls/id/SearchBox.tpl3
-rwxr-xr-xdemos/quickstart/protected/controls/id/SinceVersion.tpl1
-rw-r--r--demos/quickstart/protected/controls/id/TopicList.tpl111
-rwxr-xr-xdemos/quickstart/protected/controls/ja/Layout.tpl61
-rwxr-xr-xdemos/quickstart/protected/controls/ja/RunBar.tpl4
-rwxr-xr-xdemos/quickstart/protected/controls/ja/SearchBox.tpl3
-rw-r--r--demos/quickstart/protected/controls/ja/TopicList.tpl111
-rwxr-xr-xdemos/quickstart/protected/controls/pl/Layout.tpl61
-rwxr-xr-xdemos/quickstart/protected/controls/pl/RequiresVersion.tpl1
-rwxr-xr-xdemos/quickstart/protected/controls/pl/SearchBox.tpl3
-rwxr-xr-xdemos/quickstart/protected/controls/pl/SinceVersion.tpl1
-rw-r--r--demos/quickstart/protected/controls/pl/TopicList.tpl111
-rw-r--r--demos/quickstart/protected/controls/zh/TopicList.tpl110
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/ActiveRatingList.page2
-rwxr-xr-xdemos/quickstart/protected/pages/ActiveControls/Introduction.page4
-rwxr-xr-xdemos/quickstart/protected/pages/ActiveControls/Samples/TActiveHyperLink/Home.page12
-rwxr-xr-xdemos/quickstart/protected/pages/ActiveControls/Samples/TActiveHyperLink/Home.php2
-rwxr-xr-xdemos/quickstart/protected/pages/ActiveControls/id/ActiveButton.page77
-rwxr-xr-xdemos/quickstart/protected/pages/ActiveControls/id/ActiveCheckBox.page21
-rwxr-xr-xdemos/quickstart/protected/pages/ActiveControls/id/ActiveCustomValidator.page22
-rwxr-xr-xdemos/quickstart/protected/pages/ActiveControls/id/ActiveHyperLink.page14
-rwxr-xr-xdemos/quickstart/protected/pages/ActiveControls/id/ActivePager.page40
-rwxr-xr-xdemos/quickstart/protected/pages/ActiveControls/id/Home.page347
-rwxr-xr-xdemos/quickstart/protected/pages/ActiveControls/id/TActiveButtonClass.pngbin33847 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/ActiveControls/id/postback-callback.pngbin23493 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/Samples/I18N/id/Home.page161
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/Samples/I18N/zh_TW/Home.page155
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/Scripts1.page96
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/Scripts2.page253
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/Scripts3.page29
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/Assets.page69
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/Auth.page171
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/Collections.page135
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/Error.page77
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/I18N.page360
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/Logging.page61
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/MasterContent.page57
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/Performance.page88
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/Scripts.page397
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/Scripts1.page96
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/Scripts2.page253
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/Scripts3.page39
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/Security.page79
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/State.page54
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/Themes.page60
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/exception.gifbin7658 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/exception2.gifbin39000 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/logrouter.gifbin12120 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/mastercontent.gifbin10748 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/es/pcrelation.gifbin6600 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/Assets.page69
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/Auth.page170
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/Collections.page135
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/Error.page77
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/I18N.page336
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/Logging.page61
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/MasterContent.page57
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/Performance.page88
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/Scripts.page334
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/Scripts1.page86
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/Scripts2.page214
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/Scripts3.page35
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/Security.page79
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/State.page54
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/Themes.page60
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/exception.gifbin7658 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/exception2.gifbin39000 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/logrouter.gifbin12120 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/mastercontent.gifbin10748 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Advanced/id/pcrelation.gifbin6600 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Configurations/id/AppConfig.page59
-rwxr-xr-xdemos/quickstart/protected/pages/Configurations/id/Overview.page10
-rwxr-xr-xdemos/quickstart/protected/pages/Configurations/id/PageConfig.page47
-rwxr-xr-xdemos/quickstart/protected/pages/Configurations/id/Templates1.page103
-rwxr-xr-xdemos/quickstart/protected/pages/Configurations/id/Templates2.page99
-rwxr-xr-xdemos/quickstart/protected/pages/Configurations/id/Templates3.page104
-rwxr-xr-xdemos/quickstart/protected/pages/Configurations/id/UrlMapping.page106
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/HtmlArea4.page2
-rw-r--r--demos/quickstart/protected/pages/Controls/Markdown.page2
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/Samples/THyperLink/Home.page12
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/Samples/TImageMap/Home.page4
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/Samples/TInlineFrame/Home.page6
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Button.page16
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Captcha.page43
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/CheckBox.page14
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/ClientScript.page42
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/ColorPicker.page10
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Conditional.page36
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Data.page19
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/DataGrid.page185
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/DataList.page113
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/DatePicker.page64
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Expression.page23
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/FileUpload.page27
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Head.page10
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/HiddenField.page13
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/HtmlArea.page48
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/HyperLink.page11
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Image.page11
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/ImageButton.page11
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/ImageMap.page25
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/InlineFrame.page24
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/JavascriptLogger.page31
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Keyboard.page29
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Label.page11
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/LinkButton.page11
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/List.page99
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Literal.page25
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/MultiView.page43
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/NewControl.page152
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/OutputCache.page46
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Pager.page38
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Panel.page11
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/PlaceHolder.page12
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/RadioButton.page11
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Repeater.page111
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/SafeHtml.page25
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Slider.page50
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Standard.page147
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Statements.page40
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/TabPanel.page55
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Table.page11
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/TextBox.page11
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/TextHighlighter.page25
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Validation.page216
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/Wizard.page100
-rwxr-xr-xdemos/quickstart/protected/pages/Controls/id/wizard.gifbin7081 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Database/ActiveRecord.page2
-rwxr-xr-xdemos/quickstart/protected/pages/Database/SqlMap.page2
-rw-r--r--demos/quickstart/protected/pages/Database/ViewsArUpdate.page14
-rwxr-xr-xdemos/quickstart/protected/pages/Database/id/ActiveRecord.page1000
-rwxr-xr-xdemos/quickstart/protected/pages/Database/id/DAO.page163
-rwxr-xr-xdemos/quickstart/protected/pages/Database/id/Scaffold.page130
-rwxr-xr-xdemos/quickstart/protected/pages/Database/id/SqlMap.page210
-rwxr-xr-xdemos/quickstart/protected/pages/Database/id/ar_objects.pngbin19837 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Database/id/ar_relations.pngbin9693 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Database/id/diagram.pngbin30320 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Database/id/object_states.pngbin9596 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Database/id/sqlmap_active_record.pngbin17351 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Database/pl/ActiveRecord.page1144
-rwxr-xr-xdemos/quickstart/protected/pages/Database/pl/ar_objects.pngbin20638 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Database/pl/ar_relations.pngbin9693 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Database/pl/diagram.pngbin30320 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Database/pl/object_states.pngbin9596 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Database/pl/sqlmap_active_record.pngbin17351 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/Pages.page2
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/id/Applications.page55
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/id/Architecture.page13
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/id/Components.page128
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/id/Controls.page51
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/id/Hangman.page14
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/id/Modules.page50
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/id/Pages.page23
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/id/Services.page34
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/id/applifecycles.gifbin31200 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/id/applifecycles.vsdbin220672 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/id/classtree.gifbin18320 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/id/classtree.vsdbin72704 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/id/directory.gifbin3967 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/id/lifecycles.gifbin60897 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/id/lifecycles.vsdbin225280 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/id/objectdiagram.gifbin7700 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/id/objectdiagram.vsdbin159744 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/ja/Applications.page55
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/ja/Architecture.page15
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/ja/Components.page128
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/ja/Controls.page51
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/ja/Hangman.page14
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/ja/Modules.page50
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/ja/Pages.page23
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/ja/Services.page34
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/ja/applifecycles.gifbin31200 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/ja/classtree.gifbin18320 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/ja/directory.gifbin3967 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/ja/lifecycles.gifbin60897 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/ja/objectdiagram.gifbin7700 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/pl/Applications.page58
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/pl/Architecture.page15
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/pl/Components.page128
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/pl/Controls.page51
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/pl/Hangman.page16
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/pl/Modules.page50
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/pl/Pages.page25
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/pl/Services.page34
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/pl/applifecycles.gifbin38604 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/pl/classtree.gifbin18320 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/pl/directory.gifbin3967 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/pl/lifecycles.gifbin60897 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Fundamentals/pl/objectdiagram.gifbin7700 -> 0 bytes
-rw-r--r--demos/quickstart/protected/pages/GettingStarted/CommandLine.page12
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/HelloWorld.page2
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/Installation.page6
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/Introduction.page6
-rw-r--r--demos/quickstart/protected/pages/GettingStarted/Upgrading32.page8
-rw-r--r--demos/quickstart/protected/pages/GettingStarted/Wsat.page10
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/de/Introduction.page62
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/es/AboutPrado.page86
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/es/Installation.page29
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/es/Introduction.page60
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/fr/AboutPrado.page71
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/fr/CommandLine.page94
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/fr/HelloWorld.page83
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/fr/Installation.page29
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/fr/Introduction.page19
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/fr/NewFeatures.page24
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/fr/Upgrading.page63
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/fr/directory.gifbin2685 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/fr/sequence.gifbin5793 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/id/AboutPrado.page70
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/id/CommandLine.page93
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/id/HelloWorld.page82
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/id/Installation.page29
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/id/Introduction.page62
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/id/NewFeatures.page41
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/id/Upgrading.page64
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/id/directory.gifbin2685 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/id/sequence.gifbin6529 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/id/sequence.vsdbin143872 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/ja/AboutPrado.page79
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/ja/CommandLine.page106
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/ja/HelloWorld.page89
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/ja/Installation.page33
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/ja/Introduction.page62
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/ja/NewFeatures.page35
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/ja/Upgrading.page64
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/ja/directory.gifbin2685 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/ja/sequence.gifbin5793 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/pl/AboutPrado.page71
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/pl/CommandLine.page101
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/pl/HelloWorld.page82
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/pl/Installation.page29
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/pl/Introduction.page23
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/pl/NewFeatures.page33
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/pl/Upgrading.page64
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/pl/directory.gifbin2685 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/pl/sequence.gifbin5793 -> 0 bytes
-rw-r--r--demos/quickstart/protected/pages/GettingStarted/wsat_generate_ar.pngbin75503 -> 69857 bytes
-rw-r--r--demos/quickstart/protected/pages/GettingStarted/wsat_login.pngbin47951 -> 45418 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/GettingStarted/zh/Introduction.page20
-rw-r--r--demos/quickstart/protected/pages/JuiControls/Home.page14
-rw-r--r--demos/quickstart/protected/pages/JuiControls/Interactions.page12
-rw-r--r--demos/quickstart/protected/pages/JuiControls/Widgets.page10
-rwxr-xr-xdemos/quickstart/protected/pages/Services/id/SoapService.page164
-rwxr-xr-xdemos/quickstart/protected/pages/Tutorial/AjaxChat.page2
-rwxr-xr-xdemos/quickstart/protected/pages/Tutorial/CurrencyConverter.page8
-rwxr-xr-xdemos/quickstart/protected/pages/Tutorial/fr/AjaxChat.page755
-rwxr-xr-xdemos/quickstart/protected/pages/Tutorial/fr/CurrencyConverter.page404
-rwxr-xr-xdemos/quickstart/protected/pages/Tutorial/fr/chat1.pngbin10533 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Tutorial/fr/chat2.pngbin13409 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Tutorial/fr/example1.pngbin11139 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Tutorial/fr/example2.pngbin13842 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Tutorial/id/AddressBook.page8
-rwxr-xr-xdemos/quickstart/protected/pages/Tutorial/id/AjaxChat.page685
-rwxr-xr-xdemos/quickstart/protected/pages/Tutorial/id/CurrencyConverter.page349
-rwxr-xr-xdemos/quickstart/protected/pages/Tutorial/id/chat1.pngbin10533 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Tutorial/id/chat2.pngbin13409 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Tutorial/id/example1.pngbin11139 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/Tutorial/id/example2.pngbin13842 -> 0 bytes
-rwxr-xr-xdemos/quickstart/protected/pages/pl/Construction.page5
-rwxr-xr-xdemos/quickstart/protected/pages/pl/Search.page29
-rwxr-xr-xdemos/quickstart/protected/pages/pl/ViewSource.page31
-rw-r--r--[-rwxr-xr-x]demos/quickstart/themes/PradoSoft/pradologo.gifbin3039 -> 2583 bytes
-rw-r--r--demos/site/.htaccess8
-rwxr-xr-xdemos/site/assets/.gitignore2
-rwxr-xr-xdemos/site/index.php17
-rwxr-xr-xdemos/site/protected/.htaccess1
-rw-r--r--demos/site/protected/Common/SimpleMenu.php86
-rw-r--r--demos/site/protected/Layouts/MainLayout.php5
-rw-r--r--demos/site/protected/Layouts/MainLayout.tpl56
-rw-r--r--demos/site/protected/Pages/About.page56
-rw-r--r--demos/site/protected/Pages/Demos.page32
-rw-r--r--demos/site/protected/Pages/Documentation.page36
-rw-r--r--demos/site/protected/Pages/Download.page117
-rwxr-xr-xdemos/site/protected/Pages/Home.page56
-rw-r--r--demos/site/protected/Pages/License.page29
-rw-r--r--demos/site/protected/Pages/Tos.page43
-rw-r--r--demos/site/protected/application.xml40
-rwxr-xr-xdemos/site/protected/runtime/.gitignore2
-rw-r--r--demos/site/themes/Prado/favicon.icobin0 -> 3638 bytes
-rw-r--r--demos/site/themes/Prado/imgs/bg.gifbin0 -> 307 bytes
-rw-r--r--demos/site/themes/Prado/imgs/bigmantis.jpgbin0 -> 13447 bytes
-rw-r--r--demos/site/themes/Prado/imgs/bigmantis.jpg.1bin0 -> 13447 bytes
-rw-r--r--demos/site/themes/Prado/imgs/bottomgradient.gifbin0 -> 269 bytes
-rw-r--r--demos/site/themes/Prado/imgs/bullet_one.gifbin0 -> 343 bytes
-rw-r--r--demos/site/themes/Prado/imgs/bullet_three.gifbin0 -> 369 bytes
-rw-r--r--demos/site/themes/Prado/imgs/bullet_two.gifbin0 -> 355 bytes
-rw-r--r--demos/site/themes/Prado/imgs/mainmenu_active.gifbin0 -> 154 bytes
-rw-r--r--demos/site/themes/Prado/imgs/mainmenu_hover.gifbin0 -> 155 bytes
-rw-r--r--demos/site/themes/Prado/imgs/pradodownload.gifbin0 -> 5819 bytes
-rwxr-xr-xdemos/site/themes/Prado/imgs/pradoheader.gifbin0 -> 15430 bytes
-rw-r--r--demos/site/themes/Prado/imgs/statementsbg.gifbin0 -> 327 bytes
-rwxr-xr-xdemos/site/themes/Prado/style.css765
-rwxr-xr-xdemos/sqlmap/protected/pages/Manual/Installing.page12
-rwxr-xr-xdemos/sqlmap/protected/pages/Manual/Layout.tpl4
-rwxr-xr-xdemos/time-tracker/protected/App_Code/Dao/BaseDao.php4
-rwxr-xr-xdemos/time-tracker/protected/App_Code/Dao/ProjectDao.php4
-rwxr-xr-xdemos/time-tracker/protected/App_Code/Dao/ProjectRecord.php4
-rwxr-xr-xdemos/time-tracker/protected/App_Code/Dao/UserDao.php4
-rwxr-xr-xdemos/time-tracker/protected/App_Code/DaoManager.php4
-rwxr-xr-xdemos/time-tracker/protected/App_Code/TimeTrackerException.php4
-rwxr-xr-xdemos/time-tracker/protected/App_Code/TimeTrackerUser.php4
-rwxr-xr-xdemos/time-tracker/protected/App_Code/UserManager.php4
-rwxr-xr-xdemos/time-tracker/protected/App_Data/MySQL4/mysql-reset.sql6
-rwxr-xr-xdemos/time-tracker/protected/App_Data/MySQL4/time-tracker-mysql.sql6
-rwxr-xr-xdemos/time-tracker/protected/App_Data/TimeTrackerUserTypeHandler.php4
-rwxr-xr-xdemos/time-tracker/protected/pages/TimeTracker/Login.php4
-rwxr-xr-xdemos/time-tracker/protected/pages/TimeTracker/Logout.php4
-rwxr-xr-xdemos/time-tracker/protected/pages/TimeTracker/MainLayout.tpl2
-rwxr-xr-xdemos/time-tracker/protected/pages/TimeTracker/SiteMap.php4
-rwxr-xr-xdemos/time-tracker/protected/pages/TimeTracker/UserCreate.php4
-rwxr-xr-xdemos/time-tracker/protected/pages/TimeTracker/UserList.php4
-rwxr-xr-xdemos/time-tracker/tests/unit/UserDaoTestCase.php12
-rw-r--r--docs/sqlmap/latex/sqlmap.tex2
-rw-r--r--docs/sqlmap/latex/sqlmap_tut.tex2
-rw-r--r--editors/Textmate/Prado.tmbundle/Snippets/TActiveHyperLink.tmSnippet2
-rw-r--r--editors/Textmate/Prado.tmbundle/Snippets/TCircleHotSpot.tmSnippet4
-rw-r--r--editors/Textmate/Prado.tmbundle/Snippets/THyperLink.tmSnippet2
-rw-r--r--editors/Textmate/Prado.tmbundle/Snippets/TImageMap.tmSnippet4
-rw-r--r--editors/Textmate/Prado.tmbundle/Snippets/TPolygonHotSpot.tmSnippet4
-rw-r--r--editors/Textmate/Prado.tmbundle/Snippets/TRectangleHotSpot.tmSnippet4
-rw-r--r--framework/Caching/TAPCCache.php6
-rw-r--r--framework/Caching/TCache.php6
-rw-r--r--framework/Caching/TDbCache.php6
-rw-r--r--framework/Caching/TEACache.php2
-rw-r--r--framework/Caching/TMemCache.php6
-rw-r--r--framework/Caching/TSqliteCache.php6
-rw-r--r--framework/Caching/TXCache.php6
-rw-r--r--framework/Collections/TAttributeCollection.php6
-rw-r--r--framework/Collections/TDummyDataSource.php6
-rw-r--r--framework/Collections/TList.php6
-rw-r--r--framework/Collections/TListItemCollection.php6
-rw-r--r--framework/Collections/TMap.php6
-rw-r--r--framework/Collections/TPagedDataSource.php6
-rw-r--r--framework/Collections/TPagedList.php6
-rw-r--r--framework/Collections/TPriorityList.php6
-rw-r--r--framework/Collections/TPriorityMap.php6
-rw-r--r--framework/Collections/TQueue.php6
-rw-r--r--framework/Collections/TStack.php6
-rw-r--r--framework/Data/ActiveRecord/Exceptions/TActiveRecordException.php6
-rw-r--r--framework/Data/ActiveRecord/Relations/TActiveRecordBelongsTo.php6
-rw-r--r--framework/Data/ActiveRecord/Relations/TActiveRecordHasMany.php6
-rw-r--r--framework/Data/ActiveRecord/Relations/TActiveRecordHasManyAssociation.php6
-rw-r--r--framework/Data/ActiveRecord/Relations/TActiveRecordHasOne.php6
-rw-r--r--framework/Data/ActiveRecord/Relations/TActiveRecordRelation.php6
-rw-r--r--framework/Data/ActiveRecord/Relations/TActiveRecordRelationContext.php6
-rw-r--r--framework/Data/ActiveRecord/Scaffold/InputBuilder/TIbmScaffoldInput.php6
-rw-r--r--framework/Data/ActiveRecord/Scaffold/InputBuilder/TMssqlScaffoldInput.php6
-rw-r--r--framework/Data/ActiveRecord/Scaffold/InputBuilder/TMysqlScaffoldInput.php6
-rw-r--r--framework/Data/ActiveRecord/Scaffold/InputBuilder/TPgsqlScaffoldInput.php6
-rw-r--r--framework/Data/ActiveRecord/Scaffold/InputBuilder/TScaffoldInputBase.php6
-rw-r--r--framework/Data/ActiveRecord/Scaffold/InputBuilder/TScaffoldInputCommon.php6
-rw-r--r--framework/Data/ActiveRecord/Scaffold/InputBuilder/TSqliteScaffoldInput.php6
-rw-r--r--framework/Data/ActiveRecord/Scaffold/TScaffoldBase.php6
-rw-r--r--framework/Data/ActiveRecord/Scaffold/TScaffoldEditView.php6
-rw-r--r--framework/Data/ActiveRecord/Scaffold/TScaffoldListView.php6
-rw-r--r--framework/Data/ActiveRecord/Scaffold/TScaffoldSearch.php6
-rw-r--r--framework/Data/ActiveRecord/Scaffold/TScaffoldView.php6
-rw-r--r--framework/Data/ActiveRecord/TActiveRecord.php8
-rw-r--r--framework/Data/ActiveRecord/TActiveRecordConfig.php6
-rw-r--r--framework/Data/ActiveRecord/TActiveRecordCriteria.php6
-rw-r--r--framework/Data/ActiveRecord/TActiveRecordGateway.php6
-rw-r--r--framework/Data/ActiveRecord/TActiveRecordManager.php6
-rw-r--r--framework/Data/Common/Mssql/TMssqlCommandBuilder.php6
-rw-r--r--framework/Data/Common/Mssql/TMssqlMetaData.php6
-rw-r--r--framework/Data/Common/Mssql/TMssqlTableColumn.php6
-rw-r--r--framework/Data/Common/Mssql/TMssqlTableInfo.php6
-rw-r--r--framework/Data/Common/Mysql/TMysqlCommandBuilder.php6
-rw-r--r--framework/Data/Common/Mysql/TMysqlMetaData.php6
-rw-r--r--framework/Data/Common/Mysql/TMysqlTableColumn.php6
-rw-r--r--framework/Data/Common/Mysql/TMysqlTableInfo.php6
-rw-r--r--framework/Data/Common/Oracle/TOracleCommandBuilder.php6
-rw-r--r--framework/Data/Common/Oracle/TOracleMetaData.php6
-rw-r--r--framework/Data/Common/Oracle/TOracleTableColumn.php6
-rw-r--r--framework/Data/Common/Oracle/TOracleTableInfo.php6
-rw-r--r--framework/Data/Common/Pgsql/TPgsqlCommandBuilder.php6
-rw-r--r--framework/Data/Common/Pgsql/TPgsqlMetaData.php6
-rw-r--r--framework/Data/Common/Pgsql/TPgsqlTableColumn.php6
-rw-r--r--framework/Data/Common/Pgsql/TPgsqlTableInfo.php6
-rw-r--r--framework/Data/Common/Sqlite/TSqliteCommandBuilder.php6
-rw-r--r--framework/Data/Common/Sqlite/TSqliteMetaData.php6
-rw-r--r--framework/Data/Common/Sqlite/TSqliteTableColumn.php6
-rw-r--r--framework/Data/Common/Sqlite/TSqliteTableInfo.php6
-rw-r--r--framework/Data/Common/TDbCommandBuilder.php6
-rw-r--r--framework/Data/Common/TDbMetaData.php6
-rw-r--r--framework/Data/Common/TDbTableColumn.php6
-rw-r--r--framework/Data/Common/TDbTableInfo.php6
-rw-r--r--framework/Data/DataGateway/TDataGatewayCommand.php6
-rw-r--r--framework/Data/DataGateway/TSqlCriteria.php6
-rw-r--r--framework/Data/DataGateway/TTableGateway.php6
-rw-r--r--framework/Data/SqlMap/Configuration/TDiscriminator.php6
-rw-r--r--framework/Data/SqlMap/Configuration/TInlineParameterMapParser.php6
-rw-r--r--framework/Data/SqlMap/Configuration/TParameterMap.php6
-rw-r--r--framework/Data/SqlMap/Configuration/TParameterProperty.php6
-rw-r--r--framework/Data/SqlMap/Configuration/TResultMap.php6
-rw-r--r--framework/Data/SqlMap/Configuration/TResultProperty.php6
-rw-r--r--framework/Data/SqlMap/Configuration/TSimpleDynamicParser.php6
-rw-r--r--framework/Data/SqlMap/Configuration/TSqlMapCacheModel.php6
-rw-r--r--framework/Data/SqlMap/Configuration/TSqlMapStatement.php6
-rw-r--r--framework/Data/SqlMap/Configuration/TSqlMapXmlConfiguration.php6
-rw-r--r--framework/Data/SqlMap/DataMapper/TFastSqlMapApplicationCache.php6
-rw-r--r--framework/Data/SqlMap/DataMapper/TLazyLoadList.php6
-rw-r--r--framework/Data/SqlMap/DataMapper/TPropertyAccess.php6
-rw-r--r--framework/Data/SqlMap/DataMapper/TSqlMapCache.php6
-rw-r--r--framework/Data/SqlMap/DataMapper/TSqlMapPagedList.php6
-rw-r--r--framework/Data/SqlMap/DataMapper/TSqlMapTypeHandlerRegistry.php6
-rw-r--r--framework/Data/SqlMap/Statements/TCachingStatement.php6
-rw-r--r--framework/Data/SqlMap/Statements/TDeleteMappedStatement.php6
-rw-r--r--framework/Data/SqlMap/Statements/TInsertMappedStatement.php6
-rw-r--r--framework/Data/SqlMap/Statements/TMappedStatement.php6
-rw-r--r--framework/Data/SqlMap/Statements/TPreparedCommand.php6
-rw-r--r--framework/Data/SqlMap/Statements/TPreparedStatement.php6
-rw-r--r--framework/Data/SqlMap/Statements/TPreparedStatementFactory.php6
-rw-r--r--framework/Data/SqlMap/Statements/TSelectMappedStatement.php6
-rw-r--r--framework/Data/SqlMap/Statements/TSimpleDynamicSql.php6
-rw-r--r--framework/Data/SqlMap/Statements/TStaticSql.php6
-rw-r--r--framework/Data/SqlMap/Statements/TUpdateMappedStatement.php6
-rw-r--r--framework/Data/SqlMap/TSqlMapConfig.php6
-rw-r--r--framework/Data/SqlMap/TSqlMapGateway.php6
-rw-r--r--framework/Data/SqlMap/TSqlMapManager.php6
-rw-r--r--framework/Data/TDataSourceConfig.php6
-rw-r--r--framework/Data/TDbCommand.php6
-rw-r--r--framework/Data/TDbConnection.php6
-rw-r--r--framework/Data/TDbDataReader.php6
-rw-r--r--framework/Data/TDbTransaction.php6
-rw-r--r--framework/Exceptions/TErrorHandler.php12
-rw-r--r--framework/Exceptions/TException.php6
-rw-r--r--framework/I18N/TChoiceFormat.php6
-rw-r--r--framework/I18N/TDateFormat.php6
-rw-r--r--framework/I18N/TGlobalization.php6
-rw-r--r--framework/I18N/TGlobalizationAutoDetect.php6
-rw-r--r--framework/I18N/TI18NControl.php6
-rw-r--r--framework/I18N/TNumberFormat.php6
-rw-r--r--framework/I18N/TTranslate.php6
-rw-r--r--framework/I18N/TTranslateParameter.php6
-rw-r--r--framework/I18N/Translation.php6
-rw-r--r--framework/IO/TTextWriter.php6
-rw-r--r--framework/PradoBase.php12
-rw-r--r--framework/Security/IUserManager.php6
-rw-r--r--framework/Security/TAuthManager.php6
-rw-r--r--framework/Security/TAuthorizationRule.php6
-rw-r--r--framework/Security/TDbUserManager.php6
-rw-r--r--framework/Security/TSecurityManager.php6
-rw-r--r--framework/Security/TUser.php6
-rw-r--r--framework/Security/TUserManager.php6
-rw-r--r--framework/TApplication.php6
-rw-r--r--framework/TApplicationComponent.php6
-rw-r--r--framework/TComponent.php6
-rw-r--r--framework/TModule.php6
-rw-r--r--framework/TService.php6
-rw-r--r--framework/TShellApplication.php6
-rw-r--r--framework/Util/TCallChain.php6
-rw-r--r--framework/Util/TClassBehavior.php4
-rw-r--r--framework/Util/TDataFieldAccessor.php6
-rw-r--r--framework/Util/TDateTimeStamp.php6
-rw-r--r--framework/Util/TLogRouter.php8
-rw-r--r--framework/Util/TLogger.php6
-rw-r--r--framework/Util/TParameterModule.php6
-rw-r--r--framework/Util/TRpcClient.php4
-rw-r--r--framework/Util/TSimpleDateFormatter.php6
-rw-r--r--framework/Util/TVarDumper.php6
-rw-r--r--framework/Web/Javascripts/TJavaScript.php6
-rw-r--r--framework/Web/Javascripts/packages.php26
-rw-r--r--framework/Web/Javascripts/source/prado/prado.js2
-rw-r--r--framework/Web/Services/TFeedService.php6
-rw-r--r--framework/Web/Services/TJsonService.php6
-rw-r--r--framework/Web/Services/TPageService.php6
-rw-r--r--framework/Web/Services/TRpcService.php4
-rw-r--r--framework/Web/Services/TSoapService.php6
-rw-r--r--framework/Web/TAssetManager.php6
-rw-r--r--framework/Web/TCacheHttpSession.php6
-rw-r--r--framework/Web/THttpRequest.php6
-rw-r--r--framework/Web/THttpResponse.php6
-rw-r--r--framework/Web/THttpResponseAdapter.php6
-rw-r--r--framework/Web/THttpSession.php6
-rw-r--r--framework/Web/THttpUtility.php6
-rw-r--r--framework/Web/TUrlManager.php6
-rw-r--r--framework/Web/TUrlMapping.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveButton.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveCheckBox.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveCheckBoxList.php6
-rwxr-xr-xframework/Web/UI/ActiveControls/TActiveClientScript.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveControlAdapter.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveCustomValidator.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveDataGrid.php2
-rw-r--r--framework/Web/UI/ActiveControls/TActiveDataList.php2
-rwxr-xr-xframework/Web/UI/ActiveControls/TActiveDatePicker.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveDropDownList.php6
-rwxr-xr-xframework/Web/UI/ActiveControls/TActiveFileUpload.php7
-rw-r--r--framework/Web/UI/ActiveControls/TActiveHiddenField.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveHyperLink.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveImage.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveImageButton.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveLabel.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveLinkButton.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveListBox.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveListControlAdapter.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveMultiView.php2
-rw-r--r--framework/Web/UI/ActiveControls/TActivePageAdapter.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActivePager.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActivePanel.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveRadioButton.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveRadioButtonList.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveRatingList.php6
-rw-r--r--framework/Web/UI/ActiveControls/TActiveTableCell.php2
-rw-r--r--framework/Web/UI/ActiveControls/TActiveTableRow.php2
-rw-r--r--framework/Web/UI/ActiveControls/TActiveTextBox.php6
-rw-r--r--framework/Web/UI/ActiveControls/TAutoComplete.php6
-rw-r--r--framework/Web/UI/ActiveControls/TBaseActiveControl.php6
-rw-r--r--framework/Web/UI/ActiveControls/TCallback.php6
-rw-r--r--framework/Web/UI/ActiveControls/TCallbackClientScript.php6
-rw-r--r--framework/Web/UI/ActiveControls/TCallbackClientSide.php6
-rw-r--r--framework/Web/UI/ActiveControls/TCallbackEventParameter.php6
-rw-r--r--framework/Web/UI/ActiveControls/TCallbackOptions.php6
-rwxr-xr-xframework/Web/UI/ActiveControls/TCallbackResponseAdapter.php6
-rwxr-xr-xframework/Web/UI/ActiveControls/TDraggable.php10
-rwxr-xr-xframework/Web/UI/ActiveControls/TDropContainer.php8
-rw-r--r--framework/Web/UI/ActiveControls/TEventTriggeredCallback.php6
-rw-r--r--framework/Web/UI/ActiveControls/TInPlaceTextBox.php6
-rw-r--r--framework/Web/UI/ActiveControls/TTimeTriggeredCallback.php6
-rw-r--r--framework/Web/UI/ActiveControls/TTriggeredCallback.php6
-rw-r--r--framework/Web/UI/ActiveControls/TValueTriggeredCallback.php6
-rw-r--r--framework/Web/UI/JuiControls/TJuiAutoComplete.php6
-rw-r--r--framework/Web/UI/JuiControls/TJuiControlAdapter.php10
-rw-r--r--framework/Web/UI/JuiControls/TJuiDatePicker.php7
-rw-r--r--framework/Web/UI/JuiControls/TJuiDialog.php6
-rw-r--r--framework/Web/UI/JuiControls/TJuiDraggable.php6
-rw-r--r--framework/Web/UI/JuiControls/TJuiDroppable.php6
-rw-r--r--framework/Web/UI/JuiControls/TJuiProgressbar.php6
-rw-r--r--framework/Web/UI/JuiControls/TJuiResizable.php6
-rw-r--r--framework/Web/UI/JuiControls/TJuiSelectable.php6
-rw-r--r--framework/Web/UI/JuiControls/TJuiSortable.php6
-rw-r--r--framework/Web/UI/TCachePageStatePersister.php6
-rw-r--r--framework/Web/UI/TClientScriptManager.php6
-rw-r--r--framework/Web/UI/TCompositeControl.php6
-rw-r--r--framework/Web/UI/TControl.php6
-rw-r--r--framework/Web/UI/TControlAdapter.php6
-rw-r--r--framework/Web/UI/TForm.php6
-rw-r--r--framework/Web/UI/THtmlWriter.php6
-rw-r--r--framework/Web/UI/TPage.php6
-rw-r--r--framework/Web/UI/TPageStatePersister.php6
-rw-r--r--framework/Web/UI/TSessionPageStatePersister.php6
-rw-r--r--framework/Web/UI/TTemplateControl.php6
-rw-r--r--framework/Web/UI/TTemplateControlInheritable.php4
-rw-r--r--framework/Web/UI/TTemplateManager.php6
-rw-r--r--framework/Web/UI/TThemeManager.php6
-rw-r--r--framework/Web/UI/WebControls/TAccordion.php6
-rw-r--r--framework/Web/UI/WebControls/TBaseDataList.php6
-rw-r--r--framework/Web/UI/WebControls/TBaseValidator.php6
-rw-r--r--framework/Web/UI/WebControls/TBoundColumn.php6
-rw-r--r--framework/Web/UI/WebControls/TBulletedList.php6
-rw-r--r--framework/Web/UI/WebControls/TButton.php6
-rw-r--r--framework/Web/UI/WebControls/TButtonColumn.php6
-rw-r--r--framework/Web/UI/WebControls/TCaptcha.php6
-rw-r--r--framework/Web/UI/WebControls/TCaptchaValidator.php6
-rw-r--r--framework/Web/UI/WebControls/TCheckBox.php6
-rw-r--r--framework/Web/UI/WebControls/TCheckBoxColumn.php6
-rw-r--r--framework/Web/UI/WebControls/TCheckBoxList.php6
-rw-r--r--framework/Web/UI/WebControls/TClientScript.php6
-rw-r--r--framework/Web/UI/WebControls/TColorPicker.php6
-rw-r--r--framework/Web/UI/WebControls/TCompareValidator.php6
-rw-r--r--framework/Web/UI/WebControls/TConditional.php6
-rw-r--r--framework/Web/UI/WebControls/TContent.php6
-rw-r--r--framework/Web/UI/WebControls/TContentPlaceHolder.php6
-rw-r--r--framework/Web/UI/WebControls/TCustomValidator.php6
-rw-r--r--framework/Web/UI/WebControls/TDataBoundControl.php6
-rw-r--r--framework/Web/UI/WebControls/TDataGrid.php6
-rw-r--r--framework/Web/UI/WebControls/TDataGridColumn.php6
-rw-r--r--framework/Web/UI/WebControls/TDataGridItemRenderer.php6
-rw-r--r--framework/Web/UI/WebControls/TDataGridPagerStyle.php6
-rw-r--r--framework/Web/UI/WebControls/TDataList.php6
-rw-r--r--framework/Web/UI/WebControls/TDataListItemRenderer.php6
-rw-r--r--framework/Web/UI/WebControls/TDataRenderer.php6
-rw-r--r--framework/Web/UI/WebControls/TDataSourceControl.php6
-rw-r--r--framework/Web/UI/WebControls/TDataSourceView.php6
-rw-r--r--framework/Web/UI/WebControls/TDataTypeValidator.php6
-rw-r--r--framework/Web/UI/WebControls/TDatePicker.php6
-rw-r--r--framework/Web/UI/WebControls/TDropDownList.php6
-rw-r--r--framework/Web/UI/WebControls/TDropDownListColumn.php6
-rw-r--r--framework/Web/UI/WebControls/TEditCommandColumn.php6
-rw-r--r--framework/Web/UI/WebControls/TEmailAddressValidator.php6
-rw-r--r--framework/Web/UI/WebControls/TExpression.php6
-rw-r--r--framework/Web/UI/WebControls/TFileUpload.php6
-rw-r--r--framework/Web/UI/WebControls/TFlushOutput.php4
-rw-r--r--framework/Web/UI/WebControls/TFont.php6
-rw-r--r--framework/Web/UI/WebControls/THead.php6
-rw-r--r--framework/Web/UI/WebControls/THeader1.php6
-rw-r--r--framework/Web/UI/WebControls/THeader2.php6
-rw-r--r--framework/Web/UI/WebControls/THeader3.php6
-rw-r--r--framework/Web/UI/WebControls/THeader4.php6
-rw-r--r--framework/Web/UI/WebControls/THeader5.php6
-rw-r--r--framework/Web/UI/WebControls/THeader6.php6
-rw-r--r--framework/Web/UI/WebControls/THiddenField.php2
-rw-r--r--framework/Web/UI/WebControls/THtmlArea.php8
-rw-r--r--framework/Web/UI/WebControls/THtmlArea4.php8
-rw-r--r--framework/Web/UI/WebControls/THtmlElement.php6
-rw-r--r--framework/Web/UI/WebControls/THyperLink.php2
-rw-r--r--framework/Web/UI/WebControls/THyperLinkColumn.php6
-rw-r--r--framework/Web/UI/WebControls/TImage.php6
-rw-r--r--framework/Web/UI/WebControls/TImageButton.php6
-rw-r--r--framework/Web/UI/WebControls/TImageMap.php6
-rw-r--r--framework/Web/UI/WebControls/TInlineFrame.php6
-rw-r--r--framework/Web/UI/WebControls/TItemDataRenderer.php6
-rw-r--r--framework/Web/UI/WebControls/TJavascriptLogger.php6
-rw-r--r--framework/Web/UI/WebControls/TKeyboard.php6
-rw-r--r--framework/Web/UI/WebControls/TLabel.php6
-rw-r--r--framework/Web/UI/WebControls/TLinkButton.php6
-rw-r--r--framework/Web/UI/WebControls/TListBox.php6
-rw-r--r--framework/Web/UI/WebControls/TListControl.php6
-rw-r--r--framework/Web/UI/WebControls/TListControlValidator.php6
-rw-r--r--framework/Web/UI/WebControls/TListItem.php6
-rw-r--r--framework/Web/UI/WebControls/TLiteral.php6
-rw-r--r--framework/Web/UI/WebControls/TLiteralColumn.php6
-rw-r--r--framework/Web/UI/WebControls/TMarkdown.php6
-rw-r--r--framework/Web/UI/WebControls/TMultiView.php6
-rw-r--r--framework/Web/UI/WebControls/TOutputCache.php6
-rw-r--r--framework/Web/UI/WebControls/TPager.php6
-rw-r--r--framework/Web/UI/WebControls/TPanel.php6
-rw-r--r--framework/Web/UI/WebControls/TPanelStyle.php6
-rw-r--r--framework/Web/UI/WebControls/TPlaceHolder.php6
-rw-r--r--framework/Web/UI/WebControls/TRadioButton.php6
-rw-r--r--framework/Web/UI/WebControls/TRadioButtonList.php6
-rw-r--r--framework/Web/UI/WebControls/TRangeValidator.php6
-rw-r--r--framework/Web/UI/WebControls/TRatingList.php6
-rw-r--r--framework/Web/UI/WebControls/TReCaptcha.php2
-rw-r--r--framework/Web/UI/WebControls/TReCaptchaValidator.php2
-rw-r--r--framework/Web/UI/WebControls/TRegularExpressionValidator.php6
-rw-r--r--framework/Web/UI/WebControls/TRepeatInfo.php6
-rw-r--r--framework/Web/UI/WebControls/TRepeater.php6
-rw-r--r--framework/Web/UI/WebControls/TRepeaterItemRenderer.php6
-rw-r--r--framework/Web/UI/WebControls/TRequiredFieldValidator.php6
-rw-r--r--framework/Web/UI/WebControls/TSafeHtml.php6
-rw-r--r--framework/Web/UI/WebControls/TSlider.php6
-rw-r--r--framework/Web/UI/WebControls/TStatements.php6
-rw-r--r--framework/Web/UI/WebControls/TStyle.php6
-rw-r--r--framework/Web/UI/WebControls/TStyleSheet.php6
-rw-r--r--framework/Web/UI/WebControls/TTabPanel.php6
-rw-r--r--framework/Web/UI/WebControls/TTable.php6
-rw-r--r--framework/Web/UI/WebControls/TTableCell.php6
-rw-r--r--framework/Web/UI/WebControls/TTableFooterRow.php6
-rw-r--r--framework/Web/UI/WebControls/TTableHeaderCell.php6
-rw-r--r--framework/Web/UI/WebControls/TTableHeaderRow.php6
-rw-r--r--framework/Web/UI/WebControls/TTableRow.php6
-rw-r--r--framework/Web/UI/WebControls/TTemplateColumn.php6
-rw-r--r--framework/Web/UI/WebControls/TTextBox.php6
-rw-r--r--framework/Web/UI/WebControls/TTextHighlighter.php6
-rw-r--r--framework/Web/UI/WebControls/TTextProcessor.php6
-rw-r--r--framework/Web/UI/WebControls/TValidationSummary.php6
-rw-r--r--framework/Web/UI/WebControls/TWebControl.php6
-rw-r--r--framework/Web/UI/WebControls/TWebControlAdapter.php6
-rw-r--r--framework/Web/UI/WebControls/TWebControlDecorator.php6
-rw-r--r--framework/Web/UI/WebControls/TWizard.php6
-rw-r--r--framework/Web/UI/WebControls/TWizardNavigationButtonStyle.php6
-rw-r--r--framework/Web/UI/WebControls/TXmlTransform.php6
-rw-r--r--framework/Web/UI/WebControls/assets/captcha.php6
-rw-r--r--framework/Wsat/TWsatARGenerator.php8
-rw-r--r--framework/Wsat/TWsatBaseGenerator.php8
-rw-r--r--framework/Wsat/TWsatScaffoldingGenerator.php8
-rw-r--r--framework/Wsat/TWsatService.php8
-rw-r--r--framework/Wsat/pages/TWsatGenerateAR.php6
-rw-r--r--framework/Wsat/pages/TWsatHome.page2
-rw-r--r--framework/Wsat/pages/TWsatHome.php6
-rw-r--r--framework/Wsat/pages/TWsatLogin.page5
-rw-r--r--framework/Wsat/pages/TWsatLogin.php6
-rw-r--r--framework/Wsat/pages/TWsatScaffolding.php17
-rw-r--r--framework/Wsat/pages/layout/TWsatLayout.tpl7
-rw-r--r--framework/Wsat/themes/PradoSoft/imgs/pradologo.gifbin3039 -> 2583 bytes
-rw-r--r--framework/Xml/TXmlDocument.php6
-rw-r--r--framework/interfaces.php6
-rw-r--r--framework/prado.php6
-rw-r--r--framework/pradolite.php163
-rw-r--r--index.html17
-rw-r--r--jQuery-WIP.txt34
-rw-r--r--requirements/index.php8
-rw-r--r--requirements/messages-bg.txt35
-rw-r--r--requirements/messages-id.txt41
-rw-r--r--requirements/messages-zh.txt41
-rw-r--r--requirements/template-bg.html50
-rw-r--r--requirements/template-id.html49
-rw-r--r--requirements/template-zh.html48
-rw-r--r--requirements/template.html2
-rwxr-xr-xtests/FunctionalTests/active-controls/protected/pages/ActiveHyperLinkTest.page2
-rwxr-xr-xtests/FunctionalTests/active-controls/protected/pages/ActiveHyperLinkTest.php4
-rwxr-xr-xtests/FunctionalTests/active-controls/tests/ActiveHyperLinkTestCase.php2
-rwxr-xr-x[-rw-r--r--]tests/FunctionalTests/issues/protected/pages/Issue516.page0
-rwxr-xr-x[-rw-r--r--]tests/FunctionalTests/issues/protected/pages/Issue516.php0
-rwxr-xr-x[-rw-r--r--]tests/FunctionalTests/issues/tests/Issue516TestCase.php0
-rwxr-xr-xtests/FunctionalTests/quickstart/Controls/HyperLinkTestCase.php2
-rwxr-xr-xtests/FunctionalTests/tickets/protected/pages/Layout.php9
-rwxr-xr-xtests/FunctionalTests/tickets/protected/pages/Ticket121.page2
-rwxr-xr-xtests/FunctionalTests/tickets/protected/pages/Ticket653/Layout.php2
-rwxr-xr-xtests/FunctionalTests/tickets/tests/Ticket595TestCase.php4
-rwxr-xr-xtests/FunctionalTests/validators/protected/pages/ImageButton.page6
-rw-r--r--tests/unit/Web/TAssetManagerTest.php2
-rw-r--r--tests/unit/Web/THttpCookieTest.php4
-rw-r--r--tests/unit/Web/THttpRequestTest.php4
-rw-r--r--tests/unit/Web/TUriTest.php8
916 files changed, 5545 insertions, 27571 deletions
diff --git a/.buildpath b/.buildpath
deleted file mode 100644
index b48394ff..00000000
--- a/.buildpath
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<buildpath>
- <buildpathentry excluding="framework/pradolite.php" kind="src" path=""/>
- <buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
-</buildpath>
diff --git a/.gitignore b/.gitignore
index ff8c3b5b..5975736a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+/.buildpath
/.idea
atlassian-ide-plugin.xml
/.project
@@ -20,7 +21,8 @@ buildscripts/texbuilder/quickstart/quickstart.toc
demos/quickstart/.cache
demos/quickstart/.project
demos/quickstart/.settings
-demos/quickstart/index_pl.php
+demos/blog/protected/Data/Blog.db
+demos/chat/protected/App_Code/chat.db
tests/FunctionalTests/results.dat
tests/unit/Data/db/test.db
@@ -28,9 +30,11 @@ tests/unit/Data/db/test.db
vendor/*
bin/phpunit
bin/phing
-bin/apigen.php
+bin/apigen
bin/coveralls
-bin/dbunit.php
+bin/dbunit
+bin/jsonlint
+bin/validate-json
#OSX
.DS_Store
diff --git a/.travis.yml b/.travis.yml
index d1e79154..246ab67f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,18 +1,17 @@
language: php
php:
- - 5.3
- - 5.4
- 5.5
- 5.6
+ - 7.0
before_script:
- composer self-update
- - composer install --prefer-source --dev
+ - composer install --prefer-source
- export PATH=./bin/:$PATH
script:
- - bash -c 'if [ "$TRAVIS_PHP_VERSION" == "5.3" ]; then phing test; else phing coverage ; fi;'
+ - phing coverage
after_script:
- php ./bin/coveralls -v
diff --git a/COPYRIGHT b/COPYRIGHT
index 4d7a65d8..42d357a0 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -1,7 +1,7 @@
The PRADO framework and the included demos are free software.
They are released under the terms of the following BSD License.
-Copyright 2004-2014, The PRADO Group (http://www.pradosoft.com)
+Copyright 2004-2015, The PRADO Group (https://github.com/pradosoft)
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/HISTORY b/HISTORY
index ef7b7d60..910e7bcc 100644
--- a/HISTORY
+++ b/HISTORY
@@ -1,9 +1,52 @@
+Version 3.3.0 December ??, 2015
+
+CHG: Added jQuery and rebased PRADO's effect and controls on it (ctrlaltca)
+ENH: Added jQueryUI and created new controls (ctrlaltca)
+ENH: Added Bootstrap3 (daniel)
+BUG: Issue #558 - TActiveFileUpload escaping ' in file names (ctrlaltca)
+BUG: Issue #550 - TActivePager not working correctly on XAMP 5.6.3 (LCSKJ)
+BUG: Issue #549 - TSqlCriteria, not possible to reset value of condition (majuca)
+BUG: Issue #542 - Fix clientside validation in TActiveCustomValidator (majuca)
+BUG: Issue #546 - Wrong exception messages in TAccordion (david0)
+ENH: Issue #545 - Make Prado.Callback return the request (majuca, david0)
+BUG: Issue #543 - Can't set a url mapping pattern class in php config (plachance)
+BUG: Issue #541 - Security - HttpOnly parameter in THttpSession and THttpCookie (ctrlaltca)
+BUG: Issue #539 - Status Code not send when throwing a THttpException (ctrlaltca)
+BUG: Issues #528, 538 - Fix errors in Prado.Validation.validateControl (majuca, david0)
+
+Version 3.2.4 Aug 26, 2014
+
+BUG: Issue #492 - Prado generates json_error when encoding an exception with non UTF-8 data (david0)
+ENH: Issue #494 - Adding toArray() and toJSON() to TActiveRecord (dmarko484)
+BUG: Issue #498 - Typo in TActiveFileUpload (Jens-mB)
+BUG: Issue #499 - Avoid scrolling when calling TControl::focus() (david0)
+BUG: Issue #502 - TSlider behaves strangely in TTabView (ctrlaltca)
+BUG: Issue #504 - Default Button cannot be referenced by <subControlId>.<controlId> (ctrlaltca)
+BUG: Issue #506 - Unused lines of code in TLiteralColumn::initializeCell (cross)
+BUG: Issue #511 - TActivePager's ButtonCssClass property is not rendered in buttons (ctrlaltca)
+BUG: Issue #515 - THtmlArea should override Readonly property (ctrlaltca)
+BUG: Issue #516 - Check Validators in TActiveEditCommandColumn (ctrlaltca)
+BUG: Issue #517 - TXmlDocument adjustment (gnit)
+BUG: Issue #518 - Runtime Notice in Gettext::factory() (ctrlaltca)
+BUG: Issue #519 - For MySQL in case PDO::CASE_LOWER creating table info does not work (ganiuszka)
+BUG: Issue #246 - Refix: User date() instead of gmdate() in TLogRoute (drigolin)
+BUG: Issue #520 - Unknown runtime error with Internet Explorer 8 (david0)
+BUG: Issue #524 - JSON error (5): Malformed UTF-8 characters when encoding callback response (david0)
+BUG: Issue #526 - TJsonRpcProtocol::callMethod, requested method is called twice (jojoinside)
+BUG: Issue #527 - TJsonRpcProtocol::callMethod, semicolon must be removed (jojoinside)
+ENH: Ported tests to Selenium2
+BUG: Avoid an exception loop on callback error when headers have already been sent (ctrlaltca)
+BUG: Avoid rendering <script> blocks in callbacks (ctrlaltca)
+BUG: Avoid dependency loop between TRadioButton and TRadioButtonList (ctrlaltca)
+ENH: Dropped Markdown for Parsedown (ctrlaltca)
+ENH: Web site administration tool (WSAT) (Daniel Sampedro)
+
Version 3.2.3 Nov 26, 2013
BUG: Issue #467 - TSafeHtml error on php 5.5 (ctrlaltca)
BUG: Issue #470 - Problem escaping characters in TActiveDropDownList (ctrlaltca)
BUG: Issue #468 - Update prototype to workaround IE10 bug (Raoul Bhatia)
-BUG: Issue #469 - JS Update to TDatePicker (Jrgen Aloy)
+BUG: Issue #469 - JS Update to TDatePicker (Jürgen Aloy)
BUG: Issue #465 - Textmate editor plugin template error (ctrlaltca)
BUG: Issue #472 - No https support from wsdl generator (Marcin Piotrowski)
ENH: Issue #473 - wsdl support for additional attributes of a custom type's property (Marcin Piotrowski)
@@ -137,7 +180,7 @@ BUG: Issue #368 - Clearing selection of a TActiveDropDownList in callback should
CHG: Issue #370 - Deprecated TSqliteCache since it's based on php's sqlite extension (ctrlaltca)
BUG: Issue #371 - Sorting on TActiveDataGrid autogenerated column not work (ctrlaltca)
ENH: Issue #372 - ActiveControls's Visible property should be reflected clientside on ajax requests (ctrlaltca)
-BUG: Issue #375 - Iconv error using htmlarea in TActiveDataList and chars like "" (ctrlaltca)
+BUG: Issue #375 - Iconv error using htmlarea in TActiveDataList and chars like "áéíóúñ" (ctrlaltca)
BUG: Issue #377 - THtmlArea Template Pluggin Options Parse Error (ctrlaltca)
BUG: Issue #379 - JSON float encoding depends on current locale (ctrlaltca)
BUG: Issue #380 - TCustomValidator's ControlToValidate should be optional (ctrlaltca)
@@ -601,7 +644,7 @@ ENH: Ticket#482 - ADD TinyMCE 2.0.8 (Wei, TinyMCE 2.1 added)
ENH: Ticket#503 - Localization and parameter tags can now appear as a substring in a property initial value (Qiang)
ENH: Ticket#513 - Display last modified / revision in quickstart (Wei)
ENH: Ticket#519 - Update TActiveRecord implementation (Wei)
-ENH: Ticket#537 - TActiveRecord Pk info ENH [usage: http://trac.pradosoft.com/prado/ticket/537] (Wei)
+ENH: Ticket#537 - TActiveRecord Pk info (Wei)
ENH: Ticket#561 - Powered by PRADO image to become an asset (Qiang)
ENH: Ticket#569 - Added TTextBox.PersistPassword property (Qiang)
ENH: Ticket#571 - Made TPage.ClientSupportsJavaScript property writable (Qiang)
diff --git a/README.md b/README.md
index e9ec1a9a..780fa35e 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,7 @@ PRADO stands for PHP Rapid Application Development Object-oriented.
[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/pradosoft/prado?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
## API Documentation
-The complete API documentation can be found at http://www.pradoframework.com/docs/manual/
+The complete API documentation can be found at http://pradosoft.github.io/docs/manual/
## Install
@@ -23,7 +23,7 @@ Just create a composer.json file for your project:
```JSON
{
"require": {
- "pradosoft/prado": "~3.2"
+ "pradosoft/prado": "~3.3"
}
}
```
@@ -42,7 +42,7 @@ Then you can include the autoloader, and you will have access to the library cla
require 'vendor/autoload.php';
```
## Demo Apps
-The Demos folder has several different example prado applications. You can see more information about these applications here: http://www.pradosoft.com/demos/ . When you create your own prado application you do NOT need these folders.
+The Demos folder has several different example prado applications. You can see more information about these applications here: http://www.pradoframework.net/site/demos/ . When you create your own prado application you do NOT need these folders.
* address-book
* blog
diff --git a/UPGRADE b/UPGRADE
index 51f0304d..cb84f619 100644
--- a/UPGRADE
+++ b/UPGRADE
@@ -1,5 +1,5 @@
- Upgrading Instructions for PRADO Framework v3.2.3
+ Upgrading Instructions for PRADO Framework v3.3.0
=================================================
!!!IMPORTANT!!!
@@ -9,8 +9,12 @@ 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.
-Upgrading from v3.2.2
+Upgrading from v3.2.x
---------------------
+- Since PRADO 3.3.0, jQuery is the javascript framework of choice. All the existing PRADO controls have
+ already been ported, and prototype is still included to provide backward comaptibility for custom controls.
+ Anyway, updating custom controls is probably a good idea. Have a look at the "Upgrading from v3.2" page in
+ the Quickstart tutorial for more informations.
Upgrading from v3.2.1
---------------------
diff --git a/bin/prado-cli.php b/bin/prado-cli.php
index 1906946b..824cf10c 100755
--- a/bin/prado-cli.php
+++ b/bin/prado-cli.php
@@ -4,9 +4,9 @@
* Prado command line developer tools.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
if(!isset($_SERVER['argv']) || php_sapi_name()!=='cli')
diff --git a/build.xml b/build.xml
index e81c41db..708b18cd 100644
--- a/build.xml
+++ b/build.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
- PRADO 3.2 build file - Copyright (C) 2014 PradoSoft
+ PRADO 3.3 build file - Copyright (C) 2015 The PRADO Group
Requirements
============
@@ -11,6 +11,7 @@
<taskdef name="prado-quickstart-index" classname="QuickstartIndexTask" classpath="buildscripts/phing/tasks"/>
<taskdef name="prado-api-index" classname="ManualIndexTask" classpath="buildscripts/phing/tasks"/>
<taskdef name="phpunitreporttask" classname="PhpUnitReportTask" classpath="buildscripts/phing/tasks"/>
+ <taskdef name="apigen4" classname="ApiGen4Task" classpath="buildscripts/phing/tasks"/>
<!-- generates ${prado.version} and ${prado.revision} -->
<prado-version-check/>
@@ -102,6 +103,7 @@
<include name="demos/soap/**/*"/>
<include name="demos/sqlmap/**/*"/>
<include name="demos/time-tracker/**/*"/>
+ <include name="demos/site/**/*"/>
</fileset>
<!--
@@ -132,10 +134,11 @@
where &lt;target name&gt; can be one of the following:
For all PRADO developers:
- - test : run unit tests (results are under /build/test-reports)
- - coverage : run unit tests collecting coverage informations
- - lint : run lint on framework
- - lint-demos : run lint on demos
+ - test : run unit tests (results are under /build/test-reports)
+ - coverage : run unit tests collecting coverage informations
+ - functionaltest : run funcitonal tests (requires Selenium Server)
+ - lint : run lint on framework
+ - lint-demos : run lint on demos
For PRADO release manager:
- dist : create release files;
@@ -185,17 +188,17 @@
<echo>Building API manuals...</echo>
<delete dir="${build.doc.dir}/manual"/>
<mkdir dir="${build.doc.dir}/manual"/>
- <apigen
- executable="bin/apigen.php"
+ <apigen4
+ executable="bin/apigen"
source="${build.src.dir}/framework"
destination="${build.doc.dir}/manual"
- exclude="*pradolite.php,*prado-cli.php,*3rdParty/*,*Javascripts/source/*,*packages.php,*JSMin.php,*I18N/core/*,*WebControls/assets/*"
+ exclude="*pradolite.php,*prado-cli.php,*3rdParty/*,*Javascripts/source/*,*packages.php,*JSMin.php,*I18N/core/*,*WebControls/assets/*,*Wsat/pages,*Wsat/themes"
title="PRADO v${prado.version} API Manual"
deprecated="true"
todo="true"
sourcecode="false"
php="false"
- templateconfig="buildscripts/apigen/pradosoft/config.neon"
+ templateconfig="buildscripts/apigen/pradosoft/config.neon"
/>
<echo>Indexing API manuals...</echo>
@@ -239,19 +242,11 @@
</then>
</if>
- <echo>Generating files for pradosoft.com...</echo>
+ <echo>Generating files for website...</echo>
<echo>Compiling class docs...</echo>
<exec command="${php} build.php" dir="buildscripts/classtree" passthru="true"/>
<move file="buildscripts/classtree/classes.data" todir="${build.web.dir}/protected/Data"/>
- <echo>Moving HTML docs to Web folder...</echo>
- <mkdir dir="${build.web.dir}"/>
- <copy todir="${build.web.dir}/docs/manual">
- <fileset dir="${build.doc.dir}/manual">
- <include name="**/**"/>
- </fileset>
- </copy>
-
<echo>
Distribution Completed!!!
</echo>
@@ -268,7 +263,7 @@
</batchtest>
<formatter type="xml" todir="${build.test.dir}" outfile="unit-tests.xml"/>
</phpunit>
- <phpunitreporttask infile="${build.test.dir}/unit-tests.xml" format="frames" todir="${build.test.dir}"/>
+ <phpunitreporttask infile="${build.test.dir}/unit-tests.xml" format="noframes" todir="${build.test.dir}"/>
</target>
<target name="functionaltest" description="Running functional tests">
@@ -282,7 +277,7 @@
</batchtest>
<formatter type="xml" todir="${build.functionaltest.dir}" outfile="functional-tests.xml"/>
</phpunit>
- <phpunitreporttask infile="${build.functionaltest.dir}/functional-tests.xml" format="frames" todir="${build.functionaltest.dir}"/>
+ <phpunitreporttask infile="${build.functionaltest.dir}/functional-tests.xml" format="noframes" todir="${build.functionaltest.dir}"/>
</target>
<target name="coverage" description="Running unit tests with coverage checks">
@@ -304,7 +299,7 @@
<formatter type="xml" todir="${build.test.dir}" outfile="unit-tests.xml"/>
<formatter type="clover" todir="${build.test.dir}" outfile="clover.xml"/>
</phpunit>
- <phpunitreporttask infile="${build.test.dir}/unit-tests.xml" format="frames" todir="${build.test.dir}"/>
+ <phpunitreporttask infile="${build.test.dir}/unit-tests.xml" format="noframes" todir="${build.test.dir}"/>
</target>
<target name="snapshot" depends="rebuild">
diff --git a/buildscripts/apigen/pradosoft/404.latte b/buildscripts/apigen/pradosoft/404.latte
index 9d91dafe..58e538f1 100644
--- a/buildscripts/apigen/pradosoft/404.latte
+++ b/buildscripts/apigen/pradosoft/404.latte
@@ -1,21 +1,11 @@
-{*
-ApiGen 2.8.0 - API documentation generator for PHP 5.3+
-
-Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
-Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
-Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
-
-For the full copyright and license information, please view
-the file LICENSE.md that was distributed with this source code.
-*}
{layout '@layout.latte'}
{var $robots = false}
-{block #title}Page not found{/block}
+{block title}Page not found{/block}
-{block #content}
+{block content}
<div id="content">
- <h1>{include #title}</h1>
+ <h1>{include title}</h1>
<p>The requested page could not be found.</p>
<p>You have probably clicked on a link that is outdated and points to a page that does not exist any more or you have made an typing error in the address.</p>
<p>To continue please try to find requested page in the menu,{if $config->tree} take a look at <a href="tree.html">the tree view</a> of the whole project{/if} or use search field on the top.</p>
diff --git a/buildscripts/apigen/pradosoft/@elementlist.latte b/buildscripts/apigen/pradosoft/@elementlist.latte
index 4ffdd5b6..99881989 100644
--- a/buildscripts/apigen/pradosoft/@elementlist.latte
+++ b/buildscripts/apigen/pradosoft/@elementlist.latte
@@ -1,46 +1,36 @@
-{*
-ApiGen 2.8.0 - API documentation generator for PHP 5.3+
-
-Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
-Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
-Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
-
-For the full copyright and license information, please view
-the file LICENSE.md that was distributed with this source code.
-*}
-{define #elements}
+{define elements}
<tr n:foreach="$elements as $element">
<td class="name"><a href="{$element|elementUrl}" n:class="$element->deprecated ? deprecated, !$element->valid ? invalid">{if $namespace}{$element->shortName}{else}{$element->name}{/if}</a></td>
- <td>{!$element|shortDescription}</td>
+ <td>{$element|shortDescription|noescape}</td>
</tr>
{/define}
<table class="summary" id="classes" n:if="$classes">
<caption>Classes summary</caption>
-{include #elements, elements => $classes}
+{include elements, elements => $classes}
</table>
<table class="summary" id="interfaces" n:if="$interfaces">
<caption>Interfaces summary</caption>
-{include #elements, elements => $interfaces}
+{include elements, elements => $interfaces}
</table>
<table class="summary" id="traits" n:if="$traits">
<caption>Traits summary</caption>
-{include #elements, elements => $traits}
+{include elements, elements => $traits}
</table>
<table class="summary" id="exceptions" n:if="$exceptions">
<caption>Exceptions summary</caption>
-{include #elements, elements => $exceptions}
+{include elements, elements => $exceptions}
</table>
<table class="summary" id="constants" n:if="$constants">
<caption>Constants summary</caption>
-{include #elements, elements => $constants}
+{include elements, elements => $constants}
</table>
<table class="summary" id="functions" n:if="$functions">
<caption>Functions summary</caption>
-{include #elements, elements => $functions}
+{include elements, elements => $functions}
</table>
diff --git a/buildscripts/apigen/pradosoft/@layout.latte b/buildscripts/apigen/pradosoft/@layout.latte
index 266f0e17..01479827 100644
--- a/buildscripts/apigen/pradosoft/@layout.latte
+++ b/buildscripts/apigen/pradosoft/@layout.latte
@@ -1,13 +1,3 @@
-{*
-ApiGen 2.8.0 - API documentation generator for PHP 5.3+
-
-Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
-Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
-Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
-
-For the full copyright and license information, please view
-the file LICENSE.md that was distributed with this source code.
-*}
{default $robots = true}
{default $active = ''}
<!DOCTYPE html>
@@ -15,10 +5,11 @@ the file LICENSE.md that was distributed with this source code.
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="generator" content="{$generator} {$version}">
+ <meta charset="utf-8">
<meta name="robots" content="noindex" n:if="!$robots">
<meta http-equiv="content-language" content="en"/>
- <meta name="Keywords" content="PRADO PHP framework component template delphi asp.net event property OOP PHP5 object oriented programming Web programming development" />
+ <meta name="Keywords" content="PRADO PHP framework component template event property OOP PHP5 object oriented programming Web programming development" />
<meta name="Description" content="PRADO is a component-based and event-driven framework for Web application development in PHP 5." />
<meta name="Author" content="Qiang Xue" />
<meta name="Subject" content="Web programming, PHP framework" />
@@ -26,18 +17,14 @@ the file LICENSE.md that was distributed with this source code.
<link rel="Shortcut Icon" href="/favicon.ico" />
<link rel="stylesheet" type="text/css" href="/css/style.css" />
<link rel="stylesheet" type="text/css" href="/css/manual.css" />
+ <meta name="robots" content="noindex" n:if="!$robots">
- <title>{include #title}{if 'overview' !== $active && $config->title} | {$config->title}{/if}</title>
+ <title>{include title}{if 'overview' !== $active && $config->title} | {$config->title}{/if}</title>
- {var combinedJs = 'resources/combined.js'}
- <script type="text/javascript" src="{$combinedJs|staticFile}"></script>
- {var elementListJs = 'elementlist.js'}
- <script type="text/javascript" src="{$elementListJs|staticFile}"></script>
- {var styleCss = 'resources/style.css'}
- <link rel="stylesheet" type="text/css" media="all" href="{$styleCss|staticFile}">
+ <link rel="stylesheet" href="{='resources/style.css'|staticFile}">
<link n:if="$config->googleCseId" rel="search" type="application/opensearchdescription+xml" title="{$config->title}" href="{$config->baseUrl}/opensearch.xml">
- <script n:if="$config->googleAnalytics" type="text/javascript">
+ <script n:if="$config->googleAnalytics">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', {$config->googleAnalytics}]);
_gaq.push(['_trackPageview']);
@@ -52,47 +39,25 @@ the file LICENSE.md that was distributed with this source code.
<body>
- <div id="page">
- <div id="header">
- <div id="logo"><img src="/css/pradoheader.gif" alt="PRADO Component Framework for PHP 5" /></div>
- <div id="mainmenu">
- <ul>
- <li><a href="/">Home</a></li>
- <li><a href="/about/" >About</a></li>
- <li><a href="/testimonials/" >Testimonials</a></li>
- <li><a href="/demos/" >Demos</a></li>
- <li><a href="/download/" >Download</a></li>
- <li><a href="/documentation/" class="active">Documentation</a></li>
- <li><a href="/forum/" >Forum</a></li>
- <li><a href="http://github.com/pradosoft/prado">Development</a></li>
- </ul>
- </div><!-- mainmenu -->
- </div><!-- header -->
- <div id="main">
- <div id="navbar">
- <ul>
- <li><a href="/tutorials/">Tutorials</a></li>
- <li><a href="/docs/classdoc/">Class Docs</a></li>
- <li><a href="/docs/manual/" class="active">API Manual</a></li>
- <li><a href="/wiki/">Wiki</a></li>
- </ul>
- </div>
-
-<table id="maintable">
- <tr>
- <td id="left">
+<div id="left">
<div id="menu">
- {define #group}
+ <a n:tag-if="'overview' !== $active" href="index.html" title="Overview"><span>Overview</span></a>
+
+ {define group}
<ul>
{foreach $groups as $group}
{var $nextLevel = substr_count($iterator->nextValue, '\\') > substr_count($group, '\\')}
- <li n:class="$actualGroup === $group || 0 === strpos($actualGroup, $group . '\\') ? active, $config->main && 0 === strpos($group, $config->main) ? main"><a href="{$group|groupUrl}">{$group|subgroupName}{if $nextLevel}<span></span>{/if}</a>
+ <li n:class="$actualGroup === $group || 0 === strpos($actualGroup, $group . '\\') ? active, $config->main && 0 === strpos($group, $config->main) ? main">
+ <a href="{if $groupBy === 'package'}{$group|packageUrl}{else}{$group|namespaceUrl}{/if}">
+ {$group|subgroupName}<span n:tag-if="$nextLevel"></span>
+ </a>
+
{if $nextLevel}
<ul>
{else}
</li>
{if substr_count($iterator->nextValue, '\\') < substr_count($group, '\\')}
- {!'</ul></li>'|repeat:substr_count($group, '\\') - substr_count($iterator->nextValue, '\\')}
+ {='</ul></li>'|repeat:substr_count($group, '\\') - substr_count($iterator->nextValue, '\\')|noescape}
{/if}
{/if}
{/foreach}
@@ -101,31 +66,64 @@ the file LICENSE.md that was distributed with this source code.
<div id="groups">
{if $namespaces}
- <h3>Namespaces</h3>
- {include #group, groups => $namespaces, actualGroup => $namespace}
+ <h3>Namespaces</h3>
+ {include group, groups => $namespaces, actualGroup => $namespace, groupBy => 'namespace'}
{elseif $packages}
- <h3>Packages</h3>
- {include #group, groups => $packages, actualGroup => $package}
+ <h3>Packages</h3>
+ {include group, groups => $packages, actualGroup => $package, groupBy => 'package'}
{/if}
</div>
- {define #elements}
+ <hr n:if="($namespaces || $packages) && ($classes || $interfaces || $traits || $exceptions || $constants || $functions)">
+
+ {define elements}
<ul>
<li n:foreach="$elements as $element" n:class="$activeElement === $element ? active"><a n:class="$element->deprecated ? deprecated, !$element->valid ? invalid" href="{$element|elementUrl}">{if $namespace}{$element->shortName}{else}{$element->name}{/if}</a></li>
</ul>
{/define}
+
+ <div id="elements">
+ {if $classes}
+ <h3>Classes</h3>
+ {include elements, elements => $classes, activeElement => $class}
+ {/if}
+
+ {if $interfaces}
+ <h3>Interfaces</h3>
+ {include elements, elements => $interfaces, activeElement => $class}
+ {/if}
+
+ {if $traits}
+ <h3>Traits</h3>
+ {include elements, elements => $traits, activeElement => $class}
+ {/if}
+
+ {if $exceptions}
+ <h3>Exceptions</h3>
+ {include elements, elements => $exceptions, activeElement => $class}
+ {/if}
+
+ {if $constants}
+ <h3>Constants</h3>
+ {include elements, elements => $constants, activeElement => $constant}
+ {/if}
+
+ {if $functions}
+ <h3>Functions</h3>
+ {include elements, elements => $functions, activeElement => $function}
+ {/if}
+ </div>
</div>
</div>
-</td>
-<td id="right">
+<div id="splitter"></div>
+
+<div id="right">
<div id="rightInner">
<form{if $config->googleCseId} action="http://www.google.com/cse"{/if} id="search">
<input type="hidden" name="cx" value="{$config->googleCseId}">
<input type="hidden" name="ie" value="UTF-8">
- <input type="hidden" name="more" value="{$config->googleCseLabel}" n:if="$config->googleCseLabel">
- <input type="text" name="q" class="text"{if 'overview' === $active} autofocus{/if}>
- <input type="submit" value="Search">
+ <input type="text" name="q" class="text" placeholder="Search"{if 'overview' === $active} autofocus{/if}>
</form>
<div id="navigation">
@@ -153,12 +151,13 @@ the file LICENSE.md that was distributed with this source code.
<li n:class="'tree' === $active ? active" n:if="$config->tree">
<a n:tag-if="'tree' !== $active" href="tree.html" title="Tree view of classes, interfaces, traits and exceptions"><span>Tree</span></a>
</li>
- <li n:class="'deprecated' === $active ? active" n:if="$config->deprecated">
- <a n:tag-if="'deprecated' !== $active" href="deprecated.html" title="List of deprecated elements"><span>Deprecated</span></a>
- </li>
- <li n:class="'todo' === $active ? active" n:if="$config->todo">
- <a n:tag-if="'todo' !== $active" href="todo.html" title="Todo list"><span>Todo</span></a>
- </li>
+ {foreach $annotationGroups as $annotation}
+ <li n:class="$active === 'annotation-group-' . $annotation ? active">
+ <a n:tag-if="$active !== 'annotation-group-' . $annotation" href="annotation-group-{$annotation}.html" title="List of elements with {$annotation} annotation">
+ <span>{$annotation|firstUpper}</span>
+ </a>
+ </li>
+ {/foreach}
</ul>
<ul>
<li n:if="$config->download">
@@ -167,31 +166,15 @@ the file LICENSE.md that was distributed with this source code.
</ul>
</div>
- {include #content}
+ {include content}
+ <div id="footer">
+ {$config->title} API documentation generated by <a href="http://apigen.org">ApiGen</a>
+ </div>
</div>
-
-</td>
- </tr>
-</table>
-
-</div><!-- main -->
-
-<div id="footer">
- <a href="/tos/">Terms of Service</a> |
- <a href="/support/">Contact Us</a>
- <br/>
- {$config->title} API documentation generated by <a href="http://apigen.org">{$generator} {$version}</a>
- <br/>Copyright &copy; 2006-2014 by the PRADO Group.<br/>
- <a title="Powered by PRADO" href="http://www.pradosoft.com/"><img src="http://www.pradosoft.com/images/powered2.gif" style="border-width:0px;" alt="Powered by PRADO" /></a>
</div>
-</div><!-- page -->
-<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
-</script>
-<script type="text/javascript">
-_uacct = "UA-186303-3";
-urchinTracker();
-</script>
+<script src="{='resources/combined.js'|staticFile}"></script>
+<script src="{='elementlist.js'|staticFile}"></script>
</body>
</html>
diff --git a/buildscripts/apigen/pradosoft/annotation-group.latte b/buildscripts/apigen/pradosoft/annotation-group.latte
new file mode 100644
index 00000000..39c49769
--- /dev/null
+++ b/buildscripts/apigen/pradosoft/annotation-group.latte
@@ -0,0 +1,117 @@
+{layout '@layout.latte'}
+{var $active = 'annotation-group-' . $annotation}
+
+{block title}{$annotation|firstUpper}{/block}
+
+{block content}
+<div id="content">
+ <h1>{include title}</h1>
+
+ {if $hasElements}
+ <table class="summary" id="classes" n:if="$annotationClasses">
+ <caption>Classes summary</caption>
+ {include classes, items => $annotationClasses}
+ </table>
+
+ <table class="summary" id="interfaces" n:if="$annotationInterfaces">
+ <caption>Interfaces summary</caption>
+ {include classes, items => $annotationInterfaces}
+ </table>
+
+ <table class="summary" id="traits" n:if="$annotationTraits">
+ <caption>Traits summary</caption>
+ {include classes, items => $annotationTraits}
+ </table>
+
+ <table class="summary" id="exceptions" n:if="$annotationExceptions">
+ <caption>Exceptions summary</caption>
+ {include classes, items => $annotationExceptions}
+ </table>
+
+ <table class="summary" id="methods" n:if="$annotationMethods">
+ <caption>Methods summary</caption>
+ <tr n:foreach="$annotationMethods as $method">
+ <td class="name"><a href="{$method->declaringClassName|classUrl}">{$method->declaringClassName}</a></td>
+ <td class="name"><code><a href="{$method|methodUrl}">{$method->name}()</a></code></td>
+ <td>
+ {if $method->hasAnnotation($annotation)}
+ {foreach $method->annotations[$annotation] as $description}
+ {if $description}
+ {$description|annotation:$annotation:$method|noescape}<br>
+ {/if}
+ {/foreach}
+ {/if}
+ </td>
+ </tr>
+ </table>
+
+ <table class="summary" id="constants" n:if="$annotationConstants">
+ <caption>Constants summary</caption>
+ <tr n:foreach="$annotationConstants as $constant">
+ {if $constant->declaringClassName}
+ <td class="name"><a href="{$constant->declaringClassName|classUrl}">{$constant->declaringClassName}</a></td>
+ <td class="name"><code><a href="{$constant|constantUrl}"><b>{$constant->name}</b></a></code></td>
+
+ {else}
+ <td class="name" n:if="$namespaces || $classes || $interfaces || $traits || $exceptions"><a n:if="$constant->namespaceName" href="{$constant->namespaceName|namespaceUrl}">{$constant->namespaceName}</a></td>
+ <td n:class="name"><code><a href="{$constant|constantUrl}"><b>{$constant->shortName}</b></a></code></td>
+ {/if}
+ <td>
+ {foreach $constant->annotations[$annotation] as $description}
+ {if $description}
+ {$description|annotation:$annotation:$constant|noescape}<br>
+ {/if}
+ {/foreach}
+ </td>
+ </tr>
+ </table>
+
+ <table class="summary" id="properties" n:if="$annotationProperties">
+ <caption>Properties summary</caption>
+ <tr n:foreach="$annotationProperties as $property">
+ <td class="name"><a href="{$property->declaringClassName|classUrl}">{$property->declaringClassName}</a></td>
+ <td class="name"><a href="{$property|propertyUrl}"><var>${$property->name}</var></a></td>
+ <td>
+ {foreach $property->annotations[$annotation] as $description}
+ {if $description}
+ {$description|annotation:$annotation:$property|noescape}<br>
+ {/if}
+ {/foreach}
+ </td>
+ </tr>
+ </table>
+
+ <table class="summary" id="functions" n:if="$annotationFunctions">
+ <caption>Functions summary</caption>
+ <tr n:foreach="$annotationFunctions as $function">
+ <td class="name" n:if="$namespaces"><a n:if="$function->namespaceName" href="{$function->namespaceName|namespaceUrl}">{$function->namespaceName}</a></td>
+ <td class="name"><code><a href="{$function|functionUrl}">{$function->shortName}</a></code></td>
+ <td>
+ {foreach $function->annotations[$annotation] as $description}
+ {if $description}
+ {$description|annotation:$annotation:$function|noescape}<br>
+ {/if}
+ {/foreach}
+ </td>
+ </tr>
+ </table>
+
+ {else}
+ <p>No elements with <code>@{$annotation}</code> annotation found.</p>
+ {/if}
+</div>
+{/block}
+
+
+{define classes}
+ <tr n:foreach="$items as $class">
+ <td class="name"><a href="{$class|classUrl}">{$class->name}</a></td>
+ <td>
+ {foreach $class->annotations[$annotation] as $description}
+ {if $description}
+ {$description|annotation:$annotation:$class|noescape}<br>
+ {/if}
+ {/foreach}
+ </td>
+ </tr>
+{/define}
diff --git a/buildscripts/apigen/pradosoft/class.latte b/buildscripts/apigen/pradosoft/class.latte
index 36b3804c..4555d79d 100644
--- a/buildscripts/apigen/pradosoft/class.latte
+++ b/buildscripts/apigen/pradosoft/class.latte
@@ -1,26 +1,16 @@
-{*
-ApiGen 2.8.0 - API documentation generator for PHP 5.3+
-
-Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
-Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
-Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
-
-For the full copyright and license information, please view
-the file LICENSE.md that was distributed with this source code.
-*}
{layout '@layout.latte'}
{var $active = 'class'}
-{block #title}{if $class->deprecated}Deprecated {/if}{if $class->interface}Interface{elseif $class->trait}Trait{else}Class{/if} {$class->name}{/block}
+{block title}{if $class->deprecated}Deprecated {/if}{if $class->interface}Interface{elseif $class->trait}Trait{else}Class{/if} {$class->name}{/block}
-{block #content}
+{block content}
<div id="content" class="class">
<h1 n:class="$class->deprecated ? deprecated">{if $class->interface}Interface{elseif $class->trait}Trait{else}Class{/if} {$class->shortName}</h1>
{if $class->valid}
<div class="description" n:if="$template->longDescription($class)">
- {!$class|longDescription}
+ {$class|longDescription|noescape}
</div>
<dl class="tree" n:if="$class->parentClass || $class->ownInterfaces || $class->ownTraits">
@@ -35,12 +25,17 @@ the file LICENSE.md that was distributed with this source code.
{/foreach}{/if}
{var $itemOwnTraits = $item->ownTraits}
{if $itemOwnTraits} uses {foreach $itemOwnTraits as $trait}
- <a href="{$trait|classUrl}" n:tag-if="$trait->documented"><span n:class="$trait->deprecated ? deprecated, !$trait->valid ? invalid">{$trait->name}</span></a>{sep}, {/sep}
+ {if is_string($trait)}
+ {$trait} (not available)
+
+ {else}
+ <a href="{$trait|classUrl}" n:tag-if="$trait->documented"><span n:class="$trait->deprecated ? deprecated, !$trait->valid ? invalid">{$trait->name}</span></a>{sep}, {/sep}
+ {/}
{/foreach}{/if}
</dd>
</dl>
- {define #children}
+ {define children}
{foreach $children as $child}
<a href="{$child|classUrl}" n:tag-if="$child->documented"><span n:tag-if="$child->deprecated" class="deprecated">{$child->name}</span></a>{sep}, {/sep}
{/foreach}
@@ -48,59 +43,65 @@ the file LICENSE.md that was distributed with this source code.
<div n:if="$directSubClasses">
<h4>Direct known subclasses</h4>
- {include #children, children => $directSubClasses}
+ {include children, children => $directSubClasses}
</div>
<div n:if="$indirectSubClasses">
<h4>Indirect known subclasses</h4>
- {include #children, children => $indirectSubClasses}
+ {include children, children => $indirectSubClasses}
</div>
<div n:if="$directImplementers">
<h4>Direct known implementers</h4>
- {include #children, children => $directImplementers}
+ {include children, children => $directImplementers}
</div>
<div n:if="$indirectImplementers">
<h4>Indirect known implementers</h4>
- {include #children, children => $indirectImplementers}
+ {include children, children => $indirectImplementers}
</div>
<div n:if="$directUsers">
<h4>Direct Known Users</h4>
- {include #children, children => $directUsers}
+ {include children, children => $directUsers}
</div>
<div n:if="$indirectUsers">
<h4>Indirect Known Users</h4>
- {include #children, children => $indirectUsers}
+ {include children, children => $indirectUsers}
</div>
<div class="info">
{if !$class->interface && !$class->trait && ($class->abstract || $class->final)}<b>{if $class->abstract}Abstract{else}Final{/if}</b><br>{/if}
{if $class->internal}<b>PHP Extension:</b> <a href="{$class->extension|manualUrl}" title="Go to PHP documentation">{$class->extension->name|firstUpper}</a><br>{/if}
- {if $class->inNamespace()}<b>Namespace:</b> {!$class->namespaceName|namespaceLinks}<br>{/if}
- {if $class->inPackage()}<b>Package:</b> {!$class->packageName|packageLinks}<br>{/if}
+ {if $class->inNamespace()}<b>Namespace:</b> {$class->namespaceName|namespaceLinks|noescape}<br>{/if}
+ {if $class->inPackage()}<b>Package:</b> {$class->packageName|packageLinks|noescape}<br>{/if}
{foreach $template->annotationSort($template->annotationFilter($class->annotations)) as $annotation => $values}
{foreach $values as $value}
<b>{$annotation|annotationBeautify}{if $value}:{/if}</b>
- {!$value|annotation:$annotation:$class}<br>
+ {$value|annotation:$annotation:$class|noescape}<br>
{/foreach}
{/foreach}
- {if $class->internal}<b>Documented at</b> <a href="{$class|manualUrl}" title="Go to PHP documentation">php.net</a>{else}<b>Located at</b> <a n:tag-if="$config->sourceCode" href="{$class|sourceUrl}" title="Go to source code">{$class->fileName|relativePath}</a>{/if}<br>
+ {if $class->internal}
+ <b>Documented at</b> <a href="{$class|manualUrl}" title="Go to PHP documentation">php.net</a>
+ {else}
+ <b>Located at</b> <a n:tag-if="$config->sourceCode" href="{$class|sourceUrl}" title="Go to source code">{$class->fileName|relativePath}</a>
+ {/if}
+ <br>
</div>
{var $ownMethods = $class->ownMethods}
{var $ownMagicMethods = $class->ownMagicMethods}
- {define #method}
- <tr data-order="{$method->name}" id="{if $method->magic}m{/if}_{$method->name}">
+ {define method}
+ <tr data-order="{$method->name}" id="{if $method->magic}m{/if}_{$method->name}" n:class="$method->deprecated ? deprecated">
{var $annotations = $method->annotations}
<td class="attributes"><code>
{if !$class->interface && $method->abstract}abstract{elseif $method->final}final{/if} {if $method->protected}protected{elseif $method->private}private{else}public{/if} {if $method->static}static{/if}
- {ifset $annotations['return']}{!$annotations['return'][0]|typeLinks:$method}{/ifset}
+
+ {ifset $annotations['return']}{$annotations['return'][0]|typeLinks:$method|noescape}{/ifset}
{if $method->returnsReference()}&amp;{/if}
</code>
</td>
@@ -114,19 +115,19 @@ the file LICENSE.md that was distributed with this source code.
<a n:tag-if="$config->sourceCode" href="{$method|sourceUrl}" title="Go to source code">{$method->name}</a>(
{/if}
{foreach $method->parameters as $parameter}
- <span>{!$parameter->typeHint|typeLinks:$method}
- <var>{if $parameter->passedByReference}&amp; {/if}${$parameter->name}</var>{if $parameter->defaultValueAvailable} = {!$parameter->defaultValueDefinition|highlightPHP:$class}{elseif $parameter->unlimited},…{/if}</span>{sep}, {/sep}
+ <span>{$parameter->typeHint|typeLinks:$method|noescape}
+ <var>{if $parameter->passedByReference}&amp; {/if}${$parameter->name}</var>{if $parameter->defaultValueAvailable} = {$parameter->defaultValueDefinition|highlightPHP:$class|noescape}{elseif $parameter->unlimited},…{/if}</span>{sep}, {/sep}
{/foreach}
){/block}</code>
{if $config->template['options']['elementDetailsCollapsed']}
<div class="description short">
- {!$method|shortDescription:true}
+ {$method|shortDescription:true|noescape}
</div>
{/if}
<div n:class="description, detailed, $config->template['options']['elementDetailsCollapsed'] ? hidden">
- {!$method|longDescription}
+ {$method|longDescription|noescape}
{if !$class->deprecated && $method->deprecated}
<h4>Deprecated</h4>
@@ -134,7 +135,7 @@ the file LICENSE.md that was distributed with this source code.
<div class="list">
{foreach $annotations['deprecated'] as $description}
{if $description}
- {!$description|annotation:'deprecated':$method}<br>
+ {$description|annotation:'deprecated':$method|noescape}<br>
{/if}
{/foreach}
</div>
@@ -146,7 +147,7 @@ the file LICENSE.md that was distributed with this source code.
<div class="list"><dl>
{foreach $method->parameters as $parameter}
<dt><var>${$parameter->name}</var>{if $parameter->unlimited},…{/if}</dt>
- <dd>{ifset $annotations['param'][$parameter->position]}{!$annotations['param'][$parameter->position]|annotation:'param':$method}{/ifset}</dd>
+ <dd>{$parameter->description|description:$method|noescape}</dd>
{/foreach}
</dl></div>
{/if}
@@ -155,7 +156,7 @@ the file LICENSE.md that was distributed with this source code.
<h4>Returns</h4>
<div class="list">
{foreach $annotations['return'] as $description}
- {!$description|annotation:'return':$method}<br>
+ {$description|annotation:'return':$method|noescape}{sep}<br>{/}
{/foreach}
</div>
{/if}
@@ -164,7 +165,7 @@ the file LICENSE.md that was distributed with this source code.
<h4>Throws</h4>
<div class="list">
{foreach $annotations['throws'] as $description}
- {!$description|annotation:'throws':$method}<br>
+ {$description|annotation:'throws':$method|noescape}{sep}<br>{/}
{/foreach}
</div>
{/ifset}
@@ -174,7 +175,7 @@ the file LICENSE.md that was distributed with this source code.
<div class="list">
{foreach $descriptions as $description}
{if $description}
- {!$description|annotation:$annotation:$method}<br>
+ {$description|annotation:$annotation:$method|noescape}<br>
{/if}
{/foreach}
</div>
@@ -196,10 +197,10 @@ the file LICENSE.md that was distributed with this source code.
</tr>
{/define}
- <table class="summary" id="methods" n:if="$ownMethods">
+ <table class="summary methods" id="methods" n:if="$ownMethods">
<caption>Methods summary</caption>
{foreach $ownMethods as $method}
- {include #method, method => $method}
+ {include method, method => $method}
{/foreach}
</table>
@@ -219,16 +220,16 @@ the file LICENSE.md that was distributed with this source code.
<tr>
<td><code>
{foreach $methods as $data}
- <a href="{$data['method']|methodUrl:$data['method']->declaringTrait}" n:tag-if="$template->getClass($traitName)"><span n:tag-if="$data['method']->deprecated" class="deprecated">{$data['method']->originalName}()</span></a>{if $data['aliases']}(as {foreach $data['aliases'] as $alias}<span n:tag-if="$data['method']->deprecated" class="deprecated">{$alias->name}()</span>{sep}, {/sep}{/foreach}){/if}{sep}, {/sep}
+ <a href="{$data['method']|methodUrl:$data['method']->declaringTrait}" n:tag-if="$template->getClass($traitName)"><span n:tag-if="$data['method']->deprecated" class="deprecated">{$data['method']->name}()</span></a>{if $data['aliases']}(as {foreach $data['aliases'] as $alias}<span n:tag-if="$data['method']->deprecated" class="deprecated">{$alias->name}()</span>{sep}, {/sep}{/foreach}){/if}{sep}, {/sep}
{/foreach}
</code></td>
</tr>
</table>
- <table class="summary" id="methods" n:if="$ownMagicMethods">
+ <table class="summary methods" id="magicMethods" n:if="$ownMagicMethods">
<caption>Magic methods summary</caption>
{foreach $ownMagicMethods as $method}
- {include #method, method => $method}
+ {include method, method => $method}
{/foreach}
</table>
@@ -257,44 +258,46 @@ the file LICENSE.md that was distributed with this source code.
{var $ownConstants = $class->ownConstants}
- <table class="summary" id="constants" n:if="$ownConstants">
+ <table class="summary constants" id="constants" n:if="$ownConstants">
<caption>Constants summary</caption>
<tr n:foreach="$ownConstants as $constant" data-order="{$constant->name}" id="{$constant->name}">
{var $annotations = $constant->annotations}
- <td class="attributes"><code>{!$constant->typeHint|typeLinks:$constant}</code></td>
- <td class="name"><code>
+ <td class="attributes"><code>{$constant->typeHint|typeLinks:$constant|noescape}</code></td>
+ <td class="name">
+ <code>
{if $class->internal}
<a href="{$constant|manualUrl}" title="Go to PHP documentation"><b>{$constant->name}</b></a>
{else}
<a n:tag-if="$config->sourceCode" href="{$constant|sourceUrl}" title="Go to source code"><b>{$constant->name}</b></a>
{/if}
- </code></td>
- <td class="value"><code>{!$constant->valueDefinition|highlightValue:$class}</code></td>
- <td class="description"><div>
- <a href="#{$constant->name}" class="anchor">#</a>
+ </code>
- {if $config->template['options']['elementDetailsCollapsed']}
- <div class="description short">
- {!$constant|shortDescription:true}
+ <div n:if="$config->template['options']['elementDetailsCollapsed']" class="description short">
+ {$constant|shortDescription:true|noescape}
</div>
- {/if}
<div n:class="description, detailed, $config->template['options']['elementDetailsCollapsed'] ? hidden">
- {!$constant|longDescription}
+ {$constant|longDescription|noescape}
{foreach $template->annotationSort($template->annotationFilter($annotations, array('var'))) as $annotation => $descriptions}
<h4>{$annotation|annotationBeautify}</h4>
<div class="list">
{foreach $descriptions as $description}
{if $description}
- {!$description|annotation:$annotation:$constant}<br>
+ {$description|annotation:$annotation:$constant|noescape}<br>
{/if}
{/foreach}
</div>
{/foreach}
</div>
- </div></td>
+ </td>
+ <td class="value">
+ <div>
+ <a href="#{$constant->name}" class="anchor">#</a>
+ <code>{$constant->valueDefinition|highlightValue:$class|noescape}</code>
+ </div>
+ </td>
</tr>
</table>
@@ -309,11 +312,11 @@ the file LICENSE.md that was distributed with this source code.
</tr>
</table>
- {define #property}
+ {define property}
<tr data-order="{$property->name}" id="{if $property->magic}m{/if}${$property->name}">
<td class="attributes"><code>
{if $property->protected}protected{elseif $property->private}private{else}public{/if} {if $property->static}static{/if} {if $property->readOnly}read-only{elseif $property->writeOnly}write-only{/if}
- {!$property->typeHint|typeLinks:$property}
+ {$property->typeHint|typeLinks:$property|noescape}
</code></td>
<td class="name">
@@ -322,42 +325,42 @@ the file LICENSE.md that was distributed with this source code.
{else}
<a n:tag-if="$config->sourceCode" href="{$property|sourceUrl}" title="Go to source code"><var>${$property->name}</var></a>
{/if}
- </td>
- <td n:if="!$property->magic" class="value"><code>{!$property->defaultValueDefinition|highlightValue:$class}</code></td>
- <td class="description"><div>
- <a href="#{if $property->magic}m{/if}${$property->name}" class="anchor">#</a>
- {if $config->template['options']['elementDetailsCollapsed']}
- <div class="description short">
- {!$property|shortDescription:true}
+ <div n:if="$config->template['options']['elementDetailsCollapsed']" class="description short">
+ {$property|shortDescription:true|noescape}
</div>
- {/if}
<div n:class="description, detailed, $config->template['options']['elementDetailsCollapsed'] ? hidden">
- {!$property|longDescription}
+ {$property|longDescription|noescape}
{foreach $template->annotationSort($template->annotationFilter($property->annotations, array('var'))) as $annotation => $descriptions}
<h4>{$annotation|annotationBeautify}</h4>
<div class="list">
{foreach $descriptions as $description}
{if $description}
- {!$description|annotation:$annotation:$property}<br>
+ {$description|annotation:$annotation:$property|noescape}<br>
{/if}
{/foreach}
</div>
{/foreach}
</div>
- </div></td>
+ </td>
+ <td n:if="!$property->magic" class="value">
+ <div>
+ <a href="#{if $property->magic}m{/if}${$property->name}" class="anchor">#</a>
+ <code>{$property->defaultValueDefinition|highlightValue:$class|noescape}</code>
+ </div>
+ </td>
</tr>
{/define}
{var $ownProperties = $class->ownProperties}
{var $ownMagicProperties = $class->ownMagicProperties}
- <table class="summary" id="properties" n:if="$ownProperties">
+ <table class="summary properties" id="properties" n:if="$ownProperties">
<caption>Properties summary</caption>
{foreach $ownProperties as $property}
- {include #property, property => $property}
+ {include property, property => $property}
{/foreach}
</table>
@@ -383,10 +386,10 @@ the file LICENSE.md that was distributed with this source code.
</tr>
</table>
- <table class="summary" id="magicProperties" n:if="$ownMagicProperties">
+ <table class="summary properties" id="magicProperties" n:if="$ownMagicProperties">
<caption>Magic properties summary</caption>
{foreach $ownMagicProperties as $property}
- {include #property, property => $property}
+ {include property, property => $property}
{/foreach}
</table>
diff --git a/buildscripts/apigen/pradosoft/combined.js.latte b/buildscripts/apigen/pradosoft/combined.js.latte
index 73b12686..93ba3e4d 100644
--- a/buildscripts/apigen/pradosoft/combined.js.latte
+++ b/buildscripts/apigen/pradosoft/combined.js.latte
@@ -1,21 +1,10 @@
-{*
-ApiGen 2.8.0 - API documentation generator for PHP 5.3+
-
-Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
-Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
-Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
-
-For the full copyright and license information, please view
-the file LICENSE.md that was distributed with this source code.
-*}
{contentType javascript}
var ApiGen = ApiGen || {};
ApiGen.config = {$config->template};
{var $scripts = ['jquery.min.js', 'jquery.cookie.js', 'jquery.sprintf.js', 'jquery.autocomplete.js', 'jquery.sortElements.js', 'main.js']}
-{var $dir = dirname($template->getFile())}
{foreach $scripts as $script}
-{!file_get_contents("$dir/js/$script")}
+ {file_get_contents("$basePath/js/$script")|noescape}
{/foreach}
diff --git a/buildscripts/apigen/pradosoft/config.neon b/buildscripts/apigen/pradosoft/config.neon
index 6ddc2f69..e165b8bd 100644
--- a/buildscripts/apigen/pradosoft/config.neon
+++ b/buildscripts/apigen/pradosoft/config.neon
@@ -1,56 +1 @@
-require:
- min: 2.8.0
-
-resources:
- resources: resources
-
-templates:
- common:
- overview.latte: index.html
- combined.js.latte: resources/combined.js
- elementlist.js.latte: elementlist.js
- 404.latte: 404.html
-
- main:
- package:
- filename: package-%s.html
- template: package.latte
- namespace:
- filename: namespace-%s.html
- template: namespace.latte
- class:
- filename: class-%s.html
- template: class.latte
- constant:
- filename: constant-%s.html
- template: constant.latte
- function:
- filename: function-%s.html
- template: function.latte
- source:
- filename: source-%s.html
- template: source.latte
- tree:
- filename: tree.html
- template: tree.latte
- deprecated:
- filename: deprecated.html
- template: deprecated.latte
- todo:
- filename: todo.html
- template: todo.latte
-
- optional:
- sitemap:
- filename: sitemap.xml
- template: sitemap.xml.latte
- opensearch:
- filename: opensearch.xml
- template: opensearch.xml.latte
- robots:
- filename: robots.txt
- template: robots.txt.latte
-
-options:
- elementDetailsCollapsed: Yes
- elementsOrder: natural # alphabetical
+name: "ApiGen theme"
diff --git a/buildscripts/apigen/pradosoft/constant.latte b/buildscripts/apigen/pradosoft/constant.latte
index 441c245d..8552446d 100644
--- a/buildscripts/apigen/pradosoft/constant.latte
+++ b/buildscripts/apigen/pradosoft/constant.latte
@@ -1,38 +1,31 @@
-{*
-ApiGen 2.8.0 - API documentation generator for PHP 5.3+
-
-Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
-Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
-Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
-
-For the full copyright and license information, please view
-the file LICENSE.md that was distributed with this source code.
-*}
{layout '@layout.latte'}
{var $active = 'constant'}
-{block #title}{if $constant->deprecated}Deprecated {/if}Constant {$constant->name}{/block}
+{block title}{if $constant->deprecated}Deprecated {/if}Constant {$constant->name}{/block}
-{block #content}
+{block content}
<div id="content" class="constant">
<h1 n:class="$constant->deprecated ? deprecated">Constant {$constant->shortName}</h1>
{if $constant->valid}
<div class="description" n:if="$template->longDescription($constant)">
- {!$constant|longDescription}
+ {$constant|longDescription|noescape}
</div>
<div class="info">
- {if $constant->inNamespace()}<b>Namespace:</b> {!$constant->namespaceName|namespaceLinks}<br>{/if}
- {if $constant->inPackage()}<b>Package:</b> {!$constant->packageName|packageLinks}<br>{/if}
+ {if $constant->inNamespace()}<b>Namespace:</b> {$constant->namespaceName|namespaceLinks|noescape}<br>{/if}
+ {if $constant->inPackage()}<b>Package:</b> {$constant->packageName|packageLinks|noescape}<br>{/if}
{foreach $template->annotationSort($template->annotationFilter($constant->annotations, array('var'))) as $annotation => $values}
{foreach $values as $value}
<b>{$annotation|annotationBeautify}{if $value}:{/if}</b>
- {!$value|annotation:$annotation:$constant}<br>
+ {$value|annotation:$annotation:$constant|noescape}<br>
{/foreach}
{/foreach}
- <b>Located at</b> <a n:tag-if="$config->sourceCode" href="{$constant|sourceUrl}" title="Go to source code">{$constant->fileName|relativePath}</a><br>
+ <b>Located at</b>
+ <a n:tag-if="$config->sourceCode" href="{$constant|sourceUrl}" title="Go to source code">
+ {$constant->fileName|relativePath}
+ </a><br>
</div>
{var $annotations = $constant->annotations}
@@ -40,12 +33,11 @@ the file LICENSE.md that was distributed with this source code.
<table class="summary" id="vars">
<caption>Value summary</caption>
<tr>
- <td class="name"><code>{!$constant->typeHint|typeLinks:$constant}</code></td>
+ <td class="name"><code>{$constant->typeHint|typeLinks:$constant|noescape}</code></td>
<td class="value">{block|strip}
{var $element = $template->resolveElement($constant->valueDefinition, $constant)}
- {if $element}<a href="{$element|constantUrl}">{$constant->valueDefinition}</a>{else}<code>{!$constant->valueDefinition|highlightValue:$constant}</code>{/if}
+ {if $element}<a href="{$element|constantUrl}">{$constant->valueDefinition}</a>{else}<code>{$constant->valueDefinition|highlightValue:$constant|noescape}</code>{/if}
{/block}</td>
- <td>{ifset $annotations['var']}{!$annotations['var'][0]|description:$constant}{/ifset}</td>
</tr>
</table>
diff --git a/buildscripts/apigen/pradosoft/deprecated.latte b/buildscripts/apigen/pradosoft/deprecated.latte
deleted file mode 100644
index 477e8c55..00000000
--- a/buildscripts/apigen/pradosoft/deprecated.latte
+++ /dev/null
@@ -1,120 +0,0 @@
-{*
-ApiGen 2.8.0 - API documentation generator for PHP 5.3+
-
-Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
-Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
-Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
-
-For the full copyright and license information, please view
-the file LICENSE.md that was distributed with this source code.
-*}
-{layout '@layout.latte'}
-{var $active = 'deprecated'}
-
-{block #title}Deprecated{/block}
-
-{block #content}
-<div id="content">
- <h1>{include #title}</h1>
-
- {define #classes}
- <tr n:foreach="$items as $class">
- <td class="name"><a href="{$class|classUrl}">{$class->name}</a></td>
- <td>
- {foreach $class->annotations['deprecated'] as $description}
- {if $description}
- {!$description|annotation:'deprecated':$class}<br>
- {/if}
- {/foreach}
- </td>
- </tr>
- {/define}
-
- <table class="summary" id="classes" n:if="$deprecatedClasses">
- <caption>Classes summary</caption>
- {include #classes, items => $deprecatedClasses}
- </table>
-
- <table class="summary" id="interfaces" n:if="$deprecatedInterfaces">
- <caption>Interfaces summary</caption>
- {include #classes, items => $deprecatedInterfaces}
- </table>
-
- <table class="summary" id="traits" n:if="$deprecatedTraits">
- <caption>Traits summary</caption>
- {include #classes, items => $deprecatedTraits}
- </table>
-
- <table class="summary" id="exceptions" n:if="$deprecatedExceptions">
- <caption>Exceptions summary</caption>
- {include #classes, items => $deprecatedExceptions}
- </table>
-
- <table class="summary" id="methods" n:if="$deprecatedMethods">
- <caption>Methods summary</caption>
- <tr n:foreach="$deprecatedMethods as $method">
- <td class="name"><a href="{$method->declaringClassName|classUrl}">{$method->declaringClassName}</a></td>
- <td class="name"><code><a href="{$method|methodUrl}">{$method->name}()</a></code></td>
- <td>
- {if $method->hasAnnotation('deprecated')}
- {foreach $method->annotations['deprecated'] as $description}
- {if $description}
- {!$description|annotation:'deprecated':$method}<br>
- {/if}
- {/foreach}
- {/if}
- </td>
- </tr>
- </table>
-
- <table class="summary" id="constants" n:if="$deprecatedConstants">
- <caption>Constants summary</caption>
- <tr n:foreach="$deprecatedConstants as $constant">
- {if $constant->declaringClassName}
- <td class="name"><a href="{$constant->declaringClassName|classUrl}">{$constant->declaringClassName}</a></td>
- <td class="name"><code><a href="{$constant|constantUrl}"><b>{$constant->name}</b></a></code></td>
- {else}
- <td class="name" n:if="$namespaces || $classes || $interfaces || $traits || $exceptions"><a n:if="$constant->namespaceName" href="{$constant->namespaceName|namespaceUrl}">{$constant->namespaceName}</a></td>
- <td n:class="name"><code><a href="{$constant|constantUrl}"><b>{$constant->shortName}</b></a></code></td>
- {/if}
- <td>
- {foreach $constant->annotations['deprecated'] as $description}
- {if $description}
- {!$description|annotation:'deprecated':$constant}<br>
- {/if}
- {/foreach}
- </td>
- </tr>
- </table>
-
- <table class="summary" id="properties" n:if="$deprecatedProperties">
- <caption>Properties summary</caption>
- <tr n:foreach="$deprecatedProperties as $property">
- <td class="name"><a href="{$property->declaringClassName|classUrl}">{$property->declaringClassName}</a></td>
- <td class="name"><a href="{$property|propertyUrl}"><var>${$property->name}</var></a></td>
- <td>
- {foreach $property->annotations['deprecated'] as $description}
- {if $description}
- {!$description|annotation:'deprecated':$property}<br>
- {/if}
- {/foreach}
- </td>
- </tr>
- </table>
-
- <table class="summary" id="functions" n:if="$deprecatedFunctions">
- <caption>Functions summary</caption>
- <tr n:foreach="$deprecatedFunctions as $function">
- <td class="name" n:if="$namespaces"><a n:if="$function->namespaceName" href="{$function->namespaceName|namespaceUrl}">{$function->namespaceName}</a></td>
- <td class="name"><code><a href="{$function|functionUrl}">{$function->shortName}</a></code></td>
- <td>
- {foreach $function->annotations['deprecated'] as $description}
- {if $description}
- {!$description|annotation:'deprecated':$function}<br>
- {/if}
- {/foreach}
- </td>
- </tr>
- </table>
-</div>
-{/block}
diff --git a/buildscripts/apigen/pradosoft/elementlist.js.latte b/buildscripts/apigen/pradosoft/elementlist.js.latte
index 6272ba10..8becc227 100644
--- a/buildscripts/apigen/pradosoft/elementlist.js.latte
+++ b/buildscripts/apigen/pradosoft/elementlist.js.latte
@@ -1,13 +1,3 @@
-{*
-ApiGen 2.8.0 - API documentation generator for PHP 5.3+
-
-Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
-Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
-Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
-
-For the full copyright and license information, please view
-the file LICENSE.md that was distributed with this source code.
-*}
{contentType javascript}
var ApiGen = ApiGen || {};
diff --git a/buildscripts/apigen/pradosoft/function.latte b/buildscripts/apigen/pradosoft/function.latte
index 6c4c3238..5797cf17 100644
--- a/buildscripts/apigen/pradosoft/function.latte
+++ b/buildscripts/apigen/pradosoft/function.latte
@@ -1,52 +1,43 @@
-{*
-ApiGen 2.8.0 - API documentation generator for PHP 5.3+
-
-Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
-Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
-Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
-
-For the full copyright and license information, please view
-the file LICENSE.md that was distributed with this source code.
-*}
{layout '@layout.latte'}
{var $active = 'function'}
-{block #title}{if $function->deprecated}Deprecated {/if}Function {$function->name}{/block}
+{block title}{if $function->deprecated}Deprecated {/if}Function {$function->name}{/block}
-{block #content}
+{block content}
<div id="content" class="function">
<h1 n:class="$function->deprecated ? deprecated">Function {$function->shortName}</h1>
{if $function->valid}
<div class="description" n:if="$template->longDescription($function)">
- {!$function|longDescription}
+ {$function|longDescription|noescape}
</div>
<div class="info">
- {if $function->inNamespace()}<b>Namespace:</b> {!$function->namespaceName|namespaceLinks}<br>{/if}
- {if $function->inPackage()}<b>Package:</b> {!$function->packageName|packageLinks}<br>{/if}
+ {if $function->inNamespace()}<b>Namespace:</b> {$function->namespaceName|namespaceLinks|noescape}<br>{/if}
+ {if $function->inPackage()}<b>Package:</b> {$function->packageName|packageLinks|noescape}<br>{/if}
{foreach $template->annotationSort($template->annotationFilter($function->annotations, array('param', 'return', 'throws'))) as $annotation => $values}
{foreach $values as $value}
<b>{$annotation|annotationBeautify}{if $value}:{/if}</b>
- {!$value|annotation:$annotation:$function}<br>
+ {$value|annotation:$annotation:$function|noescape}<br>
{/foreach}
{/foreach}
- <b>Located at</b> <a n:tag-if="$config->sourceCode" href="{$function|sourceUrl}" title="Go to source code">{$function->fileName|relativePath}</a><br>
+ <b>Located at</b>
+ <a n:tag-if="$config->sourceCode" href="{$function|sourceUrl}" title="Go to source code">
+ {$function->fileName|relativePath}
+ </a><br>
</div>
{var $annotations = $function->annotations}
- <table class="summary" id="parameters" n:if="$function->numberOfParameters">
+ <table class="summary" id="parameters" n:if="count($function->parameters)">
<caption>Parameters summary</caption>
<tr n:foreach="$function->parameters as $parameter" id="${$parameter->name}">
- <td class="name"><code>{!$parameter->typeHint|typeLinks:$function}</code></td>
+ <td class="name"><code>{$parameter->typeHint|typeLinks:$function|noescape}</code></td>
<td class="value"><code>{block|strip}
- <var>{if $parameter->passedByReference}&amp; {/if}${$parameter->name}</var>{if $parameter->defaultValueAvailable} = {!$parameter->defaultValueDefinition|highlightPHP:$function}{elseif $parameter->unlimited},…{/if}
+ <var>{if $parameter->passedByReference}&amp; {/if}${$parameter->name}</var>{if $parameter->defaultValueAvailable} = {$parameter->defaultValueDefinition|highlightPHP:$function|noescape}{elseif $parameter->unlimited},…{/if}
{/block}</code></td>
- <td>
- {ifset $annotations['param'][$parameter->position]}{!$annotations['param'][$parameter->position]|description:$parameter}{/ifset}
- </td>
+ <td>{$parameter->description|description:$function}</td>
</tr>
</table>
@@ -54,10 +45,10 @@ the file LICENSE.md that was distributed with this source code.
<caption>Return value summary</caption>
<tr>
<td class="name"><code>
- {!$annotations['return'][0]|typeLinks:$function}
+ {$annotations['return'][0]|typeLinks:$function|noescape}
</code></td>
<td>
- {!$annotations['return'][0]|description:$function}
+ {$annotations['return'][0]|description:$function|noescape}
</td>
</tr>
</table>
@@ -66,10 +57,10 @@ the file LICENSE.md that was distributed with this source code.
<caption>Thrown exceptions summary</caption>
<tr n:foreach="$annotations['throws'] as $throws">
<td class="name"><code>
- {!$throws|typeLinks:$function}
+ {$throws|typeLinks:$function|noescape}
</code></td>
<td>
- {!$throws|description:$function}
+ {$throws|description:$function|noescape}
</td>
</tr>
</table>
diff --git a/buildscripts/apigen/pradosoft/js/jquery.autocomplete.js b/buildscripts/apigen/pradosoft/js/jquery.autocomplete.js
index b8bec34d..ecc032da 100644
--- a/buildscripts/apigen/pradosoft/js/jquery.autocomplete.js
+++ b/buildscripts/apigen/pradosoft/js/jquery.autocomplete.js
@@ -1,5 +1,5 @@
-/*!
- * jQuery Autocomplete plugin 1.1
+/*
+ * jQuery Autocomplete plugin 1.2.3
*
* Copyright (c) 2009 Jörn Zaefferer
*
@@ -7,7 +7,9 @@
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
- * Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $
+ * With small modifications by Alfonso Gómez-Arzola.
+ * See changelog for details.
+ *
*/
;(function($) {
@@ -19,7 +21,8 @@ $.fn.extend({
url: isUrl ? urlOrData : null,
data: isUrl ? null : urlOrData,
delay: isUrl ? $.Autocompleter.defaults.delay : 10,
- max: options && !options.scroll ? 10 : 150
+ max: options && !options.scroll ? 10 : 150,
+ noRecord: "No Records."
}, options);
// if highlight is set to false, replace it with a do-nothing function
@@ -28,8 +31,6 @@ $.fn.extend({
// if the formatMatch option is not specified, then use formatItem for backwards compatibility
options.formatMatch = options.formatMatch || options.formatItem;
- options.show = options.show || function(list) {};
-
return this.each(function() {
new $.Autocompleter(this, options);
});
@@ -66,6 +67,11 @@ $.Autocompleter = function(input, options) {
BACKSPACE: 8
};
+ var globalFailure = null;
+ if(options.failure != null && typeof options.failure == "function") {
+ globalFailure = options.failure;
+ }
+
// Create $ object for input element
var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass);
@@ -79,8 +85,18 @@ $.Autocompleter = function(input, options) {
};
var select = $.Autocompleter.Select(options, input, selectCurrent, config);
- // only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all
- $input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) {
+ var blockSubmit;
+
+ // prevent form submit in opera when selecting with return key
+ navigator.userAgent.indexOf("Opera") != -1 && $(input.form).bind("submit.autocomplete", function() {
+ if (blockSubmit) {
+ blockSubmit = false;
+ return false;
+ }
+ });
+
+ // older versions of opera don't trigger keydown multiple times while pressed, others don't work with keypress at all
+ $input.bind((navigator.userAgent.indexOf("Opera") != -1 && !'KeyboardEvent' in window ? "keypress" : "keydown") + ".autocomplete", function(event) {
// a keypress means the input has focus
// avoids issue where input had focus before the autocomplete was applied
hasFocus = 1;
@@ -89,8 +105,8 @@ $.Autocompleter = function(input, options) {
switch(event.keyCode) {
case KEY.UP:
- event.preventDefault();
if ( select.visible() ) {
+ event.preventDefault();
select.prev();
} else {
onChange(0, true);
@@ -98,8 +114,8 @@ $.Autocompleter = function(input, options) {
break;
case KEY.DOWN:
- event.preventDefault();
if ( select.visible() ) {
+ event.preventDefault();
select.next();
} else {
onChange(0, true);
@@ -107,8 +123,8 @@ $.Autocompleter = function(input, options) {
break;
case KEY.PAGEUP:
- event.preventDefault();
if ( select.visible() ) {
+ event.preventDefault();
select.pageUp();
} else {
onChange(0, true);
@@ -116,8 +132,8 @@ $.Autocompleter = function(input, options) {
break;
case KEY.PAGEDOWN:
- event.preventDefault();
if ( select.visible() ) {
+ event.preventDefault();
select.pageDown();
} else {
onChange(0, true);
@@ -129,8 +145,10 @@ $.Autocompleter = function(input, options) {
case KEY.TAB:
case KEY.RETURN:
if( selectCurrent() ) {
- //event.preventDefault();
- //return false;
+ // stop default to prevent a form submit, Opera needs special handling
+ event.preventDefault();
+ blockSubmit = true;
+ return false;
}
break;
@@ -148,17 +166,24 @@ $.Autocompleter = function(input, options) {
// results if the field no longer has focus
hasFocus++;
}).blur(function() {
- hasFocus = 0;
+ hasFocus = 0;
if (!config.mouseDownOnSelect) {
hideResults();
}
}).click(function() {
// show select when clicking in a focused field
- if ( hasFocus++ > 1 && !select.visible() ) {
- onChange(0, true);
+ // but if clickFire is true, don't require field
+ // to be focused to begin with; just show select
+ if( options.clickFire ) {
+ if ( !select.visible() ) {
+ onChange(0, true);
+ }
+ } else {
+ if ( hasFocus++ > 1 && !select.visible() ) {
+ onChange(0, true);
+ }
}
}).bind("search", function() {
- // TODO why not just specifying both arguments?
var fn = (arguments.length > 1) ? arguments[1] : null;
function findValueCallback(q, data) {
var result;
@@ -179,7 +204,7 @@ $.Autocompleter = function(input, options) {
}).bind("flushCache", function() {
cache.flush();
}).bind("setOptions", function() {
- $.extend(options, arguments[1]);
+ $.extend(true, options, arguments[1]);
// if we've updated the data, repopulate
if ( "data" in arguments[1] )
cache.populate();
@@ -213,7 +238,6 @@ $.Autocompleter = function(input, options) {
progress += seperator;
});
words[wordAt] = v;
- // TODO this should set the cursor to the right position, but it gets overriden somewhere
//$.Autocompleter.Selection(input, progress + seperator, progress + seperator);
v = words.join( options.multipleSeparator );
}
@@ -336,8 +360,14 @@ $.Autocompleter = function(input, options) {
term = term.toLowerCase();
var data = cache.load(term);
// recieve the cached data
- if (data && data.length) {
- success(term, data);
+ if (data) {
+ if(data.length) {
+ success(term, data);
+ }
+ else{
+ var parsed = options.parse && options.parse(options.noRecord) || parse(options.noRecord);
+ success(term,parsed);
+ }
// if an AJAX url has been supplied, try loading the data now
} else if( (typeof options.url == "string") && (options.url.length > 0) ){
@@ -368,7 +398,12 @@ $.Autocompleter = function(input, options) {
} else {
// if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match
select.emptyList();
- failure(term);
+ if(globalFailure != null) {
+ globalFailure();
+ }
+ else {
+ failure(term);
+ }
}
};
@@ -404,8 +439,8 @@ $.Autocompleter.defaults = {
matchCase: false,
matchSubset: true,
matchContains: false,
- cacheLength: 10,
- max: 100,
+ cacheLength: 100,
+ max: 1000,
mustMatch: false,
extraParams: {},
selectFirst: true,
@@ -414,12 +449,15 @@ $.Autocompleter.defaults = {
autoFill: false,
width: 0,
multiple: false,
- multipleSeparator: ", ",
+ multipleSeparator: " ",
+ inputFocus: true,
+ clickFire: false,
highlight: function(value, term) {
return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
},
- scroll: true,
- scrollHeight: 180
+ scroll: true,
+ scrollHeight: 180,
+ scrollJumpPosition: true
};
$.Autocompleter.Cache = function(options) {
@@ -428,14 +466,9 @@ $.Autocompleter.Cache = function(options) {
var length = 0;
function matchSubset(s, sub) {
- if (!options.matchCase)
- s = s.toLowerCase();
- var i = s.indexOf(sub);
- if (options.matchContains == "word"){
- i = s.toLowerCase().search("\\b" + sub.toLowerCase());
- }
- if (i == -1) return false;
- return i == 0 || options.matchContains;
+ return (new RegExp(sub.toUpperCase().replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1").replace(/[A-Z0-9]/g, function(m, offset) {
+ return offset === 0 ? '(?:' + m + '|^' + m.toLowerCase() + ')' : '(?:.*' + m + '|' + m.toLowerCase() + ')';
+ }))).test(s); // find by initials
};
function add(q, value) {
@@ -467,7 +500,7 @@ $.Autocompleter.Cache = function(options) {
rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue;
var value = options.formatMatch(rawValue, i+1, options.data.length);
- if ( value === false )
+ if ( typeof(value) === 'undefined' || value === false )
continue;
var firstChar = value.charAt(0).toLowerCase();
@@ -582,18 +615,25 @@ $.Autocompleter.Select = function (options, input, select, config) {
.hide()
.addClass(options.resultsClass)
.css("position", "absolute")
- .appendTo(document.body);
+ .appendTo(document.body)
+ .hover(function(event) {
+ // Browsers except FF do not fire mouseup event on scrollbars, resulting in mouseDownOnSelect remaining true, and results list not always hiding.
+ if($(this).is(":visible")) {
+ input.focus();
+ }
+ config.mouseDownOnSelect = false;
+ });
list = $("<ul/>").appendTo(element).mouseover( function(event) {
if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') {
- active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event));
- $(target(event)).addClass(CLASSES.ACTIVE);
- }
+ active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event));
+ $(target(event)).addClass(CLASSES.ACTIVE);
+ }
}).click(function(event) {
$(target(event)).addClass(CLASSES.ACTIVE);
select();
- // TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus
- input.focus();
+ if( options.inputFocus )
+ input.focus();
return false;
}).mousedown(function() {
config.mouseDownOnSelect = true;
@@ -620,29 +660,32 @@ $.Autocompleter.Select = function (options, input, select, config) {
function moveSelect(step) {
listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE);
movePosition(step);
- var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE);
- if(options.scroll) {
- var offset = 0;
- listItems.slice(0, active).each(function() {
+ var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE);
+ if(options.scroll) {
+ var offset = 0;
+ listItems.slice(0, active).each(function() {
offset += this.offsetHeight;
});
- if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) {
- list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight());
- } else if(offset < list.scrollTop()) {
- list.scrollTop(offset);
- }
- }
+ if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) {
+ list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight());
+ } else if(offset < list.scrollTop()) {
+ list.scrollTop(offset);
+ }
+ }
};
function movePosition(step) {
- active += step;
- if (active < 0) {
- active = listItems.size() - 1;
- } else if (active >= listItems.size()) {
- active = 0;
+ if (options.scrollJumpPosition || (!options.scrollJumpPosition && !((step < 0 && active == 0) || (step > 0 && active == listItems.size() - 1)) )) {
+ active += step;
+ if (active < 0) {
+ active = listItems.size() - 1;
+ } else if (active >= listItems.size()) {
+ active = 0;
+ }
}
}
+
function limitNumberOfItems(available) {
return options.max && options.max < available
? options.max
@@ -712,32 +755,31 @@ $.Autocompleter.Select = function (options, input, select, config) {
show: function() {
var offset = $(input).offset();
element.css({
- width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).innerWidth(),
+ width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(),
top: offset.top + input.offsetHeight,
left: offset.left
}).show();
- options.show(element);
- if(options.scroll) {
- list.scrollTop(0);
- list.css({
+ if(options.scroll) {
+ list.scrollTop(0);
+ list.css({
maxHeight: options.scrollHeight,
overflow: 'auto'
});
- if($.browser.msie && typeof document.body.style.maxHeight === "undefined") {
+ if(navigator.userAgent.indexOf("MSIE") != -1 && typeof document.body.style.maxHeight === "undefined") {
var listHeight = 0;
listItems.each(function() {
listHeight += this.offsetHeight;
});
var scrollbarsVisible = listHeight > options.scrollHeight;
- list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight );
+ list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight );
if (!scrollbarsVisible) {
// IE doesn't recalculate width when scrollbar disappears
listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) );
}
- }
+ }
- }
+ }
},
selected: function() {
var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);
@@ -796,4 +838,4 @@ $.fn.selection = function(start, end) {
}
};
-})(jQuery); \ No newline at end of file
+})(jQuery);
diff --git a/buildscripts/apigen/pradosoft/js/jquery.cookie.js b/buildscripts/apigen/pradosoft/js/jquery.cookie.js
index 6df1faca..3838d7ed 100644
--- a/buildscripts/apigen/pradosoft/js/jquery.cookie.js
+++ b/buildscripts/apigen/pradosoft/js/jquery.cookie.js
@@ -1,96 +1,114 @@
-/**
- * Cookie plugin
- *
- * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
+/*!
+ * jQuery Cookie Plugin v1.4.1
+ * https://github.com/carhartl/jquery-cookie
*
+ * Copyright 2006, 2014 Klaus Hartl
+ * Released under the MIT license
*/
+(function (factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD (Register as an anonymous module)
+ define(['jquery'], factory);
+ } else if (typeof exports === 'object') {
+ // Node/CommonJS
+ module.exports = factory(require('jquery'));
+ } else {
+ // Browser globals
+ factory(jQuery);
+ }
+}(function ($) {
-/**
- * Create a cookie with the given name and value and other optional parameters.
- *
- * @example $.cookie('the_cookie', 'the_value');
- * @desc Set the value of a cookie.
- * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
- * @desc Create a cookie with all available options.
- * @example $.cookie('the_cookie', 'the_value');
- * @desc Create a session cookie.
- * @example $.cookie('the_cookie', null);
- * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
- * used when the cookie was set.
- *
- * @param String name The name of the cookie.
- * @param String value The value of the cookie.
- * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
- * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
- * If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
- * If set to null or omitted, the cookie will be a session cookie and will not be retained
- * when the the browser exits.
- * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
- * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
- * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
- * require a secure protocol (like HTTPS).
- * @type undefined
- *
- * @name $.cookie
- * @cat Plugins/Cookie
- * @author Klaus Hartl/klaus.hartl@stilbuero.de
- */
+ var pluses = /\+/g;
-/**
- * Get the value of a cookie with the given name.
- *
- * @example $.cookie('the_cookie');
- * @desc Get the value of a cookie.
- *
- * @param String name The name of the cookie.
- * @return The value of the cookie.
- * @type String
- *
- * @name $.cookie
- * @cat Plugins/Cookie
- * @author Klaus Hartl/klaus.hartl@stilbuero.de
- */
-jQuery.cookie = function(name, value, options) {
- if (typeof value != 'undefined') { // name and value given, set cookie
- options = options || {};
- if (value === null) {
- value = '';
- options.expires = -1;
- }
- var expires = '';
- if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
- var date;
- if (typeof options.expires == 'number') {
- date = new Date();
- date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
- } else {
- date = options.expires;
- }
- expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
- }
- // CAUTION: Needed to parenthesize options.path and options.domain
- // in the following expressions, otherwise they evaluate to undefined
- // in the packed version for some reason...
- var path = options.path ? '; path=' + (options.path) : '';
- var domain = options.domain ? '; domain=' + (options.domain) : '';
- var secure = options.secure ? '; secure' : '';
- document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
- } else { // only name given, get cookie
- var cookieValue = null;
- if (document.cookie && document.cookie != '') {
- var cookies = document.cookie.split(';');
- for (var i = 0; i < cookies.length; i++) {
- var cookie = jQuery.trim(cookies[i]);
- // Does this cookie string begin with the name we want?
- if (cookie.substring(0, name.length + 1) == (name + '=')) {
- cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
- break;
- }
- }
- }
- return cookieValue;
- }
-}; \ No newline at end of file
+ function encode(s) {
+ return config.raw ? s : encodeURIComponent(s);
+ }
+
+ function decode(s) {
+ return config.raw ? s : decodeURIComponent(s);
+ }
+
+ function stringifyCookieValue(value) {
+ return encode(config.json ? JSON.stringify(value) : String(value));
+ }
+
+ function parseCookieValue(s) {
+ if (s.indexOf('"') === 0) {
+ // This is a quoted cookie as according to RFC2068, unescape...
+ s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
+ }
+
+ try {
+ // Replace server-side written pluses with spaces.
+ // If we can't decode the cookie, ignore it, it's unusable.
+ // If we can't parse the cookie, ignore it, it's unusable.
+ s = decodeURIComponent(s.replace(pluses, ' '));
+ return config.json ? JSON.parse(s) : s;
+ } catch(e) {}
+ }
+
+ function read(s, converter) {
+ var value = config.raw ? s : parseCookieValue(s);
+ return $.isFunction(converter) ? converter(value) : value;
+ }
+
+ var config = $.cookie = function (key, value, options) {
+
+ // Write
+
+ if (arguments.length > 1 && !$.isFunction(value)) {
+ options = $.extend({}, config.defaults, options);
+
+ if (typeof options.expires === 'number') {
+ var days = options.expires, t = options.expires = new Date();
+ t.setMilliseconds(t.getMilliseconds() + days * 864e+5);
+ }
+
+ return (document.cookie = [
+ encode(key), '=', stringifyCookieValue(value),
+ options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
+ options.path ? '; path=' + options.path : '',
+ options.domain ? '; domain=' + options.domain : '',
+ options.secure ? '; secure' : ''
+ ].join(''));
+ }
+
+ // Read
+
+ var result = key ? undefined : {},
+ // To prevent the for loop in the first place assign an empty array
+ // in case there are no cookies at all. Also prevents odd result when
+ // calling $.cookie().
+ cookies = document.cookie ? document.cookie.split('; ') : [],
+ i = 0,
+ l = cookies.length;
+
+ for (; i < l; i++) {
+ var parts = cookies[i].split('='),
+ name = decode(parts.shift()),
+ cookie = parts.join('=');
+
+ if (key === name) {
+ // If second argument (value) is a function it's a converter...
+ result = read(cookie, value);
+ break;
+ }
+
+ // Prevent storing a cookie that we couldn't decode.
+ if (!key && (cookie = read(cookie)) !== undefined) {
+ result[name] = cookie;
+ }
+ }
+
+ return result;
+ };
+
+ config.defaults = {};
+
+ $.removeCookie = function (key, options) {
+ // Must not alter options, thus extending a fresh object...
+ $.cookie(key, '', $.extend({}, options, { expires: -1 }));
+ return !$.cookie(key);
+ };
+
+}));
diff --git a/buildscripts/apigen/pradosoft/js/jquery.min.js b/buildscripts/apigen/pradosoft/js/jquery.min.js
index 3ca5e0f5..ce1b6b6e 100644
--- a/buildscripts/apigen/pradosoft/js/jquery.min.js
+++ b/buildscripts/apigen/pradosoft/js/jquery.min.js
@@ -1,4 +1,5 @@
-/*! jQuery v1.7 jquery.com | jquery.org/license */
-(function(a,b){function cA(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cx(a){if(!cm[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cn||(cn=c.createElement("iframe"),cn.frameBorder=cn.width=cn.height=0),b.appendChild(cn);if(!co||!cn.createElement)co=(cn.contentWindow||cn.contentDocument).document,co.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),co.close();d=co.createElement(a),co.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cn)}cm[a]=e}return cm[a]}function cw(a,b){var c={};f.each(cs.concat.apply([],cs.slice(0,b)),function(){c[this]=a});return c}function cv(){ct=b}function cu(){setTimeout(cv,0);return ct=f.now()}function cl(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ck(){try{return new a.XMLHttpRequest}catch(b){}}function ce(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cd(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function cc(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bG.test(a)?d(a,e):cc(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)cc(a+"["+e+"]",b[e],c,d);else d(a,b)}function cb(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function ca(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bV,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=ca(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=ca(a,c,d,e,"*",g));return l}function b_(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bR),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bE(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bz:bA;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bB(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function br(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bi,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bq(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bp(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bp)}function bp(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bo(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bn(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bm(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bl(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function X(a){var b=Y.split(" "),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(){return!0}function M(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.add(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(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return a!=null&&m.test(a)&&!isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(I)return I.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())}),typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return e});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){return i.done.apply(i,arguments).fail.apply(i,arguments)},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/><nav></nav>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,unknownElems:!!a.getElementsByTagName("nav").length,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",enctype:!!c.createElement("form").enctype,submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.lastChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-999px",top:"-999px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;f(function(){var a,b,d,e,g,h,i=1,j="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",l="visibility:hidden;border:0;",n="style='"+j+"border:5px solid #000;padding:0;'",p="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>";m=c.getElementsByTagName("body")[0];!m||(a=c.createElement("div"),a.style.cssText=l+"width:0;height:0;position:static;top:0;margin-top:"+i+"px",m.insertBefore(a,m.firstChild),o=c.createElement("div"),o.style.cssText=j+l,o.innerHTML=p,a.appendChild(o),b=o.firstChild,d=b.firstChild,g=b.nextSibling.firstChild.firstChild,h={doesNotAddBorder:d.offsetTop!==5,doesAddBorderForTableAndCells:g.offsetTop===5},d.style.position="fixed",d.style.top="20px",h.fixedPosition=d.offsetTop===20||d.offsetTop===15,d.style.position=d.style.top="",b.style.overflow="hidden",b.style.position="relative",h.subtractsBorderForOverflowNotVisible=d.offsetTop===-5,h.doesNotIncludeMarginInBodyOffset=m.offsetTop!==i,m.removeChild(a),o=a=null,f.extend(k,h))}),o.innerHTML="",n.removeChild(o),o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[f.expando]:a[f.expando]&&f.expando,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[f.expando]=n=++f.uuid:n=f.expando),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[f.expando]:f.expando;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)?b=b:b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" "));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];if(!arguments.length){if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}return b}e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!a||j===3||j===8||j===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g},removeAttr:function(a,b){var c,d,e,g,h=0;if(a.nodeType===1){d=(b||"").split(p),g=d.length;for(;h<g;h++)e=d[h].toLowerCase(),c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1)}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return b;h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/\.(.*)$/,A=/^(?:textarea|input|select)$/i,B=/\./g,C=/ /g,D=/[^\w\s.|`]/g,E=/^([^\.]*)?(?:\.(.+))?$/,F=/\bhover(\.\S+)?/,G=/^key/,H=/^(?:mouse|contextmenu)|click/,I=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,J=function(a){var b=I.exec(a);b&&
-(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},K=function(a,b){return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||a.id===b[2])&&(!b[3]||b[3].test(a.className))},L=function(a){return f.event.special.hover?a:a.replace(F,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=L(c).split(" ");for(k=0;k<c.length;k++){l=E.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,namespace:n.join(".")},p),g&&(o.quick=J(g),!o.quick&&f.expr.match.POS.test(g)&&(o.isPositional=!0)),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d){var e=f.hasData(a)&&f._data(a),g,h,i,j,k,l,m,n,o,p,q;if(!!e&&!!(m=e.events)){b=L(b||"").split(" ");for(g=0;g<b.length;g++){h=E.exec(b[g])||[],i=h[1],j=h[2];if(!i){j=j?"."+j:"";for(l in m)f.event.remove(a,l+j,c,d);return}n=f.event.special[i]||{},i=(d?n.delegateType:n.bindType)||i,p=m[i]||[],k=p.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;if(c||j||d||n.remove)for(l=0;l<p.length;l++){q=p[l];if(!c||c.guid===q.guid)if(!j||j.test(q.namespace))if(!d||d===q.selector||d==="**"&&q.selector)p.splice(l--,1),q.selector&&p.delegateCount--,n.remove&&n.remove.call(a,q)}else p.length=0;p.length===0&&k!==p.length&&((!n.teardown||n.teardown.call(a,j)===!1)&&f.removeEvent(a,i,e.handle),delete m[i])}f.isEmptyObject(m)&&(o=e.handle,o&&(o.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"",(g||!e)&&c.preventDefault();if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,n=null;for(m=e.parentNode;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length;l++){m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d);if(c.isPropagationStopped())break}c.type=h,c.isDefaultPrevented()||(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=(f.event.special[c.type]||{}).handle,j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click"))for(m=c.target;m!=this;m=m.parentNode||this){o={},q=[];for(k=0;k<e;k++)r=d[k],s=r.selector,t=o[s],r.isPositional?t=(t||(o[s]=f(s))).index(m)>=0:t===b&&(t=o[s]=r.quick?K(m,r.quick):f(m).is(s)),t&&q.push(r);q.length&&j.push({elem:m,matches:q})}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){p=j[k],c.currentTarget=p.elem;for(l=0;l<p.matches.length&&!c.isImmediatePropagationStopped();l++){r=p.matches[l];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=(i||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement wheelDelta".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},focus:{delegateType:"focusin",noBubble:!0},blur:{delegateType:"focusout",noBubble:!0},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?N:M):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=N;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=N;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=N,this.stopPropagation()},isDefaultPrevented:M,isPropagationStopped:M,isImmediatePropagationStopped:M},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]=f.event.special[b]={delegateType:b,bindType:b,handle:function(a){var b=this,c=a.relatedTarget,d=a.handleObj,e=d.selector,g,h;if(!c||d.origType===a.type||c!==b&&!f.contains(b,c))g=a.type,a.type=d.origType,h=d.handler.apply(this,arguments),a.type=g;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(A.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;A.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return A.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=M;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=M);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),G.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),H.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw"Syntax error, unrecognized expression: "+a};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?T.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y="abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",Z=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,_=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,ba=/<([\w:]+)/,bb=/<tbody/i,bc=/<|&#?\w+;/,bd=/<(?:script|style)/i,be=/<(?:script|object|embed|option|style)/i,bf=new RegExp("<(?:"+Y.replace(" ","|")+")","i"),bg=/checked\s*(?:[^=]|=\s*.checked.)/i,bh=/\/(java|ecma)script/i,bi=/^\s*<!(?:\[CDATA\[|\-\-)/,bj={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bk=X(c);bj.optgroup=bj.option,bj.tbody=bj.tfoot=bj.colgroup=bj.caption=bj.thead,bj.th=bj.td,f.support.htmlSerialize||(bj._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(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,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after"
-,arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Z,""):null;if(typeof a=="string"&&!bd.test(a)&&(f.support.leadingWhitespace||!$.test(a))&&!bj[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(_,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bg.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bl(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,br)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!be.test(j)&&(f.support.checkClone||!bg.test(j))&&!f.support.unknownElems&&bf.test(j)&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bn(a,d),e=bo(a),g=bo(d);for(h=0;e[h];++h)g[h]&&bn(e[h],g[h])}if(b){bm(a,d);if(c){e=bo(a),g=bo(d);for(h=0;e[h];++h)bm(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bc.test(k))k=b.createTextNode(k);else{k=k.replace(_,"<$1></$2>");var l=(ba.exec(k)||["",""])[1].toLowerCase(),m=bj[l]||bj._default,n=m[0],o=b.createElement("div");b===c?bk.appendChild(o):X(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=bb.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&$.test(k)&&o.insertBefore(b.createTextNode($.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bq(k[i]);else bq(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bh.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bs=/alpha\([^)]*\)/i,bt=/opacity=([^)]*)/,bu=/([A-Z]|^ms)/g,bv=/^-?\d+(?:px)?$/i,bw=/^-?\d/,bx=/^([\-+])=([\-+.\de]+)/,by={position:"absolute",visibility:"hidden",display:"block"},bz=["Left","Right"],bA=["Top","Bottom"],bB,bC,bD;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bB(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bx.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bB)return bB(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bE(a,b,d);f.swap(a,by,function(){e=bE(a,b,d)});return e}},set:function(a,b){if(!bv.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bt.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bs,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bs.test(g)?g.replace(bs,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bB(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bC=function(a,c){var d,e,g;c=c.replace(bu,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bD=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bv.test(f)&&bw.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bB=bC||bD,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bF=/%20/g,bG=/\[\]$/,bH=/\r?\n/g,bI=/#.*$/,bJ=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bK=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bL=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bM=/^(?:GET|HEAD)$/,bN=/^\/\//,bO=/\?/,bP=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bQ=/^(?:select|textarea)/i,bR=/\s+/,bS=/([?&])_=[^&]*/,bT=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bU=f.fn.load,bV={},bW={},bX,bY,bZ=["*/"]+["*"];try{bX=e.href}catch(b$){bX=c.createElement("a"),bX.href="",bX=bX.href}bY=bT.exec(bX.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bU)return bU.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bP,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bQ.test(this.nodeName)||bK.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bH,"\r\n")}}):{name:b.name,value:c.replace(bH,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?cb(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),cb(a,b);return a},ajaxSettings:{url:bX,isLocal:bL.test(bY[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bZ},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:b_(bV),ajaxTransport:b_(bW),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cd(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=ce(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bJ.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bI,"").replace(bN,bY[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bR),d.crossDomain==null&&(r=bT.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bY[1]&&r[2]==bY[2]&&(r[3]||(r[1]==="http:"?80:443))==(bY[3]||(bY[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),ca(bV,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bM.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bO.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bS,"$1_="+x);d.url=y+(y===d.url?(bO.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bZ+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=ca(bW,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)cc(g,a[g],c,e);return d.join("&").replace(bF,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cf=f.now(),cg=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cf++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cg.test(b.url)||e&&cg.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cg,l),b.url===j&&(e&&(k=k.replace(cg,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ch=a.ActiveXObject?function(){for(var a in cj)cj[a](0,1)}:!1,ci=0,cj;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ck()||cl()}:ck,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ch&&delete cj[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++ci,ch&&(cj||(cj={},f(a).unload(ch)),cj[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cm={},cn,co,cp=/^(?:toggle|show|hide)$/,cq=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cr,cs=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],ct;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cw("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cx(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cw("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cw("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cx(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cp.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=cq.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cw("show",1),slideUp:cw("hide",1),slideToggle:cw("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=ct||cu(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cr&&(cr=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=ct||cu(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cr),cr=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now))}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cy=/^t(?:able|d|h)$/i,cz=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cA(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cy.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cz.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cz.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cA(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cA(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file
+/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
+*/
+(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav></:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t
+}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);
+u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("<div>").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
diff --git a/buildscripts/apigen/pradosoft/js/main.js b/buildscripts/apigen/pradosoft/js/main.js
index a0a890ab..18420376 100644
--- a/buildscripts/apigen/pradosoft/js/main.js
+++ b/buildscripts/apigen/pradosoft/js/main.js
@@ -1,15 +1,4 @@
-/*!
- * ApiGen 2.8.0 - API documentation generator for PHP 5.3+
- *
- * Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
- * Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
- * Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
- *
- * For the full copyright and license information, please view
- * the file LICENSE.md that was distributed with this source code.
- */
-
-$(function() {
+$(window).load(function() {
var $document = $(document);
var $left = $('#left');
var $right = $('#right');
@@ -57,8 +46,15 @@ $(function() {
matchContains: true,
scrollHeight: 200,
max: 20,
+ noRecord: '',
+ highlight: function(value, term) {
+ var term = term.toUpperCase().replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1").replace(/[A-Z0-9]/g, function(m, offset) {
+ return offset === 0 ? '(?:' + m + '|^' + m.toLowerCase() + ')' : '(?:(?:[^<>]|<[^<>]*>)*' + m + '|' + m.toLowerCase() + ')';
+ });
+ return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term + ")(?![^<>]*>)(?![^&;]+;)"), "<strong>$1</strong>");
+ },
formatItem: function(data) {
- return data[1].replace(/^(.+\\)(.+)$/, '<span><small>$1</small>$2</span>');
+ return data.length > 1 ? data[1].replace(/^(.+\\)(.+)$/, '<span><small>$1</small>$2</span>') : data[0];
},
formatMatch: function(data) {
return data[1];
@@ -81,7 +77,7 @@ $(function() {
var location = window.location.href.split('/');
location.pop();
var parts = data[1].split(/::|$/);
- var file = $.sprintf(ApiGen.config.templates.main[autocompleteFiles[data[0]]].filename, parts[0].replace(/[^\w]/g, '.'));
+ var file = $.sprintf(ApiGen.config.templates[autocompleteFiles[data[0]]].filename, parts[0].replace(/\(\)/, '').replace(/[^\w]/g, '.'));
if (parts[1]) {
file += '#' + ('mm' === data[0] || 'mp' === data[0] ? 'm' : '') + parts[1].replace(/([\w]+)\(\)/, '_$1');
}
@@ -96,12 +92,6 @@ $(function() {
if ('' === query) {
return false;
}
-
- var label = $('#search input[name=more]').val();
- if (!autocompleteFound && label && -1 === query.indexOf('more:')) {
- $search.val(query + ' more:' + label);
- }
-
return !autocompleteFound && '' !== $('#search input[name=cx]').val();
});
@@ -140,23 +130,35 @@ $(function() {
// Open details
if (ApiGen.config.options.elementDetailsCollapsed) {
+ var trCollapsed = true;
$('tr', $content).filter(':has(.detailed)')
.click(function() {
var $this = $(this);
- $('.short', $this).hide();
- $('.detailed', $this).show();
+ if (trCollapsed) {
+ $('.short', $this).hide();
+ $('.detailed', $this).show();
+ trCollapsed = false;
+ } else {
+ $('.short', $this).show();
+ $('.detailed', $this).hide();
+ trCollapsed = true;
+ }
});
}
// Splitter
var splitterWidth = $splitter.width();
+ var splitterPosition = $.cookie('splitter') ? parseInt($.cookie('splitter')) : null;
+ var splitterPositionBackup = $.cookie('splitterBackup') ? parseInt($.cookie('splitterBackup')) : null;
function setSplitterPosition(position)
{
+ splitterPosition = position;
+
$left.width(position);
$right.css('margin-left', position + splitterWidth);
$splitter.css('left', position);
}
- function setNavigationPosition()
+ function setContentWidth()
{
var width = $rightInner.width();
$rightInner
@@ -169,7 +171,7 @@ $(function() {
$document.mousemove(function(event) {
if (event.pageX >= 230 && $document.width() - event.pageX >= 600 + splitterWidth) {
setSplitterPosition(event.pageX);
- setNavigationPosition();
+ setContentWidth();
}
});
@@ -184,26 +186,39 @@ $(function() {
.unbind('mousemove')
.unbind('mouseup');
- $.cookie('splitter', parseInt($splitter.css('left')), {expires: 365});
+ $.cookie('splitter', splitterPosition, {expires: 365});
});
return false;
});
- /*
- var splitterPosition = $.cookie('splitter');
+ $splitter.dblclick(function() {
+ if (splitterPosition) {
+ splitterPositionBackup = $left.width();
+ setSplitterPosition(0);
+ } else {
+ setSplitterPosition(splitterPositionBackup);
+ splitterPositionBackup = null;
+ }
+
+ setContentWidth();
+
+ $.cookie('splitter', splitterPosition, {expires: 365});
+ $.cookie('splitterBackup', splitterPositionBackup, {expires: 365});
+ });
if (null !== splitterPosition) {
- setSplitterPosition(parseInt(splitterPosition));
+ setSplitterPosition(splitterPosition);
}
- setNavigationPosition();
- $(window).resize(setNavigationPosition);
-*/
+ setContentWidth();
+ $(window).resize(setContentWidth);
+
// Select selected lines
var matches = window.location.hash.substr(1).match(/^\d+(?:-\d+)?(?:,\d+(?:-\d+)?)*$/);
if (null !== matches) {
var lists = matches[0].split(',');
for (var i = 0; i < lists.length; i++) {
var lines = lists[i].split('-');
- lines[1] = lines[1] || lines[0];
+ lines[0] = parseInt(lines[0]);
+ lines[1] = parseInt(lines[1] || lines[0]);
for (var j = lines[0]; j <= lines[1]; j++) {
$('#' + j).addClass('selected');
}
@@ -211,17 +226,17 @@ $(function() {
var $firstLine = $('#' + parseInt(matches[0]));
if ($firstLine.length > 0) {
- $right.scrollTop($firstLine.offset().top);
+ $document.scrollTop($firstLine.offset().top);
}
}
// Save selected lines
var lastLine;
- $('a.l').click(function(event) {
+ $('.l a').click(function(event) {
event.preventDefault();
- var $selectedLine = $(this).parent();
- var selectedLine = parseInt($selectedLine.attr('id'));
+ var selectedLine = $(this).parent().index() + 1;
+ var $selectedLine = $('pre.code .l').eq(selectedLine - 1);
if (event.shiftKey) {
if (lastLine) {
@@ -277,6 +292,9 @@ $(function() {
}
}
- window.location.hash = hash.join(',');
+ hash = hash.join(',');
+ $backup = $('#' + hash).removeAttr('id');
+ window.location.hash = hash;
+ $backup.attr('id', hash);
});
});
diff --git a/buildscripts/apigen/pradosoft/namespace.latte b/buildscripts/apigen/pradosoft/namespace.latte
index 3b9a0cb3..d371c92f 100644
--- a/buildscripts/apigen/pradosoft/namespace.latte
+++ b/buildscripts/apigen/pradosoft/namespace.latte
@@ -1,21 +1,11 @@
-{*
-ApiGen 2.8.0 - API documentation generator for PHP 5.3+
-
-Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
-Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
-Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
-
-For the full copyright and license information, please view
-the file LICENSE.md that was distributed with this source code.
-*}
{layout '@layout.latte'}
{var $active = 'namespace'}
-{block #title}{if $namespace != 'None'}Namespace {$namespace}{else}No namespace{/if}{/block}
+{block title}{if $namespace != 'None'}Namespace {$namespace}{else}No namespace{/if}{/block}
-{block #content}
+{block content}
<div id="content" class="namespace">
- <h1>{if $namespace != 'None'}Namespace {!$namespace|namespaceLinks:false}{else}No namespace{/if}</h1>
+ <h1>{if $namespace != 'None'}Namespace {$namespace|namespaceLinks:false|noescape}{else}No namespace{/if}</h1>
<table class="summary" id="namespaces" n:if="$subnamespaces">
<caption>Namespaces summary</caption>
diff --git a/buildscripts/apigen/pradosoft/opensearch.xml.latte b/buildscripts/apigen/pradosoft/opensearch.xml.latte
index 35451189..cca296b8 100644
--- a/buildscripts/apigen/pradosoft/opensearch.xml.latte
+++ b/buildscripts/apigen/pradosoft/opensearch.xml.latte
@@ -1,18 +1,9 @@
-{*
-ApiGen 2.8.0 - API documentation generator for PHP 5.3+
-
-Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
-Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
-Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
-
-For the full copyright and license information, please view
-the file LICENSE.md that was distributed with this source code.
-*}
+{contentType xml}
<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<ShortName>{$config->title}</ShortName>
<Description>{$config->title} Documentation</Description>
-<Url type="text/html" method="GET" template="http://www.google.com/cse?cx={$config->googleCseId|url}&amp;ie=UTF-8&amp;q={l}searchTerms{r}{if $config->googleCseLabel}{!' more:'|url}{$config->googleCseLabel}{/if}"/>
+<Url type="text/html" method="GET" template="http://www.google.com/cse?cx={$config->googleCseId|url}&amp;ie=UTF-8&amp;q={l}searchTerms{r}"/>
<Image width="16" height="16">{$config->baseUrl}/favicon.ico</Image>
<SyndicationRight>open</SyndicationRight>
<InputEncoding>UTF-8</InputEncoding>
diff --git a/buildscripts/apigen/pradosoft/overview.latte b/buildscripts/apigen/pradosoft/overview.latte
index 96d205ff..1db4e4f9 100644
--- a/buildscripts/apigen/pradosoft/overview.latte
+++ b/buildscripts/apigen/pradosoft/overview.latte
@@ -1,56 +1,40 @@
-{*
-ApiGen 2.8.0 - API documentation generator for PHP 5.3+
-
-Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
-Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
-Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
-
-For the full copyright and license information, please view
-the file LICENSE.md that was distributed with this source code.
-*}
{layout '@layout.latte'}
{var $active = 'overview'}
-{block #title}{$config->title ?: 'Overview'}{/block}
+{block title}{$config->title ?: 'Overview'}{/block}
-{block #content}
+{block content}
<div id="content">
- <h1>{include #title}</h1>
+ <h1>{include title}</h1>
{var $group = false}
- {if $namespaces}
- {if}
- <table class="summary" id="namespaces">
- <caption>Namespaces summary</caption>
- {foreach $namespaces as $namespace}
- {continueIf $config->main && 0 !== strpos($namespace, $config->main)}
- <tr>
- {var $group = true}
- <td class="name"><a href="{$namespace|namespaceUrl}">{$namespace}</a></td>
- </tr>
- {/foreach}
+ <table class="summary" id="namespaces" n:if="$namespaces">
+ <caption>Namespaces summary</caption>
+ {foreach $namespaces as $namespace}
+ {continueIf $config->main && 0 !== strpos($namespace, $config->main)}
+ <tr>
+ {var $group = true}
+ <td class="name"><a href="{$namespace|namespaceUrl}">{$namespace}</a></td>
+ </tr>
+ {/foreach}
</table>
- {/if $iterations}
- {/if}
- {if $packages}
- {if}
- <table class="summary" id="packages">
- <caption>Packages summary</caption>
- {foreach $packages as $package}
- {continueIf $config->main && 0 !== strpos($package, $config->main)}
- <tr>
- {var $group = true}
- <td class="name"><a href="{$package|packageUrl}">{$package}</a></td>
- </tr>
- {/foreach}
+ <table class="summary" id="packages" n:if="count($packages)">
+ <caption>Packages summary</caption>
+ {foreach $packages as $package}
+ {continueIf $config->main && 0 !== strpos($package, $config->main)}
+ <tr>
+ {var $group = true}
+ <td class="name">
+ <a href="{$package|packageUrl}">{$package}</a>
+ </td>
+ </tr>
+ {/foreach}
</table>
- {/if $iterations}
- {/if}
- {if !$group}
- {include '@elementlist.latte'}
+ {if ! $group}
+ {include '@elementlist.latte'}
{/if}
</div>
-{/block} \ No newline at end of file
+{/block}
diff --git a/buildscripts/apigen/pradosoft/package.latte b/buildscripts/apigen/pradosoft/package.latte
index 0d940015..cd484a6f 100644
--- a/buildscripts/apigen/pradosoft/package.latte
+++ b/buildscripts/apigen/pradosoft/package.latte
@@ -1,21 +1,11 @@
-{*
-ApiGen 2.8.0 - API documentation generator for PHP 5.3+
-
-Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
-Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
-Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
-
-For the full copyright and license information, please view
-the file LICENSE.md that was distributed with this source code.
-*}
{layout '@layout.latte'}
{var $active = 'package'}
-{block #title}{if $package != 'None'}Package {$package}{else}No package{/if}{/block}
+{block title}{if $package != 'None'}Package {$package}{else}No package{/if}{/block}
-{block #content}
+{block content}
<div id="content" class="package">
- <h1>{if $package != 'None'}Package {!$package|packageLinks:false}{else}No package{/if}</h1>
+ <h1>{if $package != 'None'}Package {$package|packageLinks:false|noescape}{else}No package{/if}</h1>
<table class="summary" id="packages" n:if="$subpackages">
<caption>Packages summary</caption>
diff --git a/buildscripts/apigen/pradosoft/resources/collapsed.png b/buildscripts/apigen/pradosoft/resources/collapsed.png
index 19164596..2bca6f4a 100644
--- a/buildscripts/apigen/pradosoft/resources/collapsed.png
+++ b/buildscripts/apigen/pradosoft/resources/collapsed.png
Binary files differ
diff --git a/buildscripts/apigen/pradosoft/resources/combined.js b/buildscripts/apigen/pradosoft/resources/combined.js
deleted file mode 100644
index 40520b94..00000000
--- a/buildscripts/apigen/pradosoft/resources/combined.js
+++ /dev/null
@@ -1,1219 +0,0 @@
-
-var ApiGen = ApiGen || {};
-ApiGen.config = {"require":{"min":"2.8.0"},"resources":{"resources":"resources"},"templates":{"common":{"overview.latte":"index.html","combined.js.latte":"resources\/combined.js","elementlist.js.latte":"elementlist.js","404.latte":"404.html"},"optional":{"sitemap":{"filename":"sitemap.xml","template":"sitemap.xml.latte"},"opensearch":{"filename":"opensearch.xml","template":"opensearch.xml.latte"},"robots":{"filename":"robots.txt","template":"robots.txt.latte"}},"main":{"package":{"filename":"package-%s.html","template":"package.latte"},"namespace":{"filename":"namespace-%s.html","template":"namespace.latte"},"class":{"filename":"class-%s.html","template":"class.latte"},"constant":{"filename":"constant-%s.html","template":"constant.latte"},"function":{"filename":"function-%s.html","template":"function.latte"},"source":{"filename":"source-%s.html","template":"source.latte"},"tree":{"filename":"tree.html","template":"tree.latte"},"deprecated":{"filename":"deprecated.html","template":"deprecated.latte"},"todo":{"filename":"todo.html","template":"todo.latte"}}},"options":{"elementDetailsCollapsed":true,"elementsOrder":"natural"},"config":"\/Users\/fab\/Sites\/prado-3.2\/buildscripts\/apigen\/pradosoft\/config.neon"};
-
-
-/*! jQuery v1.7 jquery.com | jquery.org/license */
-(function(a,b){function cA(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cx(a){if(!cm[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cn||(cn=c.createElement("iframe"),cn.frameBorder=cn.width=cn.height=0),b.appendChild(cn);if(!co||!cn.createElement)co=(cn.contentWindow||cn.contentDocument).document,co.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),co.close();d=co.createElement(a),co.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cn)}cm[a]=e}return cm[a]}function cw(a,b){var c={};f.each(cs.concat.apply([],cs.slice(0,b)),function(){c[this]=a});return c}function cv(){ct=b}function cu(){setTimeout(cv,0);return ct=f.now()}function cl(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ck(){try{return new a.XMLHttpRequest}catch(b){}}function ce(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cd(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function cc(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bG.test(a)?d(a,e):cc(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)cc(a+"["+e+"]",b[e],c,d);else d(a,b)}function cb(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function ca(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bV,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=ca(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=ca(a,c,d,e,"*",g));return l}function b_(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bR),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bE(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bz:bA;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bB(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function br(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bi,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bq(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bp(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bp)}function bp(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bo(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bn(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bm(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bl(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function X(a){var b=Y.split(" "),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(){return!0}function M(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.add(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(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return a!=null&&m.test(a)&&!isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(I)return I.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())}),typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return e});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){return i.done.apply(i,arguments).fail.apply(i,arguments)},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/><nav></nav>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,unknownElems:!!a.getElementsByTagName("nav").length,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",enctype:!!c.createElement("form").enctype,submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.lastChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-999px",top:"-999px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;f(function(){var a,b,d,e,g,h,i=1,j="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",l="visibility:hidden;border:0;",n="style='"+j+"border:5px solid #000;padding:0;'",p="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>";m=c.getElementsByTagName("body")[0];!m||(a=c.createElement("div"),a.style.cssText=l+"width:0;height:0;position:static;top:0;margin-top:"+i+"px",m.insertBefore(a,m.firstChild),o=c.createElement("div"),o.style.cssText=j+l,o.innerHTML=p,a.appendChild(o),b=o.firstChild,d=b.firstChild,g=b.nextSibling.firstChild.firstChild,h={doesNotAddBorder:d.offsetTop!==5,doesAddBorderForTableAndCells:g.offsetTop===5},d.style.position="fixed",d.style.top="20px",h.fixedPosition=d.offsetTop===20||d.offsetTop===15,d.style.position=d.style.top="",b.style.overflow="hidden",b.style.position="relative",h.subtractsBorderForOverflowNotVisible=d.offsetTop===-5,h.doesNotIncludeMarginInBodyOffset=m.offsetTop!==i,m.removeChild(a),o=a=null,f.extend(k,h))}),o.innerHTML="",n.removeChild(o),o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[f.expando]:a[f.expando]&&f.expando,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[f.expando]=n=++f.uuid:n=f.expando),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[f.expando]:f.expando;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)?b=b:b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" "));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];if(!arguments.length){if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}return b}e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!a||j===3||j===8||j===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g},removeAttr:function(a,b){var c,d,e,g,h=0;if(a.nodeType===1){d=(b||"").split(p),g=d.length;for(;h<g;h++)e=d[h].toLowerCase(),c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1)}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return b;h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/\.(.*)$/,A=/^(?:textarea|input|select)$/i,B=/\./g,C=/ /g,D=/[^\w\s.|`]/g,E=/^([^\.]*)?(?:\.(.+))?$/,F=/\bhover(\.\S+)?/,G=/^key/,H=/^(?:mouse|contextmenu)|click/,I=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,J=function(a){var b=I.exec(a);b&&
-(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},K=function(a,b){return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||a.id===b[2])&&(!b[3]||b[3].test(a.className))},L=function(a){return f.event.special.hover?a:a.replace(F,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=L(c).split(" ");for(k=0;k<c.length;k++){l=E.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,namespace:n.join(".")},p),g&&(o.quick=J(g),!o.quick&&f.expr.match.POS.test(g)&&(o.isPositional=!0)),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d){var e=f.hasData(a)&&f._data(a),g,h,i,j,k,l,m,n,o,p,q;if(!!e&&!!(m=e.events)){b=L(b||"").split(" ");for(g=0;g<b.length;g++){h=E.exec(b[g])||[],i=h[1],j=h[2];if(!i){j=j?"."+j:"";for(l in m)f.event.remove(a,l+j,c,d);return}n=f.event.special[i]||{},i=(d?n.delegateType:n.bindType)||i,p=m[i]||[],k=p.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;if(c||j||d||n.remove)for(l=0;l<p.length;l++){q=p[l];if(!c||c.guid===q.guid)if(!j||j.test(q.namespace))if(!d||d===q.selector||d==="**"&&q.selector)p.splice(l--,1),q.selector&&p.delegateCount--,n.remove&&n.remove.call(a,q)}else p.length=0;p.length===0&&k!==p.length&&((!n.teardown||n.teardown.call(a,j)===!1)&&f.removeEvent(a,i,e.handle),delete m[i])}f.isEmptyObject(m)&&(o=e.handle,o&&(o.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"",(g||!e)&&c.preventDefault();if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,n=null;for(m=e.parentNode;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length;l++){m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d);if(c.isPropagationStopped())break}c.type=h,c.isDefaultPrevented()||(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=(f.event.special[c.type]||{}).handle,j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click"))for(m=c.target;m!=this;m=m.parentNode||this){o={},q=[];for(k=0;k<e;k++)r=d[k],s=r.selector,t=o[s],r.isPositional?t=(t||(o[s]=f(s))).index(m)>=0:t===b&&(t=o[s]=r.quick?K(m,r.quick):f(m).is(s)),t&&q.push(r);q.length&&j.push({elem:m,matches:q})}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){p=j[k],c.currentTarget=p.elem;for(l=0;l<p.matches.length&&!c.isImmediatePropagationStopped();l++){r=p.matches[l];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=(i||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement wheelDelta".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},focus:{delegateType:"focusin",noBubble:!0},blur:{delegateType:"focusout",noBubble:!0},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?N:M):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=N;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=N;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=N,this.stopPropagation()},isDefaultPrevented:M,isPropagationStopped:M,isImmediatePropagationStopped:M},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]=f.event.special[b]={delegateType:b,bindType:b,handle:function(a){var b=this,c=a.relatedTarget,d=a.handleObj,e=d.selector,g,h;if(!c||d.origType===a.type||c!==b&&!f.contains(b,c))g=a.type,a.type=d.origType,h=d.handler.apply(this,arguments),a.type=g;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(A.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;A.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return A.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=M;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=M);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),G.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),H.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw"Syntax error, unrecognized expression: "+a};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?T.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y="abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",Z=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,_=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,ba=/<([\w:]+)/,bb=/<tbody/i,bc=/<|&#?\w+;/,bd=/<(?:script|style)/i,be=/<(?:script|object|embed|option|style)/i,bf=new RegExp("<(?:"+Y.replace(" ","|")+")","i"),bg=/checked\s*(?:[^=]|=\s*.checked.)/i,bh=/\/(java|ecma)script/i,bi=/^\s*<!(?:\[CDATA\[|\-\-)/,bj={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bk=X(c);bj.optgroup=bj.option,bj.tbody=bj.tfoot=bj.colgroup=bj.caption=bj.thead,bj.th=bj.td,f.support.htmlSerialize||(bj._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(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,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after"
-,arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Z,""):null;if(typeof a=="string"&&!bd.test(a)&&(f.support.leadingWhitespace||!$.test(a))&&!bj[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(_,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bg.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bl(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,br)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!be.test(j)&&(f.support.checkClone||!bg.test(j))&&!f.support.unknownElems&&bf.test(j)&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bn(a,d),e=bo(a),g=bo(d);for(h=0;e[h];++h)g[h]&&bn(e[h],g[h])}if(b){bm(a,d);if(c){e=bo(a),g=bo(d);for(h=0;e[h];++h)bm(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bc.test(k))k=b.createTextNode(k);else{k=k.replace(_,"<$1></$2>");var l=(ba.exec(k)||["",""])[1].toLowerCase(),m=bj[l]||bj._default,n=m[0],o=b.createElement("div");b===c?bk.appendChild(o):X(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=bb.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&$.test(k)&&o.insertBefore(b.createTextNode($.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bq(k[i]);else bq(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bh.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bs=/alpha\([^)]*\)/i,bt=/opacity=([^)]*)/,bu=/([A-Z]|^ms)/g,bv=/^-?\d+(?:px)?$/i,bw=/^-?\d/,bx=/^([\-+])=([\-+.\de]+)/,by={position:"absolute",visibility:"hidden",display:"block"},bz=["Left","Right"],bA=["Top","Bottom"],bB,bC,bD;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bB(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bx.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bB)return bB(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bE(a,b,d);f.swap(a,by,function(){e=bE(a,b,d)});return e}},set:function(a,b){if(!bv.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bt.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bs,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bs.test(g)?g.replace(bs,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bB(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bC=function(a,c){var d,e,g;c=c.replace(bu,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bD=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bv.test(f)&&bw.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bB=bC||bD,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bF=/%20/g,bG=/\[\]$/,bH=/\r?\n/g,bI=/#.*$/,bJ=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bK=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bL=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bM=/^(?:GET|HEAD)$/,bN=/^\/\//,bO=/\?/,bP=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bQ=/^(?:select|textarea)/i,bR=/\s+/,bS=/([?&])_=[^&]*/,bT=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bU=f.fn.load,bV={},bW={},bX,bY,bZ=["*/"]+["*"];try{bX=e.href}catch(b$){bX=c.createElement("a"),bX.href="",bX=bX.href}bY=bT.exec(bX.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bU)return bU.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bP,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bQ.test(this.nodeName)||bK.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bH,"\r\n")}}):{name:b.name,value:c.replace(bH,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?cb(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),cb(a,b);return a},ajaxSettings:{url:bX,isLocal:bL.test(bY[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bZ},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:b_(bV),ajaxTransport:b_(bW),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cd(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=ce(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bJ.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bI,"").replace(bN,bY[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bR),d.crossDomain==null&&(r=bT.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bY[1]&&r[2]==bY[2]&&(r[3]||(r[1]==="http:"?80:443))==(bY[3]||(bY[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),ca(bV,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bM.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bO.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bS,"$1_="+x);d.url=y+(y===d.url?(bO.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bZ+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=ca(bW,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)cc(g,a[g],c,e);return d.join("&").replace(bF,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cf=f.now(),cg=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cf++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cg.test(b.url)||e&&cg.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cg,l),b.url===j&&(e&&(k=k.replace(cg,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ch=a.ActiveXObject?function(){for(var a in cj)cj[a](0,1)}:!1,ci=0,cj;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ck()||cl()}:ck,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ch&&delete cj[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++ci,ch&&(cj||(cj={},f(a).unload(ch)),cj[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cm={},cn,co,cp=/^(?:toggle|show|hide)$/,cq=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cr,cs=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],ct;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cw("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cx(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cw("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cw("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cx(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cp.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=cq.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cw("show",1),slideUp:cw("hide",1),slideToggle:cw("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=ct||cu(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cr&&(cr=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=ct||cu(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cr),cr=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now))}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cy=/^t(?:able|d|h)$/i,cz=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cA(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cy.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cz.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cz.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cA(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cA(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
-/**
- * Cookie plugin
- *
- * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- *
- */
-
-/**
- * Create a cookie with the given name and value and other optional parameters.
- *
- * @example $.cookie('the_cookie', 'the_value');
- * @desc Set the value of a cookie.
- * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
- * @desc Create a cookie with all available options.
- * @example $.cookie('the_cookie', 'the_value');
- * @desc Create a session cookie.
- * @example $.cookie('the_cookie', null);
- * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
- * used when the cookie was set.
- *
- * @param String name The name of the cookie.
- * @param String value The value of the cookie.
- * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
- * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
- * If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
- * If set to null or omitted, the cookie will be a session cookie and will not be retained
- * when the the browser exits.
- * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
- * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
- * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
- * require a secure protocol (like HTTPS).
- * @type undefined
- *
- * @name $.cookie
- * @cat Plugins/Cookie
- * @author Klaus Hartl/klaus.hartl@stilbuero.de
- */
-
-/**
- * Get the value of a cookie with the given name.
- *
- * @example $.cookie('the_cookie');
- * @desc Get the value of a cookie.
- *
- * @param String name The name of the cookie.
- * @return The value of the cookie.
- * @type String
- *
- * @name $.cookie
- * @cat Plugins/Cookie
- * @author Klaus Hartl/klaus.hartl@stilbuero.de
- */
-jQuery.cookie = function(name, value, options) {
- if (typeof value != 'undefined') { // name and value given, set cookie
- options = options || {};
- if (value === null) {
- value = '';
- options.expires = -1;
- }
- var expires = '';
- if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
- var date;
- if (typeof options.expires == 'number') {
- date = new Date();
- date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
- } else {
- date = options.expires;
- }
- expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
- }
- // CAUTION: Needed to parenthesize options.path and options.domain
- // in the following expressions, otherwise they evaluate to undefined
- // in the packed version for some reason...
- var path = options.path ? '; path=' + (options.path) : '';
- var domain = options.domain ? '; domain=' + (options.domain) : '';
- var secure = options.secure ? '; secure' : '';
- document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
- } else { // only name given, get cookie
- var cookieValue = null;
- if (document.cookie && document.cookie != '') {
- var cookies = document.cookie.split(';');
- for (var i = 0; i < cookies.length; i++) {
- var cookie = jQuery.trim(cookies[i]);
- // Does this cookie string begin with the name we want?
- if (cookie.substring(0, name.length + 1) == (name + '=')) {
- cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
- break;
- }
- }
- }
- return cookieValue;
- }
-};
-/*!
- * sprintf and vsprintf for jQuery
- * somewhat based on http://jan.moesen.nu/code/javascript/sprintf-and-printf-in-javascript/
- * Copyright (c) 2008 Sabin Iacob (m0n5t3r) <iacobs@m0n5t3r.info>
- * @license http://www.gnu.org/licenses/gpl.html
- * @project jquery.sprintf
- */
-(function(d){var a={b:function(e){return parseInt(e,10).toString(2)},c:function(e){return String.fromCharCode(parseInt(e,10))},d:function(e){return parseInt(e,10)},u:function(e){return Math.abs(e)},f:function(f,e){e=parseInt(e,10);f=parseFloat(f);if(isNaN(e&&f)){return NaN}return e&&f.toFixed(e)||f},o:function(e){return parseInt(e,10).toString(8)},s:function(e){return e},x:function(e){return(""+parseInt(e,10).toString(16)).toLowerCase()},X:function(e){return(""+parseInt(e,10).toString(16)).toUpperCase()}};var c=/%(?:(\d+)?(?:\.(\d+))?|\(([^)]+)\))([%bcdufosxX])/g;var b=function(f){if(f.length==1&&typeof f[0]=="object"){f=f[0];return function(i,h,k,j,g,m,l){return a[g](f[j])}}else{var e=0;return function(i,h,k,j,g,m,l){if(g=="%"){return"%"}return a[g](f[e++],k)}}};d.extend({sprintf:function(f){var e=Array.apply(null,arguments).slice(1);return f.replace(c,b(e))},vsprintf:function(f,e){return f.replace(c,b(e))}})})(jQuery);
-
-/*!
- * jQuery Autocomplete plugin 1.1
- *
- * Copyright (c) 2009 Jörn Zaefferer
- *
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- *
- * Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $
- */
-
-;(function($) {
-
-$.fn.extend({
- autocomplete: function(urlOrData, options) {
- var isUrl = typeof urlOrData == "string";
- options = $.extend({}, $.Autocompleter.defaults, {
- url: isUrl ? urlOrData : null,
- data: isUrl ? null : urlOrData,
- delay: isUrl ? $.Autocompleter.defaults.delay : 10,
- max: options && !options.scroll ? 10 : 150
- }, options);
-
- // if highlight is set to false, replace it with a do-nothing function
- options.highlight = options.highlight || function(value) { return value; };
-
- // if the formatMatch option is not specified, then use formatItem for backwards compatibility
- options.formatMatch = options.formatMatch || options.formatItem;
-
- options.show = options.show || function(list) {};
-
- return this.each(function() {
- new $.Autocompleter(this, options);
- });
- },
- result: function(handler) {
- return this.bind("result", handler);
- },
- search: function(handler) {
- return this.trigger("search", [handler]);
- },
- flushCache: function() {
- return this.trigger("flushCache");
- },
- setOptions: function(options){
- return this.trigger("setOptions", [options]);
- },
- unautocomplete: function() {
- return this.trigger("unautocomplete");
- }
-});
-
-$.Autocompleter = function(input, options) {
-
- var KEY = {
- UP: 38,
- DOWN: 40,
- DEL: 46,
- TAB: 9,
- RETURN: 13,
- ESC: 27,
- COMMA: 188,
- PAGEUP: 33,
- PAGEDOWN: 34,
- BACKSPACE: 8
- };
-
- // Create $ object for input element
- var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass);
-
- var timeout;
- var previousValue = "";
- var cache = $.Autocompleter.Cache(options);
- var hasFocus = 0;
- var lastKeyPressCode;
- var config = {
- mouseDownOnSelect: false
- };
- var select = $.Autocompleter.Select(options, input, selectCurrent, config);
-
- // only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all
- $input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) {
- // a keypress means the input has focus
- // avoids issue where input had focus before the autocomplete was applied
- hasFocus = 1;
- // track last key pressed
- lastKeyPressCode = event.keyCode;
- switch(event.keyCode) {
-
- case KEY.UP:
- event.preventDefault();
- if ( select.visible() ) {
- select.prev();
- } else {
- onChange(0, true);
- }
- break;
-
- case KEY.DOWN:
- event.preventDefault();
- if ( select.visible() ) {
- select.next();
- } else {
- onChange(0, true);
- }
- break;
-
- case KEY.PAGEUP:
- event.preventDefault();
- if ( select.visible() ) {
- select.pageUp();
- } else {
- onChange(0, true);
- }
- break;
-
- case KEY.PAGEDOWN:
- event.preventDefault();
- if ( select.visible() ) {
- select.pageDown();
- } else {
- onChange(0, true);
- }
- break;
-
- // matches also semicolon
- case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA:
- case KEY.TAB:
- case KEY.RETURN:
- if( selectCurrent() ) {
- //event.preventDefault();
- //return false;
- }
- break;
-
- case KEY.ESC:
- select.hide();
- break;
-
- default:
- clearTimeout(timeout);
- timeout = setTimeout(onChange, options.delay);
- break;
- }
- }).focus(function(){
- // track whether the field has focus, we shouldn't process any
- // results if the field no longer has focus
- hasFocus++;
- }).blur(function() {
- hasFocus = 0;
- if (!config.mouseDownOnSelect) {
- hideResults();
- }
- }).click(function() {
- // show select when clicking in a focused field
- if ( hasFocus++ > 1 && !select.visible() ) {
- onChange(0, true);
- }
- }).bind("search", function() {
- // TODO why not just specifying both arguments?
- var fn = (arguments.length > 1) ? arguments[1] : null;
- function findValueCallback(q, data) {
- var result;
- if( data && data.length ) {
- for (var i=0; i < data.length; i++) {
- if( data[i].result.toLowerCase() == q.toLowerCase() ) {
- result = data[i];
- break;
- }
- }
- }
- if( typeof fn == "function" ) fn(result);
- else $input.trigger("result", result && [result.data, result.value]);
- }
- $.each(trimWords($input.val()), function(i, value) {
- request(value, findValueCallback, findValueCallback);
- });
- }).bind("flushCache", function() {
- cache.flush();
- }).bind("setOptions", function() {
- $.extend(options, arguments[1]);
- // if we've updated the data, repopulate
- if ( "data" in arguments[1] )
- cache.populate();
- }).bind("unautocomplete", function() {
- select.unbind();
- $input.unbind();
- $(input.form).unbind(".autocomplete");
- });
-
-
- function selectCurrent() {
- var selected = select.selected();
- if( !selected )
- return false;
-
- var v = selected.result;
- previousValue = v;
-
- if ( options.multiple ) {
- var words = trimWords($input.val());
- if ( words.length > 1 ) {
- var seperator = options.multipleSeparator.length;
- var cursorAt = $(input).selection().start;
- var wordAt, progress = 0;
- $.each(words, function(i, word) {
- progress += word.length;
- if (cursorAt <= progress) {
- wordAt = i;
- return false;
- }
- progress += seperator;
- });
- words[wordAt] = v;
- // TODO this should set the cursor to the right position, but it gets overriden somewhere
- //$.Autocompleter.Selection(input, progress + seperator, progress + seperator);
- v = words.join( options.multipleSeparator );
- }
- v += options.multipleSeparator;
- }
-
- $input.val(v);
- hideResultsNow();
- $input.trigger("result", [selected.data, selected.value]);
- return true;
- }
-
- function onChange(crap, skipPrevCheck) {
- if( lastKeyPressCode == KEY.DEL ) {
- select.hide();
- return;
- }
-
- var currentValue = $input.val();
-
- if ( !skipPrevCheck && currentValue == previousValue )
- return;
-
- previousValue = currentValue;
-
- currentValue = lastWord(currentValue);
- if ( currentValue.length >= options.minChars) {
- $input.addClass(options.loadingClass);
- if (!options.matchCase)
- currentValue = currentValue.toLowerCase();
- request(currentValue, receiveData, hideResultsNow);
- } else {
- stopLoading();
- select.hide();
- }
- };
-
- function trimWords(value) {
- if (!value)
- return [""];
- if (!options.multiple)
- return [$.trim(value)];
- return $.map(value.split(options.multipleSeparator), function(word) {
- return $.trim(value).length ? $.trim(word) : null;
- });
- }
-
- function lastWord(value) {
- if ( !options.multiple )
- return value;
- var words = trimWords(value);
- if (words.length == 1)
- return words[0];
- var cursorAt = $(input).selection().start;
- if (cursorAt == value.length) {
- words = trimWords(value)
- } else {
- words = trimWords(value.replace(value.substring(cursorAt), ""));
- }
- return words[words.length - 1];
- }
-
- // fills in the input box w/the first match (assumed to be the best match)
- // q: the term entered
- // sValue: the first matching result
- function autoFill(q, sValue){
- // autofill in the complete box w/the first match as long as the user hasn't entered in more data
- // if the last user key pressed was backspace, don't autofill
- if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE ) {
- // fill in the value (keep the case the user has typed)
- $input.val($input.val() + sValue.substring(lastWord(previousValue).length));
- // select the portion of the value not typed by the user (so the next character will erase)
- $(input).selection(previousValue.length, previousValue.length + sValue.length);
- }
- };
-
- function hideResults() {
- clearTimeout(timeout);
- timeout = setTimeout(hideResultsNow, 200);
- };
-
- function hideResultsNow() {
- var wasVisible = select.visible();
- select.hide();
- clearTimeout(timeout);
- stopLoading();
- if (options.mustMatch) {
- // call search and run callback
- $input.search(
- function (result){
- // if no value found, clear the input box
- if( !result ) {
- if (options.multiple) {
- var words = trimWords($input.val()).slice(0, -1);
- $input.val( words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : "") );
- }
- else {
- $input.val( "" );
- $input.trigger("result", null);
- }
- }
- }
- );
- }
- };
-
- function receiveData(q, data) {
- if ( data && data.length && hasFocus ) {
- stopLoading();
- select.display(data, q);
- autoFill(q, data[0].value);
- select.show();
- } else {
- hideResultsNow();
- }
- };
-
- function request(term, success, failure) {
- if (!options.matchCase)
- term = term.toLowerCase();
- var data = cache.load(term);
- // recieve the cached data
- if (data && data.length) {
- success(term, data);
- // if an AJAX url has been supplied, try loading the data now
- } else if( (typeof options.url == "string") && (options.url.length > 0) ){
-
- var extraParams = {
- timestamp: +new Date()
- };
- $.each(options.extraParams, function(key, param) {
- extraParams[key] = typeof param == "function" ? param() : param;
- });
-
- $.ajax({
- // try to leverage ajaxQueue plugin to abort previous requests
- mode: "abort",
- // limit abortion to this input
- port: "autocomplete" + input.name,
- dataType: options.dataType,
- url: options.url,
- data: $.extend({
- q: lastWord(term),
- limit: options.max
- }, extraParams),
- success: function(data) {
- var parsed = options.parse && options.parse(data) || parse(data);
- cache.add(term, parsed);
- success(term, parsed);
- }
- });
- } else {
- // if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match
- select.emptyList();
- failure(term);
- }
- };
-
- function parse(data) {
- var parsed = [];
- var rows = data.split("\n");
- for (var i=0; i < rows.length; i++) {
- var row = $.trim(rows[i]);
- if (row) {
- row = row.split("|");
- parsed[parsed.length] = {
- data: row,
- value: row[0],
- result: options.formatResult && options.formatResult(row, row[0]) || row[0]
- };
- }
- }
- return parsed;
- };
-
- function stopLoading() {
- $input.removeClass(options.loadingClass);
- };
-
-};
-
-$.Autocompleter.defaults = {
- inputClass: "ac_input",
- resultsClass: "ac_results",
- loadingClass: "ac_loading",
- minChars: 1,
- delay: 400,
- matchCase: false,
- matchSubset: true,
- matchContains: false,
- cacheLength: 10,
- max: 100,
- mustMatch: false,
- extraParams: {},
- selectFirst: true,
- formatItem: function(row) { return row[0]; },
- formatMatch: null,
- autoFill: false,
- width: 0,
- multiple: false,
- multipleSeparator: ", ",
- highlight: function(value, term) {
- return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
- },
- scroll: true,
- scrollHeight: 180
-};
-
-$.Autocompleter.Cache = function(options) {
-
- var data = {};
- var length = 0;
-
- function matchSubset(s, sub) {
- if (!options.matchCase)
- s = s.toLowerCase();
- var i = s.indexOf(sub);
- if (options.matchContains == "word"){
- i = s.toLowerCase().search("\\b" + sub.toLowerCase());
- }
- if (i == -1) return false;
- return i == 0 || options.matchContains;
- };
-
- function add(q, value) {
- if (length > options.cacheLength){
- flush();
- }
- if (!data[q]){
- length++;
- }
- data[q] = value;
- }
-
- function populate(){
- if( !options.data ) return false;
- // track the matches
- var stMatchSets = {},
- nullData = 0;
-
- // no url was specified, we need to adjust the cache length to make sure it fits the local data store
- if( !options.url ) options.cacheLength = 1;
-
- // track all options for minChars = 0
- stMatchSets[""] = [];
-
- // loop through the array and create a lookup structure
- for ( var i = 0, ol = options.data.length; i < ol; i++ ) {
- var rawValue = options.data[i];
- // if rawValue is a string, make an array otherwise just reference the array
- rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue;
-
- var value = options.formatMatch(rawValue, i+1, options.data.length);
- if ( value === false )
- continue;
-
- var firstChar = value.charAt(0).toLowerCase();
- // if no lookup array for this character exists, look it up now
- if( !stMatchSets[firstChar] )
- stMatchSets[firstChar] = [];
-
- // if the match is a string
- var row = {
- value: value,
- data: rawValue,
- result: options.formatResult && options.formatResult(rawValue) || value
- };
-
- // push the current match into the set list
- stMatchSets[firstChar].push(row);
-
- // keep track of minChars zero items
- if ( nullData++ < options.max ) {
- stMatchSets[""].push(row);
- }
- };
-
- // add the data items to the cache
- $.each(stMatchSets, function(i, value) {
- // increase the cache size
- options.cacheLength++;
- // add to the cache
- add(i, value);
- });
- }
-
- // populate any existing data
- setTimeout(populate, 25);
-
- function flush(){
- data = {};
- length = 0;
- }
-
- return {
- flush: flush,
- add: add,
- populate: populate,
- load: function(q) {
- if (!options.cacheLength || !length)
- return null;
- /*
- * if dealing w/local data and matchContains than we must make sure
- * to loop through all the data collections looking for matches
- */
- if( !options.url && options.matchContains ){
- // track all matches
- var csub = [];
- // loop through all the data grids for matches
- for( var k in data ){
- // don't search through the stMatchSets[""] (minChars: 0) cache
- // this prevents duplicates
- if( k.length > 0 ){
- var c = data[k];
- $.each(c, function(i, x) {
- // if we've got a match, add it to the array
- if (matchSubset(x.value, q)) {
- csub.push(x);
- }
- });
- }
- }
- return csub;
- } else
- // if the exact item exists, use it
- if (data[q]){
- return data[q];
- } else
- if (options.matchSubset) {
- for (var i = q.length - 1; i >= options.minChars; i--) {
- var c = data[q.substr(0, i)];
- if (c) {
- var csub = [];
- $.each(c, function(i, x) {
- if (matchSubset(x.value, q)) {
- csub[csub.length] = x;
- }
- });
- return csub;
- }
- }
- }
- return null;
- }
- };
-};
-
-$.Autocompleter.Select = function (options, input, select, config) {
- var CLASSES = {
- ACTIVE: "ac_over"
- };
-
- var listItems,
- active = -1,
- data,
- term = "",
- needsInit = true,
- element,
- list;
-
- // Create results
- function init() {
- if (!needsInit)
- return;
- element = $("<div/>")
- .hide()
- .addClass(options.resultsClass)
- .css("position", "absolute")
- .appendTo(document.body);
-
- list = $("<ul/>").appendTo(element).mouseover( function(event) {
- if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') {
- active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event));
- $(target(event)).addClass(CLASSES.ACTIVE);
- }
- }).click(function(event) {
- $(target(event)).addClass(CLASSES.ACTIVE);
- select();
- // TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus
- input.focus();
- return false;
- }).mousedown(function() {
- config.mouseDownOnSelect = true;
- }).mouseup(function() {
- config.mouseDownOnSelect = false;
- });
-
- if( options.width > 0 )
- element.css("width", options.width);
-
- needsInit = false;
- }
-
- function target(event) {
- var element = event.target;
- while(element && element.tagName != "LI")
- element = element.parentNode;
- // more fun with IE, sometimes event.target is empty, just ignore it then
- if(!element)
- return [];
- return element;
- }
-
- function moveSelect(step) {
- listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE);
- movePosition(step);
- var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE);
- if(options.scroll) {
- var offset = 0;
- listItems.slice(0, active).each(function() {
- offset += this.offsetHeight;
- });
- if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) {
- list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight());
- } else if(offset < list.scrollTop()) {
- list.scrollTop(offset);
- }
- }
- };
-
- function movePosition(step) {
- active += step;
- if (active < 0) {
- active = listItems.size() - 1;
- } else if (active >= listItems.size()) {
- active = 0;
- }
- }
-
- function limitNumberOfItems(available) {
- return options.max && options.max < available
- ? options.max
- : available;
- }
-
- function fillList() {
- list.empty();
- var max = limitNumberOfItems(data.length);
- for (var i=0; i < max; i++) {
- if (!data[i])
- continue;
- var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term);
- if ( formatted === false )
- continue;
- var li = $("<li/>").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0];
- $.data(li, "ac_data", data[i]);
- }
- listItems = list.find("li");
- if ( options.selectFirst ) {
- listItems.slice(0, 1).addClass(CLASSES.ACTIVE);
- active = 0;
- }
- // apply bgiframe if available
- if ( $.fn.bgiframe )
- list.bgiframe();
- }
-
- return {
- display: function(d, q) {
- init();
- data = d;
- term = q;
- fillList();
- },
- next: function() {
- moveSelect(1);
- },
- prev: function() {
- moveSelect(-1);
- },
- pageUp: function() {
- if (active != 0 && active - 8 < 0) {
- moveSelect( -active );
- } else {
- moveSelect(-8);
- }
- },
- pageDown: function() {
- if (active != listItems.size() - 1 && active + 8 > listItems.size()) {
- moveSelect( listItems.size() - 1 - active );
- } else {
- moveSelect(8);
- }
- },
- hide: function() {
- element && element.hide();
- listItems && listItems.removeClass(CLASSES.ACTIVE);
- active = -1;
- },
- visible : function() {
- return element && element.is(":visible");
- },
- current: function() {
- return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]);
- },
- show: function() {
- var offset = $(input).offset();
- element.css({
- width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).innerWidth(),
- top: offset.top + input.offsetHeight,
- left: offset.left
- }).show();
- options.show(element);
- if(options.scroll) {
- list.scrollTop(0);
- list.css({
- maxHeight: options.scrollHeight,
- overflow: 'auto'
- });
-
- if($.browser.msie && typeof document.body.style.maxHeight === "undefined") {
- var listHeight = 0;
- listItems.each(function() {
- listHeight += this.offsetHeight;
- });
- var scrollbarsVisible = listHeight > options.scrollHeight;
- list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight );
- if (!scrollbarsVisible) {
- // IE doesn't recalculate width when scrollbar disappears
- listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) );
- }
- }
-
- }
- },
- selected: function() {
- var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);
- return selected && selected.length && $.data(selected[0], "ac_data");
- },
- emptyList: function (){
- list && list.empty();
- },
- unbind: function() {
- element && element.remove();
- }
- };
-};
-
-$.fn.selection = function(start, end) {
- if (start !== undefined) {
- return this.each(function() {
- if( this.createTextRange ){
- var selRange = this.createTextRange();
- if (end === undefined || start == end) {
- selRange.move("character", start);
- selRange.select();
- } else {
- selRange.collapse(true);
- selRange.moveStart("character", start);
- selRange.moveEnd("character", end);
- selRange.select();
- }
- } else if( this.setSelectionRange ){
- this.setSelectionRange(start, end);
- } else if( this.selectionStart ){
- this.selectionStart = start;
- this.selectionEnd = end;
- }
- });
- }
- var field = this[0];
- if ( field.createTextRange ) {
- var range = document.selection.createRange(),
- orig = field.value,
- teststring = "<->",
- textLength = range.text.length;
- range.text = teststring;
- var caretAt = field.value.indexOf(teststring);
- field.value = orig;
- this.selection(caretAt, caretAt + textLength);
- return {
- start: caretAt,
- end: caretAt + textLength
- }
- } else if( field.selectionStart !== undefined ){
- return {
- start: field.selectionStart,
- end: field.selectionEnd
- }
- }
-};
-
-})(jQuery);
-/**
- * jQuery.fn.sortElements
- * --------------
- * @author James Padolsey (http://james.padolsey.com)
- * @version 0.11
- * @updated 18-MAR-2010
- * --------------
- * @param Function comparator:
- * Exactly the same behaviour as [1,2,3].sort(comparator)
- *
- * @param Function getSortable
- * A function that should return the element that is
- * to be sorted. The comparator will run on the
- * current collection, but you may want the actual
- * resulting sort to occur on a parent or another
- * associated element.
- *
- * E.g. $('td').sortElements(comparator, function(){
- * return this.parentNode;
- * })
- *
- * The <td>'s parent (<tr>) will be sorted instead
- * of the <td> itself.
- */
-jQuery.fn.sortElements = (function(){
-
- var sort = [].sort;
-
- return function(comparator, getSortable) {
-
- getSortable = getSortable || function(){return this;};
-
- var placements = this.map(function(){
-
- var sortElement = getSortable.call(this),
- parentNode = sortElement.parentNode,
-
- // Since the element itself will change position, we have
- // to have some way of storing it's original position in
- // the DOM. The easiest way is to have a 'flag' node:
- nextSibling = parentNode.insertBefore(
- document.createTextNode(''),
- sortElement.nextSibling
- );
-
- return function() {
-
- if (parentNode === this) {
- throw new Error(
- "You can't sort elements if any one is a descendant of another."
- );
- }
-
- // Insert before flag:
- parentNode.insertBefore(this, nextSibling);
- // Remove flag:
- parentNode.removeChild(nextSibling);
-
- };
-
- });
-
- return sort.call(this, comparator).each(function(i){
- placements[i].call(getSortable.call(this));
- });
-
- };
-
-})();
-/*!
- * ApiGen 2.8.0 - API documentation generator for PHP 5.3+
- *
- * Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
- * Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
- * Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
- *
- * For the full copyright and license information, please view
- * the file LICENSE.md that was distributed with this source code.
- */
-
-$(function() {
- var $document = $(document);
- var $left = $('#left');
- var $right = $('#right');
- var $rightInner = $('#rightInner');
- var $splitter = $('#splitter');
- var $groups = $('#groups');
- var $content = $('#content');
-
- // Menu
-
- // Hide deep packages and namespaces
- $('ul span', $groups).click(function(event) {
- event.preventDefault();
- event.stopPropagation();
- $(this)
- .toggleClass('collapsed')
- .parent()
- .next('ul')
- .toggleClass('collapsed');
- }).click();
-
- $active = $('ul li.active', $groups);
- if ($active.length > 0) {
- // Open active
- $('> a > span', $active).click();
- } else {
- $main = $('> ul > li.main', $groups);
- if ($main.length > 0) {
- // Open first level of the main project
- $('> a > span', $main).click();
- } else {
- // Open first level of all
- $('> ul > li > a > span', $groups).click();
- }
- }
-
- // Content
-
- // Search autocompletion
- var autocompleteFound = false;
- var autocompleteFiles = {'c': 'class', 'co': 'constant', 'f': 'function', 'm': 'class', 'mm': 'class', 'p': 'class', 'mp': 'class', 'cc': 'class'};
- var $search = $('#search input[name=q]');
- $search
- .autocomplete(ApiGen.elements, {
- matchContains: true,
- scrollHeight: 200,
- max: 20,
- formatItem: function(data) {
- return data[1].replace(/^(.+\\)(.+)$/, '<span><small>$1</small>$2</span>');
- },
- formatMatch: function(data) {
- return data[1];
- },
- formatResult: function(data) {
- return data[1];
- },
- show: function($list) {
- var $items = $('li span', $list);
- var maxWidth = Math.max.apply(null, $items.map(function() {
- return $(this).width();
- }));
- // 10px padding
- $list
- .width(Math.max(maxWidth + 10, $search.innerWidth()))
- .css('left', $search.offset().left + $search.outerWidth() - $list.outerWidth());
- }
- }).result(function(event, data) {
- autocompleteFound = true;
- var location = window.location.href.split('/');
- location.pop();
- var parts = data[1].split(/::|$/);
- var file = $.sprintf(ApiGen.config.templates.main[autocompleteFiles[data[0]]].filename, parts[0].replace(/[^\w]/g, '.'));
- if (parts[1]) {
- file += '#' + ('mm' === data[0] || 'mp' === data[0] ? 'm' : '') + parts[1].replace(/([\w]+)\(\)/, '_$1');
- }
- location.push(file);
- window.location = location.join('/');
-
- // Workaround for Opera bug
- $(this).closest('form').attr('action', location.join('/'));
- }).closest('form')
- .submit(function() {
- var query = $search.val();
- if ('' === query) {
- return false;
- }
-
- var label = $('#search input[name=more]').val();
- if (!autocompleteFound && label && -1 === query.indexOf('more:')) {
- $search.val(query + ' more:' + label);
- }
-
- return !autocompleteFound && '' !== $('#search input[name=cx]').val();
- });
-
- // Save natural order
- $('table.summary tr[data-order]', $content).each(function(index) {
- do {
- index = '0' + index;
- } while (index.length < 3);
- $(this).attr('data-order-natural', index);
- });
-
- // Switch between natural and alphabetical order
- var $caption = $('table.summary', $content)
- .filter(':has(tr[data-order])')
- .find('caption');
- $caption
- .click(function() {
- var $this = $(this);
- var order = $this.data('order') || 'natural';
- order = 'natural' === order ? 'alphabetical' : 'natural';
- $this.data('order', order);
- $.cookie('order', order, {expires: 365});
- var attr = 'alphabetical' === order ? 'data-order' : 'data-order-natural';
- $this
- .closest('table')
- .find('tr').sortElements(function(a, b) {
- return $(a).attr(attr) > $(b).attr(attr) ? 1 : -1;
- });
- return false;
- })
- .addClass('switchable')
- .attr('title', 'Switch between natural and alphabetical order');
- if ((null === $.cookie('order') && 'alphabetical' === ApiGen.config.options.elementsOrder) || 'alphabetical' === $.cookie('order')) {
- $caption.click();
- }
-
- // Open details
- if (ApiGen.config.options.elementDetailsCollapsed) {
- $('tr', $content).filter(':has(.detailed)')
- .click(function() {
- var $this = $(this);
- $('.short', $this).hide();
- $('.detailed', $this).show();
- });
- }
-
- setNavigationPosition();
- $(window).resize(setNavigationPosition);
-
- // Select selected lines
- var matches = window.location.hash.substr(1).match(/^\d+(?:-\d+)?(?:,\d+(?:-\d+)?)*$/);
- if (null !== matches) {
- var lists = matches[0].split(',');
- for (var i = 0; i < lists.length; i++) {
- var lines = lists[i].split('-');
- lines[1] = lines[1] || lines[0];
- for (var j = lines[0]; j <= lines[1]; j++) {
- $('#' + j).addClass('selected');
- }
- }
-
- var $firstLine = $('#' + parseInt(matches[0]));
- if ($firstLine.length > 0) {
- $right.scrollTop($firstLine.offset().top);
- }
- }
-
- // Save selected lines
- var lastLine;
- $('a.l').click(function(event) {
- event.preventDefault();
-
- var $selectedLine = $(this).parent();
- var selectedLine = parseInt($selectedLine.attr('id'));
-
- if (event.shiftKey) {
- if (lastLine) {
- for (var i = Math.min(selectedLine, lastLine); i <= Math.max(selectedLine, lastLine); i++) {
- $('#' + i).addClass('selected');
- }
- } else {
- $selectedLine.addClass('selected');
- }
- } else if (event.ctrlKey) {
- $selectedLine.toggleClass('selected');
- } else {
- var $selected = $('.l.selected')
- .not($selectedLine)
- .removeClass('selected');
- if ($selected.length > 0) {
- $selectedLine.addClass('selected');
- } else {
- $selectedLine.toggleClass('selected');
- }
- }
-
- lastLine = $selectedLine.hasClass('selected') ? selectedLine : null;
-
- // Update hash
- var lines = $('.l.selected')
- .map(function() {
- return parseInt($(this).attr('id'));
- })
- .get()
- .sort(function(a, b) {
- return a - b;
- });
-
- var hash = [];
- var list = [];
- for (var j = 0; j < lines.length; j++) {
- if (0 === j && j + 1 === lines.length) {
- hash.push(lines[j]);
- } else if (0 === j) {
- list[0] = lines[j];
- } else if (lines[j - 1] + 1 !== lines[j] && j + 1 === lines.length) {
- hash.push(list.join('-'));
- hash.push(lines[j]);
- } else if (lines[j - 1] + 1 !== lines[j]) {
- hash.push(list.join('-'));
- list = [lines[j]];
- } else if (j + 1 === lines.length) {
- list[1] = lines[j];
- hash.push(list.join('-'));
- } else {
- list[1] = lines[j];
- }
- }
-
- window.location.hash = hash.join(',');
- });
-});
-
diff --git a/buildscripts/apigen/pradosoft/resources/footer.png b/buildscripts/apigen/pradosoft/resources/footer.png
index 51f4a7fa..d99890c2 100644
--- a/buildscripts/apigen/pradosoft/resources/footer.png
+++ b/buildscripts/apigen/pradosoft/resources/footer.png
Binary files differ
diff --git a/buildscripts/apigen/pradosoft/resources/style.css b/buildscripts/apigen/pradosoft/resources/style.css
index 418fe08b..9b919734 100644
--- a/buildscripts/apigen/pradosoft/resources/style.css
+++ b/buildscripts/apigen/pradosoft/resources/style.css
@@ -1,15 +1,9 @@
-/*!
- * ApiGen 2.8.0 - API documentation generator for PHP 5.3+
- *
- * Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
- * Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
- * Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
- *
- * For the full copyright and license information, please view
- * the file LICENSE.md that was distributed with this source code.
- */
-
body {
+ font: 13px/1.5 Verdana, 'Geneva CE', lucida, sans-serif;
+ margin: 0;
+ padding: 0;
+ background: #ffffff;
+ color: #333333;
}
h1, h2, h3, h4, caption {
@@ -66,7 +60,7 @@ hr {
height: 0;
}
-.maintable a {
+a {
color: #CD2C27;
padding: 3px 1px;
text-decoration: none;
@@ -76,10 +70,9 @@ h1 a {
color: #821B18;
}
-.maintable a:hover, .maintable a:active, .maintable a:focus, .maintable a:hover b, .maintable a:hover var {
- color: #821B18;
- text-decoration: underline;
- background-color:#FFDBDB;
+a:hover, a:active, a:focus, a:hover b, a:hover var {
+ background-color: #FFDBDB;
+ color: #821B18 !important;
}
code, var, pre {
@@ -102,6 +95,7 @@ code a b {
.deprecated {
text-decoration: line-through;
+ opacity: .5;
}
.invalid {
@@ -112,15 +106,12 @@ code a b {
display: none;
}
-#maintable {
- width:100%;
-}
-
/* Left side */
#left {
overflow: auto;
width: 270px;
- vertical-align: top;
+ height: 100%;
+ position: fixed;
}
/* Menu */
@@ -145,7 +136,7 @@ code a b {
#menu a {
display: block;
- padding: 0 6px;
+ padding: 0 2px;
}
#menu .active > a, #menu > span {
@@ -164,8 +155,8 @@ code a b {
#menu #groups span {
position: absolute;
- top: 2px;
- left: -10px;
+ top: 4px;
+ right: 2px;
cursor: pointer;
display: block;
width: 12px;
@@ -192,8 +183,11 @@ code a b {
/* Right side */
#right {
overflow: auto;
+ margin-left: 275px;
height: 100%;
- vertical-align: top;
+ position: relative;
+ left: 0;
+ right: 0;
}
#rightInner {
@@ -291,12 +285,6 @@ code a b {
font-weight: bold;
}
-#navigation ul li.active span{
- color: #ffffff;
- font-weight: bold;
- padding: 4px;
-}
-
#navigation ul li a {
color: #000000;
font-weight: bold;
@@ -305,7 +293,7 @@ code a b {
#navigation ul li span {
float: left;
- padding: 4px;
+ padding: 0 3px;
}
#navigation ul li a:hover span, #navigation ul li a:active span, #navigation ul li a:focus span {
@@ -375,6 +363,10 @@ dl.tree dd {
text-align: right;
}
+.summary td hr {
+ margin: 3px -10px;
+}
+
#packages.summary td:first-child, #namespaces.summary td:first-child, .inherited.summary td:first-child, .used.summary td:first-child {
text-align: left;
}
@@ -411,7 +403,7 @@ dl.tree dd {
white-space: nowrap;
}
-.value {
+.value code {
white-space: pre-wrap;
}
@@ -419,20 +411,25 @@ td.name, td.attributes {
width: 1%;
}
-.class #methods .name {
+td.attributes {
+ width: 1%;
+}
+
+.class .methods .name, .class .properties .name, .class .constants .name {
width: auto;
white-space: normal;
}
-.class #methods .name > div > code {
+.class .methods .name > div > code {
white-space: pre-wrap;
}
-.class #methods .name > div > code span, .function .value > code {
+.class .methods .name > div > code span, .function .value > code {
white-space: nowrap;
+ display: inline-block;
}
-.class #methods td.name > div, .class td.description > div {
+.class .methods td.name > div, .class td.value > div {
position: relative;
padding-right: 1em;
}
@@ -458,7 +455,6 @@ div.invalid {
/* Splitter */
#splitter {
- display:none;
position: fixed;
height: 100%;
width: 5px;
@@ -479,7 +475,7 @@ div.invalid {
font-size: 8pt;
text-align: center;
padding: 20px 0 0;
- margin: 0;
+ margin: 3em 0 0;
height: 90px;
background: #ffffff url('footer.png') no-repeat center top;
}
@@ -549,6 +545,10 @@ div.tree span.padding {
font-weight: bold;
}
+pre.numbers {
+ float: left;
+}
+
span.l {
display: block;
}
@@ -609,3 +609,11 @@ span.l a.l:hover, span.l a.l:active, span.l a.l:focus {
#rightInner.small #navigation ul:first-child {
clear: both;
}
+
+/* global style */
+.left, .summary td.left {
+ text-align: left;
+}
+.right, .summary td.right {
+ text-align: right;
+}
diff --git a/buildscripts/apigen/pradosoft/robots.txt.latte b/buildscripts/apigen/pradosoft/robots.txt.latte
index 0c6cdcd0..187be3a3 100644
--- a/buildscripts/apigen/pradosoft/robots.txt.latte
+++ b/buildscripts/apigen/pradosoft/robots.txt.latte
@@ -1,13 +1,4 @@
-{*
-ApiGen 2.8.0 - API documentation generator for PHP 5.3+
-
-Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
-Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
-Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
-
-For the full copyright and license information, please view
-the file LICENSE.md that was distributed with this source code.
-*}
+{contentType text}
User-agent: *
Disallow:
Sitemap: {$config->baseUrl}/sitemap.xml
diff --git a/buildscripts/apigen/pradosoft/sitemap.xml.latte b/buildscripts/apigen/pradosoft/sitemap.xml.latte
index 65070b57..bd54d043 100644
--- a/buildscripts/apigen/pradosoft/sitemap.xml.latte
+++ b/buildscripts/apigen/pradosoft/sitemap.xml.latte
@@ -1,13 +1,4 @@
-{*
-ApiGen 2.8.0 - API documentation generator for PHP 5.3+
-
-Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
-Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
-Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
-
-For the full copyright and license information, please view
-the file LICENSE.md that was distributed with this source code.
-*}
+{contentType xml}
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
@@ -20,16 +11,16 @@ the file LICENSE.md that was distributed with this source code.
<loc>{$config->baseUrl}/{$package|packageUrl}</loc>
</url>
-{define #elements}
+{define elements}
<url n:foreach="$elements as $element">
<loc>{$config->baseUrl}/{$element|elementUrl}</loc>
</url>
{/define}
-{include #elements, elements => $classes}
-{include #elements, elements => $interfaces}
-{include #elements, elements => $traits}
-{include #elements, elements => $exceptions}
-{include #elements, elements => $constants}
-{include #elements, elements => $functions}
+{include elements, elements => $classes}
+{include elements, elements => $interfaces}
+{include elements, elements => $traits}
+{include elements, elements => $exceptions}
+{include elements, elements => $constants}
+{include elements, elements => $functions}
</urlset>
diff --git a/buildscripts/apigen/pradosoft/source.latte b/buildscripts/apigen/pradosoft/source.latte
index 9c46f920..7eeffe3c 100644
--- a/buildscripts/apigen/pradosoft/source.latte
+++ b/buildscripts/apigen/pradosoft/source.latte
@@ -1,18 +1,10 @@
-{*
-ApiGen 2.8.0 - API documentation generator for PHP 5.3+
-
-Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
-Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
-Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
-
-For the full copyright and license information, please view
-the file LICENSE.md that was distributed with this source code.
-*}
{layout '@layout.latte'}
{var $robots = false}
-{block #title}File {$fileName}{/block}
+{block title}File {$fileName}{/block}
-{block #content}
-<pre><code>{!$source|sourceAnchors|replaceRE:'~<span class="line">(\\s*(\\d+):\\s*)</span>([^\\n]*\\n)?~','<span id="$2" class="l"><a class="l" href="#$2">$1</a>$3</span>'}</code></pre>
-{/block} \ No newline at end of file
+{block content}
+{var $lineRegex = '~<span class="line">(\\s*(\\d+):\\s*)</span>([^\\n]*(?:\\n|$))~'}
+<pre class="numbers"><code>{$source|replaceRE:$lineRegex,'<span class="l"><a href="#$2">$1</a></span>'|noescape}</code></pre>
+<pre class="code"><code>{$source|replaceRE:$lineRegex,'<span id="$2" class="l">$3</span>'|noescape}</code></pre>
+{/block}
diff --git a/buildscripts/apigen/pradosoft/todo.latte b/buildscripts/apigen/pradosoft/todo.latte
deleted file mode 100644
index 0eb54a9e..00000000
--- a/buildscripts/apigen/pradosoft/todo.latte
+++ /dev/null
@@ -1,112 +0,0 @@
-{*
-ApiGen 2.8.0 - API documentation generator for PHP 5.3+
-
-Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
-Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
-Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
-
-For the full copyright and license information, please view
-the file LICENSE.md that was distributed with this source code.
-*}
-{layout '@layout.latte'}
-{var $active = 'todo'}
-
-{block #title}Todo{/block}
-
-{block #content}
-<div id="content">
- <h1>{include #title}</h1>
-
- {define #classes}
- {foreach $items as $class}
- <tr>
- <td class="name" rowspan="{count($class->annotations['todo'])}"><a href="{$class|classUrl}">{$class->name}</a></td>
- {foreach $class->annotations['todo'] as $description}
- <td>{!$description|annotation:'todo':$class}</td>{sep}</tr><tr>{/sep}
- {/foreach}
- </tr>
- {/foreach}
- {/define}
-
- <table class="summary" id="classes" n:if="$todoClasses">
- <caption>Classes summary</caption>
- {include #classes, items => $todoClasses}
- </table>
-
- <table class="summary" id="interfaces" n:if="$todoInterfaces">
- <caption>Interfaces summary</caption>
- {include #classes, items => $todoInterfaces}
- </table>
-
- <table class="summary" id="traits" n:if="$todoTraits">
- <caption>Traits summary</caption>
- {include #classes, items => $todoTraits}
- </table>
-
- <table class="summary" id="exceptions" n:if="$todoExceptions">
- <caption>Exceptions summary</caption>
- {include #classes, items => $todoExceptions}
- </table>
-
- <table class="summary" id="methods" n:if="$todoMethods">
- <caption>Methods summary</caption>
- {foreach $todoMethods as $method}
- <tr>
- {var $count = count($method->annotations['todo'])}
- <td class="name" rowspan="{$count}"><a href="{$method->declaringClassName|classUrl}">{$method->declaringClassName}</a></td>
- <td class="name" rowspan="{$count}"><code><a href="{$method|methodUrl}">{$method->name}()</a></code></td>
- {foreach $method->annotations['todo'] as $description}
- <td>{!$description|annotation:'todo':$method}</td>{sep}</tr><tr>{/sep}
- {/foreach}
- </tr>
- {/foreach}
- </table>
-
- <table class="summary" id="constants" n:if="$todoConstants">
- <caption>Constants summary</caption>
- {foreach $todoConstants as $constant}
- <tr>
- {var $count = count($constant->annotations['todo'])}
- {if $constant->declaringClassName}
- <td class="name" rowspan="{$count}"><a href="{$constant->declaringClassName|classUrl}">{$constant->declaringClassName}</a></td>
- <td class="name" rowspan="{$count}"><code><a href="{$constant|constantUrl}"><b>{$constant->name}</b></a></code></td>
- {else}
- <td class="name" rowspan="{$count}" n:if="$namespaces || $classes || $interfaces || $traits || $exceptions"><a n:if="$constant->namespaceName" href="{$constant->namespaceName|namespaceUrl}">{$constant->namespaceName}</a></td>
- <td n:class="name" rowspan="{$count}"><code><a href="{$constant|constantUrl}"><b>{$constant->shortName}</b></a></code></td>
- {/if}
- {foreach $constant->annotations['todo'] as $description}
- <td>{!$description|annotation:'todo':$constant}</td>{sep}</tr><tr>{/sep}
- {/foreach}
- </tr>
- {/foreach}
- </table>
-
- <table class="summary" id="properties" n:if="$todoProperties">
- <caption>Properties summary</caption>
- {foreach $todoProperties as $property}
- <tr>
- {var $count = count($property->annotations['todo'])}
- <td class="name" rowspan="{$count}"><a href="{$property->declaringClassName|classUrl}">{$property->declaringClassName}</a></td>
- <td class="name" rowspan="{$count}"><a href="{$property|propertyUrl}"><var>${$property->name}</var></a></td>
- {foreach $property->annotations['todo'] as $description}
- <td>{!$description|annotation:'todo':$property}</td>{sep}</tr><tr>{/sep}
- {/foreach}
- </tr>
- {/foreach}
- </table>
-
- <table class="summary" id="functions" n:if="$todoFunctions">
- <caption>Functions summary</caption>
- {foreach $todoFunctions as $function}
- <tr>
- {var $count = count($function->annotations['todo'])}
- <td class="name" rowspan="{$count}" n:if="$namespaces"><a n:if="$function->namespaceName" href="{$function->namespaceName|namespaceUrl}">{$function->namespaceName}</a></td>
- <td class="name" rowspan="{$count}"><code><a href="{$function|functionUrl}">{$function->shortName}</a></code></td>
- {foreach $function->annotations['todo'] as $description}
- <td>{!$description|annotation:'todo':$function}</td>{sep}</tr><tr>{/sep}
- {/foreach}
- </tr>
- {/foreach}
- </table>
-</div>
-{/block} \ No newline at end of file
diff --git a/buildscripts/apigen/pradosoft/tree.latte b/buildscripts/apigen/pradosoft/tree.latte
index 8a4b5fc1..79a625b2 100644
--- a/buildscripts/apigen/pradosoft/tree.latte
+++ b/buildscripts/apigen/pradosoft/tree.latte
@@ -1,27 +1,17 @@
-{*
-ApiGen 2.8.0 - API documentation generator for PHP 5.3+
-
-Copyright (c) 2010-2011 David Grudl (http://davidgrudl.com)
-Copyright (c) 2011-2012 Jaroslav Hanslík (https://github.com/kukulich)
-Copyright (c) 2011-2012 Ondřej Nešpor (https://github.com/Andrewsville)
-
-For the full copyright and license information, please view
-the file LICENSE.md that was distributed with this source code.
-*}
{layout '@layout.latte'}
{var $active = 'tree'}
-{block #title}Tree{/block}
+{block title}Tree{/block}
-{define #tree}
+{define tree}
<div class="tree">
<ul>
{var $level = -1}
- {? foreach ($tree as $reflectionName => $reflection): }
+ {foreach $tree as $reflectionName => $reflection|noiterator}
{if $level === $tree->getDepth()}
</li>
{elseif $level > $tree->getDepth()}
- {!'</ul></li>'|repeat:$level - $tree->getDepth()}
+ {='</ul></li>'|repeat:$level - $tree->getDepth()|noescape}
{elseif -1 !== $level}
<ul>
{/if}
@@ -33,40 +23,45 @@ the file LICENSE.md that was distributed with this source code.
{/foreach}{/if}
{var $traits = $reflection->ownTraits}
{if $traits}{if $interfaces}<br><span class="padding"></span>{/if} uses {foreach $traits as $trait}
- <a href="{$trait|classUrl}" n:tag-if="$trait->documented"><span n:class="$trait->deprecated ? deprecated, !$trait->valid ? invalid">{$trait->name}</span></a>{sep}, {/sep}
+ {if is_string($trait)}
+ {$trait} (not available)
+
+ {else}
+ <a href="{$trait|classUrl}" n:tag-if="$trait->documented"><span n:class="$trait->deprecated ? deprecated, !$trait->valid ? invalid">{$trait->name}</span></a>{sep}, {/sep}
+ {/}
{/foreach}{/if}
</div>
{var $level = $tree->getDepth()}
- {? endforeach; }
+ {/foreach}
</li>
- {!'</ul></li>'|repeat:$level}
+ {='</ul></li>'|repeat:$level|noescape}
</ul>
</div>
{/define}
-{block #content}
+{block content}
<div id="content">
- <h1>{include #title}</h1>
+ <h1>{include title}</h1>
{if $classTree->valid()}
<h3>Classes</h3>
- {include #tree, tree => $classTree}
+ {include tree, tree => $classTree}
{/if}
{if $interfaceTree->valid()}
<h3>Interfaces</h3>
- {include #tree, tree => $interfaceTree}
+ {include tree, tree => $interfaceTree}
{/if}
{if $traitTree->valid()}
<h3>Traits</h3>
- {include #tree, tree => $traitTree}
+ {include tree, tree => $traitTree}
{/if}
{if $exceptionTree->valid()}
<h3>Exceptions</h3>
- {include #tree, tree => $exceptionTree}
+ {include tree, tree => $exceptionTree}
{/if}
</div>
{/block}
diff --git a/buildscripts/phing/tasks/ApiGen4Task.php b/buildscripts/phing/tasks/ApiGen4Task.php
new file mode 100644
index 00000000..ef5d2b97
--- /dev/null
+++ b/buildscripts/phing/tasks/ApiGen4Task.php
@@ -0,0 +1,435 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information please see
+ * <http://phing.info>.
+ */
+
+require_once 'phing/Task.php';
+
+/**
+ * ApiGen task (http://apigen.org).
+ *
+ * @package phing.tasks.ext.apigen
+ * @author Martin Srank <martin@smasty.net>
+ * @author Jaroslav Hanslík <kukulich@kukulich.cz>
+ * @since 2.4.10
+ */
+class ApiGen4Task extends Task
+{
+ /**
+ * Default ApiGen executable name.
+ *
+ * @var string
+ */
+ private $executable = 'apigen';
+
+ /**
+ * Default options for ApiGen.
+ *
+ * @var array
+ */
+ private $options = array();
+ private $flags = array();
+
+ /**
+ * Sets the ApiGen executable name.
+ *
+ * @param string $executable
+ */
+ public function setExecutable($executable)
+ {
+ $this->executable = (string) $executable;
+ }
+
+ /**
+ * Sets the config file name.
+ *
+ * @param string $config
+ */
+ public function setConfig($config)
+ {
+ $this->options['config'] = (string) $config;
+ }
+
+ /**
+ * Sets source files or directories.
+ *
+ * @param string $source
+ */
+ public function setSource($source)
+ {
+ $this->options['source'] = explode(',', $source);
+ }
+
+ /**
+ * Sets the destination directory.
+ *
+ * @param string $destination
+ */
+ public function setDestination($destination)
+ {
+ $this->options['destination'] = (string) $destination;
+ }
+
+ /**
+ * Sets list of allowed file extensions.
+ *
+ * @param string $extensions
+ */
+ public function setExtensions($extensions)
+ {
+ $this->options['extensions'] = explode(',', $extensions);
+ }
+
+ /**
+ * Sets masks (case sensitive) to exclude files or directories from processing.
+ *
+ * @param string $exclude
+ */
+ public function setExclude($exclude)
+ {
+ $this->options['exclude'] = explode(',', $exclude);
+ }
+
+ /**
+ * Sets masks to exclude elements from documentation generating.
+ *
+ * @param string $skipDocPath
+ */
+ public function setSkipDocPath($skipDocPath)
+ {
+ $this->options['skip-doc-path'] = explode(',', $skipDocPath);
+ }
+
+ /**
+ * Sets a name prefix to exclude elements from documentation generating.
+ *
+ * @param string $skipDocPrefix
+ */
+ public function setSkipDocPrefix($skipDocPrefix)
+ {
+ $this->options['skip-doc-prefix'] = explode(',', $skipDocPrefix);
+ }
+
+ /**
+ * Sets the character set of source files.
+ *
+ * @param string $charset
+ */
+ public function setCharset($charset)
+ {
+ $this->options['charset'] = explode(',', $charset);
+ }
+
+ /**
+ * Sets the main project name prefix.
+ *
+ * @param string $main
+ */
+ public function setMain($main)
+ {
+ $this->options['main'] = (string) $main;
+ }
+
+ /**
+ * Sets the title of generated documentation.
+ *
+ * @param string $title
+ */
+ public function setTitle($title)
+ {
+ $this->options['title'] = (string) $title;
+ }
+
+ /**
+ * Sets the documentation base URL.
+ *
+ * @param string $baseUrl
+ */
+ public function setBaseUrl($baseUrl)
+ {
+ $this->options['base-url'] = (string) $baseUrl;
+ }
+
+ /**
+ * Sets the Google Custom Search ID.
+ *
+ * @param string $googleCseId
+ */
+ public function setGoogleCseId($googleCseId)
+ {
+ $this->options['google-cse-id'] = (string) $googleCseId;
+ }
+
+ /**
+ * Sets the Google Custom Search label.
+ *
+ * @param string $googleCseLabel
+ */
+ public function setGoogleCseLabel($googleCseLabel)
+ {
+ $this->options['google-cse-label'] = (string) $googleCseLabel;
+ }
+
+ /**
+ * Sets the Google Analytics tracking code.
+ *
+ * @param string $googleAnalytics
+ */
+ public function setGoogleAnalytics($googleAnalytics)
+ {
+ $this->options['google-analytics'] = (string) $googleAnalytics;
+ }
+
+ /**
+ * Sets the template config file name.
+ *
+ * @param string $templateConfig
+ */
+ public function setTemplateConfig($templateConfig)
+ {
+ $this->options['template-config'] = (string) $templateConfig;
+ }
+
+ /**
+ * Sets a list of HTML tags allowed in the documentation.
+ *
+ * @param string $allowedHtml
+ */
+ public function setAllowedHtml($allowedHtml)
+ {
+ $this->options['allowed-html'] = (string) $allowedHtml;
+ }
+
+ /**
+ * Sets how elements should be grouped in the menu.
+ *
+ * @param string $groups
+ */
+ public function setGroups($groups)
+ {
+ $this->options['groups'] = (string) $groups;
+ }
+
+ /**
+ * Sets element types for search input autocomplete.
+ *
+ * @param string $autocomplete
+ */
+ public function setAutocomplete($autocomplete)
+ {
+ $this->options['autocomplete'] = (string) $autocomplete;
+ }
+
+ /**
+ * Sets the element access levels.
+ *
+ * Documentation only for methods and properties with the given access level will be generated.
+ *
+ * @param string $accessLevels
+ */
+ public function setAccessLevels($accessLevels)
+ {
+ $this->options['access-levels'] = (string) $accessLevels;
+ }
+
+ /**
+ * Sets if documentation for elements marked as internal and internal documentation parts should be generated.
+ *
+ * @param boolean $internal
+ */
+ public function setInternal($internal)
+ {
+ $this->options['internal'] = (bool) $internal;
+ }
+
+ /**
+ * Sets if documentation for PHP internal classes should be generated.
+ *
+ * @param boolean $php
+ */
+ public function setPhp($php)
+ {
+ $this->flags['php'] = (bool) $php;
+ }
+
+ /**
+ * Sets if tree view of classes, interfaces, traits and exceptions should be generated.
+ *
+ * @param boolean $tree
+ */
+ public function setTree($tree)
+ {
+ $this->options['tree'] = (bool) $tree;
+ }
+
+ /**
+ * Sets if documentation for deprecated elements should be generated.
+ *
+ * @param boolean $deprecated
+ */
+ public function setDeprecated($deprecated)
+ {
+ $this->flags['deprecated']= (bool) $deprecated;
+ }
+
+ /**
+ * Sets if documentation of tasks should be generated.
+ *
+ * @param boolean $todo
+ */
+ public function setTodo($todo)
+ {
+ $this->flags['todo'] = (bool) $todo;
+ }
+
+ /**
+ * Sets if highlighted source code files should be generated.
+ *
+ * @param boolean $sourceCode
+ */
+ public function setSourceCode($sourceCode)
+ {
+ $this->flags['no-source-code'] = (bool) ! $sourceCode;
+ }
+
+ /**
+ * Sets if a link to download documentation as a ZIP archive should be generated.
+ *
+ * @param boolean $download
+ */
+ public function setDownload($download)
+ {
+ $this->options['download'] = (bool) $download;
+ }
+
+ /**
+ * Sets a file name for checkstyle report of poorly documented elements.
+ *
+ * @param string $report
+ */
+ public function setReport($report)
+ {
+ $this->options['report'] = (string) $report;
+ }
+
+ /**
+ * Sets if the destination directory should be wiped out first.
+ *
+ * @param boolean $wipeout
+ */
+ public function setWipeout($wipeout)
+ {
+ $this->options['wipeout'] = (bool) $wipeout;
+ }
+
+ /**
+ * Enables/disables scaning and generating messages.
+ *
+ * @param boolean $quiet
+ */
+ public function setQuiet($quiet)
+ {
+ $this->options['quiet'] = (bool) $quiet;
+ }
+
+ /**
+ * Enables/disables the debug mode.
+ *
+ * @param boolean $debug
+ */
+ public function setDebug($debug)
+ {
+ $this->options['debug'] = (bool) $debug;
+ }
+
+ /**
+ * Runs ApiGen.
+ *
+ * @throws BuildException If something is wrong.
+ * @see Task::main()
+ */
+ public function main()
+ {
+ if ('apigen' !== $this->executable && !is_file($this->executable)) {
+ throw new BuildException(sprintf('Executable %s not found', $this->executable), $this->getLocation());
+ }
+
+ if (!empty($this->options['config'])) {
+ // Config check
+ if (!is_file($this->options['config'])) {
+ throw new BuildException(sprintf(
+ 'Config file %s doesn\'t exist',
+ $this->options['config']
+ ), $this->getLocation());
+ }
+ } else {
+ // Source check
+ if (empty($this->options['source'])) {
+ throw new BuildException('Source is not set', $this->getLocation());
+ }
+ // Destination check
+ if (empty($this->options['destination'])) {
+ throw new BuildException('Destination is not set', $this->getLocation());
+ }
+ }
+
+ // Source check
+ if (!empty($this->options['source'])) {
+ foreach ($this->options['source'] as $source) {
+ if (!file_exists($source)) {
+ throw new BuildException(sprintf('Source %s doesn\'t exist', $source), $this->getLocation());
+ }
+ }
+ }
+
+ // Execute ApiGen
+ exec(escapeshellcmd($this->executable) . ' generate ' . $this->constructArguments(), $output, $return);
+
+ $logType = 0 === $return ? Project::MSG_INFO : Project::MSG_ERR;
+ foreach ($output as $line) {
+ $this->log($line, $logType);
+ }
+ }
+
+ /**
+ * Generates command line arguments for the ApiGen executable.
+ *
+ * @return string
+ */
+ protected function constructArguments()
+ {
+ $args = array();
+ foreach ($this->options as $option => $value) {
+ if (is_bool($value)) {
+ $args[] = '--' . $option . '=' . ($value ? 'yes' : 'no');
+ } elseif (is_array($value)) {
+ foreach ($value as $v) {
+ $args[] = '--' . $option . '=' . escapeshellarg($v);
+ }
+ } else {
+ $args[] = '--' . $option . '=' . escapeshellarg($value);
+ }
+ }
+
+ foreach ($this->flags as $option => $value) {
+ if($value)
+ $args[] = '--' . $option;
+ }
+
+ return implode(' ', $args);
+ }
+}
diff --git a/buildscripts/phpbuilder/build.php b/buildscripts/phpbuilder/build.php
index 47b7bec4..e2d30a4c 100644
--- a/buildscripts/phpbuilder/build.php
+++ b/buildscripts/phpbuilder/build.php
@@ -14,9 +14,9 @@
* 'framework' directory.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @package Tools
*/
diff --git a/buildscripts/texbuilder/Page2Tex.php b/buildscripts/texbuilder/Page2Tex.php
index ce2ece7f..e0c3507d 100644
--- a/buildscripts/texbuilder/Page2Tex.php
+++ b/buildscripts/texbuilder/Page2Tex.php
@@ -163,14 +163,14 @@ class Page2Tex
//runbar
$html = preg_replace('/<com:RunBar\s+PagePath="([^"]*)"\s+\/>/',
- '\href{http://www.pradosoft.com/demos/quickstart/index.php?page=$1}{$1 Demo}', $html);
+ '\href{http://www.pradoframework.net/site/demos/quickstart/index.php?page=$1}{$1 Demo}', $html);
//DocLink
$html = preg_replace('/<com:DocLink\s+ClassPath="([^"]*)[.]([^."]*)"\s+Text="([^"]+)"\s*\/>/',
- '\href{http://www.pradosoft.com/docs/manual/$1/$2.html}{$3}', $html);
+ '\href{http://pradosoft.github.io/docs/manual/$1/$2.html}{$3}', $html);
$html = preg_replace('/<com:DocLink\s+ClassPath="([^"]*)[.]([^.]*)"\s+\/>/',
- '\href{http://www.pradosoft.com/docs/manual/$1/$2.html}{$1.$2 API Reference}', $html);
+ '\href{http://pradosoft.github.io/docs/manual/$1/$2.html}{$1.$2 API Reference}', $html);
//text modifiers
$html = preg_replace('/<(b|strong)[^>]*>([^<]*)<\/(b|strong)>/', '\textbf{$2}', $html);
diff --git a/buildscripts/texbuilder/quickstart/pages.php b/buildscripts/texbuilder/quickstart/pages.php
index 1fb94431..bbdec29b 100644
--- a/buildscripts/texbuilder/quickstart/pages.php
+++ b/buildscripts/texbuilder/quickstart/pages.php
@@ -9,13 +9,15 @@ $pages['Getting Started'] = array(
'GettingStarted/AboutPrado.page',
'GettingStarted/Installation.page',
'GettingStarted/NewFeatures.page',
- 'GettingStarted/Upgrading.page'
+ 'GettingStarted/Upgrading.page',
+ 'GettingStarted/Upgrading32.page'
);
$pages['Tutorials'] = array(
'GettingStarted/HelloWorld.page',
'Fundamentals/Hangman.page',
- 'GettingStarted/CommandLine.page'
+ 'GettingStarted/CommandLine.page',
+ 'GettingStarted/Wsat.page'
);
$pages['Tutorial: Currency Converter'] = array(
@@ -26,13 +28,10 @@ $pages['Tutorial: Building an AJAX Chat Application'] = array(
'Tutorial/AjaxChat.page'
);
-$pages['Tutorial: Addressbook'] = array(
- 'Tutorial/AddressBook.page'
- );
-
$pages['Fundamentals'] = array(
'Fundamentals/Architecture.page',
- 'Fundamentals/Components.page',
+ 'Fundamentals/Components1.page',
+ 'Fundamentals/Components2.page',
'Fundamentals/Controls.page',
'Fundamentals/Pages.page',
'Fundamentals/Modules.page',
@@ -66,6 +65,7 @@ $pages['Control Reference : Standard Controls'] = array(
'Controls/Head.page',
'Controls/HiddenField.page',
'Controls/HtmlArea.page',
+ 'Controls/HtmlArea4.page',
'Controls/HyperLink.page',
'Controls/Image.page',
'Controls/ImageButton.page',
@@ -76,6 +76,7 @@ $pages['Control Reference : Standard Controls'] = array(
'Controls/Label.page',
'Controls/LinkButton.page',
'Controls/Literal.page',
+ 'Controls/Markdown.page',
'Controls/MultiView.page',
'Controls/OutputCache.page',
'Controls/Pager.page',
@@ -125,24 +126,32 @@ $pages['Control Reference : Active Controls (AJAX)'] = array(
'ActiveControls/ActivePanel.page',
'ActiveControls/ActiveRadioButton.page',
'ActiveControls/ActiveRadioButtonList.page',
+ 'ActiveControls/ActiveRatingList.page',
'ActiveControls/ActiveRepeater.page',
'ActiveControls/ActiveTextBox.page',
'ActiveControls/AutoComplete.page',
'ActiveControls/Callback.page',
+ 'ActiveControls/EventTriggeredCallback.page',
+ 'ActiveControls/TimeTriggeredCallback.page',
+ 'ActiveControls/ValueTriggeredCallback.page',
+ 'ActiveControls/DragDrop.page',
+ 'ActiveControls/InPlaceTextBox.page',
'ActiveControls/CallbackClientScript.page',
'ActiveControls/CallbackClientSide.page',
'ActiveControls/CallbackEventParameter.page',
- 'ActiveControls/CallbackOptions.page',
- 'ActiveControls/DragDrop.page',
- 'ActiveControls/EventTriggeredCallback.page',
- 'ActiveControls/InPlaceTextBox.page',
- 'ActiveControls/TimeTriggeredCallback.page',
- 'ActiveControls/ValueTriggeredCallback.page');
+ 'ActiveControls/CallbackOptions.page'
+ );
$pages['Active Control Overview'] = array(
- 'ActiveControls/Home.page',
+ 'ActiveControls/Home.page',
'ActiveControls/Introduction.page');
+$pages['Control Reference : Jui Controls (jQuery UI)'] = array(
+ 'JuiControls/Home.page',
+ 'JuiControls/Interactions.page',
+ 'JuiControls/Widgets.page'
+ );
+
$pages['Write New Controls'] = array(
'Controls/NewControl.page');
@@ -154,7 +163,9 @@ $pages['Working with Databases'] = array(
'Database/DAO.page',
'Database/ActiveRecord.page',
'Database/Scaffold.page',
- 'Database/SqlMap.page');
+ 'Database/SqlMap.page',
+ 'Database/ViewsArUpdate.page'
+ );
$pages['Advanced Topics'] = array(
'Advanced/Collections.page',
@@ -171,8 +182,6 @@ $pages['Advanced Topics'] = array(
$pages['Client-side Scripting'] = array(
'Advanced/Scripts.page',
- 'Advanced/Scripts1.page',
- 'Advanced/Scripts2.page',
'Advanced/Scripts3.page');
return $pages;
diff --git a/buildscripts/texbuilder/quickstart/quickstart.tex b/buildscripts/texbuilder/quickstart/quickstart.tex
index 29c76afc..7ef6e92e 100644
--- a/buildscripts/texbuilder/quickstart/quickstart.tex
+++ b/buildscripts/texbuilder/quickstart/quickstart.tex
@@ -52,8 +52,8 @@
%----------------- TITLE --------------
-\title{\Huge \bfseries PRADO v3.2.3 Quickstart Tutorial
- \thanks{Copyright 2004-2014. All Rights Reserved.}
+\title{\Huge \bfseries PRADO v3.3.0 Quickstart Tutorial
+ \thanks{Copyright 2004-2015. All Rights Reserved.}
}
\author{Qiang Xue and Wei Zhuo}
\date{\today}
@@ -78,7 +78,7 @@ Prado quick start doc
\chapter*{License}
\addcontentsline{toc}{chapter}{License}
PRADO is free software released under the terms of the following BSD license.\\
-Copyright 2004-2014, The PRADO Group (http://www.pradosoft.com)
+Copyright 2004-2015, The PRADO Group (https://github.com/pradosoft)
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/buildscripts/texbuilder/sqlmap/sqlmap.tex b/buildscripts/texbuilder/sqlmap/sqlmap.tex
index 5000b547..e3a0254f 100644
--- a/buildscripts/texbuilder/sqlmap/sqlmap.tex
+++ b/buildscripts/texbuilder/sqlmap/sqlmap.tex
@@ -88,7 +88,7 @@ Framework Developer Guide.
\chapter*{License}
\addcontentsline{toc}{chapter}{License}
SQLMap for PHP is free software released under the terms of the following BSD license.\\
-Copyright 2004-2006, PradoSoft (http://www.pradosoft.com)\\
+Copyright 2004-2006, The PRADO Group (https://github.com/pradosoft)\\
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/buildscripts/texbuilder/time-tracker/preface.tex b/buildscripts/texbuilder/time-tracker/preface.tex
index 908f97fb..c1a30bed 100644
--- a/buildscripts/texbuilder/time-tracker/preface.tex
+++ b/buildscripts/texbuilder/time-tracker/preface.tex
@@ -8,11 +8,4 @@ The guide is intended for readers who has some experience
using PHP version 5 and some basic concepts of Object-Oriented application
design. The guide will assume that the reader understands the primary concepts
of class, methods, class inheritance, and other basic features offered by PHP
-version 5 or later.
-\subsection*{Questions and Comments}
-Readers are encouraged to ask questions as the forum regarding any
-particular aspect of this documentation. Comment and constructive criticisms
-are most welcome. Questions and comments may be directed at
-\href{http://www.pradosoft.com/forum/}{http://www.pradosoft.com/forum/}.
-
-
+version 5 or later. \ No newline at end of file
diff --git a/buildscripts/texbuilder/time-tracker/time-tracker.tex b/buildscripts/texbuilder/time-tracker/time-tracker.tex
index fcfb639a..5934c5c0 100644
--- a/buildscripts/texbuilder/time-tracker/time-tracker.tex
+++ b/buildscripts/texbuilder/time-tracker/time-tracker.tex
@@ -79,7 +79,7 @@
\chapter*{License}
\addcontentsline{toc}{chapter}{License}
PRADO is free software released under the terms of the following BSD license.\\
-Copyright 2004-2006, The PRADO Group (http://www.pradosoft.com).
+Copyright 2004-2006, The PRADO Group (https://github.com/pradosoft).
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/composer.json b/composer.json
index 26c41985..470c1ac0 100644
--- a/composer.json
+++ b/composer.json
@@ -3,28 +3,31 @@
"type": "library",
"description": "Component Framework for PHP",
"keywords": ["Framework", "Component"],
- "homepage": "http://www.pradosoft.com/",
+ "homepage": "https://github.com/pradosoft/prado",
"license" : "BSD-3-Clause",
"authors": [
{
- "name": "Fabio Bas",
- "email": "ctrlaltca@gmail.com",
+ "name": "Ciro Mattia Gonano",
+ "email": "ciromattia@gmail.com",
+ "role" : "Github/Packagist Maintainer"
+ },
+ {
+ "name": "Daniel Sampedro",
+ "email": "darthdaniel85@gmail.com",
"role" : "Developer"
},
{
- "name": "Christophe Boulain",
- "email": "christophe.boulain@gmail.com",
+ "name": "David Otto",
"role" : "Developer"
},
{
- "name": "Robin J. Rogge",
- "email": "rojaro@gmail.com",
+ "name": "Fabio Bas",
+ "email": "ctrlaltca@gmail.com",
"role" : "Developer"
},
{
- "name": "Ciro Mattia Gonano",
- "email": "ciromattia@gmail.com",
- "role" : "Github/Packagist Maintainer"
+ "name": "Jens Klaer",
+ "role" : "Developer"
}
],
"require": {
@@ -37,17 +40,17 @@
},
"require-dev" : {
"ext-xdebug": "*",
- "phpunit/phpunit" : "3.7.*",
+ "phpunit/phpunit" : "4.*",
"phpunit/dbunit": ">=1.2",
"phpunit/phpunit-selenium": ">=1.2",
"phpunit/php-invoker": "*",
"phpunit/phpunit-story": "*",
- "phing/phing" : "2.4.14",
- "apigen/apigen": "2.*",
+ "phing/phing" : "2.*",
+ "apigen/apigen": "4.*",
"satooshi/php-coveralls": "dev-master"
},
"provide" : {
- "pradosoft/prado" : "3.2.3"
+ "pradosoft/prado" : "3.3.0"
},
"suggest" : {
"ext-apc" : "*",
@@ -65,8 +68,9 @@
},
"include-path": ["framework"],
"support" : {
- "forum" : "http://www.pradosoft.com/forum",
- "source" : "https://github.com/pradosoft/prado"
+ "issues" : "https://github.com/pradosoft/prado/issues",
+ "source" : "https://github.com/pradosoft/prado",
+ "docs" : "http://www.pradoframework.net/site/documentation"
},
"bin" : [
"bin/prado-cli"
diff --git a/composer.lock b/composer.lock
index e50f1900..d270ba66 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1,10 +1,11 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
- "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "hash": "16bb0dc37f5f9efa8c30a4538c6d3fba",
+ "hash": "7eec12baae95e3302f17626d3ef393f8",
+ "content-hash": "66cdcc9c585d73d14670d6e8b6fd1b0e",
"packages": [],
"packages-dev": [
{
@@ -56,48 +57,61 @@
},
{
"name": "apigen/apigen",
- "version": "2.8.0",
+ "version": "v4.1.2",
"source": {
"type": "git",
- "url": "https://github.com/apigen/ApiGen.git",
- "reference": "4987551632c3ad3fb7e89cf6dc3fe601e45578c3"
+ "url": "https://github.com/ApiGen/ApiGen.git",
+ "reference": "3365433ea3433b0e5c8f763608f8e63cbedb2a3a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/apigen/ApiGen/zipball/4987551632c3ad3fb7e89cf6dc3fe601e45578c3",
- "reference": "4987551632c3ad3fb7e89cf6dc3fe601e45578c3",
+ "url": "https://api.github.com/repos/ApiGen/ApiGen/zipball/3365433ea3433b0e5c8f763608f8e63cbedb2a3a",
+ "reference": "3365433ea3433b0e5c8f763608f8e63cbedb2a3a",
"shasum": ""
},
"require": {
- "andrewsville/php-token-reflection": ">=1.3.1",
- "dg/texy": ">=2.1.0",
- "kukulich/fshl": ">=2.1.0",
- "nette/nette": ">=2.0.5",
- "php": ">=5.3.0"
+ "andrewsville/php-token-reflection": "~1.4",
+ "apigen/theme-bootstrap": "~1.1.2",
+ "apigen/theme-default": "~1.0.1",
+ "herrera-io/phar-update": "~2.0",
+ "kdyby/events": "~2.0",
+ "kukulich/fshl": "~2.1",
+ "latte/latte": ">=2.2.0,<2.3.5",
+ "michelf/php-markdown": "~1.4",
+ "nette/application": "~2.2",
+ "nette/bootstrap": "~2.2",
+ "nette/di": "~2.2",
+ "nette/mail": "~2.2",
+ "nette/neon": "~2.2",
+ "nette/robot-loader": "~2.2",
+ "nette/safe-stream": "~2.2",
+ "php": ">=5.4",
+ "symfony/console": "~2.6",
+ "symfony/options-resolver": "~2.6.1",
+ "symfony/yaml": "~2.6",
+ "tracy/tracy": "~2.2"
},
- "suggest": {
- "ext-bz2": "*",
- "ext-phar": "*",
- "ext-zip": "*",
- "ext-zlib": "*"
+ "require-dev": {
+ "herrera-io/box": "~1.6",
+ "mockery/mockery": "~0.9"
},
"bin": [
- "apigen.php"
+ "bin/apigen"
],
"type": "library",
"extra": {
"branch-alias": {
- "dev-develop": "3.0.0-dev"
+ "dev-master": "4.1.0-dev"
}
},
"autoload": {
- "psr-0": {
- "ApiGen": "./"
+ "psr-4": {
+ "ApiGen\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
@@ -111,75 +125,163 @@
{
"name": "Jaroslav Hanslík",
"homepage": "https://github.com/kukulich"
+ },
+ {
+ "name": "Tomáš Votruba",
+ "email": "tomas.vot@gmail.com"
+ },
+ {
+ "name": "Olivier Laviale",
+ "homepage": "https://github.com/olvlvl"
}
],
- "description": "API documentation generator for PHP 5.3+",
+ "description": "PHP source code API generator",
"homepage": "http://apigen.org/",
"keywords": [
"api",
- "docblock",
"documentation",
"generator",
- "phpDocumentor",
"phpdoc"
],
- "time": "2012-09-29 17:34:02"
+ "time": "2015-11-29 20:11:30"
},
{
- "name": "dg/texy",
- "version": "v2.6",
+ "name": "apigen/theme-bootstrap",
+ "version": "v1.1.3",
"source": {
"type": "git",
- "url": "https://github.com/dg/texy.git",
- "reference": "8213d3646c3ab1a3eca52413a5be26acb29826fc"
+ "url": "https://github.com/ApiGen/ThemeBootstrap.git",
+ "reference": "55a35b4a3a9a5fcaa6a8fc43fb304983cab98c6c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dg/texy/zipball/8213d3646c3ab1a3eca52413a5be26acb29826fc",
- "reference": "8213d3646c3ab1a3eca52413a5be26acb29826fc",
+ "url": "https://api.github.com/repos/ApiGen/ThemeBootstrap/zipball/55a35b4a3a9a5fcaa6a8fc43fb304983cab98c6c",
+ "reference": "55a35b4a3a9a5fcaa6a8fc43fb304983cab98c6c",
"shasum": ""
},
"require": {
- "php": ">=5.2.0"
+ "latte/latte": "~2.2"
},
- "replace": {
- "dg/texy": "self.version"
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Tomáš Votruba",
+ "email": "tomas.vot@gmail.com"
+ },
+ {
+ "name": "Olivier Laviale",
+ "homepage": "https://github.com/olvlvl"
+ }
+ ],
+ "description": "Twitter Bootstrap theme for ApiGen",
+ "homepage": "http://apigen.org/",
+ "time": "2015-10-11 14:52:50"
+ },
+ {
+ "name": "apigen/theme-default",
+ "version": "v1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ApiGen/ThemeDefault.git",
+ "reference": "51648cf83645d9ae6c655fe46bcd26a347d45336"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ApiGen/ThemeDefault/zipball/51648cf83645d9ae6c655fe46bcd26a347d45336",
+ "reference": "51648cf83645d9ae6c655fe46bcd26a347d45336",
+ "shasum": ""
+ },
+ "require": {
+ "latte/latte": "~2.2"
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "David Grudl",
+ "homepage": "http://davidgrudl.com"
+ },
+ {
+ "name": "Ondřej Nešpor",
+ "homepage": "https://github.com/andrewsville"
+ },
+ {
+ "name": "Jaroslav Hanslík",
+ "homepage": "https://github.com/kukulich"
+ },
+ {
+ "name": "Tomáš Votruba",
+ "email": "tomas.vot@gmail.com"
+ },
+ {
+ "name": "Olivier Laviale",
+ "homepage": "https://github.com/olvlvl"
+ }
+ ],
+ "description": "Default theme for ApiGen",
+ "homepage": "http://apigen.org/",
+ "time": "2015-10-11 14:55:30"
+ },
+ {
+ "name": "doctrine/instantiator",
+ "version": "1.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
+ "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3,<8.0-DEV"
},
"require-dev": {
- "nette/tester": "~1.2"
+ "athletic/athletic": "~0.1.8",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpunit/phpunit": "~4.0",
+ "squizlabs/php_codesniffer": "~2.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
"autoload": {
- "files": [
- "src/texy.php"
- ]
+ "psr-4": {
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause",
- "GPL-2.0",
- "GPL-3.0"
+ "MIT"
],
"authors": [
{
- "name": "David Grudl",
- "homepage": "http://davidgrudl.com"
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "http://ocramius.github.com/"
}
],
- "description": "Texy converts plain text in easy to read Texy syntax into structurally valid (X)HTML. It supports adding of images, links, nested lists, tables and has full support for CSS. Texy supports hyphenation of long words (which reflects language rules), clickable emails and URL (emails are obfuscated against spambots), national typographic single and double quotation marks, ellipses, em dashes, dimension sign, nonbreakable spaces (e.g. in phone numbers), acronyms, arrows and many others. Texy code can optionally contain HTML tags.",
- "homepage": "http://texy.info",
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://github.com/doctrine/instantiator",
"keywords": [
- "html",
- "markdown",
- "markup language",
- "plain text",
- "text",
- "textile",
- "texy",
- "wiki",
- "xhtml"
- ],
- "time": "2014-06-20 18:38:38"
+ "constructor",
+ "instantiate"
+ ],
+ "time": "2015-06-14 21:17:01"
},
{
"name": "guzzle/guzzle",
@@ -277,6 +379,323 @@
"time": "2015-03-18 18:23:50"
},
{
+ "name": "herrera-io/json",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/kherge-abandoned/php-json.git",
+ "reference": "60c696c9370a1e5136816ca557c17f82a6fa83f1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/kherge-abandoned/php-json/zipball/60c696c9370a1e5136816ca557c17f82a6fa83f1",
+ "reference": "60c696c9370a1e5136816ca557c17f82a6fa83f1",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "justinrainbow/json-schema": ">=1.0,<2.0-dev",
+ "php": ">=5.3.3",
+ "seld/jsonlint": ">=1.0,<2.0-dev"
+ },
+ "require-dev": {
+ "herrera-io/phpunit-test-case": "1.*",
+ "mikey179/vfsstream": "1.1.0",
+ "phpunit/phpunit": "3.7.*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/lib/json_version.php"
+ ],
+ "psr-0": {
+ "Herrera\\Json": "src/lib"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kevin Herrera",
+ "email": "kevin@herrera.io",
+ "homepage": "http://kevin.herrera.io"
+ }
+ ],
+ "description": "A library for simplifying JSON linting and validation.",
+ "homepage": "http://herrera-io.github.com/php-json",
+ "keywords": [
+ "json",
+ "lint",
+ "schema",
+ "validate"
+ ],
+ "time": "2013-10-30 16:51:34"
+ },
+ {
+ "name": "herrera-io/phar-update",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/kherge-abandoned/php-phar-update.git",
+ "reference": "15643c90d3d43620a4f45c910e6afb7a0ad4b488"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/kherge-abandoned/php-phar-update/zipball/15643c90d3d43620a4f45c910e6afb7a0ad4b488",
+ "reference": "15643c90d3d43620a4f45c910e6afb7a0ad4b488",
+ "shasum": ""
+ },
+ "require": {
+ "herrera-io/json": "1.*",
+ "herrera-io/version": "1.*",
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "herrera-io/phpunit-test-case": "1.*",
+ "mikey179/vfsstream": "1.1.0",
+ "phpunit/phpunit": "3.7.*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/lib/constants.php"
+ ],
+ "psr-0": {
+ "Herrera\\Phar\\Update": "src/lib"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kevin Herrera",
+ "email": "kevin@herrera.io",
+ "homepage": "http://kevin.herrera.io"
+ }
+ ],
+ "description": "A library for self-updating Phars.",
+ "homepage": "http://herrera-io.github.com/php-phar-update",
+ "keywords": [
+ "phar",
+ "update"
+ ],
+ "time": "2013-11-09 17:13:13"
+ },
+ {
+ "name": "herrera-io/version",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/kherge-abandoned/php-version.git",
+ "reference": "d39d9642b92a04d8b8a28b871b797a35a2545e85"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/kherge-abandoned/php-version/zipball/d39d9642b92a04d8b8a28b871b797a35a2545e85",
+ "reference": "d39d9642b92a04d8b8a28b871b797a35a2545e85",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "herrera-io/phpunit-test-case": "1.*",
+ "phpunit/phpunit": "3.7.*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Herrera\\Version": "src/lib"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kevin Herrera",
+ "email": "kevin@herrera.io",
+ "homepage": "http://kevin.herrera.io"
+ }
+ ],
+ "description": "A library for creating, editing, and comparing semantic versioning numbers.",
+ "homepage": "http://github.com/herrera-io/php-version",
+ "keywords": [
+ "semantic",
+ "version"
+ ],
+ "time": "2014-05-27 05:29:25"
+ },
+ {
+ "name": "justinrainbow/json-schema",
+ "version": "1.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/justinrainbow/json-schema.git",
+ "reference": "a4bee9f4b344b66e0a0d96c7afae1e92edf385fe"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/a4bee9f4b344b66e0a0d96c7afae1e92edf385fe",
+ "reference": "a4bee9f4b344b66e0a0d96c7afae1e92edf385fe",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "json-schema/json-schema-test-suite": "1.1.0",
+ "phpdocumentor/phpdocumentor": "~2",
+ "phpunit/phpunit": "~3.7"
+ },
+ "bin": [
+ "bin/validate-json"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "JsonSchema\\": "src/JsonSchema/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Bruno Prieto Reis",
+ "email": "bruno.p.reis@gmail.com"
+ },
+ {
+ "name": "Justin Rainbow",
+ "email": "justin.rainbow@gmail.com"
+ },
+ {
+ "name": "Igor Wiedler",
+ "email": "igor@wiedler.ch"
+ },
+ {
+ "name": "Robert Schönthal",
+ "email": "seroscho@googlemail.com"
+ }
+ ],
+ "description": "A library to validate a json schema.",
+ "homepage": "https://github.com/justinrainbow/json-schema",
+ "keywords": [
+ "json",
+ "schema"
+ ],
+ "time": "2015-09-08 22:28:04"
+ },
+ {
+ "name": "kdyby/events",
+ "version": "v2.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Kdyby/Events.git",
+ "reference": "8049e0fc7abb48178b4a2a9af230eceebe1a83bc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Kdyby/Events/zipball/8049e0fc7abb48178b4a2a9af230eceebe1a83bc",
+ "reference": "8049e0fc7abb48178b4a2a9af230eceebe1a83bc",
+ "shasum": ""
+ },
+ "require": {
+ "nette/di": "~2.3@dev",
+ "nette/utils": "~2.3@dev"
+ },
+ "require-dev": {
+ "jakub-onderka/php-parallel-lint": "~0.7",
+ "latte/latte": "~2.3@dev",
+ "nette/application": "~2.3@dev",
+ "nette/bootstrap": "~2.3@dev",
+ "nette/caching": "~2.3@dev",
+ "nette/component-model": "~2.2@dev",
+ "nette/database": "~2.3@dev",
+ "nette/deprecated": "~2.3@dev",
+ "nette/di": "~2.3@dev",
+ "nette/finder": "~2.3@dev",
+ "nette/forms": "~2.3@dev",
+ "nette/http": "~2.3@dev",
+ "nette/mail": "~2.3@dev",
+ "nette/neon": "~2.3@dev",
+ "nette/nette": "~2.3@dev",
+ "nette/php-generator": "~2.3@dev",
+ "nette/reflection": "~2.3@dev",
+ "nette/robot-loader": "~2.3@dev",
+ "nette/safe-stream": "~2.3@dev",
+ "nette/security": "~2.3@dev",
+ "nette/tester": "~1.4@rc",
+ "nette/tokenizer": "~2.2@dev",
+ "nette/utils": "~2.3@dev",
+ "symfony/event-dispatcher": "~2.5",
+ "tracy/tracy": "~2.3@dev"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.4-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Kdyby\\Events\\": "src/"
+ },
+ "classmap": [
+ "src/Kdyby/Events/exceptions.php"
+ ],
+ "files": [
+ "src/Doctrine/compatibility.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause",
+ "GPL-2.0",
+ "GPL-3.0"
+ ],
+ "authors": [
+ {
+ "name": "Filip Procházka",
+ "email": "filip@prochazka.su",
+ "homepage": "http://filip-prochazka.com"
+ }
+ ],
+ "description": "Events for Nette Framework",
+ "homepage": "http://kdyby.org",
+ "keywords": [
+ "kdyby",
+ "nette"
+ ],
+ "time": "2015-04-04 16:29:31"
+ },
+ {
"name": "kukulich/fshl",
"version": "2.1.0",
"source": {
@@ -320,16 +739,16 @@
},
{
"name": "latte/latte",
- "version": "v2.3.3",
+ "version": "v2.3.4",
"source": {
"type": "git",
"url": "https://github.com/nette/latte.git",
- "reference": "025883a04b3a5ca48995246e8d82e6ff323d941e"
+ "reference": "5e891af999776d2204a9d06ad66ad8fa0bcd4f8b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/latte/zipball/025883a04b3a5ca48995246e8d82e6ff323d941e",
- "reference": "025883a04b3a5ca48995246e8d82e6ff323d941e",
+ "url": "https://api.github.com/repos/nette/latte/zipball/5e891af999776d2204a9d06ad66ad8fa0bcd4f8b",
+ "reference": "5e891af999776d2204a9d06ad66ad8fa0bcd4f8b",
"shasum": ""
},
"require": {
@@ -371,20 +790,71 @@
"templating",
"twig"
],
- "time": "2015-07-03 13:37:59"
+ "time": "2015-08-23 12:36:55"
+ },
+ {
+ "name": "michelf/php-markdown",
+ "version": "1.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/michelf/php-markdown.git",
+ "reference": "e1aabe18173231ebcefc90e615565742fc1c7fd9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/michelf/php-markdown/zipball/e1aabe18173231ebcefc90e615565742fc1c7fd9",
+ "reference": "e1aabe18173231ebcefc90e615565742fc1c7fd9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-lib": "1.4.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Michelf": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "John Gruber",
+ "homepage": "http://daringfireball.net/"
+ },
+ {
+ "name": "Michel Fortin",
+ "email": "michel.fortin@michelf.ca",
+ "homepage": "https://michelf.ca/",
+ "role": "Developer"
+ }
+ ],
+ "description": "PHP Markdown",
+ "homepage": "https://michelf.ca/projects/php-markdown/",
+ "keywords": [
+ "markdown"
+ ],
+ "time": "2015-03-01 12:03:08"
},
{
"name": "nette/application",
- "version": "v2.3.4",
+ "version": "v2.3.8",
"source": {
"type": "git",
"url": "https://github.com/nette/application.git",
- "reference": "785801e441ef83fa4d75cc47c292afedee9b3e4e"
+ "reference": "32023ed31791cdf05be8816528ae5921dc841b5a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/application/zipball/785801e441ef83fa4d75cc47c292afedee9b3e4e",
- "reference": "785801e441ef83fa4d75cc47c292afedee9b3e4e",
+ "url": "https://api.github.com/repos/nette/application/zipball/32023ed31791cdf05be8816528ae5921dc841b5a",
+ "reference": "32023ed31791cdf05be8816528ae5921dc841b5a",
"shasum": ""
},
"require": {
@@ -424,29 +894,29 @@
"authors": [
{
"name": "David Grudl",
- "homepage": "http://davidgrudl.com"
+ "homepage": "https://davidgrudl.com"
},
{
"name": "Nette Community",
- "homepage": "http://nette.org/contributors"
+ "homepage": "https://nette.org/contributors"
}
],
"description": "Nette Application MVC Component",
- "homepage": "http://nette.org",
- "time": "2015-07-01 15:54:47"
+ "homepage": "https://nette.org",
+ "time": "2015-12-03 04:12:02"
},
{
"name": "nette/bootstrap",
- "version": "v2.3.3",
+ "version": "v2.3.4",
"source": {
"type": "git",
"url": "https://github.com/nette/bootstrap.git",
- "reference": "8e2db45c39a1fa24f88e94c7b2a62ad09e9a306e"
+ "reference": "e32964df66f2c5a3a50b229204f583d20c1f6829"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/bootstrap/zipball/8e2db45c39a1fa24f88e94c7b2a62ad09e9a306e",
- "reference": "8e2db45c39a1fa24f88e94c7b2a62ad09e9a306e",
+ "url": "https://api.github.com/repos/nette/bootstrap/zipball/e32964df66f2c5a3a50b229204f583d20c1f6829",
+ "reference": "e32964df66f2c5a3a50b229204f583d20c1f6829",
"shasum": ""
},
"require": {
@@ -490,35 +960,35 @@
"authors": [
{
"name": "David Grudl",
- "homepage": "http://davidgrudl.com"
+ "homepage": "https://davidgrudl.com"
},
{
"name": "Nette Community",
- "homepage": "http://nette.org/contributors"
+ "homepage": "https://nette.org/contributors"
}
],
"description": "Nette Bootstrap",
- "homepage": "http://nette.org",
- "time": "2015-07-11 21:07:11"
+ "homepage": "https://nette.org",
+ "time": "2015-11-16 20:18:31"
},
{
"name": "nette/caching",
- "version": "v2.3.3",
+ "version": "v2.4.3",
"source": {
"type": "git",
"url": "https://github.com/nette/caching.git",
- "reference": "d4be13806d70c02d53b72cc63e93de6cf813f50f"
+ "reference": "f60c1767fe5a4b2b45edf2a98cf9dc70c15ea1b1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/caching/zipball/d4be13806d70c02d53b72cc63e93de6cf813f50f",
- "reference": "d4be13806d70c02d53b72cc63e93de6cf813f50f",
+ "url": "https://api.github.com/repos/nette/caching/zipball/f60c1767fe5a4b2b45edf2a98cf9dc70c15ea1b1",
+ "reference": "f60c1767fe5a4b2b45edf2a98cf9dc70c15ea1b1",
"shasum": ""
},
"require": {
"nette/finder": "~2.2",
"nette/utils": "~2.2",
- "php": ">=5.3.1"
+ "php": ">=5.4.4"
},
"conflict": {
"nette/nette": "<2.2"
@@ -526,12 +996,12 @@
"require-dev": {
"latte/latte": "~2.3.0",
"nette/di": "~2.3",
- "nette/tester": "~1.4"
+ "nette/tester": "~1.6"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.3-dev"
+ "dev-master": "2.4-dev"
}
},
"autoload": {
@@ -548,33 +1018,33 @@
"authors": [
{
"name": "David Grudl",
- "homepage": "http://davidgrudl.com"
+ "homepage": "https://davidgrudl.com"
},
{
"name": "Nette Community",
- "homepage": "http://nette.org/contributors"
+ "homepage": "https://nette.org/contributors"
}
],
"description": "Nette Caching Component",
- "homepage": "http://nette.org",
- "time": "2015-07-11 21:09:42"
+ "homepage": "https://nette.org",
+ "time": "2015-11-29 21:35:25"
},
{
"name": "nette/component-model",
- "version": "v2.2.3",
+ "version": "v2.2.4",
"source": {
"type": "git",
"url": "https://github.com/nette/component-model.git",
- "reference": "fe13e630a307ef4585b3573eae0a161dc1c3d428"
+ "reference": "07bce436051fd92d084642ce7a47f00045e0d1e5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/component-model/zipball/fe13e630a307ef4585b3573eae0a161dc1c3d428",
- "reference": "fe13e630a307ef4585b3573eae0a161dc1c3d428",
+ "url": "https://api.github.com/repos/nette/component-model/zipball/07bce436051fd92d084642ce7a47f00045e0d1e5",
+ "reference": "07bce436051fd92d084642ce7a47f00045e0d1e5",
"shasum": ""
},
"require": {
- "nette/utils": "~2.2",
+ "nette/utils": "^2.3.5",
"php": ">=5.3.1"
},
"conflict": {
@@ -598,152 +1068,42 @@
"authors": [
{
"name": "David Grudl",
- "homepage": "http://davidgrudl.com"
+ "homepage": "https://davidgrudl.com"
},
{
"name": "Nette Community",
- "homepage": "http://nette.org/contributors"
+ "homepage": "https://nette.org/contributors"
}
],
"description": "Nette Component Model",
- "homepage": "http://nette.org",
- "time": "2015-07-11 21:11:20"
- },
- {
- "name": "nette/database",
- "version": "v2.3.4",
- "source": {
- "type": "git",
- "url": "https://github.com/nette/database.git",
- "reference": "e5163fa150071af0f55518c414e177bc2b4be09d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/nette/database/zipball/e5163fa150071af0f55518c414e177bc2b4be09d",
- "reference": "e5163fa150071af0f55518c414e177bc2b4be09d",
- "shasum": ""
- },
- "require": {
- "ext-pdo": "*",
- "nette/caching": "~2.2",
- "nette/utils": "~2.2",
- "php": ">=5.3.1"
- },
- "conflict": {
- "nette/nette": "<2.2"
- },
- "require-dev": {
- "mockery/mockery": "~0.9.1",
- "nette/di": "~2.3",
- "nette/tester": "~1.3"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause",
- "GPL-2.0",
- "GPL-3.0"
- ],
- "authors": [
- {
- "name": "David Grudl",
- "homepage": "http://davidgrudl.com"
- },
- {
- "name": "Nette Community",
- "homepage": "http://nette.org/contributors"
- }
- ],
- "description": "Nette Database Component",
- "homepage": "http://nette.org",
- "time": "2015-07-20 01:20:17"
- },
- {
- "name": "nette/deprecated",
- "version": "v2.3.1",
- "source": {
- "type": "git",
- "url": "https://github.com/nette/deprecated.git",
- "reference": "169acddcc088bf74eb5b3c14d17f19b26d486b52"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/nette/deprecated/zipball/169acddcc088bf74eb5b3c14d17f19b26d486b52",
- "reference": "169acddcc088bf74eb5b3c14d17f19b26d486b52",
- "shasum": ""
- },
- "require-dev": {
- "latte/latte": "~2.2",
- "nette/application": "~2.2",
- "nette/bootstrap": "~2.2, >=2.2.1",
- "nette/caching": "~2.2",
- "nette/forms": "~2.2",
- "nette/mail": "~2.2",
- "nette/robot-loader": "~2.2",
- "nette/safe-stream": "~2.2",
- "nette/tester": "~1.1",
- "nette/utils": "~2.2",
- "tracy/tracy": "~2.2"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ],
- "files": [
- "src/loader.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause",
- "GPL-2.0",
- "GPL-3.0"
- ],
- "authors": [
- {
- "name": "David Grudl",
- "homepage": "http://davidgrudl.com"
- },
- {
- "name": "Nette Community",
- "homepage": "http://nette.org/contributors"
- }
- ],
- "description": "APIs and features removed from Nette Framework",
- "homepage": "http://nette.org",
- "time": "2015-07-11 20:57:29"
+ "homepage": "https://nette.org",
+ "time": "2015-10-06 17:54:05"
},
{
"name": "nette/di",
- "version": "v2.3.5",
+ "version": "v2.3.7",
"source": {
"type": "git",
"url": "https://github.com/nette/di.git",
- "reference": "c3e726f8bef49033ba78efe19e999e5fac63f433"
+ "reference": "7595c0bc17125b6ac3bb8f857b7c9b1be743c762"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/di/zipball/c3e726f8bef49033ba78efe19e999e5fac63f433",
- "reference": "c3e726f8bef49033ba78efe19e999e5fac63f433",
+ "url": "https://api.github.com/repos/nette/di/zipball/7595c0bc17125b6ac3bb8f857b7c9b1be743c762",
+ "reference": "7595c0bc17125b6ac3bb8f857b7c9b1be743c762",
"shasum": ""
},
"require": {
- "nette/neon": "~2.3",
- "nette/php-generator": "~2.3",
- "nette/utils": "~2.3",
+ "nette/neon": "^2.3.3",
+ "nette/php-generator": "^2.3.3",
+ "nette/utils": "^2.3.5",
"php": ">=5.3.1"
},
"conflict": {
"nette/nette": "<2.2"
},
"require-dev": {
- "nette/tester": "~1.3"
+ "nette/tester": "^1.6"
},
"type": "library",
"autoload": {
@@ -760,16 +1120,16 @@
"authors": [
{
"name": "David Grudl",
- "homepage": "http://davidgrudl.com"
+ "homepage": "https://davidgrudl.com"
},
{
"name": "Nette Community",
- "homepage": "http://nette.org/contributors"
+ "homepage": "https://nette.org/contributors"
}
],
"description": "Nette Dependency Injection Component",
- "homepage": "http://nette.org",
- "time": "2015-07-13 22:28:49"
+ "homepage": "https://nette.org",
+ "time": "2015-11-13 12:34:13"
},
{
"name": "nette/finder",
@@ -822,61 +1182,6 @@
"time": "2015-07-11 21:13:50"
},
{
- "name": "nette/forms",
- "version": "v2.3.4",
- "source": {
- "type": "git",
- "url": "https://github.com/nette/forms.git",
- "reference": "e4e3777c7a783f1877eda4a07ff2f128bdd05bf9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/nette/forms/zipball/e4e3777c7a783f1877eda4a07ff2f128bdd05bf9",
- "reference": "e4e3777c7a783f1877eda4a07ff2f128bdd05bf9",
- "shasum": ""
- },
- "require": {
- "nette/component-model": "~2.2",
- "nette/http": "~2.2",
- "nette/utils": "~2.2",
- "php": ">=5.3.1"
- },
- "conflict": {
- "nette/nette": "<2.2"
- },
- "require-dev": {
- "latte/latte": "~2.3.2",
- "nette/di": "~2.3",
- "nette/tester": "~1.3",
- "tracy/tracy": "~2.2"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause",
- "GPL-2.0",
- "GPL-3.0"
- ],
- "authors": [
- {
- "name": "David Grudl",
- "homepage": "http://davidgrudl.com"
- },
- {
- "name": "Nette Community",
- "homepage": "http://nette.org/contributors"
- }
- ],
- "description": "Nette Forms: greatly facilitates web forms",
- "homepage": "http://nette.org",
- "time": "2015-07-20 01:25:35"
- },
- {
"name": "nette/http",
"version": "v2.3.3",
"source": {
@@ -932,16 +1237,16 @@
},
{
"name": "nette/mail",
- "version": "v2.3.2",
+ "version": "v2.3.4",
"source": {
"type": "git",
"url": "https://github.com/nette/mail.git",
- "reference": "2c6c64787edf8131ec5e1b514ecc4a80a6477f80"
+ "reference": "3b8ba96407029d94d83177086bcb5e1fe0046929"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/mail/zipball/2c6c64787edf8131ec5e1b514ecc4a80a6477f80",
- "reference": "2c6c64787edf8131ec5e1b514ecc4a80a6477f80",
+ "url": "https://api.github.com/repos/nette/mail/zipball/3b8ba96407029d94d83177086bcb5e1fe0046929",
+ "reference": "3b8ba96407029d94d83177086bcb5e1fe0046929",
"shasum": ""
},
"require": {
@@ -974,29 +1279,29 @@
"authors": [
{
"name": "David Grudl",
- "homepage": "http://davidgrudl.com"
+ "homepage": "https://davidgrudl.com"
},
{
"name": "Nette Community",
- "homepage": "http://nette.org/contributors"
+ "homepage": "https://nette.org/contributors"
}
],
"description": "Nette Mail: Sending E-mails",
- "homepage": "http://nette.org",
- "time": "2015-07-03 13:31:38"
+ "homepage": "https://nette.org",
+ "time": "2015-11-29 22:09:25"
},
{
"name": "nette/neon",
- "version": "v2.3.2",
+ "version": "v2.3.3",
"source": {
"type": "git",
"url": "https://github.com/nette/neon.git",
- "reference": "48b25e0962d70e9125797e67a144f3e057243d9d"
+ "reference": "12bbb0e85ba8521dd291f4df0fe20a1b79aae32c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/neon/zipball/48b25e0962d70e9125797e67a144f3e057243d9d",
- "reference": "48b25e0962d70e9125797e67a144f3e057243d9d",
+ "url": "https://api.github.com/repos/nette/neon/zipball/12bbb0e85ba8521dd291f4df0fe20a1b79aae32c",
+ "reference": "12bbb0e85ba8521dd291f4df0fe20a1b79aae32c",
"shasum": ""
},
"require": {
@@ -1030,92 +1335,20 @@
],
"description": "Nette NEON: parser & generator for Nette Object Notation",
"homepage": "http://ne-on.org",
- "time": "2015-07-13 22:29:08"
- },
- {
- "name": "nette/nette",
- "version": "v2.3.4",
- "source": {
- "type": "git",
- "url": "https://github.com/nette/nette.git",
- "reference": "7748ab2d7b1a6cd3dda10538758e981c71e5b72d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/nette/nette/zipball/7748ab2d7b1a6cd3dda10538758e981c71e5b72d",
- "reference": "7748ab2d7b1a6cd3dda10538758e981c71e5b72d",
- "shasum": ""
- },
- "require": {
- "latte/latte": "2.3.3",
- "nette/application": "2.3.4",
- "nette/bootstrap": "2.3.3",
- "nette/caching": "2.3.3",
- "nette/component-model": "2.2.3",
- "nette/database": "2.3.4",
- "nette/deprecated": "2.3.1",
- "nette/di": "2.3.5",
- "nette/finder": "2.3.1",
- "nette/forms": "2.3.4",
- "nette/http": "2.3.3",
- "nette/mail": "2.3.2",
- "nette/neon": "2.3.2",
- "nette/php-generator": "2.3.1",
- "nette/reflection": "2.3.1",
- "nette/robot-loader": "2.3.1",
- "nette/safe-stream": "2.3.1",
- "nette/security": "2.3.1",
- "nette/tokenizer": "2.2.1",
- "nette/utils": "2.3.3",
- "tracy/tracy": "2.3.3"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "Nette/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause",
- "GPL-2.0",
- "GPL-3.0"
- ],
- "authors": [
- {
- "name": "David Grudl",
- "homepage": "http://davidgrudl.com"
- },
- {
- "name": "Nette Community",
- "homepage": "http://nette.org/contributors"
- }
- ],
- "description": "Nette Framework - innovative framework for fast and easy development of secured web applications in PHP. Write less, have cleaner code and your work will bring you joy.",
- "homepage": "http://nette.org",
- "keywords": [
- "Forms",
- "database",
- "debugging",
- "framework",
- "mailing",
- "mvc",
- "templating"
- ],
- "time": "2015-07-20 01:58:21"
+ "time": "2015-08-22 15:23:30"
},
{
"name": "nette/php-generator",
- "version": "v2.3.1",
+ "version": "v2.3.5",
"source": {
"type": "git",
"url": "https://github.com/nette/php-generator.git",
- "reference": "c47ad59b972e8a5f4bb00299951bd8053a8fc074"
+ "reference": "224730a45e0cd6e76e692997a3d981a592f80b5d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/php-generator/zipball/c47ad59b972e8a5f4bb00299951bd8053a8fc074",
- "reference": "c47ad59b972e8a5f4bb00299951bd8053a8fc074",
+ "url": "https://api.github.com/repos/nette/php-generator/zipball/224730a45e0cd6e76e692997a3d981a592f80b5d",
+ "reference": "224730a45e0cd6e76e692997a3d981a592f80b5d",
"shasum": ""
},
"require": {
@@ -1143,16 +1376,16 @@
"authors": [
{
"name": "David Grudl",
- "homepage": "http://davidgrudl.com"
+ "homepage": "https://davidgrudl.com"
},
{
"name": "Nette Community",
- "homepage": "http://nette.org/contributors"
+ "homepage": "https://nette.org/contributors"
}
],
"description": "Nette PHP Generator",
- "homepage": "http://nette.org",
- "time": "2015-07-11 21:19:33"
+ "homepage": "https://nette.org",
+ "time": "2015-11-29 22:14:37"
},
{
"name": "nette/reflection",
@@ -1366,17 +1599,17 @@
"time": "2015-07-11 21:22:53"
},
{
- "name": "nette/tokenizer",
- "version": "v2.2.1",
+ "name": "nette/utils",
+ "version": "v2.3.7",
"source": {
"type": "git",
- "url": "https://github.com/nette/tokenizer.git",
- "reference": "cbb4920d166af495f83eb213f16512a421d44f63"
+ "url": "https://github.com/nette/utils.git",
+ "reference": "6f1ed73088c28a24acc9657ca14b3418a270e24b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/tokenizer/zipball/cbb4920d166af495f83eb213f16512a421d44f63",
- "reference": "cbb4920d166af495f83eb213f16512a421d44f63",
+ "url": "https://api.github.com/repos/nette/utils/zipball/6f1ed73088c28a24acc9657ca14b3418a270e24b",
+ "reference": "6f1ed73088c28a24acc9657ca14b3418a270e24b",
"shasum": ""
},
"require": {
@@ -1388,6 +1621,12 @@
"require-dev": {
"nette/tester": "~1.0"
},
+ "suggest": {
+ "ext-gd": "to use Image",
+ "ext-iconv": "to use Strings::webalize() and toAscii()",
+ "ext-intl": "for script transliteration in Strings::webalize() and toAscii()",
+ "ext-mbstring": "to use Strings::lower() etc..."
+ },
"type": "library",
"autoload": {
"classmap": [
@@ -1403,165 +1642,252 @@
"authors": [
{
"name": "David Grudl",
- "homepage": "http://davidgrudl.com"
+ "homepage": "https://davidgrudl.com"
},
{
"name": "Nette Community",
- "homepage": "http://nette.org/contributors"
+ "homepage": "https://nette.org/contributors"
}
],
- "description": "Nette Tokenizer",
- "homepage": "http://nette.org",
- "time": "2015-07-11 21:24:02"
+ "description": "Nette Utility Classes",
+ "homepage": "https://nette.org",
+ "time": "2015-11-30 00:11:35"
},
{
- "name": "nette/utils",
- "version": "v2.3.3",
+ "name": "phing/phing",
+ "version": "2.13.0",
"source": {
"type": "git",
- "url": "https://github.com/nette/utils.git",
- "reference": "ff80fce39fdc381e7e0db6cc5ffc82162e59f6bb"
+ "url": "https://github.com/phingofficial/phing.git",
+ "reference": "a5b10a50160c8a4744545aacb33ef158349e655c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/utils/zipball/ff80fce39fdc381e7e0db6cc5ffc82162e59f6bb",
- "reference": "ff80fce39fdc381e7e0db6cc5ffc82162e59f6bb",
+ "url": "https://api.github.com/repos/phingofficial/phing/zipball/a5b10a50160c8a4744545aacb33ef158349e655c",
+ "reference": "a5b10a50160c8a4744545aacb33ef158349e655c",
"shasum": ""
},
"require": {
- "php": ">=5.3.1"
- },
- "conflict": {
- "nette/nette": "<2.2"
+ "php": ">=5.2.0"
},
"require-dev": {
- "nette/tester": "~1.0"
+ "ext-pdo_sqlite": "*",
+ "lastcraft/simpletest": "@dev",
+ "pdepend/pdepend": "2.x",
+ "pear/archive_tar": "1.4.x",
+ "pear/http_request2": "dev-trunk",
+ "pear/net_growl": "dev-trunk",
+ "pear/pear-core-minimal": "1.10.1",
+ "pear/versioncontrol_git": "@dev",
+ "pear/versioncontrol_svn": "~0.5",
+ "phpdocumentor/phpdocumentor": "2.x",
+ "phploc/phploc": "~2.0.6",
+ "phpmd/phpmd": "~2.2",
+ "phpunit/phpunit": ">=3.7",
+ "sebastian/git": "~1.0",
+ "sebastian/phpcpd": "2.x",
+ "squizlabs/php_codesniffer": "~2.2",
+ "symfony/yaml": "~2.7"
},
"suggest": {
- "ext-gd": "to use Image",
- "ext-iconv": "to use Strings::webalize() and toAscii()",
- "ext-intl": "for script transliteration in Strings::webalize() and toAscii()",
- "ext-mbstring": "to use Strings::lower() etc..."
+ "pdepend/pdepend": "PHP version of JDepend",
+ "pear/archive_tar": "Tar file management class",
+ "pear/versioncontrol_git": "A library that provides OO interface to handle Git repository",
+ "pear/versioncontrol_svn": "A simple OO-style interface for Subversion, the free/open-source version control system",
+ "phpdocumentor/phpdocumentor": "Documentation Generator for PHP",
+ "phploc/phploc": "A tool for quickly measuring the size of a PHP project",
+ "phpmd/phpmd": "PHP version of PMD tool",
+ "phpunit/php-code-coverage": "Library that provides collection, processing, and rendering functionality for PHP code coverage information",
+ "phpunit/phpunit": "The PHP Unit Testing Framework",
+ "sebastian/phpcpd": "Copy/Paste Detector (CPD) for PHP code",
+ "tedivm/jshrink": "Javascript Minifier built in PHP"
},
+ "bin": [
+ "bin/phing"
+ ],
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.13.x-dev"
+ }
+ },
"autoload": {
"classmap": [
- "src/"
+ "classes/phing/"
]
},
"notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ "classes"
+ ],
"license": [
- "BSD-3-Clause",
- "GPL-2.0",
- "GPL-3.0"
+ "LGPL-3.0"
],
"authors": [
{
- "name": "David Grudl",
- "homepage": "http://davidgrudl.com"
+ "name": "Michiel Rook",
+ "email": "mrook@php.net"
},
{
- "name": "Nette Community",
- "homepage": "http://nette.org/contributors"
+ "name": "Phing Community",
+ "homepage": "https://www.phing.info/trac/wiki/Development/Contributors"
}
],
- "description": "Nette Utility Classes",
- "homepage": "http://nette.org",
- "time": "2015-07-13 22:30:00"
+ "description": "PHing Is Not GNU make; it's a PHP project build system or build tool based on Apache Ant.",
+ "homepage": "https://www.phing.info/",
+ "keywords": [
+ "build",
+ "phing",
+ "task",
+ "tool"
+ ],
+ "time": "2015-12-04 09:45:44"
},
{
- "name": "phing/phing",
- "version": "2.4.14",
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "2.0.4",
"source": {
"type": "git",
- "url": "https://github.com/phingofficial/phing.git",
- "reference": "41075d93ca254f1c90c79ec7ce81be2b2629e138"
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phingofficial/phing/zipball/41075d93ca254f1c90c79ec7ce81be2b2629e138",
- "reference": "41075d93ca254f1c90c79ec7ce81be2b2629e138",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
+ "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
"shasum": ""
},
"require": {
- "php": ">=5.2.0"
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "suggest": {
+ "dflydev/markdown": "~1.0",
+ "erusev/parsedown": "~1.0"
},
- "bin": [
- "bin/phing"
- ],
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
"autoload": {
- "classmap": [
- "classes/phing/"
- ]
+ "psr-0": {
+ "phpDocumentor": [
+ "src/"
+ ]
+ }
},
"notification-url": "https://packagist.org/downloads/",
- "include-path": [
- "classes"
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "mike.vanriel@naenius.com"
+ }
],
+ "time": "2015-02-03 12:10:50"
+ },
+ {
+ "name": "phpspec/prophecy",
+ "version": "v1.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/prophecy.git",
+ "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4745ded9307786b730d7a60df5cb5a6c43cf95f7",
+ "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.0.2",
+ "phpdocumentor/reflection-docblock": "~2.0",
+ "sebastian/comparator": "~1.1"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "~2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Prophecy\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
"license": [
- "LGPL3"
+ "MIT"
],
"authors": [
{
- "name": "Michiel Rook",
- "email": "mrook@php.net",
- "role": "Lead"
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
},
{
- "name": "Phing Community",
- "homepage": "http://www.phing.info/trac/wiki/Development/Contributors"
+ "name": "Marcello Duarte",
+ "email": "marcello.duarte@gmail.com"
}
],
- "description": "PHing Is Not GNU make; it's a PHP project build system or build tool based on Apache Ant.",
- "homepage": "http://www.phing.info/",
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
+ "homepage": "https://github.com/phpspec/prophecy",
"keywords": [
- "build",
- "task",
- "tool"
+ "Double",
+ "Dummy",
+ "fake",
+ "mock",
+ "spy",
+ "stub"
],
- "time": "2012-11-29 21:23:47"
+ "time": "2015-08-13 10:07:40"
},
{
"name": "phpunit/dbunit",
- "version": "1.3.0",
+ "version": "2.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/dbunit.git",
- "reference": "9d8a28bdb41fbd3c0dc16fa32fc00862d06abace"
+ "reference": "390cefcb101e07e1d6400dbdfc3b90ecf2c1279f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/dbunit/zipball/9d8a28bdb41fbd3c0dc16fa32fc00862d06abace",
- "reference": "9d8a28bdb41fbd3c0dc16fa32fc00862d06abace",
+ "url": "https://api.github.com/repos/sebastianbergmann/dbunit/zipball/390cefcb101e07e1d6400dbdfc3b90ecf2c1279f",
+ "reference": "390cefcb101e07e1d6400dbdfc3b90ecf2c1279f",
"shasum": ""
},
"require": {
"ext-pdo": "*",
"ext-simplexml": "*",
- "php": ">=5.3.3",
- "phpunit/phpunit": ">=3.7.0@stable",
- "symfony/yaml": ">=2.1.0"
+ "php": ">=5.4",
+ "phpunit/phpunit": "~4|~5",
+ "symfony/yaml": "~2.1|~3.0"
},
"bin": [
- "composer/bin/dbunit"
+ "dbunit"
],
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.3.x-dev"
+ "dev-master": "2.0.x-dev"
}
},
"autoload": {
"classmap": [
- "PHPUnit/"
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
- "include-path": [
- "",
- "../../symfony/yaml/"
- ],
"license": [
"BSD-3-Clause"
],
@@ -1579,50 +1905,51 @@
"testing",
"xunit"
],
- "time": "2013-11-04 08:33:33"
+ "time": "2015-11-03 11:17:01"
},
{
"name": "phpunit/php-code-coverage",
- "version": "1.2.18",
+ "version": "2.2.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "fe2466802556d3fe4e4d1d58ffd3ccfd0a19be0b"
+ "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/fe2466802556d3fe4e4d1d58ffd3ccfd0a19be0b",
- "reference": "fe2466802556d3fe4e4d1d58ffd3ccfd0a19be0b",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
+ "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
- "phpunit/php-file-iterator": ">=1.3.0@stable",
- "phpunit/php-text-template": ">=1.2.0@stable",
- "phpunit/php-token-stream": ">=1.1.3,<1.3.0"
+ "phpunit/php-file-iterator": "~1.3",
+ "phpunit/php-text-template": "~1.2",
+ "phpunit/php-token-stream": "~1.3",
+ "sebastian/environment": "^1.3.2",
+ "sebastian/version": "~1.0"
},
"require-dev": {
- "phpunit/phpunit": "3.7.*@dev"
+ "ext-xdebug": ">=2.1.4",
+ "phpunit/phpunit": "~4"
},
"suggest": {
"ext-dom": "*",
- "ext-xdebug": ">=2.0.5"
+ "ext-xdebug": ">=2.2.1",
+ "ext-xmlwriter": "*"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.2.x-dev"
+ "dev-master": "2.2.x-dev"
}
},
"autoload": {
"classmap": [
- "PHP/"
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
- "include-path": [
- ""
- ],
"license": [
"BSD-3-Clause"
],
@@ -1640,7 +1967,7 @@
"testing",
"xunit"
],
- "time": "2014-09-02 10:13:14"
+ "time": "2015-10-06 15:47:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -1691,40 +2018,40 @@
},
{
"name": "phpunit/php-invoker",
- "version": "1.1.3",
+ "version": "1.1.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-invoker.git",
- "reference": "8696484458cb43eed025ab46260846de5b74655c"
+ "reference": "86074bf0fc2caf02ec8819a93f65a37cd0b44c8e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/8696484458cb43eed025ab46260846de5b74655c",
- "reference": "8696484458cb43eed025ab46260846de5b74655c",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/86074bf0fc2caf02ec8819a93f65a37cd0b44c8e",
+ "reference": "86074bf0fc2caf02ec8819a93f65a37cd0b44c8e",
"shasum": ""
},
"require": {
"ext-pcntl": "*",
- "php": ">=5.2.7",
- "phpunit/php-timer": ">=1.0.4,<1.1.0"
+ "php": ">=5.3.3",
+ "phpunit/php-timer": ">=1.0.6"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4"
},
"type": "library",
"autoload": {
"classmap": [
- "PHP/"
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
- "include-path": [
- ""
- ],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
+ "email": "sebastian@phpunit.de",
"role": "lead"
}
],
@@ -1733,7 +2060,7 @@
"keywords": [
"process"
],
- "time": "2013-07-16 05:20:21"
+ "time": "2015-06-21 13:32:55"
},
{
"name": "phpunit/php-text-template",
@@ -1819,45 +2146,44 @@
},
{
"name": "phpunit/php-token-stream",
- "version": "1.2.2",
+ "version": "1.4.8",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-token-stream.git",
- "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32"
+ "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/ad4e1e23ae01b483c16f600ff1bebec184588e32",
- "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da",
+ "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
"php": ">=5.3.3"
},
+ "require-dev": {
+ "phpunit/phpunit": "~4.2"
+ },
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.2-dev"
+ "dev-master": "1.4-dev"
}
},
"autoload": {
"classmap": [
- "PHP/"
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
- "include-path": [
- ""
- ],
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
+ "email": "sebastian@phpunit.de"
}
],
"description": "Wrapper around PHP's tokenizer extension.",
@@ -1865,63 +2191,61 @@
"keywords": [
"tokenizer"
],
- "time": "2014-03-03 05:10:30"
+ "time": "2015-09-15 10:49:45"
},
{
"name": "phpunit/phpunit",
- "version": "3.7.28",
+ "version": "4.8.19",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "3b97c8492bcafbabe6b6fbd2ab35f2f04d932a8d"
+ "reference": "b2caaf8947aba5e002d42126723e9d69795f32b4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3b97c8492bcafbabe6b6fbd2ab35f2f04d932a8d",
- "reference": "3b97c8492bcafbabe6b6fbd2ab35f2f04d932a8d",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b2caaf8947aba5e002d42126723e9d69795f32b4",
+ "reference": "b2caaf8947aba5e002d42126723e9d69795f32b4",
"shasum": ""
},
"require": {
"ext-dom": "*",
+ "ext-json": "*",
"ext-pcre": "*",
"ext-reflection": "*",
"ext-spl": "*",
"php": ">=5.3.3",
- "phpunit/php-code-coverage": "~1.2.1",
- "phpunit/php-file-iterator": ">=1.3.1",
- "phpunit/php-text-template": ">=1.1.1",
- "phpunit/php-timer": ">=1.0.4",
- "phpunit/phpunit-mock-objects": "~1.2.0",
- "symfony/yaml": "~2.0"
- },
- "require-dev": {
- "pear-pear/pear": "1.9.4"
+ "phpspec/prophecy": "^1.3.1",
+ "phpunit/php-code-coverage": "~2.1",
+ "phpunit/php-file-iterator": "~1.4",
+ "phpunit/php-text-template": "~1.2",
+ "phpunit/php-timer": ">=1.0.6",
+ "phpunit/phpunit-mock-objects": "~2.3",
+ "sebastian/comparator": "~1.1",
+ "sebastian/diff": "~1.2",
+ "sebastian/environment": "~1.3",
+ "sebastian/exporter": "~1.2",
+ "sebastian/global-state": "~1.0",
+ "sebastian/version": "~1.0",
+ "symfony/yaml": "~2.1|~3.0"
},
"suggest": {
- "ext-json": "*",
- "ext-simplexml": "*",
- "ext-tokenizer": "*",
- "phpunit/php-invoker": ">=1.1.0,<1.2.0"
+ "phpunit/php-invoker": "~1.1"
},
"bin": [
- "composer/bin/phpunit"
+ "phpunit"
],
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.7.x-dev"
+ "dev-master": "4.8.x-dev"
}
},
"autoload": {
"classmap": [
- "PHPUnit/"
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
- "include-path": [
- "",
- "../../symfony/yaml/"
- ],
"license": [
"BSD-3-Clause"
],
@@ -1933,45 +2257,52 @@
}
],
"description": "The PHP Unit Testing framework.",
- "homepage": "http://www.phpunit.de/",
+ "homepage": "https://phpunit.de/",
"keywords": [
"phpunit",
"testing",
"xunit"
],
- "time": "2013-10-17 07:27:40"
+ "time": "2015-11-30 08:18:59"
},
{
"name": "phpunit/phpunit-mock-objects",
- "version": "1.2.3",
+ "version": "2.3.8",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
- "reference": "5794e3c5c5ba0fb037b11d8151add2a07fa82875"
+ "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/5794e3c5c5ba0fb037b11d8151add2a07fa82875",
- "reference": "5794e3c5c5ba0fb037b11d8151add2a07fa82875",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
+ "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
"shasum": ""
},
"require": {
+ "doctrine/instantiator": "^1.0.2",
"php": ">=5.3.3",
- "phpunit/php-text-template": ">=1.1.1@stable"
+ "phpunit/php-text-template": "~1.2",
+ "sebastian/exporter": "~1.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.4"
},
"suggest": {
"ext-soap": "*"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3.x-dev"
+ }
+ },
"autoload": {
"classmap": [
- "PHPUnit/"
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
- "include-path": [
- ""
- ],
"license": [
"BSD-3-Clause"
],
@@ -1988,7 +2319,7 @@
"mock",
"xunit"
],
- "time": "2013-01-13 10:24:48"
+ "time": "2015-10-02 06:51:40"
},
{
"name": "phpunit/phpunit-selenium",
@@ -2137,41 +2468,41 @@
"source": {
"type": "git",
"url": "https://github.com/satooshi/php-coveralls.git",
- "reference": "2fbf803803d179ab1082807308a67bbd5a760c70"
+ "reference": "410d235bde2aa3f93271b39bbc75f82c58b15a11"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/satooshi/php-coveralls/zipball/2fbf803803d179ab1082807308a67bbd5a760c70",
- "reference": "2fbf803803d179ab1082807308a67bbd5a760c70",
+ "url": "https://api.github.com/repos/satooshi/php-coveralls/zipball/410d235bde2aa3f93271b39bbc75f82c58b15a11",
+ "reference": "410d235bde2aa3f93271b39bbc75f82c58b15a11",
"shasum": ""
},
"require": {
"ext-json": "*",
"ext-simplexml": "*",
- "guzzle/guzzle": ">=2.7",
- "php": ">=5.3",
- "psr/log": "1.0.0",
- "symfony/config": ">=2.0",
- "symfony/console": ">=2.0",
- "symfony/stopwatch": ">=2.2",
- "symfony/yaml": ">=2.0"
+ "guzzle/guzzle": "^2.8|^3.0",
+ "php": ">=5.3.3",
+ "psr/log": "^1.0",
+ "symfony/config": "^2.0|^3.0",
+ "symfony/console": "^2.1|^3.0",
+ "symfony/stopwatch": "^2.2|^3.0",
+ "symfony/yaml": "^2.1|^3.0"
},
"require-dev": {
- "apigen/apigen": "2.8.*@stable",
- "pdepend/pdepend": "dev-master as 2.0.0",
- "phpmd/phpmd": "dev-master",
- "phpunit/php-invoker": ">=1.1.0,<1.2.0",
- "phpunit/phpunit": "3.7.*@stable",
- "sebastian/finder-facade": "dev-master",
- "sebastian/phpcpd": "1.4.*@stable",
- "squizlabs/php_codesniffer": "1.4.*@stable",
- "theseer/fdomdocument": "dev-master"
+ "apigen/apigen": "^2.8",
+ "pdepend/pdepend": "^2.2",
+ "phpmd/phpmd": "^2.0",
+ "phpunit/php-invoker": "^1.1",
+ "phpunit/phpunit": "^4.0",
+ "sebastian/finder-facade": "^1.1",
+ "sebastian/phpcpd": "^1.4",
+ "squizlabs/php_codesniffer": "^1.4",
+ "theseer/fdomdocument": "^1.6"
},
"suggest": {
"symfony/http-kernel": "Allows Symfony integration"
},
"bin": [
- "composer/bin/coveralls"
+ "bin/coveralls"
],
"type": "library",
"extra": {
@@ -2180,9 +2511,8 @@
}
},
"autoload": {
- "psr-0": {
- "Satooshi\\Component": "src/",
- "Satooshi\\Bundle": "src/"
+ "psr-4": {
+ "Satooshi\\": "src/Satooshi/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2204,7 +2534,7 @@
"github",
"test"
],
- "time": "2014-11-11 15:35:34"
+ "time": "2015-12-05 22:25:33"
},
{
"name": "sebastian/comparator",
@@ -2272,28 +2602,28 @@
},
{
"name": "sebastian/diff",
- "version": "1.3.0",
+ "version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3"
+ "reference": "2b0112e42c338afa9ad9dfeb94d66f6d84c2f828"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3",
- "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/2b0112e42c338afa9ad9dfeb94d66f6d84c2f828",
+ "reference": "2b0112e42c338afa9ad9dfeb94d66f6d84c2f828",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
- "phpunit/phpunit": "~4.2"
+ "phpunit/phpunit": "~5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.3-dev"
+ "dev-master": "1.4-dev"
}
},
"autoload": {
@@ -2316,11 +2646,61 @@
}
],
"description": "Diff implementation",
- "homepage": "http://www.github.com/sebastianbergmann/diff",
+ "homepage": "https://github.com/sebastianbergmann/diff",
"keywords": [
"diff"
],
- "time": "2015-02-22 15:13:53"
+ "time": "2015-12-06 07:21:36"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "1.3.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "6e7133793a8e5a5714a551a8324337374be209df"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6e7133793a8e5a5714a551a8324337374be209df",
+ "reference": "6e7133793a8e5a5714a551a8324337374be209df",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "time": "2015-12-02 08:37:27"
},
{
"name": "sebastian/exporter",
@@ -2389,17 +2769,68 @@
"time": "2015-06-21 07:55:53"
},
{
+ "name": "sebastian/global-state",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
+ "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.2"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "time": "2015-10-12 03:26:01"
+ },
+ {
"name": "sebastian/recursion-context",
- "version": "1.0.1",
+ "version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "994d4a811bafe801fb06dccbee797863ba2792ba"
+ "reference": "913401df809e99e4f47b27cdd781f4a258d58791"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/994d4a811bafe801fb06dccbee797863ba2792ba",
- "reference": "994d4a811bafe801fb06dccbee797863ba2792ba",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791",
+ "reference": "913401df809e99e4f47b27cdd781f4a258d58791",
"shasum": ""
},
"require": {
@@ -2439,39 +2870,120 @@
],
"description": "Provides functionality to recursively process PHP variables",
"homepage": "http://www.github.com/sebastianbergmann/recursion-context",
- "time": "2015-06-21 08:04:50"
+ "time": "2015-11-11 19:50:13"
},
{
- "name": "symfony/config",
- "version": "v2.7.3",
+ "name": "sebastian/version",
+ "version": "1.0.6",
"source": {
"type": "git",
- "url": "https://github.com/symfony/Config.git",
- "reference": "6c905bbed1e728226de656e4c07d620dfe9e80d9"
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/Config/zipball/6c905bbed1e728226de656e4c07d620dfe9e80d9",
- "reference": "6c905bbed1e728226de656e4c07d620dfe9e80d9",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+ "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+ "shasum": ""
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "time": "2015-06-21 13:59:46"
+ },
+ {
+ "name": "seld/jsonlint",
+ "version": "1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/jsonlint.git",
+ "reference": "66834d3e3566bb5798db7294619388786ae99394"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/66834d3e3566bb5798db7294619388786ae99394",
+ "reference": "66834d3e3566bb5798db7294619388786ae99394",
"shasum": ""
},
"require": {
- "php": ">=5.3.9",
- "symfony/filesystem": "~2.3"
+ "php": "^5.3 || ^7.0"
},
- "require-dev": {
- "symfony/phpunit-bridge": "~2.7"
+ "bin": [
+ "bin/jsonlint"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Seld\\JsonLint\\": "src/Seld/JsonLint/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "JSON Linter",
+ "keywords": [
+ "json",
+ "linter",
+ "parser",
+ "validator"
+ ],
+ "time": "2015-11-21 02:21:41"
+ },
+ {
+ "name": "symfony/config",
+ "version": "v3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/config.git",
+ "reference": "40bae8658dbbb500ebc19aa9fde22dc4295fc290"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/config/zipball/40bae8658dbbb500ebc19aa9fde22dc4295fc290",
+ "reference": "40bae8658dbbb500ebc19aa9fde22dc4295fc290",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.5.9",
+ "symfony/filesystem": "~2.8|~3.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.7-dev"
+ "dev-master": "3.0-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Config\\": ""
- }
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2489,30 +3001,30 @@
],
"description": "Symfony Config Component",
"homepage": "https://symfony.com",
- "time": "2015-07-09 16:07:40"
+ "time": "2015-11-02 20:34:04"
},
{
"name": "symfony/console",
- "version": "v2.7.3",
+ "version": "v2.8.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/Console.git",
- "reference": "d6cf02fe73634c96677e428f840704bfbcaec29e"
+ "url": "https://github.com/symfony/console.git",
+ "reference": "d232bfc100dfd32b18ccbcab4bcc8f28697b7e41"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/Console/zipball/d6cf02fe73634c96677e428f840704bfbcaec29e",
- "reference": "d6cf02fe73634c96677e428f840704bfbcaec29e",
+ "url": "https://api.github.com/repos/symfony/console/zipball/d232bfc100dfd32b18ccbcab4bcc8f28697b7e41",
+ "reference": "d232bfc100dfd32b18ccbcab4bcc8f28697b7e41",
"shasum": ""
},
"require": {
- "php": ">=5.3.9"
+ "php": ">=5.3.9",
+ "symfony/polyfill-mbstring": "~1.0"
},
"require-dev": {
"psr/log": "~1.0",
- "symfony/event-dispatcher": "~2.1",
- "symfony/phpunit-bridge": "~2.7",
- "symfony/process": "~2.1"
+ "symfony/event-dispatcher": "~2.1|~3.0.0",
+ "symfony/process": "~2.1|~3.0.0"
},
"suggest": {
"psr/log": "For using the console logger",
@@ -2522,13 +3034,16 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.7-dev"
+ "dev-master": "2.8-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Console\\": ""
- }
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2546,20 +3061,20 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
- "time": "2015-07-28 15:18:12"
+ "time": "2015-11-30 12:35:10"
},
{
"name": "symfony/event-dispatcher",
- "version": "v2.7.3",
+ "version": "v2.8.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/EventDispatcher.git",
- "reference": "9310b5f9a87ec2ea75d20fec0b0017c77c66dac3"
+ "url": "https://github.com/symfony/event-dispatcher.git",
+ "reference": "a5eb815363c0388e83247e7e9853e5dbc14999cc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/9310b5f9a87ec2ea75d20fec0b0017c77c66dac3",
- "reference": "9310b5f9a87ec2ea75d20fec0b0017c77c66dac3",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a5eb815363c0388e83247e7e9853e5dbc14999cc",
+ "reference": "a5eb815363c0388e83247e7e9853e5dbc14999cc",
"shasum": ""
},
"require": {
@@ -2567,11 +3082,10 @@
},
"require-dev": {
"psr/log": "~1.0",
- "symfony/config": "~2.0,>=2.0.5",
- "symfony/dependency-injection": "~2.6",
- "symfony/expression-language": "~2.6",
- "symfony/phpunit-bridge": "~2.7",
- "symfony/stopwatch": "~2.3"
+ "symfony/config": "~2.0,>=2.0.5|~3.0.0",
+ "symfony/dependency-injection": "~2.6|~3.0.0",
+ "symfony/expression-language": "~2.6|~3.0.0",
+ "symfony/stopwatch": "~2.3|~3.0.0"
},
"suggest": {
"symfony/dependency-injection": "",
@@ -2580,13 +3094,16 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.7-dev"
+ "dev-master": "2.8-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\EventDispatcher\\": ""
- }
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2604,38 +3121,38 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
- "time": "2015-06-18 19:21:56"
+ "time": "2015-10-30 20:15:42"
},
{
"name": "symfony/filesystem",
- "version": "v2.7.3",
+ "version": "v3.0.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/Filesystem.git",
- "reference": "2d7b2ddaf3f548f4292df49a99d19c853d43f0b8"
+ "url": "https://github.com/symfony/filesystem.git",
+ "reference": "692d98d813e4ef314b9c22775c86ddbeb0f44884"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/Filesystem/zipball/2d7b2ddaf3f548f4292df49a99d19c853d43f0b8",
- "reference": "2d7b2ddaf3f548f4292df49a99d19c853d43f0b8",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/692d98d813e4ef314b9c22775c86ddbeb0f44884",
+ "reference": "692d98d813e4ef314b9c22775c86ddbeb0f44884",
"shasum": ""
},
"require": {
- "php": ">=5.3.9"
- },
- "require-dev": {
- "symfony/phpunit-bridge": "~2.7"
+ "php": ">=5.5.9"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.7-dev"
+ "dev-master": "3.0-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Filesystem\\": ""
- }
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2653,24 +3170,25 @@
],
"description": "Symfony Filesystem Component",
"homepage": "https://symfony.com",
- "time": "2015-07-09 16:07:40"
+ "time": "2015-11-23 10:41:47"
},
{
- "name": "symfony/stopwatch",
- "version": "v2.7.3",
+ "name": "symfony/options-resolver",
+ "version": "v2.6.12",
+ "target-dir": "Symfony/Component/OptionsResolver",
"source": {
"type": "git",
- "url": "https://github.com/symfony/Stopwatch.git",
- "reference": "b07a866719bbac5294c67773340f97b871733310"
+ "url": "https://github.com/symfony/options-resolver.git",
+ "reference": "31e56594cee489e9a235b852228b0598b52101c1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/b07a866719bbac5294c67773340f97b871733310",
- "reference": "b07a866719bbac5294c67773340f97b871733310",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/31e56594cee489e9a235b852228b0598b52101c1",
+ "reference": "31e56594cee489e9a235b852228b0598b52101c1",
"shasum": ""
},
"require": {
- "php": ">=5.3.9"
+ "php": ">=5.3.3"
},
"require-dev": {
"symfony/phpunit-bridge": "~2.7"
@@ -2678,13 +3196,123 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.7-dev"
+ "dev-master": "2.6-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Symfony\\Component\\OptionsResolver\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony OptionsResolver Component",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "config",
+ "configuration",
+ "options"
+ ],
+ "time": "2015-05-13 11:33:56"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "0b6a8940385311a24e060ec1fe35680e17c74497"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0b6a8940385311a24e060ec1fe35680e17c74497",
+ "reference": "0b6a8940385311a24e060ec1fe35680e17c74497",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
}
},
"autoload": {
"psr-4": {
- "Symfony\\Component\\Stopwatch\\": ""
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "time": "2015-11-04 20:28:58"
+ },
+ {
+ "name": "symfony/stopwatch",
+ "version": "v3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/stopwatch.git",
+ "reference": "6aeac8907e3e1340a0033b0a9ec075f8e6524800"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6aeac8907e3e1340a0033b0a9ec075f8e6524800",
+ "reference": "6aeac8907e3e1340a0033b0a9ec075f8e6524800",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.5.9"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Stopwatch\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2702,38 +3330,38 @@
],
"description": "Symfony Stopwatch Component",
"homepage": "https://symfony.com",
- "time": "2015-07-01 18:23:16"
+ "time": "2015-10-30 23:35:59"
},
{
"name": "symfony/yaml",
- "version": "v2.7.3",
+ "version": "v2.8.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/Yaml.git",
- "reference": "71340e996171474a53f3d29111d046be4ad8a0ff"
+ "url": "https://github.com/symfony/yaml.git",
+ "reference": "f79824187de95064a2f5038904c4d7f0227fedb5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/Yaml/zipball/71340e996171474a53f3d29111d046be4ad8a0ff",
- "reference": "71340e996171474a53f3d29111d046be4ad8a0ff",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/f79824187de95064a2f5038904c4d7f0227fedb5",
+ "reference": "f79824187de95064a2f5038904c4d7f0227fedb5",
"shasum": ""
},
"require": {
"php": ">=5.3.9"
},
- "require-dev": {
- "symfony/phpunit-bridge": "~2.7"
- },
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.7-dev"
+ "dev-master": "2.8-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Yaml\\": ""
- }
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2751,20 +3379,20 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
- "time": "2015-07-28 14:07:07"
+ "time": "2015-11-30 12:35:10"
},
{
"name": "tracy/tracy",
- "version": "v2.3.3",
+ "version": "v2.3.7",
"source": {
"type": "git",
"url": "https://github.com/nette/tracy.git",
- "reference": "17d15b8dc83cab3bc5022a45d32c681a76cc19e1"
+ "reference": "eddb369f320b86fe37838bbbfb12d79ddd21d134"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/tracy/zipball/17d15b8dc83cab3bc5022a45d32c681a76cc19e1",
- "reference": "17d15b8dc83cab3bc5022a45d32c681a76cc19e1",
+ "url": "https://api.github.com/repos/nette/tracy/zipball/eddb369f320b86fe37838bbbfb12d79ddd21d134",
+ "reference": "eddb369f320b86fe37838bbbfb12d79ddd21d134",
"shasum": ""
},
"require": {
@@ -2792,21 +3420,21 @@
"authors": [
{
"name": "David Grudl",
- "homepage": "http://davidgrudl.com"
+ "homepage": "https://davidgrudl.com"
},
{
"name": "Nette Community",
- "homepage": "http://nette.org/contributors"
+ "homepage": "https://nette.org/contributors"
}
],
"description": "Tracy: useful PHP debugger",
- "homepage": "http://tracy.nette.org",
+ "homepage": "https://tracy.nette.org",
"keywords": [
"debug",
"debugger",
"nette"
],
- "time": "2015-07-03 12:52:35"
+ "time": "2015-11-30 00:50:47"
}
],
"aliases": [],
diff --git a/demos/blog-tutorial/protected/common/fr/TopicList.tpl b/demos/blog-tutorial/protected/common/fr/TopicList.tpl
deleted file mode 100755
index 2154db86..00000000
--- a/demos/blog-tutorial/protected/common/fr/TopicList.tpl
+++ /dev/null
@@ -1,62 +0,0 @@
-<div id="toc">
-
-<div class="topic">
-<div>Introduction</div>
-<ul>
- <li><a href="?page=Overview">Vue d'ensemble</a></li>
- <li><a href="?page=Requirements">Buts à atteindre</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>1er jour: Découvrir PRADO</div>
-<ul>
- <li><a href="?page=Day1.Setup">Installation</a></li>
- <li><a href="?page=Day1.CreateContact">Création de la page Contact</a></li>
- <li><a href="?page=Day1.ShareLayout">Partager les modèles de gabarit</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>2ième jour: Mise en place de la Base de Données</div>
-<ul>
- <li><a href="?page=Day2.CreateDB">Création de la base</a></li>
- <li><a href="?page=Day2.ConnectDB">Connection à la base</a></li>
- <li><a href="?page=Day2.CreateAR">Création des classes AR</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>3ième jour: Gestion des utilisateurs</div>
-<ul>
- <li><a href="?page=Day3.Overview">Vue d'ensemble</a></li>
- <li><a href="?page=Day3.Auth">Authentification et Autorisation</a></li>
- <li><a href="?page=Day3.CreateLoginUser">Création de la page login</a></li>
- <li><a href="?page=Day3.CreateNewUser">Création de la page NewUser</a></li>
- <li><a href="?page=Day3.CreateEditUser">Création de la page EditUser</a></li>
- <li><a href="?page=Day3.CreateAdminUser">Création de la page AdminUser</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>4ième jour: Gestion des Messages</div>
-<ul>
- <li><a href="?page=Day4.Overview">Vue d'ensemble</a></li>
- <li><a href="?page=Day4.CreateListPost">Création de la page ListPost</a></li>
- <li><a href="?page=Day4.CreateReadPost">Création de la page ReadPost</a></li>
- <li><a href="?page=Day4.CreateNewPost">Création de la page NewPost</a></li>
- <li><a href="?page=Day4.CreateEditPost">Création de la page EditPost</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>5ième jour: Refactorisation et déploiement</div>
-<ul>
- <li><a href="?page=Day5.UseTheme">Utilisation des Thèmes et des Skins</a></li>
- <li><a href="?page=Day5.ErrorLogging">Gestion et journalisation d'erreur</a></li>
- <li><a href="?page=Day5.Performance">Amélioration des performances</a></li>
- <li><a href="?page=Day5.Summary">Résumé</a></li>
-</ul>
-</div>
-
-</div> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/common/id/TopicList.tpl b/demos/blog-tutorial/protected/common/id/TopicList.tpl
deleted file mode 100755
index 1d234f74..00000000
--- a/demos/blog-tutorial/protected/common/id/TopicList.tpl
+++ /dev/null
@@ -1,62 +0,0 @@
-<div id="toc">
-
-<div class="topic">
-<div>Introduction</div>
-<ul>
- <li><a href="?page=Overview">Tinjauan</a></li>
- <li><a href="?page=Requirements">Analisis Persyaratan</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Hari ke-1: Merasakan PRADO</div>
-<ul>
- <li><a href="?page=Day1.Setup">Persiapan Awal</a></li>
- <li><a href="?page=Day1.CreateContact">Membuat Halaman Kontak</a></li>
- <li><a href="?page=Day1.ShareLayout">Berbagi Tata Letak Umum</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Hari ke-2: Menyiapkan Database</div>
-<ul>
- <li><a href="?page=Day2.CreateDB">Membuat Database</a></li>
- <li><a href="?page=Day2.ConnectDB">Melakukan Koneksi DB</a></li>
- <li><a href="?page=Day2.CreateAR">Membuat Kelas AR</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Hari ke-3: Menerapkan Manajemen Pengguna</div>
-<ul>
- <li><a href="?page=Day3.Overview">Tinjauan</a></li>
- <li><a href="?page=Day3.Auth">Otentikasi dan Otorisasi</a></li>
- <li><a href="?page=Day3.CreateLoginUser">Membuat Halaman LoginUser</a></li>
- <li><a href="?page=Day3.CreateNewUser">Membuat Halaman NewUser</a></li>
- <li><a href="?page=Day3.CreateEditUser">Membuat Halaman EditUser</a></li>
- <li><a href="?page=Day3.CreateAdminUser">Membuat Halaman Pengguna Admin</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Hari ke-4: Menerapkan Manajemen Tulisan</div>
-<ul>
- <li><a href="?page=Day4.Overview">Tinjauan</a></li>
- <li><a href="?page=Day4.CreateListPost">Membuat Halaman ListPost</a></li>
- <li><a href="?page=Day4.CreateReadPost">Membuat Halaman ReadPost</a></li>
- <li><a href="?page=Day4.CreateNewPost">Membuat Halaman NewPost</a></li>
- <li><a href="?page=Day4.CreateEditPost">Membuat Halaman EditPost</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Hari ke-5: Merefraktorisasi dan Penyebaran</div>
-<ul>
- <li><a href="?page=Day5.UseTheme">Menggunakan Tema dan Skin</a></li>
- <li><a href="?page=Day5.ErrorLogging">Penanangan Kesalahan dan Pencatatan</a></li>
- <li><a href="?page=Day5.Performance">Penyesuaian Performansi</a></li>
- <li><a href="?page=Day5.Summary">Ringkasan</a></li>
-</ul>
-</div>
-
-</div> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/layout/MainLayout.php b/demos/blog-tutorial/protected/layout/MainLayout.php
index e2a2b4b6..001069f5 100755
--- a/demos/blog-tutorial/protected/layout/MainLayout.php
+++ b/demos/blog-tutorial/protected/layout/MainLayout.php
@@ -2,7 +2,7 @@
class MainLayout extends TTemplateControl
{
-
+ /*
public function onLoad($param)
{
parent::onLoad($param);
@@ -10,6 +10,7 @@ class MainLayout extends TTemplateControl
$this->languages->DataSource = TPropertyValue::ensureArray($this->Application->Parameters['languages']);
$this->languages->dataBind();
}
+ */
public function languageLinkCreated($sender, $param)
{
diff --git a/demos/blog-tutorial/protected/layout/MainLayout.tpl b/demos/blog-tutorial/protected/layout/MainLayout.tpl
index f2bc1f96..c8b3eb87 100755
--- a/demos/blog-tutorial/protected/layout/MainLayout.tpl
+++ b/demos/blog-tutorial/protected/layout/MainLayout.tpl
@@ -15,7 +15,7 @@
<com:TPanel ID="MainMenu" CssClass="mainmenu">
<a href="?">Home</a> |
-<a href="http://www.pradosoft.com">PradoSoft.com</a>
+<a href="https://github.com/pradosoft/prado">Prado Project</a>
</com:TPanel>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
@@ -24,17 +24,19 @@
<com:TopicList ID="TopicPanel" />
</td>
<td valign="top">
-<com:TRepeater ID="languages" OnItemCreated="languageLinkCreated">
- <prop:HeaderTemplate>
- <div class="languages">Available Languages: <ul>
- </prop:HeaderTemplate>
- <prop:ItemTemplate>
- <li><com:THyperLink ID="link" Text=<%# $this->DataItem %> /></li>
- </prop:ItemTemplate>
- <prop:FooterTemplate>
- </ul></div>
- </prop:FooterTemplate>
+<!---
+<com:TRepeater ID="languages" OnItemCreated="languageLinkCreated">
+ <prop:HeaderTemplate>
+ <div class="languages">Available Languages: <ul>
+ </prop:HeaderTemplate>
+ <prop:ItemTemplate>
+ <li><com:THyperLink ID="link" Text=<%# $this->DataItem %> /></li>
+ </prop:ItemTemplate>
+ <prop:FooterTemplate>
+ </ul></div>
+ </prop:FooterTemplate>
</com:TRepeater>
+--->
<div id="content">
<com:TContentPlaceHolder ID="Main" />
</div>
@@ -43,7 +45,7 @@
</table>
<div id="footer">
-Copyright &copy; 2005-2007 <a href="http://www.pradosoft.com">PradoSoft</a>.
+Copyright &copy; 2005-2015 <a href="https://github.com/pradosoft">The PRADO Group</a>.
<br/><br/>
<%= Prado::poweredByPrado() %>
<a href="http://validator.w3.org/check?uri=referer"><img border="0" src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
diff --git a/demos/blog-tutorial/protected/layout/fr/MainLayout.tpl b/demos/blog-tutorial/protected/layout/fr/MainLayout.tpl
deleted file mode 100755
index 31464213..00000000
--- a/demos/blog-tutorial/protected/layout/fr/MainLayout.tpl
+++ /dev/null
@@ -1,54 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-
-<com:THead Title="PRADO Tutoriel Blog">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<meta http-equiv="content-language" content="en"/>
-</com:THead>
-
-<body>
-<com:TForm>
-<div id="header">
-<div class="title">PRADO for Dummies</div>
-<div class="image"></div>
-</div>
-
-<com:TPanel ID="MainMenu" CssClass="mainmenu">
-<a href="?">Accueil</a> |
-<a href="http://www.pradosoft.com">PradoSoft.com</a>
-</com:TPanel>
-
-<table width="100%" border="0" cellspacing="0" cellpadding="0">
-<tr>
-<td valign="top" width="1">
-<com:TopicList ID="TopicPanel" />
-</td>
-<td valign="top">
-<com:TRepeater ID="languages" OnItemCreated="languageLinkCreated">
- <prop:HeaderTemplate>
- <div class="languages">Available Languages: <ul>
- </prop:HeaderTemplate>
- <prop:ItemTemplate>
- <li><com:THyperLink ID="link" Text=<%# $this->DataItem %> /></li>
- </prop:ItemTemplate>
- <prop:FooterTemplate>
- </ul></div>
- </prop:FooterTemplate>
-</com:TRepeater>
-<div id="content">
-<com:TContentPlaceHolder ID="Main" />
-</div>
-</td>
-</tr>
-</table>
-
-<div id="footer">
-Copyright &copy; 2005-2007 <a href="http://www.pradosoft.com">PradoSoft</a>.
-<br/><br/>
-<%= Prado::poweredByPrado() %>
-<a href="http://validator.w3.org/check?uri=referer"><img border="0" src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
-</div>
-
-</com:TForm>
-</body>
-</html>
diff --git a/demos/blog-tutorial/protected/layout/id/MainLayout.tpl b/demos/blog-tutorial/protected/layout/id/MainLayout.tpl
deleted file mode 100755
index 96e38c95..00000000
--- a/demos/blog-tutorial/protected/layout/id/MainLayout.tpl
+++ /dev/null
@@ -1,54 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
-
-<com:THead Title="Tutorial Blog PRADO">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<meta http-equiv="content-language" content="en"/>
-</com:THead>
-
-<body>
-<com:TForm>
-<div id="header">
-<div class="title">PRADO untuk Pemula</div>
-<div class="image"></div>
-</div>
-
-<com:TPanel ID="MainMenu" CssClass="mainmenu">
-<a href="?">Home</a> |
-<a href="http://www.pradosoft.com">PradoSoft.com</a>
-</com:TPanel>
-
-<table width="100%" border="0" cellspacing="0" cellpadding="0">
-<tr>
-<td valign="top" width="1">
-<com:TopicList ID="TopicPanel" />
-</td>
-<td valign="top">
-<com:TRepeater ID="languages" OnItemCreated="languageLinkCreated">
- <prop:HeaderTemplate>
- <div class="languages">Bahasa Tersedia: <ul>
- </prop:HeaderTemplate>
- <prop:ItemTemplate>
- <li><com:THyperLink ID="link" Text=<%# $this->DataItem %> /></li>
- </prop:ItemTemplate>
- <prop:FooterTemplate>
- </ul></div>
- </prop:FooterTemplate>
-</com:TRepeater>
-<div id="content">
-<com:TContentPlaceHolder ID="Main" />
-</div>
-</td>
-</tr>
-</table>
-
-<div id="footer">
-Hak Cipta &copy; 2005-2008 <a href="http://www.pradosoft.com">PradoSoft</a>.
-<br/><br/>
-<%= Prado::poweredByPrado() %>
-<a href="http://validator.w3.org/check?uri=referer"><img border="0" src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
-</div>
-
-</com:TForm>
-</body>
-</html> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day1/CreateContact.page b/demos/blog-tutorial/protected/pages/Day1/CreateContact.page
index 0d9fc026..ea7b9253 100755
--- a/demos/blog-tutorial/protected/pages/Day1/CreateContact.page
+++ b/demos/blog-tutorial/protected/pages/Day1/CreateContact.page
@@ -3,7 +3,7 @@
<h1>Creating Contact Page</h1>
<p>
-We have created a default page <tt>Home.page</tt> using the <a href="http://www.pradosoft.com/demos/quickstart/?page=GettingStarted.CommandLine">PRADO command line tool</a>. The page is relatively static because it does not containt dynamic content. In this section, we will create an interactive page named <tt>Contact</tt>.
+We have created a default page <tt>Home.page</tt> using the <a href="http://www.pradoframework.net/site/demos/quickstart/?page=GettingStarted.CommandLine">PRADO command line tool</a>. The page is relatively static because it does not containt dynamic content. In this section, we will create an interactive page named <tt>Contact</tt>.
</p>
<p>
@@ -17,7 +17,7 @@ To create the <tt>Contact</tt> page, we need two files under the <tt>pages</tt>
<img src="<%~ directories2.gif %>" class="output" />
<com:InfoBox>
-A <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Pages">page</a> must have either a <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates1">template</a> file (extension <tt>.page</tt>) or a class file, or both:
+A <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Fundamentals.Pages">page</a> must have either a <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Configurations.Templates1">template</a> file (extension <tt>.page</tt>) or a class file, or both:
</p>
<ul>
@@ -35,7 +35,7 @@ We first create the template file for the <tt>Contact</tt> page.
</p>
<p>
-We use template to organize the presentational layout of the feedback form. In the template, we use <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.TextBox">textboxes</a> to collect user's name, email and feedback. And we use <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.Validation">validators</a> to ensure that the user provides all these information before submitting the feedback form. The whole template is as follows,
+We use template to organize the presentational layout of the feedback form. In the template, we use <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Controls.TextBox">textboxes</a> to collect user's name, email and feedback. And we use <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Controls.Validation">validators</a> to ensure that the user provides all these information before submitting the feedback form. The whole template is as follows,
</p>
<com:TTextHighlighter CssClass="source" Language="prado">
@@ -86,11 +86,11 @@ We use template to organize the presentational layout of the feedback form. In t
</com:TTextHighlighter>
<p>
-As we can see that the template looks very similar to a normal HTML page. The main difference is that the template contains a few <tt>&lt;com:&gt;</tt> tags. Each <tt>&lt;com:&gt;</tt> tag refers to a <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Controls">control</a> whose properties are being initialized with name-value pairs in the tag. For example, the <tt>&lt;com:TButton&gt;</tt> refers to the <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.Button">TButton</a> control which displays a button that users can click on to submit the feedback form. For complete template syntax, please refer to the <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates1">Quickstart Tutorial</a>.
+As we can see that the template looks very similar to a normal HTML page. The main difference is that the template contains a few <tt>&lt;com:&gt;</tt> tags. Each <tt>&lt;com:&gt;</tt> tag refers to a <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Fundamentals.Controls">control</a> whose properties are being initialized with name-value pairs in the tag. For example, the <tt>&lt;com:TButton&gt;</tt> refers to the <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Controls.Button">TButton</a> control which displays a button that users can click on to submit the feedback form. For complete template syntax, please refer to the <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Configurations.Templates1">Quickstart Tutorial</a>.
</p>
<com:InfoBox>
-PRADO provides a control for every type of HTML input. For example, <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.TextBox">TTextBox</a> displays a text input field, <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.List">TDropDownList</a> displays a combobox. Each control is a component that may be accessed in code as an object with configurable properties.
+PRADO provides a control for every type of HTML input. For example, <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Controls.TextBox">TTextBox</a> displays a text input field, <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Controls.List">TDropDownList</a> displays a combobox. Each control is a component that may be accessed in code as an object with configurable properties.
</com:InfoBox>
<p>
@@ -117,10 +117,10 @@ Below we summarize the controls that are used in the page template:
</p>
<ul>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TForm">TForm</a> displays an HTML form. Any input control must be enclosed within it. And most importantly, at most one <tt>TForm</tt> may appear in a page.</li>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TTextBox">TTextBox</a> displays a text box to collect user text input.</li>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TRequiredFieldValidator">TRequiredFieldValidator</a> ensures that the associated text box is not empty when the feedback is submitted.</li>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TEmailAddressValidator">TEmailAddressValidator</a> ensures that the textbox contains a <i>valid</i> email address when the feedback is submitted.</li>
+<li><a href="http://pradosoft.github.io/docs/manual/class-TForm">TForm</a> displays an HTML form. Any input control must be enclosed within it. And most importantly, at most one <tt>TForm</tt> may appear in a page.</li>
+<li><a href="http://pradosoft.github.io/docs/manual/class-TTextBox">TTextBox</a> displays a text box to collect user text input.</li>
+<li><a href="http://pradosoft.github.io/docs/manual/class-TRequiredFieldValidator">TRequiredFieldValidator</a> ensures that the associated text box is not empty when the feedback is submitted.</li>
+<li><a href="http://pradosoft.github.io/docs/manual/class-TEmailAddressValidator">TEmailAddressValidator</a> ensures that the textbox contains a <i>valid</i> email address when the feedback is submitted.</li>
</ul>
<com:TipBox>
diff --git a/demos/blog-tutorial/protected/pages/Day1/Setup.page b/demos/blog-tutorial/protected/pages/Day1/Setup.page
index 582d0399..b8df0705 100755
--- a/demos/blog-tutorial/protected/pages/Day1/Setup.page
+++ b/demos/blog-tutorial/protected/pages/Day1/Setup.page
@@ -3,7 +3,7 @@
<h1>Initial Setup</h1>
<p>
-We start by setting up the directories and the files that are required by most PRADO applications. We use the <a href="http://www.pradosoft.com/demos/quickstart/?page=GettingStarted.CommandLine">PRADO command line tool</a> to achieve this goal.
+We start by setting up the directories and the files that are required by most PRADO applications. We use the <a href="http://www.pradoframework.net/site/demos/quickstart/?page=GettingStarted.CommandLine">PRADO command line tool</a> to achieve this goal.
</p>
<p>
@@ -11,7 +11,7 @@ Assume <tt>blog</tt> is the name of the directory to hold the whole blog system,
</p>
<p>
-Under the <tt>blog</tt> directory, we run the <a href="http://www.pradosoft.com/demos/quickstart/?page=GettingStarted.CommandLine">PRADO command line tool</a> with the following command (replace <tt>path/to</tt> with the actual path to the PRADO framework installation):
+Under the <tt>blog</tt> directory, we run the <a href="http://www.pradoframework.net/site/demos/quickstart/?page=GettingStarted.CommandLine">PRADO command line tool</a> with the following command (replace <tt>path/to</tt> with the actual path to the PRADO framework installation):
</p>
<com:TTextHighlighter CssClass="source cli">
php path/to/prado-cli.php -c .
@@ -60,7 +60,7 @@ The name of the entry script does not need to be <tt>index.php</tt>. It can be a
<h3>Application Configuration</h3>
<p>
-The <i>optional</i> XML file <tt>application.xml</tt> contains the <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.AppConfig">application configuration</a>. Its main purpose is to customize in a configurable fashion the application instance created in the entry script. For example, we may enable the <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.Logging">logging</a> feature for our blog system with the help of application configuration.
+The <i>optional</i> XML file <tt>application.xml</tt> contains the <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Configurations.AppConfig">application configuration</a>. Its main purpose is to customize in a configurable fashion the application instance created in the entry script. For example, we may enable the <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Advanced.Logging">logging</a> feature for our blog system with the help of application configuration.
</p>
<p>
@@ -71,11 +71,11 @@ The file <tt>application.xml</tt> we have now is nearly empty. In fact, we may s
<h3>Homepage</h3>
<p>
-The homepage (also called default page) <tt>Home.page</tt> is the only <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Pages">page</a> created by the PRADO command line tool. It is the content in this file that shows up in the browser when visiting the URL <tt>http://hostname/blog/index.php</tt>.
+The homepage (also called default page) <tt>Home.page</tt> is the only <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Fundamentals.Pages">page</a> created by the PRADO command line tool. It is the content in this file that shows up in the browser when visiting the URL <tt>http://hostname/blog/index.php</tt>.
</p>
<p>
-Content in the file <tt>Home.page</tt> uses the <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates1">PRADO template format</a>, which is mostly like HTML enhanced with a few PRADO-specific tags. For example, in <tt>Home.page</tt> we see the following pure HTML content:
+Content in the file <tt>Home.page</tt> uses the <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Configurations.Templates1">PRADO template format</a>, which is mostly like HTML enhanced with a few PRADO-specific tags. For example, in <tt>Home.page</tt> we see the following pure HTML content:
</p>
<com:TTextHighlighter CssClass="source" Language="prado">
@@ -117,7 +117,7 @@ It is safe to remove files and directories under <tt>protected/runtime</tt> and
<h3>The <tt>pages</tt> Directory</h3>
<p>
-The <tt>pages</tt> directory is the <i>root page directory</i> holding all <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Pages">pages</a> in a PRADO application. It bears an analogy to the <tt>htdocs</tt> directory for the Apache httpd Web server.
+The <tt>pages</tt> directory is the <i>root page directory</i> holding all <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Fundamentals.Pages">pages</a> in a PRADO application. It bears an analogy to the <tt>htdocs</tt> directory for the Apache httpd Web server.
</p>
<p>
diff --git a/demos/blog-tutorial/protected/pages/Day1/ShareLayout.page b/demos/blog-tutorial/protected/pages/Day1/ShareLayout.page
index 6115ef22..a8d4b5bd 100755
--- a/demos/blog-tutorial/protected/pages/Day1/ShareLayout.page
+++ b/demos/blog-tutorial/protected/pages/Day1/ShareLayout.page
@@ -3,11 +3,11 @@
<h1>Sharing Common Layout</h1>
<p>
-In this section, we will use the <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.MasterContent">master/content</a> feature of PRADO to share common layout among pages. Common layout refers to the area that is the same or largely the same for a set of pages. For example, in our blog system, all pages will share the same header, footer and side-bar containing shortcut links. A straightforward implementation is to repeat the common layout in every page. However, this approach is prone to error and is hard to maintain. The <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.MasterContent">master/content</a> feature allows us to treat the common layout as a control which centralizes the logic and presentation of the common layout for every page.
+In this section, we will use the <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Advanced.MasterContent">master/content</a> feature of PRADO to share common layout among pages. Common layout refers to the area that is the same or largely the same for a set of pages. For example, in our blog system, all pages will share the same header, footer and side-bar containing shortcut links. A straightforward implementation is to repeat the common layout in every page. However, this approach is prone to error and is hard to maintain. The <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Advanced.MasterContent">master/content</a> feature allows us to treat the common layout as a control which centralizes the logic and presentation of the common layout for every page.
</p>
<com:InfoBox>
-It is also possible to share common layout via <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates1">template inclusion</a>, which is like PHP file inclusion. The drawback of template inclusion is that it is not self-contained and does not carry a class to contain the logic for the common layout.
+It is also possible to share common layout via <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Configurations.Templates1">template inclusion</a>, which is like PHP file inclusion. The drawback of template inclusion is that it is not self-contained and does not carry a class to contain the logic for the common layout.
</com:InfoBox>
@@ -52,9 +52,9 @@ For the moment, <tt>MainLayout</tt> only contains a simple header and a footer,
The above shows the content in the template file <tt>MainLayout.tpl</tt>. Three new tags are used:
</p>
<ul>
-<li><tt>&lt;com:TContentPlaceHolder&gt;</tt> represents <a href="http://www.pradosoft.com/docs/classdoc/TContentPlaceHolder">TContentPlaceHolder</a> control. It reserves the place in the template where content will be placed at. Here, the content comes from the pages who use this master control.</li>
-<li><tt>&lt;com:THead&gt;</tt> represents <a href="http://www.pradosoft.com/docs/classdoc/THead">THead</a> control which represents the &lt;head&gt; tag in HTML. It allows PRADO to manipulate the &lt;head&gt; tag as a component (e.g., setting page titles, adding custom CSS styles.)</li>
-<li><tt>&lt;%= %&gt;</tt> is an <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates2#et">expression tag</a>. It displays the evaluation result of the enclosed expression at the place where it appears.</li>
+<li><tt>&lt;com:TContentPlaceHolder&gt;</tt> represents <a href="http://pradosoft.github.io/docs/manual/class-TContentPlaceHolder">TContentPlaceHolder</a> control. It reserves the place in the template where content will be placed at. Here, the content comes from the pages who use this master control.</li>
+<li><tt>&lt;com:THead&gt;</tt> represents <a href="http://pradosoft.github.io/docs/manual/class-THead">THead</a> control which represents the &lt;head&gt; tag in HTML. It allows PRADO to manipulate the &lt;head&gt; tag as a component (e.g., setting page titles, adding custom CSS styles.)</li>
+<li><tt>&lt;%= %&gt;</tt> is an <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Configurations.Templates2#et">expression tag</a>. It displays the evaluation result of the enclosed expression at the place where it appears.</li>
</ul>
<p>
@@ -69,7 +69,7 @@ class MainLayout extends TTemplateControl
</com:TTextHighlighter>
<com:InfoBox>
-The file extension name for page templates is <tt>.page</tt>, while for non-page templates it is <tt>.tpl</tt>. This is to differentiate pages from other controls. They both use the same <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates1">template syntax</a>. For pages, their class files are optional (default to <tt>TPage</tt>), while for non-page controls, their class files are mandatory. Similar to Java, the name of a class file must be the same as the class name. Be careful about the case-sensitivity on Linux/Unix systems.
+The file extension name for page templates is <tt>.page</tt>, while for non-page templates it is <tt>.tpl</tt>. This is to differentiate pages from other controls. They both use the same <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Configurations.Templates1">template syntax</a>. For pages, their class files are optional (default to <tt>TPage</tt>), while for non-page controls, their class files are mandatory. Similar to Java, the name of a class file must be the same as the class name. Be careful about the case-sensitivity on Linux/Unix systems.
</com:InfoBox>
@@ -110,15 +110,15 @@ It is possible to have multiple <tt>TContentPlaceHolder</tt>'s in a master templ
</com:InfoBox>
<p>
-Besides <tt>&lt;com:TContent&gt;</tt>, we also see another new tag <tt>&lt;%@ %&gt;</tt> in the above, which is called <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates1#tct">template control tag</a>. It contains name-value pairs which are used to initialize the corresponding properties for the template owner, namely, the <tt>Contact</tt> page.
+Besides <tt>&lt;com:TContent&gt;</tt>, we also see another new tag <tt>&lt;%@ %&gt;</tt> in the above, which is called <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Configurations.Templates1#tct">template control tag</a>. It contains name-value pairs which are used to initialize the corresponding properties for the template owner, namely, the <tt>Contact</tt> page.
</p>
<p>
-By setting <tt>MasterClass</tt> property as <tt>Application.layouts.MainLayout</tt>, we instruct the <tt>Contact</tt> page to use <tt>MainLayout</tt> as its master. Here, we are using the <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Components">namespace format</a> to refer to the <tt>MainLayout</tt> class.
+By setting <tt>MasterClass</tt> property as <tt>Application.layouts.MainLayout</tt>, we instruct the <tt>Contact</tt> page to use <tt>MainLayout</tt> as its master. Here, we are using the <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Fundamentals.Components">namespace format</a> to refer to the <tt>MainLayout</tt> class.
</p>
<com:InfoBox>
-Namespace format is widely used in PRADO programming. It is used together with <a href="http://www.pradosoft.com/demos/quickstart/index.php?page=Fundamentals.Components">path aliases</a>. PRADO defines two path aliases: <tt>System</tt> refers to the <tt>framework</tt> directory of the PRADO installation, and <tt>Application</tt> refers to the <tt>protected</tt> directory. The namespace <tt>Application.layouts.MainLayout</tt> can thus be translated as <tt>protected/layouts/MainLayout</tt> which is exactly the file name (without the extension <tt>.php</tt>) for the <tt>MainLayout</tt> class.
+Namespace format is widely used in PRADO programming. It is used together with <a href="http://www.pradoframework.net/site/demos/quickstart/index.php?page=Fundamentals.Components">path aliases</a>. PRADO defines two path aliases: <tt>System</tt> refers to the <tt>framework</tt> directory of the PRADO installation, and <tt>Application</tt> refers to the <tt>protected</tt> directory. The namespace <tt>Application.layouts.MainLayout</tt> can thus be translated as <tt>protected/layouts/MainLayout</tt> which is exactly the file name (without the extension <tt>.php</tt>) for the <tt>MainLayout</tt> class.
</com:InfoBox>
@@ -151,7 +151,7 @@ In the above, we specify <tt>MasterClass</tt> in the <tt>onPreInit()</tt> method
</p>
<p>
-We can also specify master in <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.AppConfig">application configuration</a> or <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.PageConfig">page configuration</a>. The following shows the updated application configuration for our blog system:
+We can also specify master in <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Configurations.AppConfig">application configuration</a> or <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Configurations.PageConfig">page configuration</a>. The following shows the updated application configuration for our blog system:
</p>
<com:TTextHighlighter CssClass="source" Language="xml">
diff --git a/demos/blog-tutorial/protected/pages/Day1/fr/CreateContact.page b/demos/blog-tutorial/protected/pages/Day1/fr/CreateContact.page
deleted file mode 100755
index 0105f656..00000000
--- a/demos/blog-tutorial/protected/pages/Day1/fr/CreateContact.page
+++ /dev/null
@@ -1,202 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Création de la page Contact</h1>
-
-<p>
-Nous avons créé une page par défaut <tt>Home.page</tt> en utilisant les <a href="http://www.pradosoft.com/demos/quickstart/?page=GettingStarted.CommandLine">outils en ligne de commande de PRADO</a>. Cette page est relativement statique parce qu'elle ne contient que du contenu HTML. Dans cette session, nous allons créer une page dynamique dénommée <tt>Contact</tt>.
-</p>
-
-<p>
-Le but de cette page est de collecter les retours d'informations des utilisateurs Web concernant notre outil de blog. Pour atteindre ce but, nous envisageons d'utiliser un formulaire qui sera à remplir. Dans ce formulaire, nous demanderons le nom de l'utilisateur, son adresse email et son commentaire. Après que le formulaire ai été rempli et envoyé, un email avec le commentaire sera envoyé à l'administrateur.
-</p>
-
-<p>
-Pour créer la page <tt>Contact</tt>, nous avons besoin de 2 fichiers dans le dossier <tt>pages</tt> : le fichier de gabarit <tt>Contact.page</tt> et le fichier de classe PHP <tt>Contact.PHP</tt>.
-</p>
-
-<img src="<%~ directories2.gif %>" class="output" />
-
-<com:InfoBox>
-Une <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Pages">page</a> doit avoir un fichier de <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates1">gabarit</a> (extension <tt>.page</tt>) ou un fichier de classe PHP, ou les deux :
-</p>
-
-<ul>
-<li>Une page avec seulement un gabarit est généralement une page statique, comme la page d'accueil que nous avons déjà créée ;</li>
-<li>Une page avec seulement un fichier de classe PHP produit le code HTML directement à partir de l'exécution du script.
-<li>Une page avec un gabarit et un fichier de classe PHP combine les avantages des deux : un gabarit pour facilement organiser la présentation de la page et un fichier de classe PHP pour produire le contenu dynamique.</li>
-</ul>
-</com:InfoBox>
-
-
-<h2>Création de la page gabarit</h2>
-
-<p>
-Nous allons premièrement créer le fichier gabarit de la page <tt>Contact</tt>.
-</p>
-
-<p>
-Nous utilisons un fichier gabarit pour organiser la présentation de notre formulaire. Dans notre gabarit, nous utilisons des <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.TextBox">champs de saisie</a> pour collecter le nom de l'utilisateur, son email et son commentaire. D'autre part, nous utilisons des <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.Validation">validateurs</a> pour nous assurer que l'utilisateur a bien fourni les éléments avant d'envoyer le formulaire. Le contenu complet du gabarit est le suivant,
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-<html>
-<head><title>Mon Blog - Contact</title></head>
-<body>
-<h1>Contact</h1>
-<p>Veuillez remplir le formulaire suivant pour me laisser vos impressions au sujet de mon blog. Merci !</p>
-
-&lt;com:TForm>
-
-<span>Votre nom:</span>
-&lt;com:TRequiredFieldValidator ControlToValidate="Name"
- ErrorMessage="Veuillez indiquer votre nom."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Name" />
-
-<br/>
-<span>Votre email:</span>
-&lt;com:TRequiredFieldValidator ControlToValidate="Email"
- ErrorMessage="Veuillez indiquer votre email."
- Display="Dynamic" />
-&lt;com:TEmailAddressValidator ControlToValidate="Email"
- ErrorMessage="Vous avez saisi un email invalide."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Email" />
-
-<br/>
-<span>Commentaires:</span>
-&lt;com:TRequiredFieldValidator ControlToValidate="Feedback"
- ErrorMessage="Veuillez saisir un commentaire."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Feedback"
- TextMode="MultiLine"
- Rows="10"
- Columns="40" />
-
-<br/>
-&lt;com:TButton Text="Envoyer" OnClick="submitButtonClicked" />
-
-&lt;/com:TForm>
-
-</body>
-</html>
-</com:TTextHighlighter>
-
-<p>
-Comme vous pouvez le voir, un fichier gabarit ressemble énormément à un fichier HTML classique. La principale différence concerne le fichier gabarit qui contient quelques balises <tt>&lt;com:&gt;</tt>. Chaque balise <tt>&lt;com:&gt;</tt> fait référence à un <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Controls">contrôle</a> dont les propriétés sont initialisées grâce aux paires nom-valeur de la balise. Par exemple, la balise <tt>&lt;com:TButton&gt;</tt> fait référence au contrôle <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.Button">TButton</a> qui affiche un bouton permettant à l'utilisateur de soumettre le formulaire. Pour une syntaxe complète, veuillez vous référer au <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates1">Tutoriel de démarrage rapide</a>.
-
-<com:InfoBox>
-PRADO fournit un contrôle pour chaque type de balise HTML. Par exemple, <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.TextBox">TTextBox</a> affiche un champ de saisie, <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.List">TDropDownList</a> affiche une liste déroulante. Chaque contrôle est un composant auquel on peut accéder par code et dont les propriétés sont modifiables.
-</com:InfoBox>
-
-
-<p>
-Avant le contrôle <tt>TTextBox</tt>, le gabarit utilise aussi plusieurs validateurs qui permettent de s'assurer que les données saisies sont bien conformes à notre attente. Par exemple, pour nous assurer que l'adresse email est valide, nous utilisons les deux validateurs suivants,
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-<span>Your Email:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="Email"
- ErrorMessage="Veuillez indiquer votre email."
- Display="Dynamic" />
-&lt;com:TEmailAddressValidator
- ControlToValidate="Email"
- ErrorMessage="Vous avez saisi un email invalide."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Email" />
-<br/>
-</com:TTextHighlighter>
-
-<p>
-Ci-dessous, un résumé des contrôles utilisés dans le gabarit :
-</p>
-
-<ul>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TForm">TForm</a> affiche un formulaire HTML. Chaque contrôle de saisie doit être au sein d'un TForm. Et le plus important, au plus un <tt>TForm</tt> peut apparaitre dans une page.</li>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TTextBox">TTextBox</a> affiche un champ de saisie utilisateur.</li>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TRequiredFieldValidator">TRequiredFieldValidator</a> s'assure que le contrôle de saisie associé n'est pas vide quand le formulaire est envoyé.</li>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TEmailAddressValidator">TEmailAddressValidator</a> s'assure que le champ de saisie contient une adresse email <i>valide</i> quand le formulaire est envoyé.</li>
-</ul>
-
-<com:TipBox>
-Ecrire des gabarits seulement avec un éditeur de texte peut être pénible et pas vraiment intuitif pour les designers. Pour faciliter ceci, PRADO inclus dans cette version, une extension pour Dreamweaver qui permet la complétion automatique des balises PRADO (ceci inclut le nom des balises, le nom des propriétés, le nom des évènements, etc.).
-</com:TipBox>
-
-<h2>Création du fichier de classe PHP</h2>
-
-<p>
-Nous allons maintenant créer le fichier de classe PHP <tt>Contact.PHP</tt>. Ce fichier est nécessaire parce que nous devons agir après la soumission du formulaire.
-</p>
-
-<p>
-Notez les lignes dans le fichier gabarit. Elles indiquent que lorsque l'utilisateur soumet le formulaire, la méthode <tt>submitButtonClicked()</tt> doit être appelé. Ici, <tt>OnClick</tt> est le nom de l'évènement et la méthode correspondante doit être défini dans le fichier de classe PHP.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
- &lt;com:TButton Text="Submit" OnClick="submitButtonClicked" />
-</com:TTextHighlighter>
-
-<p>
-Nous écrirons donc le fichier de classe suivant :
-</p>
-
-<com:TTextHighlighter CssClass="source">
-<?PHP
-class Contact extends TPage
-{
- /**
- * Gestionnaire d'évènement pour OnClick (bouton submit).
- * @param TButton le bouton qui a générer l'évènement
- * @param TEventParameter les paramètres de l'évènement (null dans ce cas)
- */
- public function submitButtonClicked($sender, $param)
- {
- if ($this->IsValid) // vérifie que les validations sont Ok
- {
- // récupère le nom de l'utilisateur, son email et son commentaire
- $name = $this->Name->Text;
- $email = $this->Email->Text;
- $feedback = $this->Feedback->Text;
-
- // envoie un email à l'administrateur avec les informations
- $this->mailFeedback($name, $email, $feedback);
- }
- }
-
- protected function mailFeedback($name, $email, $feedback)
- {
- // implémentation de l'envoi de l'email
- }
-}
-</com:TTextHighlighter>
-
-<p>
-Le code précédent est largement explicite. En fait, nous avons juste montré le principe d'un gestionnaire d'évènement. Dans le gestionnaire d'évènement <tt>submitButtonClicked()</tt>, nous récupérons les éléments saisies par l'utilisateur. Par exemple, <tt>$this->Name->Text</tt> retourne la valeur de la propriété <tt>Text</tt> du contrôle <tt>Name</tt> qui est un contrôle permettant la saisie du nom de l'utilisateur.
-</p>
-
-<com:InfoBox>
-Le nom de la classe héritant de TPage doit être le même que le nom du fichier. C'est aussi une nécessité pour écrire n'importe quelle classe de composant PRADO.
-</com:InfoBox>
-
-<h2>Test</h2>
-
-<p>
-Notre nouvelle page <tt>Contact</tt> peut être testée en naviguant à l'URL <tt>http://hostname/blog/index.PHP?page=Contact</tt>. Si vous cliquez sur le bouton "envoyer" sans avoir saisi de données, vous verrez apparaitre des messages d'erreurs à côté des champs de saisie. Si vous entrez toutes les informations nécessaires, la méthode <tt>mailFeedback()</tt> sera appelée.
-</p>
-
-<img src="<%~ output.gif %>" class="output" />
-
-<p>
-Une amélioration possible à notre page serait d'afficher un message de confirmation après que l'utilisateur ai envoyé le formulaire. Il serait aussi envisageable de rediriger le navigateur vers une adresse différente si toutes les informations ont été saisies correctement. Nous laisserons aux lecteurs la mise en place de ces fonctionnalités.
-</p>
-
-<com:InfoBox>
-Chaque validateur représente une règle de validation. Un champ de saisie unique peut être associé à un ou plusieurs validateurs. Les validateurs effectuent les vérifications aussi bien du côté client que du côté serveur. Côté client (navigateur), les validations sont effectuées grâce à du javascript, côté serveur, elles sont effectuées en PHP. Les validations côté client peuvent être désactivées tandis que celles côté serveur ne peuvent l'être. Ceci permet de s'assurer que les règles de validation sont toujours appliquées.
-</com:InfoBox>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day1/fr/Setup.page b/demos/blog-tutorial/protected/pages/Day1/fr/Setup.page
deleted file mode 100755
index 0be1c1f0..00000000
--- a/demos/blog-tutorial/protected/pages/Day1/fr/Setup.page
+++ /dev/null
@@ -1,160 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Installation</h1>
-
-<p>
-Nous commencerons par la mise en place de la structure des dossiers et fichiers requis par la plupart des applications développées avec PRADO. Nous allons utiliser <a href="http://www.pradosoft.com/demos/quickstart/?page=GettingStarted.CommandLine">les outils en ligne de commande</a> pour atteindre ce but.
-</p>
-
-<p>Nous partons du principe que le nom du dossier qui contiendra l'application est <tt>blog</tt> et que l'URL qui permet d'accéder à ce dossier est : <tt>http://hostname/blog/</tt> (remplacer <tt>hostname</tt> par le nom de votre serveur).
-</p>
-
-<p>A l'intérieur du dossier blog, nous utilisons <a href="http://www.pradosoft.com/demos/quickstart/?page=GettingStarted.CommandLine">les outils en ligne de commande</a> avec comme commande (remplacer <tt>path/to</tt> par le chemin d'installation du framework PRADO):
-</p>
-<com:TTextHighlighter CssClass="source cli">
-php path/to/prado-cli.php -c .
-</com:TTextHighlighter>
-
-<p>
-L'utilisation de cette commande permet de créer la structure de dossier et fichiers suivante:
-</p>
-
-<img src="<%~ directories.gif %>" class="output" />
-
-<p>
-Nous avons dorénavant, un squellette d'application PRADO accessible par l'URL <tt>http://hostname/blog/index.php</tt> et qui affiche une page contenant le message "Welcome to PRADO".
-</p>
-
-<p>
-Il est de notre intérêt d'en apprendre plus à propos des dossiers et fichiers que nous venons de créer.
-</p>
-
-<h2>Les fichiers initiaux</h2>
-
-<h3>Le script principal de l'application</h3>
-
-<p>
-Toutes les applications PRADO ont un point d'entrée, habituellement nommé <tt>index.php</tt>. Dans la plupart des cas, c'est le seul script qui est directement accessible par les utilisateurs. Cela réduit les risques que les utilisateurs puissent lancer des scripts serveur auquels ils ne devraient pas avoir accès.
-</p>
-
-<p>
-Le but principal de ce script est d'initialiser l'environnement PRADO et de gérer toutes les requêtes utilisateurs. Ce script contient habituellement les commandes PHP suivantes,
-</p>
-
-<com:TTextHighlighter CssClass="source">
-<?php
-// include prado.php which contains basic PRADO classes
-require_once('path/to/prado.php');
-// create a PRADO application instance
-$application = new TApplication;
-// run the application and handle user requests
-$application->run();
-</com:TTextHighlighter>
-
-<com:InfoBox>
-Le nom du script ne doit pas être obligatoirement <tt>index.php</tt>. Il peut porter n'importe quel nom à partir du moment ou le serveur peut l'interpréter comme étant un script PHP5. Par exemple, sur certains hébergements mutualisés, le script devra porter le nom <tt>index.php5</tt>, ce qui permettra au serveur Web de le traiter correctement.
-</com:InfoBox>
-
-<h3>Le fichier de configuration de l'application</h3>
-<p>
-Le fichier optionnel XML <tt>application.xml</tt> contient la <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.AppConfig">configuration de l'application</a>. Son but principal est de permettre de configurer l'application qui sera créée par le script principal. Par exemple, nous pouvons activer le système de <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.Logging">log</a> pour notre application par le biais du fichier de configuration.
-</p>
-
-<p>
-Le fichier <tt>application.xml</tt> est pour le moment presque vide. De ce fait, nous pouvons le supprimer parce que l'application n'utilise pour le moment que des fonctionnalités de base. Au fur et à mesure que nous avancerons, nous ferons référence régulièrement au fichier <tt>application.xml</tt> et vous expliquerons comment configurer l'application.
-</p>
-
-
-<h3>La page d'accueil</h3>
-
-<p>
-La page d'accueil <tt>Home.page</tt> (aussi dénommée page par défaut) est la seule <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Pages">page</a> créée par les outils en ligne de commande de PRADO. C'est le contenu de ce fichier qui est affiché quand l'utilisateur navigue à l'adresse <tt>http://hostname/blog/index.php</tt>.
-</p>
-
-<p>
-Le contenu du fichier <tt>Home.page</tt> respecte le <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates1">format de template</a> qui pour la plupart du temps est du code HTML agrémenté de quelques balises spécifiques à PRADO. Par exemple, dans <tt>Home.page</tt> nous voyons du code HTML pur :
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-<html>
-<head>
- <title>Welcome to PRADO</title>
-</head>
-<body>
-<h1>Welcome to PRADO!</h1>
-</body>
-</html>
-</com:TTextHighlighter>
-
-
-<h2>Les dossiers initiaux</h2>
-
-<h3>Le dossier <tt>protected</tt></h3>
-
-<p>
-Le dossier <tt>protected</tt>, aussi connu sous le nom <i>chemin de base de l'application</i>, est le dossier racine qui contient les pages, les gabarits, les fichiers de configuration, les données, etc. Le nom <tt>protected</tt> indique que ce dossier doit être masqué des personnes qui consultent le site, ceci parce que les fichiers dans ce dossier contiennent la plupart du temps des données sensibles.
-</p>
-
-<p>
-Les différents serveurs Web ont différents moyens de "protéger" un dossier. Pour Apache, le moyen le plus simple est de créer dans le dossier un fichier nommé .htaccess avec le contenu <tt>deny from all</tt>.
-</p>
-
-
-<h3>Les dossiers <tt>protected/runtime</tt> et <tt>assets</tt></h3>
-
-<p>
-Les dossiers <tt>protected/runtime</tt> et <tt>assets</tt> sont deux dossiers qui doivent avoir l'autorisation "en écriture" pour le serveur Web. Le dossier <tt>runtime</tt> contient des données sensibles (ie: fichier de configuration déjà analysé) générées à l'exécution de PRADO tandis que le dossier <tt>assets</tt> contient les ressources qui doivent être publiques (ie: les images, les fichiers javascript).
-</p>
-
-<com:InfoBox>
-Il n'y a aucun souci à supprimer les dossiers et les fichiers contenus dans <tt>protected/runtime</tt> et <tt>assets</tt>. Il est recommandé aux développeurs de nettoyer ces dossiers lors d'une mise à jour de PRADO.
-</com:InfoBox>
-
-
-<h3>Le dossier <tt>pages</tt></h3>
-
-<p>
-The <tt>pages</tt> directory is the <i>root page directory</i> holding all <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Pages">pages</a> in a PRADO application. It bears an analogy to the <tt>htdocs</tt> directory for the Apache httpd Web server.
-</p>
-
-<p>
-Nous avons déjà vu comment accéder la page d'accueil. Pour accéder à n'importe quelle page situé dans le dossier <tt>pages</tt>, il faut utiliser l'URL suivante <tt>http://hostname/blog/index.php?page=chemin.vers.NomdelaPage</tt>. En fonction de cette URL, PRADO recherche une page dénommée <tt>NomdelaPage</tt> dans le dossier <tt>pages/chemin/vers</tt>. L'URL que nous avons utilisée précédemment pour accéder à la page d'accueil correspond à <tt>http://hostname/blog/index.php?page=Home</tt>.
-
-
-<h2>Personnalisation</h2>
-
-<p>
-Il est tout à fait possible de personnaliser le nom et l'emplacement des fichiers et dossiers décrit précédemment.
-</p>
-
-<p>
-Par exemple, pour améliorer la sécurité, certains pourraient désirer déplacer la totalité du dossier <tt>protected</tt> à un emplacement inaccessible par le Web. Pour faire cela, utilisez la commande PHP suivante pour initialiser l'instance de l'application PRADO dans le script principal :
-</p>
-
-<com:TTextHighlighter CssClass="source">
-$application = new TApplication( 'path/to/protected' );
-</com:TTextHighlighter>
-
-<p>
-Pour changer l'emplacement du dossier racine des pages et le nom de la page d'accueil, il est possible de modifier le fichier de configuration <tt>application.xml</tt> de cette manière :
-</p>
-
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<?xml version="1.0" encoding="utf-8"?>
-<application id="blog" mode="Debug">
- <services>
- <service id="page"
- class="TPageService"
- BasePath="path.to.pages"
- DefaultPage="NewHome"
- />
- </services>
-</application>
-</com:TTextHighlighter>
-
-<p>
-En avançant dans l'apprentissage de PRADO, vous verrez que PRADO est très souple et qu'il est possible de personnaliser la plupart des comportements de base. Nous décrirons d'autres techniques au fur et à mesure de ce tutoriel.
-</p>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day1/fr/ShareLayout.page b/demos/blog-tutorial/protected/pages/Day1/fr/ShareLayout.page
deleted file mode 100755
index 539b8376..00000000
--- a/demos/blog-tutorial/protected/pages/Day1/fr/ShareLayout.page
+++ /dev/null
@@ -1,180 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Partager les modèles de gabarit</h1>
-
-<p>
-Dans cette section, nous allons utiliser la fonctionnalité <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.MasterContent">gabarit principal/contenu</a> de PRADO pour partager une mise en page commune sur tout notre site. Les mises en page communes font référence aux parties qui sont identiques ou presque pour un ensemble de pages. Par exemple, dans notre outil de blog, toutes les pages partagent le même entête, pied de page et la même barre latérale contenant les liens. La solution la plus radicale est de répéter sur chaque page les parties communes. Par contre, cette approche est une source d'erreurs et difficile à maintenir. La fonctionnalité <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.MasterContent">gabarit principal/contenu</a> nous permets de traiter les parties communes comme un contrôle qui centralise la logique applicative et la présentation de chaque page.
-</p>
-
-<com:InfoBox>
-Il est aussi possible de partager les parties communes grâce à <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates1">l'inclusion de gabarits</a>, un peu comme l'inclusion de fichier php. L'inconvénient de l'inclusion de gabarits est que l'on ne peut pas partager la logique applicative.
-</com:InfoBox>
-
-
-<h2>Création du gabarit principal</h2>
-
-<p>
-Nous allons maintenant créer le gabarit principal <tt>MainLayout</tt> qui représente les parties communes partagées par toutes nos pages. Le contrôle <tt>MainLayout</tt> est un contrôle de gabarit qui hérite de <tt>TTemplateControl</tt>. Il a besoin d'un fichier de gabarit <tt>MainLayout.tpl</tt> et d'un fichier de classe <tt>MainLayout.php</tt> situés dans le même dossier. Pour faciliter la maintenance, nous allons créer le nouveau dossier <tt>protected/layouts</tt> pour les accueillir.
-</p>
-
-<img src="<%~ directories3.gif %>" class="output" />
-
-<p>
-Pour le moment, <tt>MainLayout</tt> contient seulement un entête simple et un pied de page, comme décrit ci-après. Plus tard, nous ajouterons une barre latérale. Les lecteurs sont encouragés à ajouter des fonctionnalités.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-<html>
-&lt;com:THead />
-<body>
-&lt;com:TForm>
-<div id="page">
-
-<div id="header">
-<h1>Mon blog PRADO</h1>
-</div>
-
-<div id="main">
-&lt;com:TContentPlaceHolder ID="Main" />
-</div>
-
-<div id="footer">
-&lt;%= PRADO::poweredByPrado() %>
-</div>
-
-</div>
-&lt;/com:TForm>
-</body>
-</html>
-</com:TTextHighlighter>
-
-<p>
-Ci-dessus, le contenu du fichier de gabarit <tt>MainLayout.tpl</tt>. Trois nouvelles balises sont utilisées.
-</p>
-
-<ul>
-<li><tt>&lt;com:TContentPlaceHolder&gt;</tt> represente un contrôle <a href="http://www.pradosoft.com/docs/classdoc/TContentPlaceHolder">TContentPlaceHolder</a>. Il définit l'emplacement dans le gabarit où le contenu sera inséré. Dans notre cas, le contenu proviendra des pages qui utiliseront notre gabarit principal.</li>
-<li><tt>&lt;com:THead&gt;</tt> représente un contrôle <a href="http://www.pradosoft.com/docs/classdoc/THead">THead</a> qui correspond à la balise &lt;head&gt; d'un document HTML. Ceci permet à PRADO de manipuler la balise &lt;head&gt; comme un composant (ie: définir le titre de la page, ajouter des feuilles de styles CSS.)</li>
-<li><tt>&lt;%= %&gt;</tt> est une <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates2#et">balise de configuration</a>. Elle affiche le résultat de l'évaluation de l'expression à l'endroit où elle se situe.</li>
-</ul>
-
-
-<p>
-Le fichier de classe <tt>MainLayout.php</tt> est très simple :
-</p>
-
-<com:TTextHighlighter CssClass="source">
-<?php
-class MainLayout extends TTemplateControl
-{
-}
-</com:TTextHighlighter>
-
-<com:InfoBox>
-L'extension des fichiers de gabarit est <tt>.page</tt>, tandis que pour les gabarits autres que les pages c'est <tt>.tpl</tt>. Ceci permet de différencier les pages des autres contrôles. Les deux utilisent la même <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates1">syntaxe de gabarit</a>. Pour les pages, le fichier de classe est optionnel (par défaut hérite de <tt>TPage</tt>), tandis que pour les contrôles, les fichiers de classes sont obligatoires. Comme pour Java, le nom de la classe doit être le même que le nom du fichier de classe. Faites attention à la casse sur les systèmes Linux/Unix.
-</com:InfoBox>
-
-<h2>Utilisation du gabarit principal</h2>
-<p>
-Pour utiliser notre gabarit principal nouvellement créé, nous allons modifier nos fichiers <tt>Home.page</tt> et <tt>Contact.page</tt>. En particulier, nous devons supprimer les entêtes et pied de page parce que le gabarit principal a la responsabilité de les afficher ; par ailleurs, nous devons indiquer aux deux pages que leur gabarit principal est <tt>MainLayout</tt>.
-</p>
-
-<p>
-Ci-dessous, le contenu de <tt>Contact.page</tt> après les modifications :
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;%@ MasterClass="Application.layouts.MainLayout" Title="Mon blog - Contact" %>
-
-&lt;com:TContent ID="Main">
-
-<h1>Contact</h1>
-<p>Veuillez remplir le formulaire suivant pour me laisser vos impressions au sujet de mon blog. Merci !</p>
-
-...champs de saisie et validateurs pour le nom d'utilisateur...
-
-...champs de saisie et validateurs pour l'email...
-
-...champs de saisie et validateurs pour le commentaire...
-
-&lt;com:TButton Text="Envoyer" OnClick="submitButtonClicked" />
-
-&lt;/com:TContent>
-</com:TTextHighlighter>
-
-<p>
-Le contenu entre les balises <tt>&lt;com:TContent&gt;</tt> sera inséré dans l'emplacement réservé par <tt>&lt;com:TContentPlaceHolder&gt;</tt> dans le gabarit principal.
-</p>
-
-<com:InfoBox>
-Il est possible d'avoir plusieurs <tt>TContentPlaceHolder</tt> dans un gabarit principal et plusieurs <tt>TContent</tt> dans un fichier de contenu. Ils sont associés par leurs propriétés <tt>ID</tt>. Il est aussi possible de définir un contenu comme étant le gabarit principal d'un autre contenu, ceci en plaçant une balise <tt>TContentPlaceHolder</tt> à l'endroit désiré. Ceci est appelé <i>gabarits principaux imbriqués</i>
-</com:InfoBox>
-
-<p>
-A côté de la balise <tt>&lt;com:TContent&gt;</tt>, nous avons vu une nouvelle balise <tt>&lt;%@ %&gt;</tt>, qui est dénommé une <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates1#tct">balise de contrôle de gabarit</a>. Elle contient des paires nom-valeur utilisées pour initialiser les propriétés correspondantes du propriétaire de gabarit, dans notre cas, la page <tt>Contact</tt>.
-</p>
-
-<p>
-En définissant la propriété <tt>MasterClass</tt> comme étant de type <tt>Application.layouts.MainLayout</tt>, nous avons indiqué à la page <tt>Contact</tt> d'utiliser <tt>MainLayout</tt> comme gabarit principal. Ici, nous avons utilisé un <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Components">espace de noms</a> pour nous référer à la classe <tt>MainLayout</tt>.
-</p>
-
-<com:InfoBox>
-Les espaces de noms sont largement utilisés en programmation PRADO. Ils sont utilisés conjointement avec les <a href="http://www.pradosoft.com/demos/quickstart/index.php?page=Fundamentals.Components">alias de chemins</a>. PRADO définit deux alias de chemins: <tt>System</tt> fait référence au dossier <tt>framework</tt> de l'installation PRADO, et <tt>Application</tt> fait référence au dossier <tt>protected</tt>.
-L'espace de noms <tt>Application.layouts.MainLayout</tt> peut ainsi être traduit par <tt>protected/layouts/MainLayout</tt> ce qui est précisément le nom du fichier (sans l'extension <tt>.php</tt>) de la classe <tt>MainLayout</tt>.
-</com:InfoBox>
-
-
-<h2>Autres possibilités pour spécifier le gabarit principal</h2>
-
-<p>
-Il y a plusieurs alternatives pour spécifier le gabarit principal.
-</p>
-
-<p>
-Vous pouvez définir le gabarit principal comme ci-dessous pour pouvoir en changer dynamiquement.
-</p>
-
-<com:TTextHighlighter CssClass="source">
-<?php
-class Contact extends TPage
-{
- public function onPreInit($param)
- {
- parent::onPreInit($param);
- $this->MasterClass='Path.To.NewLayout';
- }
-
- // ...
-}
-</com:TTextHighlighter>
-
-<p>
-Ci-dessus, nous indiquons d'utiliser le gabarit principal <tt>MasterClass</tt> dans la méthode <tt>onPreInit()</tt> qui est héritée de <tt>TPage</tt>. Cette méthode est appelé par PRADO juste après que l'instance de la page soit créée. Nous pouvons ainsi déclarer au moment où la page est requise quel gabarit principal utiliser. Par exemple, quand la page est requise par un utilisateur enregistré, nous pouvons utiliser le gabarit A, et le gabarit B si l'utilisateur qui demande la page est un invité.
-</p>
-
-<p>
-Nous pouvons aussi spécifier quel gabarit principal utiliser dans le fichier de <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.AppConfig">configuration de l'application</a> ou encore dans le fichier de <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.PageConfig">configuration de la page</a>. Ci-dessous, le fichier de configuration de l'application modifié pour notre blog.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<?xml version="1.0" encoding="utf-8"?>
-<application id="blog" mode="Debug">
- <!-- configuration for available services -->
- <services>
- <service id="page" class="TPageService" DefaultPage="Home">
- <!-- initial properties set for all pages -->
- <pages MasterClass="Application.layouts.MainLayout" />
- </service>
- </services>
-</application>
-</com:TTextHighlighter>
-
-<p>
-En faisant cela, nous évitons de définir le gabarit principal dans chaque page. Si nous décidons d'utiliser un autre gabarit principal, il nous suffit de changer le fichier de configuration de l'application. Pour cette raison, dans notre blog, nous utiliserons cette approche.
-</p>
-
-<com:InfoBox>
-Il y a un ordre qui permet de savoir quel fichier gabarit principal utiliser s'il est spécifié à plusieurs endroits. En particulier <tt>onPreInit()</tt> est prioritaire au fichier de configuration de la page qui est lui même prioritaire au fichier de configuration de l'application. Ainsi, si vous spécifiez <tt>MainLayout</tt> dans le fichier de configuration de l'application/page et que vous spécifiez <tt>SpecialLayout</tt> dans <tt>Contact.page</tt>, ce sera le dernier qui sera pris en compte.
-</com:InfoBox>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day1/fr/directories.gif b/demos/blog-tutorial/protected/pages/Day1/fr/directories.gif
deleted file mode 100755
index 884e15bc..00000000
--- a/demos/blog-tutorial/protected/pages/Day1/fr/directories.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day1/fr/directories2.gif b/demos/blog-tutorial/protected/pages/Day1/fr/directories2.gif
deleted file mode 100755
index edf264d0..00000000
--- a/demos/blog-tutorial/protected/pages/Day1/fr/directories2.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day1/fr/directories3.gif b/demos/blog-tutorial/protected/pages/Day1/fr/directories3.gif
deleted file mode 100755
index 3451935f..00000000
--- a/demos/blog-tutorial/protected/pages/Day1/fr/directories3.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day1/fr/output.gif b/demos/blog-tutorial/protected/pages/Day1/fr/output.gif
deleted file mode 100755
index 9ad2bfb8..00000000
--- a/demos/blog-tutorial/protected/pages/Day1/fr/output.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day1/id/CreateContact.page b/demos/blog-tutorial/protected/pages/Day1/id/CreateContact.page
deleted file mode 100755
index caee30d0..00000000
--- a/demos/blog-tutorial/protected/pages/Day1/id/CreateContact.page
+++ /dev/null
@@ -1,203 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Membuat Halaman Kontak</h1>
-
-<p>
-Kita telah membuat halaman standar <tt>Home.page</tt> menggunakan <a href="http://www.pradosoft.com/demos/quickstart/?page=GettingStarted.CommandLine">piranti baris perintah PRADO</a>. Halaman relatif statis karena ia tidak berisi konten dinamis. Dalam bagian ini, kita akan membuat halaman interaktif bernama <tt>Contact</tt>.
-</p>
-
-<p>
-Kegunaan dari halaman <tt>Contact</tt> adalah untuk mengumpulkan umpan balik dari para pengguna sistem blog kita. Untuk melaksanakan tujuan ini, kita merencanakan untuk menyajikan para pengguna dengan sebuah formulir umpan balik yang harus diisi. Dalam formulir ini, kita akan mengharuskan para pengguna untuk menyediakan namanya, alamat email, dan konten umpan balik. Setelah formulir diisi dan dikirimkan, email yang berisi umpan balik akan dikirimkan ke administrator situs.
-</p>
-
-<p>
-Untuk membuat halaman <tt>Contact</tt>, kita memerluka dua file di bawah direktori <tt>pages</tt>: file template halaman <tt>Contact.page</tt> dan file kelas halaman <tt>Contact.php</tt>.
-</p>
-
-<img src="<%~ directories2.gif %>" class="output" />
-
-<com:InfoBox>
-<a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Pages">Halaman</a> harus berupa file <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates1">template</a> (berekstensi <tt>.page</tt>) atau file kelas, atau keduanya:
-</p>
-
-<ul>
-<li>Hanya template-halaman yang biasanya berupa sebuah halaman sengan konten statis, seperti homepage yang sudah kita buat;</li>
-<li>Hanya file kelas halaman yang menghasilkan konten murni berdasarkan eksekusi metode kelas;</li>
-<li>Sebuah halaman dengan template dan kelasnya mengkombinasikan keunggulan keduanya: ia menggunakan template untuk memudahkan mengatur tata letak halaman dan menggunakan kelas untuk menyertakan logika yang menghasilkan konten dinamis.</li>
-</ul>
-</com:InfoBox>
-
-
-<h2>Membuat Template Halaman</h2>
-
-<p>
-Pertama kita membuat file template untuk halaman <tt>Contact</tt>.
-</p>
-
-<p>
-Kita menggunakan template untuk menghatur tata letak penyajian terhadap formulir umpan balik. Dalam template, kita menggunakan <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.TextBox">kotak teks</a> untuk mengumpulkan nama pengguna, email dan umpan balik. Dan kita menggunakan <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.Validation">validator</a> guna memastikan bahwa pengguna menyediakan semua informasi ini sebelum mengirimkan formulir umpan balik. Seluruh template adalah sebagai berikut,
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-<html>
-<head><title>My Blog - Contact</title></head>
-<body>
-<h1>Contact</h1>
-<p>Please fill out the following form to let me know your feedback on my blog. Thanks!</p>
-
-&lt;com:TForm>
-
-<span>Your Name:</span>
-&lt;com:TRequiredFieldValidator ControlToValidate="Name"
- ErrorMessage="Please provide your name."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Name" />
-
-<br/>
-<span>Your Email:</span>
-&lt;com:TRequiredFieldValidator ControlToValidate="Email"
- ErrorMessage="Please provide your email address."
- Display="Dynamic" />
-&lt;com:TEmailAddressValidator ControlToValidate="Email"
- ErrorMessage="You entered an invalid email address."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Email" />
-
-<br/>
-<span>Feedback:</span>
-&lt;com:TRequiredFieldValidator ControlToValidate="Feedback"
- ErrorMessage="Please provide your feedback."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Feedback"
- TextMode="MultiLine"
- Rows="10"
- Columns="40" />
-
-<br/>
-&lt;com:TButton Text="Submit" OnClick="submitButtonClicked" />
-
-&lt;/com:TForm>
-
-</body>
-</html>
-</com:TTextHighlighter>
-
-<p>
-Seperti kita lihat bahwa template terlihat sangat mirip dengan halaman HTML normal. Perbedaan utamanya adalah bahwa template berisi beberapa tag <tt>&lt;com:&gt;</tt>. Setap tag <tt>&lt;com:&gt;</tt> merujuk ke sebuah <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Controls">kontrol</a> yang propertinya diinisialisasi dengan pasangan nama-nilai dalam tag. Sebagai contoh, <tt>&lt;com:TButton&gt;</tt> merujuk ke kontrol <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.Button">TButton</a> guna menampilkan sebuah tombol di mana pengguna dapat di klik pengguna untuk mengirimkan formulir umpan balik. Untuk sintaks lengkap template, silahkan rujuk <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates1">Tutorial Cepat</a>.
-</p>
-
-<com:InfoBox>
-PRADO menyediakan kontrol untuk setiap tipe input HTML. Sebagai contoh, <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.TextBox">TTextBox</a> menampilkan field input teks, <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.List">TDropDownList</a> menampilkan kotak kombo. Setiap kontrol adalah sebuah komponen yang dapat diakses dalam kode sebagai obyek dengan properti yang bisa dikonfigurasi.
-</com:InfoBox>
-
-<p>
-Selain kontrol <tt>TTextBox</tt>, template juga menggunakan banyak kontrol validator yang memastikan input pengguna memuaskan aturan validasi spesifik. Sebagai contoh, untuk memastikan alamat email sah yang dilengkapi, kita menggunakan dua validator untuk memvalidasi kotak teks "email", seperti ditampilkan dalam kode berikut:
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-<span>Your Email:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="Email"
- ErrorMessage="Please provide your email address."
- Display="Dynamic" />
-&lt;com:TEmailAddressValidator
- ControlToValidate="Email"
- ErrorMessage="You entered an invalid email address."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Email" />
-<br/>
-</com:TTextHighlighter>
-
-<p>
-Di bawah ini kita meringkas kontrol yang dipakai dalam template halaman:
-</p>
-
-<ul>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TForm">TForm</a> menampilkan sebuah formulir HTML. Setiap kontrol input harus dikurung di dalamnya. Dan yang terpenting, paling banyak satu <tt>TForm</tt> boleh muncul dalam sebuah halaman.</li>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TTextBox">TTextBox</a> menampilkan kotak teks untuk mengumpulkan input teks pengguna.</li>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TRequiredFieldValidator">TRequiredFieldValidator</a> memastikan bahwa kotak teks terkait tidak kosong saat umpan balik dikirimkan.</li>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TEmailAddressValidator">TEmailAddressValidator</a> memastikan bahwa kotak teks berisi alamat email yang <i>benar</i> saat umpan balik dikirimkan.</li>
-</ul>
-
-<com:TipBox>
-Menulis template dengan editor teks biasa dapat membosankan dan tidak intuitif untuk para desainer. Untuk memudahkan situasi ini, PRADO telah menyertakan dalam rilis ekstensi Adobe Dreamweaver yang mendukung pelengkapan-otomatis tag PRADO (misalnya menyertakan nama kontrol, nama properti, nama event, dll) dalam Dreamweaver.
-</com:TipBox>
-
-
-<h2>Membuat Kelas Halaman</h2>
-
-<p>
-Sekarang kita membuat kelas halaman <tt>Contact.php</tt>. Alasan kita membutuhkan kelas halaman adalah karena kita perlu merespon umpan balik yang dikirimkan oleh pengguna.
-
-<p>
-Perhatikan dalam template kita mempunyai baris berikut. Template secara esensi menyatakan bahwa saat pengguna mengklik tombol, ia harus memanggil metode <tt>submitButtonClicked()</tt>. Di sini <tt>OnClick</tt> adalah nama dari event yang diklik pengguna, dan metode harus didefinisikan dalam kelas halaman.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
- &lt;com:TButton Text="Submit" OnClick="submitButtonClicked" />
-</com:TTextHighlighter>
-
-<p>
-Selanjutnya kita menuliskan kelas halaman seperti berikut:
-</p>
-
-<com:TTextHighlighter CssClass="source">
-<?php
-class Contact extends TPage
-{
- /**
- * Pengendali event untuk event OnClick pada tombol submit.
- * @param TButton tombol yang memicu event
- * @param TEventParameter parameter event (null di sini)
- */
- public function submitButtonClicked($sender, $param)
- {
- if ($this->IsValid) // memeriksa apakan validasi input berhasil
- {
- // mendapatkan nama pengguna, email, umpan balik dari kotak teks
- $name = $this->Name->Text;
- $email = $this->Email->Text;
- $feedback = $this->Feedback->Text;
-
- // mengirimkan email ke administrator dengan informasi di atas
- $this->mailFeedback($name, $email, $feedback);
- }
- }
-
- protected function mailFeedback($name, $email, $feedback)
- {
- // implementasi pengiriman email umpan balik
- }
-}
-</com:TTextHighlighter>
-
-<p>
-Kode di atas sebagian besar cukup jelas. Kenyataannya, kami hanya menampilkan skema pemrograman pengendalian-event. Dalam pengendali event <tt>submitButtonClicked()</tt>, kita mengambil input pengguna. Sebagai contoh, <tt>$this->Name->Text</tt> mengembalikan nilai properti <tt>Text</tt> dari kontrol <tt>Name</tt> yang merupakan kotak teks yang mengumpulkan informasi nama pengguna.
-</p>
-
-<com:InfoBox>
-Nama kelas halaman harus sama seperti nama file. Ini juga persyaratan untuk penulisan komponen kelas PRADO.
-</com:InfoBox>
-
-
-<h2>Pengujian</h2>
-
-<p>
-<tt>Contact</tt> yang baru saja kita buat dapat kita uji dengan URL <tt>http://hostname/blog/index.php?page=Contact</tt>. Jika kita mengklik pada tombol submit tanpa memasukan informasi apapun, kita akan melihat pesan kesalahan muncil di sebelah kotak teks terkait. Jika kita memasukan semua informasi yang diperlukan, metode <tt>mailFeedback()</tt> akan dipanggil.
-</p>
-
-<img src="<%~ output.gif %>" class="output" />
-
-<p>
-Peningkatan berikutnya terhadap halaman ini adalah untuk menampilkan beberapa pesan konfirmasi pada halaman setelah pengguna mengirimkan umpan balik. Dan kemungkinan, browser akan dialihkan ke halaman lain jika pengiriman berhasil. Kita akan membiarkan tugas ini bagi para pembaca kita.
-</p>
-
-<com:InfoBox>
-Setiap validator mewakili aturan validasi. Satu kontrol input dapat dikaitkan dengan satu atau multipel validator. Validator melakukan validasi pada sisi klien dan sisi server. Pada sisi klien, yaitu browser, validasi dikerjakan dmenggunakan javascript; pada sisi server, validasi dikerjakan dengan menggunakan kode PHP. Validasi sisi-klien dapat dimatikan, sementara validasi sisi-server tidak bisa. Ini memastikan input pengguna selalu diperiksa oleh aturan validasi yang dietapkan.
-</com:InfoBox>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day1/id/Setup.page b/demos/blog-tutorial/protected/pages/Day1/id/Setup.page
deleted file mode 100755
index 45ae8cf5..00000000
--- a/demos/blog-tutorial/protected/pages/Day1/id/Setup.page
+++ /dev/null
@@ -1,163 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Persiapan Awal</h1>
-
-<p>
-Kita mulai dengan menyiapkan direktori dan file yang diperlukan oleh kebanyakan aplikasi PRADO. Kita menggunakan <a href="http://www.pradosoft.com/demos/quickstart/?page=GettingStarted.CommandLine">piranti baris perintah PRADO</a> untuk melaksanakan tujuan ini.
-</p>
-
-<p>
-Anggap <tt>blog</tt> adalah nama direktori untuk menampung seluruh sistem blog, dan URL untuk mengakses folder ini adalah <tt>http://hostname/blog/</tt> (ganti <tt>hostname</tt> dengan nama host sebenarnya).
-</p>
-
-<p>
-Di bawah direktori <tt>blog</tt>, kita menjalankan <a href="http://www.pradosoft.com/demos/quickstart/?page=GettingStarted.CommandLine">piranti baris perintah PRADO</a> dengan perintah berikut (ganti <tt>path/ke</tt> dengan path sebenarnya ke instalasi kerangka kerja PRADO):
-</p>
-<com:TTextHighlighter CssClass="source cli">
-php path/ke/prado-cli.php -c .
-</com:TTextHighlighter>
-
-<p>
-Menjalankan perintah di atas akan membuat direktori dan file berikut:
-</p>
-
-<img src="<%~ directories.gif %>" class="output" />
-
-<p>
-Sekarang kita mempunyai kerangka aplikasi PRADO yang dapat diakses melalui URL <tt>http://hostname/blog/index.php</tt> yang menampilkan halaman Web dengan tulisan "Welcome to PRADO".
-</p>
-
-<p>
-Sangat bermanfaat mempelajari lebih rinci mengenai direktori dan file yang baru saja kita buat.
-</p>
-
-
-<h2>File Awal</h2>
-
-<h3>Naskah Entri</h3>
-
-<p>
-Setiap aplikasi PRADO mempunyai naskah entri, sering dinamakan sebagai <tt>index.php</tt>. Dalam kebanyakan kasus, ia hanya naskah PHP yang secara langsung dapat diakses oleh pengguna Web. Ini mengurangi resiko terhadap ijin para pengguna Web untuk menjalankan naskah yang tidak diinginkan pada server.
-</p>
-
-<p>
-Kegunaan utama dari naskah entri adalah untuk mengawali aplikasi PRADO dan membiarkan ia menangani permintaan pengguna. Naskah entri biasanya berisi pernyataan PHP berikut,
-</p>
-
-<com:TTextHighlighter CssClass="source">
-<?php
-// sertakan prado.php yang berisi kelas PRADO dasar
-require_once('path/to/prado.php');
-// buat turunan aplikasi PRADO
-$application = new TApplication;
-// jalankan aplikasi dan tangani permintaan pengguna
-$application->run();
-</com:TTextHighlighter>
-
-<com:InfoBox>
-Nama naskah entri tidak harus <tt>index.php</tt>. Ia dapat berupa nama apa saja selama server Web dapat mengatakan bahwa naskah adalah naskah PHP 5. Sebagai contoh, pada beberapa lingkungan hosting berbagi, seseorang mungkin perlu untuk menamai naskah sebagai <tt>index.php5</tt> agar ia bisa ditangani dengan benar oleh server the Web.
-</com:InfoBox>
-
-<h3>Konfigurasi Aplikasi</h3>
-<p>
-File XML <i>opsional</i> <tt>application.xml</tt> berisi <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.AppConfig">konfigurasi aplikasi</a>. Kegunaan utamanya adalah untuk mengkustomisasi dalam cara yang bisa mengkonfigurasi turunan aplikasi yang dibuat dalam naskah entri. Sevagai contoh, kita dapat menghidupkan fitur <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.Logging">pencatatan</a> untuk sistem blog kita dengan bantuan konfigurasi aplikasi.
-</p>
-
-<p>
-File <tt>application.xml</tt> yang sekarang kita miliki hampir kosong. Sebenarnya kita dapat menghapusnya dengan aman karena aplikasi pada saat ini hanya menggunakan seting standar PRADO. Seiring kita ke depan, kita akan merujuk kembali secara kontan dan menampilkan bagaimana untuk mengkonfigurasi aplikasi kita dalam <tt>application.xml</tt>.
-</p>
-
-
-<h3>Homepage</h3>
-
-<p>
-Homepage (juga disebut halaman standar) <tt>Home.page</tt> adalah satu-satunya <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Pages">halaman</a> yang dibuat oleh piranti baris perintah PRADO. Berisi konten dalam file ini yang muncul dalam browser saat mengunjungi URL <tt>http://hostname/blog/index.php</tt>.
-</p>
-
-<p>
-Konen dalam file <tt>Home.page</tt> menggunakan <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates1">format template PRADO</a>, yang kebanyakan mirip HTML dengan beberapa tag spesifik-PRADO. Sebagai contoh, dalam <tt>Home.page</tt> kita melihat konten murni HTML berikut:
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-<html>
-<head>
- <title>Welcome to PRADO</title>
-</head>
-<body>
-<h1>Welcome to PRADO!</h1>
-</body>
-</html>
-</com:TTextHighlighter>
-
-
-<h2>Direktori Awal</h2>
-
-<h3>Direktori <tt>protected</tt></h3>
-
-<p>
-Direktori <tt>protected</tt>, juga dikenal sebagai <i>path basis aplikasi</i>, adalah direktori akar yang menampung halaman, template, konfigurasi, data, dll. Nama <tt>protected</tt> menunjukan bahwa direktori ini harus disembunyikan dari para pengguna Web, karena file di bawah direktori ini berisi data sensitif.
-</p>
-
-<p>
-Server Web berbeda mempunyai berbeda terhadap "melindungi" direktori. Untuk sever httpd Apache, cara termudah adalah untuk menempatkan file bernama <tt>.htaccess</tt> di bawah direktori dengan isi <tt>deny from all</tt>.
-</p>
-
-
-<h3>Direktori <tt>protected/runtime</tt> dan <tt>assets</tt></h3>
-
-<p>
-Direktori <tt>protected/runtime</tt> dan <tt>assets</tt> adalah dua direktori yang harus disetel bisa ditulisi oleh proses server Web. Direktori <tt>runtime</tt> menyimpan data sensitif (misalnya konfigurasi aplikasi yang diuraikan) yang dibuat saat menjalankan aplikasi PRADO, karena direktori <tt>assets</tt> menyimpan sumber daya yang dipublikasikan (misalnya file gambar, file javascript).
-</p>
-
-<com:InfoBox>
-Aman untuk menghapus file dan direktori di bawah <tt>protected/runtime</tt> dan <tt>assets</tt>. Sebenarnya para pengembang direkomendasikan untuk melakukan pekerjaan pembersihan ini ketika mereka memutakhirkan instalasi PRADO.
-</com:InfoBox>
-
-
-<h3>Direktori <tt>pages</tt></h3>
-
-<p>
-Direktori <tt>pages</tt> adalah <i>akar direktori halaman</i> yang menampung seluruh <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Pages">halaman</a> dalam sebuah aplikasi PRADO. Ini mirip analogi terhadap direktori <tt>htdocs</tt> pada server Web httpd Apache.
-</p>
-
-<p>
-Kita sudah melihat bagaimana cara mengakses homepage. Untuk mengakses halaman yang ditempatkan di bawah <tt>pages</tt>, menggunakan URL <tt>http://hostname/blog/index.php?page=path.ke.NamaHalaman</tt>. Berdasarkan URL ini, PRADO akan melihar halaman bernama <tt>NamaHalaman</tt> di bawah direktori <tt>pages/path/ke</tt>. URL yang kita pakai untuk mengakses homepage sebelumnya sama dengan <tt>http://hostname/blog/index.php?page=Home</tt>.
-</p>
-
-
-<h2>Kustomisasi</h2>
-
-<p>
-Dimungkinkan untuk mengkustomisasi nama dan lokasi terhadap file dan direktori yang dijelaskan di atas.
-</p>
-
-<p>
-Sebagai contoh, untuk meningkatkan keamanan, seseorang mungkin ingin memindahkan seluruh direktori <tt>protected</tt> ke tempat lain yang bukan folder Web. Untuk melakukannya, gunakan pernyataan PHP berikut untuk membuat turunan aplikasi dalam naskah entri:
-</p>
-
-<com:TTextHighlighter CssClass="source">
-$application = new TApplication( 'path/ke/protected' );
-</com:TTextHighlighter>
-
-<p>
-Untuk membuat lokasi akar direktori halaman dan mengubah nama homepage, seseorang dapat menetapkannya dalam konfigurasi aplikasi <tt>application.xml</tt> sebagai berikut:
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<?xml version="1.0" encoding="utf-8"?>
-<application id="blog" mode="Debug">
- <services>
- <service id="page"
- class="TPageService"
- BasePath="path.to.pages"
- DefaultPage="NewHome"
- />
- </services>
-</application>
-</com:TTextHighlighter>
-
-<p>
-Setelah Anda mempelajari lebih jauh mengenai PRADO, Anda akan melihat bahwa PRADO adalah kerangka kerja fleksibel yang membolehkan Anda untuk mengkustomisasi hampir setiap aspeknya. Kami akan menjelaskan lebih lanjut teknik kustomisasi setelah kita melanjutkan tutorial kita.
-</p>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day1/id/ShareLayout.page b/demos/blog-tutorial/protected/pages/Day1/id/ShareLayout.page
deleted file mode 100755
index 0c40181b..00000000
--- a/demos/blog-tutorial/protected/pages/Day1/id/ShareLayout.page
+++ /dev/null
@@ -1,178 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Berbagi Tata Letak Umum</h1>
-
-<p>
-Dalam bagian ini, kita akan menggunakan fitur <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.MasterContent">master/content</a> PRADO untuk membagi tata letak umum diantara halaman. Tata letak merujuk ke area yang sama atay sebagian besar sama untuk setelan halaman. Sebagai contoh, dalam sistem blog kita, semua halaman akan berbagi header yang sama, footer dan bar-samping yang berisi link jalan pintas. Implementasi langsung adalah untuk mengulang tata letak umum dalam setiap halaman. Akan tetapi, pendekatan ini adalah cenderung salah dan sulit untuk dipelihara. Fitur <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.MasterContent">master/content</a> membolehkan kita untuk menggunakan tata letak umum sebagai sebuah kontrol yang memusatkan logika dan penyajian tata letak umum untuk setiap halaman.
-</p>
-
-<com:InfoBox>
-Ini juga memungkinkan untuk membagi tata letak umum melalui <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates1">penyertaan template</a>, yang mirip inklusi file PHP. Akibat dari penyertaan inklusi template ini adalah bahwa ia tidak berdiri sendiri dan tidak membawa kelas untuk mengisi logika untuk tata letak umum.
-</com:InfoBox>
-
-
-<h2>Membuat Kontrol Master</h2>
-
-<p>
-Sekarang kita membuat kontrol master <tt>MainLayout</tt> untuk mewakili tata letak umum berbagi dengan halaman blog kita. Kontrol <tt>MainLayout</tt> adalah kontrol template yang diperluas dari <tt>TTemplateControl</tt>. Ini mememerlukan file template <tt>MainLayout.tpl</tt> dan sebuah file kelas <tt>MainLayout.php</tt> yang ditempatkan di bawah direktori yang sama. Guna menjembatani pemeliharaan, kita membuat direktori baru <tt>protected/layouts</tt> untuk menampungnya.
-</p>
-
-<img src="<%~ directories3.gif %>" class="output" />
-
-<p>
-Untuk saat ini, <tt>MainLayout</tt> hanya berisi header dan footer sederhana, seperti ditampilkan berikut ini. Kedepan, kita akan menambahkan bar-samping. Para pembaca juga disarankan untuk meningkatkan tata letak dengan fitur yang lainnya.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-<html>
-&lt;com:THead />
-<body>
-&lt;com:TForm>
-<div id="page">
-
-<div id="header">
-<h1>My PRADO Blog</h1>
-</div>
-
-<div id="main">
-&lt;com:TContentPlaceHolder ID="Main" />
-</div>
-
-<div id="footer">
-&lt;%= PRADO::poweredByPrado() %>
-</div>
-
-</div>
-&lt;/com:TForm>
-</body>
-</html>
-</com:TTextHighlighter>
-
-<p>
-Contoh di atas memperlihatkan konten dalam file template <tt>MainLayout.tpl</tt>. Tiga tag baru ini dipakai:
-</p>
-<ul>
-<li><tt>&lt;com:TContentPlaceHolder&gt;</tt> mewakili kontrol <a href="http://www.pradosoft.com/docs/classdoc/TContentPlaceHolder">TContentPlaceHolder</a>. Ia menyimpan tempat dalam template di mana konten akan ditempatkan. Di sini, konten datang dari halaman yang menggunakan kontrol master ini.</li>
-<li><tt>&lt;com:THead&gt;</tt> mewakili kontrol <a href="http://www.pradosoft.com/docs/classdoc/THead">THead</a> yang menyajikan tag &lt;head&gt; dalam HTML. Ia membolehkan PRADO untuk memanipulasi tag &lt;head&gt; sebagai sebuah komponen (misalnya setelan judul halaman, menambahkan gaya CSS kustom.)</li>
-<li><tt>&lt;%= %&gt;</tt> adalah sebuah <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates2#et">tag ekspresi</a>. Ia menampilkan hasil evaluasi daru ekspresi yang dikurung di tempat di mana ia muncul.</li>
-</ul>
-
-<p>
-File kelas <tt>MainLayout.php</tt> sangat sederhana:
-</p>
-
-<com:TTextHighlighter CssClass="source">
-<?php
-class MainLayout extends TTemplateControl
-{
-}
-</com:TTextHighlighter>
-
-<com:InfoBox>
-Nama ekstensi file untuk template halaman <tt>.page</tt>, sementara untuk template non-halaman yaitu <tt>.tpl</tt>. Ini untuk membedakan halaman dari kontrol lain. Keduanya menggunakan <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates1">sintaks template</a> yang sama. Untuk halaman, file kelasnya adalah opsional (standarnya <tt>TPage</tt>), sementara untuk kontrol non-halaman, file kelasnya adalah mandatori. Mirip dengan Java, nama file kelas harus sama seperti nama kelas. Harap berhati-hati mengenai sensitifitas-huruf pada sistem Linux/Unix.
-</com:InfoBox>
-
-
-<h2>Menggunakan Kontrol Master</h2>
-<p>
-Untuk menggunakan kontrol master yang baru saja dibuat, kita akan memodifikasi <tt>Home.page</tt> dan <tt>Contact.page</tt>. Dalam keadaan tertentu, kita perlu untuk menghapus header dan footer darinya karena kontrol master akan bertanggung jawab untuk menampilkannya; dan kita perlu memberitahu dua halaman di mana mereka harus menggunakan <tt>MainLayout</tt> sebagai masternya.
-</p>
-
-<p>
-Kode berikut memperlihatkan konten dalam <tt>Contact.page</tt> setelah perubahan:
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;%@ MasterClass="Application.layouts.MainLayout" Title="My Blog - Contact" %>
-
-&lt;com:TContent ID="Main">
-
-<h1>Contact</h1>
-<p>Please fill out the following form to let me know your feedback on my blog. Thanks!</p>
-
-...kotak teks dan validator untuk nama pengguna...
-
-...kotak teks dan validator untuk emali pengguna...
-
-...kotak teks dan validator untuk konten umpan balik...
-
-&lt;com:TButton Text="Submit" OnClick="submitButtonClicked" />
-
-&lt;/com:TContent>
-</com:TTextHighlighter>
-
-<p>
-Konten yang dikurung di dalam tag <tt>&lt;com:TContent&gt;</tt> tag akan disisipkan ke dalam tempat yang disiapkan oleh <tt>&lt;com:TContentPlaceHolder&gt;</tt> pada template master.
-</p>
-
-<com:InfoBox>
-Dimungkinkan untuk memiliki multipel <tt>TContentPlaceHolder</tt> dalam sebuah template master dan multipel <tt>TContent</tt> dakan tenokate konten. Mereka saling dipasangkan dengan nilai <tt>ID</tt>-nya. Juga dimungkinkan untuk membuat template konten menjadi master template konten lainnya dengan menempatkan <tt>TContentPlaceHolder</tt> di pembentuk. Ini disebut <i>master berulang</i>.
-</com:InfoBox>
-
-<p>
-Selain <tt>&lt;com:TContent&gt;</tt>, kita juga melihat tag baru lain <tt>&lt;%@ %&gt;</tt> di atas, yang disebut <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.Templates1#tct">tag kontrol template</a>. Ia berisi pasangan nama-nilai yang dipakai untuk menginisialisasi properti terkait bagi pemilik template, yaitu, halaman <tt>Contact</tt>.
-</p>
-
-<p>
-Dengan menyetel properti <tt>MasterClass</tt> sebagai <tt>Application.layouts.MainLayout</tt>, kita menginstruksikan halaman <tt>Contact</tt> untuk menggunakan <tt>MainLayout</tt> sebagai masternya. Di sini, kita sedang menggunakan <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Components">format namespace</a> untuk merujuk ke kelas <tt>MainLayout</tt>.
-</p>
-
-<com:InfoBox>
-Format namespace sebagian besar dipakai dalam pemrograman PRADO. Dipakai bersama dengan <a href="http://www.pradosoft.com/demos/quickstart/index.php?page=Fundamentals.Components">alias path</a>. PRADO mendefinisikan dua alias path: <tt>System</tt> merujuk ke direktori <tt>framework</tt> pada instalasi PRADO, dan <tt>Application</tt> merujuk ke direktori <tt>protected</tt>. Namespace <tt>Application.layouts.MainLayout</tt> selanjutnya bisa diterjemahkan sebagai <tt>protected/layouts/MainLayout</tt> yang tepatnya adalah nama file (tanpa ekstensi <tt>.php</tt>) untuk kelas <tt>MainLayout</tt>.
-</com:InfoBox>
-
-
-<h2>Cara Alternatif Menetapkan Master</h2>
-
-<p>
-Ada beberapa cara tambahan untuk menetapkan kelas master untuk sebuah halaman.
-</p>
-
-<p>
-Kita dapat menetapkan master dalam kode seperti berikut untuk menghidupkan perubahan dinamis terhadap tata letak:
-</p>
-
-<com:TTextHighlighter CssClass="source">
-<?php
-class Contact extends TPage
-{
- public function onPreInit($param)
- {
- parent::onPreInit($param);
- $this->MasterClass='Path.To.NewLayout';
- }
-
- // ...
-}
-</com:TTextHighlighter>
-
-<p>
-Dalam contoh di atas, kita menetapkan <tt>MasterClass</tt> dalam metode <tt>onPreInit()</tt> yang diturunkan dari <tt>TPage</tt>. Metode dipanggil oleh PRADO langsung setelah turunan halaman dibuat. Selanjutnya kita dapat menentukan secara dinamis tata letak yang dipakai saat halaman diminta. Sebagai contoh, ketika halaman yang diminta oleh pengguna terdaftar kita memakai tata letak A, dan tata letak B dipakai jika pengguna tamu yang meminta halaman.
-</p>
-
-<p>
-Kita juga dapat menetapkan master dalam <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.AppConfig">konfigurasi aplikasi</a> atau <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.PageConfig">konfigurasi halaman</a>. Kode berikut memperlihatkan konfigurasi aplikasi yang dimutakhirkan untuk sistem blog kita:
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<?xml version="1.0" encoding="utf-8"?>
-<application id="blog" mode="Debug">
- <!-- konfigurasi untuk layanan yang tersedia -->
- <services>
- <service id="page" class="TPageService" DefaultPage="Home">
- <!-- initial properties set for all pages -->
- <pages MasterClass="Application.layouts.MainLayout" />
- </service>
- </services>
-</application>
-</com:TTextHighlighter>
-
-<p>
-Dengan melakukan demikian, kita menghindari kesulitan pada penetapan master dalam setiap template halaman. Jika kita memutuskan untuk menggunakan master yang berbeda untuk halaman, kita hanya perlu mengubah konfigurasi aplikasi. Untuk alasan ini, dalam sistem blog kita, kita akan menggunakan pendekatan untuk menetapkan master.
-</p>
-
-<com:InfoBox>
-Ada urutan yang menentukan master yang mana yang sebenarnya diterapkan ketika ia ditetapkan dalam tempat multipel. Dalam keadaan tertentu, <tt>onPreInit()</tt> diambil lebih dulu di atas template halaman di atas konfigurasi aplikasi/halaman. Oleh karena itu, jika kita menetapkan <tt>MainLayout</tt> dalam konfigurasi aplikasi/halaman dan kita menetapkan <tt>SpecialLayout</tt> dalam <tt>Contact.page</tt>, master yang efektif adalah yang terakhir.
-</com:InfoBox>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day1/id/directories.gif b/demos/blog-tutorial/protected/pages/Day1/id/directories.gif
deleted file mode 100755
index 884e15bc..00000000
--- a/demos/blog-tutorial/protected/pages/Day1/id/directories.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day1/id/directories2.gif b/demos/blog-tutorial/protected/pages/Day1/id/directories2.gif
deleted file mode 100755
index edf264d0..00000000
--- a/demos/blog-tutorial/protected/pages/Day1/id/directories2.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day1/id/directories3.gif b/demos/blog-tutorial/protected/pages/Day1/id/directories3.gif
deleted file mode 100755
index 3451935f..00000000
--- a/demos/blog-tutorial/protected/pages/Day1/id/directories3.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day1/id/output.gif b/demos/blog-tutorial/protected/pages/Day1/id/output.gif
deleted file mode 100755
index 9ad2bfb8..00000000
--- a/demos/blog-tutorial/protected/pages/Day1/id/output.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day2/ConnectDB.page b/demos/blog-tutorial/protected/pages/Day2/ConnectDB.page
index 1d036577..2f1119a4 100755
--- a/demos/blog-tutorial/protected/pages/Day2/ConnectDB.page
+++ b/demos/blog-tutorial/protected/pages/Day2/ConnectDB.page
@@ -7,7 +7,7 @@ To use the database that we just created, we first need to establish a connectio
</p>
<p>
-We are going to use <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.DAO">Data Access Objects (DAO)</a> to abstract our data access mechanisms. If in future we decide to use a different DBMS (e.g. PostgreSQL, Oracle) to store our blog data, we only need to change the database source name (DSN) and we can keep our PHP code intact.
+We are going to use <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Database.DAO">Data Access Objects (DAO)</a> to abstract our data access mechanisms. If in future we decide to use a different DBMS (e.g. PostgreSQL, Oracle) to store our blog data, we only need to change the database source name (DSN) and we can keep our PHP code intact.
</p>
<com:NoteBox>
@@ -19,7 +19,7 @@ extension=php_pdo_sqlite.dll
</com:NoteBox>
<p>
-To further abstract the actual database tables, we will also use the <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Active Record</a> (AR) feature. Each data record will be represented as an Active Record object which is capable of performing query, saving and deletion without writing SQL statements.
+To further abstract the actual database tables, we will also use the <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Database.ActiveRecord">Active Record</a> (AR) feature. Each data record will be represented as an Active Record object which is capable of performing query, saving and deletion without writing SQL statements.
</p>
<p>
@@ -36,11 +36,11 @@ We modify our application configuration file <tt>protected/application.xml</tt>
</com:TTextHighlighter>
<p>
-The configuration above shows that we are adding two <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Modules">modules</a> to our application. The <tt>TDataSourceConfig</tt> module is configured with the connection string <tt>sqlite:protected/data/blog.db</tt> which points to our SQLite database. This connection is used by the <tt>TActiveRecordConfig</tt> module which is required by Active Record.
+The configuration above shows that we are adding two <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Fundamentals.Modules">modules</a> to our application. The <tt>TDataSourceConfig</tt> module is configured with the connection string <tt>sqlite:protected/data/blog.db</tt> which points to our SQLite database. This connection is used by the <tt>TActiveRecordConfig</tt> module which is required by Active Record.
</p>
<com:InfoBox>
-One may set up two or more DB connections in the application configuration. For more details, see the <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Active Record documentation</a>. And of course, one may also explicitly create a DB connection in PHP code using the <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.DAO">TDbConnection</a> component in PDO.
+One may set up two or more DB connections in the application configuration. For more details, see the <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Database.ActiveRecord">Active Record documentation</a>. And of course, one may also explicitly create a DB connection in PHP code using the <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Database.DAO">TDbConnection</a> component in PDO.
</com:InfoBox>
</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day2/CreateAR.page b/demos/blog-tutorial/protected/pages/Day2/CreateAR.page
index 0cf28bdd..26355122 100644
--- a/demos/blog-tutorial/protected/pages/Day2/CreateAR.page
+++ b/demos/blog-tutorial/protected/pages/Day2/CreateAR.page
@@ -3,7 +3,7 @@
<h1>Creating Active Record Classes</h1>
<p>
-We need to create two <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Active Record</a> classes, <tt>UserRecord</tt> and <tt>PostRecord</tt>, to represent data records in the <tt>users</tt> and <tt>posts</tt> tables, respectively. Active Record classes must extend from the base class <tt>ActiveRecord</tt>, and must define property names that matches with the field names of the corresponding table.
+We need to create two <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Database.ActiveRecord">Active Record</a> classes, <tt>UserRecord</tt> and <tt>PostRecord</tt>, to represent data records in the <tt>users</tt> and <tt>posts</tt> tables, respectively. Active Record classes must extend from the base class <tt>ActiveRecord</tt>, and must define property names that matches with the field names of the corresponding table.
</p>
<p>
@@ -47,7 +47,7 @@ So we need to modify again our application configuration in the services section
<img src="<%~blog_wsat_generate_ar.png%>" style="width: 700px;" />
<p>
- In the <tt>Output Folder</tt> field we used the <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Components">namespace format</a> again, the path <tt>Application.database</tt> indicates that we want to put our class's files in the <tt>protected/database/</tt> folder.
+ In the <tt>Output Folder</tt> field we used the <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Fundamentals.Components">namespace format</a> again, the path <tt>Application.database</tt> indicates that we want to put our class's files in the <tt>protected/database/</tt> folder.
The <tt>*</tt> in the <tt>Table Name</tt> field means that we want to generate all AR classes, you can specify a table name instead if you want to generate just a specific AR class.
</p>
@@ -121,7 +121,7 @@ The method <tt>withXXX()</tt> (where XXX is the relationship property name, in t
</com:TipBox>
<p>
-Further detailed documentation can be found in the quickstart <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Active Record</a> docs.
+Further detailed documentation can be found in the quickstart <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Database.ActiveRecord">Active Record</a> docs.
</p>
</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day2/CreateDB.page b/demos/blog-tutorial/protected/pages/Day2/CreateDB.page
index 1f7085d7..c3494091 100755
--- a/demos/blog-tutorial/protected/pages/Day2/CreateDB.page
+++ b/demos/blog-tutorial/protected/pages/Day2/CreateDB.page
@@ -3,7 +3,7 @@
<h1>Creating Database</h1>
<p>
-Most Web applications use database to keep data. Our blog system is not an exception. In this section, we will describe how to write database-driven pages for our blog system. We will use techniques including <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.DAO">database access object (DAO)</a> and <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Active Record</a>.
+Most Web applications use database to keep data. Our blog system is not an exception. In this section, we will describe how to write database-driven pages for our blog system. We will use techniques including <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Database.DAO">database access object (DAO)</a> and <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Database.ActiveRecord">Active Record</a>.
</p>
<p>
diff --git a/demos/blog-tutorial/protected/pages/Day2/fr/ConnectDB.page b/demos/blog-tutorial/protected/pages/Day2/fr/ConnectDB.page
deleted file mode 100755
index bc817c92..00000000
--- a/demos/blog-tutorial/protected/pages/Day2/fr/ConnectDB.page
+++ /dev/null
@@ -1,47 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Connexion à la base</h1>
-
-
-<p>
-Pour pouvoir utiliser la base de données que nous venons de créer, nous devons tout d'abord établir une connexion.
-</p>
-
-<p>
-Nous allons utiliser <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.DAO">Data Access Objects (DAO)</a> pour établir une couche d'abstraction. Si dans le futur nous décidions d'utiliser un autre SGBD (ie: PostgreSQl, Oracle, ...), il nous suffirait de modifier la chaine de connexion (DSN) et nous pourrions conserver notre code PHP intact.
-</p>
-
-<com:NoteBox>
-Pour utiliser DAO, nous devons installer et activer la librairie <a href="http://www.php.net/manual/en/ref.pdo.php">PHP PDO extension</a> <i>ainsi que</i> un driver PDO d'accès aux données (dans notre cas, c'est le driver PDO SQLite). Ceci peut être fait facilement sous Windows en incluant dans le fichier <tt>php.ini</tt> les lignes suivantes:
-<com:TTextHighlighter CssClass="source">
-extension=php_pdo.dll
-extension=php_pdo_sqlite.dll
-</com:TTextHighlighter>
-</com:NoteBox>
-
-<p>
-Pour une meilleure abstraction de notre base de données, nous utilisons aussi la fonctionnalité <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Active Record</a> (AR). Chaque enregistrement est ainsi représenté par un objet qui a la possibilité d'exécuter des requêtes, de mettre à jour les données, de les supprimer et ceci sans écrire la moindre commande SQL.
-</p>
-
-<p>
-Nous modifions notre fichier de configuration de l'application <tt>protected/application.xml</tt> en insérant les lignes suivantes, qui indiquent à <tt>Active Record</tt> comment se connecter à notre base de données.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<modules>
- <module id="db" class="System.Data.TDataSourceConfig">
- <database ConnectionString="sqlite:protected/data/blog.db" />
- </module>
- <module class="System.Data.ActiveRecord.TActiveRecordConfig" ConnectionID="db" />
-</modules>
-</com:TTextHighlighter>
-
-<p>
-Dans la configuration précédente, nous avons ajouté deux <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Modules">modules</a> à notre application. Le module <tt>TDataSourceConfig</tt> est configuré avec la chaine de connexion <tt>sqlite:protected/data/blog.db</tt> qui pointe vers notre base de données. Cette connexion est utilisée par le module <tt>TActiveRecordConfig</tt> qui est requis pour l'utilisation d'Active Record.
-</p>
-
-<com:InfoBox>
-Il est tout à fait possible de définir plusieurs connexion de base de données dans notre fichier de configuration. Pour plus de détails, veuillez vous référer à la <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">documentation Active Record</a>. Il est, de même possible, d'établir une connexion à une base de données en utilisant du code PHP au travers du composant <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.DAO">TDbConnection</a>.
-</com:InfoBox>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day2/fr/CreateAR.page b/demos/blog-tutorial/protected/pages/Day2/fr/CreateAR.page
deleted file mode 100755
index 1c5aae7b..00000000
--- a/demos/blog-tutorial/protected/pages/Day2/fr/CreateAR.page
+++ /dev/null
@@ -1,177 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Création des classes Active Record</h1>
-
-<p>
-Nous avons besoin de définir deux classes <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Active Record</a>, <tt>UserRecord</tt> et <tt>PostRecord</tt>, qui représentent respectivement les tables <tt>users</tt> et <tt>posts</tt>. Les classes Active Record doivent hériter de la classe <tt>ActiveRecord</tt>, et doivent définir les propriétés qui correspondent aux champs de la table correspondante.
-</p>
-
-<p>
-Pour une meilleure organisation de notre arborescence, nous créons un nouveau dossier <tt>protected/database</tt> qui contiendra nos deux classes. Nous modifions notre fichier de configuration de l'application en y insérant les lignes suivantes. Ceci est équivalent à inclure le dossier <tt>protected/database</tt> à notre chemin d'inclusion de PHP (<tt>include_path</tt>). Cela nous permet d'utiliser nos classes sans avoir besoin de les inclure explicitement.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<paths>
- <using namespace="Application.database.*" />
-</paths>
-</com:TTextHighlighter>
-
-<p>
-Au lieu de créer nos classes manuellement, nous allons utiliser les <a href="http://www.pradosoft.com/demos/quickstart/?page=GettingStarted.CommandLine">outils en ligne de commande de PRADO</a> pour qu'il nous génère les classes.
-</p>
-
-<p>
-Dans le dossier <tt>blog</tt>, lancer la commande suivante pour entrer dans le mode interactif de l'outil en ligne de commande:
-</p>
-
-<com:TTextHighlighter CssClass="source cli">
-php path/to/prado-cli.php shell .
-</com:TTextHighlighter>
-
-<p>
-Vous devriez voir
-</p>
-
-<com:TTextHighlighter CssClass="source cli" Language="text">
-Command line tools for Prado 3.1.0.
-** Loaded PRADO appplication in directory "protected".
-PHP-Shell - Version 0.3.1
-(c) 2006, Jan Kneschke <jan@kneschke.de>
-
->> use '?' to open the inline help
-
->>
-</com:TTextHighlighter>
-
-<p>
-A l'invite de commande, entrer les deux commandes suivantes pour créer les classes <tt>UserRecord</tt> et <tt>PostRecord</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source cli" Language="text">
->> generate users Application.database.UserRecord
-
->> generate posts Application.database.PostRecord
-</com:TTextHighlighter>
-
-<p>
-Ici, nous avons utilisés les <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Components">espaces de noms</a> pour indiquer où les classes seront créées. Le chemin <tt>Application.database.UserRecord</tt> indique que nous désirons que la classe soit insérée dans <tt>protected/database/UserRecord.php</tt>.
-</p>
-
-<p>
-Nous devrions voir l'arborescence suivante ainsi que nos deux nouveaux fichiers dans le dossier <tt>protected/database</tt>:
-</p>
-
-<img src="<%~ directories2.gif %>" class="output" />
-
-<p>
-Si vous consultez le fichier <tt>PostRecord</tt>, vous devriez voir le contenu suivant:
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class PostRecord extends TActiveRecord
-{
- const TABLE='posts';
- public $post_id;
- public $author_id;
- public $create_time;
- public $title;
- public $content;
- public $status;
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
-</com:TTextHighlighter>
-
-<p>
-Comme vous pouvez le constater, pour chaque champs de la table <tt>posts</tt>, la classe déclare un membre correspondant. La constante <tt>TABLE</tt> indique le nom de la table que gère la classe <tt>PostRecord</tt>. La méthode statique <tt>finder()</tt> permet d'effectuer des requêtes et de lire les données sous forme d'objets <tt>PostRecord</tt>.
-</p>
-<p>
-Vous pouvez utiliser l'outil en ligne de commande pour tester nos nouvelles classes. En restant dans le mode interactif de l'outil en ligne de commande, vous pouvez saisir les commandes PHP et voir ce qui suit. Vous pouvez tester des commandes telles que <tt>UserRecord::finder()->findAll()</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source cli" Language="text">
->> PostRecord::finder()->findAll()
-array
-(
- [0] => PostRecord#1
- (
- [post_id] => '1'
- [author_id] => 'admin'
- [create_time] => '1175708482'
- [title] => 'first post'
- [content] => 'this is my first post'
- [status] => '0'
- [TActiveRecord:_readOnly] => false
- [TActiveRecord:_connection] => null
- [TComponent:_e] => array()
- )
-)
-</com:TTextHighlighter>
-
-<h1>Relations entre Posts et Users</h1>
-<p>
-Rappellez-vous qu'il y a une relation entre les tables <tt>users</tt> et <tt>posts</tt>. Le diagramme des relations est indiqué ci-après.
-</p>
-
-<img src="<%~ ER.gif %>" class="output" />
-
-<p>
-A partir de ce diagramme, nous voyons que la table <tt>posts</tt> contient un champ <tt>author_id</tt>. Le champ <tt>author_id</tt> est une clé étrangère qui référence la table <tt>users</tt>. En particulier, les valeurs du champ <tt>author_id</tt> doivent apparaitre dans dans le champ <tt>username</tt> de la table <tt>users</tt>. Une des conséquences de cette relation, en réfléchissant orienté objet, est que chaque "post" repose sur un "author" et qu'un "author" peut avoir plusieurs "posts".
-</p>
-
-<p>
-Nous pouvons modéliser les relations entre <tt>posts</tt> and <tt>users</tt> dans nos classes <tt>PostRecord</tt> and <tt>UserRecord</tt> en les modifiant comme ci-dessous :
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class PostRecord extends TActiveRecord
-{
- //... propriétés et méthodes comme précédemment
-
- public $author; //contient un objet UserRecord
-
- public static $RELATIONS=array
- (
- 'author' => array(self::BELONGS_TO, 'UserRecord'),
- );
-}
-</com:TTextHighlighter>
-
-<p>
-La propriété statique <tt>$RELATIONS</tt> de la classe <tt>PostRecord</tt> définit que la propriété <tt>$author</tt> fait référence à un <tt>UserRecord</tt>. Dans le tableau : <tt>array(self::BELONGS_TO, 'UserRecord')</tt>, le premier élément défini le type de relation, dans notre cas, <tt>self::BELONGS_TO</tt>. Le deuxième élément est le nom de l'objet en relation, dans notre cas <tt>UserRecord</tt>. La classe <tt>UserRecord</tt> est définie comme ci-dessous, la différence est que chaque objet <tt>UserRecord</tt> contient plusieurs <tt>PostRecord</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class UserRecord extends TActiveRecord
-{
- //... propriétés et méthodes comme précédemment
-
- public $posts=array(); //contient un tableau de PostRecord
-
- public static $RELATIONS=array
- (
- 'posts' => array(self::HAS_MANY, 'PostRecord'),
- );
-}
-</com:TTextHighlighter>
-
-<p>
-Un tableau de <tt>UserRecord</tt> ainsi que les messages correspondants peuvent être lu de la manière suivante :
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-$users = UserRecord::finder()->withPosts()->findAll();
-</com:TTextHighlighter>
-
-<com:TipBox>
-La méthode <tt>withXXX()</tt> (avec XXX qui est le nom de la propriété de la relation, dans notre cas <tt>Posts</tt>) lit les données correspondantes de <tt>PostRecords</tt> en utilisant une deuxième requête (mais pas en utilisant une jointure). La méthode <tt>withXXX()</tt> accepte les mêmes arguments que les autres méthodes <tt>finder</tt> de l'objet Active record, ie : <tt>withPosts('status = ?', 0)</tt>.
-</com:TipBox>
-
-<p>
-Plus d'informations sont disponibles dans le manuel de démarrage rapide <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Active Record</a>.
-</p>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day2/fr/CreateDB.page b/demos/blog-tutorial/protected/pages/Day2/fr/CreateDB.page
deleted file mode 100755
index d982e388..00000000
--- a/demos/blog-tutorial/protected/pages/Day2/fr/CreateDB.page
+++ /dev/null
@@ -1,70 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Création de la base</h1>
-<
-<p>
-La plupart des applications Web utilisent une base de données pour conserver les informations. Notre blog n'est pas une exception. Dans cette section, nous allons décrire comment écrire une application qui interagit avec une base de données. Nous allons utiliser les deux moyens suivants <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.DAO">database access object (DAO)</a> et <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Active Record</a>.
-</p>
-
-<p>
-Pour ce tutoriel, nous avons simplifié les besoins, nous aurons juste à gérer les utilisateurs et les messages. Nous allons donc créer deux tables <tt>users</tt> et <tt>posts</tt>, comme décrit dans le diagramme ci-après.
-</p>
-
-<img src="<%~ ER.gif %>" class="output" />
-
-<p>
-Nous utilisons une base de données SQLite 3 pour conserver nos données. La première étape est de convertir notre diagramme en commandes SQL et de l'enregistrer dans le fichier <tt>protected/schema.sql</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source">
-/* création de la table utilisateurs */
-CREATE TABLE users (
- username VARCHAR(128) NOT NULL PRIMARY KEY,
- email VARCHAR(128) NOT NULL,
- password VARCHAR(128) NOT NULL, /* mot de passe en clair */
- role INTEGER NOT NULL, /* 0: utilisateur normal, 1: administrateur */
- first_name VARCHAR(128),
- last_name VARCHAR(128)
-);
-
-/* création de la table messages */
-CREATE TABLE posts (
- post_id INTEGER NOT NULL PRIMARY KEY,
- author_id VARCHAR(128) NOT NULL
- CONSTRAINT fk_author REFERENCES users(username),
- create_time INTEGER NOT NULL, /* UNIX timestamp */
- title VARCHAR(256) NOT NULL, /* titre du message */
- content TEXT, /* corps du message */
- status INTEGER NOT NULL /* 0: publié; 1: brouillon; 2: en attente; 2: accès interdit */
-);
-
-/* insertion de quelques données initiales */
-INSERT INTO users VALUES ('admin', 'admin@example.com', 'demo', 1, 'Qiang', 'Xue');
-INSERT INTO users VALUES ('demo', 'demo@example.com', 'demo', 0, 'Wei', 'Zhuo');
-INSERT INTO posts VALUES (NULL, 'admin', 1175708482, 'first post', 'this is my first post', 0);
-</com:TTextHighlighter>
-
-<com:NoteBox>
-La contrainte <tt>fk_author</tt> est ignorée par SQlite vu que SQLite ne supporte pas les <a href="http://www.sqlite.org/omitted.html">clés étrangères</a>.
-Néanmoins, nous gardons cette contrainte dans le but de pouvoir porter notre blog sur d'autres SGBD. Par ailleurs, nous utilisons la capacité <a href="http://www.sqlite.org/autoinc.html">auto incrémenté</a> du champ <tt>posts.post_id</tt> si celui-ci est renseigné à NULL lors de l'insertion.
-</com:NoteBox>
-
-<p>
-Nous utilisons après ceci, les <a href="http://www.sqlite.org/download.html">outils en ligne de commande SQLite</a> pour créer la base de données. Nous avons créé un dossier <tt>protected/data</tt> qui contiendra le fichier de base de données. Nous lançons maintenant la ligne de commande suivante dans le dossier <tt>protected/data</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source cli">
-sqlite3 blog.db < ../schema.sql
-</com:TTextHighlighter>
-
-<p>
-La base de données est ainsi créée dans le fichier <tt>protected/data/blog.db</tt> et nous pouvons maintenant voir la l'arborescence suivante :
-</p>
-
-<img src="<%~ directories.gif %>" class="output" />
-
-<com:NoteBox>
-Il est nécessaire pour SQLite que le dossier <tt>protected/data</tt> et le fichier <tt>protected/data/blog.db</tt> soient accessibles en écriture par le serveur Web.
-</com:NoteBox>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day2/fr/ER.gif b/demos/blog-tutorial/protected/pages/Day2/fr/ER.gif
deleted file mode 100755
index 7a5397b3..00000000
--- a/demos/blog-tutorial/protected/pages/Day2/fr/ER.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day2/fr/ER.vsd b/demos/blog-tutorial/protected/pages/Day2/fr/ER.vsd
deleted file mode 100755
index 474833fd..00000000
--- a/demos/blog-tutorial/protected/pages/Day2/fr/ER.vsd
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day2/fr/directories.gif b/demos/blog-tutorial/protected/pages/Day2/fr/directories.gif
deleted file mode 100755
index 797ef932..00000000
--- a/demos/blog-tutorial/protected/pages/Day2/fr/directories.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day2/fr/directories2.gif b/demos/blog-tutorial/protected/pages/Day2/fr/directories2.gif
deleted file mode 100755
index b053b4c6..00000000
--- a/demos/blog-tutorial/protected/pages/Day2/fr/directories2.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day2/id/ConnectDB.page b/demos/blog-tutorial/protected/pages/Day2/id/ConnectDB.page
deleted file mode 100755
index b9610d21..00000000
--- a/demos/blog-tutorial/protected/pages/Day2/id/ConnectDB.page
+++ /dev/null
@@ -1,46 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Melakukan Koneksi DB</h1>
-
-<p>
-Untuk menggunakan database yang baru saja kita buat, pertama kita perlu melaksanakan koneksinya.
-</p>
-
-<p>
-Kita akan menggunakan <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.DAO">Data Access Objects (DAO)</a> untuk memisahkan mekanisme akses data kita. Jika nanti kita menggunakan DBMS yang berbeda (misalnya PostgreSQL, Oracle) untuk menyimpan data blog, kita hanya perlu mengubah nama sumber database atau data source nama (DSN) dam kita dapat menjaga kode PHP kita tetap utuh.
-</p>
-
-<com:NoteBox>
-Untuk menggunakan DAO, anda harus menginstalasi dan menghidupkan <a href="http://www.php.net/manual/en/ref.pdo.php">ekstensi PDO PHP</a> <i>dan</i> driver PDO spesifik-database (dalam kasus kita, itu adalah driver SQLite PDO). Ini bisa dilakukan secara mudah pada Windows dengan mengubah file <tt>php.ini</tt>, menambahkan baris berikut:
-<com:TTextHighlighter CssClass="source">
-extension=php_pdo.dll
-extension=php_pdo_sqlite.dll
-</com:TTextHighlighter>
-</com:NoteBox>
-
-<p>
-Selanjutnya untuk memisahkan tabel database sebenarnya, kita juga akan menggunakan fitur <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Rekaman Aktif</a> (AR). Setiap rekaman data akan disajikan sebagai obyek Rekaman Aktif yang mampu melakukan query, menyimpan dan menghapus tanpa menulis pernyataan SQL.
-</p>
-
-<p>
-Kita memodifikasi file konfigurasi aplikasi kita <tt>protected/application.xml</tt> dengan menyisipkan baris berikut, yang memberitahu Rekaman Aktif bagaimana untuk menghubungkan ke database yang baru saja kita buat:
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<modules>
- <module id="db" class="System.Data.TDataSourceConfig">
- <database ConnectionString="sqlite:protected/data/blog.db" />
- </module>
- <module class="System.Data.ActiveRecord.TActiveRecordConfig" ConnectionID="db" />
-</modules>
-</com:TTextHighlighter>
-
-<p>
-Konfigurasi di atas memperlihatkan bahwa kita menambahkan dua <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Modules">modul</a> pada aplikasi kita. Modul <tt>TDataSourceConfig</tt> dikonfigurasi dengan string koneksi <tt>sqlite:protected/data/blog.db</tt> yang mengarah ke SQLite database kita. Koneksi ini dipakai oleh modul <tt>TActiveRecordConfig</tt> yang dibutuhkan leh Rekaman Aktif.
-</p>
-
-<com:InfoBox>
-Seseorang dapat menyiapkan dua atau lebih koneksi DB dalam konfigurasi aplikasi. Untuk lebih jelasnya, lihat <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Dokumentasi Rekaman Aktif</a>. Dan tentunya, seseorang juga bisa secara eksplisit membuat koneksi DB dalam kode PHP menggunakan komponen <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.DAO">TDbConnection</a> dalam PDO.
-</com:InfoBox>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day2/id/CreateAR.page b/demos/blog-tutorial/protected/pages/Day2/id/CreateAR.page
deleted file mode 100755
index 5a211905..00000000
--- a/demos/blog-tutorial/protected/pages/Day2/id/CreateAR.page
+++ /dev/null
@@ -1,178 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Membuat Kelas Rekaman Aktif</h1>
-
-<p>
-Kita perlu membuat dua kelas <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Rekaman Aktif</a>, <tt>UserRecord</tt> dan <tt>PostRecord</tt>, masing-masing untuk mewakili rekaman data dalam tabel <tt>users</tt> dan <tt>posts</tt>. Kelas Rekaman Aktif harus diperluas dari kelas basis <tt>ActiveRecord</tt>, dan harus mendefinisikan nama properti yang sama dengan nama field dari tabel terkait.
-</p>
-
-<p>
-Untuk mengatur lebih baik direktori, kita membuat direktori baru <tt>protected/database</tt> guna menampung file kelas. Kita juga memodifikasi konfigurasi aplikasi kita dengan menyisipkan baris berikut. Ini sama dengan menambahkan direktori <tt>protected/database</tt> ke PHP include_path, yang membolehkan kita untuk menggunakan kelas tanpa secara eksplisit menyertakannya.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<paths>
- <using namespace="Application.database.*" />
-</paths>
-</com:TTextHighlighter>
-
-<p>
-Daripada menulis kelas secara manual, kita akan menggunakan <a href="http://www.pradosoft.com/demos/quickstart/?page=GettingStarted.CommandLine">piranti baris perintah PRADO</a> lagi untuk membuat kelas bagi kita.
-</p>
-
-<p>
-Di bawah direktori <tt>blog</tt>, jalankan perintah berikut untuk masuk ke dalam mode interaktif pada piranti baris perintah:
-</p>
-
-<com:TTextHighlighter CssClass="source cli" Language="text">
-php path/ke/prado-cli.php shell .
-</com:TTextHighlighter>
-
-<p>
-Kita akan melihat
-</p>
-
-<com:TTextHighlighter CssClass="source cli" Language="text">
-Command line tools for Prado 3.1.0.
-** Loaded PRADO appplication in directory "protected".
-PHP-Shell - Version 0.3.1
-(c) 2006, Jan Kneschke <jan@kneschke.de>
-
->> use '?' to open the inline help
-
->>
-</com:TTextHighlighter>
-
-<p>
-Pada prompt, masukkan dua perintah berikut untuk membuat kelas <tt>UserRecord</tt> dan <tt>PostRecord</tt>:
-</p>
-
-<com:TTextHighlighter CssClass="source cli">
->> generate users Application.database.UserRecord
-
->> generate posts Application.database.PostRecord
-</com:TTextHighlighter>
-
-<p>
-Di sini kita menggunakan <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Components">format namespace</a> lagi untuk menetapkan kelas yang dibuat. Path <tt>Application.database.UserRecord</tt> menunjukan bahwa kita ingin file kelas <tt>UserRecord</tt> menjadi <tt>protected/database/UserRecord.php</tt>.
-</p>
-
-<p>
-Kita akan melihat struktur direktori berikut dengan dua file baru di bawah <tt>protected/database</tt>:
-</p>
-
-<img src="<%~ directories2.gif %>" class="output" />
-
-<p>
-Jika kita memeriksa file kelas <tt>PostRecord</tt>, kita akan melihat konten berikut.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class PostRecord extends TActiveRecord
-{
- const TABLE='posts';
- public $post_id;
- public $author_id;
- public $create_time;
- public $title;
- public $content;
- public $status;
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
-</com:TTextHighlighter>
-
-<p>
-Seperti kita lihat, untuk setiap field dalam tabel <tt>posts</tt>, kelas mempunyai anggota data terkait. Konstan <tt>TABLE</tt> menetapkan nama tabel untuk <tt>PostRecord</tt>. Metode statis <tt>finder()</tt> membolehkan kita melakukan query dan mengambil data tulisan dalam batasan obyek <tt>PostRecord</tt>.
-</p>
-
-<p>
-Kita dapat menggunakan piranti baris perintah untuk melakukan beberapa pengujian dengan kelas Rekaman Aktif yang baru saja kita buat. Masih dalam mode interaktif pada piranti baris perintah, kita memasukan pernyataan PHP dan seharusnya melihat kode berikut. Para pembaca yang tertarik dapat mencoba pernyataan PHP laninnya, seperti misalnya <tt>UserRecord::finder()->findAll()</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
->> PostRecord::finder()->findAll()
-array
-(
- [0] => PostRecord#1
- (
- [post_id] => '1'
- [author_id] => 'admin'
- [create_time] => '1175708482'
- [title] => 'first post'
- [content] => 'this is my first post'
- [status] => '0'
- [TActiveRecord:_readOnly] => false
- [TActiveRecord:_connection] => null
- [TComponent:_e] => array()
- )
-)
-</com:TTextHighlighter>
-
-<h1>Hubungan Antara Tulisan dan Pengguna</h1>
-<p>
-Mengingat bahwa ada hubungan kunci asing antara tabel <tt>users</tt> dan <tt>posts</tt>. Diagram hubungan-entitas ditampilkan di bawah ini demi kenyamanan.
-</p>
-
-<img src="<%~ ER.gif %>" class="output" />
-
-<p>
-Dari diagram hubungan-entitas di atas, kita merlihat bahwa tabel <tt>posts</tt> berisi field bernama <tt>author_id</tt>. Field <tt>author_id</tt> ini adalah kunci asing yang mereferensi tabel <tt>users</tt>. Dalam keadaan tertentu, nilai dalam field <tt>author_id</tt> seharusnya dari tabel <tt>users</tt> field <tt>username</tt>. Salah satu konsekuensi dari hubungan ini, dalam pola pikir obyek, adalah bahwa setiap "tulisan" milik "author" dan satu "author" dapat memiliki banyak "tulisan".
-</p>
-
-<p>
-Kita dapat membuat model hubungan antara tabel <tt>posts</tt> dan <tt>users</tt> dalam Rekaman Aktif dengan memodifikasi kelas <tt>PostRecord</tt> dan <tt>UserRecord</tt> seperti berikut.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class PostRecord extends TActiveRecord
-{
- //... properti dan metode seperti sebelumnya
-
- public $author; //menampung array UserRecord
-
- public static $RELATIONS=array
- (
- 'author' => array(self::BELONGS_TO, 'UserRecord'),
- );
-}
-</com:TTextHighlighter>
-
-<p>
-Properti statis <tt>$RELATIONS</tt> pada <tt>PostRecord</tt> mendefinisikan bahwa properti <tt>$author</tt> dimiliki <tt>UserRecord</tt>. Dalam <tt>array(self::BELONGS_TO, 'UserRecord')</tt>, elemen pertama mendefinisikan tipe hubungan, dalam hal ini <tt>self::BELONGS_TO</tt>. Elemen kedua adalah nama pada rekaman terkait, dalam hal ini <tt>UserRecord</tt>. <tt>UserRecord</tt> didefinisikan sama di bawah ini, perbedaannya yaitu rekaman pengguna mempunyai banyak <tt>PostRecord</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class UserRecord extends TActiveRecord
-{
- //... properti dan metode seperti seblumnya
-
- public $posts=array(); //menampung array PostRecord
-
- public static $RELATIONS=array
- (
- 'posts' => array(self::HAS_MANY, 'PostRecord'),
- );
-}
-</com:TTextHighlighter>
-
-<p>
-Sebuah array <tt>UserRecord</tt> dengan dan tulisan terkaitnya dapat diambil seperti berikut.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-$users = UserRecord::finder()->withPosts()->findAll();
-</com:TTextHighlighter>
-
-<com:TipBox>
-Metode <tt>withXXX()</tt> (di mana XXX adalah nama properti hubungan, dalam hal ini, <tt>Posts</tt>) mengambil <tt>PostRecords</tt> terkait menggunakan query kedua (tidak dengan menggunakan join). Metode <tt>withXXX()</tt> menerima argumen yang sama sebagai finder lain dari TActiveRecord, misalhnya <tt>withPosts('status = ?', 0)</tt>.
-</com:TipBox>
-
-<p>
-Dokumentasi lengkap selanjutnya dapat ditemukan dalam dokumen quickstart <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Rekaman Aktif</a>.
-</p>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day2/id/CreateDB.page b/demos/blog-tutorial/protected/pages/Day2/id/CreateDB.page
deleted file mode 100755
index 30868268..00000000
--- a/demos/blog-tutorial/protected/pages/Day2/id/CreateDB.page
+++ /dev/null
@@ -1,69 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Membuat Database</h1>
-
-<p>
-Banyak aplikasi Web menggunakan database untuk memelihara datanya. Sistem blog kita tidak terkecuali. Dalam bagian ini, kami akan menjelaskan bagaimana untuk menulis halaman kendali-database untuk sistem blog kita. Kita akan menggunakan teknik termasuk <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.DAO">database access object (DAO)</a> dan <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Rekaman Aktif</a>.
-</p>
-
-<p>
-Untuk keperluan tutorial, kita menyederhanakan kebutuhan sistem blog kita agar hanya perlu berhadapan dengan pengguna dan data tulisan. Selanjutnya kita membuat dua tabel database, <tt>users</tt> dan <tt>posts</tt>, seperti diperlihatkan dalam duagram hubungan entitas atau entity-relationship (ER) di bawah ini.
-</p>
-
-<img src="<%~ ER.gif %>" class="output" />
-
-<p>
-Kita menggunakan SQLite 3 database untuk menyimpan data kita. Pertama kita ubah diagram ER ke dalam pernyataan SQL berikut dan menyimpannya dalam file <tt>protected/schema.sql</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="sql">
-/* buat tabel pengguna */
-CREATE TABLE users (
- username VARCHAR(128) NOT NULL PRIMARY KEY,
- email VARCHAR(128) NOT NULL,
- password VARCHAR(128) NOT NULL, /* dalam teks biasa */
- role INTEGER NOT NULL, /* 0: pengguna normal, 1: administrator */
- first_name VARCHAR(128),
- last_name VARCHAR(128)
-);
-
-/* buat tabel tulisan */
-CREATE TABLE posts (
- post_id INTEGER NOT NULL PRIMARY KEY,
- author_id VARCHAR(128) NOT NULL
- CONSTRAINT fk_author REFERENCES users(username),
- create_time INTEGER NOT NULL, /* cap waktu UNIX */
- title VARCHAR(256) NOT NULL, /* judul tulisan */
- content TEXT, /* badan tulisan */
- status INTEGER NOT NULL /* 0: diterbitkan; 1: draft; 2: ditunda; 2: ditolak */
-);
-
-/* sisipkan beberapa rekaman data awal untuk pengujian */
-INSERT INTO users VALUES ('admin', 'admin@example.com', 'demo', 1, 'Qiang', 'Xue');
-INSERT INTO users VALUES ('demo', 'demo@example.com', 'demo', 0, 'Wei', 'Zhuo');
-INSERT INTO posts VALUES (NULL, 'admin', 1175708482, 'first post', 'this is my first post', 0);
-</com:TTextHighlighter>
-
-<com:NoteBox>
-Batasan <tt>fk_author</tt> diabaikan oleh SQLite karena tidak mendukung <a href="http://www.sqlite.org/omitted.html">batasan kunci asing</a>. Meskipun demikian, kita masih memelihara batasan di sana untuk kemampuan pemindahan sistem blog kita ke DBMS yang berbeda. Juga, dalam contoh di atas kita mengeksploitasi bukti bahwa field <tt>posts.post_id</tt> adalah <a href="http://www.sqlite.org/autoinc.html">auto-incremental</a> jika kita menempatkan NULL untuk nilainya.
-</com:NoteBox>
-
-<p>
-Kemudian kita menggunakan <a href="http://www.sqlite.org/download.html">piranti baris perintah SQLite</a> untuk membuat SQLite database. Kita membuat sebuah direktori <tt>protected/data</tt> untuk menampung file database SQLite. Sekarang kita menjalankan perintah berikut di bawah direktori <tt>protected/data</tt>:
-</p>
-
-<com:TTextHighlighter CssClass="source cli">
-sqlite3 blog.db < ../schema.sql
-</com:TTextHighlighter>
-
-<p>
-Database sudah dibuat sebagai <tt>protected/data/blog.db</tt> dan kita akan melihat direktori dan file berikut:
-</p>
-
-<img src="<%~ directories.gif %>" class="output" />
-
-<com:NoteBox>
-SQLite memerlukan direktori <tt>protected/data</tt> dan file database <tt>protected/data/blog.db</tt> keduanya disetel agar bisa ditulisi oleh proses server Web.
-</com:NoteBox>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day2/id/ER.gif b/demos/blog-tutorial/protected/pages/Day2/id/ER.gif
deleted file mode 100755
index 7a5397b3..00000000
--- a/demos/blog-tutorial/protected/pages/Day2/id/ER.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day2/id/directories.gif b/demos/blog-tutorial/protected/pages/Day2/id/directories.gif
deleted file mode 100755
index 797ef932..00000000
--- a/demos/blog-tutorial/protected/pages/Day2/id/directories.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day2/id/directories2.gif b/demos/blog-tutorial/protected/pages/Day2/id/directories2.gif
deleted file mode 100755
index b053b4c6..00000000
--- a/demos/blog-tutorial/protected/pages/Day2/id/directories2.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day2/wsat_login.png b/demos/blog-tutorial/protected/pages/Day2/wsat_login.png
index dbe1ad8b..cae62984 100644
--- a/demos/blog-tutorial/protected/pages/Day2/wsat_login.png
+++ b/demos/blog-tutorial/protected/pages/Day2/wsat_login.png
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day3/Auth.page b/demos/blog-tutorial/protected/pages/Day3/Auth.page
index 8d066b24..2eacd4be 100755
--- a/demos/blog-tutorial/protected/pages/Day3/Auth.page
+++ b/demos/blog-tutorial/protected/pages/Day3/Auth.page
@@ -3,7 +3,7 @@
<h1>Authentication and Authorization</h1>
<p>
-Before we set off to implement the user pages, we need to do some work to enable <a href="http://www.pradosoft.com/demos/quickstart/index.php?page=Advanced.Auth">authentication and authorization</a>.
+Before we set off to implement the user pages, we need to do some work to enable <a href="http://www.pradoframework.net/site/demos/quickstart/index.php?page=Advanced.Auth">authentication and authorization</a>.
</p>
<p>
@@ -26,11 +26,11 @@ We add two new modules to the application configuration as follows:
</com:TTextHighlighter>
<p>
-The <a href="http://www.pradosoft.com/docs/classdoc/TAuthManager">TAuthManager</a> module manages the whole authentication and authorization workflow. It uses the <tt>users</tt> module as its user manager (see below). By specifying the <tt>LoginPage</tt> property, we inform the auth manager to redirect user's browser to the <tt>LoginUser</tt> page when an authorization fails. We will describe how to create <tt>LoginUser</tt> in the next subsection.
+The <a href="http://pradosoft.github.io/docs/manual/class-TAuthManager">TAuthManager</a> module manages the whole authentication and authorization workflow. It uses the <tt>users</tt> module as its user manager (see below). By specifying the <tt>LoginPage</tt> property, we inform the auth manager to redirect user's browser to the <tt>LoginUser</tt> page when an authorization fails. We will describe how to create <tt>LoginUser</tt> in the next subsection.
</p>
<p>
-The <tt>user</tt> module is of class <a href="http://www.pradosoft.com/docs/classdoc/TDbUserManager">TDbUserManager</a> which is responsible to verify the validity of a user and keep basic user data in the PHP session. The <tt>UserClass</tt> property is initialized as <tt>Application.BlogUser</tt>, which indicates the user manager would look for a <tt>BlogUser</tt> class under the directory <tt>protected</tt> (remember the alias <tt>Application</tt> refers to the <tt>protected</tt> directory) and use it to keep user's session data.
+The <tt>user</tt> module is of class <a href="http://pradosoft.github.io/docs/manual/class-TDbUserManager">TDbUserManager</a> which is responsible to verify the validity of a user and keep basic user data in the PHP session. The <tt>UserClass</tt> property is initialized as <tt>Application.BlogUser</tt>, which indicates the user manager would look for a <tt>BlogUser</tt> class under the directory <tt>protected</tt> (remember the alias <tt>Application</tt> refers to the <tt>protected</tt> directory) and use it to keep user's session data.
</p>
<p>
@@ -38,7 +38,7 @@ As we will see in later sections, in controls and pages, we can use <tt>$this->U
</p>
<p>
-Below is the implementation detail of <tt>BlogUser</tt>. Notice <a href="http://www.pradosoft.com/demos/quickstart/index.php?page=Database.ActiveRecord">Active Record</a> is used to perform DB query. For example, we use <tt>UserRecord::finder()->findByPk($username)</tt> to look for the primary key specified by <tt>$username</tt> in the <tt>users</tt> table.
+Below is the implementation detail of <tt>BlogUser</tt>. Notice <a href="http://www.pradoframework.net/site/demos/quickstart/index.php?page=Database.ActiveRecord">Active Record</a> is used to perform DB query. For example, we use <tt>UserRecord::finder()->findByPk($username)</tt> to look for the primary key specified by <tt>$username</tt> in the <tt>users</tt> table.
</p>
<com:TTextHighlighter CssClass="source" Language="php">
diff --git a/demos/blog-tutorial/protected/pages/Day3/CreateAdminUser.page b/demos/blog-tutorial/protected/pages/Day3/CreateAdminUser.page
index a278fa69..06e3dbdc 100755
--- a/demos/blog-tutorial/protected/pages/Day3/CreateAdminUser.page
+++ b/demos/blog-tutorial/protected/pages/Day3/CreateAdminUser.page
@@ -22,13 +22,13 @@ We create two files <tt>protected/pages/users/AdminUser.page</tt> and <tt>protec
<h2>Creating Page Template</h2>
<p>
-We use <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.DataGrid">TDataGrid</a> to display the user accounts. Based on the above analysis, we configure the following four columns:
+We use <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Controls.DataGrid">TDataGrid</a> to display the user accounts. Based on the above analysis, we configure the following four columns:
</p>
<ul>
-<li><a href="http://www.pradosoft.com/docs/classdoc/THyperLinkColumn">THyperLinkColumn</a> displays the username column. The URL is constructed according to the PHP expression specified in the <tt>DataNavigateUrlFormatString</tt> property.</li>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TBoundColumn">TBoundColumn</a> displays the email column.</li>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TCheckBoxColumn">TCheckBoxColumn</a> uses checkboxes to indicate whether a user account is of role administrator.</li>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TButtonColumn">TButtonColumn</a> displays a column of "Delete" buttons.</li>
+<li><a href="http://pradosoft.github.io/docs/manual/class-THyperLinkColumn">THyperLinkColumn</a> displays the username column. The URL is constructed according to the PHP expression specified in the <tt>DataNavigateUrlFormatString</tt> property.</li>
+<li><a href="http://pradosoft.github.io/docs/manual/class-TBoundColumn">TBoundColumn</a> displays the email column.</li>
+<li><a href="http://pradosoft.github.io/docs/manual/class-TCheckBoxColumn">TCheckBoxColumn</a> uses checkboxes to indicate whether a user account is of role administrator.</li>
+<li><a href="http://pradosoft.github.io/docs/manual/class-TButtonColumn">TButtonColumn</a> displays a column of "Delete" buttons.</li>
</ul>
<p>The complete page template is shown as follows:</p>
@@ -123,7 +123,7 @@ In the above, the <tt>deleteButtonClicked()</tt> method is invoked whenever a "D
</p>
<com:TipBox>
-All <a href="http://www.pradosoft.com/docs/classdoc/TDataBoundControl">data-bound</a> controls have similar usage pattern. That is, set the <tt>DataSource</tt> property with the data and call <tt>dataBind()</tt> method to binds the data to the control's internal structure.
+All <a href="http://pradosoft.github.io/docs/manual/class-TDataBoundControl">data-bound</a> controls have similar usage pattern. That is, set the <tt>DataSource</tt> property with the data and call <tt>dataBind()</tt> method to binds the data to the control's internal structure.
</com:TipBox>
diff --git a/demos/blog-tutorial/protected/pages/Day3/CreateEditUser.page b/demos/blog-tutorial/protected/pages/Day3/CreateEditUser.page
index 6023450c..e6fd16e1 100755
--- a/demos/blog-tutorial/protected/pages/Day3/CreateEditUser.page
+++ b/demos/blog-tutorial/protected/pages/Day3/CreateEditUser.page
@@ -24,7 +24,7 @@ We create two files <tt>protected/pages/users/EditUser.page</tt> and <tt>protect
As you may have guessed, the page template <tt>EditUser</tt> is largely the same as that of <tt>NewUser</tt>. Besides the difference in page title and the caption of the submit button, there are three main differences.
</p>
<ul>
-<li>The "username" text box is replaced by a <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.Label">TLabel</a> control because we do not allow modifying username;</li>
+<li>The "username" text box is replaced by a <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Controls.Label">TLabel</a> control because we do not allow modifying username;</li>
<li>The validator for the "password" input is removed. This is because if the user does not provide a password during editting, it means the user does not want to change the password.</li>
<li>The "role" input is surrounded with <tt>TControl</tt> whose visibility is toggled according to the role of the currently logged-in user. If the user is not an administrator, the "role" input will not be displayed because normal users are not allowed to modify their roles.</li>
</ul>
@@ -184,7 +184,7 @@ class EditUser extends TPage
</com:TTextHighlighter>
<com:TipBox>
-The <tt>onInit()</tt> method is invoked by PRADO during one of the <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Pages">page lifecycles</a>. Other commonly overriden lifecycle methods include <tt>onPreInit()</tt>, <tt>onLoad()</tt> and <tt>onPreRender()</tt>.
+The <tt>onInit()</tt> method is invoked by PRADO during one of the <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Fundamentals.Pages">page lifecycles</a>. Other commonly overriden lifecycle methods include <tt>onPreInit()</tt>, <tt>onLoad()</tt> and <tt>onPreRender()</tt>.
</com:TipBox>
<h2>Adding Permission Check</h2>
diff --git a/demos/blog-tutorial/protected/pages/Day3/CreateLoginUser.page b/demos/blog-tutorial/protected/pages/Day3/CreateLoginUser.page
index 66d7dc80..d3a48e44 100755
--- a/demos/blog-tutorial/protected/pages/Day3/CreateLoginUser.page
+++ b/demos/blog-tutorial/protected/pages/Day3/CreateLoginUser.page
@@ -23,7 +23,7 @@ We create two files <tt>protected/pages/users/LoginUser.page</tt> and <tt>protec
<h2>Creating Page Template</h2>
<p>
-Below we show the template for <tt>LoginUser</tt>. As we see, the page mainly contains a text box for collecting username and a text box for password. The username input is required, which is ensured by the <tt>TRequiredFieldValidator</tt>. The correctness of the password input is ensured by the <a href="http://www.pradosoft.com/demos/quickstart/index.php?page=Controls.Validation">TCustomValidator</a> which invokes the page's <tt>validateUser()</tt> method when validation is performed. The page also has "login" button which invokes the page's <tt>loginButtonClicked()</tt> when it is clicked.
+Below we show the template for <tt>LoginUser</tt>. As we see, the page mainly contains a text box for collecting username and a text box for password. The username input is required, which is ensured by the <tt>TRequiredFieldValidator</tt>. The correctness of the password input is ensured by the <a href="http://www.pradoframework.net/site/demos/quickstart/index.php?page=Controls.Validation">TCustomValidator</a> which invokes the page's <tt>validateUser()</tt> method when validation is performed. The page also has "login" button which invokes the page's <tt>loginButtonClicked()</tt> when it is clicked.
</p>
<com:TTextHighlighter CssClass="source" Language="prado">
diff --git a/demos/blog-tutorial/protected/pages/Day3/CreateNewUser.page b/demos/blog-tutorial/protected/pages/Day3/CreateNewUser.page
index 4dca21c2..06953fe2 100755
--- a/demos/blog-tutorial/protected/pages/Day3/CreateNewUser.page
+++ b/demos/blog-tutorial/protected/pages/Day3/CreateNewUser.page
@@ -156,7 +156,7 @@ class NewUser extends TPage
</com:TTextHighlighter>
<p>
-In the above, calling <tt>save()</tt> will insert a new row in the <tt>users</tt> table. This intuitive feature is enabled by <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Active Record</a>.
+In the above, calling <tt>save()</tt> will insert a new row in the <tt>users</tt> table. This intuitive feature is enabled by <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Database.ActiveRecord">Active Record</a>.
</p>
<com:NoteBox>
@@ -174,7 +174,7 @@ To test the <tt>NewUser</tt> page, visit the URL <tt>http://hostname/blog/index.
<h2>Adding Permission Check</h2>
<p>
-During testing, you may have asked: shouldn't the <tt>NewUser</tt> page be only accessible by the administrator user? Yes, this is called <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.Auth">authorization</a>. We now describe how we add this permission check to the <tt>NewUser</tt> page.
+During testing, you may have asked: shouldn't the <tt>NewUser</tt> page be only accessible by the administrator user? Yes, this is called <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Advanced.Auth">authorization</a>. We now describe how we add this permission check to the <tt>NewUser</tt> page.
</p>
<p>
@@ -182,7 +182,7 @@ A straightforward way of performing permission check is in the page class where
</p>
<p>
-PRADO offers a more systematic way of checking page access permissions. To do so, we need to use <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.PageConfig">page configuration</a>. Create a file <tt>protected/pages/users/config.xml</tt> with the content as follows:
+PRADO offers a more systematic way of checking page access permissions. To do so, we need to use <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Configurations.PageConfig">page configuration</a>. Create a file <tt>protected/pages/users/config.xml</tt> with the content as follows:
</p>
<com:TTextHighlighter CssClass="source" Language="xml">
@@ -204,7 +204,7 @@ Now if we visit the <tt>NewUser</tt> page as a guest, we will be redirected to t
</p>
<com:TipBox>
-Page configuration can contain more than authorization rules. For example, it can include <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Modules">modules</a> like we did in the <a href="?page=Day2.ConnectDB">application configuration</a>. For a PRADO application, each page directory can have a page configuration which applies to the pages in the same directory and all its subdirectories.
+Page configuration can contain more than authorization rules. For example, it can include <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Fundamentals.Modules">modules</a> like we did in the <a href="?page=Day2.ConnectDB">application configuration</a>. For a PRADO application, each page directory can have a page configuration which applies to the pages in the same directory and all its subdirectories.
</com:TipBox>
</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day3/fr/Auth.page b/demos/blog-tutorial/protected/pages/Day3/fr/Auth.page
deleted file mode 100755
index 0cced90b..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/fr/Auth.page
+++ /dev/null
@@ -1,106 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Authentification et Autorisation</h1>
-
-
-<p>
-Avant que nous n'implémentions la gestion des utilisateurs, nous devons activer les modules <a href="http://www.pradosoft.com/demos/quickstart/index.php?page=Advanced.Auth">authentification et autorisation</a>.
-</p>
-
-
-<p>
-Nous ajoutons deux nouveaux modules à notre fichier de configuration de l'application.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<modules>
- ...modules TDataSourceConfig et TActiveRecordConfig ...
-
- <module id="auth"
- class="System.Security.TAuthManager"
- UserManager="users"
- LoginPage="users.LoginUser" />
-
- <module id="users"
- class="System.Security.TDbUserManager"
- UserClass="Application.BlogUser" />
-</modules>
-</com:TTextHighlighter>
-
-<p>
-Le module <a href="http://www.pradosoft.com/docs/classdoc/TAuthManager">TAuthManager</a> gère le processus d'authentification et d'autorisation. Il utilise le module <tt>users</tt> comme gestionnaire d'utilisateur (voir ci-après). En spécifiant la propriété <tt>LoginPage</tt>, nous indiquons au module d'authentification de rediriger vers la page <tt>LoginUser</tt> quand il est nécessaire de s'authentifier. Nous décrirons comment créer la page <tt>LoginUser</tt> ci-après.
-</p>
-
-<p>
-Le module <tt>user</tt> est une classe de type <a href="http://www.pradosoft.com/docs/classdoc/TDbUserManager">TDbUserManager</a> qui est responsable de la vérification et de la validation des utilisateurs et qui enregistre dans une session PHP les données utilisateurs. La propriété <tt>UserClass</tt> est initialisée comme étant de type <tt>Application.BlogUser</tt>, ceci indique au module <tt>user</tt> de chercher une classe <tt>BlogUser</tt> dans le dossier <tt>protected</tt> (rappellez-vous que l'alias <tt>Application</tt> fait référence au dossier <tt>protected</tt>) et d'utiliser cette classe pour conserver les données utilisateurs dans une session.
-Le module <tt>user</tt> est une classe de type <a href="http://www.pradosoft.com/docs/classdoc/TDbUserManager">TDbUserManager</a> qui est responsable de la vérification et de la validation des utilisateurs et qui enregistre dans une session PHP les données utilisateurs. La propriété <tt>UserClass</tt> est initialisée comme étant de type <tt>Application.BlogUser</tt>, ceci indique au module <tt>user</tt> de chercher une classe <tt>BlogUser</tt> dans le dossier <tt>protected</tt> (rappellez-vous que l'alias <tt>Application</tt> fait référence au dossier <tt>protected</tt>) et d'utilisez cette classe pour conserver les données utilisateurs dans une session.
-</p>
-
-<p>
-Comme vous pourrez le constater dans les sections suivantes, dans les différents contrôles et pages, nous pourrons utiliser <tt>$this->User</tt> pour accéder à l'objet qui contient les informations de l'utilisateur actuellement connecté.
-</p>
-
-
-<p>
-Ci-dessous les détails de l'implémentation de la classe <tt>BlogUser</tt>. Remarquez que les <a href="http://www.pradosoft.com/demos/quickstart/index.php?page=Database.ActiveRecord">Active Record</a> sont utilisés pour exécuter une requête. Par exemple, nous utilisons <tt>UserRecord::finder()->findByPk($username)</tt> pour chercher la valeur de <tt>$username</tt> dans la table <tt>users</tt> et ceci par la clé primaire.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-// Include TDbUserManager.php file which defines TDbUser
-Prado::using('System.Security.TDbUserManager');
-
-/**
- * La classe BlogUser.
- * BlogUser représente les données utilisateurs à conserver en session.
- * L'implémentation par défaut conserve le nom et le rôle de l'utilisateur.
- */
-class BlogUser extends TDbUser
-{
- /**
- * Créer un objet de type BlogUser basé sur le nom de l'utilisateur.
- * Cette méthode est requise par TDbUser. Cet objet vérifie si l'utilisateur
- * est bien présent en base de données. Si oui, un objet BlogUser
- * est créé et initialisé.
- * @param string le nom de l'utilisateur
- * @return l'objet BlogUser, null si le nom de l'utilisateur est invalide.
- */
- public function createUser($username)
- {
- // utilise l'Active Record UserRecord pour chercher l'utilisateur username
- $userRecord=UserRecord::finder()->findByPk($username);
- if($userRecord instanceof UserRecord) // si trouvé
- {
- $user=new BlogUser($this->Manager);
- $user->Name=$username; // enregistre le nom de l'utilisateur
- $user->Roles=($userRecord->role==1?'admin':'user'); // et son rôle
- $user->IsGuest=false; // l'utilisateur n'est pas un invité
- return $user;
- }
- else
- return null;
- }
-
- /**
- * Vérifie que le nom d'utilisateur et son mot de passe sont correct.
- * Cette méthode est requise par TDbUser.
- * @param string le nom de l'utilisateur
- * @param string le mot de passe
- * @return boolean en fonction de la validité de la vérification.
- */
- public function validateUser($username,$password)
- {
- // utilise l'Active Record UserRecord pour vérifier le nom d'utilisateur couplé au mot de passe.
- return UserRecord::finder()->findBy_username_AND_password($username,$password)!==null;
- }
-
- /**
- * @return boolean indiquant si l'utilisateur est un administrateur.
- */
- public function getIsAdmin()
- {
- return $this->isInRole('admin');
- }
-}
-</com:TTextHighlighter>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day3/fr/CreateAdminUser.page b/demos/blog-tutorial/protected/pages/Day3/fr/CreateAdminUser.page
deleted file mode 100755
index 7cb8fef8..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/fr/CreateAdminUser.page
+++ /dev/null
@@ -1,144 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Création de la page d'administration des utilisateurs <tt>AdminUser</tt></h1>
-
-<p>
-La page <tt>AdminUser</tt> affiche la liste de tous les comptes utilisateurs, ainsi l'administrateur peut effectuer les tâches de maintenance. Par simplification, les tâches administratives pour notre blog seront la mise à jour des utilisateurs et la suppression.
-</p>
-
-
-<p>
-Nous allons lister les utilisateurs dans une table HTML. Chaque ligne correspondra à un compte utilisateur, les colonnes suivantes seront affichées:
-</p>
-
-<ul>
-<li>Pseudo - affiche le pseudo de l'utilisateur. Dans chaque cellule un lien sera affiché qui nous dirigera vers la page <a href="?page=Day3.CreateEditUser">EditUser</a>.</li>
-<li>Email - affiche l'email.</li>
-<li>Administrateur - indique si le compte est celui d'un administrateur.</li>
-<li>Commande - affiche une colonne de bouton "supprimer". En cliquant sur un de ces boutons, la suppression du compte sera effectuée.</li>
-</ul>
-
-<p>
-Nous créons deux fichiers <tt>protected/pages/users/AdminUser.page</tt> et <tt>protected/pages/users/AdminUser.php</tt> qui contiendront respectivement le gabarit et la classe.
-</p>
-
-<h2>Création du gabarit</h2>
-<p>
-Nous allons utiliser un contrôle <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.DataGrid">TDataGrid</a> pour afficher les données. Suivant l'analyse précédente, nous allons configurer quatre colonnes:
-</p>
-
-<ul>
-<li><a href="http://www.pradosoft.com/docs/classdoc/THyperLinkColumn">THyperLinkColumn</a> affiche le pseudo. L'URL sera construite suivant les instructions de la propriété <tt>DataNavigateUrlFormatString</tt>.</li>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TBoundColumn">TBoundColumn</a> affiche l'email.</li>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TCheckBoxColumn">TCheckBoxColumn</a> utilise des cases à cocher pour indiquer si le compte est un compte administrateur.</li>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TButtonColumn">TButtonColumn</a> affiche un bouton "Supprimer".</li>
-</ul>
-
-
-<p>Le gabarit complet est affiché ci-après:</p>
-
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;%@ Title="Mon Blog - Administration des comptes utilisateurs" %>
-
-&lt;com:TContent ID="Main">
-
-<h1>Administration des comptes utilisateurs</h1>
-
-<a href="&lt;%= $this->Service->constructUrl('users.NewUser')%>">Créer un nouvel utilisateur</a>
-<br/>
-
-&lt;com:TDataGrid ID="UserGrid"
- DataKeyField="username"
- AutoGenerateColumns="false"
- OnDeleteCommand="deleteButtonClicked">
-
- &lt;com:THyperLinkColumn
- HeaderText="Pseudo"
- DataTextField="username"
- DataNavigateUrlField="username">
- &lt;prop:DataNavigateUrlFormatString>#
- $this->Service->constructUrl('users.EditUser',array('username'=>{0}))
- &lt;/prop:DataNavigateUrlFormatString>
- &lt;/com:THyperLinkColumn>
-
- &lt;com:TBoundColumn
- HeaderText="Email"
- DataField="email" />
-
- &lt;com:TCheckBoxColumn
- HeaderText="Administrateur"
- DataField="role" />
-
- &lt;com:TButtonColumn
- HeaderText="Commande"
- Text="Supprimer"
- ButtonType="PushButton"
- CommandName="delete" />
-
-&lt;/com:TDataGrid>
-
-&lt;/com:TContent>
-</com:TTextHighlighter>
-
-
-<h2>Création du fichier de classe</h2>
-
-
-<p>
-Dans le gabarit précédent, le bouton <tt>OnDeleteCommand</tt> déclenche l'évènement <tt>deleteButtonClicked()</tt> que nous devons implémenter dans le fichier de classe. De plus, la grille de données doit être renseignée avec les informations utilisateurs lorsque la page est initialisée. Nous écrivons donc notre fichier de classe comme ci-dessous :
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class AdminUser extends TPage
-{
- /**
- * Remplis la grille avec la liste des utilisateurs.
- * Cette méthode est appelée lors de l'initialisation de la page.
- * @param mixed param : paramètres de l'évènement
- */
- public function onInit($param)
- {
- parent::onInit($param);
- // lit tout les comptes utilisateurs
- $this->UserGrid->DataSource=UserRecord::finder()->findAll();
- // et les associes à la grille
- $this->UserGrid->dataBind();
- }
-
- /**
- * Supprime un compte utilisateur.
- * Cette méthode répond à l'évènement OnDeleteCommand.
- * @param mixed sender : celui qui a généré l'évènement
- * @param mixed param : paramètres de l'évènement
- */
- public function deleteButtonClicked($sender,$param)
- {
- // récupère l'identifiant du bouton sur lequel on a cliqué
- $item=$param->Item;
- // récupère auprès de la grille la clé primaire correspondante à l'identifiant
- $username=$this->UserGrid->DataKeys[$item->ItemIndex];
- // supprime le compte utilisateur en utilisant la clé primaire
- UserRecord::finder()->deleteByPk($username);
- }
-}
-</com:TTextHighlighter>
-
-<p>
-Dans le code précédent, la méthode <tt>deleteButtonClicked()</tt> est appelée quand on clique sur le bouton "Supprimer". Pour savoir à quelle ligne appartenait le bouton, nous utilisons la propriété <tt>Item.ItemIndex</tt> du paramètre de l'évènement. Avec cet index, nous recherchons quelle est la clé primaire de la ligne grâce à la propriété <tt>DataKeys</tt>.
-Dans le code précédent, la méthode <tt>deleteButtonClicked()</tt> est appelée quand on clique sur le bouton "Supprimer". Pour savoir à quelle ligne appartenait le bouton, nous utilisons la propriété <tt>Item.ItemIndex</tt> du paramètre de l'évènement. Avec cet index, nous recherchons quelle est la clé primaire de la ligne grâce à la propriété <tt>DataKeys</tt>.
-</p>
-
-<com:TipBox>
-Tous les <a href="http://www.pradosoft.com/docs/classdoc/TDataBoundControl">contrôles liés</a> sont basé sur le même modèle. C'est à dire, définition de la propriété <tt>DataSource</tt> pour savoir d'où proviennent les données et appel à la méthode <tt>dataBind()</tt> pour effectivement lier les données au contrôle.
-</com:TipBox>
-
-<h2>Test</h2>
-<!-- <h2>Testing</h2> -->
-<p>
-Pour tester notre page <tt>AdminUser</tt>, nous naviguons à l'adresse <tt>http://hostname/blog/index.php?page=users.AdminUser</tt>. Il peut vous être demandé de vous connecter en tant qu'administrateur auparavant si ce n'est déjà fait. Le résultat suivant apparaitra.
-</p>
-
-<img src="<%~ output3.gif %>" class="output" />
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day3/fr/CreateEditUser.page b/demos/blog-tutorial/protected/pages/Day3/fr/CreateEditUser.page
deleted file mode 100755
index db410253..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/fr/CreateEditUser.page
+++ /dev/null
@@ -1,215 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Création de la page de mise à jour des utilisateurs <tt>EditUser</tt></h1>
-
-<p>
-La page <tt>EditUser</tt> ressemble beaucoup à la page <a href="?page=Day3.CreateNewUser">NewUser</a>. La différence principale est le fait que lorsque la page <tt>EditUser</tt> est requise, les champs sont renseignés avec les données de l'utilisateur en cours. Une autre différence est que la page <tt>EditUser</tt> est accessible à un utilisateur standard.
-</p>
-
-<p>
-Pour définir quels sont les comptes qui peuvent être modifiés, nous allons utiliser les règles suivantes :
-</p>
-<ul>
-<li>Si l'utilisateur actuel est un administrateur, il peut modifier n'importe quel compte utilisateur en spécifiant le pseudo de l'utilisateur dans l'URL sous la forme ?username='le nom'. Par exemple : <tt>http://hostname/blog/index.php?page=users.EditUser&username=demo</tt>.</li>
-<li>Si l'utilisateur actuel est un administrateur et qu'il n'a pas précisé d'username, ce sont les informations de l'administrateur qui seront mise à jour.</li>
-<li>Si l'utilisateur actuel est un utilisateur standard, seules les données de son compte seront accessibles et il ne pourra pas modifier son rôle.</li>
-</ul>
-
-<p>
-Nous créons deux fichiers <tt>protected/pages/users/EditUser.page</tt> et <tt>protected/pages/users/EditUser.php</tt> qui contiendront respectivement le gabarit et la classe.
-</p>
-
-<h2>Création du gabarit</h2>
-<p>
-Comme vous avez pu le deviner, la page <tt>EditUser</tt> est fortement ressemblante à la page <tt>NewUser</tt>. En dehors du titre de la page et du bouton "envoyer", il y a trois différences principales.
-</p>
-
-<ul>
-<li>Le champ de saisie "username" est remplacé par un contrôle <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.Label">TLabel</a> vu qu'il n'est pas autorisé de modifier son pseudo;</li>
-<li>Le validateur pour le champ "password" est supprimé. Si l'utilisateur ne fournit pas de mot de passe durant la modification, cela indique que l'utilisateur ne veut pas en changer.</li>
-<li>Le champ "role" est entouré d'un <tt>TControl</tt>, ce qui nous permet de la rendre visible ou invisible en fonction de rôle de l'utilisateur connecté. Si l'utilisateur n'est pas un administrateur, le champ "role" ne sera pas affiché. Les utilisateurs standard n'ont pas le droit de modifier leur rôle.</li>
-</ul>
-
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;%@ Title="Mon blog - Mise à jour utilisateur" %>
-
-&lt;com:TContent ID="Main">
-
-<h1>Mise à jour utilisateur</h1>
-
-<span>Pseudo:</span>
-&lt;com:TLabel ID="Username" />
-
-<br/>
-<span>Mot de passe:</span>
-<br/>
-&lt;com:TTextBox ID="Password" TextMode="Password" />
-
-<br/>
-<span>Confirmation mot de passe:</span>
-&lt;com:TCompareValidator
- ControlToValidate="Password"
- ControlToCompare="Password2"
- ErrorMessage="Différence entre le mot de passe et la confirmation."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Password2" TextMode="Password" />
-
-<br/>
-<span>Email:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="Email"
- ErrorMessage="Veuillez indiquer votre email."
- Display="Dynamic" />
-&lt;com:TEmailAddressValidator
- ControlToValidate="Email"
- ErrorMessage="Vous avez indiqué un email invalide."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Email" />
-
-&lt;com:TControl Visible="&lt;%= $this->User->IsAdmin %>">
-<br/>
-<span>Role:</span>
-<br/>
-&lt;com:TDropDownList ID="Role">
- &lt;com:TListItem Text="Utilisateur standard" Value="0" />
- &lt;com:TListItem Text="Administrateur" Value="1" />
-&lt;/com:TDropDownList>
-&lt;/com:TControl>
-
-<br/>
-<span>Prénom:</span>
-<br/>
-&lt;com:TTextBox ID="FirstName" />
-
-<br/>
-<span>Nom:</span>
-<br/>
-&lt;com:TTextBox ID="LastName" />
-
-<br/>
-&lt;com:TButton Text="Enregistrer" OnClick="saveButtonClicked" />
-
-&lt;/com:TContent>
-</com:TTextHighlighter>
-
-
-<h2>Création du fichier de classe</h2>
-
-
-<p>
-En suivant les indications du gabarit, nous devons écrire une page de classe qui initialise les champs avec les données de l'utilisateur. De plus, la classe doit implémenter la méthode <tt>saveButtonClicked()</tt> appelée par l'évènement <tt>OnClick</tt> du bouton "Enregistrer".
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class EditUser extends TPage
-{
- /**
- * Initialise les champs avec les données de l'utilisateur.
- * Cette méthode est appelée par le framework lorsque la page est initialisée.
- * @param mixed param : paramètres de l'évènement
- */
- public function onInit($param)
- {
- parent::onInit($param);
- if(!$this->IsPostBack) // est-ce que c'est le premier appel à la page
- {
- // Lit les informations de l'utilisateur. C'est équivalent à :
- // $userRecord=$this->getUserRecord();
- $userRecord=$this->UserRecord;
-
- // Rempli les contrôles avec les données de l'utilisateur
- $this->Username->Text=$userRecord->username;
- $this->Email->Text=$userRecord->email;
- $this->Role->SelectedValue=$userRecord->role;
- $this->FirstName->Text=$userRecord->first_name;
- $this->LastName->Text=$userRecord->last_name;
- }
- }
-
- /**
- * Enregistre les modifications si tous les validateurs sont Ok.
- * Cette méthode répond à l'évènement OnClick du bouton "Enregistrer".
- * @param mixed sender : celui qui a généré l'évènement
- * @param mixed param : paramètres de l'évènement
- */
- public function saveButtonClicked($sender,$param)
- {
- if($this->IsValid) // toutes les validations Ok ?
- {
- // Lit les informations de l'utilisateur.
- $userRecord=$this->UserRecord;
-
- // Enresgistre les valeurs dans les champs de la BDD
- $userRecord->username=$this->Username->Text;
- // mets à jour le mot de passe s'il n'est pas vide
- if(!empty($this->Password->Text))
- $userRecord->password=$this->Password->Text;
- $userRecord->email=$this->Email->Text;
- // mets à jour le rôle si l'utilisateur actuel est un administrateur
- if($this->User->IsAdmin)
- $userRecord->role=(int)$this->Role->SelectedValue;
- $userRecord->first_name=$this->FirstName->Text;
- $userRecord->last_name=$this->LastName->Text;
-
- // enregistre les modifications dans la BDD
- $userRecord->save();
-
- // redirige vers la page d'accueil
- $this->Response->redirect($this->Service->DefaultPageUrl);
- }
- }
-
- /**
- * Retourne l'utilisateur qui doit être mis à jour.
- * @return UserRecord l'utilisateur qui doit être modifié.
- * @throws THttpException si l'utilisateur n'existe pas.
- */
- protected function getUserRecord()
- {
- // l'utilisateur à modifié est l'utilisateur actuellement connecté
- $username=$this->User->Name;
- // si la variable GET 'username' n'est pas vide et que l'utilisateur actuel
- // est un administrateur, nous utilisons la variable GET à la place
- if($this->User->IsAdmin && $this->Request['username']!==null)
- $username=$this->Request['username'];
-
- // lit les données de l'utilisateur par Active Record
- $userRecord=UserRecord::finder()->findByPk($username);
- if(!($userRecord instanceof UserRecord))
- throw new THttpException(500,'Username is invalid.');
- return $userRecord;
- }
-}
-</com:TTextHighlighter>
-
-<com:TipBox>
-La méthode <tt>onInit()</tt> est appelée par PRADO lors du <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Pages">cycle de vie de la page</a>. Les autres méthodes couramment surchargées sont <tt>onPreInit()</tt>, <tt>onLoad()</tt> et <tt>onPreRender()</tt>.
-</com:TipBox>
-
-<h2>Ajout de la vérification des droits d'accès</h2>
-<p>
-Pour rendre la page <tt>EditUser</tt> accessible également par les utilisateurs authentifiés (<tt>users="@"</tt>), nous devons modifier le fichier de configuration <tt>protected/pages/users/config.xml</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<?xml version="1.0" encoding="utf-8"?>
-<configuration>
- <authorization>
- <allow roles="admin"/>
- <allow users="@" pages="EditUser"/>
- <deny users="*"/>
- </authorization>
-</configuration>
- </com:TTextHighlighter>
-
-<h2>Test</h2>
-
-<p>
-Pour tester la page <tt>EditUser</tt>, rendons-nous à l'URL <tt>http://hostname/blog/index.php?page=users.EditUser&username=demo</tt>. Il vous sera peut-être demandé de vous authentifier auparavant si vous n'êtes pas déjà connecté. Essayez de vous connecter avec différents comptes (ie: admin/demo, demo/demo) et remarquez comment la page évolue différemment.
-</p>
-
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day3/fr/CreateLoginUser.page b/demos/blog-tutorial/protected/pages/Day3/fr/CreateLoginUser.page
deleted file mode 100755
index 07e97b87..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/fr/CreateLoginUser.page
+++ /dev/null
@@ -1,161 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Création de la page <tt>LoginUser</tt></h1>
-
-<p>
-La page <tt>LoginUser</tt> affiche un formulaire et gère l'authentification de l'utilisateur. Comme décrit dans <a href="?page=Day3.Auth">authentification et autorisation</a>, le navigateur est automatiquement redirigé vers la page <tt>LoginUser</tt> quand un utilisateur essaye d'accéder à une page protégée, telle que la page d'administration des utilisateurs.
-</p>
-
-<p>
-Le processus de la page <tt>LoginUser</tt> est similaire à celui de la page <a href="?page=Day1.CreateContact">Contact</a>:
-</p>
-<ol>
-<li>Quand un utilisateur accède à la page <tt>LoginUser</tt>, un formulaire est affiché;</li>
-<li>L'utilisateur remplit les champs, nom de l'utilisateur et mot de passe et clique sur le bouton "envoyer";</li>
-<li>La classe <tt>LoginUser</tt> reçoit l'évènement "login" et lance la séquence d'authentification;</li>
-<li>Si le nom d'utilisateur et le mot de passe sont corrects, le système l'enregistre en session et le redirige vers la page protégée demandée. Dans le cas contraire, un message "mot de passe invalide" est affiché.
-</ol>
-
-<p>
-Nous créons les deux fichiers <tt>protected/pages/users/LoginUser.page</tt> et <tt>protected/pages/users/LoginUser.php</tt> qui enregistre le gabarit et la classe respectivement.
-</p>
-
-<h2>Création du gabarit</h2>
-
-<p>
-Ci-après est affiché le gabarit pour <tt>LoginUser</tt>. Comme vous pouvez le constater, la page contient un champ de saisie pour le nom de l'utilisateur et un autre pour le mot de passe. Le nom de l'utilisateur est requis, ce que le validateur <tt>TRequiredFieldValidator</tt> contrôle. La validité du mot de passe est assurée par le validateur <a href="http://www.pradosoft.com/demos/quickstart/index.php?page=Controls.Validation">TCustomValidator</a> qui fait un appel à la méthode <tt>validateUser()</tt> de la classe. La page contient aussi un bouton "envoyer" qui fait un appel à <tt>loginButtonClicked()</tt> quand il est activé.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;%@ Title="My Blog - Login" %>
-
-&lt;com:TContent ID="Main">
-
-<h1>Connexion</h1>
-
-<span>Votre nom:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="Username"
- ErrorMessage="Veuillez indiquer votre nom."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Username" />
-
-<br/>
-<span>Mot de passe:</span>
-&lt;com:TCustomValidator
- ControlToValidate="Password"
- ErrorMessage="vous avez saisi un mot de passe invalide."
- Display="Dynamic"
- OnServerValidate="validateUser" />
-<br/>
-&lt;com:TTextBox ID="Password" TextMode="Password" />
-
-<br/>
-&lt;com:TButton Text="Envoyer" OnClick="loginButtonClicked" />
-
-&lt;/com:TContent>
-</com:TTextHighlighter>
-
-<h2>Création de la classe</h2>
-
-<p>
-Tout comme la page <a href="?page=Day1.CreateContact">Contact</a>, la page <tt>LoginUser</tt> a aussi besoin d'un fichier de classe qui implémente les évènements générés dans le fichier gabarit. Ici, nous avons besoin de deux méthodes : <tt>validateUser()</tt> et <tt>loginButtonClicked()</tt>. Dans <tt>validateUser()</tt>, nous utilisons le <a href="?page=Day3.Auth">gestionnaire d'authentification</a> pour vérifier si le nom d'utilisateur et le mot de passe sont valides. Si c'est le cas, le gestionnaire d'authentification créé automatiquement une session utilisateur avec les données correspondantes.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class LoginUser extends TPage
-{
- /**
- * Vérifie la validité du nom d'utilisateur et du mot de passe.
- * Cette méthode implémente l'évènement <tt>OnServerValidate</tt> du validateur <tt>TCustomValidator</tt>.
- * @param mixed sender : celui qui a généré l'évènement
- * @param mixed param : paramètres de l'évènement
- */
- public function validateUser($sender,$param)
- {
- $authManager=$this->Application->getModule('auth');
- if(!$authManager->login($this->Username->Text,$this->Password->Text))
- $param->IsValid=false; // indique au validateur que la validation à échoué
- }
-
- /**
- * Rédirige le navigateur vers l'URL originellement demandée si la validation est Ok.
- * Cette méthode implémente l'évènement <tt>OnClick</tt> du bouton "envoyer".
- * @param mixed sender : celui qui a généré l'évènement
- * @param mixed param : paramètres de l'évènement
- */
- public function loginButtonClicked($sender,$param)
- {
- if($this->Page->IsValid) // toutes les validations sont ok ?
- {
- // récupère l'URL de la page protégée qui avait été demandée par l'utilisateur
- $url=$this->Application->getModule('auth')->ReturnUrl;
- if(empty($url)) // l'utilisateur à accéder à la page de connexion directement
- $url=$this->Service->DefaultPageUrl;
- $this->Response->redirect($url);
- }
- }
-}
-</com:TTextHighlighter>
-
-
-<h2>Test</h2>
-
-<p>
-Nous avons donc créé la page <tt>LoginUser</tt>. Nous pouvons la tester en naviguant à l'URL <tt>http://hostname/blog/index.php?page=users.LoginUser</tt>. Rappellez-vous que la dans la section <a href="?page=Day2.CreateDB">Création de la base</a>, nous avons déjà créé deux comptes utilisateurs (nom d'utilisateur/mot de passe) <tt>admin/demo</tt> et <tt>demo/demo</tt>. Nous pouvons donc les utiliser pour tester notre page de connexion.
-</p>
-
-<img src="<%~ output.gif %>" class="output"/>
-
-<h2>Ajout des liens de connexion/déconnexion à notre gabarit principal</h2>
-<p>
-Pour permettre à l'utilisateur d'accéder directement aux pages de connexion/déconnexion, nous modifions le gabarit principal <tt>MainLayout</tt>. En particulier, nous ajoutons un lien vers la page <tt>LoginUser</tt>. Nous ajoutons aussi un lien "se déconnecter" qui permet à l'utilisateur de se déconnecter.
-</p>
-
-<p>
-Nous modifions le pied de page de notre gabarit principal <tt>MainLayout</tt>. La visibilité des liens vers "se connecter" et "se déconnecter" dépend du statut de l'utilisateur. Si l'utilisateur n'est pas encore connecté, ie: <tt>$this->User->IsGuest</tt> est vrai, alors le lien "se connecter" est visible tandis que le lien "se déconnecter" ne l'est pas et inversement s'il est connecté.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-<div id="footer">
-&lt;com:THyperLink Text="Se connecter"
- NavigateUrl="&lt;%= $this->Service->constructUrl('users.LoginUser') %>"
- Visible="&lt;%= $this->User->IsGuest %>" />
-
-&lt;com:TLinkButton Text="Se déconnecter"
- OnClick="logoutButtonClicked"
- Visible="&lt;%= !$this->User->IsGuest %>" />
-
-<br/>
-&lt;%= PRADO::poweredByPrado() %>
-</div>
-</com:TTextHighlighter>
-
-<p>
-Vu que le lien "se déconnecter" génère l'évènement <tt>OnClick</tt> avec comme nom d'évènement <tt>logoutButtonClicked()</tt>, nous devons modifier le fichier de classe de <tt>MainLayout</tt> comme ci-dessous :
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class MainLayout extends TTemplateControl
-{
- /**
- * Déconnecte un utilisateur.
- * Cette méthode répond à l'évènement OnClick du lien "se déconnecter".
- * @param mixed sender : celui qui a généré l'évènement
- * @param mixed param : paramètres de l'évènement
- */
- public function logoutButtonClicked($sender,$param)
- {
- $this->Application->getModule('auth')->logout();
- $url=$this->Service->constructUrl($this->Service->DefaultPage);
- $this->Response->redirect($url);
- }
-}
-</com:TTextHighlighter>
-
-<p>
-Maintenant si nous visitons n'importe quelle page de notre blog, nous verrons apparaitre un lien en pied de page. Le lien affiche "se connecter" si nous ne sommes pas connectés et "se déconnecter" dans le cas contraire. Si nous cliquons sur le lien "se déconnecter", nous sommes redirigés vers la page d'accueil et le lien "se connecter" apparait indiquant que nous ne sommes plus connectés.
-</p>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day3/fr/CreateNewUser.page b/demos/blog-tutorial/protected/pages/Day3/fr/CreateNewUser.page
deleted file mode 100755
index e886e4ea..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/fr/CreateNewUser.page
+++ /dev/null
@@ -1,212 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Création de la page nouvel utilisateur <tt>NewUser</tt></h1>
-
-<p>
-La page <tt>NewUser</tt> est fournie à l'administrateur pour créer des nouveaux comptes utilisateurs. Elle doit afficher un formulaire qui permet la saisie des informations d'un nouveau compte. Tel que défini dans la <a href="?page=Day2.CreateDB">base de données</a>, nous devons prévoir la saisie des informations suivantes :
-</p>
-
-<ul>
-<li><tt>username</tt> - string, pseudo de l'utilisateur, obligatoire et unique</li>
-<li><tt>email</tt> - string, email, obligatoire et unique</li>
-<li><tt>password</tt> - string, mot de passe, obligatoire</li>
-<li><tt>role</tt> - integer, rôle, obligatoire (0 ou 1)</li>
-<li><tt>first_name</tt> - string, prénom, optionnel</li>
-<li><tt>last_name</tt> - string, nom, optionnel</li>
-</ul>
-
-<p>
-Nous créons deux fichiers, <tt>protected/pages/users/NewUser.page</tt> et <tt>protected/pages/users/NewUser.php</tt> qui contiendront respectivement le gabarit et la classe.
-</p>
-
-<h2>Création du gabarit</h2>
-<p>
-En fonction de l'analyse précédente, nous créons le gabarit comme ci-dessous :
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;%@ Title="Mon Blog - Nouvel utilisateur" %>
-
-&lt;com:TContent ID="Main">
-
-<h1>Création nouvel utilisateur</h1>
-
-<span>Pseudo:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="Username"
- ErrorMessage="Veuillez indiquer un pseudo."
- Display="Dynamic" />
-&lt;com:TCustomValidator
- ControlToValidate="Username"
- ErrorMessage="Désolé, le pseudo choisi est déjà utilisé. Veuillez en saisir un autre."
- OnServerValidate="checkUsername"
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Username" />
-
-<br/>
-<span>Mot de passe:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="Password"
- ErrorMessage="Veuillez indiquer un mot de passe."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Password" TextMode="Password" />
-
-<br/>
-<span>Confirmation mot de passe:</span>
-&lt;com:TCompareValidator
- ControlToValidate="Password"
- ControlToCompare="Password2"
- ErrorMessage="Différence entre le mot de passe et la confirmation."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Password2" TextMode="Password" />
-
-<br/>
-<span>Email:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="Email"
- ErrorMessage="Veuillez indiquer votre email."
- Display="Dynamic" />
-&lt;com:TEmailAddressValidator
- ControlToValidate="Email"
- ErrorMessage="Vous avez indiqué un mot de passe invalide."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Email" />
-
-<br/>
-<span>Rôle:</span>
-<br/>
-&lt;com:TDropDownList ID="Role">
- &lt;com:TListItem Text="Utilisateur standard" Value="0" />
- &lt;com:TListItem Text="Administrateur" Value="1" />
-&lt;/com:TDropDownList>
-
-<br/>
-<span>Prénom:</span>
-<br/>
-&lt;com:TTextBox ID="FirstName" />
-
-<br/>
-<span>Nom:</span>
-<br/>
-&lt;com:TTextBox ID="LastName" />
-
-<br/>
-&lt;com:TButton Text="Ajouter" OnClick="createButtonClicked" />
-
-&lt;/com:TContent>
-</com:TTextHighlighter>
-
-<p>
-Le gabarit est très proche du gabarit de la page <tt>Contact</tt> et de la page <tt>LoginUser</tt>. Il consiste principalement en deux champs de saisie et de plusieurs validateurs. Certains champs de saisie sont associés à plusieurs validateurs vu qu'il est nécessaire de vérifier plusieurs règles.
-</p>
-
-
-<h2>Création du fichier de classe</h2>
-
-<p>
-En fonction du gabarit précédent, nous constatons que nous avons besoin d'une classe qui implémente deux gestionnaires d'évènements : <tt>checkUsername()</tt> (appellé par le premier validateur dans l'évènement <tt>OnServerValidate</tt>) et <tt>createButtonClicked()</tt> (appellé par l'évènement <tt>OnClick</tt> du bouton "create"). ainsi, nous écrirons la classe comme ci-dessous :
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class NewUser extends TPage
-{
- /**
- * Vérifie si le nom d'utilisateur existe dans la base de données.
- * Cette méthode répond à l'évènement OnServerValidate du validateur username.
- * @param mixed sender : celui qui a généré l'évènement
- * @param mixed param : paramètres de l'évènement
- */
- public function checkUsername($sender,$param)
- {
- // valide si l'utilisateur existe
- $param->IsValid=UserRecord::finder()->findByPk($this->Username->Text)===null;
- }
-
- /**
- * Créer un nouveau compte utilisateur si tous les champs sont valides.
- * Cette méthode répond à l'évènement OnClick du bouton "create".
- * @param mixed sender : celui qui a généré l'évènement
- * @param mixed param : paramètres de l'évènement
- */
- public function createButtonClicked($sender,$param)
- {
- if($this->IsValid) // si toutes les validations sont ok
- {
- // rempli l'objet UserRecord avec les données saisies
- $userRecord=new UserRecord;
- $userRecord->username=$this->Username->Text;
- $userRecord->password=$this->Password->Text;
- $userRecord->email=$this->Email->Text;
- $userRecord->role=(int)$this->Role->SelectedValue;
- $userRecord->first_name=$this->FirstName->Text;
- $userRecord->last_name=$this->LastName->Text;
-
- // l'enregistre dans la base de données par la méthode save de l'Active Record
- $userRecord->save();
-
- // redirige l'utilisateur vers la page d'accueil
- $this->Response->redirect($this->Service->DefaultPageUrl);
- }
- }
-}
-</com:TTextHighlighter>
-
-<p>
-Dans le code précédent, l'appel à la méthode <tt>save()</tt> insère un enregistrement dans la table <tt>users</tt>. Cette fonctionnalité est fournie par l'objet <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Active Record</a>.
-</p>
-
-<com:NoteBox>
-Par simplification, le pseudo dans notre blog est sensible à la casse. Dans beaucoup de systèmes, le pseudo est insensible à la casse. Il faudrait donc prévoir un traitement particulier lors de la création d'un nouvel utilisateur, ainsi que dans la partie <a href="?page=Day3.Auth">authentification</a>. De même, les espaces en début et fin de pseudo devrait être supprimés.
-Par simplification, le pseudo dans notre blog est sensible à la casse. Dans beaucoup de systèmes, le pseudo est insensible à la casse. Il faudrait donc prévoir un traitement particulier lors de la création d'un nouvel utilisateur, ainsi que dans la partie <a href="?page=Day3.Auth">authentification</a>. De même les espaces en début et fin de pseudo devrait être supprimés.
-Par simplification, le pseudo dans notre blog est sensible à la casse. Dans beaucoup de systèmes, le pseudo est insensible à la casse. Il faudrait donc prévoir un traitement particulier lors de la création d'un nouvel utilisateur, ainsi que dans la partie <a href="?page=Day3.Auth">authentification</a>. De même les espaces en début et fin de pseudo devrait être supprimés.
-</com:NoteBox>
-
-
-<h2>Test</h2>
-<p>
-Pour tester la page <tt>NewUser</tt>, il suffit de naviguer à l'URL <tt>http://hostname/blog/index.php?page=users.NewUser</tt>. vous devriez voir apparaitre la page suivante. Essayez de saisir différentes informations et remarquez comment les données sont validées. Si toutes les règles sont valides, nous devrions avoir inséré un nouvel utilisateur et être redirigés vers la page d'accueil.
-</p>
-
-<img src="<%~ output2.gif %>" class="output"/>
-
-
-<h2>Ajout de la vérification des droits d'accès</h2>
-<p>
-Durant le test, vous vous êtes peut-être demandé : Est-ce que la page <tt>NewUser</tt> ne devrait être accessible qu'aux administrateurs ? Oui, ceci est dénommé <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.Auth">autorisation</a>. Nous allons maintenant décrire comment ajouter cette vérification d'accès à la page <tt>NewUser</tt>.
-</p>
-
-<p>
-Une façon simple serait de vérifier dans le code de la classe si <tt>$this->User->IsAdmin</tt> est vrai, dans le cas contraire, une redirection vers la page de connexion <tt>LoginUser</tt> serait faite.
-</p>
-
-<p>
-PRADO propose une approche complémentaire de vérification des droits. Pour ce faire, nous devons utiliser un fichier de <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.PageConfig">configuration de page</a>. Créer un fichier <tt>protected/pages/users/config.xml</tt> avec le contenu suivant :
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<?xml version="1.0" encoding="utf-8"?>
-<configuration>
- <authorization>
- <allow roles="admin" />
- <deny users="*" />
- </authorization>
-</configuration>
-</com:TTextHighlighter>
-
-<p>
-Le fichier de configuration de page contient les règles d'accès aux pages contenues dans le dossier <tt>protected/pages/users</tt>. Ce fichier indique que les utilisateurs dont le rôle est "admin" (concernant le mot "admin" voir <a href="?page=Day3.Auth">BlogUser.createUser()</a>) peuvent accéder à toutes les pages du dossier. Tous les autres utilisateurs (<tt>users="*"</tt>) ne sont pas autorisés à accéder à ces pages, excepté à la page <tt>LoginUser</tt> qui, par convention, peut toujours être chargée.
-</p>
-
-<p>
-Dorénavant, si nous naviguons à la page <tt>NewUser</tt> en tant qu'anonyme, nous serons redirigés vers la page <tt>LoginUser</tt>. Si notre connexion est acceptée, nous serons redirigés en retour vers la page <tt>NewUser</tt>
-</p>
-
-<com:TipBox>
-Le fichier de configuration de pages peut contenir d'autres éléments que les règles d'autorisations. Par exemple, il pourrait inclure un <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Modules">module</a> tout comme nous l'avons fait pour le fichier de <a href="?page=Day2.ConnectDB">configuration de l'application</a>. Dans une application PRADO, chaque dossier de pages peut contenir un fichier de configuration de pages qui s'applique à tous les fichiers du dossier ainsi qu'aux sous dossiers.
-</com:TipBox>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day3/fr/Overview.page b/demos/blog-tutorial/protected/pages/Day3/fr/Overview.page
deleted file mode 100755
index 306434e1..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/fr/Overview.page
+++ /dev/null
@@ -1,42 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Vue d'ensemble de la gestion des utilisateurs</h1>
-<!-- <h1>User Management Overview</h1> -->
-
-<p>
-Dans cette section, nous allons créer les pages concernant la gestion des utilisateurs. En particulier, nous allons implémenter les fonctionnalités suivantes: connexion/déconnexion des utilisateurs, création d'un utilisateur, mise à jour/suppression des utilisateurs.
-</p>
-<!-- <p>
-In this section, we create pages that are related with user management. In particular, we implement these required features: user login/logout, creating new user account and updating/deleting user accounts.
-</p> -->
-
-<p>
-En accord avec les buts à atteindre, nous devons créer les pages suivantes. Pour une meilleure organisation de notre code, ces pages seront créées dans le dossier <tt>protected/pages/users</tt>.
-</p>
-<!-- <p>
-According to the requirements, we need to create the following pages. To better organize our code, these user-related pages will be created under a new directory <tt>protected/pages/users</tt>.
-</p> -->
-
-<ul>
- <li><tt>LoginUser</tt> affiche le formulaire de connexion.</li>
- <li><tt>NewUser</tt> pour la création d'un compte utilisateur.</li>
- <li><tt>EditUser</tt> permet à un utilisateur enregistré de mettre à jour son profil.</li>
- <li><tt>AdminUser</tt> permet à l'administrateur de gérer les comptes utilisateurs, y compris la gestion des droits d'accès et la suppression d'un compte.</li>
-</ul>
-<!-- <ul>
- <li><tt>LoginUser</tt> displays a login form to login a user.</li>
- <li><tt>NewUser</tt> creates a new user account.</li>
- <li><tt>EditUser</tt> allows a registered user to update his profile.</li>
- <li><tt>AdminUser</tt> allows the administrator to manage the user accounts, including setting permission level and deleting a user account.</li>
-</ul> -->
-
-<p>
-Après avoir fini cette section, nous devrions obtenir l'arborescence suivante :
-</p>
-<!-- <p>
-After finishing this section, we shall expect to see the following directories and files:
-</p> -->
-
-<img src="<%~ directories.gif %>" class="output" />
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day3/fr/directories.gif b/demos/blog-tutorial/protected/pages/Day3/fr/directories.gif
deleted file mode 100755
index f59fda58..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/fr/directories.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day3/fr/output.gif b/demos/blog-tutorial/protected/pages/Day3/fr/output.gif
deleted file mode 100755
index 0d812dd0..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/fr/output.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day3/fr/output2.gif b/demos/blog-tutorial/protected/pages/Day3/fr/output2.gif
deleted file mode 100755
index 749255d6..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/fr/output2.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day3/fr/output3.gif b/demos/blog-tutorial/protected/pages/Day3/fr/output3.gif
deleted file mode 100755
index a11ee653..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/fr/output3.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day3/id/Auth.page b/demos/blog-tutorial/protected/pages/Day3/id/Auth.page
deleted file mode 100755
index c4728cdf..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/id/Auth.page
+++ /dev/null
@@ -1,102 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Otentikasi dan Otorisasi</h1>
-
-<p>
-Sebelum kita siap mengimplementasikan halaman pengguna, kita perlu melakukan beberapa pekerjaan guna menghidupkan <a href="http://www.pradosoft.com/demos/quickstart/index.php?page=Advanced.Auth">otentikasi dan otorisasi</a>.
-</p>
-
-<p>
-Kita menambah dua modul ke konfigurasi aplikasi seperti berikut:
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<modules>
- ...TDataSourceConfig and TActiveRecordConfig modules...
-
- <module id="auth"
- class="System.Security.TAuthManager"
- UserManager="users"
- LoginPage="users.LoginUser" />
-
- <module id="users"
- class="System.Security.TDbUserManager"
- UserClass="Application.BlogUser" />
-</modules>
-</com:TTextHighlighter>
-
-<p>
-Modul <a href="http://www.pradosoft.com/docs/classdoc/TAuthManager">TAuthManager</a> mengatur seluruh alur kerja otentikasi dan otorisasi. Ia menggunakan modul <tt>users</tt> sebagai manajer penggunanya (lihat di bawah). Dengan menetapkan properti <tt>LoginPage</tt>, kita menginformasikan manajer otentikasi untuk mengalihkan browser pengguna ke halaman <tt>LoginUser</tt> saat otorisasi gagal. Kami akan menjelaskan bagaimana untuk membuat <tt>LoginUser</tt> dalam subbagian berikutnya.
-</p>
-
-<p>
-Modul <tt>user</tt> adalah kelas <a href="http://www.pradosoft.com/docs/classdoc/TDbUserManager">TDbUserManager</a> yang bertanggung jawab untuk memverifikasi keabsahan pengguna dan memelihara data dasar dalam sesi PHP. Properti <tt>UserClass</tt> diinisialisasi sebagai <tt>Application.BlogUser</tt>, yang menunjukan bahwa manajer pengguna akan melihar kelas <tt>BlogUser</tt> di bawah direktori <tt>protected</tt> (ingat alias <tt>Application</tt> merujuk ke direktori <tt>protected</tt>) dan menggunakannya untuk memelihara data sesi pengguna.
-</p>
-
-<p>
-Seperti yang akan kita lihat dalam bagian nanti, dalam kontrol dan halaman, kita dapat menggunakan <tt>$this->User</tt> untuk memperoleh obyek <tt>BlogUser</tt> yang berisi informasi pengguna yang saat ini mengakses siistem.
-</p>
-
-<p>
-Di bawah ini adalah rincian implementasi dari <tt>BlogUser</tt>. Perhatikan, <a href="http://www.pradosoft.com/demos/quickstart/index.php?page=Database.ActiveRecord">Rekaman Aktif</a> digunakan untuk melakukan query DB. Sebagai contoh, kita menggunakan <tt>UserRecord::finder()->findByPk($username)</tt> untuk mencari kunci primer yang ditetapkan oleh <tt>$username</tt> dalam tabel <tt>users</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-// Sertakan file TDbUserManager.php yang mendefinisikan TDbUser
-Prado::using('System.Security.TDbUserManager');
-
-/**
- * BlogUser Class.
- * BlogUser mewakili data pengguna yang perlu dijaga dalam sesi.
- * Implementasi standar memelihara informasi aturan dan pengguna.
- */
-class BlogUser extends TDbUser
-{
- /**
- * Membuat obyek BlogUser berdasarkan username yang ditetapkan.
- * Metode ini diperlukan oleh TDbUser. Ia memeriksa database
- * untuk melihat apakah username yang ditetapkan ada di sana. Jika ada,
- * obyek BlogUser dibuat dan diinisialisasi.
- * @param string username yang ditetapkan
- * @return BlogUser obyek pengguna, null jika username tidak benar.
- */
- public function createUser($username)
- {
- // gunakan Rekaman Aktif UserRecord untuk mencari username yang ditetapkan
- $userRecord=UserRecord::finder()->findByPk($username);
- if($userRecord instanceof UserRecord) // jika ditemukan
- {
- $user=new BlogUser($this->Manager);
- $user->Name=$username; // setel nama pengguna
- $user->Roles=($userRecord->role==1?'admin':'user'); // setel aturan
- $user->IsGuest=false; // pengguna bukan seorang tamu
- return $user;
- }
- else
- return null;
- }
-
- /**
- * Memeriksa apakah (username, password) yang ditetapkan sudah benar.
- * Metode ini diperlukan oleh TDbUser.
- * @param string username
- * @param string password
- * @return boolean apakah username dan password sudah benar.
- */
- public function validateUser($username,$password)
- {
- // pakai Rekaman Aktif UserRecord untuk mencari pasangan (username, password).
- return UserRecord::finder()->findBy_username_AND_password($username,$password)!==null;
- }
-
- /**
- * @return boolean apakah pengguna ini adalah seorang administrator.
- */
- public function getIsAdmin()
- {
- return $this->isInRole('admin');
- }
-}
-</com:TTextHighlighter>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day3/id/CreateAdminUser.page b/demos/blog-tutorial/protected/pages/Day3/id/CreateAdminUser.page
deleted file mode 100755
index f805d477..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/id/CreateAdminUser.page
+++ /dev/null
@@ -1,137 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Membuat Halaman <tt>AdminUser</tt></h1>
-
-<p>
-Halaman <tt>AdminUser</tt> menampilkan semua akun pengguna dalam sebuah daftar agar administrator dapat melakukan beberapa pekerjaan administratif. Demi kemudahan, pekerjaan administratif sistem blog kita mendukung termasuk mengedit dan menghapus akun pengguna.
-</p>
-
-<p>
-Kita akan menampilkan daftar pengguna dalam sebuah tabel. Setiap baris tabel mewakili satu akun pengguna, dan kolom berikut ditampilkan:
-</p>
-<ul>
-<li>Username - menampilkan nama pengguna. Dalam setiap sel sebuah hiperlink ditampilkan membawa ke halaman <a href="?page=Day3.CreateEditUser">EditUser</a> terkait.</li>
-<li>Email - menampilkan email.</li>
-<li>Administrator - menampilkan apakah akun pengguna adalah aturan administrator.</li>
-<li>Command - menampilkan kolom dengan tombol "Delete". Mengklik pada setiap tombol akan mengakibatkan penghapusan akun pengguna terkait.</li>
-</ul>
-
-<p>
-Kita membuat dua file <tt>protected/pages/users/AdminUser.page</tt> dan <tt>protected/pages/users/AdminUser.php</tt> masing-masing untuk menyimpan template halaman dan kelas halaman.
-</p>
-
-<h2>Membuat Template Halaman</h2>
-<p>
-Kita menggunakan <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.DataGrid">TDataGrid</a> untuk menampilkan akun pengguna. Berdasarkan pada analisis di atas, kita mengkonfigurasi empat kolom berikut:
-</p>
-<ul>
-<li><a href="http://www.pradosoft.com/docs/classdoc/THyperLinkColumn">THyperLinkColumn</a> menampilkan kolom nama pengguna. URL dibentuk berdasarkan pada ekstensi PHP yang ditetapkan dalam properti <tt>DataNavigateUrlFormatString</tt>.</li>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TBoundColumn">TBoundColumn</a> menampilkan kolom email.</li>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TCheckBoxColumn">TCheckBoxColumn</a> menggunakan kotak centang untuk menunjukan apakah akun pengguna adalah aturan administrator.</li>
-<li><a href="http://www.pradosoft.com/docs/classdoc/TButtonColumn">TButtonColumn</a> menampilkan kolom dengan tombol "Delete".</li>
-</ul>
-
-<p>Template halaman lengkap ditampilkan seperti berikut:</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;%@ Title="My Blog - Manage User Accounts" %>
-
-&lt;com:TContent ID="Main">
-
-<h1>Manage User Accounts</h1>
-
-<a href="&lt;%= $this->Service->constructUrl('users.NewUser')%>">Create New User</a>
-<br/>
-
-&lt;com:TDataGrid ID="UserGrid"
- DataKeyField="username"
- AutoGenerateColumns="false"
- OnDeleteCommand="deleteButtonClicked">
-
- &lt;com:THyperLinkColumn
- HeaderText="Username"
- DataTextField="username"
- DataNavigateUrlField="username">
- &lt;prop:DataNavigateUrlFormatString>#
- $this->Service->constructUrl('users.EditUser',array('username'=>{0}))
- &lt;/prop:DataNavigateUrlFormatString>
- &lt;/com:THyperLinkColumn>
-
- &lt;com:TBoundColumn
- HeaderText="Email"
- DataField="email" />
-
- &lt;com:TCheckBoxColumn
- HeaderText="Administrator"
- DataField="role" />
-
- &lt;com:TButtonColumn
- HeaderText="Command"
- Text="Delete"
- ButtonType="PushButton"
- CommandName="delete" />
-
-&lt;/com:TDataGrid>
-
-&lt;/com:TContent>
-</com:TTextHighlighter>
-
-
-<h2>Membuat Kelas Halaman</h2>
-
-<p>
-Dalam template halaman di atas, event <tt>OnDeleteCommand</tt> datagrid dengan metode <tt>deleteButtonClicked()</tt> akan kita implementasikan dalam kelas halaman. Sebagai tambahan, datagrid perlu dipopulasi dengan data akun pengguna saat halaman diinisialisasi. Oleh karena itu, kita menulis kelas halaman seperti berikut:
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class AdminUser extends TPage
-{
- /**
- * Mempopulai datagrid dengan daftar pengguna.
- * Metode ini dipanggil oleh kerangka kerja saat inisialisasi halaman
- * @param mixed event parameter
- */
- public function onInit($param)
- {
- parent::onInit($param);
- // ambil semua informasi data akun
- $this->UserGrid->DataSource=UserRecord::finder()->findAll();
- // mengikat data ke komponen antarmua
- $this->UserGrid->dataBind();
- }
-
- /**
- * Menghapus rekaman pengguna yang ditetapkan.
- * Metode ini merespon ke event OnDeleteCommand pada datagrid.
- * @param TDataGrid pengirim event
- * @param TDataGridCommandEventParameter parameter event
- */
- public function deleteButtonClicked($sender,$param)
- {
- // dapatkan item datagrid yang berisi tombol hapus yang diklik
- $item=$param->Item;
- // dapatkan kunci primer terkait ke item datagrid
- $username=$this->UserGrid->DataKeys[$item->ItemIndex];
- // menghapus rekaman pengguna dengan kunci primer nama pengguna
- UserRecord::finder()->deleteByPk($username);
- }
-}
-</com:TTextHighlighter>
-
-<p>
-Dalam kode di atas, metode <tt>deleteButtonClicked()</tt> dipanggil kapan saja tombol "Delete" diklik. untuk menentukan baris mana pada tombol yang diklik, kita memeriksa properti <tt>Item.ItemIndex</tt> pada parameter event. Untuk selanjutnya mengidentifikasi akun pengguna mana yang akan dihapus, kita mengambil nilai kunci primer (username) melalui properti <tt>DataKeys</tt> pada DataGrid.
-</p>
-
-<com:TipBox>
-Semua kontrol <a href="http://www.pradosoft.com/docs/classdoc/TDataBoundControl">data-bound</a> mempunyai pola penggunaan yang sama. Yaitu, Setel properti <tt>DataSource</tt> dengan data dan panggil metode <tt>dataBind()</tt> untuk mengikat data ke struktur internal kontrol.
-</com:TipBox>
-
-
-<h2>Pengujian</h2>
-<p>
-Untuk menguji halaman <tt>AdminUser</tt>, kunjungi URL <tt>http://hostname/blog/index.php?page=users.AdminUser</tt>. Anda mungkin perlu masuk sebagai administrator lebih dahulu jika Anda belum melakukannya. Kita akan melihat hasil seperti berikut.
-</p>
-
-<img src="<%~ output3.gif %>" class="output" />
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day3/id/CreateEditUser.page b/demos/blog-tutorial/protected/pages/Day3/id/CreateEditUser.page
deleted file mode 100755
index 2f03ecec..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/id/CreateEditUser.page
+++ /dev/null
@@ -1,212 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Membuat Halaman <tt>EditUser</tt></h1>
-
-<p>
-Halaman <tt>EditUser</tt> sangat mirip dengan <a href="?page=Day3.CreateNewUser">NewUser</a>. Perbedaan utamanya adalah bahwa saat <tt>EditUser</tt> awalnya diminta, field input harus diinisialisasi dengan informasi pengguna yang sudah ada. Sedikit perbedaan lainnya adalah bahwa <tt>EditUser</tt> juga bisa diakses oleh pengguna normal.
-</p>
-
-<p>
-Untuk menentukan akun pengguna mana yang diedit, kita menggunakan kebijakan berikut:
-</p>
-<ul>
-<li>Jika pengguna saat ini adalah administrator, dia dapat mengedit setiap akun pengguna dengan menetapkan akun nama pengguna dalam variabel GET bernama 'username'. Sebagai contoh, <tt>http://hostname/blog/index.php?page=users.EditUser&username=demo</tt>.</li>
-<li>Jika pengguna saat ini adalah administrator dan URL tidak berisi 'username', data administrator sendiri sedang dimutakhirkan.</li>
-<li>Jika pengguna saat ini adalah pengguna normal, dia hanya bisa mengedit informasi akunnya sendiri, dan dia tidak bisa memodifikasi data aturannya.</li>
-</ul>
-
-<p>
-Kita membuat dua file <tt>protected/pages/users/EditUser.page</tt> dan <tt>protected/pages/users/EditUser.php</tt> masing-masing untuk menyimpan template halaman dan kelas halaman.
-</p>
-
-<h2>Membuat Template Halaman</h2>
-<p>
-Seperti yang telah Anda tebak, template halaman <tt>EditUser</tt> sebagian besar sama seperti pada <tt>NewUser</tt>. Selain perbedaan dalam judul halaman dan judul tombol submit, ada tiga perbedaan utama.
-</p>
-<ul>
-<li>Kotak teks "username" diganti oleh kontrol <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.Label">TLabel</a> karena kita tidak membolehkan memodifikasi nama pengguna;</li>
-<li>Validator untuk input "password" dihilangkan. Ini dikarenakan jika pengguna tidak melengkapi kata sandi selama mengedit, itu berarti pengguna tidak ingin mengubah kata sandi.</li>
-<li>Input "role" dikelilingi oleh <tt>TControl</tt> yang penampakannya dihidup matikan berdasarkan aturan pengguna yang masuk saat ini. Jika pengguna bukan administrator, input "role" tidak akan ditampilkan karena pengguna normal tidak diperbolehkan untuk memodifikasi aturannya.</li>
-</ul>
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;%@ Title="My Blog - Edit User" %>
-
-&lt;com:TContent ID="Main">
-
-<h1>Edit User</h1>
-
-<span>Username:</span>
-&lt;com:TLabel ID="Username" />
-
-<br/>
-<span>Password:</span>
-<br/>
-&lt;com:TTextBox ID="Password" TextMode="Password" />
-
-<br/>
-<span>Re-type Password:</span>
-&lt;com:TCompareValidator
- ControlToValidate="Password"
- ControlToCompare="Password2"
- ErrorMessage="Your password entries did not match."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Password2" TextMode="Password" />
-
-<br/>
-<span>Email Address:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="Email"
- ErrorMessage="Please provide your email address."
- Display="Dynamic" />
-&lt;com:TEmailAddressValidator
- ControlToValidate="Email"
- ErrorMessage="You entered an invalid email address."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Email" />
-
-&lt;com:TControl Visible="&lt;%= $this->User->IsAdmin %>">
-<br/>
-<span>Role:</span>
-<br/>
-&lt;com:TDropDownList ID="Role">
- &lt;com:TListItem Text="Normal User" Value="0" />
- &lt;com:TListItem Text="Administrator" Value="1" />
-&lt;/com:TDropDownList>
-&lt;/com:TControl>
-
-<br/>
-<span>First Name:</span>
-<br/>
-&lt;com:TTextBox ID="FirstName" />
-
-<br/>
-<span>Last Name:</span>
-<br/>
-&lt;com:TTextBox ID="LastName" />
-
-<br/>
-&lt;com:TButton Text="Save" OnClick="saveButtonClicked" />
-
-&lt;/com:TContent>
-</com:TTextHighlighter>
-
-
-<h2>Membuat Kelas Halaman</h2>
-
-<p>
-Berdasarkan pada deskripsi di atas dan template, kita perlu menulis kelas halaman yang mengawali input dengan informasi pengguna yang sudah ada. Sebagai tambahan, kelas halaman juga perlu untuk mengimplementasikan metode <tt>saveButtonClicked()</tt> yang disertakan pada event tombol "save" <tt>OnClick</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class EditUser extends TPage
-{
- /**
- * Menginisialisasi input dengan data pengguna yang sudah ada.
- * Metode ini dipanggil oleh kerangka kerja saat halaman diinisialisasi.
- * @param mixed event parameter
- */
- public function onInit($param)
- {
- parent::onInit($param);
- if(!$this->IsPostBack) // jika halaman awalnya diminta
- {
- // Ambil data pengguna yang sudah ada. Ini sama dengan:
- // $userRecord=$this->getUserRecord();
- $userRecord=$this->UserRecord;
-
- // Populasikan kontrol input dengan data pengguna yang sudah ada
- $this->Username->Text=$userRecord->username;
- $this->Email->Text=$userRecord->email;
- $this->Role->SelectedValue=$userRecord->role;
- $this->FirstName->Text=$userRecord->first_name;
- $this->LastName->Text=$userRecord->last_name;
- }
- }
-
- /**
- * Menyimpan akun pengguna jika semua input sudah benar.
- * Metode ini merespon event OnClick pada tombol "save".
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function saveButtonClicked($sender,$param)
- {
- if($this->IsValid) // saat semua validasi sukses
- {
- // Ambil data pengguna yang sudah ada. Ini sama dengan:
- $userRecord=$this->UserRecord;
-
- // Ambil data input
- $userRecord->username=$this->Username->Text;
- // mutakhirkan kata sandi saat input tidak kosong
- if(!empty($this->Password->Text))
- $userRecord->password=$this->Password->Text;
- $userRecord->email=$this->Email->Text;
- // mutakhirkan aturan jika pengguna saat ini adalah administrator
- if($this->User->IsAdmin)
- $userRecord->role=(int)$this->Role->SelectedValue;
- $userRecord->first_name=$this->FirstName->Text;
- $userRecord->last_name=$this->LastName->Text;
-
- // simpan ke database melalui mekanisme Rekaman Aktif
- $userRecord->save();
-
- // alihkan browser ke homepage
- $this->Response->redirect($this->Service->DefaultPageUrl);
- }
- }
-
- /**
- * Mengembalikan data pengguna yang diedit.
- * @return UserRecord data pengguna yang diedit.
- * @throws THttpException jika data pengguna tidak ditemukan.
- */
- protected function getUserRecord()
- {
- // pengguna yang diedit adalah pengguna yang saat ini sudah masuk
- $username=$this->User->Name;
- // jika var GET 'username' tidak kosong dan pengguna saat ini adalah
- // administrator, lebih baik kita menggunakan nilai var GET.
- if($this->User->IsAdmin && $this->Request['username']!==null)
- $username=$this->Request['username'];
-
- // gunakan Rekaman Aktif untuk melihat nama pengguna yang ditetapkan
- $userRecord=UserRecord::finder()->findByPk($username);
- if(!($userRecord instanceof UserRecord))
- throw new THttpException(500,'Username is invalid.');
- return $userRecord;
- }
-}
-</com:TTextHighlighter>
-
-<com:TipBox>
-Metode <tt>onInit()</tt> dipanggil oleh PRADO selama salah satu <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Pages">masa hidup halaman</a>. Metode masa hidup umum lainnya ditimpa termasuk <tt>onPreInit()</tt>, <tt>onLoad()</tt> dan <tt>onPreRender()</tt>.
-</com:TipBox>
-
-<h2>Menambah Pemeriksaan Perijinan</h2>
-<p>
-Agar halaman <tt>EditUser</tt> juga bisa diakses oleh para pengguna (<tt>users="@"</tt>), kita juga perlu menyesuaikan file konfigurasi halaman <tt>protected/pages/users/config.xml</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<?xml version="1.0" encoding="utf-8"?>
-<configuration>
- <authorization>
- <allow roles="admin"/>
- <allow users="@" pages="EditUser"/>
- <deny users="*"/>
- </authorization>
-</configuration>
-</com:TTextHighlighter>
-
-
-<h2>Pengujian</h2>
-<p>
-Untuk menguji halaman <tt>EditUser</tt>, kunjungi URL <tt>http://hostname/blog/index.php?page=users.EditUser&username=demo</tt>. Anda mungkin perlu masuk lebih dulu jika Anda belum melakukannya. Coba masuk dengan akun berbeda (e.g. admin/demo, demo/demo) dan lihat bagaimana halaman ditampilkan secara berbeda.
-</p>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day3/id/CreateLoginUser.page b/demos/blog-tutorial/protected/pages/Day3/id/CreateLoginUser.page
deleted file mode 100755
index 1debbec0..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/id/CreateLoginUser.page
+++ /dev/null
@@ -1,162 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Membuat Halaman <tt>LoginUser</tt></h1>
-
-<p>
-Halaman <tt>LoginUser</tt> menampilkan formulir masuk dan mengotentikasi pengguna yang mencoba untuk masuk. Seperti dijelaskan dalam <a href="?page=Day3.Auth">otentikasi dan otorisasi</a>, browser pengguna secara otomatis dialihkan ke halaman <tt>LoginUser</tt> ketika pengguna mencoba untuk mengakses halaman istimewa, seperti misalhnya halaman admin pengguna.
-</p>
-
-<p>
-Alur kerja <tt>LoginUser</tt> sangat mirip dengan halaman <a href="?page=Day1.CreateContact">Contact</a>:
-</p>
-<ol>
-<li>Ketika pengguna mengakses halaman <tt>LoginUser</tt>, formulir masuk ditampilkan;</li>
-<li>Pengguna mengisi nama pengguna dan kata sandi serta mengklik pada tombol "login";</li>
-<li><tt>LoginUser</tt> menerima event "login" dan memicu rangkaian otentikasi;</li>
-<li>Jika pengguna memasukan nama pengguna dan kata sandi yang benar, sistem menempatkan identitas yang sah dan mengalihkan browser-nya ke halaman istimewa yang diinginkan; Jika tidak, pesan "password invalid" akan ditampilkan.
-</ol>
-
-<p>
-Kita membuat dua file <tt>protected/pages/users/LoginUser.page</tt> dan <tt>protected/pages/users/LoginUser.php</tt> masing-masing untuk menyimpan template halaman dan kelas halaman.
-</p>
-
-<h2>Membuat Template Halaman</h2>
-
-<p>
-Di bawah ini kita menampilkan template untuk <tt>LoginUser</tt>. Seperti kita lihat, halaman sebagian besar berisi kotak teks untuk mengumpulkan nama pengguna dan kotak teks untuk kata sandi. Input nama pengguna diperlukan, yang dipastikan oleh <tt>TRequiredFieldValidator</tt>. Kebenaran dari input kata sandi dipastikan oleh <a href="http://www.pradosoft.com/demos/quickstart/index.php?page=Controls.Validation">TCustomValidator</a> yang memanggil metode <tt>validateUser()</tt> halaman ketika validasi dilakukan. Halaman juga mempunyai tombol "login" yang memanggil <tt>loginButtonClicked()</tt> halaman ketika itu diklik.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;%@ Title="My Blog - Login" %>
-
-&lt;com:TContent ID="Main">
-
-<h1>Login</h1>
-
-<span>Username:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="Username"
- ErrorMessage="Please provide your username."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Username" />
-
-<br/>
-<span>Password:</span>
-&lt;com:TCustomValidator
- ControlToValidate="Password"
- ErrorMessage="Your entered an invalid password."
- Display="Dynamic"
- OnServerValidate="validateUser" />
-<br/>
-&lt;com:TTextBox ID="Password" TextMode="Password" />
-
-<br/>
-&lt;com:TButton Text="Login" OnClick="loginButtonClicked" />
-
-&lt;/com:TContent>
-</com:TTextHighlighter>
-
-<h2>Membuat Kelas Halaman</h2>
-
-<p>
-Seperti halaman <a href="?page=Day1.CreateContact">Contact</a>, halaman <tt>LoginUser</tt> juga memerlukan file kelas yang sebagian besar berisi implementasi pengendali event yang disertakan dalam template halaman. Di sini, kita perlu mengimplementasikan dua metode: <tt>validateUser()</tt> dan <tt>loginButtonClicked()</tt>. Dalam <tt>validateUser()</tt>, kita menggunakan <a href="?page=Day3.Auth">manajer otentikasi</a> untuk memverifikasi apakan nama pengguna serta kata sandinya sudah benar. Jika benar, manajer otentikasi akan secara otomatis membuat sesi pengguna dengan informasi identitas pengguna terkait.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class LoginUser extends TPage
-{
- /**
- * Validates whether the username and password are correct.
- * This method responds to the TCustomValidator's OnServerValidate event.
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function validateUser($sender,$param)
- {
- $authManager=$this->Application->getModule('auth');
- if(!$authManager->login($this->Username->Text,$this->Password->Text))
- $param->IsValid=false; // beritahu validator bawa validasi gagal
- }
-
- /**
- * Redirects the user's browser to appropriate URL if login succeeds.
- * This method responds to the login button's OnClick event.
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function loginButtonClicked($sender,$param)
- {
- if($this->Page->IsValid) // semua validasi sukses
- {
- // Dapatkan URL pada halaman istimewa yang diinginkan pengguna yang akan dikunjungi
- $url=$this->Application->getModule('auth')->ReturnUrl;
- if(empty($url)) // pengguna mengakses halaman masuk secara langsung
- $url=$this->Service->DefaultPageUrl;
- $this->Response->redirect($url);
- }
- }
-}
-</com:TTextHighlighter>
-
-
-<h2>Pengujian</h2>
-
-<p>
-Kita telah membuat halaman <tt>LoginUser</tt>. Kita dapat mengujinya dengan mengunjungi URL <tt>http://hostname/blog/index.php?page=users.LoginUser</tt>. Ingat dalam subbagian <a href="?page=Day2.CreateDB">Membuat Database</a>, kita sudah membuat dua akun pengguna (username/password): <tt>admin/demo</tt> dan <tt>demo/demo</tt>. Kita dapat menggunakannya untuk menguji halaman masuk kita.
-</p>
-
-<img src="<%~ output.gif %>" class="output"/>
-
-<h2>Menambahkan Link Login/Logout ke Master</h2>
-
-<p>
-Guna melengkapi cara langsung bagi pengguna untuk masuk dan keluar, kita memodifikasi sedikit kontrol master <tt>MainLayout</tt>. Dalam keadaan tertentu, kita menambahkan hiperlink "login" yang mengaitkan halaman <tt>LoginUser</tt>. Kita juga menambahkan tombol link "logout" yang mengeluarkan pengguna saat ia diklik.
-</p>
-
-<p>
-Kita memodifikasi bagian footer dari template <tt>MainLayout</tt> sebagai berikut. Penampakan "login" dan "logout" ditentukan berdasarkan status pengguna. Jika pengguna belum masuk, misalnya <tt>$this->User->IsGuest</tt> adalah true, link "login" terlihat sementara link "logout" tidak; dan begitu sebaliknya.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-<div id="footer">
-&lt;com:THyperLink Text="Login"
- NavigateUrl="&lt;%= $this->Service->constructUrl('users.LoginUser') %>"
- Visible="&lt;%= $this->User->IsGuest %>" />
-
-&lt;com:TLinkButton Text="Logout"
- OnClick="logoutButtonClicked"
- Visible="&lt;%= !$this->User->IsGuest %>" />
-
-<br/>
-&lt;%= PRADO::poweredByPrado() %>
-</div>
-</com:TTextHighlighter>
-
-<p>
-Karena tombol "logout" menempelkan event <tt>OnClick</tt> dengan metode yang dipanggil <tt>logoutButtonClicked()</tt>, kita juga perlu mengubah file kelas <tt>MainLayout</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class MainLayout extends TTemplateControl
-{
- /**
- * Logs out a user.
- * This method responds to the "logout" button's OnClick event.
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function logoutButtonClicked($sender,$param)
- {
- $this->Application->getModule('auth')->logout();
- $url=$this->Service->constructUrl($this->Service->DefaultPage);
- $this->Response->redirect($url);
- }
-}
-</com:TTextHighlighter>
-
-<p>
-Sekarang jika kita mengunjungi setiap halaman pada sistem blog kita, kita akah melihat apakah ada link di bawah halaman. Link menampilkan "Login" jika kita belum masuk dan "Logout" jika telah masuk. Jika kita mengklik pada "Logout", browser akan mengalihkannya ke homepage dan "Login" ditampilkan yang berarti kita sudah dikeluarkan.
-</p>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day3/id/CreateNewUser.page b/demos/blog-tutorial/protected/pages/Day3/id/CreateNewUser.page
deleted file mode 100755
index d90df01f..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/id/CreateNewUser.page
+++ /dev/null
@@ -1,210 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Membuat Halaman <tt>NewUser</tt></h1>
-
-<p>
-Halaman <tt>NewUser</tt> disediakan untuk pengguna administrator guna membuat akun pengguna baru. Ini perlu menampilkan sebuah formulir yang mengumpulkan informasi mengenai akun pengguna baru. Berdasarkan <a href="?page=Day2.CreateDB">definisi database</a>, kita akan perlu mengumpulkan informasi berikut:
-</p>
-
-<ul>
-<li><tt>username</tt> - string, diperlukan dan unik</li>
-<li><tt>email</tt> - string, diperlukan dan unik</li>
-<li><tt>password</tt> - string, diperlukan</li>
-<li><tt>role</tt> - integer, diperlukan (baik 0 ataupun 1)</li>
-<li><tt>first_name</tt> - string, opsional</li>
-<li><tt>last_name</tt> - string, opsional</li>
-</ul>
-
-<p>
-Kita membuat dua file <tt>protected/pages/users/NewUser.page</tt> dan <tt>protected/pages/users/NewUser.php</tt> masing-masing untuk menyimpan template halaman dan kelas halaman.
-</p>
-
-<h2>Membuat Template Halaman</h2>
-<p>
-Berdasarkan pada analisis di atas, kita menulis template halaman seperti berikut:
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;%@ Title="My Blog - New User" %>
-
-&lt;com:TContent ID="Main">
-
-<h1>Create New User</h1>
-
-<span>Username:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="Username"
- ErrorMessage="Please provide a username."
- Display="Dynamic" />
-&lt;com:TCustomValidator
- ControlToValidate="Username"
- ErrorMessage="Sorry, your username is taken by someone else. Please choose another username."
- OnServerValidate="checkUsername"
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Username" />
-
-<br/>
-<span>Password:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="Password"
- ErrorMessage="Please provide a password."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Password" TextMode="Password" />
-
-<br/>
-<span>Re-type Password:</span>
-&lt;com:TCompareValidator
- ControlToValidate="Password"
- ControlToCompare="Password2"
- ErrorMessage="Your password entries did not match."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Password2" TextMode="Password" />
-
-<br/>
-<span>Email Address:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="Email"
- ErrorMessage="Please provide your email address."
- Display="Dynamic" />
-&lt;com:TEmailAddressValidator
- ControlToValidate="Email"
- ErrorMessage="You entered an invalid email address."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="Email" />
-
-<br/>
-<span>Role:</span>
-<br/>
-&lt;com:TDropDownList ID="Role">
- &lt;com:TListItem Text="Normal User" Value="0" />
- &lt;com:TListItem Text="Administrator" Value="1" />
-&lt;/com:TDropDownList>
-
-<br/>
-<span>First Name:</span>
-<br/>
-&lt;com:TTextBox ID="FirstName" />
-
-<br/>
-<span>Last Name:</span>
-<br/>
-&lt;com:TTextBox ID="LastName" />
-
-<br/>
-&lt;com:TButton Text="Create" OnClick="createButtonClicked" />
-
-&lt;/com:TContent>
-</com:TTextHighlighter>
-
-<p>
-Template tidak jauh berbeda dari template <tt>Contact</tt> dan halaman <tt>LoginUser</tt>. Sebagian besar terdiri dari kotak teks dan validator. Beberapa kotak teks, seperti nama pengguna, dikaitkan dengan dua validator karena keterlibatan aturan multipel validasi.
-</p>
-
-
-<h2>Membuat Kelas Halaman</h2>
-
-<p>
-Dari template halaman di atas, kita melihat bahwa kita perlu untuk menulis sebuah kelas halaman yang mengimplementasikan dua pengendali event: <tt>checkUsername()</tt> (disertakan ke event validator kustom <tt>OnServerValidate</tt>) dan <tt>createButtonClicked()</tt> (disertakan ke event tombol "create" <tt>OnClick</tt>). Oleh karena itu, kita menulis kelas halaman seperti berikut:
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class NewUser extends TPage
-{
- /**
- * Memeriksa apakah nama pengguna sudah ada dalam database.
- * Metode ini merespon ke event OnServerValidate pada validator kustom nama pengguna.
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function checkUsername($sender,$param)
- {
- // benar jika nama pengguna tidak ditemukan dalam database
- $param->IsValid=UserRecord::finder()->findByPk($this->Username->Text)===null;
- }
-
- /**
- * Membuat akun pengguna baru jika semua input benar.
- * Metode ini merespon ke event OnClick pada tombol "create".
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function createButtonClicked($sender,$param)
- {
- if($this->IsValid) // ketika semua validasi sukses
- {
- // populasikan obyek UserRecord dengan input pengguna
- $userRecord=new UserRecord;
- $userRecord->username=$this->Username->Text;
- $userRecord->password=$this->Password->Text;
- $userRecord->email=$this->Email->Text;
- $userRecord->role=(int)$this->Role->SelectedValue;
- $userRecord->first_name=$this->FirstName->Text;
- $userRecord->last_name=$this->LastName->Text;
-
- // simpan database melalui mekanisme Rekaman Aktif
- $userRecord->save();
-
- // alihkan browser ke homepage
- $this->Response->redirect($this->Service->DefaultPageUrl);
- }
- }
-}
-</com:TTextHighlighter>
-
-<p>
-Dalam kode di atas, memanggil <tt>save()</tt> akan menyisipkan baris baru dalam tabel <tt>users</tt>. Fitur intuitif ini dihidupkan oleh <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Rekaman Aktif</a>.
-</p>
-
-<com:NoteBox>
-Untuk memudahkan, nama pengguna dalam sistem blg kita adalah tidak sensitif-huruf! Dalam banyak sistem praktis, nama pengguna mungkin perlu sensitif-huruf. Maka penanganan khusus perlu dibuat saat pembuatan akun pengguna baru dan juga <a href="?page=Day3.Auth">melakukan otentikasi</a>. Juga, ruang kosong dalam nama pengguna perlu dipotong ketika membuat akun baru dengan itu.
-</com:NoteBox>
-
-
-<h2>Pengujian</h2>
-<p>
-Untuk menguji halaman <tt>NewUser</tt>, kunjungi URL <tt>http://hostname/blog/index.php?page=users.NewUser</tt>. Kita akan melihat output halaman berikut. Coba masukan informasi berbeda ke dalam formulir dan lihat bagaimana input divalidasi. Jika semua aturan validasi memuaskan, kita akan mengharapkan akun pengguna dibuat dan browser dialihkan ke homepage.
-</p>
-
-<img src="<%~ output2.gif %>" class="output"/>
-
-
-<h2>Menambahkan Pemeriksaan Perijinan</h2>
-<p>
-Selama pengujian, Anda mungkin bertanya: apakah halaman <tt>NewUser</tt> seharusnya hanya bisa diakses oleh pengguna administrator? Ya, ini disebut <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.Auth">otorisasi</a>. Sekarang kami menjelaskan bagaimana kita menambahkan pemeriksaan perijinan ini ke halaman <tt>NewUser</tt>.
-</p>
-
-<p>
-Cara langsung pada pemeriksaan perijinan adalah dalam kelas halaman di mana kita memeriksa apakah <tt>$this->User->IsAdmin</tt> adalah true, dan jika tidak, kita mengalihkan browser ke halaman <tt>LoginUser</tt>.
-</p>
-
-<p>
-PRADO menawarkan cara lebih sistematis terhadap pemeriksaan perijinan akses halaman. Untuk melakukannyaTo , kita perlu menggunakan <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.PageConfig">konfigurasi halaman</a>. Membuat sebuah file <tt>protected/pages/users/config.xml</tt> dengan konten seperti berikut:
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<?xml version="1.0" encoding="utf-8"?>
-<configuration>
- <authorization>
- <allow roles="admin" />
- <deny users="*" />
- </authorization>
-</configuration>
-</com:TTextHighlighter>
-
-<p>
-Konfigurasi halaman berisi aturan otorisasi yang berlaku untuk halaman di bawah direktori <tt>protected/pages/users</tt>. Konfigurasi di atas terbaca bahwa para pengguna dalam role <tt>admin</tt> dapat mengakses semua halaman (lihat <a href="?page=Day3.Auth">BlogUser.createUser()</a> untuk mengapa harus kata "admin"). Untuk saat ini semua para pengguna lain (<tt>users="*"</tt>) ditolak untuk mengakses halaman dalam direktori ini - kecuali untuk halaman <tt>LoginUser</tt> yang seharusnya selalu bisa diakses.
-</p>
-
-<p>
-Sekarang jika kita mengunjungi halaman <tt>NewUser</tt> sebagai seorang tamu, kita akan dialihkan ke halaman <tt>LoginUser</tt> terlebih dahulu. Jika kita masuk dengan sukses, kita akan mengalihkan kembali ke halaman<tt>NewUser</tt>.
-</p>
-
-<com:TipBox>
-Konfigurasi halaman dapat berisi lebih dari satu aturan otorisasi. Sebagai contoh, ia dapat menyertakan <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Modules">modul</a> seperti yang ktia lakukan dalam <a href="?page=Day2.ConnectDB">konfigurasi aplikasi</a>. Untuk aplikasi PRADO, setiap direktori halaman dapat mempunyai konfigurasi halaman yang berlaku bagi halaman dalam direktori yang sama dan seluruh subdirektorinya.
-</com:TipBox>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day3/id/Overview.page b/demos/blog-tutorial/protected/pages/Day3/id/Overview.page
deleted file mode 100755
index 62c29438..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/id/Overview.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Tinjauan Manajemen Pengguna</h1>
-
-<p>
-Dalam bagian ini, kita membuat halaman yang terkait dengan manajemen pengguna. Dalam keadaan tertentu, kita mengimplementasikan fitur yang dibutuhkan ini: pengguna masuk/keluar, membuat akun pengguna baru dan memutakhirkan/menghapus akun pengguna.
-</p>
-
-<p>
-Berdasarkan kebutuhan, kita perlu membuat halaman berikut. Guna mengatur lebih baik kode kita, halaman terkait-pengguna ini akan dibuat di bawah direktori baru <tt>protected/pages/users</tt>.
-</p>
-
-<ul>
- <li><tt>LoginUser</tt> menampilkan formulir login untuk memasukan pengguna.</li>
- <li><tt>NewUser</tt> membuat akun pengguna baru.</li>
- <li><tt>EditUser</tt> membolehkan pengguna teregistrasi memutakhirkan profilnya.</li>
- <li><tt>AdminUser</tt> membolehkan administrator untuk mengatur akun pengguna, termasuk setelan tingkat perijinan dan menghapus akun pengguna.</li>
-</ul>
-
-<p>
-Setelah menyelesaikan bagian ini, kita mengharapkan bisa melihat direktori dan file berikut:
-</p>
-
-<img src="<%~ directories.gif %>" class="output" />
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day3/id/directories.gif b/demos/blog-tutorial/protected/pages/Day3/id/directories.gif
deleted file mode 100755
index f59fda58..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/id/directories.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day3/id/output.gif b/demos/blog-tutorial/protected/pages/Day3/id/output.gif
deleted file mode 100755
index 0d812dd0..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/id/output.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day3/id/output2.gif b/demos/blog-tutorial/protected/pages/Day3/id/output2.gif
deleted file mode 100755
index 749255d6..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/id/output2.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day3/id/output3.gif b/demos/blog-tutorial/protected/pages/Day3/id/output3.gif
deleted file mode 100755
index a11ee653..00000000
--- a/demos/blog-tutorial/protected/pages/Day3/id/output3.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day4/CreateListPost.page b/demos/blog-tutorial/protected/pages/Day4/CreateListPost.page
index 1dada650..1c266c83 100755
--- a/demos/blog-tutorial/protected/pages/Day4/CreateListPost.page
+++ b/demos/blog-tutorial/protected/pages/Day4/CreateListPost.page
@@ -28,8 +28,8 @@ We now create the template and class files for the <tt>ListPost</tt> page: <tt>p
Based on the functionality requirement of the <tt>ListPost</tt> page, we will use two controls in the page template:
</p>
<ul>
-<li><a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.Repeater">TRepeater</a>: this control is mainly used to display a list of data items. The presentation of the each data item can be specified via an inline template or an external template control (the approach we will use here).</li>
-<li><a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.Pager">TPager</a>: this control is used to paginate a list of data items. It interacts with end-users to determine which page of data to be displayed in a <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.List">list control</a> (e.g. <tt>TListBox</tt>) or <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.Data">data control</a> (e.g. <tt>TRepeater</tt>).</li>
+<li><a href="http://www.pradoframework.net/site/demos/quickstart/?page=Controls.Repeater">TRepeater</a>: this control is mainly used to display a list of data items. The presentation of the each data item can be specified via an inline template or an external template control (the approach we will use here).</li>
+<li><a href="http://www.pradoframework.net/site/demos/quickstart/?page=Controls.Pager">TPager</a>: this control is used to paginate a list of data items. It interacts with end-users to determine which page of data to be displayed in a <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Controls.List">list control</a> (e.g. <tt>TListBox</tt>) or <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Controls.Data">data control</a> (e.g. <tt>TRepeater</tt>).</li>
</ul>
<p>
diff --git a/demos/blog-tutorial/protected/pages/Day4/CreateNewPost.page b/demos/blog-tutorial/protected/pages/Day4/CreateNewPost.page
index 7797efaa..fe36b3ff 100755
--- a/demos/blog-tutorial/protected/pages/Day4/CreateNewPost.page
+++ b/demos/blog-tutorial/protected/pages/Day4/CreateNewPost.page
@@ -51,7 +51,7 @@ We now create two files <tt>protected/pages/posts/NewPost.page</tt> and <tt>prot
<h2>Creating Page Template</h2>
<p>
-The <tt>NewPost</tt> page template contains a <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.TextBox">TTextBox</a> to collect the post title and a <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.HtmlArea">THtmlArea</a> to collect the post content. The latter is a WYSIWYG HTML editor. To ensure the user input is valid, we associate validators with these input controls.
+The <tt>NewPost</tt> page template contains a <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Controls.TextBox">TTextBox</a> to collect the post title and a <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Controls.HtmlArea">THtmlArea</a> to collect the post content. The latter is a WYSIWYG HTML editor. To ensure the user input is valid, we associate validators with these input controls.
</p>
<com:TTextHighlighter CssClass="source" Language="prado">
diff --git a/demos/blog-tutorial/protected/pages/Day4/fr/CreateEditPost.page b/demos/blog-tutorial/protected/pages/Day4/fr/CreateEditPost.page
deleted file mode 100755
index 09220322..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/fr/CreateEditPost.page
+++ /dev/null
@@ -1,136 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Création de la page modification d'un message <tt>EditPost</tt></h1>
-
-
-<p>
-La page <tt>EditPost</tt> est fournie aux auteurs et administrateurs pour modifier les messages. Comme la page <a href="?page=Day4.CreateNewPost">NewPost</a>, elle affiche un formulaire permettant de modifier les données d'un message.
-</p>
-
-
-<p>
-Nous créons deux fichiers <tt>protected/pages/posts/EditPost.page</tt> et <tt>protected/pages/posts/EditPost.php</tt> contenant respectivement le gabarit et la classe de notre page.
-</p>
-
-<h2>Création du gabarit</h2>
-<p>
-Le gabarit de la page <tt>EditPost</tt> est très proche de celui de la page <tt>NewPost</tt> template. Seul le titre et le texte du bouton sont différents.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;%@ Title="Mon Blog - Modification Message" %>
-
-&lt;com:TContent ID="Main">
-
-<h1>Modification message</h1>
-
-<span>Titre:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="TitleEdit"
- ErrorMessage="Veuillez indiquer un titre."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="TitleEdit" Columns="50" />
-
-<br/>
-<span>Message:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="ContentEdit"
- ErrorMessage="Veuillez indiquer le contenu du message."
- Display="Dynamic" />
-<br/>
-&lt;com:THtmlArea ID="ContentEdit" />
-
-<br/>
-&lt;com:TButton Text="Enregistrer" OnClick="saveButtonClicked" />
-
-&lt;/com:TContent>
-</com:TTextHighlighter>
-
-
-<h2>Création du fichier de classe</h2>
-
-
-<p>
-La classe de <tt>EditPage</tt> est un peu plus complexe que celle de la page <tt>NewPage</tt> parce qu'elle doit lire les informations auparavant. Elle doit aussi vérifier les autorisations. En particulier, elle doit s'assurer que le message ne puisse être modifié que par l'auteur ou par un administrateur. Ces vérifications d'autorisation ne sont pas fournies par PRADO.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class EditPost extends TPage
-{
- /**
- * initialise les contrôles de saisies avec les données du message.
- * cette méthode est appelée lors de l'initialisation de la page
- * @param mixed param : paramètres de l'évènement
- */
- public function onInit($param)
- {
- parent::onInit($param);
- // récupère les données de l'utilisateur. Equivalent à:
- // $postRecord=$this->getPost();
- $postRecord=$this->Post;
- // vérification des droits: seul l'auteur ou un administrateur peuvent modifier le message
- if($postRecord->author_id!==$this->User->Name && !$this->User->IsAdmin)
- throw new THttpException(500,'Vous n êtes pas autoriser à modifier ce message.');
-
- if(!$this->IsPostBack) // est-ce le premier appel à la page
- {
- // rempli les contrôles avec les données du message
- $this->TitleEdit->Text=$postRecord->title;
- $this->ContentEdit->Text=$postRecord->content;
- }
- }
-
- /**
- * Enregistre si toutes les validations sont Ok
- * cette méthode répond à l'évènement OnClick du bouton "Enregistrer".
- * @param mixed sender : celui qui a généré l'évènement
- * @param mixed param : paramètres de l'évènement
- */
- public function saveButtonClicked($sender,$param)
- {
- if($this->IsValid) // toutes les validations sont ok ?
- {
- // récupère les données de l'utilisateur. Equivalent à:
- // $postRecord=$this->getPost();
- $postRecord=$this->Post;
-
- // affecte les données saisies aux champs de la BDD
- $postRecord->title=$this->TitleEdit->SafeText;
- $postRecord->content=$this->ContentEdit->SafeText;
-
- // enregistre les données par la méthode save de l'Active Record
- $postRecord->save();
-
- // redirige le navigateur vers la page ReadPost
- $url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id));
- $this->Response->redirect($url);
- }
- }
-
- /**
- * retourne les données du message devant être modifiées.
- * @return PostRecord les données devant être modifiés.
- * @throws THttpException si le message est inexistant.
- */
- protected function getPost()
- {
- // l'ID du message devant être modifié passé par un paramètre GET
- $postID=(int)$this->Request['id'];
- // utilise Active Record pour lire le message correspondant à cet ID
- $postRecord=PostRecord::finder()->findByPk($postID);
- if($postRecord===null)
- throw new THttpException(500,'Message inexistant.');
- return $postRecord;
- }
-}
-</com:TTextHighlighter>
-
-<h2>Test</h2>
-<p>
-Pour tester notre page <tt>EditPost</tt>, authentifiez-vous auparavant et allez à l'URL <tt>http://hostname/blog/index.php?page=EditPost&id=1</tt>. Cette URL peut aussi être atteinte par le bouton <tt>Modifier</tt> de notre page de détail.
-</p>
-
-<img src="<%~ output4.gif %>" class="output" />
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day4/fr/CreateListPost.page b/demos/blog-tutorial/protected/pages/Day4/fr/CreateListPost.page
deleted file mode 100755
index ab6ddfc4..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/fr/CreateListPost.page
+++ /dev/null
@@ -1,182 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Création de la page d'affichage des messages <tt>ListPost</tt></h1>
-
-<p>
-La page <tt>ListPost</tt> affiche les derniers messages sous forme de liste. S'il y a trop de messages, ils seront affichés dans différentes pages.
-</p>
-
-<p>
-Avant que nous ne passions à l'implémentation, nous voudrions que notre page d'accueil pointe vers la page à venir <tt>ListPost</tt>, ceci dans le but d'afficher la liste des derniers messages dès qu'un utilisateur se connecte au site. Pour cela, nous allons modifier le fichier de configuration de l'application <tt>protected/application.xml</tt> de cette manière.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-......
-<services>
- <service id="page" class="TPageService" DefaultPage="posts.ListPost">
- <pages MasterClass="Application.layouts.MainLayout" />
- </service>
-</services>
-</com:TTextHighlighter>
-
-<p>
-Nous alons maintenant créer le gabarit et le fichier de classe pour notre page <tt>ListPost</tt> : <tt>protected/pages/posts/ListPost.page</tt> et <tt>protected/pages/posts/ListPost.php</tt>.
-</p>
-
-<h2>Création du gabarit</h2>
-<p>
-Pour satisfaire les fonctionnalités de notre page <tt>ListPost</tt>, nous allons utiliser deux contrôles dans notre gabarit.
-</p>
-<ul>
-<li><a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.Repeater">TRepeater</a>: ce contrôle permet d'afficher principalement une liste d'éléments. La présentation de chacun ce ces éléments peut être défini soit par un gabarit interne, soit par un gabarit externe (choix que nous avons fait).</li>
-<li><a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.Pager">TPager</a>: ce contrôle permet de faire la pagination d'une liste d'éléments. Il interagit avec l'utilisateur pour définir quelle page doit être affiché dans un <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.List">contrôle de liste</a> (ie: <tt>TListBox</tt>) ou dans un <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.Data">contrôle de données</a> (ie: <tt>TRepeater</tt>).</li>
-</ul>
-<p>
-Ci-dessous le contenu du gabarit :
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;%@ Title="Mon Blog" %>
-
-&lt;com:TContent ID="Main">
-
-&lt;com:TRepeater ID="Repeater"
- ItemRenderer="Application.pages.posts.PostRenderer"
- AllowPaging="true"
- AllowCustomPaging="true"
- PageSize="5"
- />
-
-&lt;com:TPager ControlToPaginate="Repeater" OnPageIndexChanged="pageChanged" />
-
-&lt;/com:TContent>
-</com:TTextHighlighter>
-
-<p>
-Dans la partie répétée <tt>TRepeater</tt>, nous indiquons que l'affichage du contenu est délégué à l'élément <tt>PostRenderer</tt> que nous allons créer après. Pour permettre à PRADO de trouver cette classe, nous fournissons l'espace de noms complet <tt>Application.pages.posts.PostRenderer</tt>, qui correspond au fichier <tt>protected/pages/posts/PostRenderer.php</tt>.
-</p>
-
-<p>
-Nous définissons aussi quelques propriétés complémentaires du <tt>TRepeater</tt> pour activer la pagination. Et nous définissons la propriété <tt>ControlToPaginate</tt> du <tt>TPager</tt> afin qu'il sache quelle est la zone répetée à paginer.
-</p>
-
-
-<h2>Création du fichier de classe</h2>
-<p>
-En fonction du gabarit précédent, nous pouvons voir que notre fichier de classe doit implémenter un gestionnaire d'évènement pour <tt>pageChanged()</tt> (déclenché par <tt>OnPageIndexChanged</tt> du <tt>TPager</tt>). Nous devons aussi remplir les données qui apparaitront dans le <tt>TRepeater</tt>. Ci-dessous le source complet du fichier de classe :
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class ListPost extends TPage
-{
- /**
- * Initialise le TRepeater.
- * Cette méthode est appelé par le framework lors de l'initialisation de la page
- * @param mixed param : paramètres de l'évènement
- */
- public function onInit($param)
- {
- parent::onInit($param);
- if(!$this->IsPostBack) // la page est chargée pour la première fois ?
- {
- // récupère le nombre total de messages
- $this->Repeater->VirtualItemCount=PostRecord::finder()->count();
- // rempli le TRepeater avec les données
- $this->populateData();
- }
- }
-
- /**
- * Gestionnaire d'évènement pour OnPageIndexChanged du TPager.
- * Cette méthode est appelée lors du changement de page
- */
- public function pageChanged($sender,$param)
- {
- // change l'index de la page courante par le nouvel index
- $this->Repeater->CurrentPageIndex=$param->NewPageIndex;
- // rempli de nouveau le TRepeater
- $this->populateData();
- }
-
- /**
- * détermine quelle page doit être affichée et remplie
- * TRepeater avec les données lues
- */
- protected function populateData()
- {
- $offset=$this->Repeater->CurrentPageIndex*$this->Repeater->PageSize;
- $limit=$this->Repeater->PageSize;
- if($offset+$limit>$this->Repeater->VirtualItemCount)
- $limit=$this->Repeater->VirtualItemCount-$offset;
- $this->Repeater->DataSource=$this->getPosts($offset,$limit);
- $this->Repeater->dataBind();
- }
-
- /**
- * lis les données à partir de la base de données en utilisant les fonctionnalités offset et limit.
- */
- protected function getPosts($offset, $limit)
- {
- // construit les critères de la requête
- $criteria=new TActiveRecordCriteria;
- $criteria->OrdersBy['create_time']='desc';
- $criteria->Limit=$limit;
- $criteria->Offset=$offset;
- // lit les messages en fonction des critères précédents
- return PostRecord::finder()->withAuthor()->findAll($criteria);
- }
-}
-</com:TTextHighlighter>
-
-<h2>Création du <tt>PostRenderer</tt></h2>
-
-<p>
-Nous devons toujours créer la classe <tt>PostRenderer</tt>. Elle définit la manière dont sera affichée chaque ligne de notre <tt>TRepeater</tt>. Nous la créons en tant que gabarit de contrôle, ce qui nous permet d'utiliser notre système de gabarit. Le fichier de gabarit ainsi que notre fichier de classe seront sauvegardés respectivement sous <tt>PostRenderer.tpl</tt> et <tt>PostRenderer.php</tt> dans le dossier <tt>protected/pages/posts</tt>.
-</p>
-<h3>Création du gabarit pour <tt>PostRenderer</tt></h3>
-<p>
-Le gabarit définit la présentation des différentes informations d'un message : titre, nom, heure, contenu. Nous lions le titre à la page <tt>ReadPost</tt> qui affiche le détail du message.
-</p>
-<p>
-L'expression <tt>$this->Data</tt> fait référence aux données provenant du <tt>TRepeater</tt>. Dans notre cas, c'est un objet de type <tt>PostRecord</tt>. Remarquez comment nous accédons au nom de l'auteur du message par <tt>$this->Data->author->username</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-<div class="post-box">
-<h3>
-&lt;com:THyperLink Text="&lt;%# $this->Data->title %>"
- NavigateUrl="&lt;%# $this->Service->constructUrl('posts.ReadPost',array('id'=>$this->Data->post_id)) %>" />
-</h3>
-
-<p>
-Auteur:
-&lt;com:TLiteral Text="&lt;%# $this->Data->author->username %>" /><br/>
-Heure:
-&lt;com:TLiteral Text="&lt;%# date('m/d/Y h:m:sa', $this->Data->create_time) %>" />
-</p>
-
-<p>
-&lt;com:TLiteral Text="&lt;%# $this->Data->content %>" />
-</p>
-</div>
-</com:TTextHighlighter>
-
-<h3>Création du fichier de classe pour <tt>PostRenderer</tt></h3>
-
-<p>
-Notre classe est très simple, elle hérite de <tt>TRepeaterItemRenderer</tt> et ne contient aucun autre code.
-</p>
-<com:TTextHighlighter CssClass="source" Language="php">
-class PostRenderer extends TRepeaterItemRenderer
-{
-}
-</com:TTextHighlighter>
-
-<h2>Test</h2>
-<p>
-Pour tester la page <tt>ListPost</tt>, naviguons à l'URL <tt>http://hostname/blog/index.php</tt> (rappellez-vous, nous avons défini <tt>ListPost</tt> comme étant notre page d'accueil). Nous devrions obtenir le résultat suivant. vu que nous n'avons qu'un seul message pour le moment, le contrôle de pagination n'apparait pas. Plus tard, quand nous aurons fini la page <tt>NewPost</tt>, nous pourrons ajouter des messages et revenir ici pour tester notre contrôle de pagination.
-</p>
-
-<img src="<%~ output.gif %>" class="output" />
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day4/fr/CreateNewPost.page b/demos/blog-tutorial/protected/pages/Day4/fr/CreateNewPost.page
deleted file mode 100755
index 9ddd97b9..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/fr/CreateNewPost.page
+++ /dev/null
@@ -1,144 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Création de la page nouveau message <tt>NewPost</tt></h1>
-
-<p>
-La page <tt>NewPost</tt> permet aux utilisateurs authentifiés de créer des nouveaux messages. Elle doit afficher un formulaire permettant la saisie des informations du message.
-</p>
-
-
-<p>
-Parce que la page <tt>NewPost</tt> ne peut être vue que par les utilisateurs authentifiés, nous ajoutons un fichier de configuration de page <tt>config.xml</tt> dans le dossier <tt>protected/pages/posts</tt>. Ce fichier indique que seuls les utilisateurs authentifiés peuvent voir les pages <tt>NewPost</tt> et <tt>EditPost</tt> qui sera implémentée dans la section suivante. Tous les autres utilisateurs n'ont accès qu'aux pages <tt>ListPost</tt> et <tt>ReadPost</tt>.
-</p>
-
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<?xml version="1.0" encoding="utf-8"?>
-<configuration>
- <authorization>
- <allow pages="NewPost,EditPost" users="@" />
- <allow pages="ListPost,ReadPost" />
- <deny users="*" />
- </authorization>
-</configuration>
-</com:TTextHighlighter>
-
-<com:TipBox>
- Il est souvent utile de démarrer les règles d'autorisation par un <tt>&lt;deny users="*"&gt;</tt>, puis, de le compléter en donnant pas à pas les accès aux différentes pages à l'aides de règles <tt>allow</tt> supplémentaires
-</com:TipBox>
-<p>
-Vu le nombre grandissant de pages, nous allons modifier le pied de page de notre <tt>gabarit principal</tt> pour qu'il inclus des liens vers : la page d'accueil, la page nouvel utilisateur <a href="?page=Day3.CreateNewUser">NewUser</a> (visible seulement par les administrateurs), et la page à venir : nouveau message <tt>NewPost</tt> (visible seulement par les utilisateurs authentifiés).
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-<div id="footer">
-&lt;com:THyperLink Text="Accueil"
- NavigateUrl="&lt;%= $this->Service->DefaultPageUrl %>" />
-
-&lt;com:THyperLink Text="Nouveau message"
- NavigateUrl="&lt;%= $this->Service->constructUrl('posts.NewPost') %>"
- Visible="&lt;%= !$this->User->IsGuest %>" />
-
-&lt;com:THyperLink Text="Nouvel utilisateur"
- NavigateUrl="&lt;%= $this->Service->constructUrl('users.NewUser') %>"
- Visible="&lt;%= $this->User->IsAdmin %>" />
-...autres liens...
-</div>
-</com:TTextHighlighter>
-
-<p>
-Nous allons maintenant créer deux fichiers <tt>protected/pages/posts/NewPost.page</tt> et <tt>protected/pages/posts/NewPost.php</tt> contenant respectivement le gabarit et la classe de notre page.
-</p>
-
-
-<h2>Création du gabarit</h2>
-<p>
-Le gabarit de <tt>NewPost</tt> contient une référence à un <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.TextBox">TTextBox</a> pour saisir le titre de notre message et à un <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.HtmlArea">THtmlArea</a> pour saisir le contenu. Ce dernier est un éditeur WYSIWYG HTML. Pour contrôler les valeurs saisies, nous associons des validateurs aux contrôles précédents.
-</p>
-
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;%@ Title="Mon Blog - Nouveau Message" %>
-
-&lt;com:TContent ID="Main">
-
-<h1>Création nouveau message</h1>
-
-<span>Titre:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="TitleEdit"
- ErrorMessage="Veuillez indiquer un titre."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="TitleEdit" Columns="50" />
-
-<br/>
-<span>Message:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="ContentEdit"
- ErrorMessage="Veuillez indiquer le contenu du message."
- Display="Dynamic" />
-<br/>
-&lt;com:THtmlArea ID="ContentEdit" />
-
-<br/>
-&lt;com:TButton Text="Ajouter" OnClick="createButtonClicked" />
-
-&lt;/com:TContent>
-</com:TTextHighlighter>
-
-
-<h2>Création du fichier de classe</h2>
-<p>
-Dans le gabarit précédent, nous voyons que la fonction principale de notre page est l'appel de la méthode <tt>createButtonClicked()</tt> implémenté par un évènement <tt>OnClick</tt> attaché au bouton <tt>Ajouter</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class NewPost extends TPage
-{
- /**
- * création d'un nouveau message si toutes les données sont valides.
- * cette méthode est appelée par l'évènement OnClick du bouton "Ajouter".
- * @param mixed sender : celui qui a généré l'évènement
- * @param mixed param : paramètres de l'évènement
- */
- public function createButtonClicked($sender,$param)
- {
- if($this->IsValid) // tous les validateurs sont Ok ?
- {
- // créer un nouvel objet PostRecord avec les données du formulaire
- $postRecord=new PostRecord;
- // utiliser SafeText à la place de Text évite les attaques XSS
- $postRecord->title=$this->TitleEdit->SafeText;
- $postRecord->content=$this->ContentEdit->SafeText;
- $postRecord->author_id=$this->User->Name;
- $postRecord->create_time=time();
- $postRecord->status=0;
-
- // enregistre les données dans la BDD par la méthode save de l'Active Record
- $postRecord->save();
-
- // redirige le navigateur vers le message nouvellement créé
- $url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id));
- $this->Response->redirect($url);
- }
- }
-}
-</com:TTextHighlighter>
-
-<h2>Test</h2>
-<p>
-Pour tester notre page <tt>NewPost</tt>, identifiez-vous auparavant et cliquez sur le lien <tt>Nouveau message</tt> dans le pied de page. Le navigateur affiche le résultat suivant avec comme URL <tt>http://hostname/blog/index.php?page=NewPost</tt>.
-</p>
-
-<com:InfoBox>
-Quand vous visitez la page <tt>NewPost</tt> pour la première fois, vous pourrez remarquer qu'elle mettra plusieurs secondes avant de s'afficher. Ceci est dû au fait que PRADO a besoin de décompresser et de publier le code javascript et les images pour l'éditeur WYSIWYG du contrôle <tt>THtmlArea</tt>. Ceci est fait une fois pour toutes.
-</com:InfoBox>
-
-<com:TipBox>
-Pour tester la fonctionnalité de pagination que nous avons mise en place dans la page <a href="?page=Day4.CreateListPost">ListPost</a>, nous pouvons créer cinq messages ou plus et regardez ce qu'il se passe sur la page d'accueil. Le contrôle <tt>TPager</tt> de la page <tt>ListPost</tt> affiche cinq éléments par page.
-</com:TipBox>
-
-<img src="<%~ output3.gif %>" class="output" />
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day4/fr/CreateReadPost.page b/demos/blog-tutorial/protected/pages/Day4/fr/CreateReadPost.page
deleted file mode 100755
index 385737d3..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/fr/CreateReadPost.page
+++ /dev/null
@@ -1,135 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Création de la page détail d'un message <tt>ReadPost</tt></h1>
-
-<p>
-La page <tt>ReadPost</tt> affiche le détail d'un message. Pour les utilisateurs autorisés, un lien sera disponible permettant de modifier ou de supprimer le message.
-</p>
-
-<p>
-Nous créons deux fichiers <tt>protected/pages/posts/ReadPost.page</tt> et <tt>protected/pages/posts/ReadPost.php</tt> qui contiendront respectivement notre gabarit et notre classe.
-</p>
-
-<h2>Création du gabarit</h2>
-<p>
-Le gabarit de <tt>ReadPost</tt> est très proche du gabarit de <tt>PostRenderer</tt>, chacun d'eux affiche le détail d'un message. La différence est que la page <tt>ReadPost</tt> doit afficher deux boutons, permettant aux utilisateurs autorisés de modifier ou supprimer le message.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;com:TContent ID="Main">
-
-<h2>
-&lt;com:TLiteral Text="&lt;%= $this->Post->title %>" />
-</h2>
-
-&lt;com:TControl Visible="&lt;%= $this->canEdit() %>">
- <a href="&lt;%= $this->Service->constructUrl('posts.EditPost',array('id'=>$this->Post->post_id))%>">Modifier</a> |
- &lt;com:TLinkButton Text="Supprimer"
- OnClick="deletePost"
- Attributes.onclick="javascript:if(!confirm('Etes vous sûr ?')) return false;" />
-&lt;/com:TControl>
-
-<p>
-Auteur:
-&lt;com:TLiteral Text="&lt;%= $this->Post->author->username %>" /><br/>
-Heure:
-&lt;com:TLiteral Text="&lt;%= date('m/d/Y h:m:sa', $this->Post->create_time) %>" />
-</p>
-
-<p>
-&lt;com:TLiteral Text="&lt;%= $this->Post->content %>" />
-</p>
-
-&lt;/com:TContent>
-</com:TTextHighlighter>
-
-<p>
-Plusieurs expressions PHP sont utilisées dans le gabarit. L'expression <tt>$this->Post</tt> fait référence à la propriété définie dans la classe de <tt>ReadPost</tt>. Elle représente l'objet <tt>PostRecord</tt> correspondant au message actuel.
-</p>
-
-<com:InfoBox>
-Même si nous utilisons régulièrement des expressions dans nos gabarits, nous n'en abusons pas. Une des règles principales pour savoir si l'on doit utiliser une expression est <i>l'expression doit être une propriété ou une simple mise en forme d'une propriété</i>. En suivant cette ligne de conduite, nous nous assurons d'une bonne séparation entre le contenu et la présentation, sans perdre en flexibilité.
-</com:InfoBox>
-
-<p>
-Nous pouvons aussi remarquer dans le gabarit précédent, que, nos deux boutons sont entourés d'un <tt>TControl</tt> dont la propriété 'visible' est déterminée par l'expression <tt>$this->canEdit()</tt>. Pour le bouton <tt>Supprimer</tt>, nous utilisons une boite de dialogue javascript pour confirmer la suppression du message.
-Nous pouvons aussi remarquer dans le gabarit précédent, que, nos deux boutons sont entourés d'un <tt>TControl</tt> dont la propriété 'visible' est déterminée par l'expression <tt>$this->canEdit()</tt>. Pour le bouton <tt>Supprimer</tt>, nous utilisons une boite de dialogue javascript pour confirmer la suppression du message.
-</p>
-
-<com:InfoBox>
-Tous les contrôles PRADO, ont une propriété très utile <tt>Attributes</tt> qui accepte n'importe quelle paire de valeurs (nom-valeur). La plupart des contrôles PRADO répercutent directement ces informations dans la balise HTML. Par exemple, dans le bouton <tt>Supprimer</tt> nous définissons <tt>onclick</tt> qui est directement reporté dans la balise <tt>&lt;a&gt;</tt> sous forme d'un attribut <tt>onclick</tt>.
-</com:InfoBox>
-
-<h2>Création du fichier de classe</h2>
-
-<p>
-Dans le gabarit précédent, nous voyons que notre classe doit implémenter le gestionnaire d'évènement <tt>deletePost()</tt> (attaché à l'évènement <tt>Onclick</tt> de notre bouton <tt>Supprimer</tt>). Nous devons aussi lire les données du message dont l'ID est passé par un paramètre GET.</p>
-
-<com:InfoBox>
-Nous implémentons la fonctionnalité suppression dans le classe <tt>ReadPost</tt> parce qu'il est classique de faire ainsi. Quand l'utilisateur clique sur le bouton <tt>Supprimer</tt>, une boite de dialogue demande confirmation de la suppression. Si l'utilisateur confirme, l'évènement <tt>OnClick</tt> du bouton <tt>Supprimer</tt> est déclenché.
-</com:InfoBox>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class ReadPost extends TPage
-{
- private $_post;
- /**
- * lis les données du message.
- * cette méthode est appelée lors de l'initialisation de la page
- * @param mixed param : paramètres de l'évènement
- */
- public function onInit($param)
- {
- parent::onInit($param);
- // id du message passé par un paramètre GET
- $postID=(int)$this->Request['id'];
- // lis le message ainsi que les données correspondantes à l'auteur
- $this->_post=PostRecord::finder()->withAuthor()->findByPk($postID);
- if($this->_post===null) // si l'id du message est invalide
- throw new THttpException(500, 'Impossible de trouver le message demandé.');
- // défini le titre de la page comme étant celui du message
- $this->Title=$this->_post->title;
- }
-
- /**
- * @return PostRecord retourne l'objet PostRecord correspondant au message
- */
- public function getPost()
- {
- return $this->_post;
- }
-
- /**
- * supprime le message actuellement visualisé
- * cette méthode est appelée par l'évènement OnClick du bouton "Supprimer"
- */
- public function deletePost($sender,$param)
- {
- // seul l'auteur ou un administrateur peuvent supprimer le message
- if(!$this->canEdit())
- throw new THttpException('Nous n'êtes pas autorisé à effectuer cette action.');
- // le supprime de la base de données
- $this->_post->delete();
- // redirige le navigateur vers la page d'accueil
- $this->Response->redirect($this->Service->DefaultPageUrl);
- }
-
- /**
- * @return boolean infiquant si le message peut être modifier ou supprimer par l'utilisateur actuel
- */
- public function canEdit()
- {
- // seul l'auteur ou un administrateur peuvent modifier/supprimer le message
- return $this->User->Name===$this->Post->author_id || $this->User->IsAdmin;
- }
-}
-</com:TTextHighlighter>
-
-<h2>Test</h2>
-<p>
-Pour tester notre page <tt>ReadPost</tt>, allons à l'URL <tt>http://hostname/blog/index.php</tt> et cliquons sur le titre du seul message affiché. Notre navigateur devrait afficher le résultat suivant avec l'URL <tt>http://hostname/blog/index.php?page=ReadPost&id=1</tt>. Notez que si vous n'êtes pas connecté, les deux boutons ne sont pas visibles.
-</p>
-
-<img src="<%~ output2.gif %>" class="output" />
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day4/fr/Overview.page b/demos/blog-tutorial/protected/pages/Day4/fr/Overview.page
deleted file mode 100755
index baaf13af..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/fr/Overview.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Vue d'ensemble de la gestion des messages</h1>
-
-<p>
-Dans cette section, nous allons créer les pages correspondantes à la gestion des messages. En particulier, nous mettrons en place les quatre opérations de base (Création-Lecture-Modification-Suppression) (CRUD:Create-Retrieve-Update-Delete).
-</p>
-
-
-<p>
-Nous allons créer les nouvelles pages dans le dossier <tt>protected/pages/posts</tt> créé à cet effet.
-</p>
-
-
-<ul>
- <li><tt>ListPost</tt> affiche la liste des messages triés par ordre de date décroissante.</li>
- <li><tt>ReadPost</tt> affiche le détail d'un message.</li>
- <li><tt>NewPost</tt> permet aux utilisateurs enregistrés de créer un nouveau message.</li>
- <li><tt>EditPost</tt> permet à l'auteur et aux administrateurs de modifier un message.</li>
-</ul>
-
-<p>
-Après avoir fini cette section, nous devrions obtenir l'arborescence suivante :
-</p>
-
-<img src="<%~ directories.gif %>" class="output" />
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day4/fr/directories.gif b/demos/blog-tutorial/protected/pages/Day4/fr/directories.gif
deleted file mode 100755
index 5ba55184..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/fr/directories.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day4/fr/output.gif b/demos/blog-tutorial/protected/pages/Day4/fr/output.gif
deleted file mode 100755
index 8c1caea8..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/fr/output.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day4/fr/output2.gif b/demos/blog-tutorial/protected/pages/Day4/fr/output2.gif
deleted file mode 100755
index 7078e6c6..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/fr/output2.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day4/fr/output3.gif b/demos/blog-tutorial/protected/pages/Day4/fr/output3.gif
deleted file mode 100755
index ff1834a4..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/fr/output3.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day4/fr/output4.gif b/demos/blog-tutorial/protected/pages/Day4/fr/output4.gif
deleted file mode 100755
index b1208a0d..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/fr/output4.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day4/id/CreateEditPost.page b/demos/blog-tutorial/protected/pages/Day4/id/CreateEditPost.page
deleted file mode 100755
index b7ded3b3..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/id/CreateEditPost.page
+++ /dev/null
@@ -1,133 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Membuat Halaman <tt>EditPost</tt></h1>
-
-<p>
-Halaman <tt>EditPost</tt> disediakan bagi para pembuat dan administrator untuk mengedit tulisan blog yang sudah ada. Seperti halaman <a href="?page=Day4.CreateNewPost">NewPost</a> , ia menampilkan sebuah formulir untuk mengumpulkan perubahan terhadap judul dan konten tulisan.
-</p>
-
-<p>
-Kita membuat dua file <tt>protected/pages/posts/EditPost.page</tt> dan <tt>protected/pages/posts/EditPost.php</tt> masing-masing untuk menyimpan template halaman dan kelas halaman.
-</p>
-
-<h2>Membuat Template Halaman</h2>
-<p>
-Template halaman <tt>EditPost</tt> sangat mirip dengan template <tt>NewPost</tt>. Hanya judul halaman dan tombol yang berbeda.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;%@ Title="My Blog - Edit Post" %>
-
-&lt;com:TContent ID="Main">
-
-<h1>Edit Post</h1>
-
-<span>Title:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="TitleEdit"
- ErrorMessage="Please provide a title."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="TitleEdit" Columns="50" />
-
-<br/>
-<span>Content:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="ContentEdit"
- ErrorMessage="Please provide content."
- Display="Dynamic" />
-<br/>
-&lt;com:THtmlArea ID="ContentEdit" />
-
-<br/>
-&lt;com:TButton Text="Save" OnClick="saveButtonClicked" />
-
-&lt;/com:TContent>
-</com:TTextHighlighter>
-
-
-<h2>Membuat Kelas Halaman</h2>
-
-<p>
-Kelas halaman <tt>EditPage</tt> lebih kompleks dibanding <tt>NewPage</tt> karena ia perlu mengambil data tulisan yang ditetapkan terlebih dulu. Ia juga perlu melakukan pemeriksaan otorisasi tambahan. Ada kalanya ia perlu memastikan bahwa tulisan hanya bisa diedit oleh pembuat atau administrator. Pemeriksaan otorisasi sudah disediakan oleh PRADO.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class EditPost extends TPage
-{
- /**
- * Menginisialisasi input dengan data tulisan yang sudah ada.
- * Metode ini dipanggil oleh kerangka kerja saat halaman diinisialisasi.
- * @param parameter event campuran
- */
- public function onInit($param)
- {
- parent::onInit($param);
- // Menambil data pengguna yang sudah ada. Ini sama dengan:
- // $postRecord=$this->getPost();
- $postRecord=$this->Post;
- // Pemeriksaan otorisasi: hanya pembuat atau administrator dapat mengedit tulisan
- if($postRecord->author_id!==$this->User->Name && !$this->User->IsAdmin)
- throw new THttpException(500,'You are not allowed to edit this post.');
-
- if(!$this->IsPostBack) // jika halaman pertama kali diminta
- {
- // Mempopulasikan kontrol input dengan data tulisan yang sudah ada
- $this->TitleEdit->Text=$postRecord->title;
- $this->ContentEdit->Text=$postRecord->content;
- }
- }
-
- /**
- * Menyimpan tulisan jika semua input sudah benar.
- * Metode ini merespon event OnClick pada tombol "Save".
- * @param pengirim event campuran
- * @param parameter event campuran
- */
- public function saveButtonClicked($sender,$param)
- {
- if($this->IsValid) // jika semua validasi sukses
- {
- // Mengambil data pengguna yang sudah ada. Ini sama dengan:
- // $postRecord=$this->getPost();
- $postRecord=$this->Post;
-
- // Mengambil data input
- $postRecord->title=$this->TitleEdit->SafeText;
- $postRecord->content=$this->ContentEdit->SafeText;
-
- // menyimpan ke database via mekanisme Rekaman Aktif
- $postRecord->save();
-
- // mengalihkan browser ke halaman ReadPost
- $url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id));
- $this->Response->redirect($url);
- }
- }
-
- /**
- * Mengembalikan data tulisan yang akan diedit.
- * @return PostRecord data tulisan yang akan diedit.
- * @throws THttpException jika data tulisan tidak ada.
- */
- protected function getPost()
- {
- // ID tulisan yang diedit dikirimkan via parameter GET 'id'
- $postID=(int)$this->Request['id'];
- // gunakan Rekaman Aktif untuk mencari ID tulisan tertentu
- $postRecord=PostRecord::finder()->findByPk($postID);
- if($postRecord===null)
- throw new THttpException(500,'Post is not found.');
- return $postRecord;
- }
-}
-</com:TTextHighlighter>
-
-<h2>Pengujian</h2>
-<p>
-Untuk menguji halaman <tt>EditPost</tt>, masuk lebih dulu dan kemudian kunjungi URL berikut: <tt>http://hostname/blog/index.php?page=EditPost&id=1</tt>. URL ini juga bisa dijangkau dengan mengklik link <tt>Edit</tt> pada halaman rician tulisan.
-</p>
-
-<img src="<%~ output4.gif %>" class="output" />
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day4/id/CreateListPost.page b/demos/blog-tutorial/protected/pages/Day4/id/CreateListPost.page
deleted file mode 100755
index d682535e..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/id/CreateListPost.page
+++ /dev/null
@@ -1,185 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Membuat Halaman <tt>ListPost</tt></h1>
-
-<p>
-Halaman <tt>ListPost</tt> menampilkan tulisan blog terakhir dalam sebuah daftar. Jika di sana terlalu banyak tulisan, maka akan ditampilkan dalam beberapa lembar halaman.
-</p>
-
-<p>
-Sebelum kita berlanjut dengan implementasi, kita ingin mengarahkan homepage kita ke halaman <tt>ListPage</tt> mendatang, karena kita ingin para pengguna melihat tulisan terakhir saat mereka menyentuh website. Untuk melakukannya, kita mengubah konfigurasi aplikasi <tt>protected/application.xml</tt> sebagai berikut,
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-......
-<services>
- <service id="page" class="TPageService" DefaultPage="posts.ListPost">
- <pages MasterClass="Application.layouts.MainLayout" />
- </service>
-</services>
-</com:TTextHighlighter>
-
-<p>
-Sekarang kita membuat file template dan kelas untuk halaman <tt>ListPost</tt>: <tt>protected/pages/posts/ListPost.page</tt> dan <tt>protected/pages/posts/ListPost.php</tt>.
-</p>
-
-<h2>Membuat Template Halaman</h2>
-<p>
-Berdasarkan pada kebutuhan fungsionalitas halaman <tt>ListPost</tt>, kita akan menggunakan dua kontrol dalam template halaman:
-</p>
-<ul>
-<li><a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.Repeater">TRepeater</a>: kontrol ini dipakai terutama untuk menampilkan daftar atas item data. Penyajian dari setiap item data bisa ditetapkan melalui template inline atau kontrol template eksternal (pendekatan yang akan kita gunakan di sini).</li>
-<li><a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.Pager">TPager</a>: kontrol ini dipakai untuk memecah daftar item data. Ia berinteraksi dengan pengguna-akhir untuk menentukan halaman data mana yang ditampilkan dalam <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.List">kontrol daftar</a> (misalnya <tt>TListBox</tt>) pada <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.Data">kontrol data</a> (misalnya <tt>TRepeater</tt>).</li>
-</ul>
-
-<p>
-Di bawah ini adalah konten dalam template halaman:
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;%@ Title="My Blog" %>
-
-&lt;com:TContent ID="Main">
-
-&lt;com:TRepeater ID="Repeater"
- ItemRenderer="Application.pages.posts.PostRenderer"
- AllowPaging="true"
- AllowCustomPaging="true"
- PageSize="5"
- />
-
-&lt;com:TPager ControlToPaginate="Repeater" OnPageIndexChanged="pageChanged" />
-
-&lt;/com:TContent>
-</com:TTextHighlighter>
-
-<p>
-Dalam pengulang, kita menetapkan bahwa konten yang diulang ditampilkan menggunakan penyaji item <tt>PostRenderer</tt> yang akan kita buat nantinya. Agar PRADO bisa menemukan kelas ini, kita memberikan namespace <tt>Application.pages.posts.PostRenderer</tt>, berarti file kelasnya adalah <tt>protected/pages/posts/PostRenderer.php</tt>.
-</p>
-
-<p>
-Kita juga menyetel beberapa properti lain pada pengulang untuk menghidupkan lembaran halaman. Dan kita menyetel properti <tt>ControlToPaginate</tt> pada lembaran agar ia mengetahui konten mana yang diulang harus dibuat lembaran.
-</p>
-
-
-<h2>Membuat Kelas Halaman</h2>
-
-<p>
-Dari template halaman di atas, kita melihat bahwa kita perlu menulis kelas halaman yang mengimplementasikan pengendali event: <tt>pageChanged()</tt> (ditempelkan ke event lembaran <tt>OnPageIndexChanged</tt>). Kita juga perlu mempopulasikan data tulisan ke dalam pengulang berdasarkan pada setelan lembaran saat ini. Berikut ini adalah kode sumber lengkap kelas halaman:
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class ListPost extends TPage
-{
- /**
- * Menginisialisasi pengulang.
- * Metode ini dipanggil oleh kerangka kerja saat menginisialisasi halaman
- * @param mixed event parameter
- */
- public function onInit($param)
- {
- parent::onInit($param);
- if(!$this->IsPostBack) // jika halaman diminta pertama kali
- {
- // ambil jumlah total tulisan yang tersedia
- $this->Repeater->VirtualItemCount=PostRecord::finder()->count();
- // populasikan data tulisan ke dalam pengulang
- $this->populateData();
- }
- }
-
- /**
- * Pengendali event untuk event OnPageIndexChanged pada lembaran.
- * Metode ini dipanggil saat pengguna mengklik tombol halaman
- * dan kemudian mengubah halaman tulisan yang ditampilkan.
- */
- public function pageChanged($sender,$param)
- {
- // ubah indeks halaman sekarang ke yang baru
- $this->Repeater->CurrentPageIndex=$param->NewPageIndex;
- // re-populasi data ke dalam pengulang
- $this->populateData();
- }
-
- /**
- * Menentukan halaman tulisan mana yang ditampilkan dan
- * mempopulasi pengulang dengan data yang sudah diambil.
- */
- protected function populateData()
- {
- $offset=$this->Repeater->CurrentPageIndex*$this->Repeater->PageSize;
- $limit=$this->Repeater->PageSize;
- if($offset+$limit>$this->Repeater->VirtualItemCount)
- $limit=$this->Repeater->VirtualItemCount-$offset;
- $this->Repeater->DataSource=$this->getPosts($offset,$limit);
- $this->Repeater->dataBind();
- }
-
- /**
- * Mengambil tulisan dari database dengan ofset dan limit.
- */
- protected function getPosts($offset, $limit)
- {
- // Bentuk kriteria query
- $criteria=new TActiveRecordCriteria;
- $criteria->OrdersBy['create_time']='desc';
- $criteria->Limit=$limit;
- $criteria->Offset=$offset;
- // query untuk tulisan dengan kriteria di atas dan informasi pembuat
- return PostRecord::finder()->withAuthor()->findAll($criteria);
- }
-}
-</com:TTextHighlighter>
-
-<h2>Membuat <tt>PostRenderer</tt></h2>
-
-<p>
-Kita masih perlu untuk membuat kelas penyaji item <tt>PostRenderer</tt>. Ia mendefinisikan bagaimana setiap tulisan harus ditampilkan dalam pengulang. Kita membuatnya sebagai kontrol template yang membolehkan kita untuk menetapkan penyajian tulisan menggunakan sintaks template fleksibel kita. Template dan file kelas masing-masing disimpan sebagai <tt>PostRenderer.tpl</tt> dan <tt>PostRenderer.php</tt> di bawah direktori <tt>protected/pages/posts</tt>.
-</p>
-
-<h3>Membuat Template Penyaji</h3>
-<p>
-Template penyaji menetapkan penyajian berbagai field dalam sebuah tulisan, termasuk judul, nama pembuat, waktu penulisan dan kontennya. Kita me-link judul tulisan ke <tt>ReadPost</tt> yang menampilkan lebih rinci atas tulisan yang dipilih.
-</p>
-<p>
-Ekspresi <tt>$this->Data</tt> merujuk ke item data yang dikirimkan ke pengulang. Dalam kasus kita, ia adalah obyek <tt>PostRecord</tt>. Perhatikan bagaimana kita mengambil nama pembuat pada tulisan dengan <tt>$this->Data->author->username</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-<div class="post-box">
-<h3>
-&lt;com:THyperLink Text="&lt;%# $this->Data->title %>"
- NavigateUrl="&lt;%# $this->Service->constructUrl('posts.ReadPost',array('id'=>$this->Data->post_id)) %>" />
-</h3>
-
-<p>
-Author:
-&lt;com:TLiteral Text="&lt;%# $this->Data->author->username %>" /><br/>
-Time:
-&lt;com:TLiteral Text="&lt;%# date('m/d/Y h:m:sa', $this->Data->create_time) %>" />
-</p>
-
-<p>
-&lt;com:TLiteral Text="&lt;%# $this->Data->content %>" />
-</p>
-</div>
-</com:TTextHighlighter>
-
-<h3>Membuat Kelas Penyaji</h3>
-<p>
-Kelas penyaji sangat sederhana. Ia diperluas dari <tt>TRepeaterItemRenderer</tt> dan tidak berisi kode apapun.
-</p>
-<com:TTextHighlighter CssClass="source" Language="php">
-class PostRenderer extends TRepeaterItemRenderer
-{
-}
-</com:TTextHighlighter>
-
-<h2>Pengujian</h2>
-<p>
-Untuk menguji halaman <tt>ListPost</tt>, kunjungi URL <tt>http://hostname/blog/index.php</tt> (ingat kita telah menyetel <tt>ListPost</tt> sebagai homepage baru kita). Kita akan melihat hasil seperti berikut. Karena kita hanya mempunyai satu tulisan saat ini, lembaran tidak akan muncul. Nantinya ketika menyelesaikan <tt>NewPost</tt>, kita dapat menambah tulisan lebih banyak dan datang kembali untuk menguji lembaran halaman lagi.
-</p>
-
-<img src="<%~ output.gif %>" class="output" />
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day4/id/CreateNewPost.page b/demos/blog-tutorial/protected/pages/Day4/id/CreateNewPost.page
deleted file mode 100755
index 31aba2bb..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/id/CreateNewPost.page
+++ /dev/null
@@ -1,142 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Membuat Halaman <tt>NewPost</tt></h1>
-
-<p>
-Halaman <tt>NewPost</tt> disediakan untuk mengotentikasi pengguna untuk pembuatan tulisan blog baru. Ia perlu untuk menampilkan formulir yang mengumpulkan informasi mengenai tulisan baru, termasuk judul tulisan dan konten badan tulisan.
-</p>
-
-<p>
-Karena <tt>NewPost</tt> hanya bisa diakses oleh pengguna terotentikasi, kita menambahkan file konfigurasi <tt>config.xml</tt> di bawah direktori <tt>protected/pages/posts</tt>. Konfigurasi menetapkan bahwa para pengguna tidak bisa mengakses <tt>NewPost</tt> dan <tt>EditPost</tt> yang akan diperkenalkan dalam bagian berikutnya. Semua pengguna lainnya hanya memiliki akses ke <tt>ListPost</tt> dan <tt>ReadPost</tt>
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<?xml version="1.0" encoding="utf-8"?>
-<configuration>
- <authorization>
- <deny pages="NewPost,EditPost" users="?" />
- <allow pages="ListPost,ReadPost" />
- <deny users="*" />
- </authorization>
-</configuration>
-</com:TTextHighlighter>
-
-<com:TipBox>
-Selalu menjadi ide yang baik untuk memulai dengan <tt>deny="*"</tt> yang menampung semua aturan dari bawah dan secara bertahap memberikan akses ke halaman dengan aturan tambahan.
-</com:TipBox>
-
-<p>
-Karena jumlah halaman kita berkembang, kita ingin memodifikasi <tt>MainLayout</tt> agar dalam footer pada halaman blog kita ada link ke berbagai halaman, termasuk homepage, halaman <a href="?page=Day3.CreateNewUser">NewUser</a> (hanya terlihat oleh administrator), dan halaman <tt>NewPost</tt> mendatang (hanya terlihat oleh pengguna terotentikasi).
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-<div id="footer">
-&lt;com:THyperLink Text="Home"
- NavigateUrl="&lt;%= $this->Service->DefaultPageUrl %>" />
-
-&lt;com:THyperLink Text="New Post"
- NavigateUrl="&lt;%= $this->Service->constructUrl('posts.NewPost') %>"
- Visible="&lt;%= !$this->User->IsGuest %>" />
-
-&lt;com:THyperLink Text="New User"
- NavigateUrl="&lt;%= $this->Service->constructUrl('users.NewUser') %>"
- Visible="&lt;%= $this->User->IsAdmin %>" />
-...other links...
-</div>
-</com:TTextHighlighter>
-
-<p>
-Sekarang kita membuat dua file <tt>protected/pages/posts/NewPost.page</tt> dan <tt>protected/pages/posts/NewPost.php</tt> masing-masing untuk menyimpan template halaman dan kelas halaman.
-</p>
-
-<h2>Membuat Template Halaman</h2>
-<p>
-Template halaman <tt>NewPost</tt> berisi <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.TextBox">TTextBox</a> untuk mengumpulkan judul tulisan dan <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.HtmlArea">THtmlArea</a> untuk mengumpulkan konten tulisan. Yang terakhir adalah editor HTML WYSIWYG. Guna memastikan bahwa input pengguna sudah benar, kita mengaitkan validator dengan kontrol input ini.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;%@ Title="My Blog - New Post" %>
-
-&lt;com:TContent ID="Main">
-
-<h1>Membuat Tulisan Baru</h1>
-
-<span>Title:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="TitleEdit"
- ErrorMessage="Please provide a title."
- Display="Dynamic" />
-<br/>
-&lt;com:TTextBox ID="TitleEdit" Columns="50" />
-
-<br/>
-<span>Content:</span>
-&lt;com:TRequiredFieldValidator
- ControlToValidate="ContentEdit"
- ErrorMessage="Please provide content."
- Display="Dynamic" />
-<br/>
-&lt;com:THtmlArea ID="ContentEdit" />
-
-<br/>
-&lt;com:TButton Text="Create" OnClick="createButtonClicked" />
-
-&lt;/com:TContent>
-</com:TTextHighlighter>
-
-
-<h2>Membuat Kelas Halaman</h2>
-
-<p>
-Dari template halaman di atas, kita melihat bahwa sebagian besar kita perlu menulis sebuah kelas halaman yang mengimplementasikan pengendali event: <tt>createButtonClicked()</tt> (ditempelkan ke tombo <tt>Create</tt> dalam event <tt>OnClick</tt>).
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class NewPost extends TPage
-{
- /**
- * Membuat tulisan baru jika semua input benar.
- * Metode ini merespon event OnClick pada tombol "create".
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function createButtonClicked($sender,$param)
- {
- if($this->IsValid) // bila semua validasi sukses
- {
- // populasikan obyek PostRecord dengan input pengguna
- $postRecord=new PostRecord;
- // menggunakan SafeText datipada Text guna menghindari serangan Penaskahan Situs Silang
- $postRecord->title=$this->TitleEdit->SafeText;
- $postRecord->content=$this->ContentEdit->SafeText;
- $postRecord->author_id=$this->User->Name;
- $postRecord->create_time=time();
- $postRecord->status=0;
-
- // simpan ke database lewat mekanisme Rekaman Aktif
- $postRecord->save();
-
- // alihkan browser ke halaman tulisan yang baru dibuat
- $url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id));
- $this->Response->redirect($url);
- }
- }
-}
-</com:TTextHighlighter>
-
-<h2>Pengujian</h2>
-<p>
-Untuk menguji halaman <tt>NewPost</tt>, masuk lebih dulu dan klik pada link tombol <tt>New Post</tt> dalam footer pada homepage. Browser kita akan menampilkan hasil berikut dengan URL <tt>http://hostname/blog/index.php?page=NewPost</tt>.
-</p>
-
-<com:InfoBox>
-Ketika Anda mengunjungi halaman <tt>NewPost</tt> untuk pertama kali, Anda bisa melihat bahwa diperlukan beberapa detik sebelum halaman ditampilkan. Ini dikarenakan PRADO perlu mengurai dan mempublikasikan kode javascript dan gambar untuk kontrol <tt>THtmlArea</tt> yang dipakai dalam halaman. Ini dikerjakan sekali dan untuk semuanya.
-</com:InfoBox>
-
-<com:TipBox>
-Untuk menguji fitur lembaran yang kita kembangkan untuk halaman <a href="?page=Day4.CreateListPost">ListPost</a>, kita dapat membuat lima atau lebih tulisan dan melihat apa yang terjadi pada homepage. Lembar dalam <tt>ListPost</tt> menampilkan lima tulisan setiap halamannya.
-</com:TipBox>
-
-<img src="<%~ output3.gif %>" class="output" />
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day4/id/CreateReadPost.page b/demos/blog-tutorial/protected/pages/Day4/id/CreateReadPost.page
deleted file mode 100755
index 9aeaed7b..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/id/CreateReadPost.page
+++ /dev/null
@@ -1,135 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Membuat Halaman <tt>ReadPost</tt></h1>
-
-<p>
-Halaman <tt>ReadPost</tt> menampilkan rincian konten tulisan blog. Untuk para pengguna yang diotorisasi, akan ditampilkan tombol link yang membolehkan mereka untuk mengedit atau menghapus tulisan.
-</p>
-
-<p>
-Kita membuat dua file <tt>protected/pages/posts/ReadPost.page</tt> dan <tt>protected/pages/posts/ReadPost.php</tt> masing-masing untuk menyimpan template halaman dan kelas halaman.
-</p>
-
-<h2>Membuat Template Halaman</h2>
-<p>
-Template halaman <tt>ReadPost</tt> sangat mirip dengan template <tt>PostRenderer</tt>, keduanya menyajikan konten tulisan. Perbedaannya adalah bahwa <tt>ReadPost</tt> perlu menampilkan dua tombol link ketika pengguna saat ini diotorisasi untuk mengedit atau menghapus tulisan.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;com:TContent ID="Main">
-
-<h2>
-&lt;com:TLiteral Text="&lt;%= $this->Post->title %>" />
-</h2>
-
-&lt;com:TControl Visible="&lt;%= $this->canEdit() %>">
- <a href="&lt;%= $this->Service->constructUrl('posts.EditPost',array('id'=>$this->Post->post_id))%>">Edit</a> |
- &lt;com:TLinkButton Text="Delete"
- OnClick="deletePost"
- Attributes.onclick="javascript:if(!confirm('Are you sure?')) return false;" />
-&lt;/com:TControl>
-
-<p>
-Author:
-&lt;com:TLiteral Text="&lt;%= $this->Post->author->username %>" /><br/>
-Time:
-&lt;com:TLiteral Text="&lt;%= date('m/d/Y h:m:sa', $this->Post->create_time) %>" />
-</p>
-
-<p>
-&lt;com:TLiteral Text="&lt;%= $this->Post->content %>" />
-</p>
-
-&lt;/com:TContent>
-</com:TTextHighlighter>
-
-<p>
-Banyak ekspresi PHP dipakai dalam template di atas. Ekspresi <tt>$this->Post</tt> merujuk ke properti yang didefinisikan dalam kelas halaman <tt>ReadPost</tt>. Ia mewakili obyek <tt>PostRecord</tt> yang terkait dengan tulisan yang saat ini sedang dilihat.
-</p>
-
-<com:InfoBox>
-Meskipun sebagian besar kita menggunakan ekspresi dalam template, we do not overuse them. A major guideline in determining whether we should use an expression in a template is that <i>the expression should be a property or a simple presentational transformation of the property</i>. By following this guideline, we ensure content and presentation are well separated without losing sufficient flexibility.
-</com:InfoBox>
-
-<p>
-Kita juga mencatatan dalam template di atas bahwa dua link tombol dikurung di dalam <tt>TControl</tt> yang penampakannya ditentukan oleh ekspresi <tt>$this->canEdit()</tt>. Untuk link tombol <tt>Delete</tt>, kita menggunakan dialog konfirmasi javascript untuk memperoleh konfirmasi pengguna saat ia mengklik untuk menghapus tulisan.
-</p>
-
-<com:InfoBox>
-Seluruh kontrol PRADO mempunyai properti yang sangat berguna bernama <tt>Attributes</tt> yang dapat menerima pasangan nama-nilai bebas. Kebanyakan kontrol PRADO akan menyajikan pasangan nama-nilai dalam <tt>Attributes</tt> secara literal terkait tag HTML. Sebagai contoh, daam link tombol <tt>Delete</tt> di atas, kita mendefinisikan sebuah <tt>onclick</tt> yang disajikan sebagai atribut <tt>onclick</tt> yang menghasilkan tag <tt>&lt;a&gt;</tt>.
-</com:InfoBox>
-
-
-<h2>Membuat Kelas Halaman</h2>
-
-<p>
-Dari template halaman di atas, kita melihat bahwa kita perlu menulis kelas halaman yang mengimplementasikan pengendali event: <tt>deletePost()</tt> (ditempelkan ke tombol <tt>Delete</tt> dalam event <tt>OnClick</tt>). Kita juga perlu untuk mengambil data tulisan yang ditetapkan oleh ID tulisan melalui parameter GET <tt>id</tt>. </p>
-
-<com:InfoBox>
-Kita mengimplementasikan fitur penghapusan tulisan dalam halaman <tt>ReadPost</tt> karena ini sangat alami untuk melakukannya di sini. Ketika pengguna mengklik pada tombol <tt>Delete</tt>, dialog konfirmasi javascript akan muncul. Jika pengguna mengkonfirmasinya, penghapusan akan dibawa dalam respon terhadap event <tt>OnClick</tt> dari tombol <tt>Delete</tt>.
-</com:InfoBox>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class ReadPost extends TPage
-{
- private $_post;
- /**
- * Mengambil data tulisan.
- * Metode ini dipanggil oleh kerangka kerja saat inisialisasi halaman
- * @param mixed event parameter
- */
- public function onInit($param)
- {
- parent::onInit($param);
- // id tulisan dikirimkan via parameter GET 'id'
- $postID=(int)$this->Request['id'];
- // mengambil PostRecord dengan informasi pembuat terisi dalam
- $this->_post=PostRecord::finder()->withAuthor()->findByPk($postID);
- if($this->_post===null) // jika id tulisan tidak benar
- throw new THttpException(500,'Unable to find the specified post.');
- // setel judul halaman sebagai judul tulisan
- $this->Title=$this->_post->title;
- }
-
- /**
- * @return PostRecord yang saat ini sedang dilihat
- */
- public function getPost()
- {
- return $this->_post;
- }
-
- /**
- * Menghapus tulisan yang saat ini sedang dilihat
- * Metode ini dipanggil saat pengguna mengklik tombol "Delete"
- */
- public function deletePost($sender,$param)
- {
- // hanya pembuat atau administrator bisa menghapus tulisan
- if(!$this->canEdit())
- throw new THttpException('You are not allowed to perform this action.');
- // hapus dari DB
- $this->_post->delete();
- // alihkan browser ke homepage
- $this->Response->redirect($this->Service->DefaultPageUrl);
- }
-
- /**
- * @return boolean apakah pengguna saat ini bisa mengedit/menghapus tulisan yg sedang dilihat
- */
- public function canEdit()
- {
- // hanya pembuat atau administrator bisa mengedi/menghapus tulisan
- return $this->User->Name===$this->Post->author_id || $this->User->IsAdmin;
- }
-}
-</com:TTextHighlighter>
-
-<h2>Pengujian</h2>
-<p>
-Untuk menguji halaman <tt>ReadPost</tt>, kunjungi URL <tt>http://hostname/blog/index.php</tt> dan klik pada judul tulisan. Browser kita akan menampilkan hasil berikut dengan URL <tt>http://hostname/blog/index.php?page=ReadPost&id=1</tt>. Catatan, jika kita tidak masuk, dua tombol link tidak akan terlihat.
-</p>
-
-<img src="<%~ output2.gif %>" class="output" />
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day4/id/Overview.page b/demos/blog-tutorial/protected/pages/Day4/id/Overview.page
deleted file mode 100755
index 3427e11f..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/id/Overview.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Tinjauan Manajemen Tulisan</h1>
-
-<p>
-Pada bagian ini, kita membuat halaman yang terkait dengan manajemen tulisan. Dalam keadaan tertentu, kita mengimplementasikan operasi CRUD (Create-Retrieve-Update-Delete) dengan memperhatikan tulisan blog.
-</p>
-
-<p>
-Berdasarkan pada kebutuhan, kita perlu membuat halaman berikut yang diatur di bawah direktori baru <tt>protected/pages/posts</tt>.
-</p>
-
-<ul>
- <li><tt>ListPost</tt> menampilkan tulisan dengan waktu pembuatan dalam urutan mengecil.</li>
- <li><tt>ReadPost</tt> menampilkan rincian tulisan.</li>
- <li><tt>NewPost</tt> membolehkan pengguna teregistrasi untuk membuat tulisan baru.</li>
- <li><tt>EditPost</tt> membolehkan pembuat atau administrator untuk mengedit tulisan yang sudah ada.</li>
-</ul>
-
-<p>
-Setelah menyelesaikan bagian ini, kita akan mengharapkan untuk melihat direktori dan file berikut:
-</p>
-
-<img src="<%~ directories.gif %>" class="output" />
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day4/id/directories.gif b/demos/blog-tutorial/protected/pages/Day4/id/directories.gif
deleted file mode 100755
index 5ba55184..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/id/directories.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day4/id/output.gif b/demos/blog-tutorial/protected/pages/Day4/id/output.gif
deleted file mode 100755
index 8c1caea8..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/id/output.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day4/id/output2.gif b/demos/blog-tutorial/protected/pages/Day4/id/output2.gif
deleted file mode 100755
index 7078e6c6..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/id/output2.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day4/id/output3.gif b/demos/blog-tutorial/protected/pages/Day4/id/output3.gif
deleted file mode 100755
index ff1834a4..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/id/output3.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day4/id/output4.gif b/demos/blog-tutorial/protected/pages/Day4/id/output4.gif
deleted file mode 100755
index b1208a0d..00000000
--- a/demos/blog-tutorial/protected/pages/Day4/id/output4.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day5/ErrorLogging.page b/demos/blog-tutorial/protected/pages/Day5/ErrorLogging.page
index 52f7ef54..6239d312 100755
--- a/demos/blog-tutorial/protected/pages/Day5/ErrorLogging.page
+++ b/demos/blog-tutorial/protected/pages/Day5/ErrorLogging.page
@@ -9,7 +9,7 @@ If we try to access the URL <tt>http://hostname/blog/index.php?page=EditPost&id=
<img src="<%~ output2.gif %>" class="output" />
<com:InfoBox>
-An important task in a Web application is <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.Error">error handling</a> which is often associated <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.Logging">logging</a>. There are two types of errors that may occur in a PRADO application: those caused by developers and those by end-users. The former should be resolved before the application is put into production, while the latter are usually within the initial design scope and should be handled nicely (e.g. log the error and display a special page instructing the end-user what to do next.) PRADO implements a very flexible yet powerful framework for error handling and logging.
+An important task in a Web application is <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Advanced.Error">error handling</a> which is often associated <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Advanced.Logging">logging</a>. There are two types of errors that may occur in a PRADO application: those caused by developers and those by end-users. The former should be resolved before the application is put into production, while the latter are usually within the initial design scope and should be handled nicely (e.g. log the error and display a special page instructing the end-user what to do next.) PRADO implements a very flexible yet powerful framework for error handling and logging.
</com:InfoBox>
diff --git a/demos/blog-tutorial/protected/pages/Day5/Performance.page b/demos/blog-tutorial/protected/pages/Day5/Performance.page
index cbaae7e4..1cdfedc1 100755
--- a/demos/blog-tutorial/protected/pages/Day5/Performance.page
+++ b/demos/blog-tutorial/protected/pages/Day5/Performance.page
@@ -57,7 +57,7 @@ There are other techniques to further improve the performance of a PRADO applica
</p>
<p>
-For a page that is relatively stable yet frequently accessed, <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.OutputCache">output caching</a> should be considered. Output caching caches the HTML output of selected portions of a page. This may improve the performance of the cached pages significantly.
+For a page that is relatively stable yet frequently accessed, <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Controls.OutputCache">output caching</a> should be considered. Output caching caches the HTML output of selected portions of a page. This may improve the performance of the cached pages significantly.
</p>
<p>
diff --git a/demos/blog-tutorial/protected/pages/Day5/UseTheme.page b/demos/blog-tutorial/protected/pages/Day5/UseTheme.page
index 21bc9d81..395c8511 100755
--- a/demos/blog-tutorial/protected/pages/Day5/UseTheme.page
+++ b/demos/blog-tutorial/protected/pages/Day5/UseTheme.page
@@ -3,7 +3,7 @@
<h1>Using Themes and Skins</h1>
<p>
-PRADO has intrinsic support for <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.Themes">themes</a>. By using themes, we can better separate logic and presentation, and we can also change the overall appearance of our blog system more easily.
+PRADO has intrinsic support for <a href="http://www.pradoframework.net/site/demos/quickstart/?page=Advanced.Themes">themes</a>. By using themes, we can better separate logic and presentation, and we can also change the overall appearance of our blog system more easily.
</p>
<h2>Creating Theme</h2>
@@ -17,7 +17,7 @@ To create a theme named <tt>Basic</tt>, we create a subdirectory <tt>theme/Basic
</p>
<com:InfoBox>
-The <tt>themes</tt> directory must be Web-accessible, like the <tt>assets</tt> directory. Do not place sensitive data files under this directory. You can change the name or location of this directory by configuring the <a href="http://www.pradosoft.com/docs/classdoc/TThemeManager">TThemeManager</a> module in the application configuration.
+The <tt>themes</tt> directory must be Web-accessible, like the <tt>assets</tt> directory. Do not place sensitive data files under this directory. You can change the name or location of this directory by configuring the <a href="http://pradosoft.github.io/docs/manual/class-TThemeManager">TThemeManager</a> module in the application configuration.
</com:InfoBox>
diff --git a/demos/blog-tutorial/protected/pages/Day5/fr/ErrorLogging.page b/demos/blog-tutorial/protected/pages/Day5/fr/ErrorLogging.page
deleted file mode 100755
index 8e7c77e6..00000000
--- a/demos/blog-tutorial/protected/pages/Day5/fr/ErrorLogging.page
+++ /dev/null
@@ -1,158 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Gestion et journalisation d'erreur</h1>
-
-<p>
-Si vous tentez de naviguez à l'URL <tt>http://hostname/blog/index.php?page=EditPost&id=100</tt>, vous verrez la page d'erreur suivante parce que le message avec l'ID 100 n'existe pas pour le moment. Nous voudrions personnaliser cette page d'erreur de manière à ce qu'elle garde la présentation générale du site. Nous voudrions aussi journaliser cette erreur pour étudier le comportement des utilisateurs. Dans cette section, nous allons mettre en place ces deux fonctionnalités.
-</p>
-
-<img src="<%~ output2.gif %>" class="output" />
-
-<com:InfoBox>
-Une des tâches importantes dans les applications Web est la <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.Error">gestion des erreurs</a> ainsi que leurs <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.Logging">journalisation</a>. Il y a deux types d'erreurs qui peuvent se produire dans une application PRADO : celles provenant des développeurs et celles des utilisateurs. Les premières doivent être résolues avant que l'application ne soit en production, tandis que les deuxièmes sont généralement un problème de prise en charge au niveau du design et doivent être gérées proprement (ie: journaliser cette erreur et indiquer à l'utilisateur que faire après). PRADO fournit un ensemble de fonctionnalités très utiles pour gérer et journaliser les erreurs.
-</com:InfoBox>
-
-
-<h2>Personnalisation de la gestion d'erreur</h2>
-
-<p>
-PRADO charge de manière implicite un module de gestion d'erreurs. Nous voulons personnaliser ce module pour qu'il affiche une page spécifique pour les erreurs causées par les utilisateurs. Nous modifions donc notre application comme ci-dessous :
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-......
-<modules>
- ......
- <module class="Application.BlogErrorHandler" />
- ......
-</modules>
-......
-</com:TTextHighlighter>
-
-<p>
-La classe <tt>BlogErrorHandler</tt> comme spécifiée ci-dessus est un nouveau gestionnaire d'erreur que nous allons créer après. Il étend et remplace le module par défaut <tt>TErrorHandler</tt>.
-</p>
-
-<p>
-Nous créons un fichier nommé <tt>protected/BlogErrorHandler.php</tt> avec le contenu suivant. La classe <tt>BlogErrorHandler</tt> surcharge deux méthodes de <tt>TErrorHandler</tt> :
-</p>
-<ul>
- <li><tt>getErrorTemplate()</tt> - cette méthode renvoie le gabarit utilisé pour afficher un message d'erreur utilisateur.</li>
- <li><tt>handleExternalError()</tt> - cette méthode est appelée lorsqu'une erreur utilisateur se produit et elle affiche l'erreur.</li>
-</ul>
-<com:TTextHighlighter CssClass="source" Language="php">
-Prado::using('System.Exceptions.TErrorHandler');
-Prado::using('Application.BlogException');
-
-class BlogErrorHandler extends TErrorHandler
-{
- /**
- * Renvoi le fichier gabarit utilisé pour afficher l'erreur.
- * Cette méthode surcharge la méthode originale.
- */
- protected function getErrorTemplate($statusCode,$exception)
- {
- // on utilise notre propre gabarit pour BlogException
- if($exception instanceof BlogException)
- {
- // récupère le chemin du fichier de gabarit : protected/error.html
- $templateFile=Prado::getPathOfNamespace('Application.error','.html');
- return file_get_contents($templateFile);
- }
- else // sinon on utilise le gabarit par défaut.
- return parent::getErrorTemplate($statusCode,$exception);
- }
-
- /**
- * Gère les erreurs causées par les utilisateurs.
- * Cette méthode surcharge la méthode originale.
- * Elle est appelée lorsqu'une exception utilisateur est générée.
- */
- protected function handleExternalError($statusCode,$exception)
- {
- // Journaliser l'erreur (seulement pour BlogException)
- if($exception instanceof BlogException)
- Prado::log($exception->getErrorMessage(),TLogger::ERROR,'BlogApplication');
- // appelle l'implémentation de la classe parente
- parent::handleExternalError($statusCode,$exception);
- }
-}
-</com:TTextHighlighter>
-
-<p>
-Dans le code précédent, nous spécifions que lorsqu'une exception de type <tt>BlogException</tt> est générée, nous utilisons le gabarit <tt>protected/error.html</tt> pour afficher l'erreur. Par ailleurs, nous devons créer la classe <tt>BlogException</tt> et remplacer toutes les occurrences de <tt>THttpException</tt> dans notre code (par exemple dans les pages <a href="?page=Day3.CreateEditUser">EditUser</a> et <a href="?page=Day4.CreateReadPost">ReadPost</a>). Nous devons aussi créer le gabarit <tt>protected/error.html</tt>. La classe <tt>BlogException</tt> hérite de <tt>THttpException</tt> et est vide. Le fichier de classe est enregistré sous <tt>protected/BlogException.php</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class BlogException extends THttpException
-{
-}
-</com:TTextHighlighter>
-
-<p>
-Ci-dessous le contenu du gabarit <tt>protected/error.html</tt>. Remarquez que ce gabarit n'est pas un gabarit PRADO, ceci parce qu'il ne reconnait qu'un nombre limité de mots clés, par exemple <tt>%%ErrorMessage%%</tt>, <tt>%%ServerAdmin%%</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<html>
-<head>
-<title>%%ErrorMessage%%</title>
-</head>
-<body>
-<div id="page">
-<div id="header">
-<h1>Mon Blog</h1>
-</div>
-<div id="main">
-<p style="color:red">%%ErrorMessage%%</p>
-<p>
-Une erreur est apparue lors du traitement de votre demande.
-</p>
-<p>
-Si vous pensez que c'est une erreur de notre serveur, veuillez contacter <a href="mailto:%%ServerAdmin%%">webmaster</a>.
-</p>
-</div>
-</body>
-</html>
-</com:TTextHighlighter>
-
-
-<h2>Journalisation des erreurs</h2>
-
-<p>
-Dans la méthode <tt>handleExternalError()</tt> de <tt>BlogErrorHandler</tt>, nous appelons <tt>Prado::log()</tt> pour journaliser l'erreur si elle est de type <tt>BlogException</tt>. L'erreur est stockée en mémoire. Pour enregistrer le journal d'erreur sur un support non volatil, tel que le disque dur ou une base de données, nous devons indiquer à PRADO comment procéder. Ceci est fait par la configuration d'application suivante :
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-......
-<modules>
- ......
- <module id="log" class="System.Util.TLogRouter">
- <route class="TFileLogRoute" Categories="BlogApplication" />
- </module>
- ......
-</modules>
-......
-</com:TTextHighlighter>
-
-<p>
-Dans le code ci-dessus, nous ajoutons une "route" pour enregistrer le journal d'erreur dans un fichier. Nous spécifions aussi le filtre de catégorie <tt>BlogApplication</tt>, de manière à ce que seules les erreurs de type <tt>BlogApplication</tt> soient sauvegardées. Cette possibilité permet de réduire la taille du journal et d'en améliorer la lisibilité.
-</p>
-
-<h2>Test</h2>
-<p>
-Pour voir comme notre blog se comporte suite à une demande invalide, nous naviguons à l'URL <tt>http://hostname/blog/index.php?page=posts.ReadPost&id=100</tt>. Nous devrions voir la page suivante qui est différente de celle vue précédemment.
-</p>
-
-<img src="<%~ output3.gif %>" class="output" />
-
-<p>
-Si nous regardons dans le dossier <tt>protected/runtime</tt>, nous devrions y trouver un fichier nommé <tt>prado.log</tt>. C'est le journal d'erreur que nous venons juste de paramétrer. Le fichier pourrait contenir quelque chose comme :
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="text">
-Jun 28 22:15:27 [Error] [BlogApplication] Unable to find the specified post.
-Jun 29 08:42:57 [Error] [BlogApplication] Unable to find the specified post.
-</com:TTextHighlighter>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day5/fr/Performance.page b/demos/blog-tutorial/protected/pages/Day5/fr/Performance.page
deleted file mode 100755
index 59eee1b0..00000000
--- a/demos/blog-tutorial/protected/pages/Day5/fr/Performance.page
+++ /dev/null
@@ -1,66 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Amélioration des performances</h1>
-
-<p>
-Avant le déploiement de notre blog, nous voudrions améliorer les performances.
-</p>
-
-<h2>Changer le mode de fonctionnement de l'application</h2>
-
-<p>
-Une application PRADO peut-être configurée pour fonctionner suivant différents modes. Par défaut, elle fonctionne en mode <tt>Debug</tt>, mode qui génère beaucoup de message de journalisation et qui, en cas d'erreurs, affiche la pile des appels et l'emplacement de l'erreur. Ce comportement est préférable en cours de développement, mais pas en production. Pour changer le mode de fonctionnement de <tt>Debug</tt> à <tt>Normal</tt> ( qui signifie "en production"), nous devons modifier le fichier de configuration de l'application comme ci-dessous :
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<?xml version="1.0" encoding="utf-8"?>
-<application id="blog" mode="Normal">
- ......
-</application>
-</com:TTextHighlighter>
-
-<h2>Enabling Caching</h2>
-
-<p>
-There are a lot of parsing work involved in a PRADO application: configuration XMLs, templates, theme skins, etc. For every user request, PRADO needs to redo the parsing. To save this effort, we can enable caching. To do so, we modify the application configuration as follows,
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-......
-<modules>
- ......
- <module id="cache" class="System.Caching.TDbCache" />
- ......
-</modules>
-......
-</com:TTextHighlighter>
-
-<p>
-Maintenant, après avoir requis n'importe quelle page de notre blog, nous devrions trouver un fichier nommé <tt>sqlite3.cache</tt>. C'est un fichier de base de données qui mémorise les éléments analysés : gabarits, configurations, etc.
-</p>
-
-<com:InfoBox>
-Le module de <tt>cache</tt> que nous venons d'activer utilise une base de données comme support d'enregistrement. PRADO propose d'autres modules de <tt>cache</tt> plus rapide, tels que <tt>TMemCache</tt>, <tt>TAPCCache</tt>. Ces modules requièrent les extensions PHP correspondantes.
-</com:InfoBox>
-
-
-<h2>Utilisation de <tt>pradolite.php</tt></h2>
-
-<p>
-Afficher une page PRADO requiert des dizaines de fichiers PHP, ce qui est une cause de perte de temps. Ces fichiers comportent aussi beaucoup de commentaires qui permettent de générer la documentation des API. Dans le but de réduire ce coût, nous modifions notre fichier <tt>index.php</tt> et remplaçons <tt>prado.php</tt> par <tt>pradolite.php</tt>. Ce dernier est un gros fichier incluant les fichiers PHP nécessaires et dont on a retiré les commentaires.
-</p>
-
-<h2>Autres techniques</h2>
-
-<p>
-D'autres techniques sont disponibles pour améliorer les performances d'une application PRADO. D'après notre expérience, un des goulets d'étranglement dans une application Web, est l'accès aux bases de données. Les requêtes en base de données prennent souvent du temps, ce qui dégrade le temps d'affichage d'une page. Le <tt>cache</tt> est la principale solution à ce problème. Le module de <tt>cache</tt> activé dans notre fichier de configuration d'application peut aussi être utilisé dans ce but.
-</p>
-<p>
-Pour une page relativement stable et souvent consultée, le <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.OutputCache">cache de sortie</a> doit être envisagé. Le <tt>cache de sortie</tt> met en <tt>cache</tt> les parties sélectionnées d'une page. Ceci peut améliorer les performances des pages mises en <tt>cache</tt> de manière significative.
-</p>
-
-<p>
-Il a été prouvé que les solutions de <tt>cache</tt> côté serveur étaient très efficaces pour améliorer les performances d'une application PRADO. Par exemple, nous avons observé qu'en utilisant le <tt>Zend Optimizer</tt>, le RPS (requêtes par seconde) peut être multiplié par 10. Bien sûr, ceci au risque d'avoir des pages périmées, tandis que les solutions de <tt>cache</tt> de PRADO garantissent la validité des pages fournies.
-</p>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day5/fr/Summary.page b/demos/blog-tutorial/protected/pages/Day5/fr/Summary.page
deleted file mode 100755
index 1472c934..00000000
--- a/demos/blog-tutorial/protected/pages/Day5/fr/Summary.page
+++ /dev/null
@@ -1,41 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Résumé</h1>
-
-<p>
-Nous pouvons finalement déployer notre blog. Pour cela, nous devons juste copier le dossier <tt>blog</tt> complet vers le dossier du serveur Web. Nous pourrions avoir besoin de modifier <tt>index.php</tt> pour qu'il puisse trouver le chemin vers l'emplacement où a été installé le framework PRADO.
-</p>
-
-<p>
-Nous avons donc fini notre blog. Le processus peut paraitre complexe vu que nous avons passé pas loin de cinq jours pour y arriver. Toutefois, comme nous l'avions dit au début, le but de ce tutoriel est d'aider les développeurs PRADO à appréhender les principales techniques de PRADO.Le tutoriel n'avais pas pour but de finir un blog en cinq minutes, sinon nous n'aurions rien appris.
-</p>
-
-<p>
-En résumé, développer une application de gestion de base de données PRADO nécessite les étapes suivantes :
-</p>
-<ol>
- <li>Analyse et création de la base de données</li>
- <li>Créer le squelette de l'application avec <tt>prado-cli</tt></li>
- <li>Mise en place de la gestion d'erreur pour gérer les erreurs d'utilisations</li>
- <li>Création et mise en place du thème</li>
- <li>Création et mise en place des gabarits principaux</li>
- <li>Création de la connexion et des classes d'accès aux données</li>
- <li>Création des différentes pages</li>
- <li>Test et amélioration des performances/li>
- <li>Déploiement</li>
-</ol>
-
-<p>
-Contrairement à l'ordre de notre tutoriel, la gestion d'erreur et la création des thèmes sont placées au début du processus. Ceci est dû au fait que des changements d'ordre généraux sont la plupart du temps requis. Par exemple, nous avons dû remplacer <tt>THttpException</tt> par <tt>BlogException</tt> dans notre tutoriel. Si vous définissez vos feuilles de styles plus tôt, vous pourrez plus facilement les utiliser au cours de la création des gabarits de pages.
-</p>
-
-<p>
-Un dernier conseil, essayez de penser orienté objet pendant la phase d'analyse et d'implémentation. Utilisez l'héritage le plus souvent, et vous trouverez que le projet est plus facile à développer en équipe. Il vous sera aussi plus facile de réutiliser votre code et ainsi vos futurs projets seront finis plus rapidement.
-</p>
-
-
-
-
-<hr />
-<p>Traduction (laborieuse) par Eric.M, nous pouvez me contacter par message privé ou par email sur le <a href="http://www.pradosoft.com/forum/index.php">forum PRADO</a>.</p>
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day5/fr/UseTheme.page b/demos/blog-tutorial/protected/pages/Day5/fr/UseTheme.page
deleted file mode 100755
index 840a26b0..00000000
--- a/demos/blog-tutorial/protected/pages/Day5/fr/UseTheme.page
+++ /dev/null
@@ -1,138 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Utilisation des Thèmes et des Skins</h1>
-
-<p>
-PRADO propose un support intrinsèque des <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.Themes">thèmes</a>. En utilisant les thèmes, nous pouvons mieux séparer la logique applicative de la présentation et nous pouvons aussi changer facilement la présentation générale de notre blog.
-</p>
-
-<h2>Création des thèmes</h2>
-
-<p>
-Nous devons auparavant créer un dossier <tt>themes</tt>. C'est le dossier parent de tous les thèmes pour une application de PRADO. Chaque sous-dossier devient ainsi un thème dont le nom est le nom du sous-dossier.
-</p>
-
-<p>
-Pour créer un thème nommé <tt>Basic</tt>, nous créons un sous-dossier <tt>theme/Basic</tt>. Dans ce dossier, nous pouvons mettre des feuilles de styles dépendantes du thème, des fichiers Javascript, des images et des fichiers skins.
-</p>
-
-<com:InfoBox>
-Le dossier <tt>themes</tt> doit être accessible de l'extérieur. Ne mettez pas de données sensibles dans ce dossier. Nous pouvons changer l'emplacement de ce dossier en configurant le module <a href="http://www.pradosoft.com/docs/classdoc/TThemeManager">TThemeManager</a> dans le fichier de configuration de l'application.
-</com:InfoBox>
-
-
-<h3>Création de la feuille de style</h2>
-
-<p>
-Dans le dossier <tt>themes/Basic</tt>, nous créons un fichier CSS nommé <tt>style.css</tt>. Quand une page utilise ce thème, PRADO importe automatiquement la feuille de style dans cette page. Le même traitement est appliqué aux fichiers Javascript.
-</p>
-
-<p>
-Le contenu du fichier CSS est le suivant :
-</p>
-
-<com:TTextHighlighter CssClass="source">
-body {
- font-family: verdana, 'trebuchet ms', sans-serif;
- font-size: 10pt;
- background: white;
-}
-#page {
- margin: 0 auto 0 auto;
- width: 600px;
-}
-#footer {
- text-align: center;
- margin-top: 10px;
- padding: 10px;
- border-top: 1px solid silver;
-}
-.post-box {
- margin-bottom: 10px;
- padding: 5px;
-}
-.post-box h3 {
- padding: 5px;
- font-size: 13pt;
- background: lightgray;
-}
-.post-box a {
- color: black;
- text-decoration: none;
-}
-.post-box a:hover {
- color: red;
-}
-</com:TTextHighlighter>
-
-
-<h3>Création du fichier de Skin</h2>
-
-<p>
-Nous utilisons des <tt>skin</tt> pour initialiser les propriétés des contrôles PRADO. Les fichiers <tt>skin</tt> sont enregistrés avec une extension <tt>.skin</tt> dans le dossier du thème. Chaque fichier <tt>skin</tt> peut contenir plusieurs modèles pour un ou plusieurs types de contrôles.
-</p>
-
-<p>
-Pour notre test, nous allons créer un fichier <tt>skin</tt> qui changera la couleur de fond de nos liens dans le pied de page. Nous créons un fichier nommé <tt>button.skin</tt> dans le dossier du thème <tt>themes/Basic</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;com:THyperLink SkinID="MainMenu" BackColor="lightgreen" />
-</com:TTextHighlighter>
-
-<p>
-Le fichier <tt>button.skin</tt> contient une seule définition pour les contrôles de type <tt>THyperLink</tt> dont la propriété <tt>SkinID</tt> est <tt>MainMenu</tt>. La définition applique une couleur vert-clair comme couleur de fond du contrôle.
-</p>
-
-<p>
-En accord avec cette définition, nous modifions notre fichier <tt>protected/common/MainLayout.tpl</tt> pour appliquer aux liens du pied de page la valeur <tt>MainMenu</tt> à la propriété <tt>SkinID</tt>.
-</p>
-<com:TTextHighlighter CssClass="source" Language="prado">
-......
-<div id="footer">
-......
-&lt;com:THyperLink Text="Home" SkinID="MainMenu"
- NavigateUrl="&lt;%= $this->Service->DefaultPageUrl %>" />
-
-&lt;com:THyperLink Text="New Post" SkinID="MainMenu"
- NavigateUrl="&lt;%= $this->Service->constructUrl('posts.NewPost') %>"
- Visible="&lt;%= !$this->User->IsGuest %>" />
-......
-</div>
-......
-</com:TTextHighlighter>
-
-<com:InfoBox>
-La syntaxe des fichiers <tt>skin</tt> est très proche de celle des gabarits. Chaque balise <tt>&lt;com:&gt;</tt> définit la présentation d'un type de contrôle. PRADO concatène automatiquement les fichiers <tt>skin</tt> pour un thème et applique le tout lorsque la page est affichée.
-</com:InfoBox>
-
-
-<h2>Utilisation du thème</h2>
-
-<p>
-Pour utiliser le thème que nous venons juste de créer, nous modifions notre fichier de configuration de l'application comme ci-après. Comme vous pouvez le voir, nous affectons la valeur <tt>Basic</tt> (le nom du thème) à la priorité <tt>Theme</tt> pour toutes les pages.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-......
- <services>
- <service id="page" class="TPageService" DefaultPage="posts.ListPost">
- <pages MasterClass="Application.layouts.MainLayout" Theme="Basic" />
- </service>
- </services>
-......
-</com:TTextHighlighter>
-
-<com:InfoBox>
-Il est possible de préciser différents thèmes pour différentes pages, et ceci peut-être faits soit en modifiant le fichier de configuration de page soit par programmation (propriété <tt>Theme</tt>). En dernier recours, on peut le faire dans la méthode <tt>onPreInit()</tt> de la page, ceci parce que PRADO applique le thème au début du cycle de vie de la page.
-</com:InfoBox>
-
-
-<h2>Test</h2>
-<p>
-Pour voir la nouvelle présentation de notre site, allons à l'URL <tt>http://hostname/blog/index.php</tt>. Nous pouvons constater que la mise en page, les polices, les bordures sont modifiées. De même, la couleur de fond des liens en pied de page est vert-clair.
-</p>
-
-<img src="<%~ output.gif %>" class="output" />
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day5/fr/output.gif b/demos/blog-tutorial/protected/pages/Day5/fr/output.gif
deleted file mode 100755
index 67bd18a3..00000000
--- a/demos/blog-tutorial/protected/pages/Day5/fr/output.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day5/fr/output2.gif b/demos/blog-tutorial/protected/pages/Day5/fr/output2.gif
deleted file mode 100755
index 16c81704..00000000
--- a/demos/blog-tutorial/protected/pages/Day5/fr/output2.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day5/fr/output3.gif b/demos/blog-tutorial/protected/pages/Day5/fr/output3.gif
deleted file mode 100755
index 6879bbdf..00000000
--- a/demos/blog-tutorial/protected/pages/Day5/fr/output3.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day5/id/ErrorLogging.page b/demos/blog-tutorial/protected/pages/Day5/id/ErrorLogging.page
deleted file mode 100755
index 9d69f1dd..00000000
--- a/demos/blog-tutorial/protected/pages/Day5/id/ErrorLogging.page
+++ /dev/null
@@ -1,159 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Penanganan Kesalahan dan Pencatatan</h1>
-
-<p>
-Jika kita mencoba mengakses URL <tt>http://hostname/blog/index.php?page=EditPost&id=100</tt>, kita akan melihat halaman kesalahan berikut karena tulisan dengan ID 100 belum ada dalam sistem blog kita. Kita ingin mengkustomisasi halaman kesalahan ini agar ia terlihat lebih konsisten dengan tata letak halaman blog lain. Kita juga ingin mencatat jenis kesalahan ini untuk mempelajari kebiasaan pengguna. Dalam bagian ini, kita akan melaksanakan dua tugas ini.
-</p>
-
-<img src="<%~ output2.gif %>" class="output" />
-
-<com:InfoBox>
-Tugas penting dalam aplikasi Web adalah <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.Error">penanganan kesalahan</a> yang sering dikaitkan dengan <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.Logging">pencatatan</a>. Ada dua jenis kesalahan yang bisa terjadi dalam aplikasi PRADO: yang disebabkan oleh para pengembang dan yang disebabkan oleh pengguna-akhir. Pembentuk harus dipecahkan sebelum aplikasi dijadikan tahap produksi, sementara yang terakhir biasanya di dalam lingkup desain awal dan harus ditangani dengan baik (misalnya mencatat kesalahan dan menampilkan halaman khusus yang menginstruksikan pengguna-akhir apa yang harus dilakukan selanjutnya). PRADO mengimplementasikan kerangka kerja yang fleksibel serta bertenaga untuk menangani kesalahan dan pencatatan.
-</com:InfoBox>
-
-
-<h2>Mengkustomisasi Penanganan Kesalahan</h2>
-
-<p>
-PRADO secara implisit mengambil modul <tt>TErrorHandler</tt> untuk menangani kesalahan. Kita ingin mengkustomisasi modul ini agar sistem blog kita dapat menampilkan halaman terkustomisasi untuk kesalahan yang disebabkan oleh pengguna-akhir. Selanjutnya memodifikasi konfigurasi aplikasi seperti berikut:
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-......
-<modules>
- ......
- <module class="Application.BlogErrorHandler" />
- ......
-</modules>
-......
-</com:TTextHighlighter>
-
-<p>
-Kelas <tt>BlogErrorHandler</tt> seperti ditetapkan di atas adalah modul pengendali kesalahan baru as yang akan dibuat berikutnya. Ia memperluas dan mengganti modul standar <tt>TErrorHandler</tt>.
-</p>
-
-<p>
-Kita membuat sebuah file bernama <tt>protected/BlogErrorHandler.php</tt> seperti berikut. Kelas <tt>BlogErrorHandler</tt> mengganti dua metode <tt>TErrorHandler</tt>:
-</p>
-<ul>
- <li><tt>getErrorTemplate()</tt> - metode ini mengembalikan string template yang dipakai untuk menampilkan kesalahan pengguna tertentu.</li>
- <li><tt>handleExternalError()</tt> - metode ini dipanggil saat kesalahan pengguna terjadi dan menampilkan kesalahannya.</li>
-</ul>
-<com:TTextHighlighter CssClass="source" Language="php">
-Prado::using('System.Exceptions.TErrorHandler');
-Prado::using('Application.BlogException');
-
-class BlogErrorHandler extends TErrorHandler
-{
- /**
- * Mengambil template yang dipakai untuk menampilkan eksepsi eksternal.
- * Metode ini mengganti implementasi leluhurnya.
- */
- protected function getErrorTemplate($statusCode,$exception)
- {
- // gunakan template sendiri untuk BlogException
- if($exception instanceof BlogException)
- {
- // ddapatkan path file template kesalahan: protected/error.html
- $templateFile=Prado::getPathOfNamespace('Application.error','.html');
- return file_get_contents($templateFile);
- }
- else // sebaliknya gunakan template yang didefinisikan oleh PRADO
- return parent::getErrorTemplate($statusCode,$exception);
- }
-
- /**
- * Menangani kesalahan eksternal yang disebabkan oleh pengguna-akhir.
- * Metode ini mengganti implementasi leluhurnya.
- * Ini dipanggil oleh PRADO saat eksepsi eksternal dikeluarkan.
- */
- protected function handleExternalError($statusCode,$exception)
- {
- // catat kesalahan (hanya untuk BlogException)
- if($exception instanceof BlogException)
- Prado::log($exception->getErrorMessage(),TLogger::ERROR,'BlogApplication');
- // panggil implementasi leluhur untuk menampilkan kesalahan
- parent::handleExternalError($statusCode,$exception);
- }
-}
-</com:TTextHighlighter>
-
-<p>
-Dalam kode di atas, kita menetapkan bahwa saat <tt>BlogException</tt> dikeluarkan, kita menggunakan template baru <tt>protected/error.html</tt> untuk menampilkan kesalahan. Oleh karena itu, kita perlu membuat kelas <tt>BlogException</tt> dan mengganti semua <tt>THttpException</tt> yang ada dalam kode kita (seperti misalnya <a href="?page=Day3.CreateEditUser">EditUser</a> dan halaman <a href="?page=Day4.CreateReadPost">ReadPost</a>). Kita juga perlu membuat template kesalahan <tt>protected/error.html</tt>. Kelas <tt>BlogException</tt> memperluas <tt>THttpException</tt> dan kosong. File kelas disimpan sebagai <tt>protected/BlogException.php</tt>.
-
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="php">
-class BlogException extends THttpException
-{
-}
-</com:TTextHighlighter>
-
-<p>
-Di bawah ini konten dalam template kesalahan kita <tt>protected/error.html</tt>. Catatan, template bukan template PRADO karena ia hanya mengenal jumlah token yang sangat terbatas, seperti <tt>%%ErrorMessage%%</tt>, <tt>%%ServerAdmin%%</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<html>
-<head>
-<title>%%ErrorMessage%%</title>
-</head>
-<body>
-<div id="page">
-<div id="header">
-<h1>My PRADO Blog</h1>
-</div>
-<div id="main">
-<p style="color:red">%%ErrorMessage%%</p>
-<p>
-The above error happened when the server was processing your request.
-</p>
-<p>
-If you think this is a server error, please contact the <a href="mailto:%%ServerAdmin%%">webmaster</a>.
-</p>
-</div>
-</body>
-</html>
-</com:TTextHighlighter>
-
-
-<h2>Mencatat Kesalahan</h2>
-
-<p>
-Dalam metode <tt>handleExternalError()</tt> pada <tt>BlogErrorHandler</tt>, kita memanggil <tt>Prado::log()</tt> untuk mencatat kesalahan jika tipenya adalah <tt>BlogException</tt>. Kesalahan dicatat dalam memori. Untuk menyimpan catatan ke dalam medium permanen seperti file atau database, kita perlu menghidupkan rute pencatatan kesalahan yang sesuai. Ini dikerjakan dalam konfigurasi aplikasi seperti berikut:
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-......
-<modules>
- ......
- <module id="log" class="System.Util.TLogRouter">
- <route class="TFileLogRoute" Categories="BlogApplication" />
- </module>
- ......
-</modules>
-......
-</com:TTextHighlighter>
-
-<p>
-Dalam konfigurasi di atas, kita menambahkan rute log yang menyimpan catatan ke dalam sebuah file. Kita juga menetapkan filter kategori sebagai <tt>BlogApplication</tt> agar hanya mencatat pesan pada kategori yang dipilih yang disimpan. Ini membantu mengurangi ukuran file catatan dan juga meningkatkan pembacaannya.
-</p>
-
-<h2>Pengujian</h2>
-<p>
-Untuk melihat bagaimana sistem blog kita merespon permintaan tidak benar dari pengguna, kita menguji URL <tt>http://hostname/blog/index.php?page=posts.ReadPost&id=100</tt>. Kita akan melihat halaman kesalahan berikut yang berbeda dari apa yang telah kita lihat sebelumnya.
-</p>
-
-<img src="<%~ output3.gif %>" class="output" />
-
-<p>
-Jika kita mencari di bawah direktori <tt>protected/runtime</tt>, kita akan menemukan file bernama <tt>prado.log</tt>. Ini adalah file log yang baru dikonfigurasi untuk menyimpan pesan kesalahan. File dapat berisi konten seperti berikut,
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-Jun 28 22:15:27 [Error] [BlogApplication] Unable to find the specified post.
-Jun 29 08:42:57 [Error] [BlogApplication] Unable to find the specified post.
-</com:TTextHighlighter>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day5/id/Performance.page b/demos/blog-tutorial/protected/pages/Day5/id/Performance.page
deleted file mode 100755
index 62a195b3..00000000
--- a/demos/blog-tutorial/protected/pages/Day5/id/Performance.page
+++ /dev/null
@@ -1,67 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Penyesuaian Performansi</h1>
-
-<p>
-Sebelum kita menyebarkan sistem blog, kita ingin menyesuaikan performansi sistem.
-</p>
-
-<h2>Mengubah Mode Aplikasi</h2>
-
-<p>
-Aplikasi PRADO dapat dikonfigurasi untuk berjalan dalam mode berbeda. Standarnya, ia berjalan dalam mode debug yang membuat banyak catatan pesan dan seandainya ada kesalahan, menampilkan pangilan stack lengkap atas tempat kesalahan. Perilaku demikian lebih disukai selama pengembangan, tapi tidak jika sistem sudah dalam produksi. Untuk mengubah mode aplikasi dari <tt>Debug</tt> ke <tt>Normal</tt> (berarti mode produksi), kita memodifikasi konfigurasi aplikasi seperti berikut:
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-<?xml version="1.0" encoding="utf-8"?>
-<application id="blog" mode="Normal">
- ......
-</application>
-</com:TTextHighlighter>
-
-<h2>Menghidupkan Cache</h2>
-
-<p>
-Ada banyak pekerjaan penguraian terkait dalam sebuah aplikasi PRADO: konfigurasi XML, template, tema, skin, dll. Untuk setiap permintaan pengguna, PRADO perlu melakukan ulang penguraian. Untuk menghemat usaha ini, kita dapat menghidupkan cache. Untuk melakukannya, kita mengubah konfigurasi aplikasi seperti berikut,
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-......
-<modules>
- ......
- <module id="cache" class="System.Caching.TDbCache" />
- ......
-</modules>
-......
-</com:TTextHighlighter>
-
-<p>
-Sekarang setelah mengakses setiap halaman dalam sistem blog kita, kita akan dapat menemukan file bernama <tt>sqlite3.cache</tt>. Ini adalah file database yang memelihara template halaman yang diuraikan, konfigurasi, dll.
-</p>
-
-<com:InfoBox>
-Modul cache yang baru kita hidupkan menggunakan database sebagai medium cache persisten. PRADO juga mempunyai modul cache lain yang menggunakan medium cache lebih cepat, seperti misalnya <tt>TMemCache</tt>, <tt>TAPCCache</tt>. Diperlukan instalasi dari ekstensi PHP terkait.
-</com:InfoBox>
-
-
-<h2>Menggunakan <tt>pradolite.php</tt></h2>
-
-<p>
-Menjalankan halaman PRADO melibatkan puluhan file PHP, yang dapat menghabiskan waktu. File-file ini juga membawa banyak komentar untuk membuat dokumentasi APU ramah-pengguna. Untuk mengurangi beban ini, kita memodifikasi <tt>index.php</tt> dan mengganti inklusi <tt>prado.php</tt> dengan <tt>pradolite.php</tt>. Yang kedua adalah file besar yang dibuat dengan menggabung file kode tertentu dan membuang komentar. Selanjutnya kita bisa mengubah <tt>index.php</tt> seperti berikut,
-</p>
-
-<h2>Teknik Lain</h2>
-
-<p>
-Ada teknik lain untuk meningkatkan performansi lebih lanjut terhadap aplikasi PRADO. Berdasarkan pengalaman kami, salah satu lubang botol dalam aplikasi Web adalah database tier. Query database seringkali membutuhkan waktu lama untuk menyelesaikannya, yang memperlambat waktu respon terhadap permintaan sebuah halaman. Cache adalah solusi utama untuk masalah ini. Modul cache yang dihidupkan dalam konfigurasi aplikasi kita juga bisa dipakai untuk keperluan ini.
-</p>
-
-<p>
-Untuk halaman yang relatif stabil dan jarang diakses, <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.OutputCache">output caching</a> bisa dipertimbangkan. Output caching melakukan cache output HTML dari bagian yang dipilih pada sebuah halaman. Ini dapat meningkatkan performansi dari halaman yang di-cache secara signifikan.
-</p>
-
-<p>
-Teknik cache server terbukti sangat efektif dalam meningkatkan performansi atas aplikasi PRADO. Sebagai contoh, kita telah mengamati bahwa dengan menggunakan Zend Optimizer, RPS (request per second) dari aplikasi PRADO bisa ditingkatkan lebih dari sepuluh kali lipat. Tentu saja, ini pada beban dari output lama, sementara teknik cache PRADO selalu memastikan kebenaran dari output.
-</p>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day5/id/Summary.page b/demos/blog-tutorial/protected/pages/Day5/id/Summary.page
deleted file mode 100755
index 8925948b..00000000
--- a/demos/blog-tutorial/protected/pages/Day5/id/Summary.page
+++ /dev/null
@@ -1,36 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Ringkasan</h1>
-
-<p>
-Akhirnya kita dapat menyebarkan sistem blog kita. Untuk melakukannya, kita hanya perlu meng-copy seluruh direktori <tt>blog</tt> directory ke direktori Web sasaran. Kita perlu untuk memodifikasi <tt>index.php</tt> agar ia dapat mencari path yang benar di mana kerangka kerja PRADO diinstalasi.
-</p>
-
-<p>
-Dengan demikian kita telah menyelesaikan sistem blog kita. Proses terlihat tidak gampang karena ia memerlukan hampir lima hari untuk sampai di sini. Akan tetapi, karena kita memulainya dari awal, tujuan utama dari tutorial ini adalah untuk membantu para pengembang PRADO terbiasa dengan teknik yang umum digunakan dalam PRADO. Tutorial tidak berarti menyelesaikan sistem blog dalam waktu lima menit dan selanjutnya tidak mempelajari apapun.
-</p>
-
-<p>
-Secara ringkas, mengembangkan aplikasi PRADO dengan kendali-DB melibatkan langkah-langkah berikut:
-</p>
-<ol>
- <li>Mendesain dan membuat database</li>
- <li>Membuat tata letak aplikasi awal menggunakan <tt>prado-cli</tt></li>
- <li>Menyiapkan proses pengendalian kesalahan untuk menghadapi kesalahan pengguna-akhir</li>
- <li>Membuat dan menyiapkan tema</li>
- <li>Mendesain dan membuat kelas master untuk berbagi tata letak umum halaman</li>
- <li>Membuat kelas database dan menyiapkan koneksi database</li>
- <li>Mendesain dan membuat bermacam-macam halaman</li>
- <li>Menguji dan menyesuaikan performansi</li>
- <li>Menyebarkan aplikasi</li>
-</ol>
-
-<p>
-Tidak seperti urutan dalam tutorial kita, pengendalian kesalahan dan pembuatan tema dikerjakan lebih awal dalam proses di atas. Ini dikarenakan seringkali diperlukan perubahan besar dalam kode kelas dan template. Sebagai contoh, kita perlu mengganti <tt>THttpException</tt> dengan <tt>BlogException</tt> dalam tutorial kita. Jika kita mendefinisikan kelas stylesheet lebih awal, kita dapat dengan mudah menggunakannya saat membuat template halaman.
-</p>
-
-<p>
-Sebagai tips terakhir, coba untuk berpikir dalam cara terorientasi-obyek selama mendesain dan mengimplementasikan. Gunakan turunan kelas dan komposisi secara luas, dan Anda akan menemukan seluruh proyek lebih mudah dikembangkan secara paralel oleh multipel pengembang. Kode juga lebih banya memiliki kesempatan dipakai ulang agar proyek mendatang dapat diselesaikan dalam waktu yang lebih cepat.
-</p>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day5/id/UseTheme.page b/demos/blog-tutorial/protected/pages/Day5/id/UseTheme.page
deleted file mode 100755
index 6766d659..00000000
--- a/demos/blog-tutorial/protected/pages/Day5/id/UseTheme.page
+++ /dev/null
@@ -1,138 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Menggunakan Tema dan Skin</h1>
-
-<p>
-PRADO memiliki dukungan dasar untuk <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.Themes">tema</a>. Dengan menggunakan tema, kita dapat memisahkan logika dan penyajian secara lebih baik, dan kita juga bisa mengubah penampilan keseluruhan pada sistem blog kita jauh lebih mudah.
-</p>
-
-<h2>Membuat Tema</h2>
-
-<p>
-Pertama kita buat direktori baru bernama <tt>themes</tt>. Ini adalah direktori leluhur bagi semua tema terkait aplikasi PRADO tertentu. Setiap subdirektori di bawah direktori ini yang nama temanya adalah nama subdirektori.
-</p>
-
-<p>
-Untuk membuat tema bernama <tt>Basic</tt>, kita membuat subdirektori <tt>theme/Basic</tt>. Di bawah direktori ini, kita dapat menempatkan file stylesheet dependen-tema, file Javascript, gambar, dan file skin.
-</p>
-
-<com:InfoBox>
-Direktori <tt>themes</tt> harus bisa diakses dari Web, seperti halnya direktori <tt>assets</tt>. Jangan menempatkan file data sensitif di bawah direktori ini. Anda bisa mengubah nama atau lokasi dari direktori ini dengan mengkonfigurasi modul <a href="http://www.pradosoft.com/docs/classdoc/TThemeManager">TThemeManager</a> dalam konfigurasi aplikasi.
-</com:InfoBox>
-
-
-<h3>Membuat File Stylesheet</h2>
-
-<p>
-Di bawah direktori <tt>themes/Basic</tt>, kita membuat sebuah file CSS stylesheet bernama <tt>style.css</tt>. ketika sebuah halaman menggunakan tema ini, PRADO secara otomatis akan mengimpor stylesheet ini ke halaman. Hal yang sama terjadi untuk file Javascript.
-</p>
-
-<p>
-File CSS ditampilkan seperti berikut.
-</p>
-
-<com:TTextHighlighter CssClass="source">
-body {
- font-family: verdana, 'trebuchet ms', sans-serif;
- font-size: 10pt;
- background: white;
-}
-#page {
- margin: 0 auto 0 auto;
- width: 600px;
-}
-#footer {
- text-align: center;
- margin-top: 10px;
- padding: 10px;
- border-top: 1px solid silver;
-}
-.post-box {
- margin-bottom: 10px;
- padding: 5px;
-}
-.post-box h3 {
- padding: 5px;
- font-size: 13pt;
- background: lightgray;
-}
-.post-box a {
- color: black;
- text-decoration: none;
-}
-.post-box a:hover {
- color: red;
-}
-</com:TTextHighlighter>
-
-
-<h3>Membuat File Skin</h2>
-
-<p>
-Kita menggunakan skin untuk menginisialisasi properti kontrol PRADO. Skin disimpan sebagai file skin (nama berakhiran <tt>.skin</tt>) di bawah direktori tema. Setiap file skin bisa berisi multipel skin untuk satu atau beberapa tipe kontrol.
-</p>
-
-<p>
-Sebagai pengujian, kita akan mencoba membuat sebuah skin yang mengubah warna latar belakang link tombol dalam footer halaman. Kita membuat sebuah file bernama <tt>button.skin</tt> di bawah direktori tema <tt>themes/Basic</tt>.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="prado">
-&lt;com:THyperLink SkinID="MainMenu" BackColor="lightgreen" />
-</com:TTextHighlighter>
-
-<p>
-File skin <tt>button.skin</tt> hanya berisi satu skin untuk kontrol <tt>THyperLink</tt> yang properti <tt>SkinID</tt>-nya adalah <tt>MainMenu</tt>. Skin menyetel warna latar belakang kontrol ke hijau-terang.
-</p>
-
-<p>
-Sejalan dengan itu, kita perlu memodifikasi <tt>protected/common/MainLayout.tpl</tt> agar link tombol dalam footer menggunakan <tt>MainMenu</tt> sebagai <tt>SkinID</tt>-nya.
-</p>
-<com:TTextHighlighter CssClass="source" Language="prado">
-......
-<div id="footer">
-......
-&lt;com:THyperLink Text="Home" SkinID="MainMenu"
- NavigateUrl="&lt;%= $this->Service->DefaultPageUrl %>" />
-
-&lt;com:THyperLink Text="New Post" SkinID="MainMenu"
- NavigateUrl="&lt;%= $this->Service->constructUrl('posts.NewPost') %>"
- Visible="&lt;%= !$this->User->IsGuest %>" />
-......
-</div>
-......
-</com:TTextHighlighter>
-
-<com:InfoBox>
-Sintaks untuk file skin sangat mirip dengan template PRADO. Setiap tag <tt>&lt;com:&gt;</tt> mendefinisikan sebuah skin untuk tipe kontrol tertentu. PRADO secara otomatis mengumpulkan seluruh file skin dalam sebuah tema dan menerapkannya ketika halaman bertema sedang disajikan.
-</com:InfoBox>
-
-
-<h2>Menggunakan Tema</h2>
-
-<p>
-Untuk menggunakan tema yang baru kita buat, kita memodifikasi konfigurasi aplikasi seperti berikut. Seperti kita lihat, properti <tt>Theme</tt> untuk semua halaman disetel sebagai <tt>Basic</tt>, nama tema yang baru saja kita buat.
-</p>
-
-<com:TTextHighlighter CssClass="source" Language="xml">
-......
- <services>
- <service id="page" class="TPageService" DefaultPage="posts.ListPost">
- <pages MasterClass="Application.layouts.MainLayout" Theme="Basic" />
- </service>
- </services>
-......
-</com:TTextHighlighter>
-
-<com:InfoBox>
-Dimungkinkan untuk menetapkan tema berbeda untuk halaman yang berbeda, dan ini dapat dikerjakan baik dalam konfigurasi aplikasi/halaman ataupun secara programatis (perhatikan <tt>Theme</tt> adalah properti halaman). Untuk yan gterakhir, ia harus dikerjakan dalam metode <tt>onPreInit()</tt> pada halaman karena PRADO menerapkan tema ke halaman sebelumnya dalam masa hidup halaman.
-</com:InfoBox>
-
-
-<h2>Pengujian</h2>
-<p>
-Untuk melihat bagaimana halaman blog terlihat, kunjungi URL <tt>http://hostname/blog/index.php</tt>. Kita akan melihat font, tata letak, bingkai beruah dalam halaman. Juga, link tombol dalam footer mempunyai latar belakang hijau terang.
-</p>
-
-<img src="<%~ output.gif %>" class="output" />
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/Day5/id/output.gif b/demos/blog-tutorial/protected/pages/Day5/id/output.gif
deleted file mode 100755
index 67bd18a3..00000000
--- a/demos/blog-tutorial/protected/pages/Day5/id/output.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day5/id/output2.gif b/demos/blog-tutorial/protected/pages/Day5/id/output2.gif
deleted file mode 100755
index 16c81704..00000000
--- a/demos/blog-tutorial/protected/pages/Day5/id/output2.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Day5/id/output3.gif b/demos/blog-tutorial/protected/pages/Day5/id/output3.gif
deleted file mode 100755
index 6879bbdf..00000000
--- a/demos/blog-tutorial/protected/pages/Day5/id/output3.gif
+++ /dev/null
Binary files differ
diff --git a/demos/blog-tutorial/protected/pages/Overview.page b/demos/blog-tutorial/protected/pages/Overview.page
index bc895a33..a4eb950c 100755
--- a/demos/blog-tutorial/protected/pages/Overview.page
+++ b/demos/blog-tutorial/protected/pages/Overview.page
@@ -3,7 +3,7 @@
<h1>Welcome to the PRADO Blog Tutorial</h1>
<p>
-The purpose of this tutorial is to provide new PRADO users a step-by-step guidance on how to develop a blog system using PRADO. Readers of this tutorial are not required to have prior knowledge about PRADO. However, readers should have basic knowledge of object-oriented programming (OOP) and database programming. For a more definitive guidance about PRADO, readers may refer to the <a href="http://www.pradosoft.com/demos/quickstart/">Quickstart Tutorial</a>.
+The purpose of this tutorial is to provide new PRADO users a step-by-step guidance on how to develop a blog system using PRADO. Readers of this tutorial are not required to have prior knowledge about PRADO. However, readers should have basic knowledge of object-oriented programming (OOP) and database programming. For a more definitive guidance about PRADO, readers may refer to the <a href="http://www.pradoframework.net/site/demos/quickstart/">Quickstart Tutorial</a>.
</p>
<p>
@@ -11,7 +11,7 @@ This tutorial is organized in a day-by-day fashion. Each day new PRADO concepts
</p>
<p>
-In order to follow the tutorial to create and run the <a href="samples/">day-by-day examples</a>, readers should have access to a Web server installed with <b>PHP 5.1.0+</b> and <b>PRADO 3.1+</b>. Instructions for installing PRADO can be found at <a href="http://www.pradosoft.com/demos/quickstart/?page=GettingStarted.Installation">pradosoft.com</a>.
+In order to follow the tutorial to create and run the <a href="samples/">day-by-day examples</a>, readers should have access to a Web server installed with <b>PHP 5.1.0+</b> and <b>PRADO 3.1+</b>. Instructions for installing PRADO can be found at <a href="http://www.pradoframework.net/site/demos/quickstart/?page=GettingStarted.Installation">project website</a>.
</p>
</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/fr/Overview.page b/demos/blog-tutorial/protected/pages/fr/Overview.page
deleted file mode 100755
index 72fc7371..00000000
--- a/demos/blog-tutorial/protected/pages/fr/Overview.page
+++ /dev/null
@@ -1,17 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Bienvenue dans ce tutoriel de développement d'un Blog</h1>
-
-<p>
-Le but de ce tutoriel est de fournir aux nouveaux utilisateurs de PRADO, un guide pas à pas sur la façon de développer avec PRADO. Les lecteurs de ce tutoriel n'ont besoin d'aucune connaissance au sujet de PRADO. Par contre, les lecteurs doivent avoir des connaissances de base concernant la programmation orientée objet (POO) et les bases de données. Pour un guide plus exhaustif de PRADO, les lecteurs peuvent se référer au document <a href="http://www.pradosoft.com/demos/quickstart/">Quickstart Tutorial</a>.
-</p>
-
-<p>
-Ce tutoriel est organisé sous la forme de journées. Chaque journée, des concepts et des techniques nouvelles de PRADO sont abordés et de nouvelles fonctionnalités sont mises en place. A la fin, nous obtiendrons un moteur de Blog simple mettant en place les fonctionnalités suivantes <a href="?page=Requirements">buts à atteindre</a>.
-</p>
-
-<p>
-Pour pouvoir suivre ce tutoriel et créer les <a href="samples/">exemples pas à pas</a>, les lecteurs doivent avoir accès à un serveur Web qui implémente <b>PHP 5.1.0+</b> et <b>PRADO 3.1+</b>. Les instructions pour installer PRADO peuvent être trouvées ici : <a href="http://www.pradosoft.com/demos/quickstart/?page=GettingStarted.Installation">pradosoft.com</a>.
-</p>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/fr/Requirements.page b/demos/blog-tutorial/protected/pages/fr/Requirements.page
deleted file mode 100755
index 976a621f..00000000
--- a/demos/blog-tutorial/protected/pages/fr/Requirements.page
+++ /dev/null
@@ -1,37 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Buts à atteindre</h1>
-<p>
-Cette page décrit les buts que nous allons nous fixer et développer avec PRADO. Nous n'allons pas mettre en place toutes les fonctionnalités d'un blog (ie : commentaires, organisation des messages, calendrier, etc.), parce que nous voulons garder ce tutoriel aussi court que possible et que nous espérons que ces fonctionnalités seront faciles à mettre en place après avoir fini ce tutoriel.
-</p>
-
-<p>
-En général, les blog permettent aux utilisateurs de lire les messages et aux utilisateurs authentifiés de publier des messages. L'outil doit séparer la logique applicative de la couche présentation et il doit supporter le changement de thèmes graphiques.
-</p>
-
-<h2>Gestion des utilisateurs</h2>
-<ul>
-<li>L'outil doit permettre de gérer les utilisateurs et leurs droits.</li>
-<li>L'outil doit permettre à l'administrateur de lister tous les utilisateurs.</li>
-<li>L'outil doit permettre à l'administrateur de créer des nouveaux utilisateurs.</li>
-<li>L'outil doit permettre à l'administrateur ou au propriétaire du compte de modifier son profil.</li>
-<li>L'outil doit permettre à l'administrateur de supprimer un utilisateur.</li>
-</ul>
-
-<h2>Gestion des messages</h2>
-<ul>
-<li>L'outil doit permettre de lister les messages par ordre de date décroissante et d'en gérer la pagination.</li>
-<li>L'outil doit permettre de consulter le détail d'un message.</li>
-<li>L'outil doit permettre la création d'un nouveau message par un utilisateur authentifié.</li>
-<li>L'outil doit permettre la mise à jour d'un message par son auteur ou par l'administrateur.</li>
-<li>L'outil doit permettre la suppression d'un message par son auteur ou par l'administrateur.</li>
-</ul>
-
-<h2>Maintenance de l'outil</h2>
-<ul>
-<li>L'outil doit permettre de collecter les retours utilisateurs.</li>
-<li>L'outil doit être assez flexible pour permettre l'intégration ultérieure de nouveaux composants.</li>
-<li>L'outil doit permettre de changer le thème qui régit la présentation des composants.</li>
-</ul>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/id/Overview.page b/demos/blog-tutorial/protected/pages/id/Overview.page
deleted file mode 100755
index 30c2e772..00000000
--- a/demos/blog-tutorial/protected/pages/id/Overview.page
+++ /dev/null
@@ -1,17 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Selamat datang di Tutorial Blog PRADO</h1>
-
-<p>
-Tujuan tutorial ini disediakan untuk para pengguna pemula PRADO dengan bimbingan langkah demi langkah terhadap bagaimana untuk mengembangkan sebuah sistem blog menggunakan PRADO. Para pembaca tutorial ini tidak harus memiliki pengetahuan sebelumnya mengenai PRADO. Akan tetapi, para pembaca harus mengetahui dasar dari pemrograman obyek-terorientasi (OOP) dan pemrograman database. Untuk bimbingan definitif mengenai PRADO, para pembaca dapat merujuk ke <a href="http://www.pradosoft.com/demos/quickstart/">Tutorial Cepat</a>.
-</p>
-
-<p>
-Tutorial ini diatur dengan cara hari demi hari. Setiap haru konsep baru PRADO dan teknik diperkenalkan, dan fitur baru dari sistem blog diimplementasikan. Di akhir, kita akan melengkapi aplikasi blog sederhana yang sesuai dengan daftar <a href="?page=Requirements">persyaratan awal</a>.
-</p>
-
-<p>
-Untuk mengikuti tutorial dalam membuat dan menjalankan <a href="samples/">contoh hari-demi-hari</a>, para pembaca harus mempunyai akses ke server Web yang diinstalasi dengan <b>PHP 5.1.0+</b> dan <b>PRADO 3.1+</b>. Instruksi untuk menginstalasi PRADO dapat ditemukan di <a href="http://www.pradosoft.com/demos/quickstart/?page=GettingStarted.Installation">pradosoft.com</a>.
-</p>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/pages/id/Requirements.page b/demos/blog-tutorial/protected/pages/id/Requirements.page
deleted file mode 100755
index 4bee1d62..00000000
--- a/demos/blog-tutorial/protected/pages/id/Requirements.page
+++ /dev/null
@@ -1,38 +0,0 @@
-<com:TContent ID="Main">
-
-<h1>Analisis Persyaratan</h1>
-
-<p>
-Halaman ini menampilkan persyaratan untuk sistem blog yang akan kami kembangkan dalam tutorial ini menggunakan PRADO. Kami tidak menyertakan beberapa fitur blog populer di sini (misalnya mengkomentari, mengatur tulisan, kalender, dll), karena kami ingin menjaga tutorial cukup pendek dan kami percaya fitur-fitur ini mudah untuk ditambahkan setelah Anda selesai membaca tutorial ini.
-</p>
-
-<p>
-Secara umum, sistem blog harus membolehkan para pengguna untuk membaca blog dan pengguna terotentikasi mempublikasikan blog. Ini harus memisahkan penyajian dan logika, dan harus mendukung penggantian tema.
-</p>
-
-<h2>Manajemen Pengguna</h2>
-<ul>
-<li>Sistem harus membolehkan otentikasi dan otorisasi para pengguna.</li>
-<li>Sistem harus membolehkan administrator untul menampilkan seluruh akun pengguna.</li>
-<li>Sistem harus membolehkan administrator untuk membuat akun pengguna baru.</li>
-<li>Sistem harus membolehkan administrator atau pemegang akun untuk memutakhirkan akunnya yang sudah ada.</li>
-<li>Sistem harus membolehkan administrator untuk menghapus akun pengguna.</li>
-</ul>
-
-<h2>Manajemen Tulisan</h2>
-<ul>
-<li>Sistem harus membolehkan menampilkan tulisan dengan kriteria waktu pembuatannya dalam urutan mengecil dengan lembar halaman.</li>
-<li>Sistem harus membolehkan melihat rincian dari tulisan yang dipilih.</li>
-<li>Sistem harus membolehkan pembuatan tulisan baru oleh pengguna terotentikasi.</li>
-<li>Sistem harus membolehkan memutakhirkan tulisan yang sudah ada oleh pembuatnya atau administrator.</li>
-<li>Sistem harus membolehkan penghapusan tulisan yang sudah ada oleh pembbuatnya atau administrator.</li>
-</ul>
-
-<h2>Pemeliharan Sistem</h2>
-<ul>
-<li>Sistem harus bisa mengumpulkan masukan pengguna.</li>
-<li>Sistem harus cukup fleksibel untuk bisa menambahkan portlet baru di masa mendatang.</li>
-<li>Sistem harus membolehkan mengganti tema yang mendefinisikan gaya dari elemen UI umum.</li>
-</ul>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/blog-tutorial/themes/PradoSoft/pradologo.gif b/demos/blog-tutorial/themes/PradoSoft/pradologo.gif
index 3b073b80..20ecf815 100755..100644
--- a/demos/blog-tutorial/themes/PradoSoft/pradologo.gif
+++ b/demos/blog-tutorial/themes/PradoSoft/pradologo.gif
Binary files differ
diff --git a/demos/blog/protected/Common/BlogDataModule.php b/demos/blog/protected/Common/BlogDataModule.php
index 384ee83d..39db9280 100755
--- a/demos/blog/protected/Common/BlogDataModule.php
+++ b/demos/blog/protected/Common/BlogDataModule.php
@@ -3,18 +3,18 @@
* BlogDataModule class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* BlogDataModule class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class BlogDataModule extends TModule
{
diff --git a/demos/blog/protected/Common/BlogErrorHandler.php b/demos/blog/protected/Common/BlogErrorHandler.php
index 5446a5ee..df2d44bd 100755
--- a/demos/blog/protected/Common/BlogErrorHandler.php
+++ b/demos/blog/protected/Common/BlogErrorHandler.php
@@ -3,9 +3,9 @@
* BlogErrorHandler class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
Prado::using('System.Exceptions.TErrorHandler');
@@ -15,9 +15,9 @@ Prado::using('Application.Common.BlogException');
* BlogErrorHandler class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class BlogErrorHandler extends TErrorHandler
{
diff --git a/demos/blog/protected/Common/BlogException.php b/demos/blog/protected/Common/BlogException.php
index e857cc3d..0a28d0b1 100755
--- a/demos/blog/protected/Common/BlogException.php
+++ b/demos/blog/protected/Common/BlogException.php
@@ -3,18 +3,18 @@
* BlogException class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* BlogException class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class BlogException extends THttpException
{
diff --git a/demos/blog/protected/Common/BlogPage.php b/demos/blog/protected/Common/BlogPage.php
index 2c394e46..ebcb49bb 100755
--- a/demos/blog/protected/Common/BlogPage.php
+++ b/demos/blog/protected/Common/BlogPage.php
@@ -3,18 +3,18 @@
* BlogPage class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* BlogPage class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class BlogPage extends TPage
{
diff --git a/demos/blog/protected/Common/BlogUser.php b/demos/blog/protected/Common/BlogUser.php
index 3ce8af1b..20bf551f 100755
--- a/demos/blog/protected/Common/BlogUser.php
+++ b/demos/blog/protected/Common/BlogUser.php
@@ -3,9 +3,9 @@
* BlogUser class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
Prado::using('System.Security.TUser');
@@ -14,9 +14,9 @@ Prado::using('System.Security.TUser');
* BlogUser class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class BlogUser extends TUser
{
diff --git a/demos/blog/protected/Common/BlogUserManager.php b/demos/blog/protected/Common/BlogUserManager.php
index c9419d73..c089c315 100755
--- a/demos/blog/protected/Common/BlogUserManager.php
+++ b/demos/blog/protected/Common/BlogUserManager.php
@@ -3,9 +3,9 @@
* BlogUserManager class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
Prado::using('System.Security.IUserManager');
@@ -15,9 +15,9 @@ Prado::using('Application.Common.BlogUser');
* BlogUserManager class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class BlogUserManager extends TModule implements IUserManager
{
diff --git a/demos/blog/protected/Common/XListMenu.php b/demos/blog/protected/Common/XListMenu.php
index 5289167f..1d425c60 100755
--- a/demos/blog/protected/Common/XListMenu.php
+++ b/demos/blog/protected/Common/XListMenu.php
@@ -3,9 +3,9 @@
* XListMenu and XListMenuItem class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
Prado::using('System.Web.UI.WebControls.TListControl');
@@ -34,9 +34,9 @@ Prado::using('System.Web.UI.WebControls.TListControl');
* </code>
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class XListMenu extends TListControl
{
diff --git a/demos/blog/protected/Common/schema.sql b/demos/blog/protected/Common/schema.sql
index 9c111f0c..e96ca409 100755
--- a/demos/blog/protected/Common/schema.sql
+++ b/demos/blog/protected/Common/schema.sql
@@ -58,10 +58,10 @@ CREATE TABLE tblPost2Category (
);
INSERT INTO tblUsers (id,name,full_name,role,status,passwd,email,reg_time,website)
- VALUES (1,'admin','Prado User',1,0,'4d688da592969d0a56b5accec3ce8554','admin@example.com',1148819681,'http://www.pradosoft.com');
+ VALUES (1,'admin','Prado User',1,0,'4d688da592969d0a56b5accec3ce8554','admin@example.com',1438819691,'https://github.com/pradosoft/prado');
INSERT INTO tblPosts (id,author_id,create_time,title,content,status)
- VALUES (1,1,1148819691,'Welcome to Prado Weblog','Congratulations! You have successfully installed Prado Blog -- a PRADO-driven weblog system. A default administrator account has been created. Please login with <b>admin/prado</b> and update your password as soon as possible.',0);
+ VALUES (1,1,1438819691,'Welcome to Prado Weblog','Congratulations! You have successfully installed Prado Blog -- a PRADO-driven weblog system. A default administrator account has been created. Please login with <b>admin/prado</b> and update your password as soon as possible.',0);
INSERT INTO tblCategories (name,description,post_count)
VALUES ('Miscellaneous','This category holds posts on any topic.',1);
diff --git a/demos/blog/protected/Layouts/MainLayout.php b/demos/blog/protected/Layouts/MainLayout.php
index 618691a1..dfca64c7 100755
--- a/demos/blog/protected/Layouts/MainLayout.php
+++ b/demos/blog/protected/Layouts/MainLayout.php
@@ -3,18 +3,18 @@
* MainLayout class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* MainLayout class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class MainLayout extends TTemplateControl
{
diff --git a/demos/blog/protected/Layouts/MainLayout.tpl b/demos/blog/protected/Layouts/MainLayout.tpl
index 1f8b037e..c4bfb5f4 100755
--- a/demos/blog/protected/Layouts/MainLayout.tpl
+++ b/demos/blog/protected/Layouts/MainLayout.tpl
@@ -39,7 +39,7 @@
</div><!-- end of sidebar -->
<div id="footer">
-Copyright &copy; 2006 <%$ SiteOwner %>.<br/>
+Copyright &copy; <%= date('Y') %>, <%$ SiteOwner %>.<br/>
<%= Prado::poweredByPrado() %>
</div><!-- end of footer -->
diff --git a/demos/blog/protected/Pages/Admin/AdminMenu.php b/demos/blog/protected/Pages/Admin/AdminMenu.php
index 01ca60c0..1d9c3473 100755
--- a/demos/blog/protected/Pages/Admin/AdminMenu.php
+++ b/demos/blog/protected/Pages/Admin/AdminMenu.php
@@ -3,18 +3,18 @@
* AdminMenu class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* AdminMenu class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class AdminMenu extends TTemplateControl
{
diff --git a/demos/blog/protected/Pages/Admin/ConfigMan.php b/demos/blog/protected/Pages/Admin/ConfigMan.php
index 4a938c94..6640e501 100755
--- a/demos/blog/protected/Pages/Admin/ConfigMan.php
+++ b/demos/blog/protected/Pages/Admin/ConfigMan.php
@@ -3,18 +3,18 @@
* ConfigMan class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* ConfigMan class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class ConfigMan extends BlogPage
{
diff --git a/demos/blog/protected/Pages/Admin/PostMan.php b/demos/blog/protected/Pages/Admin/PostMan.php
index c69788c1..b1842680 100755
--- a/demos/blog/protected/Pages/Admin/PostMan.php
+++ b/demos/blog/protected/Pages/Admin/PostMan.php
@@ -3,18 +3,18 @@
* PostMan class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* PostMan class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class PostMan extends BlogPage
{
diff --git a/demos/blog/protected/Pages/Admin/UserMan.php b/demos/blog/protected/Pages/Admin/UserMan.php
index de3f7065..1a06e478 100755
--- a/demos/blog/protected/Pages/Admin/UserMan.php
+++ b/demos/blog/protected/Pages/Admin/UserMan.php
@@ -3,18 +3,18 @@
* UserMan class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* UserMan class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class UserMan extends BlogPage
{
diff --git a/demos/blog/protected/Pages/ErrorReport.php b/demos/blog/protected/Pages/ErrorReport.php
index e8614943..9bf4f9d4 100755
--- a/demos/blog/protected/Pages/ErrorReport.php
+++ b/demos/blog/protected/Pages/ErrorReport.php
@@ -3,18 +3,18 @@
* ErrorReport class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* ErrorReport class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class ErrorReport extends BlogPage
{
diff --git a/demos/blog/protected/Pages/Posts/EditCategory.php b/demos/blog/protected/Pages/Posts/EditCategory.php
index 01beee7f..326e3c98 100755
--- a/demos/blog/protected/Pages/Posts/EditCategory.php
+++ b/demos/blog/protected/Pages/Posts/EditCategory.php
@@ -3,18 +3,18 @@
* EditCategory class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* EditCategory class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class EditCategory extends BlogPage
{
diff --git a/demos/blog/protected/Pages/Posts/EditPost.php b/demos/blog/protected/Pages/Posts/EditPost.php
index d2cc119b..b93a7185 100755
--- a/demos/blog/protected/Pages/Posts/EditPost.php
+++ b/demos/blog/protected/Pages/Posts/EditPost.php
@@ -3,18 +3,18 @@
* EditPost class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* EditPost class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class EditPost extends BlogPage
{
diff --git a/demos/blog/protected/Pages/Posts/ListPost.php b/demos/blog/protected/Pages/Posts/ListPost.php
index 51e581d3..a011273c 100755
--- a/demos/blog/protected/Pages/Posts/ListPost.php
+++ b/demos/blog/protected/Pages/Posts/ListPost.php
@@ -3,18 +3,18 @@
* ListPost class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* ListPost class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class ListPost extends BlogPage
{
diff --git a/demos/blog/protected/Pages/Posts/MyPost.php b/demos/blog/protected/Pages/Posts/MyPost.php
index c0724f92..eceebb59 100755
--- a/demos/blog/protected/Pages/Posts/MyPost.php
+++ b/demos/blog/protected/Pages/Posts/MyPost.php
@@ -3,18 +3,18 @@
* MyPost class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* MyPost class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class MyPost extends BlogPage
{
diff --git a/demos/blog/protected/Pages/Posts/NewCategory.php b/demos/blog/protected/Pages/Posts/NewCategory.php
index 3043d657..a275add5 100755
--- a/demos/blog/protected/Pages/Posts/NewCategory.php
+++ b/demos/blog/protected/Pages/Posts/NewCategory.php
@@ -3,18 +3,18 @@
* NewCategory class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* NewCategory class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class NewCategory extends BlogPage
{
diff --git a/demos/blog/protected/Pages/Posts/NewPost.php b/demos/blog/protected/Pages/Posts/NewPost.php
index d4e2f855..4a4f7390 100755
--- a/demos/blog/protected/Pages/Posts/NewPost.php
+++ b/demos/blog/protected/Pages/Posts/NewPost.php
@@ -3,18 +3,18 @@
* NewPost class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* NewPost class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class NewPost extends BlogPage
{
diff --git a/demos/blog/protected/Pages/Posts/ViewPost.php b/demos/blog/protected/Pages/Posts/ViewPost.php
index 3c549673..7a42214e 100755
--- a/demos/blog/protected/Pages/Posts/ViewPost.php
+++ b/demos/blog/protected/Pages/Posts/ViewPost.php
@@ -3,18 +3,18 @@
* ViewPost class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* ViewPost class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class ViewPost extends BlogPage
{
diff --git a/demos/blog/protected/Pages/Users/EditUser.php b/demos/blog/protected/Pages/Users/EditUser.php
index e3e2e1b0..f48a2606 100755
--- a/demos/blog/protected/Pages/Users/EditUser.php
+++ b/demos/blog/protected/Pages/Users/EditUser.php
@@ -3,18 +3,18 @@
* EditUser class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* EditUser class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class EditUser extends BlogPage
{
diff --git a/demos/blog/protected/Pages/Users/NewUser.php b/demos/blog/protected/Pages/Users/NewUser.php
index f407c44b..f815b4c3 100755
--- a/demos/blog/protected/Pages/Users/NewUser.php
+++ b/demos/blog/protected/Pages/Users/NewUser.php
@@ -3,18 +3,18 @@
* NewUser class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* NewUser class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class NewUser extends BlogPage
{
diff --git a/demos/blog/protected/Pages/Users/ViewUser.php b/demos/blog/protected/Pages/Users/ViewUser.php
index 61e4c689..c9724f9a 100755
--- a/demos/blog/protected/Pages/Users/ViewUser.php
+++ b/demos/blog/protected/Pages/Users/ViewUser.php
@@ -3,18 +3,18 @@
* ViewUser class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* ViewUser class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class ViewUser extends BlogPage
{
diff --git a/demos/blog/protected/Portlets/AccountPortlet.php b/demos/blog/protected/Portlets/AccountPortlet.php
index 1ef0b820..15198529 100755
--- a/demos/blog/protected/Portlets/AccountPortlet.php
+++ b/demos/blog/protected/Portlets/AccountPortlet.php
@@ -3,9 +3,9 @@
* AccountPortlet class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
Prado::using('Application.Portlets.Portlet');
@@ -14,9 +14,9 @@ Prado::using('Application.Portlets.Portlet');
* AccountPortlet class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class AccountPortlet extends Portlet
{
diff --git a/demos/blog/protected/Portlets/ArchivePortlet.php b/demos/blog/protected/Portlets/ArchivePortlet.php
index 858b6b3f..78d4a1ef 100755
--- a/demos/blog/protected/Portlets/ArchivePortlet.php
+++ b/demos/blog/protected/Portlets/ArchivePortlet.php
@@ -3,9 +3,9 @@
* ArchivePortlet class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
Prado::using('Application.Portlets.Portlet');
@@ -14,9 +14,9 @@ Prado::using('Application.Portlets.Portlet');
* ArchivePortlet class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class ArchivePortlet extends Portlet
{
diff --git a/demos/blog/protected/Portlets/CategoryPortlet.php b/demos/blog/protected/Portlets/CategoryPortlet.php
index c5ed10d3..4ba5a4d9 100755
--- a/demos/blog/protected/Portlets/CategoryPortlet.php
+++ b/demos/blog/protected/Portlets/CategoryPortlet.php
@@ -3,9 +3,9 @@
* CategoryPortlet class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
Prado::using('Application.Portlets.Portlet');
@@ -14,9 +14,9 @@ Prado::using('Application.Portlets.Portlet');
* CategoryPortlet class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class CategoryPortlet extends Portlet
{
diff --git a/demos/blog/protected/Portlets/CommentPortlet.php b/demos/blog/protected/Portlets/CommentPortlet.php
index 6225ff45..59672bb5 100755
--- a/demos/blog/protected/Portlets/CommentPortlet.php
+++ b/demos/blog/protected/Portlets/CommentPortlet.php
@@ -3,9 +3,9 @@
* CommentPortlet class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
Prado::using('Application.Portlets.Portlet');
@@ -14,9 +14,9 @@ Prado::using('Application.Portlets.Portlet');
* CommentPortlet class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class CommentPortlet extends Portlet
{
diff --git a/demos/blog/protected/Portlets/LoginPortlet.php b/demos/blog/protected/Portlets/LoginPortlet.php
index de48363e..f7ae9429 100755
--- a/demos/blog/protected/Portlets/LoginPortlet.php
+++ b/demos/blog/protected/Portlets/LoginPortlet.php
@@ -3,9 +3,9 @@
* LoginPortlet class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
Prado::using('Application.Portlets.Portlet');
@@ -14,9 +14,9 @@ Prado::using('Application.Portlets.Portlet');
* LoginPortlet class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class LoginPortlet extends Portlet
{
diff --git a/demos/blog/protected/Portlets/Portlet.php b/demos/blog/protected/Portlets/Portlet.php
index ae1b04c1..5ea8e46a 100755
--- a/demos/blog/protected/Portlets/Portlet.php
+++ b/demos/blog/protected/Portlets/Portlet.php
@@ -3,18 +3,18 @@
* Portlet class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
* Portlet class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class Portlet extends TTemplateControl
{
diff --git a/demos/blog/protected/Portlets/SearchPortlet.php b/demos/blog/protected/Portlets/SearchPortlet.php
index 9c6646a8..f13091c9 100755
--- a/demos/blog/protected/Portlets/SearchPortlet.php
+++ b/demos/blog/protected/Portlets/SearchPortlet.php
@@ -3,9 +3,9 @@
* SearchPortlet class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
Prado::using('Application.Portlets.Portlet');
@@ -14,9 +14,9 @@ Prado::using('Application.Portlets.Portlet');
* SearchPortlet class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2006-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
class SearchPortlet extends Portlet
{
diff --git a/demos/chat/protected/pages/Home.page b/demos/chat/protected/pages/Home.page
index 7740c062..b42186ce 100755
--- a/demos/chat/protected/pages/Home.page
+++ b/demos/chat/protected/pages/Home.page
@@ -41,7 +41,7 @@
</com:TForm>
<div id="footer">
-Copyright &copy; 2007 <a href="http://www.pradosoft.com">PradoSoft</a>.
+Copyright &copy; 2007-2015 <a href="https://github.com/pradosoft">The PRADO Group</a>
<br/><br/>
<%= Prado::poweredByPrado() %>
</div>
diff --git a/demos/composer/protected/pages/Layout.tpl b/demos/composer/protected/pages/Layout.tpl
index 48078d44..20e527c5 100755
--- a/demos/composer/protected/pages/Layout.tpl
+++ b/demos/composer/protected/pages/Layout.tpl
@@ -16,7 +16,7 @@
</div>
<div id="footer">
-Copyright &copy; 2006 <a href="http://www.pradosoft.com">PradoSoft</a>.
+Copyright &copy; 2006-2015 <a href="https://github.com/pradosoft">The PRADO Group</a>
</div>
</com:TForm>
diff --git a/demos/composer/themes/PradoSoft/style.css b/demos/composer/themes/PradoSoft/style.css
index 2ded60ed..b4ac218b 100755
--- a/demos/composer/themes/PradoSoft/style.css
+++ b/demos/composer/themes/PradoSoft/style.css
@@ -82,7 +82,7 @@ div#footer
{
clear: both;
margin: 0px auto;
- width: 170px;
+ width: 300px;
padding: 10px;
}
diff --git a/demos/personal/protected/Pages/Layout.tpl b/demos/personal/protected/Pages/Layout.tpl
index d650a689..03739bd5 100755
--- a/demos/personal/protected/Pages/Layout.tpl
+++ b/demos/personal/protected/Pages/Layout.tpl
@@ -34,8 +34,8 @@
<div class="footer">
<com:MainMenu />
<br/>
-Copyright &copy; 2006-2007 Your Name here.<br/>
-Powered by <a href="http://www.pradosoft.com/">PRADO</a>.
+Copyright &copy; 2006-2015 Your Name here.<br/>
+Powered by <a href="https://github.com/pradosoft/prado">PRADO</a>.
</div>
</div>
diff --git a/demos/quickstart/protected/controls/Comments/CommentBlock.tpl b/demos/quickstart/protected/controls/Comments/CommentBlock.tpl
index 56f5cb7a..c3ff1f01 100755
--- a/demos/quickstart/protected/controls/Comments/CommentBlock.tpl
+++ b/demos/quickstart/protected/controls/Comments/CommentBlock.tpl
@@ -25,7 +25,6 @@
<div class="username">
<div>
<com:TLabel ForControl="username" Text="Username/Password:" />
- <span class="hint">(must have 5 or more posts in <a href="http://www.pradosoft.com/forum/" title="Prado Forums">forum</a>)</span>
<com:TRequiredFieldValidator
Style="font-weight: bold"
ValidationGroup="comment-group"
diff --git a/demos/quickstart/protected/controls/DocLink.php b/demos/quickstart/protected/controls/DocLink.php
index 758a1645..542db179 100755
--- a/demos/quickstart/protected/controls/DocLink.php
+++ b/demos/quickstart/protected/controls/DocLink.php
@@ -2,7 +2,7 @@
class DocLink extends THyperLink
{
- const BASE_URL='http://www.pradosoft.com/docs/manual';
+ const BASE_URL='http://pradosoft.github.io/docs/manual';
public function getClassPath()
{
diff --git a/demos/quickstart/protected/controls/Layout.php b/demos/quickstart/protected/controls/Layout.php
index 868b10b4..065cf1fb 100755
--- a/demos/quickstart/protected/controls/Layout.php
+++ b/demos/quickstart/protected/controls/Layout.php
@@ -24,9 +24,10 @@ class Layout extends TTemplateControl
$this->MainMenu->Visible=false;
$this->TopicPanel->Visible=false;
}
-
+ /*
$this->languages->DataSource = TPropertyValue::ensureArray($this->Application->Parameters['languages']);
$this->languages->dataBind();
+ */
}
public function languageLinkCreated($sender, $param)
diff --git a/demos/quickstart/protected/controls/Layout.tpl b/demos/quickstart/protected/controls/Layout.tpl
index c3e67272..54846a32 100755
--- a/demos/quickstart/protected/controls/Layout.tpl
+++ b/demos/quickstart/protected/controls/Layout.tpl
@@ -1,4 +1,4 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
<com:THead Title="PRADO QuickStart Tutorial">
@@ -18,7 +18,7 @@
<com:SearchBox />
</div>
<a href="?">Home</a> |
-<a href="http://www.pradosoft.com">PradoSoft.com</a> |
+<a href="https://github.com/pradosoft/prado">Prado framework</a> |
<a href="../../docs/quickstart.pdf">PDF Version</a> |
<com:THyperLink ID="PrinterLink" Text="Printer-friendly Version" />
</com:TPanel>
@@ -29,7 +29,7 @@
<com:TopicList ID="TopicPanel" />
</td>
<td valign="top">
-
+<!---
<com:TRepeater ID="languages" OnItemCreated="languageLinkCreated">
<prop:HeaderTemplate>
<div class="languages">Available Languages: <ul>
@@ -41,6 +41,7 @@
</ul></div>
</prop:FooterTemplate>
</com:TRepeater>
+--->
<div id="content">
<p class="block-content" id="top-content" style="border-color: transparent; height:1px; margin: 0; padding: 0; background-color: transparent"></p>
<com:TContentPlaceHolder ID="body" />
@@ -50,7 +51,7 @@
</table>
<div id="footer">
-Copyright &copy; 2005-2014 <a href="http://www.pradosoft.com">PradoSoft</a>.
+Copyright &copy; 2006-2015 <a href="https://github.com/pradosoft">The PRADO Group</a>.
<br/><br/>
<%= Prado::poweredByPrado() %>
<a href="http://validator.w3.org/check?uri=referer"><img border="0" src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
diff --git a/demos/quickstart/protected/controls/SampleLayout.tpl b/demos/quickstart/protected/controls/SampleLayout.tpl
index ba286f0f..8acc57c0 100755
--- a/demos/quickstart/protected/controls/SampleLayout.tpl
+++ b/demos/quickstart/protected/controls/SampleLayout.tpl
@@ -19,7 +19,7 @@
</div>
<div class="samplemenu">
<div class="copyright">
- Copyright &copy; 2005-2014 <a href="http://www.pradosoft.com">PradoSoft</a>
+ Copyright &copy; 2006-2015 <a href="https://github.com/pradosoft">The PRADO Group</a>
</div>
</div>
diff --git a/demos/quickstart/protected/controls/TopicList.tpl b/demos/quickstart/protected/controls/TopicList.tpl
index ed57a4b0..c23bd2be 100644
--- a/demos/quickstart/protected/controls/TopicList.tpl
+++ b/demos/quickstart/protected/controls/TopicList.tpl
@@ -106,8 +106,6 @@
<div>Client-side Scripting</div>
<ul>
<li><a href="?page=Advanced.Scripts">Introduction to Javascript</a></li>
- <li><a href="?page=Advanced.Scripts1">Prototype Library Part I</a></li>
- <li><a href="?page=Advanced.Scripts2">Prototype Library Part II</a></li>
<li><a href="?page=Advanced.Scripts3">Javascript Cookbook</a></li>
</ul>
</div>
diff --git a/demos/quickstart/protected/controls/de/Layout.tpl b/demos/quickstart/protected/controls/de/Layout.tpl
deleted file mode 100755
index 45e87ef8..00000000
--- a/demos/quickstart/protected/controls/de/Layout.tpl
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
-
-<com:THead Title="PRADO QuickStart Tutorial">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<meta http-equiv="content-language" content="de"/>
-</com:THead>
-
-<body>
-<com:TForm>
-<div id="header">
-<div class="title">Prado QuickStart Tutorial</div>
-<div class="image"></div>
-</div>
-
-<com:TPanel ID="MainMenu" CssClass="mainmenu">
-<div style="float:left; color:black; margin-top:-5px">
- <com:SearchBox />
-</div>
-<a href="?">Home</a> |
-<a href="http://www.pradosoft.com">PradoSoft.com</a> |
-<a href="../../docs/quickstart.pdf">PDF Version</a> |
-<com:THyperLink ID="PrinterLink" Text="Druckversion" />
-</com:TPanel>
-
-<table width="100%" border="0" cellspacing="0" cellpadding="0">
-<tr>
-<td valign="top" width="1">
-<com:TopicList ID="TopicPanel" />
-</td>
-<td valign="top">
-
-<com:TRepeater ID="languages" OnItemCreated="languageLinkCreated">
- <prop:HeaderTemplate>
- <div class="languages">Verfügbare Sprachen: <ul>
- </prop:HeaderTemplate>
- <prop:ItemTemplate>
- <li><com:THyperLink ID="link" Text=<%# $this->DataItem %> /></li>
- </prop:ItemTemplate>
- <prop:FooterTemplate>
- </ul></div>
- </prop:FooterTemplate>
-</com:TRepeater>
-<div id="content">
-<p class="block-content" id="top-content" style="border-color: transparent; height:1px; margin: 0; padding: 0; background-color: transparent"></p>
-<com:TContentPlaceHolder ID="body" />
-</div>
-</td>
-</tr>
-</table>
-
-<div id="footer">
-Copyright &copy; 2005-2014 <a href="http://www.pradosoft.com">PradoSoft</a>.
-<br/><br/>
-<%= Prado::poweredByPrado() %>
-<a href="http://validator.w3.org/check?uri=referer"><img border="0" src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
-</div>
-
-</com:TForm>
-</body>
-</html>
diff --git a/demos/quickstart/protected/controls/de/RequiresVersion.tpl b/demos/quickstart/protected/controls/de/RequiresVersion.tpl
deleted file mode 100755
index 586cab02..00000000
--- a/demos/quickstart/protected/controls/de/RequiresVersion.tpl
+++ /dev/null
@@ -1 +0,0 @@
-<p class="requires-version">Benötigt Prado Version <strong><%= $this->Version %></strong> oder neuer.</p>
diff --git a/demos/quickstart/protected/controls/de/RunBar.tpl b/demos/quickstart/protected/controls/de/RunBar.tpl
deleted file mode 100755
index b507fed8..00000000
--- a/demos/quickstart/protected/controls/de/RunBar.tpl
+++ /dev/null
@@ -1,4 +0,0 @@
-<div class="runbar">
-<com:THyperLink ID="RunButton" Target="_blank" Text="Beispiel ausführen" />
-<com:THyperLink ID="ViewSourceButton" Target="_blank" Text="Quelltext anzeigen" />
-</div>
diff --git a/demos/quickstart/protected/controls/de/SearchBox.tpl b/demos/quickstart/protected/controls/de/SearchBox.tpl
deleted file mode 100755
index 45173f18..00000000
--- a/demos/quickstart/protected/controls/de/SearchBox.tpl
+++ /dev/null
@@ -1,3 +0,0 @@
-<com:TLabel ForControl="search" Text="Suche:" CssClass="searchLabel"/>
-<com:TTextBox ID="search" OnTextChanged="doSearch" CssClass="searchBox"/>
-<com:TButton ID="find" Text="Suchen" OnClick="doSearch" CssClass="searchButton"/>
diff --git a/demos/quickstart/protected/controls/de/TopicList.tpl b/demos/quickstart/protected/controls/de/TopicList.tpl
deleted file mode 100755
index 470927da..00000000
--- a/demos/quickstart/protected/controls/de/TopicList.tpl
+++ /dev/null
@@ -1,115 +0,0 @@
-<div id="toc">
-
-<div class="topic">
-<div>Einführung</div>
-<ul>
- <li><a href="?page=GettingStarted.Introduction">Übersicht</a></li>
- <li><a href="?page=GettingStarted.AboutPrado">Was ist PRADO?</a></li>
- <li><a href="?page=GettingStarted.Installation">Installation</a></li>
- <li><a href="?page=GettingStarted.NewFeatures">Neue Features</a></li>
- <li><a href="?page=GettingStarted.Upgrading">Upgrade von v2.x und v1.x</a></li>
- <li><a href="?page=GettingStarted.Upgrading32">Upgrate von v3.2</a></li>
- <li><a href="?page=GettingStarted.Wsat">Webeseiten Administrations-Tool</a></li>
- <li><a href="?page=GettingStarted.CommandLine">Kommandozeilen-Tool</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Tutorials</div>
-<ul>
- <li><a href="?page=GettingStarted.HelloWorld">Erstellen der ersten PRADO Anwendung</a></li>
- <li><a href="?page=Fundamentals.Hangman">Beispiel: Galgenmännchen</a></li>
- <li><a href="?page=Tutorial.CurrencyConverter">Währungsrechner</a></li>
- <li><a href="?page=Tutorial.AjaxChat">AJAX Chat Client</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Grundlagen</div>
-<ul>
- <li><a href="?page=Fundamentals.Architecture">Architektur</a></li>
- <li><a href="?page=Fundamentals.Components1">Komponenten: Teil I</a></li>
- <li><a href="?page=Fundamentals.Components2">Komponenten: Teil II</a></li>
- <li><a href="?page=Fundamentals.Controls">Steuerelemente</a></li>
- <li><a href="?page=Fundamentals.Pages">Seiten</a></li>
- <li><a href="?page=Fundamentals.Modules">Module</a></li>
- <li><a href="?page=Fundamentals.Services">Dienste</a></li>
- <li><a href="?page=Fundamentals.Applications">Applikationen</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Konfiguration</div>
-<ul>
- <li><a href="?page=Configurations.Overview">Übersicht</a></li>
- <li><a href="?page=Configurations.Templates1">Templates: Teil I</a></li>
- <li><a href="?page=Configurations.Templates2">Templates: Teil II</a></li>
- <li><a href="?page=Configurations.Templates3">Templates: Teil III</a></li>
- <li><a href="?page=Configurations.AppConfig">Anwendungskonfiguration</a></li>
- <li><a href="?page=Configurations.PageConfig">Seitenkonfiguration</a></li>
- <li><a href="?page=Configurations.UrlMapping">URL Mapping (lesbare URLs)</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Steuerelement-Referenz</div>
-<ul>
- <li><a href="?page=Controls.Standard">Standard Controls</a></li>
- <li><a href="?page=Controls.Validation">Validation Controls</a></li>
- <li><a href="?page=Controls.List">List Controls</a></li>
- <li><a href="?page=Controls.Data">Data Controls</a></li>
- <li><a href="?page=ActiveControls.Introduction">AJAX: Einführung</a></li>
- <li><a href="?page=ActiveControls.Home">Active Controls (AJAX)</a></li>
- <li><a href="?page=JuiControls.Home">Jui Controls (jQuery UI)</a></li>
- <li><a href="?page=Controls.NewControl">Entwicklung neuer Steuerelemente</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Dienst-Referenz</div>
-<ul>
- <li><a href="?page=Fundamentals.Services">Page Service</a></li>
- <li><a href="?page=Services.SoapService">SOAP Service</a></li>
- <li><a href="?page=Services.RpcService">RPC Service</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Anbindung an Datenbanken</div>
-<ul>
- <li><a href="?page=Database.DAO">Data Access Objects</a></li>
- <li><a href="?page=Database.ActiveRecord">Active Record</a></li>
- <li><a href="?page=Database.Scaffold">Active Record Scaffold</a></li>
- <li><a href="?page=Database.SqlMap">SqlMap Data Mapper</a></li>
- <li><a href="?page=Database.ViewsArUpdate">Ansichten - AR-Klassen-Update</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Fortgeschrittene Themen</div>
-<ul>
- <li><a href="?page=Advanced.Collections">Collections</a></li>
- <li><a href="?page=Advanced.Auth">Authentifizierung und Authorisierung</a></li>
- <li><a href="?page=Advanced.Security">Sicherheit</a></li>
- <li><a href="?page=Advanced.Assets">Assets</a></li>
- <li><a href="?page=Advanced.MasterContent">Master and Content</a></li>
- <li><a href="?page=Advanced.Themes">Themes and Skins</a></li>
- <li><a href="?page=Advanced.State">Persistent State</a></li>
- <li><a href="?page=Advanced.Logging">Logging</a></li>
- <li><a href="?page=Advanced.Error">Fehlerbehandlung und Reporting</a></li>
- <li><a href="?page=Advanced.I18N">Internationalisierung</a></li>
- <li><a href="?page=Advanced.Performance">Performanzsteigerung</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Client-side Scripting</div>
-<ul>
- <li><a href="?page=Advanced.Scripts">Einführung in Javascript</a></li>
- <li><a href="?page=Advanced.Scripts1">Prototype Library Teil I</a></li>
- <li><a href="?page=Advanced.Scripts2">Prototype Library Teil II</a></li>
- <li><a href="?page=Advanced.Scripts3">Javascript Kochbuch</a></li>
-</ul>
-</div>
-
-</div>
diff --git a/demos/quickstart/protected/controls/es/Layout.tpl b/demos/quickstart/protected/controls/es/Layout.tpl
deleted file mode 100755
index f08aef68..00000000
--- a/demos/quickstart/protected/controls/es/Layout.tpl
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es">
-
-<com:THead Title="Gu&iacute;a de comienzo rápida con PRADO">
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-<meta http-equiv="content-language" content="es"/>
-</com:THead>
-
-<body>
-<com:TForm>
-<div id="header">
-<div class="title">Gu&iacute;a de comienzo rápida con PRADO</div>
-<div class="image"></div>
-</div>
-
-<com:TPanel ID="MainMenu" CssClass="mainmenu">
-<div style="float:left; color:black; margin-top:-5px">
- <com:SearchBox />
-</div>
-<a href="?">Home</a> |
-<a href="http://www.pradosoft.com">PradoSoft.com</a> |
-<a href="../../../docs/quickstart.pdf">Versión en PDF</a> |
-<com:THyperLink ID="PrinterLink" Text="Versión en para imprimir" />
-</com:TPanel>
-
-<table width="100%" border="0" cellspacing="0" cellpadding="0">
-<tr>
-<td valign="top" width="1">
-<com:TopicList ID="TopicPanel" />
-</td>
-<td valign="top">
-
-<com:TRepeater ID="languages" OnItemCreated="languageLinkCreated">
- <prop:HeaderTemplate>
- <div class="languages">Idiomas disponibles: <ul>
- </prop:HeaderTemplate>
- <prop:ItemTemplate>
- <li><com:THyperLink ID="link" Text=<%# $this->DataItem %> /></li>
- </prop:ItemTemplate>
- <prop:FooterTemplate>
- </ul></div>
- </prop:FooterTemplate>
-</com:TRepeater>
-<div id="content">
-<p class="block-content" id="top-content" style="border-color: transparent; height:1px; margin: 0; padding: 0; background-color: transparent"></p>
-<com:TContentPlaceHolder ID="body" />
-</div>
-</td>
-</tr>
-</table>
-
-<div id="footer">
-Copyright &copy; 2005-2007 <a href="http://www.pradosoft.com">PradoSoft</a>.
-<br/><br/>
-<%= Prado::poweredByPrado() %>
-<a href="http://validator.w3.org/check?uri=referer"><img border="0" src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
-</div>
-
-</com:TForm>
-</body>
-</html> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/es/RequiresVersion.tpl b/demos/quickstart/protected/controls/es/RequiresVersion.tpl
deleted file mode 100755
index 6df71306..00000000
--- a/demos/quickstart/protected/controls/es/RequiresVersion.tpl
+++ /dev/null
@@ -1 +0,0 @@
-<p class="requires-version">Se requiere la versión de PRADO <strong><%= $this->Version %></strong> o superior.</p> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/es/RunBar.tpl b/demos/quickstart/protected/controls/es/RunBar.tpl
deleted file mode 100755
index 74458c68..00000000
--- a/demos/quickstart/protected/controls/es/RunBar.tpl
+++ /dev/null
@@ -1,4 +0,0 @@
-<div class="runbar">
-<com:THyperLink ID="RunButton" Target="_blank" Text="Ver ejemplo" />
-<com:THyperLink ID="ViewSourceButton" Target="_blank" Text="Ver código fuente" />
-</div> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/es/SampleLayout.tpl b/demos/quickstart/protected/controls/es/SampleLayout.tpl
deleted file mode 100755
index d6d4d9b4..00000000
--- a/demos/quickstart/protected/controls/es/SampleLayout.tpl
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es">
-
-<com:THead Title="PRADO QuickStart Sample">
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-<meta http-equiv="content-language" content="es"/>
-</com:THead>
-
-<body>
-<com:TForm>
-
-<div class="sampleheader">
-
-<div class="title">
-<a href="?">Guía de comienzo rápida con PRADO</a> Ejemplo
-</div>
-<div class="image"></div>
-
-</div>
-<div class="samplemenu">
- <div class="copyright">
- Copyright &copy; 2005-2014 <a href="http://www.pradosoft.com">PradoSoft</a>
- </div>
-</div>
-
-<div style="margin:15px;">
-<com:TContentPlaceHolder ID="body" />
-</div>
-
-</com:TForm>
-</body>
-</html>
diff --git a/demos/quickstart/protected/controls/es/SearchBox.tpl b/demos/quickstart/protected/controls/es/SearchBox.tpl
deleted file mode 100755
index dade4094..00000000
--- a/demos/quickstart/protected/controls/es/SearchBox.tpl
+++ /dev/null
@@ -1,3 +0,0 @@
-<com:TLabel ForControl="search" Text="Buscar:" CssClass="searchLabel"/>
-<com:TTextBox ID="search" OnTextChanged="doSearch" CssClass="searchBox"/>
-<com:TButton ID="find" Text="Encontrar" OnClick="doSearch" CssClass="searchButton"/> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/es/SinceVersion.tpl b/demos/quickstart/protected/controls/es/SinceVersion.tpl
deleted file mode 100755
index d4ee4d63..00000000
--- a/demos/quickstart/protected/controls/es/SinceVersion.tpl
+++ /dev/null
@@ -1 +0,0 @@
-<p class="since-version">Disponible desde la versión de PRADO <strong><%= $this->Version %></strong>en adelante.</p> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/es/TopicList.tpl b/demos/quickstart/protected/controls/es/TopicList.tpl
deleted file mode 100644
index 62451700..00000000
--- a/demos/quickstart/protected/controls/es/TopicList.tpl
+++ /dev/null
@@ -1,112 +0,0 @@
-<div id="toc">
-
-<div class="topic">
-<div>Comenzar</div>
-<ul>
- <li><a href="?page=GettingStarted.Introduction">Introducción</a></li>
- <li><a href="?page=GettingStarted.AboutPrado">¿Que es PRADO?</a></li>
- <li><a href="?page=GettingStarted.Installation">Instalación</a></li>
- <li><a href="?page=GettingStarted.NewFeatures">Nuevas Funcionalidades</a></li>
- <li><a href="?page=GettingStarted.Upgrading">Actualizar desde la version v2.x y v1.x</a></li>
- <li><a href="?page=GettingStarted.Wsat">Web Site Administration Tool</a></li>
- <li><a href="?page=GettingStarted.CommandLine">Command Line Tool</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Tutoriales</div>
-<ul>
- <li><a href="?page=GettingStarted.HelloWorld">Crear la primera aplicacion en PRADO</a></li>
- <li><a href="?page=Fundamentals.Hangman">Ejemplo: El ahorcado</a></li>
- <li><a href="?page=Tutorial.CurrencyConverter">Convertidor de Monedas</a></li>
- <li><a href="?page=Tutorial.AddressBook">Libreta de direcciones</a></li>
- <li><a href="?page=Tutorial.AjaxChat">Cliente Chat en AJAX </a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Básicos</div>
-<ul>
- <li><a href="?page=Fundamentals.Architecture">Arquitectura</a></li>
- <li><a href="?page=Fundamentals.Components1">Componentes</a></li>
- <li><a href="?page=Fundamentals.Controls">Controles</a></li>
- <li><a href="?page=Fundamentals.Pages">Páginas</a></li>
- <li><a href="?page=Fundamentals.Modules">Mádulos</a></li>
- <li><a href="?page=Fundamentals.Services">Servicios</a></li>
- <li><a href="?page=Fundamentals.Applications">Aplicaciones</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Configuración</div>
-<ul>
- <li><a href="?page=Configurations.Overview">Perspectiva General</a></li>
- <li><a href="?page=Configurations.Templates1">Plantillas: Parte I</a></li>
- <li><a href="?page=Configurations.Templates2">Plantillas: Parte II</a></li>
- <li><a href="?page=Configurations.Templates3">Plantillas: Parte III</a></li>
- <li><a href="?page=Configurations.AppConfig">Configuraciones de Aplicación</a></li>
- <li><a href="?page=Configurations.PageConfig">Configuraciones de Página</a></li>
- <li><a href="?page=Configurations.UrlMapping">Mapeo URL (URLs amigables)</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Referencia de controles</div>
-<ul>
- <li><a href="?page=Controls.Standard">Controles Clásicos</a></li>
- <li><a href="?page=Controls.Validation">Controles de Validación</a></li>
- <li><a href="?page=Controls.List">Controles de Lista</a></li>
- <li><a href="?page=Controls.Data">Controles de Datos</a></li>
- <li><a href="?page=ActiveControls.Home">Controles Activos(AJAX)</a></li>
- <li><a href="?page=Controls.NewControl">Escribir nuevos Controles</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Referencia de Servicios</div>
-<ul>
- <li><a href="?page=Fundamentals.Services">Servicio Page</a></li>
- <li><a href="?page=Services.SoapService">Servicio SOAP</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Trabajando con Bases de datos</div>
-<ul>
- <li><a href="?page=Database.DAO">Objetos de acceso a datos (DAO)</a></li>
- <li><a href="?page=Database.ActiveRecord">Active Record</a></li>
- <li><a href="?page=Database.Scaffold">Active Record Scaffold</a></li>
- <li><a href="?page=Database.SqlMap">SqlMap Data Mapper</a></li>
- <li><a href="?page=Database.ViewsArUpdate">Actualización de vistas y clases AR</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Temas avanzados</div>
-<ul>
- <li><a href="?page=Advanced.Collections">Colecciones</a></li>
- <li><a href="?page=Advanced.Auth">Autenticación y Autorización</a></li>
- <li><a href="?page=Advanced.Security">Seguridad</a></li>
- <li><a href="?page=Advanced.Assets">Assets</a></li>
- <li><a href="?page=Advanced.MasterContent">Master and Content</a></li>
- <li><a href="?page=Advanced.Themes">Temas y Apariencias (Skins)</a></li>
- <li><a href="?page=Advanced.State">Estado Persisntent</a></li>
- <li><a href="?page=Advanced.Logging">Logging</a></li>
- <li><a href="?page=Advanced.Error">Manipulación y Reportes de errores</a></li>
-
- <li><a href="?page=Advanced.I18N">Internacionalización</a></li>
- <li><a href="?page=Advanced.Performance">Puesta a punto y rendimiento(Performance Tuning)</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Scripts del lado del cliente (Client-side Scripting)</div>
-<ul>
- <li><a href="?page=Advanced.Scripts">Introducción a Javascript</a></li>
- <li><a href="?page=Advanced.Scripts1">Librería Prototipo Parte I</a></li>
- <li><a href="?page=Advanced.Scripts2">Librería Prototipo Parte II</a></li>
- <li><a href="?page=Advanced.Scripts3">Recetario de Javascript (Cookbook)</a></li>
-</ul>
-</div>
-
-</div> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/fr/Layout.tpl b/demos/quickstart/protected/controls/fr/Layout.tpl
deleted file mode 100755
index 4882916e..00000000
--- a/demos/quickstart/protected/controls/fr/Layout.tpl
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
-
-<com:THead Title="PRADO Tutorial de démarrage rapide">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<meta http-equiv="content-language" content="fr"/>
-</com:THead>
-
-<body>
-<com:TForm>
-<div id="header">
-<div class="title">PRADO Tutorial de démarrage rapide</div>
-<div class="image"></div>
-</div>
-
-<com:TPanel ID="MainMenu" CssClass="mainmenu">
-<div style="float:left; color:black; margin-top:-5px">
- <com:SearchBox />
-</div>
-<a href="?">Accueil</a> |
-<a href="http://www.pradosoft.com">PradoSoft.com</a> |
-<a href="../../docs/quickstart.pdf">Version PDF</a> |
-<com:THyperLink ID="PrinterLink" Text="Version imprimable" />
-</com:TPanel>
-
-<table width="100%" border="0" cellspacing="0" cellpadding="0">
-<tr>
-<td valign="top" width="1">
-<com:TopicList ID="TopicPanel" />
-</td>
-<td valign="top">
-
-<com:TRepeater ID="languages" OnItemCreated="languageLinkCreated">
- <prop:HeaderTemplate>
- <div class="languages">Langues disponibles :<ul>
- </prop:HeaderTemplate>
- <prop:ItemTemplate>
- <li><com:THyperLink ID="link" Text=<%# $this->DataItem %> /></li>
- </prop:ItemTemplate>
- <prop:FooterTemplate>
- </ul></div>
- </prop:FooterTemplate>
-</com:TRepeater>
-<div id="content">
-<p class="block-content" id="top-content" style="border-color: transparent; height:1px; margin: 0; padding: 0; background-color: transparent"></p>
-<com:TContentPlaceHolder ID="body" />
-</div>
-</td>
-</tr>
-</table>
-
-<div id="footer">
-Copyright &copy; 2005-2007 <a href="http://www.pradosoft.com">PradoSoft</a>.
-<br/><br/>
-<%= Prado::poweredByPrado() %>
-<a href="http://validator.w3.org/check?uri=referer"><img border="0" src="http://www.w3.org/Icons/valid-xhtml10" alt="XHTML 1.0 Transitionnel Valide" height="31" width="88" /></a>
-</div>
-
-</com:TForm>
-</body>
-</html> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/fr/RunBar.tpl b/demos/quickstart/protected/controls/fr/RunBar.tpl
deleted file mode 100755
index 4ad1ce03..00000000
--- a/demos/quickstart/protected/controls/fr/RunBar.tpl
+++ /dev/null
@@ -1,4 +0,0 @@
-<div class="runbar">
-<com:THyperLink ID="RunButton" Target="_blank" Text="Executer l'exemple" />
-<com:THyperLink ID="ViewSourceButton" Target="_blank" Text="Voir la source" />
-</div> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/fr/SampleLayout.tpl b/demos/quickstart/protected/controls/fr/SampleLayout.tpl
deleted file mode 100755
index e6fd2347..00000000
--- a/demos/quickstart/protected/controls/fr/SampleLayout.tpl
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
-
-<com:THead Title="PRADO Tutorial de démarrage rapide">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<meta http-equiv="content-language" content="fr"/>
-</com:THead>
-
-<body>
-<com:TForm>
-
-<div class="sampleheader">
-
-<div class="title">
-<a href="?">PRADO Tutorial de démarrage rapide</a> : Exemple
-</div>
-<div class="image"></div>
-
-</div>
-<div class="samplemenu">
- <div class="copyright">
- Copyright &copy; 2005-2014 <a href="http://www.pradosoft.com">PradoSoft</a>
- </div>
-</div>
-
-<div style="margin:15px;">
-<com:TContentPlaceHolder ID="body" />
-</div>
-
-</com:TForm>
-</body>
-</html>
diff --git a/demos/quickstart/protected/controls/fr/SearchBox.tpl b/demos/quickstart/protected/controls/fr/SearchBox.tpl
deleted file mode 100755
index 9eaccd7a..00000000
--- a/demos/quickstart/protected/controls/fr/SearchBox.tpl
+++ /dev/null
@@ -1,3 +0,0 @@
-<com:TLabel ForControl="search" Text="Recherche :" CssClass="searchLabel"/>
-<com:TTextBox ID="search" OnTextChanged="doSearch" CssClass="searchBox"/>
-<com:TButton ID="find" Text="Trouver" OnClick="doSearch" CssClass="searchButton"/> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/fr/TopicList.tpl b/demos/quickstart/protected/controls/fr/TopicList.tpl
deleted file mode 100644
index c37609ab..00000000
--- a/demos/quickstart/protected/controls/fr/TopicList.tpl
+++ /dev/null
@@ -1,110 +0,0 @@
-<div id="toc">
-
-<div class="topic">
-<div>Démarrage rapide</div>
-<ul>
- <li><a href="?page=GettingStarted.Introduction">Introduction</a></li>
- <li><a href="?page=GettingStarted.AboutPrado">Qu'est-ce que PRADO ?</a></li>
- <li><a href="?page=GettingStarted.Installation">Installation</a></li>
- <li><a href="?page=GettingStarted.NewFeatures">Nouvelles fonctionnalités</a></li>
- <li><a href="?page=GettingStarted.Upgrading">Mise à jour de v2.x et v1.x</a></li>
- <li><a href="?page=GettingStarted.Wsat">Web Site Administration Tool</a></li>
- <li><a href="?page=GettingStarted.CommandLine">Command Line Tool</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Tutoriaux</div>
-<ul>
- <li><a href="?page=GettingStarted.HelloWorld">Créer sa première application PRADO</a></li>
- <li><a href="?page=Fundamentals.Hangman">Exemple : Jeu du pendu</a></li>
- <li><a href="?page=Tutorial.CurrencyConverter">Convertisseur monétaire</a></li>
- <li><a href="?page=Tutorial.AjaxChat">Chat AJAX</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Fundamentaux</div>
-<ul>
- <li><a href="?page=Fundamentals.Architecture">Architecture</a></li>
- <li><a href="?page=Fundamentals.Components1">Composants</a></li>
- <li><a href="?page=Fundamentals.Controls">Contrôles</a></li>
- <li><a href="?page=Fundamentals.Pages">Pages</a></li>
- <li><a href="?page=Fundamentals.Modules">Modules</a></li>
- <li><a href="?page=Fundamentals.Services">Services</a></li>
- <li><a href="?page=Fundamentals.Applications">Applications</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Configurations</div>
-<ul>
- <li><a href="?page=Configurations.Overview">Vue d'ensemble</a></li>
- <li><a href="?page=Configurations.Templates1">Templates : Partie I</a></li>
- <li><a href="?page=Configurations.Templates2">Templates : Partie II</a></li>
- <li><a href="?page=Configurations.Templates3">Templates : Partie III</a></li>
- <li><a href="?page=Configurations.AppConfig">Configuration de l'application</a></li>
- <li><a href="?page=Configurations.PageConfig">Configuration des pages</a></li>
- <li><a href="?page=Configurations.UrlMapping">URL Mapping (Friendly URLs)</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Réference des contrôles</div>
-<ul>
- <li><a href="?page=Controls.Standard">Contrôles standards</a></li>
- <li><a href="?page=Controls.Validation">Contrôles de validation</a></li>
- <li><a href="?page=Controls.List">Contrôles de listes</a></li>
- <li><a href="?page=Controls.Data">Contrôles de données</a></li>
- <li><a href="?page=ActiveControls.Home">Active Controls (AJAX)</a></li>
- <li><a href="?page=Controls.NewControl">Ecrire de nouveaux contrôles</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Réference des services</div>
-<ul>
- <li><a href="?page=Fundamentals.Services">Page Service</a></li>
- <li><a href="?page=Services.SoapService">SOAP Service</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Travailler avec les BDD</div>
-<ul>
- <li><a href="?page=Database.DAO">Data Access Objects</a></li>
- <li><a href="?page=Database.ActiveRecord">Active Record</a></li>
- <li><a href="?page=Database.Scaffold">Active Record Scaffold</a></li>
- <li><a href="?page=Database.SqlMap">SqlMap Data Mapper</a></li>
- <li><a href="?page=Database.ViewsArUpdate">Vues - Mise à jour des classes AR</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Thèmes avancés</div>
-<ul>
- <li><a href="?page=Advanced.Collections">Collections</a></li>
- <li><a href="?page=Advanced.Auth">Authentication et Authorisation</a></li>
- <li><a href="?page=Advanced.Security">Securité</a></li>
- <li><a href="?page=Advanced.Assets">Assets</a></li>
- <li><a href="?page=Advanced.MasterContent">Master et Content</a></li>
- <li><a href="?page=Advanced.Themes">Thèmes et Skins</a></li>
- <li><a href="?page=Advanced.State">Etat Persistent</a></li>
- <li><a href="?page=Advanced.Logging">Logging</a></li>
- <li><a href="?page=Advanced.Error">Gestion d'erreurs et rapports</a></li>
- <li><a href="?page=Advanced.I18N">Internationalisation</a></li>
- <li><a href="?page=Advanced.Performance">Amélioration des performances</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Script côté client</div>
-<ul>
- <li><a href="?page=Advanced.Scripts">Introduction au Javascript</a></li>
- <li><a href="?page=Advanced.Scripts1">Librairie Prototype Partie I</a></li>
- <li><a href="?page=Advanced.Scripts2">Librairie Prototype Partie II</a></li>
- <li><a href="?page=Advanced.Scripts3">Javascript Cookbook</a></li>
-</ul>
-</div>
-
-</div> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/id/Layout.tpl b/demos/quickstart/protected/controls/id/Layout.tpl
deleted file mode 100755
index aa210d67..00000000
--- a/demos/quickstart/protected/controls/id/Layout.tpl
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
-
-<com:THead Title="Tutorial Cepat PRADO">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<meta http-equiv="content-language" content="en"/>
-</com:THead>
-
-<body>
-<com:TForm>
-<div id="header">
-<div class="title">Tutorial Cepat Prado</div>
-<div class="image"></div>
-</div>
-
-<com:TPanel ID="MainMenu" CssClass="mainmenu">
-<div style="float:left; color:black; margin-top:-5px">
- <com:SearchBox />
-</div>
-<a href="?">Home</a> |
-<a href="http://www.pradosoft.com">PradoSoft.com</a> |
-<a href="../../../docs/quickstart.pdf">PDF Version</a> |
-<com:THyperLink ID="PrinterLink" Text="Versi Tercetak" />
-</com:TPanel>
-
-<table width="100%" border="0" cellspacing="0" cellpadding="0">
-<tr>
-<td valign="top" width="1">
-<com:TopicList ID="TopicPanel" />
-</td>
-<td valign="top">
-
-<com:TRepeater ID="languages" OnItemCreated="languageLinkCreated">
- <prop:HeaderTemplate>
- <div class="languages">Bahasa Tersedia: <ul>
- </prop:HeaderTemplate>
- <prop:ItemTemplate>
- <li><com:THyperLink ID="link" Text=<%# $this->DataItem %> /></li>
- </prop:ItemTemplate>
- <prop:FooterTemplate>
- </ul></div>
- </prop:FooterTemplate>
-</com:TRepeater>
-<div id="content">
-<p class="block-content" id="top-content" style="border-color: transparent; height:1px; margin: 0; padding: 0; background-color: transparent"></p>
-<com:TContentPlaceHolder ID="body" />
-</div>
-</td>
-</tr>
-</table>
-
-<div id="footer">
-Hak Cipta &copy; 2005-2007 <a href="http://www.pradosoft.com">PradoSoft</a>.
-<br/><br/>
-<%= Prado::poweredByPrado() %>
-<a href="http://validator.w3.org/check?uri=referer"><img border="0" src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
-</div>
-
-</com:TForm>
-</body>
-</html> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/id/RequiresVersion.tpl b/demos/quickstart/protected/controls/id/RequiresVersion.tpl
deleted file mode 100755
index f703512b..00000000
--- a/demos/quickstart/protected/controls/id/RequiresVersion.tpl
+++ /dev/null
@@ -1 +0,0 @@
-<p class="requires-version">Memerlukan Prado versi <strong><%= $this->Version %></strong> atau lebih baru.</p> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/id/RunBar.tpl b/demos/quickstart/protected/controls/id/RunBar.tpl
deleted file mode 100755
index ef1e76c8..00000000
--- a/demos/quickstart/protected/controls/id/RunBar.tpl
+++ /dev/null
@@ -1,4 +0,0 @@
-<div class="runbar">
-<com:THyperLink ID="RunButton" Target="_blank" Text="Jalankan Contoh" />
-<com:THyperLink ID="ViewSourceButton" Target="_blank" Text="Lihat Sumber" />
-</div> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/id/SampleLayout.tpl b/demos/quickstart/protected/controls/id/SampleLayout.tpl
deleted file mode 100755
index 6d990598..00000000
--- a/demos/quickstart/protected/controls/id/SampleLayout.tpl
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
-
-<com:THead Title="Contoh Tutorial Cepat PRADO">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<meta http-equiv="content-language" content="en"/>
-</com:THead>
-
-<body>
-<com:TForm>
-
-<div class="sampleheader">
-
-<div class="title">
-<a href="?">Tutorial Cepat PRADO</a> Contoh
-</div>
-<div class="image"></div>
-
-</div>
-<div class="samplemenu">
- <div class="copyright">
- Hak Cipta &copy; 2005-2007 <a href="http://www.pradosoft.com">PradoSoft</a>
- </div>
-</div>
-
-<div style="margin:15px;">
-<com:TContentPlaceHolder ID="body" />
-</div>
-
-</com:TForm>
-</body>
-</html> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/id/SearchBox.tpl b/demos/quickstart/protected/controls/id/SearchBox.tpl
deleted file mode 100755
index 11e9cf7a..00000000
--- a/demos/quickstart/protected/controls/id/SearchBox.tpl
+++ /dev/null
@@ -1,3 +0,0 @@
-<com:TLabel ForControl="search" Text="Cari:" CssClass="searchLabel"/>
-<com:TTextBox ID="search" OnTextChanged="doSearch" CssClass="searchBox"/>
-<com:TButton ID="find" Text="Ayo" OnClick="doSearch" CssClass="searchButton"/> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/id/SinceVersion.tpl b/demos/quickstart/protected/controls/id/SinceVersion.tpl
deleted file mode 100755
index 767674c0..00000000
--- a/demos/quickstart/protected/controls/id/SinceVersion.tpl
+++ /dev/null
@@ -1 +0,0 @@
-<p class="since-version">Tersedia mulai dari Prado versi <strong><%= $this->Version %></strong> dan selanjutnya.</p> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/id/TopicList.tpl b/demos/quickstart/protected/controls/id/TopicList.tpl
deleted file mode 100644
index a35db55d..00000000
--- a/demos/quickstart/protected/controls/id/TopicList.tpl
+++ /dev/null
@@ -1,111 +0,0 @@
-<div id="toc">
-
-<div class="topic">
-<div>Memulai</div>
-<ul>
- <li><a href="?page=GettingStarted.Introduction">Pengenalan</a></li>
- <li><a href="?page=GettingStarted.AboutPrado">Apa itu PRADO?</a></li>
- <li><a href="?page=GettingStarted.Installation">Instalasi</a></li>
- <li><a href="?page=GettingStarted.NewFeatures">Fitur Baru</a></li>
- <li><a href="?page=GettingStarted.Upgrading">Meningkatkan dari v2.x dan v1.x</a></li>
- <li><a href="?page=GettingStarted.Wsat">Web Site Administration Tool</a></li>
- <li><a href="?page=GettingStarted.CommandLine">Command Line Tool</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Tutorial</div>
-<ul>
- <li><a href="?page=GettingStarted.HelloWorld">Membuat Aplikasi PRADO Pertama</a></li>
- <li><a href="?page=Fundamentals.Hangman">Contoh: Permainan Hangman</a></li>
- <li><a href="?page=Tutorial.CurrencyConverter">Pengubah Kurs</a></li>
- <li><a href="?page=Tutorial.AddressBook">Buku Alamat</a></li>
- <li><a href="?page=Tutorial.AjaxChat">Klient Obrolan AJAX</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Fundamental</div>
-<ul>
- <li><a href="?page=Fundamentals.Architecture">Arsitektur</a></li>
- <li><a href="?page=Fundamentals.Components1">Komponen</a></li>
- <li><a href="?page=Fundamentals.Controls">Kontrol</a></li>
- <li><a href="?page=Fundamentals.Pages">Halaman</a></li>
- <li><a href="?page=Fundamentals.Modules">Modul</a></li>
- <li><a href="?page=Fundamentals.Services">Layanan</a></li>
- <li><a href="?page=Fundamentals.Applications">Aplikasi</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Konfigurasi</div>
-<ul>
- <li><a href="?page=Configurations.Overview">Tinjauan</a></li>
- <li><a href="?page=Configurations.Templates1">Template: Bagian I</a></li>
- <li><a href="?page=Configurations.Templates2">Template: Bagian II</a></li>
- <li><a href="?page=Configurations.Templates3">Template: Bagian III</a></li>
- <li><a href="?page=Configurations.AppConfig">Konfigurasi Aplikasi</a></li>
- <li><a href="?page=Configurations.PageConfig">Konfigurasi Halaman</a></li>
- <li><a href="?page=Configurations.UrlMapping">Pemetaan URL (URL bersahabat)</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Referensi Kontrol</div>
-<ul>
- <li><a href="?page=Controls.Standard">Kontrol Standar</a></li>
- <li><a href="?page=Controls.Validation">Kontrol Validasi</a></li>
- <li><a href="?page=Controls.List">Kontrol Daftar</a></li>
- <li><a href="?page=Controls.Data">Kontrol Data</a></li>
- <li><a href="?page=ActiveControls.Home">Kontrol Aktif (AJAX)</a></li>
- <li><a href="?page=Controls.NewControl">Menulis Kontrol Baru</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Referensi Layanan</div>
-<ul>
- <li><a href="?page=Fundamentals.Services">Layanan Halaman</a></li>
- <li><a href="?page=Services.SoapService">Layanan SOAP</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Bekerja dengan Databases</div>
-<ul>
- <li><a href="?page=Database.DAO">Data Access Objects</a></li>
- <li><a href="?page=Database.ActiveRecord">Rekaman Aktf</a></li>
- <li><a href="?page=Database.Scaffold">Kerangka Rekaman Aktif</a></li>
- <li><a href="?page=Database.SqlMap">Pemeta Data SqlMap</a></li>
- <li><a href="?page=Database.ViewsArUpdate">Views - AR Kelas Perbarui</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Topik Lanjutan</div>
-<ul>
- <li><a href="?page=Advanced.Collections">Koleksi</a></li>
- <li><a href="?page=Advanced.Auth">Otentikasi dan Otorisasi</a></li>
- <li><a href="?page=Advanced.Security">Keamanan</a></li>
- <li><a href="?page=Advanced.Assets">Asset</a></li>
- <li><a href="?page=Advanced.MasterContent">Master dan Konten</a></li>
- <li><a href="?page=Advanced.Themes">Tema dan Skin</a></li>
- <li><a href="?page=Advanced.State">Kondisi Persisten</a></li>
- <li><a href="?page=Advanced.Logging">Pencatatan</a></li>
- <li><a href="?page=Advanced.Error">Penanganan Kesalahan dan Laporan</a></li>
- <li><a href="?page=Advanced.I18N">Internasionalisasi</a></li>
- <li><a href="?page=Advanced.Performance">Penyesuaian Performansi</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Penaskahan sisi-Klien</div>
-<ul>
- <li><a href="?page=Advanced.Scripts">Pengenalan Javascript</a></li>
- <li><a href="?page=Advanced.Scripts1">Librari Prototipe Bagian I</a></li>
- <li><a href="?page=Advanced.Scripts2">Librari Prototipe Bagian II</a></li>
- <li><a href="?page=Advanced.Scripts3">Buku Lengkap Javascript</a></li>
-</ul>
-</div>
-
-</div> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/ja/Layout.tpl b/demos/quickstart/protected/controls/ja/Layout.tpl
deleted file mode 100755
index 54cf14cb..00000000
--- a/demos/quickstart/protected/controls/ja/Layout.tpl
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
-
-<com:THead Title="PRADO クイックスタートチュートリアル">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<meta http-equiv="content-language" content="ja" />
-</com:THead>
-
-<body>
-<com:TForm>
-<div id="header">
-<div class="title">Prado クイックスタートチュートリアル</div>
-<div class="image"></div>
-</div>
-
-<com:TPanel ID="MainMenu" CssClass="mainmenu">
-<div style="float:left; color:black; margin-top:-5px">
- <com:SearchBox />
-</div>
-<a href="?">ホーム</a> |
-<a href="http://www.pradosoft.com">本家サイト</a> |
-<a href="../../docs/quickstart.pdf">PDF バージョン</a> |
-<com:THyperLink ID="PrinterLink" Text="プリントバージョン" />
-</com:TPanel>
-
-<table width="100%" border="0" cellspacing="0" cellpadding="0">
-<tr>
-<td valign="top" width="1">
-<com:TopicList ID="TopicPanel" />
-</td>
-<td valign="top">
-
-<com:TRepeater ID="languages" OnItemCreated="languageLinkCreated">
- <prop:HeaderTemplate>
- <div class="languages">利用可能な言語: <ul>
- </prop:HeaderTemplate>
- <prop:ItemTemplate>
- <li><com:THyperLink ID="link" Text=<%# $this->DataItem %> /></li>
- </prop:ItemTemplate>
- <prop:FooterTemplate>
- </ul></div>
- </prop:FooterTemplate>
-</com:TRepeater>
-<div id="content">
-<p class="block-content" id="top-content" style="border-color: transparent; height:1px; margin: 0; padding: 0; background-color: transparent"></p>
-<com:TContentPlaceHolder ID="body" />
-</div>
-</td>
-</tr>
-</table>
-
-<div id="footer">
-Copyright &copy; 2005-2007 <a href="http://www.pradosoft.com">PradoSoft</a>.
-<br/><br/>
-<%= Prado::poweredByPrado() %>
-<a href="http://validator.w3.org/check?uri=referer"><img border="0" src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
-</div>
-
-</com:TForm>
-</body>
-</html> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/ja/RunBar.tpl b/demos/quickstart/protected/controls/ja/RunBar.tpl
deleted file mode 100755
index c8015514..00000000
--- a/demos/quickstart/protected/controls/ja/RunBar.tpl
+++ /dev/null
@@ -1,4 +0,0 @@
-<div class="runbar">
-<com:THyperLink ID="RunButton" Target="_blank" Text="サンプルの実行" />
-<com:THyperLink ID="ViewSourceButton" Target="_blank" Text="ソースの表示" />
-</div> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/ja/SearchBox.tpl b/demos/quickstart/protected/controls/ja/SearchBox.tpl
deleted file mode 100755
index 092c8d4b..00000000
--- a/demos/quickstart/protected/controls/ja/SearchBox.tpl
+++ /dev/null
@@ -1,3 +0,0 @@
-<com:TLabel ForControl="search" Text="検索:" CssClass="searchLabel"/>
-<com:TTextBox ID="search" OnTextChanged="doSearch" CssClass="searchBox"/>
-<com:TButton ID="find" Text="検索" OnClick="doSearch" CssClass="searchButton"/> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/ja/TopicList.tpl b/demos/quickstart/protected/controls/ja/TopicList.tpl
deleted file mode 100644
index f24994e0..00000000
--- a/demos/quickstart/protected/controls/ja/TopicList.tpl
+++ /dev/null
@@ -1,111 +0,0 @@
-<div id="toc">
-
-<div class="topic">
-<div>ご利用の前に</div>
-<ul>
- <li><a href="?page=GettingStarted.Introduction">はじめに</a></li>
- <li><a href="?page=GettingStarted.AboutPrado">PRADO とは?</a></li>
- <li><a href="?page=GettingStarted.Installation">インストール</a></li>
- <li><a href="?page=GettingStarted.NewFeatures">新機能</a></li>
- <li><a href="?page=GettingStarted.Upgrading">v2.x v1.x からのバージョンアップ</a></li>
- <li><a href="?page=GettingStarted.Wsat">Web Site Administration Tool</a></li>
- <li><a href="?page=GettingStarted.CommandLine">Command Line Tool</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>チュートリアル</div>
-<ul>
- <li><a href="?page=GettingStarted.HelloWorld">初めての PRADO アプリケーション</a></li>
- <li><a href="?page=Fundamentals.Hangman">Hangman ゲームサンプル</a></li>
- <li><a href="?page=Tutorial.CurrencyConverter">通貨コンバーター</a></li>
- <li><a href="?page=Tutorial.AddressBook">アドレス帳</a></li>
- <li><a href="?page=Tutorial.AjaxChat">Ajax チャット</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>動作原理</div>
-<ul>
- <li><a href="?page=Fundamentals.Architecture">アーキテクチャ</a></li>
- <li><a href="?page=Fundamentals.Components1">コンポーネント</a></li>
- <li><a href="?page=Fundamentals.Controls">コントロール</a></li>
- <li><a href="?page=Fundamentals.Pages">ページ</a></li>
- <li><a href="?page=Fundamentals.Modules">モジュール</a></li>
- <li><a href="?page=Fundamentals.Services">サービス</a></li>
- <li><a href="?page=Fundamentals.Applications">アプリケーション</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>設定</div>
-<ul>
- <li><a href="?page=Configurations.Overview">概観</a></li>
- <li><a href="?page=Configurations.Templates1">テンプレート: パート I</a></li>
- <li><a href="?page=Configurations.Templates2">テンプレート: パート II</a></li>
- <li><a href="?page=Configurations.Templates3">テンプレート: パート III</a></li>
- <li><a href="?page=Configurations.AppConfig">アプリケーション設定</a></li>
- <li><a href="?page=Configurations.PageConfig">ページ設定</a></li>
- <li><a href="?page=Configurations.UrlMapping">URL マッピング (Friendly URLs)</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>コントロールリファレンス</div>
-<ul>
- <li><a href="?page=Controls.Standard">通常コントロール</a></li>
- <li><a href="?page=Controls.Validation">バリデーションコントロール</a></li>
- <li><a href="?page=Controls.List">リストコントロール</a></li>
- <li><a href="?page=Controls.Data">データコントロール</a></li>
- <li><a href="?page=ActiveControls.Home">アクティブコントロール (AJAX)</a></li>
- <li><a href="?page=Controls.NewControl">独自のコントロールを作成する</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>サービスリファレンス</div>
-<ul>
- <li><a href="?page=Fundamentals.Services">ページサービス</a></li>
- <li><a href="?page=Services.SoapService">SOAP サービス</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>データベース連携</div>
-<ul>
- <li><a href="?page=Database.DAO">データアクセスオブジェクト</a></li>
- <li><a href="?page=Database.ActiveRecord">アクティブレコード</a></li>
- <li><a href="?page=Database.Scaffold">アクティブレコードScaffold</a></li>
- <li><a href="?page=Database.SqlMap">SqlMapデータマッパー</a></li>
- <li><a href="?page=Database.ViewsArUpdate">ビュー - ARクラスのアップデート</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>上級者向けトピック</div>
-<ul>
- <li><a href="?page=Advanced.Collections">コレクション</a></li>
- <li><a href="?page=Advanced.Auth">認証と承認</a></li>
- <li><a href="?page=Advanced.Security">セキュリティ</a></li>
- <li><a href="?page=Advanced.Assets">アセット</a></li>
- <li><a href="?page=Advanced.MasterContent">マスター/コンテンツ</a></li>
- <li><a href="?page=Advanced.Themes">テーマとスキン</a></li>
- <li><a href="?page=Advanced.State">状態の保存</a></li>
- <li><a href="?page=Advanced.Logging">ロギング</a></li>
- <li><a href="?page=Advanced.Error">エラーハンドリングとエラーレポート</a></li>
- <li><a href="?page=Advanced.I18N">国際化対応</a></li>
- <li><a href="?page=Advanced.Performance">パフォーマンスチューニング</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>クライアントサイドスクリプト</div>
-<ul>
- <li><a href="?page=Advanced.Scripts">Javascript 使用方法</a></li>
- <li><a href="?page=Advanced.Scripts1">Prototype ライブラリ パート I</a></li>
- <li><a href="?page=Advanced.Scripts2">Prototype ライブラリ パート II</a></li>
- <li><a href="?page=Advanced.Scripts3">Javascript クックブック</a></li>
-</ul>
-</div>
-
-</div> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/pl/Layout.tpl b/demos/quickstart/protected/controls/pl/Layout.tpl
deleted file mode 100755
index 7fd86713..00000000
--- a/demos/quickstart/protected/controls/pl/Layout.tpl
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
-
-<com:THead Title="PRADO QuickStart Tutorial">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<meta http-equiv="content-language" content="en"/>
-</com:THead>
-
-<body>
-<com:TForm>
-<div id="header">
-<div class="title">Prado QuickStart Tutorial</div>
-<div class="image"></div>
-</div>
-
-<com:TPanel ID="MainMenu" CssClass="mainmenu">
-<div style="float:left; color:black; margin-top:-5px">
- <com:SearchBox />
-</div>
-<a href="?">Główna</a> |
-<a href="http://www.pradosoft.com">PradoSoft.com</a> |
-<a href="../../docs/quickstart.pdf">wersja PDF</a> |
-<com:THyperLink ID="PrinterLink" Text="wersja do druku" />
-</com:TPanel>
-
-<table width="100%" border="0" cellspacing="0" cellpadding="0">
-<tr>
-<td valign="top" width="1">
-<com:TopicList ID="TopicPanel" />
-</td>
-<td valign="top">
-
-<com:TRepeater ID="languages" OnItemCreated="languageLinkCreated">
- <prop:HeaderTemplate>
- <div class="languages">Dostępne języki: <ul>
- </prop:HeaderTemplate>
- <prop:ItemTemplate>
- <li><com:THyperLink ID="link" Text=<%# $this->DataItem %> /></li>
- </prop:ItemTemplate>
- <prop:FooterTemplate>
- </ul></div>
- </prop:FooterTemplate>
-</com:TRepeater>
-<div id="content">
-<p class="block-content" id="top-content" style="border-color: transparent; height:1px; margin: 0; padding: 0; background-color: transparent"></p>
-<com:TContentPlaceHolder ID="body" />
-</div>
-</td>
-</tr>
-</table>
-
-<div id="footer">
-Copyright &copy; 2005-2007 <a href="http://www.pradosoft.com">PradoSoft</a>.
-<br/><br/>
-<%= Prado::poweredByPrado() %>
-<a href="http://validator.w3.org/check?uri=referer"><img border="0" src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
-</div>
-
-</com:TForm>
-</body>
-</html> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/pl/RequiresVersion.tpl b/demos/quickstart/protected/controls/pl/RequiresVersion.tpl
deleted file mode 100755
index 01e70c43..00000000
--- a/demos/quickstart/protected/controls/pl/RequiresVersion.tpl
+++ /dev/null
@@ -1 +0,0 @@
-<p class="requires-version">Wymaga PRADO w wersji <strong><%= $this->Version %></strong> lub wyższej.</p> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/pl/SearchBox.tpl b/demos/quickstart/protected/controls/pl/SearchBox.tpl
deleted file mode 100755
index a00cbd72..00000000
--- a/demos/quickstart/protected/controls/pl/SearchBox.tpl
+++ /dev/null
@@ -1,3 +0,0 @@
-<com:TLabel ForControl="search" Text="Szukaj:" CssClass="searchLabel"/>
-<com:TTextBox ID="search" OnTextChanged="doSearch" CssClass="searchBox"/>
-<com:TButton ID="find" Text="Znajdź" OnClick="doSearch" CssClass="searchButton"/> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/pl/SinceVersion.tpl b/demos/quickstart/protected/controls/pl/SinceVersion.tpl
deleted file mode 100755
index 46cc1211..00000000
--- a/demos/quickstart/protected/controls/pl/SinceVersion.tpl
+++ /dev/null
@@ -1 +0,0 @@
-<p class="since-version">Dostępny(a) w PRADO od wersji <strong><%= $this->Version %></strong> i dalej.</p> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/pl/TopicList.tpl b/demos/quickstart/protected/controls/pl/TopicList.tpl
deleted file mode 100644
index a494d94e..00000000
--- a/demos/quickstart/protected/controls/pl/TopicList.tpl
+++ /dev/null
@@ -1,111 +0,0 @@
-<div id="toc">
-
-<div class="topic">
-<div>Rozpoczynamy</div>
-<ul>
- <li><a href="?page=GettingStarted.Introduction">Wprowadzenie</a></li>
- <li><a href="?page=GettingStarted.AboutPrado">Czym jest PRADO?</a></li>
- <li><a href="?page=GettingStarted.Installation">Instalacja</a></li>
- <li><a href="?page=GettingStarted.NewFeatures">Nowe możliwości</a></li>
- <li><a href="?page=GettingStarted.Upgrading">Aktualizacja z wersji 2.x oraz 1.x</a></li>
- <li><a href="?page=GettingStarted.Wsat">Web Site Administration Tool</a></li>
- <li><a href="?page=GettingStarted.CommandLine">Command Line Tool</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Tutoriale</div>
-<ul>
- <li><a href="?page=GettingStarted.HelloWorld">Tworzenie pierwszej aplikacji PRADO</a></li>
- <li><a href="?page=Fundamentals.Hangman">Przykład: gra wisielec</a></li>
- <li><a href="?page=Tutorial.CurrencyConverter">Konwenter walut</a></li>
- <li><a href="?page=Tutorial.AddressBook">Książka adresowa</a></li>
- <li><a href="?page=Tutorial.AjaxChat">AJAX-owy klient czat</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Postawy</div>
-<ul>
- <li><a href="?page=Fundamentals.Architecture">Architektura</a></li>
- <li><a href="?page=Fundamentals.Components1">Komponenty</a></li>
- <li><a href="?page=Fundamentals.Controls">Kontrolki</a></li>
- <li><a href="?page=Fundamentals.Pages">Strony</a></li>
- <li><a href="?page=Fundamentals.Modules">Moduły</a></li>
- <li><a href="?page=Fundamentals.Services">Serwisy</a></li>
- <li><a href="?page=Fundamentals.Applications">Applicacje</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Konfiguracja</div>
-<ul>
- <li><a href="?page=Configurations.Overview">Przegląd</a></li>
- <li><a href="?page=Configurations.Templates1">Szablony: część I</a></li>
- <li><a href="?page=Configurations.Templates2">Szablony: część II</a></li>
- <li><a href="?page=Configurations.Templates3">Szablony: część III</a></li>
- <li><a href="?page=Configurations.AppConfig">Konfiguracja aplikacji</a></li>
- <li><a href="?page=Configurations.PageConfig">Konfiguracja strony</a></li>
- <li><a href="?page=Configurations.UrlMapping">Mapowanie adresów URL (Przyjazne URL-e)</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Informacje o kontrolkach</div>
-<ul>
- <li><a href="?page=Controls.Standard">Kontrolki standardowe</a></li>
- <li><a href="?page=Controls.Validation">Kontrolki walidujące</a></li>
- <li><a href="?page=Controls.List">Kontrolki listujące</a></li>
- <li><a href="?page=Controls.Data">Kontrolki danych</a></li>
- <li><a href="?page=ActiveControls.Home">Kontrolki aktywne (AJAX)</a></li>
- <li><a href="?page=Controls.NewControl">Tworzenie nowych kontrolek</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Informacje o usługach</div>
-<ul>
- <li><a href="?page=Fundamentals.Services">Usługa strony [Page Service]</a></li>
- <li><a href="?page=Services.SoapService">Usługa SOAP [SOAP Service]</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Operacje na bazach dancyh</div>
-<ul>
- <li><a href="?page=Database.DAO">Data Access Objects</a></li>
- <li><a href="?page=Database.ActiveRecord">Rekord aktywny (Active Record)</a></li>
- <li><a href="?page=Database.Scaffold">Szkielet rekordu aktywnego (Scafold)</a></li>
- <li><a href="?page=Database.SqlMap">Mapa danych SqlMap</a></li>
- <li><a href="?page=Database.ViewsArUpdate">Widoki - Zajęcia AR Aktualizacja</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Zaawansowane tematy</div>
-<ul>
- <li><a href="?page=Advanced.Collections">Kolekcje</a></li>
- <li><a href="?page=Advanced.Auth">Autentykacja i autoryzacja</a></li>
- <li><a href="?page=Advanced.Security">Bezpieczeńswo</a></li>
- <li><a href="?page=Advanced.Assets">Assets</a></li>
- <li><a href="?page=Advanced.MasterContent">Master and Content</a></li>
- <li><a href="?page=Advanced.Themes">Tematy oraz skórki</a></li>
- <li><a href="?page=Advanced.State">Stan ustalony [Persistent State]</a></li>
- <li><a href="?page=Advanced.Logging">Wpisywanie do dziennika [logging]</a></li>
- <li><a href="?page=Advanced.Error">Obsługa i raportowanie błędów</a></li>
- <li><a href="?page=Advanced.I18N">Internationalizacja</a></li>
- <li><a href="?page=Advanced.Performance">Zwiększanie wydajności</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>Skrypty po stronie klienta</div>
-<ul>
- <li><a href="?page=Advanced.Scripts">Wprowadznie do Javascript</a></li>
- <li><a href="?page=Advanced.Scripts1">Biblioteka Prototype część I</a></li>
- <li><a href="?page=Advanced.Scripts2">Biblioteka Prototype część II</a></li>
- <li><a href="?page=Advanced.Scripts3">Książka z przepisami Javascript</a></li>
-</ul>
-</div>
-
-</div> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/zh/TopicList.tpl b/demos/quickstart/protected/controls/zh/TopicList.tpl
deleted file mode 100644
index 73e1d5a8..00000000
--- a/demos/quickstart/protected/controls/zh/TopicList.tpl
+++ /dev/null
@@ -1,110 +0,0 @@
-<div id="toc">
-
-<div class="topic">
-<div>PRADO初步</div>
-<ul>
- <li><a href="?page=GettingStarted.Introduction">概况</a></li>
- <li><a href="?page=GettingStarted.AboutPrado">什么是PRADO?</a></li>
- <li><a href="?page=GettingStarted.Installation">安装</a></li>
- <li><a href="?page=GettingStarted.NewFeatures">版本新功能</a></li>
- <li><a href="?page=GettingStarted.Upgrading">从v2.x和v1.x升级</a></li>
- <li><a href="?page=GettingStarted.Wsat">Web Site Administration Tool</a></li>
- <li><a href="?page=GettingStarted.CommandLine">Command Line Tool</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>范例教程</div>
-<ul>
- <li><a href="?page=GettingStarted.HelloWorld">创建第一个PRADO应用</a></li>
- <li><a href="?page=Fundamentals.Hangman">Hangman游戏</a></li>
- <li><a href="?page=Tutorial.CurrencyConverter">货币转换程序</a></li>
- <li><a href="?page=Tutorial.AjaxChat">AJAX聊天程序</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>基础概念</div>
-<ul>
- <li><a href="?page=Fundamentals.Architecture">框架结构</a></li>
- <li><a href="?page=Fundamentals.Components1">部件</a></li>
- <li><a href="?page=Fundamentals.Controls">控件</a></li>
- <li><a href="?page=Fundamentals.Pages">页面</a></li>
- <li><a href="?page=Fundamentals.Modules">模块</a></li>
- <li><a href="?page=Fundamentals.Services">服务</a></li>
- <li><a href="?page=Fundamentals.Applications">应用</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>各种配置</div>
-<ul>
- <li><a href="?page=Configurations.Overview">概况</a></li>
- <li><a href="?page=Configurations.Templates1">模板(1)</a></li>
- <li><a href="?page=Configurations.Templates2">模板(2)</a></li>
- <li><a href="?page=Configurations.Templates3">模板(3)</a></li>
- <li><a href="?page=Configurations.AppConfig">应用配置</a></li>
- <li><a href="?page=Configurations.PageConfig">页面配置</a></li>
- <li><a href="?page=Configurations.UrlMapping">URL映射</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>控件使用参考</div>
-<ul>
- <li><a href="?page=Controls.Standard">基本控件</a></li>
- <li><a href="?page=Controls.Validation">验证控件</a></li>
- <li><a href="?page=Controls.List">列表控件</a></li>
- <li><a href="?page=Controls.Data">数据控件</a></li>
- <li><a href="?page=ActiveControls.Home">Active控件(AJAX)</a></li>
- <li><a href="?page=Controls.NewControl">创建新控件</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>服务使用参考</div>
-<ul>
- <li><a href="?page=Fundamentals.Services">页面服务</a></li>
- <li><a href="?page=Services.SoapService">SOAP服务</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>使用数据库</div>
-<ul>
- <li><a href="?page=Database.DAO">数据存取对象(DAO)</a></li>
- <li><a href="?page=Database.ActiveRecord">Active Record</a></li>
- <li><a href="?page=Database.Scaffold">Active Record Scaffold</a></li>
- <li><a href="?page=Database.SqlMap">SqlMap Data Mapper</a></li>
- <li><a href="?page=Database.ViewsArUpdate">意見 - AR類更新</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>高级教程</div>
-<ul>
- <li><a href="?page=Advanced.Collections">Collections</a></li>
- <li><a href="?page=Advanced.Auth">验证和授权</a></li>
- <li><a href="?page=Advanced.Security">安全</a></li>
- <li><a href="?page=Advanced.Assets">资源</a></li>
- <li><a href="?page=Advanced.MasterContent">Master and Content</a></li>
- <li><a href="?page=Advanced.Themes">Themes and Skins</a></li>
- <li><a href="?page=Advanced.State">Persistent State</a></li>
- <li><a href="?page=Advanced.Logging">日志</a></li>
- <li><a href="?page=Advanced.Error">错误处理</a></li>
- <li><a href="?page=Advanced.I18N">多语言支持</a></li>
- <li><a href="?page=Advanced.Performance">Performance Tuning</a></li>
-</ul>
-</div>
-
-<div class="topic">
-<div>客户端编程</div>
-<ul>
- <li><a href="?page=Advanced.Scripts">JavaScript介绍</a></li>
- <li><a href="?page=Advanced.Scripts1">Prototype Library Part I</a></li>
- <li><a href="?page=Advanced.Scripts2">Prototype Library Part II</a></li>
- <li><a href="?page=Advanced.Scripts3">Javascript Cookbook</a></li>
-</ul>
-</div>
-
-</div> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/ActiveRatingList.page b/demos/quickstart/protected/pages/ActiveControls/ActiveRatingList.page
index 7b6fb83d..fa0e25c4 100644
--- a/demos/quickstart/protected/pages/ActiveControls/ActiveRatingList.page
+++ b/demos/quickstart/protected/pages/ActiveControls/ActiveRatingList.page
@@ -1,6 +1,6 @@
<com:TContent ID="body" >
-<h1>TActiveRatingList</h1>
+<h1 id="192015">TActiveRatingList</h1>
<com:DocLink ClassPath="System.Web.UI.ActiveControls.TActiveRatingList" />
<p class="block-content">
diff --git a/demos/quickstart/protected/pages/ActiveControls/Introduction.page b/demos/quickstart/protected/pages/ActiveControls/Introduction.page
index edc0b5bc..275da737 100755
--- a/demos/quickstart/protected/pages/ActiveControls/Introduction.page
+++ b/demos/quickstart/protected/pages/ActiveControls/Introduction.page
@@ -9,7 +9,7 @@ A classic webpage can only transfer data back to the server using an http postba
A common solution to this problem is the use of AJAX (Asynchronous JavaScript and XML) callbacks. After the first full page load, the web application can make subsequents requests using javascript. The callback requests are asynchronous, so the user can continue to interact with the page while the response is loading. The response contains a list of changes that will be applied to the page "on the fly", like replacing existing elements with new content or add some css style to an existing element.
</p>
-<h2>Interacting with a page on callback</h2>
+<h2 id="222017">Interacting with a page on callback</h2>
<p class="block-content">
PRADO has builtin support for AJAX callbacks in the form of <i>Active Controls</i>. These controls can trigger a callback request and have their properties (value, css style, attributes, ..) updated during a callback.
@@ -28,7 +28,7 @@ public function onClick($sender, $param)
}
</com:TTextHighlighter>
-<h1>Active Controls (AJAX enabled Controls)</h1>
+<h1 id="222016">Active Controls (AJAX enabled Controls)</h1>
<p class="block-content">
Active controls extends standard PRADO controls adding the ability to automatically update themselves on callbacks without the need of ad-hoc javascript calls. Active controls are reliant on a collection of javascript classes that gets added to the page automatically when needed.
</p>
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveHyperLink/Home.page b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveHyperLink/Home.page
index a7767e2d..f0328316 100755
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveHyperLink/Home.page
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveHyperLink/Home.page
@@ -10,8 +10,8 @@ A regular hyperlink:
Welcome to
<com:TActiveHyperLink
ID="link1"
- NavigateUrl="http://www.pradosoft.com/"
- Text="PradoSoft.com"
+ NavigateUrl="https://github.com/pradosoft/prado"
+ Text="Prado framework"
Target="_blank" />.
</td>
<td class="sampleaction">
@@ -25,8 +25,8 @@ A text hyperlink with css style:
Welcome to
<com:TActiveHyperLink
ID="link2"
- NavigateUrl="http://www.pradosoft.com/"
- Text="PradoSoft.com"
+ NavigateUrl="https://github.com/pradosoft/prado"
+ Text="Prado framework"
Target="_blank"
BackColor="silver"
Font.Italic="true" />.
@@ -41,7 +41,7 @@ An image hyperlink:
</td><td class="sampleaction">
<com:TActiveHyperLink
ID="link3"
- NavigateUrl="http://www.pradosoft.com/"
+ NavigateUrl="https://github.com/pradosoft/prado"
ImageUrl=<%~hello_world.gif%>
Text="Hello World" />.
</td>
@@ -55,7 +55,7 @@ A hyerplink with body contents as link text:
</td><td class="sampleaction">
<com:TActiveHyperLink
ID="link4"
- NavigateUrl="http://www.pradosoft.com/"
+ NavigateUrl="https://github.com/pradosoft/prado"
Target="_blank">
Body contents
</com:TActiveHyperLink>
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveHyperLink/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveHyperLink/Home.php
index f70c89b4..6596dca6 100755
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveHyperLink/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveHyperLink/Home.php
@@ -14,7 +14,7 @@ class Home extends TPage
function button3_clicked($sender, $param)
{
- $this->link3->Text = 'PradoSoft.com';
+ $this->link3->Text = 'Prado framework';
}
function button4_clicked($sender, $param)
diff --git a/demos/quickstart/protected/pages/ActiveControls/id/ActiveButton.page b/demos/quickstart/protected/pages/ActiveControls/id/ActiveButton.page
deleted file mode 100755
index 60e80bdb..00000000
--- a/demos/quickstart/protected/pages/ActiveControls/id/ActiveButton.page
+++ /dev/null
@@ -1,77 +0,0 @@
-<com:TContent ID="body">
-<h1 id="122026">TActiveButton</h1>
-<com:DocLink ClassPath="System.Web.UI.ActiveControls.TActiveButton" />
-
-<p id="610410" class="block-content"><tt>TActiveButton</tt> adalah kontrol aktif selain
-<a href="?page=Controls.Button">TButton</a>.
-Ketika <tt>TActiveButton</tt> diklik pada permintaan postback normal, permintaan callback yang diinisiasi. Event <tt>OnCallback</tt> dimunculkan selama permintaan callback dan dimunculkan <strong>setelah</strong> event <tt>OnClick</tt>.
-</p>
-
-<p id="610411" class="block-content">Ketika properti <tt>ActiveControl.EnableUpdate</tt> adalah true,
-mengubah properti <tt>Text</tt> selama permintaan callback akan memutakhirkan
-judul tombol pada sisi-klien.</p>
-
-<p id="610412" class="block-content">Karena event <tt>OnCallback</tt> hanya dimunculkan selama permintaan callback, pengendali event <tt>OnCallback</tt> bisa dipakai untuk menangani logika terutama yang terkait dengan permintaan callback. Pengendali event <tt>OnClick</tt> dimunculkan kapan saja tombol diklik, meskipun javascript dimatikan.</p>
-
-<p id="610413" class="block-content">Contoh berikut menggunakan kedua event <tt>OnClick</tt> dan <tt>OnCallback</tt> dari <tt>TActiveButton</tt>.</p>
-
-<com:RunBar PagePath="ActiveControls.Samples.TActiveButton.Home" />
-
-<h2 id="122027">Diagram Kelas TActiveButton</h2>
-<p id="610414" class="block-content">Diagram kelas untuk <tt>TActiveButton</tt> diilustrasikan dalam gambar berikut.
-Banyak kontrol aktif yang melakukan permintaan callback mempunyai struktur yang mirip.
-</p>
-
-<img src=<%~ TActiveButtonClass.png %> class="figure"
- alt="TActiveButton class diagram" title="Diagram kelas TActiveButton" />
-
-<p id="610415" class="block-content"><tt>TActiveButton</tt> adalah ekstensi dari <a href="?page=Controls.Button">TButton</a> dan mengimplementasikan dua antarmuka tambahan <tt>ICallbackEventHandler</tt> dan
-<tt>IActiveControl</tt>. <tt>TActiveButton</tt> berisi turunan dari
-<a href="?page=ActiveControls.BaseActiveControl">TBaseActiveCallbackControl</a>
-yang tersedia melalui properti <tt>ActiveControl</tt> dari <tt>TActiveButton</tt>.
-Contoh berikut menyetel parameter callback atas <tt>TActiveButton</tt> saat
-permintaan callback ditampung.
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code1">
-&lt;com:TActiveButton
- Text="Click Me"
- OnCallback="button_callback"
- ActiveControl.CallbackParameter="value" /&gt;
-</com:TTextHighlighter>
-<p id="610416" class="block-content">Dalam metode pengendali event <tt>OnCallback</tt>, <tt>CallbackParameter</tt> tersedua di dalam obyek <tt>$param</tt>.</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code2">
-public function button_callback($sender, $param)
-{
- echo $param->CallbackParameter; //mengeluarkan "value"
-}
-</com:TTextHighlighter>
-
-<h2 id="122028">Menambah Perilaku Sisi Klien</h2>
-
-<p id="610417" class="block-content">Di dalam properti <tt>ActiveControl</tt> adalah turunan dari
-<a href="?page=ActiveControls.CallbackClientSide">TCallbackClientSide</a> yang tersedia sebagai <tt>ClientSide</tt> dari <tt>TActiveButton</tt>.
-Properti <tt>ClientSide</tt> berisi sub-properti, serperti <tt>RequestTimeOut</tt>, dan pengendali event javascript sisi-klien, seperti <tt>OnLoading</tt>, dipakai oleh sisi-klien saat membuat permitaan callback.
-Contoh berikut mendemonstrasikan menghidup matikan indikator "loading" saat sisi-klien
-membuat permintaan callback.
-</p>
-
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code3">
-&lt;com:TClientScript PradoScripts="effects" /&gt;
-<span id="callback_status">Loading...</span>
-
-&lt;com:TActiveButton
- Text="Click Me"
- OnCallback="button_callback"
- ActiveControl.CallbackParameter="value" &gt;
- &lt;prop:ClientSide
- OnLoading="Element.show('callback_status')"
- OnComplete="Element.hide('callback_status')" /&gt;
-&lt;/com:TActiveButton&gt;
-</com:TTextHighlighter>
-
-<p id="610418" class="block-content">Contoh ini mengambil librari javascript "effects" menggunakan komponen
-<a href="?page=Controls.ClientScript">TClientScript</a>.
-Nilai properti <tt>ClientSide.OnLoading</tt> berisi pernyataan javascript yang menggunakan librari "effects" untuk menampilkan tag span "Loading...". Hal yang mirip, nilai properti <tt>ClientSide.OnComplete</tt> berisi pernyataan javascript yang menyembunyikan tag span "Loading...".
-Lihat <a href="?page=ActiveControls.CallbackClientSide">TCallbackClientSide</a> untuk rincian lebih jelas pada detil properti sisi-klien.
-</p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/ActiveControls/id/ActiveCheckBox.page b/demos/quickstart/protected/pages/ActiveControls/id/ActiveCheckBox.page
deleted file mode 100755
index e1f11e99..00000000
--- a/demos/quickstart/protected/pages/ActiveControls/id/ActiveCheckBox.page
+++ /dev/null
@@ -1,21 +0,0 @@
-<com:TContent ID="body">
-<h1 id="124029">TActiveCheckBox</h1>
-<com:DocLink ClassPath="System.Web.UI.ActiveControls.TActiveCheckBox" />
-
-<p id="620419" class="block-content">
-<tt>TActiveCheckBox</tt> adalah kontrol aktif selain
-<a href="?page=Controls.CheckBox">TCheckbox</a>. Properti <tt>AutoPostBack</tt>
- dari <tt>TActiveCheckBox</tt> standarnya disetel true.
- Selanjutnya, saat kotak centang diklik, event <tt>OnCallback</tt> muncul setelah event <tt>OnCheckedChanged</tt>.
- </p>
-
- <p id="620420" class="block-content">
- Properti <tt>Text</tt> dan <tt>Checked</tt> dari <tt>TActiveCheckBox</tt>
- bisa diubah selama permintaan callback. Properti <tt>TextAlign</tt> dari
- <tt>TActiveCheckBox</tt> <strong>tidak bisa</strong> diubah saat permintaan
- callback.
-</p>
-
-<com:RunBar PagePath="ActiveControls.Samples.TActiveCheckBox.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/ActiveControls/id/ActiveCustomValidator.page b/demos/quickstart/protected/pages/ActiveControls/id/ActiveCustomValidator.page
deleted file mode 100755
index cc089757..00000000
--- a/demos/quickstart/protected/pages/ActiveControls/id/ActiveCustomValidator.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<com:TContent ID="body">
-<h1 id="126030">TActiveCustomValidator</h1>
-<com:DocLink ClassPath="System.Web.UI.ActiveControls.TActiveCustomValidator" />
-
-<p id="630421" class="block-content">Melakukan validasi kustom hanya menggunakan event validasi <tt>OnServerValidate</tt>
- sisi-server. Sisi-klien menggunakan callback untuk memunculkan event
- <tt>onServerValidate</tt>. Properti <tt>ClientValidationFunction</tt> dimatikan
- dan akan mengeluarkan eksepsi jika mencoba untuk menyetel properti ini.
-</p>
-
-<p id="630422" class="block-content"> Harap berhati-hati <tt>onServerValidate</tt> dapat
-dimunculkan saat kontrol yang divalidasi pada sisi klien mengubah nilai,
-yaitu validasi server mungkin dipanggil berkali-kali.
-
-Setelah callback atau postback, {@link onServerValidate onServerValidate}
-dimunculkan hanya sekali. Properti <tt>IsCallback</tt> dari kelas <tt>TPage</tt>
-menjadi true ketika validasi dibuat selama permintaan callback.
-</p>
-
-<com:RunBar PagePath="ActiveControls.Samples.TActiveCustomValidator.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/ActiveControls/id/ActiveHyperLink.page b/demos/quickstart/protected/pages/ActiveControls/id/ActiveHyperLink.page
deleted file mode 100755
index 5fe3f84a..00000000
--- a/demos/quickstart/protected/pages/ActiveControls/id/ActiveHyperLink.page
+++ /dev/null
@@ -1,14 +0,0 @@
-<com:TContent ID="body">
-<h1 id="ActiveHyperLink">TActiveHyperLink</h1>
-<com:DocLink ClassPath="System.Web.UI.ActiveControls.TActiveHyperLink" />
-
-<p>
-Kontrol aktif selain komponen <a href="?page=Controls.HyperLink">THyperLink</a>.
-Saat permintaan callback, perubahan terhadap properti <tt>Text</tt>, <tt>ImageUrl</tt>,
-<tt>NavigateUrl</tt> dan <tt>Target</tt> pada sisi server juga akan
-mengubah atribut serta konten terkait di sisi-klien.
-</p>
-
-<com:RunBar PagePath="ActiveControls.Samples.TActiveHyperLink.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/ActiveControls/id/ActivePager.page b/demos/quickstart/protected/pages/ActiveControls/id/ActivePager.page
deleted file mode 100755
index f61701f2..00000000
--- a/demos/quickstart/protected/pages/ActiveControls/id/ActivePager.page
+++ /dev/null
@@ -1,40 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="3901">TActivePager</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TPager" />
-
-<p id="450300" class="block-content">
-<tt>TActivePager</tt> membuat halaman yang menyediakan UI untuk pengguna-akhir secara interaktif menetapkan halaman data mana yang di render dalam kontrol turunan <tt>TDataBoundControl</tt>, seperti <tt>TDataList</tt>, <tt>TRepeater</tt>, <tt>TCheckBoxList</tt>, dll.
-Target kontrol data-bound ditetapkan dengan properti <tt>ControlToPaginate</tt>, yang harus berupa path ID dari kontrol target yang diambil dari kontainer penamaan halaman. Target-databound harus berada di dalam <tt>TActivePanel</tt> agar dapat di render ulang selama callback
-</p>
-
-<p id="450301" class="block-content">
-Catatan, kontrol target data-bound harus disetel true pada <tt>AllowPaging</tt>. Sebaliknya halaman tidak akan terlihat. Juga, dalam hal ketika hanya satu halaman data yang tersedia, halaman juga tidak akan terlihat.
-</p>
-
-<p id="450302" class="block-content">
-<tt>TActivePager</tt> dapat menampilkan salah satu dari tiga jenis antarmuka, ditetapkan melalui properti <tt>Mode</tt>:
-</p>
-<ul id="u1" class="block-content">
-<li><tt>NextPrev</tt> - tombol halaman berikutnya dan sebelumnya yang dihasilkan pada setiap halaman.</li>
-<li><tt>Numeric</tt> - daftar tombol indeks halaman yang dihasilkan.</li>
-<li><tt>DropDownList</tt> - daftar dropdown indeks halaman yang dihasilkan.</li>
-</ul>
-<p id="450303" class="block-content">
-Antar muka pengguna ini selanjutnya dikustomisasi dengan mengkonfigurasi properti berikut
-</p>
-<ul id="u2" class="block-content">
-<li><tt>NextPageText</tt> dan <tt>PrevPageText</tt> - label tombol halaman berikutnya/sebelumnya. Properti ini dipakai saat <tt>Mode</tt> halaman adalah <tt>NextPrev</tt> atau <tt>Numeric</tt>.</li>
-<li><tt>FirstPageText</tt> dan <tt>LastPageText</tt> - label tombol halaman pertama/terakhir. Jika kosong, tombol terkait tidak akan ditampilkan. Properti ini dipakai saat <tt>Mode</tt> halaman adalah <tt>NextPrev</tt> atau <tt>Numeric</tt>.</li>
-<li><tt>PageButtonCount</tt> - jumlah maksimum tombol indeks pada halaman. Properti ini dipakai saat <tt>Mode</tt> halaman adalah <tt>Numeric</tt>.</li>
-<li><tt>ButtonType</tt> - jenis tombol halaman, baik <tt>PushButton</tt> yang berarti tombol submisi formulir normal, ataupun <tt>LinkButton</tt> yang berarti tombol hiperlink.</li>
-</ul>
-
-<p id="450304" class="block-content">
-<tt>TActivePager</tt> memunculkan event <tt>OnPageIndexChanged</tt> ketika pengguna-akhir berinteraksi dengannya dan menetapkan halaman baru (misalnya dengan mengklik pada tombol halaman berikutnya yang akan membawa ke halaman berikutnya.) Para pengembang dapat menulis pengendali untuk merespon indeks halaman baru ini dan mendapatkan indeks halaman baru yang diinginkan dari properti parameter event <tt>NewPageIndex</tt>. Menggunakan indeks halaman baru ini, seseorang dapat memask halaman baru data ke kontrol data-bound terkait.
-Sebagai tambahan, <tt>TActivePager</tt> memunculkan <tt>OnCallback</tt> setelah <tt>OnPageIndexChanged</tt>.
-</p>
-
-<com:RunBar PagePath="ActiveControls.Samples.TActivePager.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/ActiveControls/id/Home.page b/demos/quickstart/protected/pages/ActiveControls/id/Home.page
deleted file mode 100755
index af449d7a..00000000
--- a/demos/quickstart/protected/pages/ActiveControls/id/Home.page
+++ /dev/null
@@ -1,347 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="128031">Kontrol Aktif (kontrol AJAX-dihidupkan)</h1>
-<p id="640423" class="block-content">Lihat <a href="?page=ActiveControls.Introduction">Pengenalan</a>
-untuk tinjauan cepat terhadap konsep di belakang kontrol aktif (kontrol AJAX-dihidupkan).
-Banyak kontrol aktif memiliki properti
-<a href="?page=ActiveControls.BaseActiveControl">ActiveControl</a> dan
-sub-properti <a href="?page=ActiveControls.CallbackClientSide">ClientSide</a>
-yang menyediakan banyak properti untuk mengkustomisasi kontrol. Properti
-<a href="?page=TCallbackClientScript">CallbackClient</a> dari kelas
-<tt>TPage</tt> menyediakan metode untuk memutakhirkan dan mengubah konten sisi-klien
-saat permintaan callback. Kontrol aktif bergantung pada koleksi
-<a href="?page=ActiveControl.ClientSideJavascript">kelas javascript</a>.
-</p>
-
-<p id="640424" class="block-content">Untuk demo cepat atas kontrol aktif, coba kontrol <a href="?page=ActiveControls.ActiveButton">
-TActiveButton</a>. Lihat juga bagian akhir dari tutorial <a href="?page=Tutorial.CurrencyConverter">Pengubah Kurs</a> untuk contoh lebih mendalam.
-</p>
-
-<p id="640425" class="block-content">* tutorial untuk kontrol ini belum lengkap.</p>
-
-<h2 id="128032">Kontrol Aktif Standar</h2>
-<ul id="u1" class="block-content">
- <li>
- <a href="?page=ActiveControls.ActiveButton">TActiveButton</a>
- mewakili tombol klik pada halaman Web. Ia dapat dipakai untuk memicu permintaan callback.
- </li>
-
- <li>
- <a href="?page=ActiveControls.ActiveCheckBox">TActiveCheckBox</a>
- mewakili kotak centang pada halaman Web. Ia dapat dipakai untuk mengoleksi input dua-kondisi pengguna
- serta memicu permintaan callback.
- </li>
-
- <li>
- <a href="?page=ActiveControls.ActiveCustomValidator">TActiveCustomValidator</a>
- memvalidasi kontrol tertentu menggunakan permintaan callback.
- </li>
-
- <li>
- <a href="?page=ActiveControls.ActiveHyperLink">TActiveHyperLink</a>
- mewakili hiperlink pada halaman Web.
- </li>
-
- <li>
- <a href="?page=ActiveControls.ActiveImage">TActiveImage</a>
- mewakili gambar pada halaman Web.
- </li>
-
- <li>
- <a href="?page=ActiveControls.ActiveImageButton">TActiveImageButton</a>
- mewakili tombol klik yang mempunyai gambar sebagai latar belakangnya.
- Ia bisa dipakai untuk memicu permintaan callback.
- </li>
-
- <li>
- <a href="?page=ActiveControls.ActiveLabel">TActiveLabel</a>
- mewakili label pada halam Web.
- Label dapat dikustomisasi melalui berbagai atribut CSS.
- </li>
-
- <li>
- <a href="?page=ActiveControls.ActiveLinkButton">TActiveLinkButton</a>
- mewakili hiperlink yang bisa melalukan permintaan callback.
- </li>
-
- <li>
- <a href="?page=ActiveControls.ActivePanel">TActivePanel</a>
- mewakili penampung untuk kontrol lain pada halaman Web. Dalam HTML,
- ia ditampilkan sebagai elemen &lt;div&gt;. Kontrol pabel dapat
- diganti selama permintaan callback.
- </li>
-
- <li>
- <a href="?page=ActiveControls.ActiveRadioButton">TActiveRadioButton</a>
- mewakili tombol radio pada halaman Web.
- Dipakai terutama dalam sebuah grup di mana pengguna bisa memilih. Ini
- dapat digunakan untuk melakukan permintaan callback.
- </li>
-
- <li>
- <a href="?page=ActiveControls.ActiveTextBox">TActiveTextBox</a>
- mewakili field input teks pada halaman Web.
- Ia bisa mengoleksi satu-baris, multi-baris atau input teks sandi dari pengguna.
- Ia bisa dipakai untuk melakukan permintaan callback.
- </li>
-
- <li>
- <a href="?page=ActiveControls.CallbackOptions">TCallbackOptions</a>
- opsi callback seperti pengendali event sisi-klien <tt>OnLoading</tt>.
- </li>
-
-</ul>
-
-<h2 id="128033">Kontrol List Aktif</h2>
-<ul id="u2" class="block-content">
- <li>
- <a href="?page=ActiveControls.ActiveCheckBoxList">TActiveCheckBoxList</a>
- menampilkan daftar kotak centang pada halaman Web dan setiap kotak centang
- dapat memicu permintaan callback.
- </li>
-
- <li>
- <a href="?page=ActiveControls.ActiveDropDownList">TActiveDropDownList</a>
- menampilkan kotak daftar dropdown yang membolehkan para pengguna untuk memilih
- satu opsi dari beberapa yang telah ditetapkan. Dapat dipakai untuk melakukan
- permintaan callback.
- </li>
-
- <li>
- <a href="?page=ActiveControls.ActiveListBox">TActiveListBox</a>
- menampilkan kotak daftar yang membolehkan satu pilihan atau multipel. Dapat
- dipakai untuk melakukan permintaan callback.
- </li>
-
- <li>
- <a href="?page=ActiveControls.ActiveRadioButtonList">TActiveRadioButtonList</a>
- mirip dengan TActiveCheckBoxList dalam setiap aspek kecuali bahwa setiap
- TActiveRadioButtonList menampilkan sebuah grup tombol radio. Setiap tombol radio
- dapat melakukan permintaan callback.
- </li>
-</ul>
-
-<h2 id="128034">Kontrol Aktif Diperluas</h2>
-
-
-<ul id="u3" class="block-content">
- <li>
- <a href="?page=ActiveControls.AutoComplete">TAutoComplete</a>
- memperluas TActiveTextBox untuk menawarkan saran pelengkapan teks.
- </li>
-
- <li>
- <a href="?page=ActiveControls.Callback">TCallback</a>
- kontrol generik yang dapat melakukan permintaan callback.
- </li>
-
- <li>
- <a href="?page=ActiveControls.EventTriggeredCallback">TEventTriggeredCallback</a>
- memicu permintaan callback berdasarkan event DOM HTML.
- </li>
-
- <li>
- <a href="?page=ActiveControls.InPlaceTextBox">TInPlaceTextBox</a>
- mewakili label yang dapat diedit dengen mengklik.
- </li>
-
- <li>
- * <a href="?page=ActiveControls.TimeTriggeredCallback">TTimeTriggeredCallback</a>
- memicu permintaan callback berdasarkan waktu yang belalu.
- </li>
-
- <li>
- * <a href="?page=ActiveControls.ValueTriggeredCallback">TValueTriggeredCallback</a>
- mengawasi (menggunakan timer) atribut elemen HTML dan memicu permintaan callback
- ketika nilai atribut berubah.
- </li>
-
-</ul>
-
-<h2 id="128035">Kemampuan Kontrol Aktif</h2>
-<p id="640426" class="block-content">Tabel berikut memperlihatkan Kontrol Aktif yang dapat memicu event callback dan menentukan apakah kontrol akan memunculkan event PostBack atau tidak jika Javascript dimatikan pada browser sisi-klien.</p>
-<!-- tabular: align=|l|l|l|, width=(0.35 0.25 0.25) -->
-<table class="tabular">
- <tr>
- <th>Nama Kontrol</th>
- <th>Memicu Callback</th>
- <th>Kembali ke PostBack</th>
- </tr>
- <tr><td>
- <a href="?page=ActiveControls.ActiveButton">TActiveButton</a>
- </td>
- <td>Ya</td>
- <td>Ya</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.ActiveCheckBox">TActiveCheckBox</a>
- </td>
- <td>Ya</td>
- <td>Ya</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.ActiveCustomValidator">TActiveCustomValidator</a>
- </td>
- <td>Ya</td>
- <td>Ya</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.ActiveHyperLink">TActiveHyperLink</a>
- </td>
- <td>Tidak</td><td>Ya</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.ActiveImage">TActiveImage</a>
- </td>
- <td>Tidak</td><td>Ya</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.ActiveImageButton">TActiveImageButton</a>
- </td>
- <td>Ya</td><td>Ya</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.ActiveLabel">TActiveLabel</a>
- </td>
- <td>Tidak</td><td>Ya</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.ActiveLinkButton">TActiveLinkButton</a>
- </td>
- <td>Ya</td><td>Tidak</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.ActivePanel">TActivePanel</a>
- </td>
- <td>Tidak</td><td>Ya</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.ActiveRadioButton">TActiveRadioButton</a>
- </td>
- <td>Ya</td><td>Ya</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.ActiveTextBox">TActiveTextBox</a>
- </td>
- <td>Ya</td><td>Ya</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.CallbackOptions">TCallbackOptions</a>
- </td>
- <td>Tidak</td><td>N/A</td>
- </tr>
-
-
- <tr><td>
- <a href="?page=ActiveControls.ActiveCheckBoxList">TActiveCheckBoxList</a>
- </td>
- <td>Ya</td><td>Ya</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.ActiveDropDownList">TActiveDropDownList</a>
- </td>
- <td>Ya</td><td>Ya</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.ActiveListBox">TActiveListBox</a>
- </td>
- <td>Ya</td><td>Ya</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.ActiveRadioButtonList">TActiveRadioButtonList</a>
- </td>
- <td>Ya</td><td>Ya</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.AutoComplete">TAutoComplete</a>
- </td>
- <td>Ya</td>
- <td>Tidak</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.Callback">TCallback</a>
- </td>
- <td>Ya</td><td>Tidak</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.EventTriggeredCallback">TEventTriggeredCallback</a>
- </td>
- <td>Ya</td><td>Tidak</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.InPlaceTextBox">TInPlaceTextBox</a>
- </td>
- <td>Ya</td><td>Tidak</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.TimeTriggeredCallback">TTimeTriggeredCallback</a>
- </td>
- <td>Ya</td><td>Tidak</td>
- </tr>
-
- <tr><td>
- <a href="?page=ActiveControls.ValueTriggeredCallback">TValueTriggeredCallback</a>
- </td>
- <td>Ya</td><td>Tidak</td>
- </tr>
-</table>
-
-<h2 id="128036">Kelas Infrastruktur Kontrol Aktif</h2>
-<p id="640427" class="block-content">Kelas berikut menyediakan kelas infrastruktur dasar yang diperlukan guna merealisasikan kontrol aktif.</p>
-<ul id="u4" class="block-content">
- <li>
- <a href="?page=ActiveControls.ActiveControlAdapter">TActiveControlAdapter</a>
- melacak nilai viewstate dari kontrol dan memutakhirkan perbedaan pada atribut elemen HTML sisi-klien.
- </li>
-
- <li>
- <a href="?page=ActiveControls.ActiveListControlAdapter">TActiveListControlAdapter</a>
- membolehkan kontrol list yang diadaptasi untuk mengubah pilihan pada sisi-klien selama permintaan callback.
- </li>
-
- <li>
- <a href="?page=ActiveControls.ActivePageAdapter">TActivePageAdapter</a>
- memroses masa-hidup halaman untuk permintaan callback.
- </li>
-
- <li>
- <a href="?page=ActiveControls.BaseActiveControl">TBaseActiveControl</a>
- metode dan opsi kontrol aktif umum.
- </li>
-
- <li>
- <a href="?page=ActiveControls.CallbackClientScript">TCallbackClientScript</a>
- metode untuk memanipulasi elemen HTML sisi-klien, juga termasuk metode untuk memanggil Efek javascript pada elemen HTML.
- </li>
-
- <li>
- <a href="?page=ActiveControls.CallbackClientSide">TCallbackClientSide</a>
- opsi permintaan callback sisi-klien, dan pengendali event sisi-klien.
- </li>
-
- <li>
- <a href="?page=ActiveControls.CallbackResponseAdapter">TCallbackResponseAdapter</a>
- respon HTTP untuk permintaan callback.
- </li>
-
-</ul>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/ActiveControls/id/TActiveButtonClass.png b/demos/quickstart/protected/pages/ActiveControls/id/TActiveButtonClass.png
deleted file mode 100755
index 632d9a45..00000000
--- a/demos/quickstart/protected/pages/ActiveControls/id/TActiveButtonClass.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/ActiveControls/id/postback-callback.png b/demos/quickstart/protected/pages/ActiveControls/id/postback-callback.png
deleted file mode 100755
index 031dcde3..00000000
--- a/demos/quickstart/protected/pages/ActiveControls/id/postback-callback.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Advanced/Samples/I18N/id/Home.page b/demos/quickstart/protected/pages/Advanced/Samples/I18N/id/Home.page
deleted file mode 100755
index a490abce..00000000
--- a/demos/quickstart/protected/pages/Advanced/Samples/I18N/id/Home.page
+++ /dev/null
@@ -1,161 +0,0 @@
-<%@ Title="Internasionlisasi dalam PRADO"
- Page.Application.Globalization.TranslationCatalogue="index" %>
-<com:TContent ID="body">
-
-<h1>Internasionlisasi dalam PRADO</h1>
-<p>Demo ini memperlihatkan komponen dasar yang tersedia dalam PRADO untuk memproses Internasionalisasi dan Lokalisasi aplikasi web. Halam ini memanfaatkan template siap multipel lokal (atau kultur) untuk memperlihatkan halaman terlokalisasi yang tersedia. Untuk melihat versi dilokalisasi yang berbeda, silahkan ganti setelan bahasa dalam browser Anda.</p>
-
-<p>
-Saat ini kultur Anda adalah <%= $this->Page->CurrentCulture %>.
-<div class="links">
- Versi lokalisasi tersedia:
- <com:LanguageList />
-</div>
-</p>
-
-<p>
- Sebagai tambahan ke template siap kultur. Teks dapat dilokalisasi menggunakan banyak sumber terjemanan yang berbeda. PRADO menyediakan wadah gettext, XML, SQLite, dan MySQL untuk menyimpan terjemahan pesan. Contoh dalam link berikut mendemonstrasikan bagaimana teks dapat dilokalisasi menggunakan komponen TTranslate.
-</p>
-<hr />
-<h2>Pengenalan</h2>
-<p> Mengembangkan dan memelihara situs multi-bahasa adalah masalah umum bagi para pengembang web. </p>
-<dl>
-<dt><strong>Internasionalisasi (I18N)</strong></dt>
-<dd>Proses pengembangan sebuah produk dalam cara yang bekerja dengan data dalam bahasa berbeda dan dapat diadaptasi ke berbagai target pasar tanpa melakukan perubahan. </dd>
-<dt><strong>Lokalisasi (L10N)</strong></dt>
-<dd>Proses selanjutnya dari menterjemahkan dan mengadaptasi sebuah produk untuk pasar konvensi kultural yang tersedia.</dd>
-</dl>
-<p>Fitur berikut didukung oleh PRADO: </p>
-<ul id="u1" class="block-content">
- <li>Terjemahan teks</li>
- <li>Terjemahan atribut</li>
- <li>Substitusi parameter (dengan terjemahan bila diperlukan) </li>
- <li>Format tanggal, angka dan kurs </li>
-</ul>
-<h2>Contoh</h2>
-<h3>Tanggal: pola lengkap, kultur en_GB</h3>
-<h4>Contoh:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TDateFormat ID="Time1" Pattern="full" Culture="en_GB"/&gt;
-</com:TTextHighlighter>
-<h4>Hasil:</h4>
-<com:TDateFormat ID="Time1" Pattern="full" Culture="en_GB"/> <br />
-<hr />
-
-<h3>Tanggal: pola pendek</h3>
-<h4>Contoh:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TDateFormat ID="Time2" Pattern="short" /&gt;
-</com:TTextHighlighter>
-
-<h4>Hasil:</h4>
-<com:TDateFormat ID="Time2" Pattern="short" /> <br />
-<hr />
-
-<h3>Pola standar tanggal dari <%= $this->Page->CurrentCulture %> </h3>
-<h4>Contoh:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TDateFormat ID="Time3" Value="2004/12/06" /&gt;
-</com:TTextHighlighter>
-
-<h4>Hasil:</h4>
-<com:TDateFormat ID="Time3" Value="2004/12/06" /> <br />
-<hr />
-
-<h3>Format standar kurs</h3>
-<h4>Contoh:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TNumberFormat Type="currency" Value="12.4" /&gt;
-</com:TTextHighlighter>
-
-<h4>Hasil:</h4>
-<com:TNumberFormat Type="currency" Value="12.4" /> <br />
-<hr />
-<h3>Currency, de_DE culture with Euro</h3>
-<h4>Contoh:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TNumberFormat ID="Number2" Type="currency" Culture="de_DE" Currency="EUR"/&gt;
-</com:TTextHighlighter>
-
-<h4>Hasil:</h4>
-<com:TNumberFormat ID="Number2" Type="currency" Culture="de_DE" Currency="EUR"/> <br />
-
-<hr />
-
-<h3>Kurs, format US dengan Euro</h3>
-<h4>Contoh:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TNumberFormat Type="currency" Culture="en_US" Currency="EUR" Value="100" /&gt;
-</com:TTextHighlighter>
-
-<h4>Hasil</h4>
-<com:TNumberFormat Type="currency" Culture="en_US" Currency="EUR" Value="100" /> <br />
-<hr />
-
-<h3>Contoh terjemahan</h3>
-<h4>ContohExample:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TTranslate&gt;Hello&lt;/com:TTranslate&gt;
-</com:TTextHighlighter>
-
-<h4>Hasil:</h4>
-<com:TTranslate>Hello</com:TTranslate> <br />
-<h4>Contoh:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TTranslate Text="Goodbye" /&gt;
-</com:TTextHighlighter>
-
-<h4>Hasil:</h4>
-<com:TTranslate Text="Goodbye" /> <br />
-
-<hr />
-<h3>Menggunakan tag lokalisasi</h3>
-<h4>Contoh:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;%[ Goodbye ]%&gt;
-</com:TTextHighlighter>
-
-<h4>Hasil:</h4>
-<%[ Goodbye ]%>
-<br />
-
-
-<hr />
-<h3>Menterjemahkan menggunakan katalog berbeda </h3>
-<h4>Contoh:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TTranslate Text="Goodbye" Catalogue="tests" /&gt;
-</com:TTextHighlighter>
-
-<h4>Hasil:</h4>
-<com:TTranslate Text="Goodbye" Catalogue="tests" />
-<br />
-
-
-<hr />
-<h3>Translasi dengan substitusi parameter</h3>
-<h4>Contoh:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TTranslate&gt;
- {greeting} {name}!, The unix-time is "{time}".
- &lt;com:TTranslateParameter Key="name"&gt;
- &lt;com:TTranslate Catalogue="tests" Text="World" /&gt;
- &lt;/com:TTranslateParameter&gt;
- &lt;com:TTranslateParameter Key="greeting" Value="Hello" /&gt;
- &lt;com:TTranslateParameter Key="time" Value="&lt;%= Time() %&gt;" /&gt;
-&lt;/com:TTranslate&gt;
-</com:TTextHighlighter>
-
-
-<h4>Hasil:</h4>
-
-<com:TTranslate>
- {greeting} {name}!, The unix-time is "{time}".
- <com:TTranslateParameter Key="name">
- <com:TTranslate Catalogue="tests" Text="World" />
- </com:TTranslateParameter>
- <com:TTranslateParameter Key="greeting" Value="Hello" />
- <com:TTranslateParameter Key="time" Value="<%= Time() %>" />
-</com:TTranslate>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/Samples/I18N/zh_TW/Home.page b/demos/quickstart/protected/pages/Advanced/Samples/I18N/zh_TW/Home.page
deleted file mode 100755
index 7629e7bb..00000000
--- a/demos/quickstart/protected/pages/Advanced/Samples/I18N/zh_TW/Home.page
+++ /dev/null
@@ -1,155 +0,0 @@
-<%@ Title="PRADO 國際化"
- Page.Application.Globalization.TranslationCatalogue="index" %>
-<com:TContent ID="body">
-<h1>PRADO 國際化</h1>
- <p>本演示將介紹如何用PRADO中的一些部件對您的Web應用進行國際化和本地化。
- 本网頁的顯示是根据您的當地設置從多個不同語言的模板中選擇進行的。
- 如果你想查看其它語言版本,請更改瀏覽器的語言設置。</p>
-
- <p>
- 您目前的語言設置是
- <%= $this->Page->CurrentCulture %>.
- <div class="links">
- 可查看的語言版本包括:
- <com:LanguageList />
- </div>
- </p>
-
- <p>
- 除了能自動偵知語言設置的模板外,文本也可以使用不同的翻譯源進行本地化。
- PRADO提供了gettext,XML,SQLite以及MySQL等手段用于存放消息的各种翻譯。
- 下面連接所指向的例子展示了如何使用TTranslate部件對文本進行本地化。
- <hr />
- <h2>簡介</h2>
- <p>開發和維護多語言的站點對Web開發者而言是一個很常見的問題。</p>
- <dl>
- <dt><strong>國際化(I18N)</strong></dt>
- <dd>產品開發的一個步驟,它使得產品能接受不同語言的數据,并且在沒有更改設計
- 的情況下使產品能用于不同的市場。</dd>
- <dt><strong>L本地化(L10N)</strong></dt>
- <dd>國際化的一個細節步驟,它針對某個特定的市場文化對產品進行翻譯和調整。</dd>
- </dl>
- <p>PRADO支持以下功能:</p>
- <ul id="u1" class="block-content">
- <li>文本翻譯</li>
- <li>屬性翻譯(尚未完成)</li>
- <li>參數替換(如需要可進行翻譯)</li>
- <li>日期,數字和貨幣的格式化</li>
- </ul>
- <h2>例子</h2>
- <h3>日期:完整格式,en_GB語言設置</h3>
- <h4>例: </h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TDateFormat ID="Time1" Pattern="full" Culture="en_GB"/&gt;
-</com:TTextHighlighter>
- <h4>結果: </h4>
- <com:TDateFormat ID="Time1" Pattern="full" Culture="en_GB"/> <br />
- <hr />
-
- <h3>日期:短格式</h3>
- <h4>例:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TDateFormat ID="Time2" Pattern="short" /&gt;
-</com:TTextHighlighter>
- <h4>結果:</h4>
- <com:TDateFormat ID="Time2" Pattern="short" /> <br />
- <hr />
-
- <h3>日期:<%= $this->Page->CurrentCulture %>的缺省模式</h3>
- <h4>例:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TDateFormat ID="Time3" Value="2004/12/06" /&gt;
-</com:TTextHighlighter>
- <h4>結果:</h4>
-<com:TDateFormat ID="Time3" Value="2004/12/06" /> <br />
- <hr />
-
- <h3>貨幣,缺省格式</h3>
- <h4>例:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TNumberFormat Type="currency" Value="12.4" /&gt;
-</com:TTextHighlighter>
- <h4>結果:</h4>
-<com:TNumberFormat Type="currency" Value="12.4" /> <br />
- <hr />
- <h3>貨幣,de_DE語言以及歐幣</h3>
- <h4>例:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TNumberFormat ID="Number2" Type="currency" Culture="de_DE" Currency="EUR"/&gt;
-</com:TTextHighlighter>
- <h4>結果:</h4>
- <com:TNumberFormat ID="Number2" Type="currency" Culture="de_DE" Currency="EUR"/> <br />
-
- <hr />
-
- <h3>貨幣, 美國格式以及歐幣</h3>
- <h4>例:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TNumberFormat Type="currency" Culture="en_US" Currency="EUR" Value="100" /&gt;
-</com:TTextHighlighter>
- <h4>結果:</h4>
- <com:TNumberFormat Type="currency" Culture="en_US" Currency="EUR" Value="100" /> <br />
- <hr />
-
- <h3>翻譯實例</h3>
- <h4>例:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TTranslate&gt;Hello&lt;/com:TTranslate&gt;
-</com:TTextHighlighter>
- <h4>結果:</h4>
- <com:TTranslate>Hello</com:TTranslate> <br />
- <h4>例:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TTranslate Text="Goodbye" /&gt;
-</com:TTextHighlighter>
- <h4>結果:</h4>
- <com:TTranslate Text="Goodbye" /> <br />
-
-<hr />
-<h3>Using localization tag</h3>
-<h4>Example:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;%[ Goodbye ]%&gt;
-</com:TTextHighlighter>
-
-<h4>Result:</h4>
-<%[ Goodbye ]%>
-<br />
-
- <hr />
- <h3>用不同目錄進行翻譯</h3>
- <h4>例:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TTranslate Text="Goodbye" Catalogue="tests" /&gt;
-</com:TTextHighlighter>
- <h4>結果:</h4>
-<com:TTranslate Text="Goodbye" Catalogue="tests" />
- <br />
-
-
- <hr />
- <h3>用參數替換進行翻譯</h3>
- <h4>例:</h4>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TTranslate&gt;
- {greeting} {name}!, The unix-time is "{time}".
- &lt;com:TTranslateParameter Key="name"&gt;
- &lt;com:TTranslate Catalogue="tests" Text="World" /&gt;
- &lt;/com:TTranslateParameter&gt;
- &lt;com:TTranslateParameter Key="greeting" Value="Hello" /&gt;
- &lt;com:TTranslateParameter Key="time" Value="&lt;%= Time() %&gt;" /&gt;
-&lt;/com:TTranslate&gt;
-</com:TTextHighlighter>
-
- <h4>結果:</h4>
-
-<com:TTranslate>
- {greeting} {name}!, The unix-time is "{time}".
- <com:TTranslateParameter Key="name">
- <com:TTranslate Catalogue="tests" Text="World" />
- </com:TTranslateParameter>
- <com:TTranslateParameter Key="greeting" Value="Hello" />
- <com:TTranslateParameter Key="time" Value="<%= Time() %>" />
-</com:TTranslate>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/Scripts1.page b/demos/quickstart/protected/pages/Advanced/Scripts1.page
deleted file mode 100755
index 96ab7760..00000000
--- a/demos/quickstart/protected/pages/Advanced/Scripts1.page
+++ /dev/null
@@ -1,96 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="6601">Developer Notes for prototype.js</h1>
-This guide is based on the <a href="http://www.sergiopereira.com/articles/prototype.js.html">
-Developer Notes for prototype.js</a> by Sergio Pereira.
-
-<h2 id="6603">What is that?</h2>
-<p id="830726" class="block-content">
-In case you haven't already used it, <a href="http://prototype.conio.net">prototype.js</a> is a
- JavaScript library written by <a href="http://www.conio.net">Sam Stephenson</a>.
- This amazingly well thought and well written piece of <b>standards-compliant</b> code takes a lot of
- the burden associated with creating rich, highly interactive web pages that characterize the Web 2.0 off your back.
-</p>
-
-<p id="830727" class="block-content">
- If you tried to use this library recently, you probably noticed that documentation is not one
- of its strongest points. As many other developers before me, I got my head around prototype.js by
- reading the source code and experimenting with it. I thought it would be nice to take notes while
- I learned and share with everybody else.
-</p>
-<p id="830728" class="block-content">
- As you read the examples and the reference, developers familiar with the Ruby
- programming language will notice an intentional similarity between Ruby's
- built-in classes and many of the extensions implemented by this library.
-</p>
-
-
-<h2 id="6604">Using the <tt>$()</tt> function</h2>
-<p id="830729" class="block-content">
- The <tt>$()</tt> function is a handy shortcut to the all-too-frequent <tt>document.getElementById()</tt> function
- of the DOM. Like the DOM function, this one returns the element that has the id passed as an argument.
-</p>
-
-<p id="830730" class="block-content">
- Unlike the DOM function, though, this one goes further. You can pass more than one id and
- <tt>$()</tt> will return an <tt>Array</tt> object with
- all the requested elements. The example below should illustrate this.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_830252">
-&lt;com:TClientScript UsingClientScripts="prado" /&gt;
-<div id="myDiv">
- <p id="830731" class="block-content">This is a paragraph</p>
-</div>
-
-<div id="myOtherDiv">
- <p id="830732" class="block-content">This is another paragraph</p>
-</div>
-
-<input type="button" value=Test1 onclick="test1();" />
-<input type="button" value=Test2 onclick="test2();" />
-
-<script type="text/javascript">
-/*<![CDATA[*/
-function test1()
-{
- var d = $('myDiv');
- alert(d.innerHTML);
-}
-
-function test2()
-{
- var divs = $('myDiv','myOtherDiv');
- for(i=0; i<divs.length; i++)
- {
- alert(divs[i].innerHTML);
- }
-}
-/*]]>*/
-</script>
-</com:TTextHighlighter>
-<p id="830733" class="block-content">
- Another nice thing about this function is that you can pass either the <tt>id</tt> string or the element object itself,
- which makes this function very useful when creating other functions that can also take either form of argument.
-</p>
-
-<h2 id="6605">Using the <tt>$F()</tt> function</h2>
-
-<p id="830734" class="block-content">
- The <tt>$F()</tt> function is a another welcome shortcut. It returns the value of any field input control,
- like text boxes or drop-down lists. The function can take as argument either the element <tt>id</tt> or the element object itself.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_830253">
-<input type="text" id="userName" value="Joe Doe" />
-<input type="button" value=Test3 onclick="test3();" />
-
-<script type="text/javascript">
-/*<![CDATA[*/
-function test3()
-{
- alert($F('userName'));
-}
-/*]]>*/
-</script>
-</com:TTextHighlighter>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/Scripts2.page b/demos/quickstart/protected/pages/Advanced/Scripts2.page
deleted file mode 100755
index 5d88b065..00000000
--- a/demos/quickstart/protected/pages/Advanced/Scripts2.page
+++ /dev/null
@@ -1,253 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="6701">DOM Events and Javascript</h1>
-
-<h2 id="6702">Basic event handling</h2>
-
-<p id="840735" class="block-content">The syntax for working with events looks like the code below.</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840254">
-Event.observe(element, name, observer, [useCapture]);
-</com:TTextHighlighter>
-
-<p id="840736" class="block-content">Assuming for a moment that we want to observe when a link was clicked,
-we could do the following:</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840255">
-// &lt;a id="clicker" href="http://foo.com"&gt;Click me&lt;/a&gt;
-Event.observe('clicker', 'click', function(event)
-{
- alert('clicked!');
-});
-</com:TTextHighlighter>
-
-<p id="840737" class="block-content">If we wanted to get the element that fired the event, we'd do this:</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840256">
-Event.observe('clicker', 'click', function(event)
-{
- alert(Event.element(event));
-});
-</com:TTextHighlighter>
-
-<h2 id="6703">Observing keystrokes</h2>
-
-<p id="840738" class="block-content">If we wanted to observe keystrokes for the entire document, we could do the following:</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840257">
-Event.observe(document, 'keypress', function(event)
-{
- if(Event.keyCode(event) == Event.KEY_TAB)
- alert('Tab Pressed');
-});
-</com:TTextHighlighter>
-
-<p id="840739" class="block-content">And lets say we wanted to keep track of what has been typed :</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840258">
-Event.observe('search', 'keypress', function(event)
-{
- Element.update('search-results', $F(Event.element(event)));
-});
-</com:TTextHighlighter>
-
-<p id="840740" class="block-content">Prototype defines properties inside the event object for some
-of the more common keys, so feel free to dig around in Prototype to
-see which ones those are.</p>
-
-<p id="840741" class="block-content">A final note on keypress events; If you'd like to detect a
-left click you can use <tt>Event.isLeftClick(event)</tt>.</p>
-
-<h2 id="6704">Getting the coordinates of the mouse pointer</h2>
-
-<p id="840742" class="block-content">Drag and drop, dynamic element resizing, games, and
-much more all require the ability to track the X and Y location of
-the mouse. Prototype makes this fairly simple. The code below tracks
-the X and Y position of the mouse and spits out those values into
-an input box named mouse.</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840259">
-Event.observe(document, 'mousemove', function(event)
-{
- $('mouse').value = "X: " + Event.pointerX(event) +
- "px Y: " + Event.pointerY(event) + "px";
-});
-</com:TTextHighlighter>
-
-<p id="840743" class="block-content">If we wanted to observe the mouse location when it was
-hovering over a certain element, we'd just change the document argument to
-the id or element that was relevant.</p>
-
-<h2 id="6705">Stopping Propagation</h2>
-
-<p id="840744" class="block-content"><tt>Event.stop(event)</tt> will stop the propagation of an event .</p>
-
-<h2 id="6706">Events, Binding, and Objects</h2>
-
-<p id="840745" class="block-content">Everything has been fairly straight forward so far, but things
-start getting a little trickier when you need to work with events in
-and object-oriented environment. You have to deal with binding and funky
-looking syntax that might take a moment to get your head around.</p>
-
-<p id="840746" class="block-content">Lets look at some code so you can get a better understanding of what I'm talking about.</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840260">
-EventDispenser = Class.create();
-EventDispenser.prototype =
-{
- initialize: function(list)
- {
- this.list = list;
-
- // Observe clicks on our list items
- $$(this.list + " li").each(function(item)
- {
- Event.observe(item, 'click', this.showTagName.bindEvent(this));
- }.bind(this));
-
- // Observe when a key on the keyboard is pressed.
- // In the observer, we check for
- // the tab key and alert a message if it is pressed.
- Event.observe(document, 'keypress', this.onKeyPress.bindEvent(this));
-
- // Observe our fake live search box. When a user types
- // something into the box, the observer will take that
- // value(-1) and update our search-results div with it.
- Event.observe('search', 'keypress', this.onSearch.bindEvent(this));
-
- Event.observe(document, 'mousemove', this.onMouseMove.bindEvent(this));
- },
-
- // Arbitrary functions to respond to events
- showTagName: function(event)
- {
- alert(Event.element(event).tagName);
- },
-
- onKeyPress: function(event)
- {
- var code = event.keyCode;
- if(code == Event.KEY_TAB)
- alert('Tab key was pressed');
- },
-
- onSearch: function(event)
- {
- Element.update('search-results', $F(Event.element(event)));
- },
-
- onMouseMove: function(event)
- {
- $('mouse').value = "X: " + Event.pointerX(event) +
- "px Y: " + Event.pointerY(event) + "px";
- }
-}
-</com:TTextHighlighter>
-<p id="840747" class="block-content">Whoa! What's going on here? Well, we've defined our a
-custom class <tt>EventDispenser</tt>. We're going to be using this class
-to setup events for our document. Most of this code is a
-rewrite of the code we looked at earlier except this time, we
-are working from inside an object.</p>
-
-<p id="840748" class="block-content">Looking at the <tt>initialize</tt> method, we can really see how
-things are different now. Take a look at the code below:</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840261">
-// Observe clicks on our list items
-$$(this.list + " li").each(function(item)
-{
- Event.observe(item, 'click', this.showTagName.bindEvent(this));
-}.bind(this));
-</com:TTextHighlighter>
-
-<p id="840749" class="block-content">We've got iterators, binding and all sorts of stuff going on.
-Lets break down what this chunk of code is doing.</p>
-
-<p id="840750" class="block-content">First we are hunting for a collection of elements based on
-it's CSS selector. This uses the Prototype selector function <tt>$$()</tt>.
-After we've found the list items we are dealing with we send
-those into an each iteration where we will add our observers.</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840262">
-Event.observe(item, 'click', this.showTagName.bindEvent(this));
-</com:TTextHighlighter>
-
-<p id="840751" class="block-content">Now looking at the code above, you'll notice the <tt>bindEvent</tt> function.
-This takes the method before it <tt>showTagName</tt> and treats it as the
-method that will be triggered when, in this case,
-someone clicks one of our list items.</p>
-
-<p id="840752" class="block-content">You'll also notice we pass this as an argument to the <tt>bindEvent</tt> function.
-This simply allows us to reference the object in context <tt>EventDispenser</tt>
-inside our function <tt>showTagName(event)</tt>. If the <tt>showTagName</tt> function
-requires additional parameters, you can attach them to the later parameters of <tt>bindEvent</tt>. For example</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840263">
-this.showTagName.bindEvent(this, param1, param2);
-
-//where the showTagName function is defined as
-showTime : function (event, param1, param2) { ... }
-</com:TTextHighlighter>
-
-<p id="840753" class="block-content">Moving on, you'll see <tt>bind(this)</tt> attached to our iterator function.
-This really has nothing to do with events, it is only here to allow me to
-use <tt>this</tt> inside the iterator. If we did not use <tt>bind(this)</tt>, I could not
-reference the method <tt>showTagName</tt> inside the iterator.</p>
-
-<p id="840754" class="block-content">Ok, so we'll move on to looking at our methods that actually get
-called when an event occurs. Since we've been dealing with <tt>showTagName</tt>, lets look at it.</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840264">
-showTagName: function(event)
-{
- alert(Event.element(event).tagName);
-}
-</com:TTextHighlighter>
-
-<p id="840755" class="block-content">As you can see, this function accepts one argument--the event.
-In order for us to get the element which fired the event we need to
-pass that argument to <tt>Event.element</tt>. Now we can manipulate it at will.</p>
-
-<p id="840756" class="block-content">This covers the most confusing parts of our code. The text above is also
-relevant to the remaining parts of our code. If there is anything about
-this you don't understand, feel free to ask questions in the forum.</p>
-
-<h2 id="6707">Removing Event Listeners</h2>
-
-<p id="840757" class="block-content">This one threw me for a loop the first time I tried to use it.
-I tried something similar to what I did in the <tt>Event.observe</tt>
-call with the exception of using <tt>stopObserving</tt>, but nothing seemed
-to change. In other words, the code below does <b>NOT</b> work.</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840265">
-$$(this.list + " li").each(function(item)
-{
- Event.stopObserving(item, 'click', this.showTagName);
-}.bind(this));
-</com:TTextHighlighter>
-
-<p id="840758" class="block-content">What's the deal here? The reason this does not work is because there
-is no pointer to the observer. This means that when we passed <tt>this.showTagName</tt>
-in the <tt>Event.observe</tt> method before hand, we passed it as an
-anonymous function. We can't reference an anonymous function
-because it simply does not have a pointer.</p>
-
-<p id="840759" class="block-content">So how do we get the job done? All we need to do is give the
-observing function a pointer, or the jargon free version: Set a variable
-that points to <tt>this.showTagName</tt>. Ok, lets change our code a bit.</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840266">
-this.showTagObserver = this.showTagName.bindEvent(this);
-
-// Observe clicks on our list items
-$$(this.list + " li").each(function(item)
-{
- Event.observe(item, 'click', this.showTagObserver);
-}.bind(this));
-</com:TTextHighlighter>
-
-<p id="840760" class="block-content">Now we can remove the event listeners from our list like this:</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840267">
-$$(this.list + " li").each(function(item)
-{
- Event.stopObserving(item, 'click', this.showTagObserver);
-}.bind(this));
-</com:TTextHighlighter>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/Scripts3.page b/demos/quickstart/protected/pages/Advanced/Scripts3.page
index 3f41abe1..b937e274 100755
--- a/demos/quickstart/protected/pages/Advanced/Scripts3.page
+++ b/demos/quickstart/protected/pages/Advanced/Scripts3.page
@@ -19,22 +19,31 @@ $this->getPage()->getClientScript()->registerPradoScript("effects");
</ul>
The available packaged libraries included in Prado are
<ul id="u2" class="block-content">
- <li><tt>prado</tt> : basic PRADO javascript framework based on Prototype</li>
- <li><tt>effects</tt> : visual effects from script.aculo.us</li>
- <li><tt>ajax</tt> : ajax and callback related based on Prototype</li>
- <li><tt>validator</tt> : validation</li>
+ <li><tt>jquery</tt> : <a href="https://jquery.com/">jQuery</a> javascript framework</li>
+ <li><tt>prado</tt> : basic PRADO javascript framework based on jQuery</li>
+ <li><tt>bootstrap</tt> : <a href="http://getbootstrap.com/">Bootstrap</a> front-end framework</li>
+ <li><tt>effects</tt> : visual effects based on <a href="https://jqueryui.com/">jQueryUI</a></li>
+ <li><tt>ajax</tt> : ajax and callback related based on jQuery</li>
+ <li><tt>validator</tt> : widgets validation</li>
<li><tt>logger</tt> : javascript logger and object browser</li>
- <li><tt>datepicker</tt> : datepicker control</li>
- <li><tt>colorpicker</tt> : colorpicker control</li>
+ <li><tt>datepicker</tt> : TDatepicker control</li>
+ <li><tt>colorpicker</tt> : TColorPicker control</li>
<li><tt>dragdrop</tt> : basic support for "drag and drop" control</li>
<li><tt>dragdropextra</tt> : extra support for "drag and drop" controls</li>
- <li><tt>slider</tt> : slider control</li>
+ <li><tt>slider</tt> : TSlider control</li>
<li><tt>keyboard</tt> : software keyboard control</li>
- <li><tt>tabpanel</tt> : tabpanel control</li>
+ <li><tt>tabpanel</tt> : TTabPanel control</li>
+ <li><tt>inlineeditor</tt> : TInPlaceTextBox. control</li>
<li><tt>activedatepicker</tt> : ajax version of the datepicker control</li>
<li><tt>activefileupload</tt> : ajax version of the fileupload control</li>
- <li><tt>accordion</tt> : accordion control</li>
- <li><tt>htmlarea</tt> : tinymce control</li>
+ <li><tt>accordion</tt> : TAccordion control</li>
+ <li><tt>ratings</tt> : TRatingList control</li>
+ <li><tt>htmlarea</tt> : <a href="http://www.tinymce.com/">tinyMCE</a> version 3 editor</li>
+ <li><tt>htmlarea4</tt> : <a href="http://www.tinymce.com/">tinyMCE</a> version 4 editor</li>
+ <li><tt>prototype</tt> : <a href="http://prototypejs.org/">prototype</a> javascript framework (only for compatibility with old custom controls)</li>
+ <li><tt>dragdrop</tt> : compatibility package for old, prototype-based drag&drop controls</li>
+ <li><tt>dragdropextra</tt> : compatiblity package for old, prototype-based drag&drop controls</li>
+ <li><tt>autocomplete</tt> : compatibility package for prototype-based TAutoComplete control</li>
</ul>
<p id="850761" class="block-content">The dependencies for each library are automatically resolved. Components
diff --git a/demos/quickstart/protected/pages/Advanced/es/Assets.page b/demos/quickstart/protected/pages/Advanced/es/Assets.page
deleted file mode 100755
index fc40b561..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/Assets.page
+++ /dev/null
@@ -1,69 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="5701">Assets</h1>
-<p id="740577" class="block-content">
-Assets are resource files (such as images, sounds, videos, CSS stylesheets, javascripts, etc.) that belong to specific component classes. Assets are meant to be provided to Web users. For better reusability and easier deployment of the corresponding component classes, assets should reside together with the component class files . For example, a toggle button may use two images, stored in file <tt>down.gif</tt> and <tt>up.gif</tt>, to show different toggle states. If we require the image files be stored under <tt>images</tt> directory under the Web server document root, it would be inconvenient for the users of the toggle button component, because each time they develop or deploy a new application, they would have to manually copy the image files to that specific directory. To eliminate this requirement, a directory relative to the component class file should be used for storing the image files. A common strategy is to use the directory containing the component class file to store the asset files.
-</p>
-<p id="740578" class="block-content">
-Because directories containing component class files are normally inaccessible by Web users, PRADO implements an asset publishing scheme to make available the assets to Web users. An asset, after being published, will have a URL by which Web users can retrieve the asset file.
-</p>
-
-<h2 id="5702">Asset Publishing</h2>
-<p id="740579" class="block-content">
-PRADO provides several methods for publishing assets or directories containing assets:
-</p>
-<ul id="u1" class="block-content">
-<li>In a template file, you can use <a href="?page=Configurations.Templates2#at">asset tags</a> to publish assets and obtain their URLs. Note, the assets must be relative to the directory containing the template file.</li>
-<li>In PHP code, you can call <tt>$object->publishAsset($assetPath)</tt> to publish an asset and obtain its URL. Here, <tt>$object</tt> refers to an instance of <tt>TApplicationComponent</tt> or derived class, and <tt>$assetPath</tt> is a file or directory relative to the directory containing the class file.</li>
-<li>If you want to publish an arbitrary asset, you need to call <tt>TAssetManager::publishFilePath($path)</tt>.</li>
-</ul>
-<p id="740580" class="block-content">
-BE AWARE: Be very careful with assets publishing, because it gives Web users access to files that were previously inaccessible to them. Make sure that you do not publish files that do not want Web users to see.
-</p>
-
-<h2 id="5703">Customization</h2>
-<p id="740581" class="block-content">
-Asset publishing is managed by the <tt>System.Web.TAssetManager</tt> module. By default, all published asset files are stored under the <tt>[AppEntryPath]/assets</tt> directory, where <tt>AppEntryPath</tt> refers to the directory containing the application entry script. Make sure the <tt>assets</tt> directory is writable by the Web server process. You may change this directory to another by configuring the <tt>BasePath</tt> and <tt>BaseUrl</tt> properties of the <tt>TAssetManager</tt> module in application configuration,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code1">
-&lt;modules&gt;
- &lt;module id="asset"
- class="System.Web.TAssetManager"
- BasePath="Web.images"
- BaseUrl="images" /&gt;
-&lt;/modules&gt;
-</com:TTextHighlighter>
-
-<h2 id="5704">Performance</h2>
-<p id="740582" class="block-content">
-PRADO uses caching techniques to ensure the efficiency of asset publishing. Publishing an asset essentially requires file copy operation, which is expensive. To save unnecessary file copy operations, <tt>System.Web.TAssetManager</tt> only publishes an asset when it has a newer file modification time than the published file. When an application runs under the <tt>Performance</tt> mode, such timestamp checking is also omitted.
-</p>
-<p id="740583" class="block-content">
-ADVISORY: Do not overuse asset publishing. The asset concept is mainly used to help better reuse and redistribute component classes. Normally, you should not use asset publishing for resources that are not bound to any component in an application. For example, you should not use asset publishing for images that are mainly used as design elements (e.g. logos, background images, etc.) Let Web server to directly serve these images will help improve the performance of your application.
-</p>
-
-<h2 id="5705">A Toggle Button Example</h2>
-<p id="740584" class="block-content">
-We now use the toggle button example to explain the usage of assets. The control uses two image files <tt>up.gif</tt> and <tt>down.gif</tt>, which are stored under the directory containing the control class file. When the button is in <tt>Up</tt> state, we would like to show the <tt>up.gif</tt> image. This can be done as follows,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code2">
-class ToggleButton extends TWebControl {
- ...
- protected function addAttributesToRender($writer) {
- ...
- if($this->getState()==='Up') {
- $url=$this->getAsset('up.gif');
- $writer->addAttribute('src',$url);
- }
- ...
- }
- ...
-}
-</com:TTextHighlighter>
-<p id="740585" class="block-content">
-In the above, the call <tt>$this->getAsset('up.gif')</tt> will publish the <tt>up.gif</tt> image file and return a URL for the published image file. The URL is then rendered as the <tt>src</tt> attribute of the HTML image tag.
-</p>
-<p id="740586" class="block-content">
-To redistribute <tt>ToggleButton</tt>, simply pack together the class file and the image files. Users of <tt>ToggleButton</tt> merely need to unpack the file, and they can use it right away, without worrying about where to copy the image files to.
-</p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/es/Auth.page b/demos/quickstart/protected/pages/Advanced/es/Auth.page
deleted file mode 100755
index 82af40bb..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/Auth.page
+++ /dev/null
@@ -1,171 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="5501">Autenticaci&oacute;n y Autorizacion</h1>
-<p id="720549" class="block-content">
-Autenticaci&oacute;n es un proceso de verificacion de alguna persona cuando esta dice ser quien es. Usualmente se utiliza para esto un nombre de usuario y un contrase&ntilde;a, pero podr&iacute;a incluir otros m&eacute;todos para demostrar su identidad, tales como tarjetas inteligentes, huellas digitales, etc.
-</p>
-<p id="720550" class="block-content">
-Autorizaci&oacute;n es el proceso de saber si la persona, una vez indetificada, esta permitida a manipular recursos especificos. Esto es comunmente determinado conociendo si la persona tiene un rol especifico que le da acceso a los recursos solicitados.
-</p>
-
-<h2 id="5502">Funcionamiento de la Autenticaci&oacute;n y Autorizacion en PRADO</h2>
-<p id="720551" class="block-content">
-PRADO proporciona una capa extensible de autenticacion/autirizacion. Como esta descrito en el <a href="">Ciclo de vida de una aplicacion PRADO</a>, <tt>TApplication</tt> reserva diversos modulos del ciclo de vida, responsables de la autenticacion y la autorizacion. PRADO proporciona el modulo <tt>TAuthManager</tt> para este prop&oacute;sito. Los desarrolladores pueden incorporar sus propios modulos de autenticacion/autorizacion (auth) facilmente.
-<tt>TAuthManager</tt> esta dise&ntilde;ado para ser usado en conjunto con el modulo <tt>TUserManager</tt>, el cual implementa una base de datos de usuarios de solo lectura (read-only).
-</p>
-<p id="720552" class="block-content">
-When a page request occurs, <tt>TAuthManager</tt> will try to restore user information from session. If no user information is found, the user is considered as an anonymous or guest user. To facilitate user identity verification, <tt>TAuthManager</tt> provides two commonly used methods: <tt>login()</tt> and <tt>logout()</tt>. A user is logged in (verified) if his username and password entries match a record in the user database managed by <tt>TUserManager</tt>. A user is logged out if his user information is cleared from session and he needs to re-login if he makes new page requests.
-</p>
-<p id="720553" class="block-content">
-During <tt>Authorization</tt> application lifecycle, which occurs after <tt>Autenticaci&oacute;n</tt> lifecycle, <tt>TAuthManager</tt> will verify if the current user has access to the requested page according to a set of authorization rules. The authorization is role-based, i.e., a user has access to a page if 1) the page explicitly states that the user has access; 2) or the user is of a particular role that has access to the page. If the user does not have access to the page, <tt>TAuthManager</tt> will redirect user browser to the login page which is specified by <tt>LoginPage</tt> property.
-</p>
-
-<h2 id="5503">Using PRADO Auth Framework</h2>
-<p id="720554" class="block-content">
-To enable PRADO auth framework, add the <tt>TAuthManager</tt> module and <tt>TUserManager</tt> module to <a href="">application configuration</a>,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code1">
-&lt;service id="page" class="TPageService"&gt;
- &lt;modules&gt;
- &lt;module id="auth" class="System.Security.TAuthManager"
- UserManager="users" LoginPage="UserLogin" /&gt;
- &lt;module id="users" class="System.Security.TUserManager"
- PasswordMode="Clear"&gt;
- &lt;user name="demo" password="demo" /&gt;
- &lt;user name="admin" password="admin" /&gt;
- &lt;/module&gt;
- &lt;/modules&gt;
-&lt;/service&gt;
-</com:TTextHighlighter>
-<p id="720555" class="block-content">
-In the above, the <tt>UserManager</tt> property of <tt>TAuthManager</tt> is set to the <tt>users</tt> module which is <tt>TUserManager</tt>. Developers may replace it with a different user management module that is derived from <tt>TUserManager</tt>.
-</p>
-<p id="720556" class="block-content">
-Authorization rules for pages are specified in <a href="">page configurations</a> as follows,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code2">
-&lt;authorization&gt;
- &lt;allow pages="PageID1,PageID2"
- users="User1,User2"
- roles="Role1" /&gt;
- &lt;deny pages="PageID1,PageID2"
- users="?"
- verb="post" /&gt;
-&lt;/authorization&gt;
-</com:TTextHighlighter>
-<p id="720557" class="block-content">
-An authorization rule can be either an <tt>allow</tt> rule or a <tt>deny</tt> rule. Each rule consists of four optional properties:
-</p>
-<ul id="u1" class="block-content">
-<li><tt>pages</tt> - list of comma-separated page names that this rule applies to. If empty, not set or wildcard '*', this rule will apply to all pages under the current directory and all its subdirectories recursively.</li>
-<li><tt>users</tt> - list of comma-separated user names that this rule applies to. If empty, not set or wildcard '*', this rule will apply to all users including anonymous/guest user. A character ? refers to anonymous/guest user. And a character @ refers to authenticated users (available since v3.1).</li>
-<li><tt>roles</tt> - list of comma-separated user roles that this rule applies to. If empty, not set or wildcard '*', this rule will apply to all user roles.</li>
-<li><tt>verb</tt> - page access method that this rule applies to. It can be either <tt>get</tt> or <tt>post</tt>. If empty, not set or wildcard '*', the rule will apply to both methods.</li>
-</ul>
-
-<p id="720558" class="block-content">
-When a page request is being processed, a list of authorization rules may be available. However, only the <i>first effective</i> rule <i>matching</i> the current user will render the authorization result.
-</p>
-<ul id="u2" class="block-content">
-<li>Rules are ordered bottom-up, i.e., the rules contained in the configuration of current page folder go first. Rules in configurations of parent page folders go after.</li>
-<li>A rule is effective if the current page is in the listed pages of the rule AND the current user action (<tt>get</tt> or <tt>post</tt>) is in the listed actions.</li>
-<li>A rule matching occurs if the current user name is in the listed user names of an <i>effective</i> rule OR if the user's role is in the listed roles of that rule.</li>
-<li>If no rule matches, the user is authorized.</li>
-</ul>
-<p id="720559" class="block-content">
-In the above example, anonymous users will be denied from posting to <tt>PageID1</tt> and <tt>PageID2</tt>, while <tt>User1</tt> and <tt>User2</tt> and all users of role <tt>Role1</tt> can access the two pages (in both <tt>get</tt> and <tt>post</tt> methods).
-</p>
-<com:SinceVersion Version="3.1.1" />
-<p class="block-content">
-Since version 3.1.1, the <tt>pages</tt> attribute in the authorization rules can take relative page paths with wildcard '*'. For example, <tt>pages="admin.Home"</tt> refers to the <tt>Home</tt> page under the <tt>admin</tt> directory, and <tt>pages="admin.*"</tt> would refer to all pages under the <tt>admin</tt> directory and subdirectories.
-</p>
-
-<p class="block-content">
-Also introduced in version 3.1.1 are IP rules. They are specified by a new attribute <tt>ips</tt> in authorization rules. The IP rules are used to determine if an authorization rule aplies to an end-user according to his IP address. One can list a few IPs together, separated by comma ','. Wildcard '*' can be used in the rules. For example, <tt>ips="192.168.0.2, 192.168.1.*"</tt> means the rule applies to users whose IP address is 192.168.0.2 or 192.168.1.*. The latter matches any host in the subnet 192.168.1. If the attribute 'ips' is empty, not set or wildcard '*', the corresponding rule will apply to requests coming from any host address.
-</p>
-
-<h2 id="5504">Using <tt>TUserManager</tt></h2>
-<p id="720560" class="block-content">
-As aforementioned, <tt>TUserManager</tt> implements a read-only user database. The user information are specified in either application configuration or an external XML file.
-</p>
-<p id="720561" class="block-content">
-We have seen in the above example that two users are specified in the application configuration. Complete syntax of specifying the user and role information is as follows,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code3">
-&lt;user name="demo" password="demo" roles="demo,admin" /&gt;
-&lt;role name="admin" users="demo,demo2" /&gt;
-</com:TTextHighlighter>
-<p id="720562" class="block-content">
-where the <tt>roles</tt> attribute in <tt>user</tt> element is optional. User roles can be specified in either the <tt>user</tt> element or in a separate <tt>role</tt> element.
-</p>
-
-<h2 id="5505">Using <tt>TDbUserManager</tt></h2>
-<p id="720563" class="block-content">
-<tt>TDbUserManager</tt> is introduced in v3.1.0. Its main purpose is to simplify the task of managing user accounts that are stored in a database. It requires developers to write a user class that represents the necessary information for a user account. The user class must extend from <tt>TDbUser</tt>.
-</p>
-<p id="720564" class="block-content">
-To use <tt>TDbUserManager</tt>, configure it in the application configuration like following:
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code4">
-<module id="db"
- class="System.Data.TDataSourceConfig" ..../>
-<module id="users"
- class="System.Security.TDbUserManager"
- UserClass="Path.To.MyUserClass"
- ConnectionID="db" />
-<module id="auth"
- class="System.Security.TAuthManager"
- UserManager="users" LoginPage="Path.To.LoginPage" />
-</com:TTextHighlighter>
-
-</p>
-<p id="720565" class="block-content">
-In the above, <tt>UserClass</tt> specifies what class will be used to create user instance. The class must extend from <tt>TDbUser</tt>. <tt>ConnectionID</tt> refers to the ID of a <tt>TDataSourceConfig</tt> module which specifies how to establish database connection to retrieve user information.
-</p>
-<p id="720566" class="block-content">
-The user class has to implement the two abstract methods in <tt>TDbUser</tt>: <tt>validateUser()</tt> and <tt>createUser()</tt>. Since user account information is stored in a database, the user class may make use of its <tt>DbConnection</tt> property to reach the database.
-</p>
-<com:SinceVersion Version="3.1.1" />
-<p id="720567" class="block-content">
-Since 3.1.1, <tt>TAuthManager</tt> provides support to allow remembering login by setting <tt>AllowAutoLogin</tt> to true. Accordingly, <tt>TDbUser</tt> adds two methods to facilitate the implementation of this feature. In particular, two new methods are introduced: <tt>createUserFromCookie()</tt> and <tt>saveUserToCookie()</tt>. Developers should implement these two methods if remembering login is needed. Below is a sample implementation:
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code5">
-public function createUserFromCookie($cookie)
-{
- if(($data=$cookie->Value)!=='')
- {
- $application=Prado::getApplication();
- if(($data=$application->SecurityManager->validateData($data))!==false)
- {
- $data=unserialize($data);
- if(is_array($data) && count($data)===3)
- {
- list($username,$address,$token)=$data;
- $sql='SELECT passcode FROM user WHERE LOWER(username)=:username';
- $command=$this->DbConnection->createCommand($sql);
- $command->bindValue(':username',strtolower($username));
- if($token===$command->queryScalar() && $token!==false && $address=$application->Request->UserHostAddress)
- return $this->createUser($username);
- }
- }
- }
- return null;
-}
-
-public function saveUserToCookie($cookie)
-{
- $application=Prado::getApplication();
- $username=strtolower($this->Name);
- $address=$application->Request->UserHostAddress;
- $sql='SELECT passcode FROM user WHERE LOWER(username)=:username';
- $command=$this->DbConnection->createCommand($sql);
- $command->bindValue(':username',strtolower($username));
- $token=$command->queryScalar();
- $data=array($username,$address,$token);
- $data=serialize($data);
- $data=$application->SecurityManager->hashData($data);
- $cookie->setValue($data);
-}
-</com:TTextHighlighter>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/es/Collections.page b/demos/quickstart/protected/pages/Advanced/es/Collections.page
deleted file mode 100755
index 55f0d554..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/Collections.page
+++ /dev/null
@@ -1,135 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="5501">Collections</h1>
-<p id="710529" class="block-content">
-Collection is a basic data structure in programming. In traditional PHP programming, array is used widely to represent collection data structure. A PHP array is a mix of cardinal-indexed array and hash table.
-</p>
-<p id="710530" class="block-content">
-To enable object-oriented manipulation of collections, PRADO provides a set of powerful collection classes. Among them, the <tt>TList</tt> and <tt>TMap</tt> are the most fundamental and usually serve as the base classes for other collection classes. Since many PRADO components have properties that are of collection type, it is very important for developers to master the usage of PRADO collection classes.
-</p>
-
-<h2 id="5502">Using <tt>TList</tt></h2>
-<p id="710531" class="block-content">
-A <tt>TList</tt> object represents a cardinal-indexed array, i.e., an array (object) with the index 0, 1, 2, ...
-</p>
-<p id="710532" class="block-content">
-<tt>TList</tt> may be used like a PHP array. For example,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code1">
-$list=new TList; // create a list object
-...
-$item=$list[$index]; // read the item at the specified index
-$list[]=$item; // append the item at the end
-$list[$index]=$item; // replace the item at the specified index
-unset($list[$index]); // remove the item at $index
-if(isset($list[$index])) // test if the list has an item at $index
-foreach($list as $index=>$item) // traverse each item in the list
-</com:TTextHighlighter>
-
-<p id="710533" class="block-content">
-To obtain the number of items in the list, use the <tt>Count</tt> property. Note, do not use <tt>count($list)</tt>, as it always returns 1.
-</p>
-
-<p id="710534" class="block-content">
-In addition, <tt>TList</tt> implements a few commonly used convenient methods for manipulating the data in a list. These include
-</p>
-<ul id="u1" class="block-content">
- <li><tt>clear()</tt>: removes all items in the list.</li>
- <li><tt>contains()</tt>: tests if the list contains the specified item.</li>
- <li><tt>indexOf()</tt>: obtains the zero-based index of the specified item in the list.</li>
- <li><tt>toArray()</tt>: returns an array representation of the items in the list.</li>
- <li><tt>copyFrom()</tt>: populates the list with data from an array or traversable object (including <tt>TList</tt>). Existing items will be removed first.</li>
- <li><tt>mergeWith()</tt>: appends the list with data from an array or traversable object (including <tt>TList</tt>).</li>
-</ul>
-
-<h3 id="5504">Using <tt>TList</tt>-based component properties</h3>
-<p id="710535" class="block-content">
-As aforementioned, many PRADO component properties are based on <tt>TList</tt> or <tt>TList</tt>-derived collection classes. These properties all share the above usages.
-</p>
-<p id="710536" class="block-content">
-For example, <tt>TControl</tt> (the base class for all PRADO controls) has a property called <tt>Controls</tt> which represents the collection of child controls. The type of <tt>Controls</tt> is <tt>TControlCollection</tt> which extends <tt>TList</tt>. Therefore, to append a new child control, we can use the following,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code2">
-$control->Controls[]=$newControl;
-</com:TTextHighlighter>
-<p id="710537" class="block-content">
-To traverse through the child controls, we can use,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code3">
-foreach($control->Controls as $childControl) ...
-</com:TTextHighlighter>
-<p id="710538" class="block-content">
-Another example is the <tt>Items</tt> property, available in list controls, <tt>TRepeater</tt>, <tt>TDataList</tt> and <tt>TDataGrid</tt>. In these controls, the ancestor class of <tt>Items</tt> is <tt>TList</tt>.
-</p>
-
-<h3 id="5505">Extending <tt>TList</tt></h3>
-<p id="710539" class="block-content">
-Often, we want to extend <tt>TList</tt> to perform additional operations for each addition or removal of an item. The only methods that the child class needs to override are <tt>insertAt()</tt> and <tt>removeAt()</tt>. For example, to ensure the list only contains items that are of <tt>TControl</tt> type, we can override <tt>insertAt()</tt> as follows,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code4">
-public function insertAt($index,$item)
-{
- if($item instanceof TControl)
- parent::insertAt($index,$item)
- else
- throw new Exception('TControl required.');
-}
-</com:TTextHighlighter>
-
-
-<h2 id="5503">Using <tt>TMap</tt></h2>
-<p id="710540" class="block-content">
-A <tt>TMap</tt> object represents a hash table (or we say string-indexed array).
-</p>
-<p id="710541" class="block-content">
-Similar to <tt>TList</tt>, <tt>TMap</tt> may be used like an array,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code5">
-$map=new TMap; // create a map object
-...
-$map[$key]=$value; // add a key-value pair
-unset($map[$key]); // remove the value with the specified key
-if(isset($map[$key])) // if the map contains the key
-foreach($map as $key=>$value) // traverse the items in the map
-</com:TTextHighlighter>
-<p id="710542" class="block-content">
-The <tt>Count</tt> property gives the number of items in the map while the <tt>Keys</tt> property returns a list of keys used in the map.
-</p>
-
-<p id="710543" class="block-content">
-The following methods are provided by <tt>TMap</tt> for convenience,
-</p>
-<ul id="u2" class="block-content">
- <li><tt>clear()</tt>: removes all items in the map.</li>
- <li><tt>contains()</tt>: tests if the map contains the specified key.</li>
- <li><tt>toArray()</tt>: returns an array representation of the items in the map.</li>
- <li><tt>copyFrom()</tt>: populates the map with data from an array or traversable object (including <tt>TMap</tt>). Existing items will be removed first.</li>
- <li><tt>mergeWith()</tt>: appends the map with data from an array or traversable object (including <tt>TMap</tt>).</li>
-</ul>
-
-<h3 id="5506">Using of <tt>TAttributeCollection</tt></h3>
-<p id="710544" class="block-content">
-<tt>TAttributeCollection</tt> is a special class extending from <tt>TMap</tt>. It is mainly used by the <tt>Attributes</tt> property of <tt>TControl</tt>.
-</p>
-Besides the normal functionalities provided by <tt>TMap</tt>, <tt>TAttributeCollection</tt> allows you to get and set collection items like getting and setting properties. For example,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code6">
-$collection->Label='value'; // equivalent to: $collection['Label']='value';
-echo $collection->Label; // equivalent to: echo $collection['Label'];
-</com:TTextHighlighter>
-<p id="710545" class="block-content">
-Note, in the above <tt>$collection</tt> does NOT have a <tt>Label</tt> property.
-</p>
-<p id="710546" class="block-content">
-Unlike <tt>TMap</tt>, keys in <tt>TAttributeCollection</tt> are case-insensitive. Therefore, <tt>$collection->Label</tt> is equivalent to <tt>$collection->LABEL</tt>.
-</p>
-<p id="710547" class="block-content">
-Because of the above new features, when dealing with the <tt>Attributes</tt> property of controls, we may take advantage of the subproperty concept and configure control attribute values in a template as follows,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code7">
-&lt;com:TButton Attributes.onclick="if(!confirm('Are you sure?')) return false;" .../&gt;
-</com:TTextHighlighter>
-<p id="710548" class="block-content">
-which adds an attribute named <tt>onclick</tt> to the <tt>TButton</tt> control.
-</p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/es/Error.page b/demos/quickstart/protected/pages/Advanced/es/Error.page
deleted file mode 100755
index 24c7ead0..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/Error.page
+++ /dev/null
@@ -1,77 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="6301">Error Handling and Reporting</h1>
-<p id="800666" class="block-content">
-PRADO provides a complete error handling and reporting framework based on the PHP 5 exception mechanism.
-</p>
-
-<h2 id="6302">Exception Classes</h2>
-<p id="800667" class="block-content">
-Errors occur in a PRADO application may be classified into three categories: those caused by PHP script parsing, those caused by wrong code (such as calling an undefined function, setting an unknown property), and those caused by improper use of the Web application by client users (such as attempting to access restricted pages). PRADO is unable to deal with the first category of errors because they cannot be caught in PHP code. PRADO provides an exception hierarchy to deal with the second and third categories.
-</p>
-<p id="800668" class="block-content">
-All errors in PRADO applications are represented as exceptions. The base class for all PRADO exceptions is <tt>TException</tt>. It provides the message internationalization functionality to all system exceptions. An error message may be translated into different languages according to the user browser's language preference.
-</p>
-<p id="800669" class="block-content">
-Exceptions raised due to improper usage of the PRADO framework inherit from <tt>TSystemException</tt>, which can be one of the following exception classes:
-</p>
-<ul id="u1" class="block-content">
-<li><tt>TConfigurationException</tt> - improper configuration, such as error in application configuration, control templates, etc.</li>
-<li><tt>TInvalidDataValueException</tt> - data value is incorrect or unexpected.</li>
-<li><tt>TInvalidDataTypeException</tt> - data type is incorrect or unexpected.</li>
-<li><tt>TInvalidDataFormatException</tt> - format of data is incorrect.</li>
-<li><tt>TInvalidOperationException</tt> - invalid operation request.</li>
-<li><tt>TPhpErrorException</tt> - catchable PHP errors, warnings, notices, etc.</li>
-<li><tt>TSecurityException</tt> - errors related with security.</li>
-<li><tt>TIOException</tt> - IO operation error, such as file open failure.</li>
-<li><tt>TDBException</tt> - errors related with database operations.</li>
-<li><tt>TNotSupportedException</tt> - errors caused by requesting for unsupported feature.</li>
-<li><tt>THttpException</tt> - errors to be displayed to Web client users.</li>
-</ul>
-<p id="800670" class="block-content">
-Errors due to improper usage of the Web application by client users inherit from <tt>TApplicationException</tt>.
-</p>
-
-<h2 id="6303">Raising Exceptions</h2>
-<p id="800671" class="block-content">
-Raising exceptions in PRADO has no difference than raising a normal PHP exception. The only thing matters is to raise the right exception. In general, exceptions meant to be shown to application users should use <tt>THttpException</tt>, while exceptions shown to developers should use other exception classes.
-</p>
-
-<h2 id="6304">Error Capturing and Reporting</h2>
-<p id="800672" class="block-content">
-Exceptions raised during the runtime of PRADO applications are captured by <tt>System.Exceptions.TErrorHandler</tt> module. Different output templates are used to display the captured exceptions. <tt>THttpException</tt> is assumed to contain error messages that are meant for application end users and thus uses a specific group of templates. For all other exceptions, a common template shown as follows is used for presenting the exceptions.
-</p>
-<a href="<%~ exception2.gif %>" target="_blank"><img src="<%~ exception.gif %>" alt="exception page" style="border:0px"/></a>
-
-<h2 id="6305">Customizing Error Display</h2>
-<p id="800673" class="block-content">
-Developers can customize the presentation of exception messages. By default, all error output templates are stored under <tt>framework/Exceptions/templates</tt>. The location can be changed by configuring <tt>TErrorHandler</tt> in application configuration,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_800226">
-&lt;module id="error"
- class="TErrorHandler"
- ErrorTemplatePath="Application.ErrorTemplates" /&gt;
-</com:TTextHighlighter>
-<p id="800674" class="block-content">
-<tt>THttpException</tt> uses a set of templates that are differentiated according to different <tt>StatusCode</tt> property value of <tt>THttpException</tt>. <tt>StatusCode</tt> has the same meaning as the status code in HTTP protocol. For example, a status code equal to 404 means the requested URL is not found on the server. The <tt>StatusCode</tt> value is used to select which output template to use. The output template files use the following naming convention:
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_800227">
- error<status code>-<language code>.html
-</com:TTextHighlighter>
-<p id="800675" class="block-content">
-where <tt>status code</tt> refers to the <tt>StatusCode</tt> property value of <tt>THttpException</tt>, and <tt>language code</tt> must be a valid language such as <tt>en</tt>, <tt>zh</tt>, <tt>fr</tt>, etc. When a <tt>THttpException</tt> is raised, PRADO will select an appropriate template for displaying the exception message. PRADO will first locate a template file whose name contains the status code and whose language is preferred by the client browser window. If such a template is not present, it will look for a template that has the same status code but without language code.
-</p>
-<p id="800676" class="block-content">
-The naming convention for the template files used for all other exceptions is as follows,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_800228">
- exception-<language code>.html
-</com:TTextHighlighter>
-<p id="800677" class="block-content">
-Again, if the preferred language is not found, PRADO will try to use <tt>exception.html</tt>, instead.
-</p>
-<div class="note">
-<b class="tip">CAUTION:</b> When saving a template file, please make sure the file is saved using UTF-8 encoding. On Windows, you may use <tt>Notepad.exe</tt> to accomplish such saving.
-</div>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/es/I18N.page b/demos/quickstart/protected/pages/Advanced/es/I18N.page
deleted file mode 100755
index 1a559036..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/I18N.page
+++ /dev/null
@@ -1,360 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="6201">Internationalization (I18N) and Localization (L10N)</h1>
-<p id="790625" class="block-content">Many web application built with PHP will not have internationalization in mind when it was first written. It may be that it was not intended for use in languages and cultures. Internationalization is an important aspect due to the increase adoption of the Internet in many non-English speaking countries. The process of internationalization and localization will contain difficulties. Below are some general guidelines to internationalize an existing application.</p>
-
-<h2 id="6203">Separate culture/locale sensitive data</h2>
-
-<p id="790626" class="block-content">Identify and separate data that varies with culture. The most obvious are text/string/message. Other type of data should also be considered. The following list categorize some examples of culture sensitive data
-</p>
-
-<ul id="u1" class="block-content">
- <li> Strings, Messages, Text, in relatively small units (e.g. phrases, sentences, paragraphs, but not the full text of a book).</li>
- <li> Labels on buttons.</li>
- <li> Help files, large units of text, static text.</li>
- <li> Sounds.</li>
- <li> Colors.</li>
- <li> Graphics,Icons.</li>
- <li> Dates, Times.</li>
- <li> Numbers, Currency, Measurements.</li>
- <li> Phone numbers.</li>
- <li> Honorific and personal titles.</li>
- <li> Postal address.</li>
- <li> Page layout.</li>
-</ul>
-
-<p id="790627" class="block-content">If possible all manner of text should be isolated and store in a persistence format. These text include, application error messages, hard coded strings in PHP files, emails, static HTML text, and text on form elements (e.g. buttons).</p>
-
-<h2 id="6204">Configuration</h2>
-<p id="790628" class="block-content">To enable the localization features in PRADO, you need to add a few configuration options in your <a href="?page=Configurations.AppConfig">application configuration</a>.
-First you need to include the <tt>System.I18N.*</tt> namespace to your paths.
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_790203">
-<paths>
- <using namespace="System.I18N.*" />
-</paths>
-</com:TTextHighlighter>
-
-<p id="790629" class="block-content">Then, if you wish to translate some text in your application, you need to add one translation message data source.</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_790204">
-<module id="globalization" class="TGlobalization">
- <translation type="XLIFF"
- source="MyApp.messages"
- marker="@@"
- autosave="true" cache="true" />
-</module>
-</com:TTextHighlighter>
-
-<p id="790630" class="block-content">Where <tt>source</tt> in <tt>translation</tt> is the dot path to a directory
-where you are going to store your translate message catalogue. The <tt>autosave</tt>
-attribute if enabled, saves untranslated messages back into the message catalogue.
-With <tt>cache</tt> enabled, translated messages are saved in the application <tt>runtime/i18n</tt> directory.
-The <tt>marker</tt> value is used to surround any untranslated text.
-</p>
-
-<p id="790631" class="block-content">With the configuration complete, we can now start to localize your application. If you have <tt>autosave</tt> enabled, after running your application with some localization activity (i.e. translating some text), you will see a directory and a <tt>messages.xml</tt> created within your <tt>source</tt> directory.</p>
-
-<h2 id="6205">What to do with <tt>messages.xml</tt>?</h2>
-<p id="790632" class="block-content">The translation message catalogue file, if using <tt>type="XLIFF"</tt>, is a standardized translation message interchange XML format. You can edit the XML file using any UTF-8 aware editor. The format of the XML is something like the following.</p>
-
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_790205">
-<?xml version="1.0"?>
-<xliff version="1.0">
- <file original="I18N Example IndexPage"
- source-language="EN"
- datatype="plaintext"
- date="2005-01-24T11:07:53Z">
- <body>
-
-<trans-unit id="1">
-<source>Hello world.</source>
-<target>Hi World!!!</target>
-</trans-unit>
-
- </body>
- </file>
-</xliff>
-</com:TTextHighlighter>
-
-Each translation message is wrapped within a <tt>trans-unit</tt> tag, where <tt>source</tt> is the original message, and <tt>target</tt> is the translated message. Editors such as <a href="http://www.heartsome.net/EN/xlfedit.html">Heartsome XLIFF Translation Editor</a> can help in editing these XML files.
-
-
-<h2 id="6206">Setting and Changing Culture</h2>
-<p id="790633" class="block-content">Once globalization is enabled, you can access the globalization settings, such as, <tt>Culture</tt>, <tt>Charset</tt>, etc, using </p>
-<com:TTextHighlighter CssClass="source block-content" id="code_790206">
-$globalization = $this->getApplication()->getGlobalization();
-echo $globalization->Culture;
-$globalization->Charset= "GB-2312"; //change the charset
-</com:TTextHighlighter>
-
-<p id="790634" class="block-content">You also change the way the culture is determined by changing the <tt>class</tt> attribute in the module configuration. For example, to set the culture that depends on the browser settings, you can use the <tt>TGlobalizationAutoDetect</tt> class.
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_790207">
-<module id="globalization" class="TGlobalizationAutoDetect">
- ...
-</module>
-</com:TTextHighlighter>
-
-<p id="790635" class="block-content">You may also provide your own globalization class to change how the application culture is set.
-Lastly, you can change the globalization settings on page by page basis using <a href="?page=Configurations.Templates1#tct">template control tags</a>. For example, changing the <tt>Culture</tt> to "zh".</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790208">
-&lt;%@ Application.Globalization.Culture="zh" %&gt;
-</com:TTextHighlighter>
-
-<h2 id="6207">Localizing your PRADO application</h2>
-There are two areas in your application that may need message or string localization, in PHP code and in the templates. To localize strings within PHP, use the <tt>localize</tt> function detailed below. To localize text in the template, use the <a href="#ttranslate">TTranslate</a> component.
-<h2 id="6208">Using <tt>localize</tt> function to translate text within PHP</h2>
-
-<p id="790636" class="block-content">The <tt>localize</tt> function searches for a translated string that matches original from your translation source. First, you need to locate all the hard coded text in PHP that are displayed or sent to the end user. The following example localizes the text of the <tt>$sender</tt> (assuming, say, the sender is a button). The original code before localization is as follows.
-<com:TTextHighlighter CssClass="source block-content" id="code_790209">
-function clickMe($sender,$param)
-{
- $sender->Text="Hello, world!";
-}
-</com:TTextHighlighter>
-
-<p id="790637" class="block-content">The hard coded message "Hello, world!" is to be localized using the <tt>localize</tt> function. </p>
-<com:TTextHighlighter CssClass="source block-content" id="code_790210">
-function clickMe($sender,$param)
-{
- $sender->Text=Prado::localize("Hello, world!");
-}
-</com:TTextHighlighter>
-
-<h2 id="6209">Compound Messages</h2>
-
-<p id="790638" class="block-content">Compound messages can contain variable data. For example, in the message "There are 12 users online.", the integer 12 may change depending on some data in your application. This is difficult to translate because the position of the variable data may be difference for different languages. In addition, different languages have their own rules for plurals (if any) and/or quantifiers. The following example can not be easily translated, because the sentence structure is fixed by hard coding the variable data within message.</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_790211">
-$num_users = 12;
-$message = "There are " . $num_users . " users online.";
-</com:TTextHighlighter>
-
-This problem can be solved using the <tt>localize</tt> function with string substitution. For example, the <tt>$message</tt> string above can be constructed as follows.
-<com:TTextHighlighter CssClass="source block-content" id="code_790212">
-$num_users = 12;
-$message = Prado::localize("There are {num_users} users online.", array('num_users'=>$num_users));
-</com:TTextHighlighter>
-<p id="790639" class="block-content">Where the second parameter in <tt>localize</tt> takes an associative array with the key as the substitution to find in the text and replaced it with the associated value.
-The <tt>localize</tt> function does not solve the problem of localizing languages that have plural forms, the solution is to use <a href="#choice-format">TChoiceFormat</a>.</p>
-
-<p id="790640" class="block-content">The following sample demonstrates the basics of localization in PRADO.</p>
-<com:RunBar PagePath="Advanced.Samples.I18N.Home" />
-
-<h1 id="6202">I18N Components</h1>
-<a name="ttranslate"></a>
-<h2 id="6210">TTranslate</h2>
-<p id="790641" class="block-content">Messages and strings can be localized in PHP or in templates.
-To translate a message or string in the template, use <tt>TTranslate</tt>.</p>
-
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790213">
-&lt;com:TTranslate&gt;Hello World&lt;/com:TTranslate&gt;
-&lt;com:TTranslate Text="Goodbye" /&gt;
-</com:TTextHighlighter>
-
-<p id="790642" class="block-content"><tt>TTranslate</tt> can also perform string substitution.
-The <tt>Parameters</tt> property can be use to add name values pairs for substitution. Substrings in the translation enclosed with "{" and "}" are consider as the
- parameter names during substitution lookup. The following example will substitute the substring "{time}" with the value of the parameter attribute "<tt>Parameters.time=&lt;%= time() %&gt;</tt>".
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790214">
-&lt;com:TTranslate Parameters.time=&lt;%= time() %&gt; &gt;
-The time is {time}.
-&lt;/com:TTranslate&gt;
-</com:TTextHighlighter>
-
-<p id="790643" class="block-content">A short for <tt>TTranslate</tt> is also provided using the following syntax.</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790215">
-&lt;%[string]%&gt;
-</com:TTextHighlighter>
-<p id="790644" class="block-content">where string will be translated to different languages according to the end-user's language preference. This syntax can be used with attribute values as well.</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790216">
-&lt;com:TLabel Text="&lt;%[ Hello World! ]%&gt;" /&gt;
-</com:TTextHighlighter>
-
-<h2 id="6211">TDateFormat</h2>
-<p id="790645" class="block-content">Formatting localized date and time is straight forward.</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790217">
-&lt;com:TDateFormat Value="12/01/2005" /&gt;
-</com:TTextHighlighter>
-
-<p id="790646" class="block-content">The <tt>Pattern</tt> property accepts 4 predefined localized date patterns and 4 predefined localized time patterns.</p>
-<ul id="u2" class="block-content">
- <li><tt>fulldate</tt></li>
- <li><tt>longdate</tt></li>
- <li><tt>mediumdate</tt></li>
- <li><tt>shortdate</tt></li>
- <li><tt>fulltime</tt></li>
- <li><tt>longtime</tt></li>
- <li><tt>mediumtime</tt></li>
- <li><tt>shorttime</tt></li>
-</ul>
-<p id="p1" class="block-content">
-The predefined can be used in any combination. If using a combined predefined pattern,
-the first pattern must be the date, followed by a space, and lastly the time pattern.
-For example, full date pattern with short time pattern. The actual ordering of the
-date-time and the actual pattern will be determine automatically from locale data specified
-by the <tt>Culture</tt> property.</p>
-
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790218">
-&lt;com:TDateFormat Pattern="fulldate shorttime" /&gt;
-</com:TTextHighlighter>
-
-<p id="790647" class="block-content">You can also specify a custom pattern using the following sub-patterns.
-The date/time format is specified by means of a string time pattern. In this pattern, all ASCII letters are reserved as pattern letters, which are defined as the following:
-<com:TTextHighlighter Language="text" CssClass="source block-content" id="code_790219">
- Symbol Meaning Presentation Example
- ------ ------- ------------ -------
- G era designator (Text) AD
- y year (Number) 1996
- M month in year (Text &amp; Number) July &amp; 07
- d day in month (Number) 10
- h hour in am/pm (1~12) (Number) 12
- H hour in day (0~23) (Number) 0
- m minute in hour (Number) 30
- s second in minute (Number) 55
- E day of week (Text) Tuesday
- D day in year (Number) 189
- F day of week in month (Number) 2 (2nd Wed in July)
- w week in year (Number) 27
- W week in month (Number) 2
- a am/pm marker (Text) PM
- k hour in day (1~24) (Number) 24
- K hour in am/pm (0~11) (Number) 0
- z time zone (Time) Pacific Standard Time
- ' escape for text (Delimiter) 'Date='
- '' single quote (Literal) 'o''clock'
-</com:TTextHighlighter>
-</p>
-
-<p id="790648" class="block-content">The count of pattern letters determine the format.</p>
-
-<p id="790649" class="block-content">(Text): 4 letters uses full form, less than 4, use short or abbreviated form
-if it exists. (e.g., "EEEE" produces "Monday", "EEE" produces "Mon")</p>
-
-<p id="790650" class="block-content">(Number): the minimum number of digits. Shorter numbers are zero-padded
- to this amount (e.g. if "m" produces "6", "mm" produces "06"). Year is
- handled specially; that is, if the count of 'y' is 2, the Year will be
- truncated to 2 digits. (e.g., if "yyyy" produces "1997", "yy" produces "97".)
- Unlike other fields, fractional seconds are padded on the right with zero.</p>
-
-<p id="790651" class="block-content">(Text and Number): 3 or over, use text, otherwise use number. (e.g.,
-"M" produces "1", "MM" produces "01", "MMM" produces "Jan", and "MMMM"
-produces "January".)</p>
-
-<p id="790652" class="block-content">Any characters in the pattern that are not in the ranges of ['a'..'z']
-and ['A'..'Z'] will be treated as quoted text. For instance, characters
-like ':', '.', ' ', and '@' will appear in the resulting time text
-even they are not embraced within single quotes.</p>
-
-<p id="790653" class="block-content">Examples using the US locale:
-
-<com:TTextHighlighter Language="text" CssClass="source block-content" id="code_790220">
-Format Pattern Result
--------------- -------
-"yyyy.MM.dd G 'at' HH:mm:ss" -&gt;&gt; 1996.07.10 AD at 15:08:56
-"EEE, MMM d, ''yy" -&gt;&gt; Wed, Jul 10, '96
-"h:mm a" -&gt;&gt; 12:08 PM
-"hh 'o''clock' a, z" -&gt;&gt; 12 o'clock PM, Pacific Daylight Time
-"K:mm a" -&gt;&gt; 0:00 PM
-"yyyy.MMMM.dd G hh:mm a" -&gt;&gt; 1996.July.10 AD 12:08 PM
-</com:TTextHighlighter>
-</p>
-
-<p id="790654" class="block-content">If the <tt>Value</tt> property is not specified, the current date and time is used.</p>
-
-<h2 id="6212">TNumberFormat</h2>
-<p id="790655" class="block-content">PRADO's Internationalization framework provide localized currency formatting and number formatting. Please note that the <tt>TNumberFormat</tt> component provides formatting only, it does not perform current conversion or exchange.</p>
-
-<p id="790656" class="block-content">Numbers can be formatted as currency, percentage, decimal or scientific
-numbers by specifying the <tt>Type</tt> attribute. The valid types are:</p>
-<ul id="u3" class="block-content">
- <li><tt>currency</tt></li>
- <li><tt>percentage</tt></li>
- <li><tt>decimal</tt></li>
- <li><tt>scientific</tt></li>
-</ul>
-
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790221">
-&lt;com:TNumberFormat Type="currency" Value="100" /&gt;
-</com:TTextHighlighter>
-
-<p id="790657" class="block-content"><tt>Culture</tt> and <tt>Currency</tt> properties may be specified to format locale specific numbers. </p>
-
-<p id="790658" class="block-content">If someone from US want to see sales figures from a store in
-Germany (say using the EURO currency), formatted using the german
- currency, you would need to use the attribute <tt>Culture="de_DE"</tt> to get
-the currency right, e.g. 100,00$. The decimal and grouping separator is
-then also from the <tt>de_DE</tt> locale. This may lead to some confusion because
-people from US uses the "," (comma) as thousand separator. Therefore a <tt>Currency</tt>
-attribute is available, so that the output from the following example results in $100.00
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790222">
-&lt;com:TNumberFormat Type="currency"
- Culture="en_US" Currency="EUR" Value="100" /&gt;
-</com:TTextHighlighter>
-</p>
-
-<p id="790659" class="block-content">The <tt>Pattern</tt> property determines the number of digits, thousand grouping
-positions, the number of decimal points and the decimal position. The actual characters that
-are used to represent the decimal points and thousand points are culture specific
-and will change automatically according to the <tt>Culture</tt> property. The valid
-<tt>Pattern</tt> characters are:</p>
-<ul id="u6" class="block-content">
- <li><tt># (hash)</tt> - represents the optional digits</li>
- <li><tt>0 (zero)</tt> - represents the mandatory digits, zero left filled</li>
- <li><tt>. (full stop)</tt> - the position of the decimal point (only 1 decimal point is allowed)</li>
- <li><tt>, (comma)</tt> - thousand point separation (up to 2 commas are allowed)</li>
-</ul>
-<p id="p2" class="block-content">
-For example, consider the <tt>Value="1234567.12345"</tt> and
-with <tt>Culture="en_US"</tt> (which uses "," for thousand point separator and "." for decimal separators).
-</p>
-<com:TTextHighlighter Language="text" CssClass="source block-content" id="code_790223">
-Pattern Output
-------- ------
-##,###.00 -&gt;&gt; 1,234,567.12
-##,###.## -&gt;&gt; 1,234,567.12345
-##,##.0000 -&gt;&gt; 1,23,45,67.1235
-##,###,##.0 -&gt;&gt; 12,345,67.1
-000,000,000.0 -&gt;&gt; 001,234,567.1
-</com:TTextHighlighter>
-</p>
-
-<h2 id="6213">TTranslateParameter</h2>
-<p id="790660" class="block-content">Compound messages, i.e., string substitution, can be accomplished with <tt>TTranslateParameter</tt>.
-In the following example, the strings "{greeting}" and "{name}" will be replace
-with the values of "Hello" and "World", respectively.The substitution string must be enclose with "{" and "}". The parameters can be further translated by using <tt>TTranslate</tt>.
-
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790224">
-&lt;com:TTranslate&gt;
- {greeting} {name}!
- &lt;com:TTranslateParameter Key="name">World&lt;/com:TTranslateParameter&gt;
- &lt;com:TTranslateParameter Key="greeting">Hello&lt;/com:TTranslateParameter&gt;
-&lt;/com:TTranslate&gt;
-</com:TTextHighlighter>
-
-
-<a name="choice-format"></a>
-<h2 id="6214">TChoiceFormat</h2>
-
-<p id="790661" class="block-content">Using the <tt>localize</tt> function or <tt>TTranslate</tt> component to translate messages does not inform the translator the cardinality of the data required to determine the correct plural structure to use. It only informs them that there is a variable data, the data could be anything. Thus, the translator will be unable to determine with respect to the substitution data the correct plural, language structure or phrase to use . E.g. in English, to translate the sentence, "There are {number} of apples.", the resulting translation should be different depending on the <tt>number</tt> of apples.</p>
-
-<p id="790662" class="block-content">The <tt>TChoiceFormat</tt> component performs message/string choice translation. The following example demonstrated a simple 2 choice message translation.</p>
-
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790225">
-&lt;com:TChoiceFormat Value="1"/&gt;[1] One Apple. |[2] Two Apples&lt;/com:TChoiceFormat&gt;
-</com:TTextHighlighter>
-
-<p id="790663" class="block-content">In the above example, the <tt>Value</tt> "1" (one), thus the translated string
-is "One Apple". If the <tt>Value</tt> was "2", then it will show "Two Apples".</p>
-
-<p id="790664" class="block-content">The message/string choices are separated by the pipe "|" followed by a set notation of the form.</p>
-<ul id="u7" class="block-content">
- <li><tt>[1,2]</tt> -- accepts values between 1 and 2, inclusive.</li>
- <li><tt>(1,2)</tt> -- accepts values between 1 and 2, excluding 1 and 2.</li>
- <li><tt>{1,2,3,4}</tt> -- only values defined in the set are accepted.</li>
- <li><tt>[-Inf,0)</tt> -- accepts value greater or equal to negative infinity
- and strictly less than 0</li>
-</ul>
-
-<p id="790665" class="block-content">Any non-empty combinations of the delimiters of square and round brackets are acceptable.
-The string chosen for display depends on the <tt>Value</tt> property. The <tt>Value</tt> is evaluated for each set until the <tt>Value</tt> is found to belong to a particular set.</p>
-
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/es/Logging.page b/demos/quickstart/protected/pages/Advanced/es/Logging.page
deleted file mode 100755
index de67b5f6..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/Logging.page
+++ /dev/null
@@ -1,61 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="6101">Logging</h1>
-<p id="780615" class="block-content">
-PRADO provides a highly flexible and extensible logging functionality. Messages logged can be classified according to log levels and message categories. Using level and category filters, the messages can be further routed to different destinations, such as files, emails, browser windows, etc. The following diagram shows the basic architecture of PRADO logging mechanism,
-</p>
-<img src="<%~ logrouter.gif %>" alt="Log router" />
-
-<h2 id="6102">Using Logging Functions</h2>
-<p id="780616" class="block-content">
-The following two methods are provided for logging messages in PRADO,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_780201">
-Prado::log($message, $logLevel, $category);
-Prado::trace($message, $category);
-</com:TTextHighlighter>
-<p id="780617" class="block-content">
-The difference between <tt>Prado::log()</tt> and <tt>Prado::trace()</tt> is that the latter automatically selects the log level according to the application mode. If the application is in <tt>Debug</tt> mode, stack trace information is appended to the messages. <tt>Prado::trace()</tt> is widely used in the core code of the PRADO framework.
-</p>
-
-<h2 id="6103">Message Routing</h2>
-<p id="780618" class="block-content">
-Messages logged using the above two functions are kept in memory. To make use of the messages, developers need to route them to specific destinations, such as files, emails, or browser windows. The message routing is managed by <tt>System.Util.TLogRouter</tt> module. When plugged into an application, it can route the messages to different destination in parallel. Currently, PRADO provides three types of routes:
-</p>
-<ul id="u1" class="block-content">
- <li><tt>TFileLogRoute</tt> - filtered messages are stored in a specified log file. By default, this file is named <tt>prado.log</tt> under the runtime directory of the application. File rotation is provided.</li>
- <li><tt>TEmailLogRoute</tt> - filtered messages are sent to pre-specified email addresses.</li>
- <li><tt>TBrowserLogRoute</tt> - filtered messages are appended to the end of the current page output.</li>
-</ul>
-<p id="780619" class="block-content">
-To enable message routing, plug in and configure the <tt>TLogRouter</tt> module in application configuration,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_780202">
-&lt;module id="log" class="System.Util.TLogRouter"&gt;
- &lt;route class="TBrowserLogRoute"
- Levels="Info"
- Categories="System.Web.UI.TPage, System.Web.UI.WebControls" /&gt;
- &lt;route class="TFileLogRoute"
- Levels="Warning, Error"
- Categories="System.Web" /&gt;
-&lt;/module&gt;
-</com:TTextHighlighter>
-<p id="780620" class="block-content">
-In the above, the <tt>Levels</tt> and <tt>Categories</tt> specify the log and category filters to selectively retrieve the messages to the corresponding destinations.
-</p>
-
-<h2 id="6104">Message Filtering</h2>
-<p id="780621" class="block-content">
-Messages can be filtered according to their log levels and categories. Each log message is associated with a log level and a category. With levels and categories, developers can selectively retrieve messages that they are interested on.
-</p>
-<p id="780622" class="block-content">
-Log levels defined in <tt>System.Util.TLogger</tt> include : <tt>DEBUG</tt>, <tt>INFO</tt>, <tt>NOTICE</tt>, <tt>WARNING</tt>, <tt>ERROR</tt>, <tt>ALERT</tt>, <tt>FATAL</tt>. Messages can be filtered according log level criteria. For example, if a filter specifies <tt>WARNING</tt> and <tt>ERROR</tt> levels, then only those messages that are of <tt>WARNING</tt> and <tt>ERROR</tt> will be returned.
-</p>
-<p id="780623" class="block-content">
-Message categories are hierarchical. A category whose name is the prefix of another is said to be the ancestor category of the other category. For example, <tt>System.Web</tt> category is the ancestor of <tt>System.Web.UI</tt> and <tt>System.Web.UI.WebControls</tt> categories. Messages can be selectively retrieved using such hierarchical category filters. For example, if the category filter is <tt>System.Web</tt>, then all messages in the <tt>System.Web</tt> are returned. In addition, messages in the child categories, such as <tt>System.Web.UI.WebControls</tt>, are also returned.
-</p>
-<p id="780624" class="block-content">
-By convention, the messages logged in the core code of PRADO are categorized according to the namespace of the corresponding classes. For example, messages logged in <tt>TPage</tt> will be of category <tt>System.Web.UI.TPage</tt>.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/es/MasterContent.page b/demos/quickstart/protected/pages/Advanced/es/MasterContent.page
deleted file mode 100755
index f99a64dc..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/MasterContent.page
+++ /dev/null
@@ -1,57 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="5801">Master and Content</h1>
-<p id="750587" class="block-content">
-Pages in a Web application often share common portions. For example, all pages of this tutorial application share the same header and footer portions. If we repeatedly put header and footer in every page source file, it will be a maintenance headache if in future we want to something in the header or footer. To solve this problem, PRADO introduces the concept of master and content. It is essentially a decorator pattern, with content being decorated by master.
-</p>
-<p id="750588" class="block-content">
-Master and content only apply to template controls (controls extending <tt>TTemplateControl</tt> or its child classes). A template control can have at most one master control and one or several contents (each represented by a <tt>TContent</tt> control). Contents will be inserted into the master control at places reserved by <tt>TContentPlaceHolder</tt> controls. And the presentation of the template control is that of the master control with <tt>TContentPlaceHolder</tt> replaced by <tt>TContent</tt>.
-</p>
-<p id="750589" class="block-content">
-For example, assume a template control has the following template:
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_750192">
-&lt;%@ MasterClass="MasterControl" %&gt;
-&lt;com:TContent ID="A" &gt;
-content A
-&lt;/com:TContent &gt;
-&lt;com:TContent ID="B" &gt;
-content B
-&lt;/com:TContent &gt;
-&lt;com:TContent ID="B" &gt;
-content B
-&lt;/com:TContent &gt;
-</com:TTextHighlighter>
-<p id="750590" class="block-content">
-which uses <tt>MasterControl</tt> as its master control. The master control has the following template,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_750193">
-other stuff
-&lt;com:TContentPlaceHolder ID="A" /&gt;
-other stuff
-&lt;com:TContentPlaceHolder ID="B" /&gt;
-other stuff
-&lt;com:TContentPlaceHolder ID="C" /&gt;
-other stuff
-</com:TTextHighlighter>
-<p id="750591" class="block-content">
-Then, the contents are inserted into the master control according to the following diagram, while the resulting parent-child relationship can be shown in the next diagram. Note, the template control discards everything in the template other than the contents, while the master control keeps everything and replaces the content placeholders with the contents according to ID matching.
-</p>
-<img src=<%~ mastercontent.gif %> alt="Master and Content" />
-<img src=<%~ pcrelation.gif %> alt="Parent-child relationship between master and content" />
-
-<h2 id="6301">Master vs. External Template</h2>
-<p id="750592" class="block-content">
-Master is very similar to external templates which are introduced since version 3.0.5. A special <a href="?page=Configurations.Templates1">include tag</a> is used to include an external template file into a base template.
-</p>
-<p id="750593" class="block-content">
-Both master and external template can be used to share common contents among pages. A master is a template control whose template contains the common content and whose class file contains the logic associated with the master. An external template, on the other hand, is a pure template file without any class files.
-</p>
-<p id="750594" class="block-content">
-Therefore, use master control if the common content has to be associated with some logic, such as a page header with search box or login box. A master control allows you to specify how the common content should interact with end users. If you use external templates, you will have to put the needed logic in the page or control class who owns the base template.
-</p>
-<p id="750595" class="block-content">
-Performancewise, external template is lighter than master as the latter is a self-contained control participating the page lifecycles, while the former is used only when the template is being parsed.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/es/Performance.page b/demos/quickstart/protected/pages/Advanced/es/Performance.page
deleted file mode 100755
index 7bdd4589..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/Performance.page
+++ /dev/null
@@ -1,88 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="6401">Performance Tuning</h1>
-<p id="810678" class="block-content">
-Performance of Web applications is affected by many factors. Database access, file system operations, network bandwidth are all potential affecting factors. PRADO tries in every effort to reduce the performance impact caused by the framework.
-</p>
-
-<h2 id="6402">Caching</h2>
-<p id="810679" class="block-content">
-PRADO provides a generic caching technique used by in several core parts of the framework. For example, when caching is enabled, <tt>TTemplateManager</tt> will save parsed templates in cache and reuse them in the following requests, which saves time for parsing templates. The <tt>TThemeManager</tt> adopts the similar strategy to deal with theme parsing.
-</p>
-<p id="810680" class="block-content">
-Enabling caching is very easy. Simply add the cache module in the application configuration, and PRADO takes care of the rest.
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_810229">
-&lt;modules&gt;
- &lt;module id="cache" class="System.Caching.TSqliteCache" /&gt;
-&lt;/modules&gt;
-</com:TTextHighlighter>
-
-<p id="810681" class="block-content">
-Developers can also take advantage of the caching technique in their applications. The <tt>Cache</tt> property of <tt>TApplication</tt> returns the plugged-in cache module when it is available. To save and retrieve a data item in cache, use the following commands,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_810230">
-if($application->Cache) {
- // saves data item in cache
- $application->Cache->set($keyName,$dataItem);
- // retrieves data item from cache
- $dataItem=$application->Cache->get($keyName);
-}
-</com:TTextHighlighter>
-<p id="810682" class="block-content">
-where <tt>$keyName</tt> should be a string that uniquely identifies the data item stored in cache.
-</p>
-
-<p id="840059" class="block-content">
-Since v3.1.0, a new control called <a href="?page=Controls.OutputCache">TOutputCache</a> has been introduced. This control allows users to selectively cache parts of a page's output. When used appropriately, this technique can significant improve pages' performance because the underlying controls are not created at all if the cached versions are hit.
-</p>
-
-<h2 id="6403">Using <tt>pradolite.php</tt></h2>
-<p id="810683" class="block-content">
-Including many PHP script files may impact application performance significantly. PRADO classes are stored in different files and when processing a page request, it may require including tens of class files.To alleviate this problem, in each PRADO release, a file named <tt>pradolite.php</tt> is also included. The file is a merge of all core PRADO class files with comments being stripped off and message logging removed.
-</p>
-<p id="810684" class="block-content">
-To use <tt>pradolite.php</tt>, in your application entry script, replace the inclusion of <tt>prado.php</tt> with <tt>pradolite.php</tt>.
-</p>
-
-<h2 id="6404">Changing Application Mode</h2>
-<p id="810685" class="block-content">
-Application mode also affects application performance. A PRADO application can be in one of the following modes: <tt>Off</tt>, <tt>Debug</tt>, <tt>Normal</tt> and <tt>Performance</tt>. The <tt>Debug</tt> mode should mainly be used during application development, while <tt>Normal</tt> mode is usually used in early stage after an application is deployed to ensure everything works correctly. After the application is proved to work stably for some period, the mode can be switched to <tt>Performance</tt> to further improve the performance.
-</p>
-<p id="810686" class="block-content">
-The difference between <tt>Debug</tt>, <tt>Normal</tt> and <tt>Performance</tt> modes is that under <tt>Debug</tt> mode, application logs will contain debug information, and under <tt>Performance</tt> mode, timestamp checking is not performed for cached templates and published assets. Therefore, under <tt>Performance</tt> mode, application may not run properly if templates or assets are modified. Since <tt>Performance</tt> mode is mainly used when an application is stable, change of templates or assets are not likely.
-</p>
-<p id="810687" class="block-content">
-To switch application mode, configure it in application configuration:
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_810231">
-&lt;application Mode="Performance" &gt;
- ......
-&lt;/application &gt;
-</com:TTextHighlighter>
-
-<h2 id="6405">Reducing Page Size</h2>
-<p id="810688" class="block-content">
-By default, PRADO stores page state in hidden fields of the HTML output. The page state could be very large in size if complex controls, such as <tt>TDataGrid</tt>, is used. To reduce the size of the network transmitted page size, two strategies can be used.
-</p>
-<p id="810689" class="block-content">
-First, you may disable viewstate by setting <tt>EnableViewState</tt> to false for the page or some controls on the page if they do not need user interactions. Viewstate is mainly used to keep track of page state when a user interacts with that page/control.
-</p>
-<p id="810690" class="block-content">
-Second, you may use a different page state storage. For example, page state may be stored in session, which essentially stores page state on the server side and thus saves the network transmission time. The <tt>StatePersisterClass</tt> property of the page determines which state persistence class to use. By default, it uses <tt>System.Web.UI.TPageStatePersister</tt> to store persistent state in hidden fields. You may modify this property to a persister class of your own, as long as the new persister class implements the <tt>IPageStatePersister</tt> interface. You may configure this property in several places, such as application configuration or page configuration using &lt;pages&gt; or &lt;page&gt; tags,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_810232">
-&lt;pages StatePersisterClass="MyPersister1" ... &gt;
- &lt;page ID="SpecialPage" StatePersisterClass="MyPersister2" ... /&gt;
-&lt;/pages&gt;
-</com:TTextHighlighter>
-<p id="810691" class="block-content">
-Note, in the above the <tt>SpecialPage</tt> will use <tt>MyPersister2</tt> as its persister class, while the rest pages will use <tt>MyPersister1</tt>. Therefore, you can have different state persister strategies for different pages.
-</p>
-
-<h2 id="6406">Other Techniques</h2>
-<p id="810692" class="block-content">
-Server caching techniques are proven to be very effective in improving the performance of PRADO applications. For example, we have observed that by using Zend Optimizer, the RPS (request per second) of a PRADO application can be increased by more than ten times. Of course, this is at the cost of stale output, while PRADO's caching techniques always ensure the correctness of the output.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/es/Scripts.page b/demos/quickstart/protected/pages/Advanced/es/Scripts.page
deleted file mode 100755
index cca6530e..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/Scripts.page
+++ /dev/null
@@ -1,397 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="6501">Introduction to Javascript</h1>
-This guide is based on the <a href="http://www.sergiopereira.com/articles/advjs.html">
-Quick guide to somewhat advanced JavaScript tour of some OO features</a> by Sergio Pereira.
-
-<h2 id="6502">Hey, I didn't know you could do that</h2>
-<p id="820693" class="block-content">
- If you are a web developer and come from the same place I do, you have probably
- used quite a bit of Javascript in your web pages, mostly as UI glue.
-</p>
-<p id="820694" class="block-content">
-
- Until recently, I knew that Javascript had more OO capabilities than I was employing,
- but I did not feel like I needed to use it. As the browsers started to support a more
- standardized featureset of Javascript and the DOM, it became viable to write more
- complex and functional code to run on the client. That helped giving birth to the
- AJAX phenomena.
-</p>
-<p id="820695" class="block-content">
- As we all start to learn what it takes to write our cool, AJAX applications, we begin
- to notice that the Javascript we used to know was really just the tip of the iceberg.
- We now see Javascript being used beyond simple UI chores like input validation and frivolous
- tasks. The client code now is far more advanced and layered, much like a real desktop
- application or a client-server thick client. We see class libraries, object models,
- hierarchies, patterns, and many other things we got used to seeing only in our server
- side code.
-</p>
-<p id="820696" class="block-content">
- In many ways we can say that suddenly the bar was put much higher than before. It takes
- a heck lot more proficiency to write applications for the new Web and we need to improve
- our Javascript skills to get there.
- If you try to use many of the existing javascript libraries out there, like
- <a href="http://prototype.conio.net/">Prototype.js</a>,
- <a href="http://script.aculo.us/">Scriptaculous</a>,
- <a href="http://moofx.mad4milk.net/">moo.fx</a>,
- <a href="http://bennolan.com/behaviour/">Behaviour</a>,
- <a href="http://developer.yahoo.net/yui/">YUI</a>,
- etc you'll eventually find yourself reading the JS code. Maybe because you want
- to learn how they do it, or because you're curious, or more often because that's the
- only way to figure out how to use it, since documentation does not seem to be highly
- regarded with most of these libraries. Whatever the case may be, you'll face some
- kung-fu techniques that will be foreign and scary if you haven't seen anything like
- that before.
-</p>
-
-<p id="820697" class="block-content">
- The purpose of this article is precisely explaining the types of constructs that
- many of us are not familiar with yet.
-</p>
-
-
-<h2 id="6503">JSON (JavaScript Object Notation)</h2>
-<p id="820698" class="block-content">
- JavaScript Object Notation (<a href="http://www.json.org/">JSON</a>,) is one of the new
- buzzwords popping up around the AJAX theme. JSON, simply put, is a way of
- declaring an object in Javascript. Let's see an example right away and note
- how simple it is.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820233">
-var myPet = { color: 'black', leg_count: 4, communicate: function(repeatCount){
-for(i=0;i&lt;repeatCount;i++) alert('Woof!');} };
-</com:TTextHighlighter>
-
-<p id="820699" class="block-content">
- Let's just add little bit of formatting so it looks more like how we usually find out there:
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820234">
-var myPet =
-{
- color: 'black',
- legCount: 4,
- communicate: function(repeatCount)
- {
- for(i=0;i&lt;repeatCount;i++)
- alert('Woof!');
- }
-};
-</com:TTextHighlighter>
-<p id="820700" class="block-content">
- Here we created a reference to an object with two properties (<tt>color</tt>
- and <tt>legCount</tt>) and a method (<tt>communicate</tt>.)
- It's not hard to figure out that the object's properties and methods
- are defined as a comma delimited list. Each of the members is introduced by name, followed
- by a colon and then the definition. In the case of the properties it is easy, just the value
- of the property. The methods are created by assigning an anonymous function, which we will
- explain better down the line.
- After the object is created and assigned to the variable <tt>myPet</tt>,
- we can use it like this:
-</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820235">
-alert('my pet is ' + myPet.color);
-alert('my pet has ' + myPet.legCount + ' legs');
-//if you are a dog, bark three times:
-myPet.communicate(3);
-</com:TTextHighlighter>
-<p id="820701" class="block-content">
- You'll see JSON used pretty much everywhere in JS these days, as arguments to functions,
- as return values, as server responses (in strings,) etc.
-</p>
-
-<h2 id="6504">What do you mean? A function is an object too?</h2>
-<p id="820702" class="block-content">
- This might be unusual to developers that never thought about that, but in JS a function is
- also an object. You can pass a function around as an argument to another function just like
- you can pass a string, for example. This is extensively used and very handy.
-</p>
-
-<p id="820703" class="block-content">
- Take a look at this example. We will pass functions to another function that will use them.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820236">
-var myDog =
-{
- bark: function()
- {
- alert('Woof!');
- }
-};
-
-var myCat =
-{
- meow: function()
- {
- alert('I am a lazy cat. I will not meow for you.');
- }
-};
-
-function annoyThePet(petFunction)
-{
- //let's see what the pet can do
- petFunction();
-}
-
-//annoy the dog:
-annoyThePet(myDog.bark);
-//annoy the cat:
-annoyThePet(myCat.meow);
-</com:TTextHighlighter>
-<p id="820704" class="block-content">
- Note that we pass myDog.bark and myCat.meow without appending parenthesis
- <tt>"()"</tt> to them. If we did that we would not be passing
- the function, rather we would be calling the method and passing the return value,
- <tt>undefined</tt> in both cases here.
-</p>
-
-<p id="820705" class="block-content">
- If you want to make my lazy cat start barking, you can easily do this:
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820237">
-myCat.meow = myDog.bark;
-myCat.meow(); //alerts 'Woof!'
-</com:TTextHighlighter>
-
-<h2 id="6505">Arrays, items, and object members</h2>
-<p id="820706" class="block-content">
- The following two lines in JS do the same thing.
-</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820238">
-var a = new Array();
-var b = [];
-</com:TTextHighlighter>
-<p id="820707" class="block-content">
- As I'm sure you already know, you can access individual items in an array
- by using the square brackets:
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820239">
-var a = ['first', 'second', 'third'];
-var v1 = a[0];
-var v2 = a[1];
-var v3 = a[2];
-</com:TTextHighlighter>
-<p id="820708" class="block-content">
-
- But you are not limited to numeric indices. You can access any member of a JS
- object by using its name, in a string. The following example creates an empty
- object, and adds some members by name.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820240">
-var obj = {}; //new, empty object
-obj['member_1'] = 'this is the member value';
-obj['flag_2'] = false;
-obj['some_function'] = function(){ /* do something */};
-</com:TTextHighlighter>
-<p id="820709" class="block-content">
- The above code has identical effect as the following:
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820241">
-var obj =
-{
- member_1:'this is the member value',
- flag_2: false,
- some_function: function(){ /* do something */}
-};
-</com:TTextHighlighter>
-
-<p id="820710" class="block-content">
- In many ways, the idea of objects and associative arrays (hashes) in JS are not
- distiguishable. The following two lines do the same thing too.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820242">
-obj.some_function();
-obj['some_function']();
-</com:TTextHighlighter>
-
-
-<h2 id="6506">Enough about objects, may I have a class now?</h2>
-<p id="820711" class="block-content">
-
- The great power of object oriented programming languages derive from the use
- of classes. I don't think I would have guessed how classes are defined in JS
- using only my previous experience with other languages. Judge for yourself.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820243">
-//defining a new class called Pet
-var Pet = function(petName, age)
-{
- this.name = petName;
- this.age = age;
-};
-
-//let's create an object of the Pet class
-var famousDog = new Pet('Santa\'s Little Helper', 15);
-alert('This pet is called ' + famousDog.name);
-</com:TTextHighlighter>
-<p id="820712" class="block-content">
- Let's see how we add a method to our <tt>Pet</tt> class. We will be using the
- <tt>prototype</tt> property that all classes have. The <tt>prototype</tt>
- property is an object that contains all the members that any object of the class will have.
- Even the default JS classes, like <tt>String</tt>, <tt>Number</tt>,
- and <tt>Date</tt> have a <tt>prototype</tt> object that we
- can add methods and properties to and make any object of that class automatically gain this new member.
-</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820244">
-Pet.prototype.communicate = function()
-{
- alert('I do not know what I should say, but my name is ' + this.name);
-};
-</com:TTextHighlighter>
-<p id="820713" class="block-content">
- That's when a library like <a href="http://www.sergiopereira.com/articles/prototype.js.html">prototype.js</a> comes in
- handy. If we are using prototype.js, we can make our code look cleaner (at least in my opinion.)
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820245">
-var Pet = Class.create();
-Pet.prototype =
-{
- //our 'constructor'
- initialize: function(petName, age)
- {
- this.name = petName;
- this.age = age;
- },
-
- communicate: function()
- {
- alert('I do not know what I should say, but my name is ' + this.name);
- }
-};
-</com:TTextHighlighter>
-
-<h2 id="6507">Functions as arguments, an interesting pattern</h2>
-<p id="820714" class="block-content">
- If you have never worked with languages that support closures
- you may find the following idiom too funky.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820246">
-var myArray = ['first', 'second', 'third'];
-myArray.each( function(item, index)
-{
- alert('The item in the position #' + index + ' is:' + item);
-});
-</com:TTextHighlighter>
-<p id="820715" class="block-content">
-
- Whoa! Let's explain what is going on here before you decide I've gone too
- far and navigate to a better article than this one.
-</p>
-<p id="820716" class="block-content">
- First of all, in the above example we are using the prototype.js library, which
- adds the each function to the Array class. The each function accepts one
- argument that is a function object. This function, in turn, will be called once
- for each item in the array, passing two arguments when called, the item and the index
- for the current item. Let's call this function our iterator function.
- We could have also written the code like this.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820247">
-function myIterator(item, index)
-{
- alert('The item in the position #' + index + ' is:' + item);
-}
-
-var myArray = ['first', 'second', 'third'];
-myArray.each( myIterator );
-</com:TTextHighlighter>
-<p id="820717" class="block-content">
- But then we would not be doing like all the cool kids in school, right?
- More seriously, though, this last format is simpler to understand but causes
- us to jump around in the code looking for the myIterator function. It's nice
- to have the logic of the iterator function right there in the same place
- it's called. Also, in this case, we will not need the iterator function anywhere
- else in our code, so we can transform it into an anonymous function without penalty.
-</p>
-
-<h2 id="6508">This is <tt>this</tt> but sometimes <tt>this</tt> is also that</h2>
-<p id="820718" class="block-content">
-
- One of the most common troubles we have with JS when we start writing our code
- it the use of the <tt>this</tt> keyword. It could be a real
- tripwire.
-</p>
-<p id="820719" class="block-content">
- As we mentioned before, a function is also an object in JS, and sometimes we
- do not notice that we are passing a function around.
-</p>
-<p id="820720" class="block-content">
- Take this code snippet as an example.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820248">
-function buttonClicked()
-{
- alert('button ' + this.id + ' was clicked');
-}
-
-var myButton = document.getElementById('someButtonID');
-var myButton2 = document.getElementById('someOtherButtonID');
-myButton.onclick = buttonClicked;
-myButton2.onclick = buttonClicked;
-</com:TTextHighlighter>
-<p id="820721" class="block-content">
- Because the buttonClicked function is defined outside any object we may tend to
- think the <tt>this</tt> keyword will contain a reference to
- the <tt>window</tt> or <tt>document</tt>
- object (assuming this code is in the middle of an HTML page viewed in a browser.)
-</p>
-
-<p id="820722" class="block-content">
- But when we run this code we see that it works as intended and displays the <tt>id</tt> of
- the clicked button. What happened here is that we made the onclick method of each button contain the
- <tt>buttonClicked</tt> object reference, replacing whatever was there before. Now
- whenever the button is clicked, the browser will execute something similar to the following line.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820249">
-myButton.onclick();
-</com:TTextHighlighter>
-<p id="820723" class="block-content">
-
- That isn't so confusing afterall, is it? But see what happens you start having other
- objects to deal with and you want to act on these object upon events like the button's click.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820250">
-var myHelper =
-{
- formFields: [ ],
- emptyAllFields: function()
- {
- for(i=0; i < this.formFields.length; i++)
- {
- var elementID = this.formFields[i];
- var field = document.getElementById(elementID);
- field.value = '';
- }
- }
-};
-
-//tell which form fields we want to work with
-myHelper.formFields.push('txtName');
-myHelper.formFields.push('txtEmail');
-myHelper.formFields.push('txtAddress');
-
-//clearing the text boxes:
-myHelper.emptyAllFields();
-
-var clearButton = document.getElementById('btnClear');
-clearButton.onclick = myHelper.emptyAllFields;
-</com:TTextHighlighter>
-<p id="820724" class="block-content">
- So you think, nice, now I can click the Clear button on my page and those three text boxes
- will be emptied. Then you try clicking the button only to get a runtime error. The error
- will be related to (guess what?) the <tt>this</tt> keyword.
- The problem is that <tt>this.formFields</tt> is not defined if
- <tt>this</tt> contains a referece to the button, which is
- precisely what's happening. One quick solution would be to rewrite our last line of code.
-</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820251">
-clearButton.onclick = function()
-{
- myHelper.emptyAllFields();
-};
-</com:TTextHighlighter>
-<p id="820725" class="block-content">
- That way we create a brand new function that calls our helper method within the helper object's context.
-</p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/es/Scripts1.page b/demos/quickstart/protected/pages/Advanced/es/Scripts1.page
deleted file mode 100755
index 96ab7760..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/Scripts1.page
+++ /dev/null
@@ -1,96 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="6601">Developer Notes for prototype.js</h1>
-This guide is based on the <a href="http://www.sergiopereira.com/articles/prototype.js.html">
-Developer Notes for prototype.js</a> by Sergio Pereira.
-
-<h2 id="6603">What is that?</h2>
-<p id="830726" class="block-content">
-In case you haven't already used it, <a href="http://prototype.conio.net">prototype.js</a> is a
- JavaScript library written by <a href="http://www.conio.net">Sam Stephenson</a>.
- This amazingly well thought and well written piece of <b>standards-compliant</b> code takes a lot of
- the burden associated with creating rich, highly interactive web pages that characterize the Web 2.0 off your back.
-</p>
-
-<p id="830727" class="block-content">
- If you tried to use this library recently, you probably noticed that documentation is not one
- of its strongest points. As many other developers before me, I got my head around prototype.js by
- reading the source code and experimenting with it. I thought it would be nice to take notes while
- I learned and share with everybody else.
-</p>
-<p id="830728" class="block-content">
- As you read the examples and the reference, developers familiar with the Ruby
- programming language will notice an intentional similarity between Ruby's
- built-in classes and many of the extensions implemented by this library.
-</p>
-
-
-<h2 id="6604">Using the <tt>$()</tt> function</h2>
-<p id="830729" class="block-content">
- The <tt>$()</tt> function is a handy shortcut to the all-too-frequent <tt>document.getElementById()</tt> function
- of the DOM. Like the DOM function, this one returns the element that has the id passed as an argument.
-</p>
-
-<p id="830730" class="block-content">
- Unlike the DOM function, though, this one goes further. You can pass more than one id and
- <tt>$()</tt> will return an <tt>Array</tt> object with
- all the requested elements. The example below should illustrate this.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_830252">
-&lt;com:TClientScript UsingClientScripts="prado" /&gt;
-<div id="myDiv">
- <p id="830731" class="block-content">This is a paragraph</p>
-</div>
-
-<div id="myOtherDiv">
- <p id="830732" class="block-content">This is another paragraph</p>
-</div>
-
-<input type="button" value=Test1 onclick="test1();" />
-<input type="button" value=Test2 onclick="test2();" />
-
-<script type="text/javascript">
-/*<![CDATA[*/
-function test1()
-{
- var d = $('myDiv');
- alert(d.innerHTML);
-}
-
-function test2()
-{
- var divs = $('myDiv','myOtherDiv');
- for(i=0; i<divs.length; i++)
- {
- alert(divs[i].innerHTML);
- }
-}
-/*]]>*/
-</script>
-</com:TTextHighlighter>
-<p id="830733" class="block-content">
- Another nice thing about this function is that you can pass either the <tt>id</tt> string or the element object itself,
- which makes this function very useful when creating other functions that can also take either form of argument.
-</p>
-
-<h2 id="6605">Using the <tt>$F()</tt> function</h2>
-
-<p id="830734" class="block-content">
- The <tt>$F()</tt> function is a another welcome shortcut. It returns the value of any field input control,
- like text boxes or drop-down lists. The function can take as argument either the element <tt>id</tt> or the element object itself.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_830253">
-<input type="text" id="userName" value="Joe Doe" />
-<input type="button" value=Test3 onclick="test3();" />
-
-<script type="text/javascript">
-/*<![CDATA[*/
-function test3()
-{
- alert($F('userName'));
-}
-/*]]>*/
-</script>
-</com:TTextHighlighter>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/es/Scripts2.page b/demos/quickstart/protected/pages/Advanced/es/Scripts2.page
deleted file mode 100755
index 5d88b065..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/Scripts2.page
+++ /dev/null
@@ -1,253 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="6701">DOM Events and Javascript</h1>
-
-<h2 id="6702">Basic event handling</h2>
-
-<p id="840735" class="block-content">The syntax for working with events looks like the code below.</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840254">
-Event.observe(element, name, observer, [useCapture]);
-</com:TTextHighlighter>
-
-<p id="840736" class="block-content">Assuming for a moment that we want to observe when a link was clicked,
-we could do the following:</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840255">
-// &lt;a id="clicker" href="http://foo.com"&gt;Click me&lt;/a&gt;
-Event.observe('clicker', 'click', function(event)
-{
- alert('clicked!');
-});
-</com:TTextHighlighter>
-
-<p id="840737" class="block-content">If we wanted to get the element that fired the event, we'd do this:</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840256">
-Event.observe('clicker', 'click', function(event)
-{
- alert(Event.element(event));
-});
-</com:TTextHighlighter>
-
-<h2 id="6703">Observing keystrokes</h2>
-
-<p id="840738" class="block-content">If we wanted to observe keystrokes for the entire document, we could do the following:</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840257">
-Event.observe(document, 'keypress', function(event)
-{
- if(Event.keyCode(event) == Event.KEY_TAB)
- alert('Tab Pressed');
-});
-</com:TTextHighlighter>
-
-<p id="840739" class="block-content">And lets say we wanted to keep track of what has been typed :</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840258">
-Event.observe('search', 'keypress', function(event)
-{
- Element.update('search-results', $F(Event.element(event)));
-});
-</com:TTextHighlighter>
-
-<p id="840740" class="block-content">Prototype defines properties inside the event object for some
-of the more common keys, so feel free to dig around in Prototype to
-see which ones those are.</p>
-
-<p id="840741" class="block-content">A final note on keypress events; If you'd like to detect a
-left click you can use <tt>Event.isLeftClick(event)</tt>.</p>
-
-<h2 id="6704">Getting the coordinates of the mouse pointer</h2>
-
-<p id="840742" class="block-content">Drag and drop, dynamic element resizing, games, and
-much more all require the ability to track the X and Y location of
-the mouse. Prototype makes this fairly simple. The code below tracks
-the X and Y position of the mouse and spits out those values into
-an input box named mouse.</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840259">
-Event.observe(document, 'mousemove', function(event)
-{
- $('mouse').value = "X: " + Event.pointerX(event) +
- "px Y: " + Event.pointerY(event) + "px";
-});
-</com:TTextHighlighter>
-
-<p id="840743" class="block-content">If we wanted to observe the mouse location when it was
-hovering over a certain element, we'd just change the document argument to
-the id or element that was relevant.</p>
-
-<h2 id="6705">Stopping Propagation</h2>
-
-<p id="840744" class="block-content"><tt>Event.stop(event)</tt> will stop the propagation of an event .</p>
-
-<h2 id="6706">Events, Binding, and Objects</h2>
-
-<p id="840745" class="block-content">Everything has been fairly straight forward so far, but things
-start getting a little trickier when you need to work with events in
-and object-oriented environment. You have to deal with binding and funky
-looking syntax that might take a moment to get your head around.</p>
-
-<p id="840746" class="block-content">Lets look at some code so you can get a better understanding of what I'm talking about.</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840260">
-EventDispenser = Class.create();
-EventDispenser.prototype =
-{
- initialize: function(list)
- {
- this.list = list;
-
- // Observe clicks on our list items
- $$(this.list + " li").each(function(item)
- {
- Event.observe(item, 'click', this.showTagName.bindEvent(this));
- }.bind(this));
-
- // Observe when a key on the keyboard is pressed.
- // In the observer, we check for
- // the tab key and alert a message if it is pressed.
- Event.observe(document, 'keypress', this.onKeyPress.bindEvent(this));
-
- // Observe our fake live search box. When a user types
- // something into the box, the observer will take that
- // value(-1) and update our search-results div with it.
- Event.observe('search', 'keypress', this.onSearch.bindEvent(this));
-
- Event.observe(document, 'mousemove', this.onMouseMove.bindEvent(this));
- },
-
- // Arbitrary functions to respond to events
- showTagName: function(event)
- {
- alert(Event.element(event).tagName);
- },
-
- onKeyPress: function(event)
- {
- var code = event.keyCode;
- if(code == Event.KEY_TAB)
- alert('Tab key was pressed');
- },
-
- onSearch: function(event)
- {
- Element.update('search-results', $F(Event.element(event)));
- },
-
- onMouseMove: function(event)
- {
- $('mouse').value = "X: " + Event.pointerX(event) +
- "px Y: " + Event.pointerY(event) + "px";
- }
-}
-</com:TTextHighlighter>
-<p id="840747" class="block-content">Whoa! What's going on here? Well, we've defined our a
-custom class <tt>EventDispenser</tt>. We're going to be using this class
-to setup events for our document. Most of this code is a
-rewrite of the code we looked at earlier except this time, we
-are working from inside an object.</p>
-
-<p id="840748" class="block-content">Looking at the <tt>initialize</tt> method, we can really see how
-things are different now. Take a look at the code below:</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840261">
-// Observe clicks on our list items
-$$(this.list + " li").each(function(item)
-{
- Event.observe(item, 'click', this.showTagName.bindEvent(this));
-}.bind(this));
-</com:TTextHighlighter>
-
-<p id="840749" class="block-content">We've got iterators, binding and all sorts of stuff going on.
-Lets break down what this chunk of code is doing.</p>
-
-<p id="840750" class="block-content">First we are hunting for a collection of elements based on
-it's CSS selector. This uses the Prototype selector function <tt>$$()</tt>.
-After we've found the list items we are dealing with we send
-those into an each iteration where we will add our observers.</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840262">
-Event.observe(item, 'click', this.showTagName.bindEvent(this));
-</com:TTextHighlighter>
-
-<p id="840751" class="block-content">Now looking at the code above, you'll notice the <tt>bindEvent</tt> function.
-This takes the method before it <tt>showTagName</tt> and treats it as the
-method that will be triggered when, in this case,
-someone clicks one of our list items.</p>
-
-<p id="840752" class="block-content">You'll also notice we pass this as an argument to the <tt>bindEvent</tt> function.
-This simply allows us to reference the object in context <tt>EventDispenser</tt>
-inside our function <tt>showTagName(event)</tt>. If the <tt>showTagName</tt> function
-requires additional parameters, you can attach them to the later parameters of <tt>bindEvent</tt>. For example</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840263">
-this.showTagName.bindEvent(this, param1, param2);
-
-//where the showTagName function is defined as
-showTime : function (event, param1, param2) { ... }
-</com:TTextHighlighter>
-
-<p id="840753" class="block-content">Moving on, you'll see <tt>bind(this)</tt> attached to our iterator function.
-This really has nothing to do with events, it is only here to allow me to
-use <tt>this</tt> inside the iterator. If we did not use <tt>bind(this)</tt>, I could not
-reference the method <tt>showTagName</tt> inside the iterator.</p>
-
-<p id="840754" class="block-content">Ok, so we'll move on to looking at our methods that actually get
-called when an event occurs. Since we've been dealing with <tt>showTagName</tt>, lets look at it.</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840264">
-showTagName: function(event)
-{
- alert(Event.element(event).tagName);
-}
-</com:TTextHighlighter>
-
-<p id="840755" class="block-content">As you can see, this function accepts one argument--the event.
-In order for us to get the element which fired the event we need to
-pass that argument to <tt>Event.element</tt>. Now we can manipulate it at will.</p>
-
-<p id="840756" class="block-content">This covers the most confusing parts of our code. The text above is also
-relevant to the remaining parts of our code. If there is anything about
-this you don't understand, feel free to ask questions in the forum.</p>
-
-<h2 id="6707">Removing Event Listeners</h2>
-
-<p id="840757" class="block-content">This one threw me for a loop the first time I tried to use it.
-I tried something similar to what I did in the <tt>Event.observe</tt>
-call with the exception of using <tt>stopObserving</tt>, but nothing seemed
-to change. In other words, the code below does <b>NOT</b> work.</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840265">
-$$(this.list + " li").each(function(item)
-{
- Event.stopObserving(item, 'click', this.showTagName);
-}.bind(this));
-</com:TTextHighlighter>
-
-<p id="840758" class="block-content">What's the deal here? The reason this does not work is because there
-is no pointer to the observer. This means that when we passed <tt>this.showTagName</tt>
-in the <tt>Event.observe</tt> method before hand, we passed it as an
-anonymous function. We can't reference an anonymous function
-because it simply does not have a pointer.</p>
-
-<p id="840759" class="block-content">So how do we get the job done? All we need to do is give the
-observing function a pointer, or the jargon free version: Set a variable
-that points to <tt>this.showTagName</tt>. Ok, lets change our code a bit.</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840266">
-this.showTagObserver = this.showTagName.bindEvent(this);
-
-// Observe clicks on our list items
-$$(this.list + " li").each(function(item)
-{
- Event.observe(item, 'click', this.showTagObserver);
-}.bind(this));
-</com:TTextHighlighter>
-
-<p id="840760" class="block-content">Now we can remove the event listeners from our list like this:</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840267">
-$$(this.list + " li").each(function(item)
-{
- Event.stopObserving(item, 'click', this.showTagObserver);
-}.bind(this));
-</com:TTextHighlighter>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/es/Scripts3.page b/demos/quickstart/protected/pages/Advanced/es/Scripts3.page
deleted file mode 100755
index 37885abb..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/Scripts3.page
+++ /dev/null
@@ -1,39 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="6801">Javascript in PRADO, Questions and Answers</h1>
-<h2 id="6802">How do I include the Javascript libraries distributed with Prado?</h2>
-<p id="880060" class="block-content">The javascript libraries distributed with Prado can be found in the
-<tt>framework/Web/Javascripts/source</tt> directory. The <tt>packages.php</tt>
-file in that directory defines a list of available package names available
-to be loaded. They can be loaded as follows.
-</p>
-<ul id="u1" class="block-content"><li>Adding libraries in the template
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_850268">
-&lt;com:TClientScript PradoScripts="effects" /&gt;
-</com:TTextHighlighter>
- </li>
- <li>Adding libraries in PHP code
- <com:TTextHighlighter Language="php" CssClass="source block-content" id="code_850269">
-$this->getPage()->getClientScript()->registerPradoScript("effects");
- </com:TTextHighlighter>
- </li>
-</ul>
-The available packaged libraries included in Prado are
-<ul id="u2" class="block-content">
- <li><tt>prado</tt> : basic PRADO javascript framework based on Prototype</li>
- <li><tt>effects</tt> : visual effects from script.aculo.us</li>
- <li><tt>ajax</tt> : ajax and callback related based on Prototype</li>
- <li><tt>validator</tt> : validation</li>
- <li><tt>logger</tt> : javascript logger and object browser</li>
- <li><tt>datepicker</tt> : datepicker</li>
- <li><tt>colorpicker</tt> : colorpicker</li>
-</ul>
-
-<p id="850761" class="block-content">The dependencies for each library are automatically resolved. Components
-that require a particular library will also automatically load the necessary libraries.
-For example, if you add a <tt>TDatePicker</tt> component on the page, the <tt>datepicker</tt>
-and its dependencies will be automatically included on the page.</p>
-
-<p id="850762" class="block-content">See <a href="?page=Controls.ClientScript">TClientScript</a> for options of adding
- your custom Javascript code to the page.</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/es/Security.page b/demos/quickstart/protected/pages/Advanced/es/Security.page
deleted file mode 100755
index c3d0b511..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/Security.page
+++ /dev/null
@@ -1,79 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="5601">Security</h1>
-
-<h2 id="5602">Viewstate Protection</h2>
-<p id="730563" class="block-content">
-Viewstate lies at the heart of PRADO. Viewstate represents data that can be used to restore pages to the state that is last seen by end users before making the current request. By default, PRADO uses hidden fields to store viewstate information.
-</p>
-<p id="730564" class="block-content">
-It is extremely important to ensure that viewstate is not tampered by end users. Without protection, malicious users may inject harmful code into viewstate and unwanted instructions may be performed when page state is being restored on server side.
-</p>
-<p id="730565" class="block-content">
-To prevent viewstate from being tampered, PRADO enforces viewstate HMAC (Keyed-Hashing for Message Authentication) check before restoring viewstate. Such a check can detect if the viewstate has been tampered or not by end users. Should the viewstate is modified, PRADO will stop restoring the viewstate and return an error message.
-</p>
-<p id="730566" class="block-content">
-HMAC check requires a private key that should be secret to end users. Developers can either manually specify a key or let PRADO automatically generate a key. Manually specified key is useful when the application runs on a server farm. To do so, configure <tt>TSecurityManager</tt> in application configuration,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_730186">
-&lt;modules&gt;
- &lt;module id="security"
- class="TSecurityManager"
- ValidationKey="my private key" /&gt;
-&lt;/modules&gt;
-</com:TTextHighlighter>
-<p id="730567" class="block-content">
-HMAC check does not prevent end users from reading the viewstate content. An added security measure is to encrypt the viewstate information so that end users cannot decipher it. To enable viewstate encryption, set the <tt>EnableStateEncryption</tt> of pages to true. This can be done in <a href="?page=Configurations.PageConfig">page configurations</a> or in page code. Note, encrypting viewstate may degrade the application performance. A better strategy is to store viewstate on the server side, rather than the default hidden field.
-</p>
-
-<h2 id="5603">Cross Site Scripting Prevention</h2>
-<p id="730568" class="block-content">
-Cross site scripting (also known as XSS) occurs when a web application gathers malicious data from a user. Often attackers will inject JavaScript, VBScript, ActiveX, HTML, or Flash into a vulnerable application to fool other application users and gather data from them. For example, a poorly design forum system may display user input in forum posts without any checking. An attacker can then inject a piece of malicious JavaScript code into a post so that when other users read this post, the JavaScript runs unexpectedly on their computers.
-</p>
-<p id="730569" class="block-content">
-One of the most important measures to prevent XSS attacks is to check user input before displaying them. One can do HTML-encoding with the user input to achieve this goal. However, in some situations, HTML-encoding may not be preferable because it disables all HTML tags.
-</p>
-<p id="730570" class="block-content">
-PRADO incorporates the work of <a href="http://pixel-apes.com/safehtml/">SafeHTML</a> and provides developers with a useful component called <tt>TSafeHtml</tt>. By enclosing content within a <tt>TSafeHtml</tt> component tag, the enclosed content are ensured to be safe to end users. In addition, the commonly used <tt>TTextBox</tt> has a <tt>SafeText</tt> property which contains user input that are ensured to be safe if displayed directly to end users.
-</p>
-
-<h2 id="5604">Cookie Attack Prevention</h2>
-<p id="730571" class="block-content">
-Protecting cookies from being attacked is of extreme important, as session IDs are commonly stored in cookies. If one gets hold of a session ID, he essentially owns all relevant session information.
-</p>
-<p id="730572" class="block-content">
-There are several countermeasures to prevent cookies from being attacked.
-</p>
-<ul id="u1" class="block-content">
- <li>An application can use SSL to create a secure communication channel and only pass the authentication cookie over an HTTPS connection. Attackers are thus unable to decipher the contents in the transferred cookies.</li>
- <li>Expire sessions appropriately, including all cookies and session tokens, to reduce the likelihood of being attacked.</li>
- <li>Prevent cross-site scripting (XSS) which causes arbitrary code to run in a user's browser and expose his cookies.</li>
- <li>Validate cookie data and detect if they are altered.</li>
-</ul>
-<p id="730573" class="block-content">
-PRADO implements a cookie validation scheme that prevents cookies from being modified. In particular, it does HMAC check for the cookie values if cookie validation is enable.
-</p>
-<p id="730574" class="block-content">
-Cookie validation is disabled by default. To enable it, configure the <tt>THttpRequest</tt> module as follows,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_730187">
-<modules>
- <module id="request" class="THttpRequest" EnableCookieValidation="true" />
-</modules>
-</com:TTextHighlighter>
-<p id="730575" class="block-content">
-To make use of cookie validation scheme provided by PRADO, you also need to retrieve cookies through the <tt>Cookies</tt> collection of <tt>THttpRequest</tt> by using the following PHP statements,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_730188">
-foreach($this->Request->Cookies as $cookie)
- // $cookie is of type THttpCookie
-</com:TTextHighlighter>
-<p id="730576" class="block-content">
-To send cookie data encoded with validation information, create new <tt>THttpCookie</tt> objects and add them to the <tt>Cookies</tt> collection of <tt>THttpResponse</tt>,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_730189">
-$cookie=new THttpCookie($name,$value);
-$this->Response->Cookies[]=$cookie;
-</com:TTextHighlighter>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/es/State.page b/demos/quickstart/protected/pages/Advanced/es/State.page
deleted file mode 100755
index c43a9dff..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/State.page
+++ /dev/null
@@ -1,54 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="6001">Persistent State</h1>
-<p id="770606" class="block-content">
-Web applications often need to remember what an end user has done in previous page requests so that the new page request can be served accordingly. State persistence is to address this problem. Traditionally, if a page needs to keep track of user interactions, it will resort to session, cookie, or hidden fields. PRADO provides a new line of state persistence schemes, including view state, control state, and application state.
-</p>
-
-<h2 id="6002">View State</h2>
-<p id="770607" class="block-content">
-View state lies at the heart of PRADO. With view state, Web pages become stateful and are capable of restoring pages to the state that end users interacted with before the current page request. Web programming thus resembles to Windows GUI programming, and developers can think continuously without worrying about the round trips between end users and the Web server. For example, with view state, a textbox control is able to detect if the user input changes the content in the textbox.
-</p>
-<p id="770608" class="block-content">
-View state is only available to controls. View state of a control can be disabled by setting its <tt>EnableViewState</tt> property to false. To store a variable in view state, call the following,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_770197">
-$this->setViewState('Caption',$caption);
-</com:TTextHighlighter>
-<p id="770609" class="block-content">
-where <tt>$this</tt> refers to the control object, <tt>Caption</tt> is a unique key identifying the <tt>$caption</tt> variable stored in viewstate. To retrieve the variable back from view state, call the following,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_770198">
-$caption = $this->getViewState('Caption');
-</com:TTextHighlighter>
-
-<h2 id="6003">Control State</h2>
-<p id="770610" class="block-content">
-Control state is like view state in every aspect except that control state cannot be disabled. Control state is intended to be used for storing crucial state information without which a page or control may not work properly.
-</p>
-<p id="770611" class="block-content">
-To store and retrieve a variable in control state, use the following commands,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_770199">
-$this->setControlState('Caption',$caption);
-$caption = $this->getControlState('Caption');
-</com:TTextHighlighter>
-
-<h2 id="6004">Application State</h2>
-<p id="770612" class="block-content">
-Application state refers to data that is persistent across user sessions and page requests. A typical example of application state is the user visit counter. The counter value is persistent even if the current user session terminates. Note, view state and control state are lost if the user requests for a different page, while session state is lost if the user session terminates.
-</p>
-<p id="770613" class="block-content">
-To store and retrieve a variable in application state, use the following commands,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_770200">
-$application->setGlobalState('Caption',$caption);
-$caption = $application->getGlobalState('Caption');
-</com:TTextHighlighter>
-
-<h2 id="6005">Session State</h2>
-<p id="770614" class="block-content">
-PRADO encapsulates the traditional session management in <tt>THttpSession</tt> module. The module can be accessed from within any component by using <tt>$this->Session</tt>, where <tt>$this</tt> refers to the component object.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/es/Themes.page b/demos/quickstart/protected/pages/Advanced/es/Themes.page
deleted file mode 100755
index 4e440ce5..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/Themes.page
+++ /dev/null
@@ -1,60 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="5901">Themes and Skins</h1>
-
-<h2 id="5902">Introduction</h2>
-<p id="760596" class="block-content">
-Themes in PRADO provide a way for developers to provide a consistent look-and-feel across an entire web application. A theme contains a list of initial values for properties of various control types. When applying a theme to a page, all controls on that page will receive the corresponding initial property values from the theme. This allows themes to interact with the rich property sets of the various PRADO controls, meaning that themes can be used to specify a large range of presentational properties that other theming methods (e.g. CSS) cannot. For example, themes could be used to specify the default page size of all data grids across an application by specifying a default value for the <tt>PageSize</tt> property of the <tt>TDataGrid</tt> control.
-</p>
-
-<h2 id="5903">Understanding Themes</h2>
-<p id="760597" class="block-content">
-A theme is a directory consists of skin files, javascript files and CSS files. Any javascript or CSS files contained in a theme will be registered with the page that the theme is applied to. A skin is a set of initial property values for a particular control type. A control type may have one or several skins, each identified by a unique <tt>SkinID</tt>. When applying a theme to a page, a skin is applied to a control if the control type and the <tt>SkinID</tt> value both match to those of the skin. Note, if a skin has an empty <tt>SkinID</tt> value, it will apply to all controls of the particular type whose <tt>SkinID</tt> is not set or empty. A skin file consists of one or several skins, for one or several control types. A theme is the union of skins defined in all skin files.
-</p>
-
-<h2 id="5904">Using Themes</h2>
-<p id="760598" class="block-content">
-To use a theme, you need to set the <tt>Theme</tt> property of the page with the theme name, which is the theme directory name. You may set it in either <a href="?page=Configurations.PageConfig">page configurations</a> or in the constructor or <tt>onPreInit()</tt> method of the page. You cannot set the property after <tt>onPreInit()</tt> because by that time, child controls of the page are already created (skins must be applied to controls right after they are created.)
-</p>
-<p id="760599" class="block-content">
-To use a particular skin in the theme for a control, set <tt>SkinID</tt> property of the control in template like following,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_760194">
-&lt;com:TButton SkinID="Blue" ... /&gt;
-</com:TTextHighlighter>
-<p id="760600" class="block-content">
-This will apply the 'Blue' skin to the button. Note, the initial property values specified by the 'Blue' skin will overwrite any existing property values of the button. Use stylesheet theme if you do not want them to be overwritten. To use stylesheet theme, set the <tt>StyleSheetTheme</tt> property of the page instead of <tt>Theme</tt> (you can have both <tt>StyleSheetTheme</tt> and <tt>Theme</tt>).
-</p>
-<p id="760601" class="block-content">
-To use the Javascript files and CSS files contained in a theme, a <tt>THead</tt> control must be placed on the page template. This is because the theme will register those files with the page and <tt>THead</tt> is the right place to load those files.
-</p>
-<p id="760602" class="block-content">
-It is possible to specify media types of CSS files contained in a theme. By default, a CSS file applies to all media types. If the CSS file is named like <tt>mystyle.print.css</tt>, it will be applied only to <tt>print</tt> media type. As another example, <tt>mystyle.screen.css</tt> applies to <tt>screen</tt> media only, and <tt>mystyle.css</tt> applies to all media types.
-</p>
-
-<h2 id="5905">Theme Storage</h2>
-<p id="760603" class="block-content">
-All themes by default must be placed under the <tt>[AppEntryPath]/themes</tt> directory, where <tt>AppEntryPath</tt> refers to the directory containing the application entry script. If you want to use a different directory, configure the <tt>BasePath</tt> and <tt>BaseUrl</tt> properties of the <tt>System.Web.UI.TThemeManager</tt> module in application configuration,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_760195">
-&lt;service id="page" class="TPageService"&gt;
- &lt;modules&gt;
- &lt;module id="theme"
- class="System.Web.UI.TThemeManager"
- BasePath="mythemes"
- BaseUrl="mythemes" /&gt;
- &lt;/modules&gt;
-&lt;/service&gt;
-</com:TTextHighlighter>
-
-<h2 id="5906">Creating Themes</h2>
-<p id="760604" class="block-content">
-Creating a theme involves creating the theme directory and writing skin files (and possibly Javascript and CSS files). The name of skin files must be terminated with <tt>.skin</tt>. The format of skin files are the same as that of control template files. Since skin files do not define parent-child presentational relationship among controls, you cannot place a component tag within another. And any static texts between component tags are discarded. To define the aforementioned 'Blue' skin for <tt>TButton</tt>, write the following in a skin file,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_760196">
-&lt;com:TButton SkinID="Blue" BackColor="blue" /&gt;
-</com:TTextHighlighter>
-<p id="760605" class="block-content">
-As aforementioned, you can put several skins within a single skin file, or split them into several files. A commonly used strategy is that each skin file only contains skins for one type of controls. For example, <tt>Button.skin</tt> would contain skins only for the <tt>TButton</tt> control type.
-</p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/es/exception.gif b/demos/quickstart/protected/pages/Advanced/es/exception.gif
deleted file mode 100755
index 93b1a07f..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/exception.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Advanced/es/exception2.gif b/demos/quickstart/protected/pages/Advanced/es/exception2.gif
deleted file mode 100755
index 5fe0e625..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/exception2.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Advanced/es/logrouter.gif b/demos/quickstart/protected/pages/Advanced/es/logrouter.gif
deleted file mode 100755
index 5a74dfe1..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/logrouter.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Advanced/es/mastercontent.gif b/demos/quickstart/protected/pages/Advanced/es/mastercontent.gif
deleted file mode 100755
index 9354d65c..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/mastercontent.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Advanced/es/pcrelation.gif b/demos/quickstart/protected/pages/Advanced/es/pcrelation.gif
deleted file mode 100755
index c1960d74..00000000
--- a/demos/quickstart/protected/pages/Advanced/es/pcrelation.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Advanced/id/Assets.page b/demos/quickstart/protected/pages/Advanced/id/Assets.page
deleted file mode 100755
index b34426ea..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/Assets.page
+++ /dev/null
@@ -1,69 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="5701">Assets</h1>
-<p id="740577" class="block-content">
-Asset adalah file sumber daya (seperti gambar, suara, video, CSS stylesheet, javascript, dll.) yang dimiliki oleh kelas komponen tertentu. Assets disediakan bagi para pengguna Web. Untuk kegunaan dan kemudahan penyebaran kelas komponen terkait, asset harus berada bersama dengan file kelas komponen. Sebagai contoh, tombol toggle dapat memakai dua gambar, disimpan dalam file <tt>down.gif</tt> dan <tt>up.gif</tt>, untuk menampilkan kondisi toggle berbeda. Jika kita ingin file gambar disimpan di bawah direktori <tt>images</tt> di bawah akar dokumen server Web, tidak akan memembuat nyaman bagi para pengguna komponen tombol toggle, karena setiap kali mereka mengembangkan atau menyebarkan aplikasi baru, mereka harus meng-copy file gambar ke direktori tertentu itu secara manual. Untuk mengeliminir persyaratan ini, direktori relatif ke file kelas komponen harus digunakan untuk menyimpan file gambar. Strategi umum adalah menggunakan direktori yang berisi file kelas komponen untuk menyimpan file asset.
-</p>
-<p id="740578" class="block-content">
-Karena direktori yang berisi file kelas komponen biasanya tidak bisa diakses oleh pengguna Web, PRADO menerapkan skema penerbitan asset untuk menjadikan assets tersedia bagi para pengguna Web. Sebuah asset, setelah diterbitkan, akan mempunyai URL di mana para pengguna bisa mengambil file asset.
-</p>
-
-<h2 id="5702">Penerbitan Asset</h2>
-<p id="740579" class="block-content">
-PRADO menyediakan beberapa metode untuk penerbitan asset atau direktori yang berisi asset:
-</p>
-<ul id="u1" class="block-content">
-<li>Dalam file template, Anda dapat menggunakan <a href="?page=Configurations.Templates2#at">tag asset</a> guna menerbitkan asset dan mendapatkan URL-nya. Catatan, asset harus relatif ke direktori yang berisi file template.</li>
-<li>Dalam kode PHP, Anda dapat memanggil <tt>$object->publishAsset($assetPath)</tt> untuk menerbitkan asset dan mendapatkan URL-nya. <tt>$object</tt> di sini merujuk ke turunan <tt>TApplicationComponent</tt> atau kelas asalnya, dan <tt>$assetPath</tt> adalah file atau direktori relatif ke direktori yang berisi file kelas.</li>
-<li>Jika Anda ingin menerbitkan asset sesuka hati, Anda perlu memanggil <tt>TAssetManager::publishFilePath($path)</tt>.</li>
-</ul>
-<p id="740580" class="block-content">
-HATI-HATI: Berhati-hatilah dengan penerbitan asset, karena ia memberikan para pengguna Web mengakses ke file yang sebelumnya tidak dapat diakses. Pastikan bahwa Anda tidak menerbitkan file yang tidak ingin dilihat pengguna lain.
-</p>
-
-<h2 id="5703">Kustomisasi</h2>
-<p id="740581" class="block-content">
-Penerbitan asset diatur oleh modul <tt>System.Web.TAssetManager</tt>. Standarnya, semua file asset yang diterbitkan disimpan di bawah direktori <tt>[AppEntryPath]/assets</tt>, di mana <tt>AppEntryPath</tt> merujuk ke direktori yang berisi naskah entri aplikasi. Pastikan direktori <tt>assets</tt> bisa ditulisi oleh proses server Web. Anda dapat mengubah direktorinya ke direktori lain dengan mengkonfigurasi properti <tt>BasePath</tt> dan <tt>BaseUrl</tt> pada modul <tt>TAssetManager</tt> dalam konfigurasi aplikasi,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code1">
-&lt;modules&gt;
- &lt;module id="asset"
- class="System.Web.TAssetManager"
- BasePath="Web.images"
- BaseUrl="images" /&gt;
-&lt;/modules&gt;
-</com:TTextHighlighter>
-
-<h2 id="5704">Performansi</h2>
-<p id="740582" class="block-content">
-PRADO menggunakan teknik cache guna memastikan efisiensi penerbitan asset. Menerbitkan asset intinya memerlukan operasi copy file, yang mahal. Untuk menyimpan operasi copy file yang tidak diperlukan, <tt>System.Web.TAssetManager</tt> hanya menerbitkan asset saat ia memiliki waktu modifikasi file lebih baru daripada file yang pernah diterbitkan. Ketika aplikasi dijalankan dengan mode <tt>Performance</tt>, pemeriksaan cap waktu tersebut juga diabaikan.
-</p>
-<p id="740583" class="block-content">
-SARAN: Jangan menggunakan penerbitan asset secara berlebihan. Konsep asset dipakai terutama untuk membantu pemakaian ulang dan redistribusi kelas komponen agar lebih baik. Normalnya, Anda tidak akan menggunakan penerbitan asset untuk sumberdaya yang tidak terikat ke komponen mana pun dalam aplikasi. Sebagai contoh, Anda jangan menggunakan penerbitan asset untuk gambar yang digunakan terutama sebagai elemen desain (misalnya logo, gambar latar belakang, dll). Biarkan server Web melayani gambar ini secara langsung yang akan membantu meningkatkan performansi aplikasi Anda.
-</p>
-
-<h2 id="5705">Contoh Tombol Toggle</h2>
-<p id="740584" class="block-content">
-Sekarang kita menggunakan contoh tombol toggle untuk menjelaskan penggunaan asset. Kontrol menggunakan dua file gambar <tt>up.gif</tt> dan <tt>down.gif</tt>, yang disimpan di bawah direktori yang berisi file kelas. Ketika tombol dalam kondisi <tt>Up</tt>, kita ingin menampilkan gambar <tt>up.gif</tt>. Ini dapat dikerjakan seperti berikut,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code2">
-class ToggleButton extends TWebControl {
- ...
- protected function addAttributesToRender($writer) {
- ...
- if($this->getState()==='Up') {
- $url=$this->getAsset('up.gif');
- $writer->addAttribute('src',$url);
- }
- ...
- }
- ...
-}
-</com:TTextHighlighter>
-<p id="740585" class="block-content">
-Dalam contoh di atas, pemanggilan <tt>$this->getAsset('up.gif')</tt> akan menerbitkan file gambar <tt>up.gif</tt> dan mengembalikan URL untuk file gambar yang diterbitkan. URL kemudian disajikan sebagai atribut dari tag gambar HTML.
-</p>
-<p id="740586" class="block-content">
-Untuk meredistribusi <tt>ToggleButton</tt>, cukup paketkan bersama file kelas dan file gambar. Para pengguna <tt>ToggleButton</tt> cuma perlu untuk mengurai file, dan mereka bisa menggunakannya secara langsung tanpa mencemaskan mengenai ke mana meng-copy file gambar itu.
-</p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/id/Auth.page b/demos/quickstart/protected/pages/Advanced/id/Auth.page
deleted file mode 100755
index eb7ab026..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/Auth.page
+++ /dev/null
@@ -1,170 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="5501">Otentikasi dan Otorisasi</h1>
-<p id="720549" class="block-content">
-Otentikasi adalah proses verifikasi apakah seseorang yang mengaku siapa dirinya. Biasanya menyangkut nama pengguna dan kata sandi, tapi bisa menyertakan metode lain dari mendemonstrasikan identitas, seperti kartu pintar, sidik jari, dll.
-</p>
-<p id="720550" class="block-content">
-Otorisasi adalah mendapatkan keterangan jika orang yang sekali teridentifikasi, diijinkan untuk memanipulasi sumber daya tertentu. Ini biasanya ditentukan dengan menyelidiki apakah orang itu memiliki aturan akses tertentu terhadap sumber daya atau tidak.
-</p>
-
-<h2 id="5502">Bagaimana Kerangka Kerja Otentikasi PRADO Bekerja</h2>
-<p id="720551" class="block-content">
-PRADO menyediakan kerangka kerja otentikasi/otorisasi yang dapat diperluas. Seperti dijelaskan dalam <a href="?page=Fundamentals.Applications">masa hidup aplikasi</a>, <tt>TApplication</tt> menyimpan beberapa masa hidup untuk modul yang bertanggung jawab terhadap otentikasi dan otorisasi. PRADO menyediakan modul <tt>TAuthManager</tt> untuk keperluan tersebut. Para pengembang dapat memasukan modul otentikasinya sendiri dengan mudah. <tt>TAuthManager</tt> didesain untuk dipakai bersama dengan modul <tt>TUserManager</tt>, yang menerapkan datbase pengguna hanya-baca.
-</p>
-<p id="720552" class="block-content">
-Ketika sebuah permintaan halaman terjadi, <tt>TAuthManager</tt> akan mencoba untuk mengembalikan informasi pengguna dari sesi. Jika tidak ada informasi pengguna yang ditemukan, pengguna dianggap sebagai pengguna anonim atau tamu. Guna menjembatani verifikasi identitas pengguna, <tt>TAuthManager</tt> menyediakan dua metode yang umum dipakai: <tt>login()</tt> dan <tt>logout()</tt>. Pengguna dimasukan (diverifikasi) jika entitas nama pengguna serta kata sandinya sama dengan rekaman dalam database pengguna yang diatur oleh <tt>TUserManager</tt>. Pengguna dikeluarkan jika informasi pengguna dihapus dari sesi dan dia perlu masuk lagi jika dia membuat permintaan baru terhadap halaman.
-</p>
-<p id="720553" class="block-content">
-Selama masa hidup aplikasi <tt>Otorisasi</tt>, yang terjadi setelah masa hidup <tt>Otentikasi</tt>, <tt>TAuthManager</tt> akan memverifikasi apakah pengguna saat ini mempunyai akses ke halaman yang diminta berdasarkan set aturan otorisasi. Otorisasi adalah berbasis-aturan, misalnya seorang pengguna memiliki akses ke sebuah halaman jika 1) halaman secara ekplisit menyatakan bahwa pengguna mempunyai akses; 2) atau pengguna adalah aturan tertentu yang memiliki akses ke halaman. Jika pengguna tidak mempunyai akses ke halaman, <tt>TAuthManager</tt> akan mengalihkan browser pengguna ke halaman masuk yang ditetapkan oleh properti <tt>LoginPage</tt>.
-</p>
-
-<h2 id="5503">Menggunakan Kerangka Kerja Otentikasi PRADO</h2>
-<p id="720554" class="block-content">
-Untuk menghidupkan kerangka kerja otentikasi PRADO, tambahkan modul <tt>TAuthManager</tt> dan modul <tt>TUserManager</tt> ke <a href="?page=Configurations.AppConfig">konfigurasi aplikasi</a>,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code1">
-&lt;service id="page" class="TPageService"&gt;
- &lt;modules&gt;
- &lt;module id="auth" class="System.Security.TAuthManager"
- UserManager="users" LoginPage="UserLogin" /&gt;
- &lt;module id="users" class="System.Security.TUserManager"
- PasswordMode="Clear"&gt;
- &lt;user name="demo" password="demo" /&gt;
- &lt;user name="admin" password="admin" /&gt;
- &lt;/module&gt;
- &lt;/modules&gt;
-&lt;/service&gt;
-</com:TTextHighlighter>
-<p id="720555" class="block-content">
-Di atas, properti <tt>UserManager</tt> dari <tt>TAuthManager</tt> disetel ke modul <tt>users</tt> yang adalah <tt>TUserManager</tt>. Para pengembang dapat menggantinya dengan modul manajemen pengguna yang berasal dari <tt>TUserManager</tt>.
-</p>
-<p id="720556" class="block-content">
-Aturan otorisasi untuk halaman ditetapkan dalam <a href="?page=Configurations.PageConfig">konfigurasi halaman</a> seperti berikut,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code2">
-&lt;authorization&gt;
- &lt;allow pages="PageID1,PageID2"
- users="User1,User2"
- roles="Role1" /&gt;
- &lt;deny pages="PageID1,PageID2"
- users="?"
- verb="post" /&gt;
-&lt;/authorization&gt;
-</com:TTextHighlighter>
-<p id="720557" class="block-content">
-Aturan otorisasi bisa berupa aturan <tt>allow</tt> atau aturan <tt>deny</tt>. Setiap aturan terdiri dari empat properti opsional:
-</p>
-<ul id="u1" class="block-content">
-<li><tt>pages</tt> - daftar nama halaman dipisahkan koma yang menerapkan aturan ini. Jika kosong atau tidak disetel, aturan ini akan berlaku ke semua halaman di bawah direktori saat ini dan seluruh subdirektorinya secara rekursif.</li>
-<li><tt>users</tt> - daftar nama pengguna yang menerapkan aturan dipisahkan koma di mana aturan ini berlaku. Karakter * menunjukan semua pengguna termasuk pengguna anonim/tamu. Karakter ? menunjukan pengguna anonim/tamu . Dan karakter @ menunjukan pengguna terotentikasi (tersedia sejak v3.1).</li>
-<li><tt>roles</tt> - daftar aturan pengguna yang menerapkan aturan ini.</li>
-<li><tt>verb</tt> - metode akses halaman yang memberlakukan aturan ini. Ia bisa berupa <tt>get</tt> atau <tt>post</tt>. Jika kosong atau tidak disetel, aturan berlaku untuk kedua metode tersebut.</li>
-</ul>
-
-<p id="720558" class="block-content">
-Ketika permintaan halaman sedang diproses, daftar aturan otorisassi menjadi tersedia. Akan tetapi, hanya aturan <i>efektif yang pertama</i> <i>menyamai</i> pengguna saat ini akan menyajikan hasil otorisasi.
-</p>
-<ul id="u2" class="block-content">
-<li>Aturan diurut dari bawah-ke atas, misalnya aturan yang berisi dalam konfigurasi dari folder halaman saat ini menjadi yang pertama. Aturan dalam konfigurasi dari folder halaman leluhurnya menjadi yang berikutnya.</li>
-<li>Sebuah aturan efektif jika halaman saat ini dalam halaman yang didaftarkan pada aturan DAN aksi pengguna saat ini (<tt>get</tt> atau <tt>post</tt>) dalam aksi terdaftar.</li>
-<li>Sebuah aturan sama terjadi jika nama pengguna saat ini ada dalam daftar nama pengguna pada aturan <i>efektif</i> ATAU jika aturan pengguna ada dalam aturan terdaftar yang mengaturnya.</li>
-<li>Jika tidak ada aturan yang sama, pengguna diotorisasi.</li>
-</ul>
-<p id="720559" class="block-content">
-Dalam contoh di atas, pengguna anonim akan ditolak atas penulisan ke <tt>PageID1</tt> dan <tt>PageID2</tt>, sementara <tt>User1</tt> dan <tt>User2</tt> dan semua pengguna aturan <tt>Role1</tt> bisa mengakses dua halaman (baik metode <tt>get</tt> maupun <tt>post</tt>).
-</p>
-<com:SinceVersion Version="3.1.1" />
-<p class="block-content">
-Sejak versi 3.1.1, atribut <tt>pages</tt> dalam aturan otorisasi dapat mengambil path halaman relatif dengan '*'. Sebagai contoh, <tt>pages="admin.Home"</tt> merujuk ke halaman <tt>Home</tt> di bawah direktori <tt>admin</tt>, dan <tt>pages="admin.*"</tt> akan merujuk ke seluruh halaman di bawah direktori <tt>admin</tt> dan subdirektorinya.
-</p>
-
-<p class="block-content">
-Juga diperkenalkan dalam versi 3.1.1 adalah aturan IP. Ini ditetapkan oleh atribut baru <tt>ip</tt> dalam aturan otorisasi. Aturan IP dipakai untuk menentukan apakah aturan otorisasi berlaku ke pengguna-akhir berdasarkan alamat IP-nya. Seseorang dapat mendaftar beberapa IP sekaligus, dipisahkan dengan koma ','. Wildcard '*' dapat dipakai dalam aturan. Sebagai contoh, <tt>ip="192.168.0.2, 192.168.1.*"</tt> berarti aturan berlaku untuk para pengguna yang alamat IP-nya 192.168.0.2 atau 192.168.1.*. Yang kedua sama dengan setiap host dalam subnet 192.168.1.
-</p>
-
-<h2 id="5504">Menggunakan <tt>TUserManager</tt></h2>
-<p id="720560" class="block-content">
-Seperti telah disebutkan di atas, <tt>TUserManager</tt> menerapkan database pengguna hanya-baca. Informasi pengguna ditetapkan baik dalam konfigurasi aplikasi ataupun file XML eksternal.
-</p>
-<p id="720561" class="block-content">
-Kita telah melihat contoh di atas yang menggunakan dua pengguna ditetapkan dalam konfigurasi aplikasi. Sintaks lengkap atas penetapan pengguna dan informasi aturan adalah sebagai berikut,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code3">
-&lt;user name="demo" password="demo" roles="demo,admin" /&gt;
-&lt;role name="admin" users="demo,demo2" /&gt;
-</com:TTextHighlighter>
-<p id="720562" class="block-content">
-di mana atribut <tt>roles</tt> dalam elemen <tt>user</tt> adalah opsional. Aturan pengguna dapat ditetapkan baik dalam elemen <tt>user</tt> ataupun dalam elemen <tt>role</tt> terpisah.
-</p>
-
-<h2 id="5505">Menggunakan <tt>TDbUserManager</tt></h2>
-<p id="720563" class="block-content">
-<tt>TDbUserManager</tt> diperkenalkan dalam v3.1.0. Tujuan utamanya adalah untuk menyederhanakan tugas pengaturan akun pengguna yang disimpan dalam sebuah database. Ini membutuhkan para pengembang untuk menulis kelas pengguna yang mewakili informasi yang diperlukan untuk akun pengguna. Kelas pengguna harus diperluas dari <tt>TDbUser</tt>.
-</p>
-<p id="720564" class="block-content">
-Untuk menggunakan <tt>TDbUserManager</tt>, konfigurasi itu dalam konfigurasi aplikasi seperti berikut:
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code4">
-<module id="db"
- class="System.Data.TDataSourceConfig" ..../>
-<module id="users"
- class="System.Security.TDbUserManager"
- UserClass="Path.To.MyUserClass"
- ConnectionID="db" />
-<module id="auth"
- class="System.Security.TAuthManager"
- UserManager="users" LoginPage="Path.To.LoginPage" />
-</com:TTextHighlighter>
-
-</p>
-<p id="720565" class="block-content">
-Dalam contoh di atas, <tt>UserClass</tt> menetapkan bahwa kelas akan dipakai untuk membuat turunan pengguna. Kelas harus diperluas dari <tt>TDbUser</tt>. <tt>ConnectionID</tt> merujuk ke ID dari modul <tt>TDataSourceConfig</tt> yang menetapkan bagaimana untuk melakukan koneksi database guna mendapatkan informasi penggunanya.
-</p>
-<p id="720566" class="block-content">
-Kelas pengguna harus menerapkan dua metode abstrak dalam <tt>TDbUser</tt>: <tt>validateUser()</tt> dan <tt>createUser()</tt>. Karena informasi akun pengguna disimpan dalam sebuah database, kelas pengguna dapat menggunakan properti <tt>DbConnection</tt>-nya untuk menjangkau database.
-</p>
-<com:SinceVersion Version="3.1.1" />
-<p id="720567" class="block-content">
-Sejak versi 3.1.1, <tt>TAuthManager</tt> menyediakan dukungan guna membolehkan mengingat yang masuk dengan menyetel <tt>AllowAutoLogin</tt> menjadi true. Oleh karena itu, <tt>TDbUser</tt> menambahkan dua metode untuk memfasilitasi implementasi fitur ini. Dalam keadaan tertentu, dua metode baru diperkenalkan: <tt>createUserFromCookie()</tt> dan <tt>saveUserToCookie()</tt>. Para pengembang harus mengimplementasikan dua metode ini jika mengingat yang sudah masuk diperlukan. Di bawah ini adalah contoh implementasi:
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code5">
-public function createUserFromCookie($cookie)
-{
- if(($data=$cookie->Value)!=='')
- {
- $application=Prado::getApplication();
- if(($data=$application->SecurityManager->validateData($data))!==false)
- {
- $data=unserialize($data);
- if(is_array($data) && count($data)===3)
- {
- list($username,$address,$token)=$data;
- $sql='SELECT passcode FROM user WHERE LOWER(username)=:username';
- $command=$this->DbConnection->createCommand($sql);
- $command->bindValue(':username',strtolower($username));
- if($token===$command->queryScalar() && $token!==false && $address=$application->Request->UserHostAddress)
- return $this->createUser($username);
- }
- }
- }
- return null;
-}
-
-public function saveUserToCookie($cookie)
-{
- $application=Prado::getApplication();
- $username=strtolower($this->Name);
- $address=$application->Request->UserHostAddress;
- $sql='SELECT passcode FROM user WHERE LOWER(username)=:username';
- $command=$this->DbConnection->createCommand($sql);
- $command->bindValue(':username',strtolower($username));
- $token=$command->queryScalar();
- $data=array($username,$address,$token);
- $data=serialize($data);
- $data=$application->SecurityManager->hashData($data);
- $cookie->setValue($data);
-}
-</com:TTextHighlighter>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/id/Collections.page b/demos/quickstart/protected/pages/Advanced/id/Collections.page
deleted file mode 100755
index e79da29c..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/Collections.page
+++ /dev/null
@@ -1,135 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="5501">Koleksi</h1>
-<p id="710529" class="block-content">
-Koleksi adalah struktur data dasar dalam pemrograman. Sebagai tambahan pada pemrograman PHP, array dipakai secara luas untuk mewakili koleksi struktur data. Array PHP adalah campuran dari array berindeks-kardinal dan tabel campuran.
-</p>
-<p id="710530" class="block-content">
-Untuk menghidupkan manipulasi obyek-terorientasi atas koleksi, PRADO menyediakan kelas koleksi yang bertenaga. Diantaranya, <tt>TList</tt> dan <tt>TMap</tt> adalah yang paling mendasar dan biasanya melayani sebagai basis kelas untuk kelas koleksi lainnya. Karena banyak komponen PRADO memiliki properti yang bertipe koleksi, penting bagi para pengembang untuk menguasai pemakaian kelas koleksi PRADO.
-</p>
-
-<h2 id="5502">Menggunakan <tt>TList</tt></h2>
-<p id="710531" class="block-content">
-Obyek <tt>TList</tt> mewakili array berindeks-kardinal, misalnya array (obyek) dengan indeks 0, 1, 2, ...
-</p>
-<p id="710532" class="block-content">
-<tt>TList</tt> bisa dipakai seperti array PHP. Sebagai contoh,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code1">
-$list=new TList; // buat obyek list
-...
-$item=$list[$index]; // baca item pada indeks yang ditetapkan
-$list[]=$item; // tambah item di akhir
-$list[$index]=$item; // ganti item pada indeks yang ditetapkan
-unset($list[$index]); // hapus item di posisi $index
-if(isset($list[$index])) // uji apakah daftar memiliki item di posisi $index
-foreach($list as $index=>$item) // jelajahi setiap item dalam daftar
-</com:TTextHighlighter>
-
-<p id="710533" class="block-content">
-Untuk memperoleh jumlah item dalam daftar, gunakan properti <tt>Count</tt>. Catatan, jangan gunakan <tt>count($list)</tt>, karena ia selalu mengembalikan 1.
-</p>
-
-<p id="710534" class="block-content">
-Sebagai tambahan, <tt>TList</tt> menerapkan beberapa metode yang nyaman untuk dipakai secara umum guna memanipulasi data dalam sebuah daftar. Ini termasuk
-</p>
-<ul id="u1" class="block-content">
- <li><tt>clear()</tt>: membersihkan seluruh item dalam daftar.</li>
- <li><tt>contains()</tt>: menguji apakah daftar berisi item yang ditetapkan.</li>
- <li><tt>indexOf()</tt>: mendapatkan indeks berbasis-nol dari item yang ditetapkan dalam daftar.</li>
- <li><tt>toArray()</tt>: mengembalikan perwakilan array atas item dalam daftar.</li>
- <li><tt>copyFrom()</tt>: mempopulasikan daftar dengan data dari array atau obyek yang bisa dijelajahi (termasuk <tt>TList</tt>). Item yang sudah ada akan dihapus terlebih dahulu.</li>
- <li><tt>mergeWith()</tt>: menambahkan daftar dengan data dari array atau obyek yang bisa dijelajahi (termasuk <tt>TList</tt>).</li>
-</ul>
-
-<h3 id="5504">Menggunakan properti komponen berbasis-<tt>TList</tt></h3>
-<p id="710535" class="block-content">
-Seperti telah disebutkan di atas, banyak properti komponen PRADO didasarkan pada <tt>TList</tt> atau kelas koleksi berasal dari <tt>TList</tt>. Properti ini semuanya berbagi pemakaian tersebut di atas.
-</p>
-<p id="710536" class="block-content">
-Sebagai contoh, <tt>TControl</tt> (basis kelas untuk semua kontrol PRADO) mempunyai properti yang disebut <tt>Controls</tt> yang mewakili koleksi dari kontrol anak. Tipe <tt>Controls</tt> adalah <tt>TControlCollection</tt> yang memperluas <tt>TList</tt>. Oleh karena itu, untuk menambahkan kontrol anak baru, kita dapat menggunakan cara berikut,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code2">
-$control->Controls[]=$newControl;
-</com:TTextHighlighter>
-<p id="710537" class="block-content">
-Untuk menjelajahi melalui kontrol anak, kita bisa menggunakan,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code3">
-foreach($control->Controls as $childControl) ...
-</com:TTextHighlighter>
-<p id="710538" class="block-content">
-Controh lain adalah properti <tt>Items</tt>, tersedia dalam kontrol list, <tt>TRepeater</tt>, <tt>TDataList</tt> dan <tt>TDataGrid</tt>. Dalam kontrol ini, kelas leluhur dari <tt>Items</tt> adalah <tt>TList</tt>.
-</p>
-
-<h3 id="5505">Memperluas <tt>TList</tt></h3>
-<p id="710539" class="block-content">
-Seringkali kita ingin memperluas <tt>TList</tt> untuk melakukan operasi tambahan untuk setiap penambahan atau penghapusan sebuah item. Satu-satunya metode yang diperlukan kelas anak untuk mengganti adalah <tt>insertAt()</tt> dan <tt>removeAt()</tt>. Sebagai contoh, guna memastikan daftar hanya berisi item yang bertipe <tt>TControl</tt>, kita dapat mengganti <tt>insertAt()</tt> sebagai berikut,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code4">
-public function insertAt($index,$item)
-{
- if($item instanceof TControl)
- parent::insertAt($index,$item)
- else
- throw new Exception('TControl required.');
-}
-</com:TTextHighlighter>
-
-
-<h2 id="5503">Menggunakan <tt>TMap</tt></h2>
-<p id="710540" class="block-content">
-Obyek <tt>TMap</tt> mewakili tabel campuran (atau kami katakan array berindeks-string).
-</p>
-<p id="710541" class="block-content">
-Mirip dengan <tt>TList</tt>, <tt>TMap</tt> bisa dipakai layaknya sebuah array,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code5">
-$map=new TMap; // buat obyek map
-...
-$map[$key]=$value; // tambah pasangan kunci-nilai
-unset($map[$key]); // hapus nilai dengan kunci yang ditetapkan
-if(isset($map[$key])) // apakah map berisi kunci
-foreach($map as $key=>$value) // jelajahi item dalam map
-</com:TTextHighlighter>
-<p id="710542" class="block-content">
-Properti <tt>Count</tt> memberikan jumlah item dalam map sementara properti <tt>Keys</tt> mengembalikan daftar kunci yang dipakai dalam map.
-</p>
-
-<p id="710543" class="block-content">
-Metode berikut disediakan oleh <tt>TMap</tt> demi kenyamanan,
-</p>
-<ul id="u2" class="block-content">
- <li><tt>clear()</tt>: menghapus semua item dalam map.</li>
- <li><tt>contains()</tt>: menguji apakah map berisi kunci yang ditetapkan.</li>
- <li><tt>toArray()</tt>: mengembalikan perwakilan array dari item dalam map.</li>
- <li><tt>copyFrom()</tt>: mempopulasikan map dengan data dari array atau obyek yang bisa dijelajahi (termasuk <tt>TMap</tt>). Item yang sudah ada akan dihapus terlebih dulu.</li>
- <li><tt>mergeWith()</tt>: menambahkan map dengan data dari array atau obyek yang bisa dijelajahi (termasuk <tt>TMap</tt>).</li>
-</ul>
-
-<h3 id="5506">Penggunaan <tt>TAttributeCollection</tt></h3>
-<p id="710544" class="block-content">
-<tt>TAttributeCollection</tt> adalah kelas khusus yang diperluas dari <tt>TMap</tt>. Ia dipakai terutama oleh properti <tt>Attributes</tt> dari <tt>TControl</tt>.
-</p>
-Selain fungsionalitas normal yang disediakan oleh <tt>TMap</tt>, <tt>TAttributeCollection</tt> membolehkan anda untuk mendapatkan dan menyetel item koleksi seperti mendapatkan dan menyetel properti. Sebagai contoh,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code6">
-$collection->Label='value'; // sama dengan: $collection['Label']='value';
-echo $collection->Label; // sama dengan: echo $collection['Label'];
-</com:TTextHighlighter>
-<p id="710545" class="block-content">
-Catatan, dalam <tt>$collection</tt> di atas TIDAK mempunyai properti <tt>Label</tt>.
-</p>
-<p id="710546" class="block-content">
-Tidak seperti <tt>TMap</tt>, kunci dalam <tt>TAttributeCollection</tt> tidak sensitif huruf. Oleh karena itu <tt>$collection->Label</tt> sama dengan <tt>$collection->LABEL</tt>.
-</p>
-<p id="710547" class="block-content">
-Karena fitur baru di atas, ketika berhadapan dengan properti <tt>Attributes</tt> dari kontrol, kita dapat mengambil keuntungan dari konsep subproperti dan mengkonfigurasi nilai atribut kontrol dalam sebuah template seperti berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code7">
-&lt;com:TButton Attributes.onclick="if(!confirm('Are you sure?')) return false;" .../&gt;
-</com:TTextHighlighter>
-<p id="710548" class="block-content">
-yang menambahkan atribut bernama <tt>onclick</tt> ke kontrol <tt>TButton</tt>.
-</p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/id/Error.page b/demos/quickstart/protected/pages/Advanced/id/Error.page
deleted file mode 100755
index 419b390f..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/Error.page
+++ /dev/null
@@ -1,77 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="6301">Penanganan Kesalahan dan Laporan</h1>
-<p id="800666" class="block-content">
-PRADO menyediakan kerangka kerja penanganan kesalahan dan laporan lengkap berdasarkan pada mekanisme eksepsi dari PHP 5.
-</p>
-
-<h2 id="6302">Kelas Eksepsi</h2>
-<p id="800667" class="block-content">
-Kesalahan yang terjadi dalam aplikasi PRADO dapat diklasifikasikan ke dalam tiga kategori: kesalahan yang disebabkan oleh penguraian naskah PHP, kode yang salah (seperti memanggil fungsi yang tidak didefinisikan, menyetel properti yang tidak dikenal), dan yang disebabkan oleh pemakaian yang tidak benar pada aplikasi Web oleh pengguna klien (seperti mencoba untuk mengakses halaman terbatas). PRADO tidak dapat berhadapan dengan kesalahan kategori pertama karena tidak dapat ditangkap dalam kode PHP. PRADO menyediakan sebuah hirarki eksepsi untuk berhadapan dengan kategori kedua dan ketiga.
-</p>
-<p id="800668" class="block-content">
-Semua kesalahan dalam aplikasi PRADO digambarkan sebagai eksepsi. Basis kelas untuk seluruh eksepsi PRADO adalah <tt>TException</tt>. Ia menyediakan fungsionalitas internasionalisasi pesan bagi semua eksepsi sistem. Pesan kesalahan dapat diterjemahkan ke dalam bahasa yang berbeda tergantung pada preferensi bahasa browser pengguna.
-</p>
-<p id="800669" class="block-content">
-Eksepsi muncul karena pemakaian yang tidak benar dari kerangka kerja PRADO yang diturunkan dari <tt>TSystemException</tt>, yang bisa berupa salah satu dari kelas eksepsi berikut:
-</p>
-<ul id="u1" class="block-content">
-<li><tt>TConfigurationException</tt> - konfigurasi salah, seperti kesalahan dalam konfigurasi aplikasi, template kontrol, dll.</li>
-<li><tt>TInvalidDataValueException</tt> - nilai data tidak benar atau tidak diharapkan.</li>
-<li><tt>TInvalidDataTypeException</tt> - tipe data tidak benar atau tidak diharapkan.</li>
-<li><tt>TInvalidDataFormatException</tt> - format data tidak benar.</li>
-<li><tt>TInvalidOperationException</tt> - permintaan operasi tidak benar.</li>
-<li><tt>TPhpErrorException</tt> - kesalahan PHP dapat ditangkap, peringatan, perhatian, dll.</li>
-<li><tt>TSecurityException</tt> - kesalahan terkait dengan keamanan.</li>
-<li><tt>TIOException</tt> - kesalahan operasi IO, seperti kegagalan membuka file.</li>
-<li><tt>TDBException</tt> - kesalahan terkait dengan operasi database.</li>
-<li><tt>TNotSupportedException</tt> - kesalahan disebabkan oleh permintaan dari fitur yang tidak didukung.</li>
-<li><tt>THttpException</tt> - kesalahan untuk ditampilkan ke pengguna klien Web.</li>
-</ul>
-<p id="800670" class="block-content">
-Kesalahan karena pemakaian yang salah dari aplikasi Web oleh pengguna klien diturunkan dari <tt>TApplicationException</tt>.
-</p>
-
-<h2 id="6303">Memunculkan Eksepsi</h2>
-<p id="800671" class="block-content">
-Memunculkan eksepsi dalam PRADO tidak berbeda dengan memunculkan eksepsi normal PJHP. Satu hal yang sama adalah untuk memunculkan eksepsi yang benar. Secara umum, eksepsi yang ditujukan untuk ditampilkan ke pengguna aplikasi harus menggunakan <tt>THttpException</tt>, sementara eksepsi yang ditampilkan bagi para pengembang harus menggunakan kelas eksepsi lain.
-</p>
-
-<h2 id="6304">Penangkapan Kesalahan dan Pelaporan</h2>
-<p id="800672" class="block-content">
-Eksepsi muncul selama menjalankan aplikasi PRADO ditangkap oleh modul <tt>System.Exceptions.TErrorHandler</tt>. Template output berbeda dipakai untuk menampilkan eksepsi yang ditangkap. <tt>THttpException</tt> dianggap berisi pesan kesalahan yang ditujukan untuk aplikasi pengguna akhir dan kemudian menggunakan grup template khusus. Untuk semua eksepsi lainnya, template umum ditampilkan seperti berikut dipakai untuk menyajikan eksepsi.
-</p>
-<a href="<%~ exception2.gif %>" target="_blank"><img src="<%~ exception.gif %>" alt="exception page" style="border:0px"/></a>
-
-<h2 id="6305">Mengkustomisasi Tampilan Kesalahan</h2>
-<p id="800673" class="block-content">
-Para pengembang dapat mengkustomisasi penyajian pesan kesalahan. Standarnya, semua template output kesalahan disimpan dalam <tt>framework/Exceptions/templates</tt>. Lokasi dapat diubah dengan mengkonfigurasi <tt>TErrorHandler</tt> dalam konfigurasi aplikasi,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_800226">
-&lt;module id="error"
- class="TErrorHandler"
- ErrorTemplatePath="Application.ErrorTemplates" /&gt;
-</com:TTextHighlighter>
-<p id="800674" class="block-content">
-<tt>THttpException</tt> menggunakan satu set template yang dibedakan berdasarkan pada nilai properti <tt>StatusCode</tt> yang berbeda dari <tt>THttpException</tt>. <tt>StatusCode</tt> memiliki arti yang sama seperti kode status dalam protokol HTTP. Sebagai contoh, kode status yang sama dengan 404 berarti URL yang diminta tidak ditemukan pada server. File template output menggunakan konvensi penamaan berikut:
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_800227">
- error<status code>-<language code>.html
-</com:TTextHighlighter>
-<p id="800675" class="block-content">
-di mana <tt>status code</tt> merujuk ke nilai properti <tt>StatusCode</tt> dari <tt>THttpException</tt>, dan <tt>kode bahasa</tt> harus bahasa yang benar seperti misalnya <tt>en</tt>, <tt>zh</tt>, <tt>fr</tt>, dll. Ketika <tt>THttpException</tt> muncul, PRADO akan memilih template yang sesuai untuk menampilkan pesan eksepsi. Pertama PRADO akan mencari file template yang namanya berisi kode status dan yang bahasanya lebih disukai oleh jendela browser klien. Jika template seperti itu tidak ada, ia akan mencari template yang memiliki kode status yang sama tapi tanpa kode bahasa.
-</p>
-<p id="800676" class="block-content">
-Konvensi penamaan untuk file template yang dipakai bagi semua eksepsi adalah sebagai berikut,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_800228">
- exception-<language code>.html
-</com:TTextHighlighter>
-<p id="800677" class="block-content">
-Sekali lagi, jika bahasa yang diinginkan tidak ditemukan, sebaliknya PRADO akan mencoba menggunakan <tt>exception.html</tt>.
-</p>
-<div class="note">
-<b class="tip">PERHATIAN:</b> Ketika menyimpan file template, pastikan file disimpan menggunakan pengkodean UTF-8. Pada Windows, Anda bisa menggunakan <tt>Notepad.exe</tt> untuk melakukan penyimpanan tersebut.
-</div>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/id/I18N.page b/demos/quickstart/protected/pages/Advanced/id/I18N.page
deleted file mode 100755
index 16c234f6..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/I18N.page
+++ /dev/null
@@ -1,336 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="6201">Internasionalisasi (I18N) dan Lokalisasi (L10N)</h1>
-<p id="790625" class="block-content">Banyak aplikasi web dibangun dengan PHP tidak memikirkan internasionlisasi saat ia pertama kali ditulis. Itu mungkin dikarenakan tidak dimaksudkan untuk digunakan dalam bahasa dan kultur. Internasionalisasi adalah aspek penting karena meningkatkan adopsi Internet dalam banyak negara yang berbicara non-Ingris. Proses internasionalisasi dan lokalisasi akan menghadapi kesulitan. Di bawah adalah beberapa petunjuk umum untuk menginternasionalisasi aplikasi yang sudah ada.</p>
-
-<h2 id="6203">Pisahkan data sensitif kultur/lokal</h2>
-
-<p id="790626" class="block-content">Identifikasi dan pisahkan data yang beragam dengan kultur. Yang paling jelas adalah teks/string/pesan. Tipe lain dari data juga harus dipertimbangkan. Daftar berikut mengkategorikan beberapa contoh data sensitif kultur
-</p>
-
-<ul id="u1" class="block-content">
- <li> String, Pesan, Teks, dalam unit relatif kecil (misalnya prasa, kalimat, paragraf, tapi tidak teks lengkap dari buku).</li>
- <li> Label pada tombol.</li>
- <li> File bantuan, unit besar teks, teks statis.</li>
- <li> Suara.</li>
- <li> Warna.</li>
- <li> Grafik,Ikon.</li>
- <li> Tanggal, Jam.</li>
- <li> Angka, Kurs, Pengukuran.</li>
- <li> Nomor Telepon.</li>
- <li> Penghargaan dan titel personal.</li>
- <li> Alamat pos.</li>
- <li> Tata letak halaman.</li>
-</ul>
-
-<p id="790627" class="block-content">Bila memungkinkan semua ragam teks harus diisolasi dan disimpan dalam format persisten. Teks ini termasuk, pesan kesalahan aplikasi, string ditulis tangan dalam file PHP, email, teks statis HTML, dan teks pada elemen formulir (misalnya tombol).</p>
-
-<h2 id="6204">Konfigurasi</h2>
-<p id="790628" class="block-content">Untuk menghidupkan fitur lokalisasi dalam PRADO, Anda perlu menambahkan beberapa opsi konfigurasi dalam <a href="?page=Configurations.AppConfig">konfigurasi aplikasi</a> Anda.
-Pertama Anda perlu menyertakan namespace <tt>System.I18N.*</tt> ke path Anda.
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_790203">
-<paths>
- <using namespace="System.I18N.*" />
-</paths>
-</com:TTextHighlighter>
-
-<p id="790629" class="block-content">Kemudian, jika Anda ingin menerjemahkan beberapa teks dalam aplikasi Anda, perlu ditambahkan sumber data pesan terjemahan.</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_790204">
-<module id="globalization" class="TGlobalization">
- <translation type="XLIFF"
- source="MyApp.messages"
- marker="@@"
- autosave="true" cache="true" />
-</module>
-</com:TTextHighlighter>
-
-<p id="790630" class="block-content">Di mana <tt>source</tt> dalam <tt>translation</tt> adalah path titik ke direktori di mana Anda akan menyimpan katalog pesan terjemahan. Atribut <tt>autosave</tt> jika dihidupkan, menyimpan pesan tidak diterjemahkan kembali ke dalam katalog pesasn.
-Dengan menghidupkan <tt>cache</tt>, pesan yang diterjemahkan disimpan dalam direktori aplikasi <tt>runtime/i18n</tt>.
-Nilai <tt>marker</tt> dipakai untuk mengelilingi teks yang tidak diterjemahkan.
-</p>
-
-<p id="790631" class="block-content">Dengan konfigurasi lengkap, sekarang kita dapat mulai melokalisasi aplikasi Anda. Jika Anda menghidupkan <tt>autosave</tt>, setelah menjalankan aplikasi Anda dengan beberapa aktivitas lokalisasi (misalnya menterjemahkan beberapa teks), Anda akan melihat sebuah direktori dan <tt>messages.xml</tt> dibuat di dalam direktori <tt>source</tt>.</p>
-
-<h2 id="6205">Apa yang harus dilakukan dengan <tt>messages.xml</tt>?</h2>
-<p id="790632" class="block-content">File katalog pesan terjemahan, jika menggunakan <tt>type="XLIFF"</tt>, adalah format intechange XML pesan terjemahan distandarisasi. Anda bisa mengedit file XML menggunakan editor yang mampu menangani UTF-8. Format dari XML adalah sesuatu mirip seperti berikut ini.</p>
-
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_790205">
-<?xml version="1.0"?>
-<xliff version="1.0">
- <file original="I18N Example IndexPage"
- source-language="EN"
- datatype="plaintext"
- date="2005-01-24T11:07:53Z">
- <body>
-
-<trans-unit id="1">
-<source>Hello world.</source>
-<target>Hi World!!!</target>
-</trans-unit>
-
- </body>
- </file>
-</xliff>
-</com:TTextHighlighter>
-
-Setiap pesan terjemahan dilapisi dengan tag <tt>trans-unit</tt>, di mana <tt>source</tt> adalah pesan asli, dan <tt>target</tt> adalah pesan yang diterjemahkan. Editor seperti <a href="http://www.heartsome.net/EN/xlfedit.html">Heartsome XLIFF Translation Editor</a> dapat membantu mengedit file XML ini.
-
-
-<h2 id="6206">Menyetel dan Mengubah Kultur</h2>
-<p id="790633" class="block-content">Sekali globalisasi dihidupkan, Anda dapat mengakses setelan globalisasi, seperti <tt>Culture</tt>, <tt>Charset</tt>, dll, menggunakan </p>
-<com:TTextHighlighter CssClass="source block-content" id="code_790206">
-$globalization = $this->getApplication()->getGlobalization();
-echo $globalization->Culture;
-$globalization->Charset= "GB-2312"; //ubah charset
-</com:TTextHighlighter>
-
-<p id="790634" class="block-content">Anda juga mengubah cara kultur ditentukan dengan mengubah atribut <tt>class</tt> dalam konfigurasi modul. Sebagai contoh, untuk menyetel kultur yang tergantung pada setelan browser, Anda bisa menggunakan kelas <tt>TGlobalizationAutoDetect</tt>.
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_790207">
-<module id="globalization" class="TGlobalizationAutoDetect">
- ...
-</module>
-</com:TTextHighlighter>
-
-<p id="790635" class="block-content">Anda juga bisa menyediakan kelas globalisasi sendiri untuk mengubah bagaimana kultur aplikasi ditetapkan.
-Terakhir, Anda dapat mengubah setelan globalisasi dengan basis halaman demi halaman menggunakan <a href="?page=Configurations.Templates1#tct">tag kontrol template</a>. Sebagai contoh, mengubah <tt>Culture</tt> ke "zh".</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790208">
-&lt;%@ Application.Globalization.Culture="zh" %&gt;
-</com:TTextHighlighter>
-
-<h2 id="6207">Melokalisir aplikasi PRADO Anda</h2>
-Ada dua area dalam aplikasi Anda yang mungkin membutuhkan lokalisasi pesan atau string, dalam kode PHP dan dalam template. Untuk melokalisasi string di dalam PHP, gunakan fungsi <tt>localize</tt> yang dijelaskan di bawah. Untuk melokalisasi teks dalam template, gunakan komponen <a href="#ttranslate">TTranslate</a>.
-<h2 id="6208">Menggunakan fungsi <tt>localize</tt> untuk mennerjemahkan teks dalam PHP</h2>
-
-<p id="790636" class="block-content">Fungsi <tt>localize</tt> mencari string yang diterjemahkan yang sama dengan aslinya dari sumber terjemahan Anda. Pertama, Anda perlu mencari semua teks dikode langsung dalam PHP yang ditampilkan atau dikirimkan ke pengguna akhir. Contoh berikut melokalisasi teks <tt>$sender</tt> (menganggap, katakanlah, sender adalah sebuah tombol). Kode asli sebelum lokalisasi adalah sebagai berikut.
-<com:TTextHighlighter CssClass="source block-content" id="code_790209">
-function clickMe($sender,$param)
-{
- $sender->Text="Hello, world!";
-}
-</com:TTextHighlighter>
-
-<p id="790637" class="block-content">Pesan dikodekan langsung "Hello, world!" dilokalisasi menggunakan fungsi <tt>localize</tt>. </p>
-<com:TTextHighlighter CssClass="source block-content" id="code_790210">
-function clickMe($sender,$param)
-{
- $sender->Text=Prado::localize("Hello, world!");
-}
-</com:TTextHighlighter>
-
-<h2 id="6209">Pesan Gabungan</h2>
-
-<p id="790638" class="block-content">Pesan gabungan dapat berisi data variabel. Sebagai contoh, dalam pesan "There are 12 users online.", integer 12 dapat berubah tergantung pada beberapa data dalam aplikasi Anda. Ini sulit diterjemahkan karena posisi dari data variabel mungkin berbeda untuk bahasa yang berbeda. Seabgai tambahan, bahasa yang berbeda memiliki aturannya sendiri untuk bentuk jamak (jika ada) dan/atau pembilang. Contoh berikut tidak mudah untuk diterjemahkan, karena struktur kalimat sudah tetap dengan dikodekan langsung data variabel dengan pesan.</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_790211">
-$num_users = 12;
-$message = "There are " . $num_users . " users online.";
-</com:TTextHighlighter>
-
-Masalah ini bisa dipecahkan menggunakan fungsi <tt>localize</tt> dengan penempatan string. Sebagai contoh, string <tt>$message</tt> di atas dapat dibentuk seperti berikut.
-<com:TTextHighlighter CssClass="source block-content" id="code_790212">
-$num_users = 12;
-$message = Prado::localize("There are {num_users} users online.", array('num_users'=>$num_users));
-</com:TTextHighlighter>
-<p id="790639" class="block-content">Di mana parameter kedua dalam <tt>localize</tt> mengambil array asosiatif dengan kunci sebagai penempatan yang dicari dalam teks dan menggantinya dengan nilai terkait.
-Fungsi <tt>localize</tt> tidak memecahkan masalah lokalisasi bahasa yang memiliki bentuk jamak, solusinya adalah menggunakan <a href="#choice-format">TChoiceFormat</a>.</p>
-
-<p id="790640" class="block-content">The following sample demonstrates the basics of localization in PRADO.</p>
-<com:RunBar PagePath="Advanced.Samples.I18N.Home" />
-
-<h1 id="6202">Komponen I18N</h1>
-<a name="ttranslate"></a>
-<h2 id="6210">TTranslate</h2>
-<p id="790641" class="block-content">Pesan dan string bisa dilokalisasi dalam PHP atau dalam template.
-Untuk menerjemahkan pesan atau string dalam template, gunakan <tt>TTranslate</tt>.</p>
-
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790213">
-&lt;com:TTranslate&gt;Hello World&lt;/com:TTranslate&gt;
-&lt;com:TTranslate Text="Goodbye" /&gt;
-</com:TTextHighlighter>
-
-<p id="790642" class="block-content"><tt>TTranslate</tt> juga dapat melakukan penempatan string. Properti <tt>Parameters</tt> bisa digunakan untuk menambah pasangan nama nilai untuk penempatan. Substring dalam terjemahan dikurung dengan "{" dan "}" yang dianggap sebagai nama parameter selama pencarian penempatan. Contoh berikut akan menempatkan substring "{time}" dengan nilai atribut parameter "<tt>Parameters.time=&lt;%= time() %&gt;</tt>".
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790214">
-&lt;com:TTranslate Parameters.time=&lt;%= time() %&gt; &gt;
-The time is {time}.
-&lt;/com:TTranslate&gt;
-</com:TTextHighlighter>
-
-<p id="790643" class="block-content">Kependekan dari <tt>TTranslate</tt> juga disediakan menggunakan sintaks berikut.</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790215">
-&lt;%[string]%&gt;
-</com:TTextHighlighter>
-<p id="790644" class="block-content">di mana string akan diterjemahkan ke bahasa berbeda berdasarkan preferensi bahasa pengguna akhir. Sintaks ini bisa dipakai dengan nilai atribut juga.</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790216">
-&lt;com:TLabel Text="&lt;%[ Hello World! ]%&gt;" /&gt;
-</com:TTextHighlighter>
-
-<h2 id="6211">TDateFormat</h2>
-<p id="790645" class="block-content">Memformat tanggal dan jam dilokalisasi adalah pekerjaan langsung.</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790217">
-&lt;com:TDateFormat Value="12/01/2005" /&gt;
-</com:TTextHighlighter>
-
-<p id="790646" class="block-content">Properti <tt>Pattern</tt> menerima 4 predefininisi pola tanggal dilokalisasi dan 4 predefininisi pola jam dilokalisasi.</p>
-<ul id="u2" class="block-content">
- <li><tt>fulldate</tt></li>
- <li><tt>longdate</tt></li>
- <li><tt>mediumdate</tt></li>
- <li><tt>shortdate</tt></li>
- <li><tt>fulltime</tt></li>
- <li><tt>longtime</tt></li>
- <li><tt>mediumtime</tt></li>
- <li><tt>shorttime</tt></li>
-</ul>
-<p id="p1" class="block-content">
-Predefinisi bisa dipakai dalam setiap kombinasi. Jika menggunakan pola predefinisi gabungan, pola pertama harus tanggal, diikuti oleh spasi, dan terakhir pola jam. Sebagai contoh, pola tanggal lengkap dengan pola jam pendek. Aktual uruta dari tanggal-jam dan pola aktual akan ditentukan secara otomatis dari data lokal yang ditetapkan oleh properti <tt>Culture</tt>.</p>
-
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790218">
-&lt;com:TDateFormat Pattern="fulldate shorttime" /&gt;
-</com:TTextHighlighter>
-
-<p id="790647" class="block-content">Anda dapat menetapkan pola kustom menggunakan sub-pola berikut.
-Format tanggal/jam ditetapkan dalam arti pola waktu string. Dalam pola ini, semua huruf ASCII disimpan sebagai huruf pola, yang ditetapkan sebagai berikut:
-<com:TTextHighlighter Language="text" CssClass="source block-content" id="code_790219">
- Simbol Arti Penyajian Contoh
------- ---- --------- ------
- G tanda abad (Teks) AD
- y tahun (Angka) 1996
- M bulan dalam tahun (Teks &amp; Angka) July &amp; 07
- d hari dalam bulan (Angka) 10
- h jam dalam am/pm (1~12) (Angka) 12
- H jam dalam hari (0~23) (Angka) 0
- m menit dalam jam (Angka) 30
- s detik dalam menit (Angka) 55
- E hari dalam minggu (Teks) Tuesday
- D hari dalam tahun (Angka) 189
- F hari minggu dalam bulan (Angka) 2 (2nd Wed in July)
- w minggu dalam tahun (Angka) 27
- W minggu dalam bulan (Angka) 2
- a tanda am/pm (Teks) PM
- k jam dalam hari (1~24) (Angka) 24
- K jam dalam am/pm (0~11) (Angka) 0
- z zona waktu (Jam) Pacific Standard Time
- ' tanda kutip teks (Delimiter) 'Date='
- '' tanda kutip tunggal (Literal) 'o''clock'
-</com:TTextHighlighter>
-</p>
-
-<p id="790648" class="block-content">Jumlah pola huruf menentukan format.</p>
-
-<p id="790649" class="block-content">(Teks): 4 huruf menggunakan bentuk lengkap, kurang dari 4 menggunakan bentuk pendek atau singkatan
-jika ada. (misalnya "EEEE" menghasilkan "Monday", "EEE" menghasilkan "Mon")</p>
-
-<p id="790650" class="block-content">(Angka): jumlah digit minimum. Angka lebih pendek adalah diisi-nol ke jumlah ini (misalnya jika "m" menghasilkan "6", "mm" menghasilkan "06"). Tahun ditangani secara khusus; yakni jika jumlah 'y' adalah 2, Tahun akan dipotong 2 digit. (misalnya jika "yyyy" menghasilkan "1997", "yy" menghasilkan "97".)
- Tidak seperti field lain, pecahan detik dipadatkan pada sisi kanan dengan nol.</p>
-
-<p id="790651" class="block-content">(Teks dan Angka): 3 atau lebih, pakai teks, sebaliknya pakai angka. (misalnya
-"M" menghasilkan "1", "MM" menghasilkan "01", "MMM" menghasilkan "Jan", and "MMMM"
-menghasilkan "January".)</p>
-
-<p id="790652" class="block-content">Setiap karakter dalam pola yang tidak dalam jangkauan ['a'..'z']
-dan ['A'..'Z'] akan diperlakukan sebagai teks bertanda kutip. Contohnya, karakter seperti
-':', '.', ' ', dan '@' akan muncul dalam hasil teks waktu
-meskipun tidak dikurung dalam tanda kutip tunggal.</p>
-
-<p id="790653" class="block-content">Contoh menggunakan lokal US:
-
-<com:TTextHighlighter Language="text" CssClass="source block-content" id="code_790220">
-Pola Formasi Hasil
------------- -----
-"yyyy.MM.dd G 'at' HH:mm:ss" -&gt;&gt; 1996.07.10 AD at 15:08:56
-"EEE, MMM d, ''yy" -&gt;&gt; Wed, Jul 10, '96
-"h:mm a" -&gt;&gt; 12:08 PM
-"hh 'o''clock' a, z" -&gt;&gt; 12 o'clock PM, Pacific Daylight Time
-"K:mm a" -&gt;&gt; 0:00 PM
-"yyyy.MMMM.dd G hh:mm a" -&gt;&gt; 1996.July.10 AD 12:08 PM
-</com:TTextHighlighter>
-</p>
-
-<p id="790654" class="block-content">Jika properti <tt>Value</tt> tidak ditetapkan, tanggal dan jam saat ini yang dipakai.</p>
-
-<h2 id="6212">TNumberFormat</h2>
-<p id="790655" class="block-content">Kerangka kerja Internasionalisasi PRADO menyediakan pembentukan kurs lokal dan pembentukan angka. Harap dicatat bahwa komponen <tt>TNumberFormat</tt> hanya menyediakan pembentukan, saat ini ia tidak melakukan konversi atau pertukaran.</p>
-
-<p id="790656" class="block-content">Numbers can be formatted as currency, percentage, decimal or scientific
-numbers by specifying the <tt>Type</tt> attribute. The valid types are:</p>
-<ul id="u3" class="block-content">
- <li><tt>currency</tt></li>
- <li><tt>percentage</tt></li>
- <li><tt>decimal</tt></li>
- <li><tt>scientific</tt></li>
-</ul>
-
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790221">
-&lt;com:TNumberFormat Type="currency" Value="100" /&gt;
-</com:TTextHighlighter>
-
-<p id="790657" class="block-content">Properti <tt>Culture</tt> dan <tt>Currency</tt> dapat ditetapkan untuk membentuk angka spesifik lokal. </p>
-
-<p id="790658" class="block-content">Jika seseorang dari US ingin melihat gambar penjualan dari sebuah toko dalam bahasa Jerman (katakanlah menggunakan kurs EURO), diformat menggunakan kurs jerman, Anda perlu untuk menggunakan atribut <tt>Culture="de_DE"</tt> guna memperoleh kurs yang benar, misalnya 100,00$. Pemisah desimal dan pengelompokan kemudian juga dari lokal <tt>de_DE</tt>. Ini dapat menimbulkan beberapa kebingungan karena orang dari US memakai "," (koma) sebagai pemisah ribuan. Oleh karena itu, atribut <tt>Currency</tt> tersedia agar output dari hasil contoh berikut menghasilkan $100.00
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790222">
-&lt;com:TNumberFormat Type="currency"
- Culture="en_US" Currency="EUR" Value="100" /&gt;
-</com:TTextHighlighter>
-</p>
-
-<p id="790659" class="block-content">Properti <tt>Pattern</tt> menetapkan jumlah digit, posisi pengelompokan ribuan, jumlah titik desimal dan posisi desimal. Karakter aktual yang dipakai untuk menyajikan titik desimal dan titik ribuan adalah spesifik kultur dan akan berubah secara otomatis berdasarkan properti <tt>Culture</tt>. Karakter <tt>Pattern</tt> yang benar adalah:</p>
-<ul id="u6" class="block-content">
- <li><tt># (kris)</tt> - mewakili digit opsional</li>
- <li><tt>0 (nol)</tt> - mewakili digit mandatori, nol di kiri terisi</li>
- <li><tt>. (berhenti)</tt> - posisi titik desimal (hanya 1 titik desimal dibolehkan)</li>
- <li><tt>, (koma)</tt> - pemisahan titik ribuan (sampai 2 koma dibolehkan)</li>
-</ul>
-<p id="p2" class="block-content">
-Sebagai contoh, anggap <tt>Value="1234567.12345"</tt> dan dengan
-<tt>Culture="en_US"</tt> (yang menggunakan "," untuk titik pemisah ribuan dan "." untuk pemisah desimal).
-</p>
-<com:TTextHighlighter Language="text" CssClass="source block-content" id="code_790223">
-Pola Output
----- ------
-##,###.00 -&gt;&gt; 1,234,567.12
-##,###.## -&gt;&gt; 1,234,567.12345
-##,##.0000 -&gt;&gt; 1,23,45,67.1235
-##,###,##.0 -&gt;&gt; 12,345,67.1
-000,000,000.0 -&gt;&gt; 001,234,567.1
-</com:TTextHighlighter>
-</p>
-
-<h2 id="6213">TTranslateParameter</h2>
-<p id="790660" class="block-content">Pesan gabungan, misalnya penempatan string, bisa dilakukan dengan <tt>TTranslateParameter</tt>.
-Dalam contoh berikut, string "{greeting}" dan "{name}" masing-masing akan diganti dengan nilai "Hello" dan "World". Penempatan string harus dikurung dengan "{" dan "}". Parameter selanjutnya diterjemahkan dengan menggunakans <tt>TTranslate</tt>.
-
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790224">
-&lt;com:TTranslate&gt;
- {greeting} {name}!
- &lt;com:TTranslateParameter Key="name">World&lt;/com:TTranslateParameter&gt;
- &lt;com:TTranslateParameter Key="greeting">Hello&lt;/com:TTranslateParameter&gt;
-&lt;/com:TTranslate&gt;
-</com:TTextHighlighter>
-
-
-<a name="choice-format"></a>
-<h2 id="6214">TChoiceFormat</h2>
-
-<p id="790661" class="block-content">Menggunakan fungsi <tt>localize</tt> atau komponen <tt>TTranslate</tt> untuk menerjemahkan pesan tidak memberitahu penerjemah kardinalitas dari data yang diminta untuk menentukan struktur jamak yang benar yang dipakai. Ia hanya memberitahunya bahwa ada data tersedia, data dapat berupa apa saja. Selanjutnya, penerjemah tidak akan bisa menentukan dengan memperhatikan penempatan data plural yang benar, struktur bahasa atau prasa yang dipakai. Misalnya dalam bahasa Inggris, untuk menerjemahkan kalimat, "There are {number} of apples.", hasil terjemahan akan berbeda tergantung pada <tt>jumlah</tt> apel.</p>
-
-<p id="790662" class="block-content">Komponen <tt>TChoiceFormat</tt> melakukan pilihan terjemahan pesan/string. Contoh berikut mendemonstrasikan terjemahan pesan 2 pilihan sederhana.</p>
-
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_790225">
-&lt;com:TChoiceFormat Value="1"/&gt;[1] One Apple. |[2] Two Apples&lt;/com:TChoiceFormat&gt;
-</com:TTextHighlighter>
-
-<p id="790663" class="block-content">Dalam contoh di atas, <tt>Value</tt> "1" (satu), kemudian string yang diterjemahkan adalah "One Apple". Jika <tt>Value</tt> adalah "2", maka ia akan menampilkan "Two Apples".</p>
-
-<p id="790664" class="block-content">Pilihan pesan/string dipisashkan oleh pipa "|" diikuti oleh set notasi dari formulir.</p>
-<ul id="u7" class="block-content">
- <li><tt>[1,2]</tt> -- menerima nilai antara 1 dan 2, inklusif.</li>
- <li><tt>(1,2)</tt> -- menerima nilai antara 1 dan 2, kecuali 1 dan 2.</li>
- <li><tt>{1,2,3,4}</tt> -- hanya nilai yang didefinisikan dalam set yang diterima.</li>
- <li><tt>[-Inf,0)</tt> -- menerima nilai lebih besar dari atau sama dengan infinitif negatif dan kurang dari 0</li>
-</ul>
-
-<p id="790665" class="block-content">Setiap kombinasi tidak-kosong dari kurung kotak dan bulat dapat diterima.
-String yang dipilih untuk tampilan tergantung pada properti <tt>Value</tt>. <tt>Value</tt> dievaluiasi untuk setiap set-nya sampai <tt>Value</tt> ditemukan milik set tertentu.</p>
-
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/id/Logging.page b/demos/quickstart/protected/pages/Advanced/id/Logging.page
deleted file mode 100755
index 169329a0..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/Logging.page
+++ /dev/null
@@ -1,61 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="6101">Pencatatan</h1>
-<p id="780615" class="block-content">
-PRADO menyediakan fungsionalitas sangat fleksibel dan bisa diperluas. Pesan yang dicatat dapat diklasifikasikan berdasarkan tingkat catatan dan kategori pesan. Menggunakan tingkat dan katkegori filter, pesan selanjutnya bisa dialihkan ke tujuan yang berbeda, seperti file, email, jendela browser, dll. Diagram berikut memperlihatkan arsitektur dasar dari mekanisme pencatatan PRADO,
-</p>
-<img src="<%~ logrouter.gif %>" alt="Pengalih catatan" />
-
-<h2 id="6102">Menggunakan Fungsi Pencatatan</h2>
-<p id="780616" class="block-content">
-Dua metode berikut disediakan untuk mencatat pesan dalam PRADO,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_780201">
-Prado::log($message, $logLevel, $category);
-Prado::trace($message, $category);
-</com:TTextHighlighter>
-<p id="780617" class="block-content">
-Perbedaan antara <tt>Prado::log()</tt> dan <tt>Prado::trace()</tt> adalah bahwa yang kedua memilih secara otomatis tingkat catatan berdasarkan mode aplikasi. Jika aplikasi dalam mode <tt>Debug</tt>, informasi pelacakan stack ditambahkan ke pesan. <tt>Prado::trace()</tt> dipakai secara luas dalam kode inti kerangka kerja PRADO.
-</p>
-
-<h2 id="6103">Pengalihan Pesan</h2>
-<p id="780618" class="block-content">
-Pesan yang dicatat menggunakan dua fungsi di atas dipelihara dalam memori. Untuk menggunakan pesan, para pengembang perlu mengalihkannya ke tujuan tertentu seperti file, email, atau jendela browser. Pengalihan pesan diatur oleh modul <tt>System.Util.TLogRouter</tt>. Ketika dimasukan ke dalam aplikasi, ia bisa mengalihkan pesan ke tujuan yang berbeda secara paralel. Saat ini PRADO menyediakan tiga jenis rute:
-</p>
-<ul id="u1" class="block-content">
- <li><tt>TFileLogRoute</tt> - pesan yang disaring disimpan dalam file log yang ditetapkan. Standarnya, file ini bernama <tt>prado.log</tt> di bawah direktori dari aplikasi. Perputaran file disediakan.</li>
- <li><tt>TEmailLogRoute</tt> - pesan yang disaring dikirimkan ke alamat email yang ditetapkan sebelumnya.</li>
- <li><tt>TBrowserLogRoute</tt> - pesan yang disaring ditambahkan ke akhir output halaman saat ini.</li>
-</ul>
-<p id="780619" class="block-content">
-Untuk menghidupkan pengalihan pesan, masukan dan konfigurasi modul <tt>TLogRouter</tt> dalam konfigurasi aplikasi,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_780202">
-&lt;module id="log" class="System.Util.TLogRouter"&gt;
- &lt;route class="TBrowserLogRoute"
- Levels="Info"
- Categories="System.Web.UI.TPage, System.Web.UI.WebControls" /&gt;
- &lt;route class="TFileLogRoute"
- Levels="Warning, Error"
- Categories="System.Web" /&gt;
-&lt;/module&gt;
-</com:TTextHighlighter>
-<p id="780620" class="block-content">
-Dalam contoh di atas, <tt>Levels</tt> dan <tt>Categories</tt> menetapkan log dan filter kategori untuk mengambil secara selektif pesan ke tujuan terkait.
-</p>
-
-<h2 id="6104">Penyaringan Pesan</h2>
-<p id="780621" class="block-content">
-Pesan bisa disaring berdasarkan tingkat catatan serta kategorinya. Setiap catatan pesan dikaitkan dengan tingkat dan kategori catatan. Dengan tingkat dan kategori, para pengembang dapat mengambil pesan secara selektif yang menarik bagi mereka.
-</p>
-<p id="780622" class="block-content">
-Tingkat catatan didefinisikan dalam <tt>System.Util.TLogger</tt> termasuk: <tt>DEBUG</tt>, <tt>INFO</tt>, <tt>NOTICE</tt>, <tt>WARNING</tt>, <tt>ERROR</tt>, <tt>ALERT</tt>, <tt>FATAL</tt>. Pesan bisa disaring berdasarkan kriteria tingkat catatan. Sebagai contoh, jika sebuah filter menetapkan tingkat <tt>WARNING</tt> dan <tt>ERROR</tt>, maka hanya pesan tersebut yakni <tt>WARNING</tt> and <tt>ERROR</tt> yang akan dikembalikan.
-</p>
-<p id="780623" class="block-content">
-Kategori pesan adalah hirarkis. Kategori yang namanya awalan dari yang lain disebut leluhur kategori atas kategori lainnya. Sebagai contoh, kategori <tt>System.Web</tt> adalah leluhur dari kategori <tt>System.Web.UI</tt> dan <tt>System.Web.UI.WebControls</tt>. Pesan bisa diambil secara selektif menggunakan filter kategori hirarkis tersebut. Sebagai contoh, jika filter kategori adalah <tt>System.Web</tt>, maka semua pesan dalam <tt>System.Web</tt> dikembalikan. Sebagai tambahan, pesan dalam kategori anak seperti <tt>System.Web.UI.WebControls</tt>, juga dikembalikan.
-</p>
-<p id="780624" class="block-content">
-Dengan ketentuan, pesan yang dicatat dalam kode inti PRADO dikategorikan berdasarkan namespace dari kelas terkait. Sebagai contoh, pesan yang dicatat dalam <tt>TPage</tt> akan menjadi kategori <tt>System.Web.UI.TPage</tt>.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/id/MasterContent.page b/demos/quickstart/protected/pages/Advanced/id/MasterContent.page
deleted file mode 100755
index a5480ce3..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/MasterContent.page
+++ /dev/null
@@ -1,57 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="5801">Master dan Konten</h1>
-<p id="750587" class="block-content">
-Halaman dalam aplikasi Web sering berbagi bagian yang sama. Sebagai contoh, semua halaman dari aplikasi tutorial berbagi bagian header dan footer yang sama. Jika kita menyimpan header dan footer secara berulang dalam setiap file sumber halaman, ia akan memusingkan pemeliharaan jika suatu saat kita menginginkan sesuatu pada header atau footer. Untuk memecahkan masalah ini, PRADO memperkenalkan konsep master dan konten. Ini terutama pola dekorator, dengan konten didekorasi oleh master.
-</p>
-<p id="750588" class="block-content">
-Master dan konten hanya berlaku ke kontrol template (kontrol memperluas <tt>TTemplateControl</tt> atau kelas anaknya). Kontrol template dapat mempunyai paling banyak satu kontrol master dan satu atau beberapa konten (masing-masing diwakili oleh kontrol <tt>TContent</tt>). Konten akan disisipkan ke dalam kontrol master di tempat yang disiapkan oleh kontrol <tt>TContentPlaceHolder</tt>. Dan penyajian kontrol template adalah <tt>TContentPlaceHolder</tt> yang disiapkan kontrol master diganti dengan <tt>TContent</tt>.
-</p>
-<p id="750589" class="block-content">
-Sebagai contoh, anggap kontrol template mempunyai template berikut:
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_750192">
-&lt;%@ MasterClass="MasterControl" %&gt;
-&lt;com:TContent ID="A" &gt;
-content A
-&lt;/com:TContent &gt;
-&lt;com:TContent ID="B" &gt;
-content B
-&lt;/com:TContent &gt;
-&lt;com:TContent ID="B" &gt;
-content B
-&lt;/com:TContent &gt;
-</com:TTextHighlighter>
-<p id="750590" class="block-content">
-yang menggunakan <tt>MasterControl</tt> sebagai kontrol masternya. Kontrol master mempunyai template berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_750193">
-other stuff
-&lt;com:TContentPlaceHolder ID="A" /&gt;
-other stuff
-&lt;com:TContentPlaceHolder ID="B" /&gt;
-other stuff
-&lt;com:TContentPlaceHolder ID="C" /&gt;
-other stuff
-</com:TTextHighlighter>
-<p id="750591" class="block-content">
-Kemudian, konten disisipkan ke dalam kontrol master berdasarkan diagram berikut, sementara hubungan leluhur-anak dapat dilihat dalam berikutnya. Catatan, kontrol template mengabaikan apapun dalam template selain konten, sementara kontrol master memelihara apapun dan mengganti tempat konten dengan konten berdasarkan ID yang sama.
-</p>
-<img src=<%~ mastercontent.gif %> alt="Master dan Konten" />
-<img src=<%~ pcrelation.gif %> alt="Hubungan leluhur-anak antara master dan konten" />
-
-<h2 id="6301">Master vs. Template Eksternal</h2>
-<p id="750592" class="block-content">
-Master sangat mirip dengan template eksternal yang diperkenalkan sejak versi 3.0.5. <a href="?page=Configurations.Templates1">Tag include</a> khusus dipakai untuk menyertakan file template eksternal ke dalam basis template.
-</p>
-<p id="750593" class="block-content">
-Baik template master maupun eksternal bisa dipakai untuk berbagi konten yang sama diantara halaman. Master adalah kontrol template yang berisi konten umum dan file kelasnya berisi logika terkait dengan master. Dilain pihak, template eksternal adalah file template murni tanpa file kelas apapun.
-</p>
-<p id="750594" class="block-content">
-Oleh karena itu, gunakan kontrol master jika konten umum harus dikaitkan dengan beberapa logika, seperti header halaman dengan kotak pencarian atau kotak login. Kontrol master membolehkan Anda untuk menetapkan bagaimana konten umum harus berinteraksi dengan pengguna akhir. Jika Anda menggunakan template eksternal, Anda harus menyimpan logika yang diperlukan dalam halaman atau kelas kontrol yang memiliki basis template.
-</p>
-<p id="750595" class="block-content">
-Performansinya, template eksternal lebih ringan daripada master seperti berisi kontrol sendiri yang berparisipasi dalam masa hidup halaman, karena pembentuk hanya dipakai saat template sedang diuraikan.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/id/Performance.page b/demos/quickstart/protected/pages/Advanced/id/Performance.page
deleted file mode 100755
index 68c88bf0..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/Performance.page
+++ /dev/null
@@ -1,88 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="6401">Penyesuaian Performansi</h1>
-<p id="810678" class="block-content">
-Performansi aplikasi Web dipengaruhi oleh banyak faktor. Akses database, operasi sistem file, bandwidth jaringan adalah faktor pengaruh potensial. PRADO mencoba dalam setiap usaha untuk mengurangi akibat performansi yang disebabkan oleh kerangka kerja.
-</p>
-
-<h2 id="6402">Caching</h2>
-<p id="810679" class="block-content">
-PRADO menyediakan teknik cache generik yang dipakai oleh beberapa bagian inti kerangka kerja. Sebagai contoh, ketika cache dihidupkan, <tt>TTemplateManager</tt> akan menyimpan template yang diurai dalam cache dan menggunakannya kembali dalam permintaan berikut, yang menghemat waktu penguraian template. <tt>TThemeManager</tt> mengadopsi strategi yang mirip untuk berhadapan dengan penguraian tema.
-</p>
-<p id="810680" class="block-content">
-Menghidupkan cache sangat mudah. Cukup tambahkan modul cache dalam konfigurasi aplikasi, dan PRADO memelihara semuanya.
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_810229">
-&lt;modules&gt;
- &lt;module id="cache" class="System.Caching.TSqliteCache" /&gt;
-&lt;/modules&gt;
-</com:TTextHighlighter>
-
-<p id="810681" class="block-content">
-Para pengembang juga bisa mengambil keuntungan dari teknik cache dalam aplikasinya. Properti <tt>Cache</tt> dari <tt>TApplication</tt> mengembalikan modul cache yang dimasukan bila ia tersedia. Untuk menyimpan dan mengambil item data dari dalam cache, gunakan perintah berikut,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_810230">
-if($application->Cache) {
- // menyimpan item data ke cache
- $application->Cache->set($keyName,$dataItem);
- // mengambil item data dari cache
- $dataItem=$application->Cache->get($keyName);
-}
-</com:TTextHighlighter>
-<p id="810682" class="block-content">
-di mana <tt>$keyName</tt> harus berupa string yang secara unik mengidentifikasi item data yang disimpan dalam cache.
-</p>
-
-<p id="840059" class="block-content">
-Sejak v3.1.0, kontrol baru bernama <a href="?page=Controls.OutputCache">TOutputCache</a> telah diperkenalkan. Kontrol ini membolehkan para pengguna untuk men-cache bagian-bagian dari output halaman. Bila dipakai dengan benar, teknik ini bisa meningkatkan performansi halaman secara signifikan karena kontrol di dalamnya tidak dibuat sama sekali jika versi yang di-cache diminta.
-</p>
-
-<h2 id="6403">Menggunakan <tt>pradolite.php</tt></h2>
-<p id="810683" class="block-content">
-Banyak file naskah PHP yang disertakan dapat mempengaruhi performansi aplikasi secara signifikan. Kelas PRADO disimpan dalam file berbeda dan ketika memproses sebuah permintaan halaman, ia bisa menyertakan puluhan file kelas. Untuk mengurangi masalah ini, setiap rilis PRADO, sebuah file bernama <tt>pradolite.php</tt> juga disertakan. File ini adalah gabungan dari seluruh file kelas inti PRADO dengan komentar dan pencatatan pesannya yang sudah dibuang.
-</p>
-<p id="810684" class="block-content">
-Untuk menggunakan <tt>pradolite.php</tt> dalam naskah entri aplikasi, ganti penyertaan <tt>prado.php</tt> dengan <tt>pradolite.php</tt>.
-</p>
-
-<h2 id="6404">Mengubah Mode Aplikasi</h2>
-<p id="810685" class="block-content">
-Mode aplikasi juga mempengaruhi performansi aplikasi. Aplikasi PRADO dapat berupa salah satu dari mode berikut: <tt>Off</tt>, <tt>Debug</tt>, <tt>Normal</tt> dan <tt>Performance</tt>. Mode <tt>Debug</tt> harus dipakai terutama selama pengembangan aplikasi, sementara mode <tt>Normal</tt> biasanya dipakai dalam tahap berikutnya setelah aplikasi disebarkan guna memastikan semuanya berjalan dengan baik. Setelah aplikasi terbukti bekerja stabil, selanjutnya mode bisa dialihkan ke <tt>Performance</tt> untuk meningkatkan performansi.
-</p>
-<p id="810686" class="block-content">
-Perbedaan antara mode <tt>Debug</tt>, <tt>Normal</tt> dan <tt>Performance</tt> yaitu di bawah mode <tt>Debug</tt>, catatan aplikasi akan berisi informasi debug, dan di bawah mode <tt>Performance</tt>, pemeriksaan cap waktu tidak dilakukan untuk template yang di-cache dan asset yang dipublikasikan. Oleh karena itu, di bawah mode <tt>Performance</tt>, aplikasi mungkin tidak berjalan dengan baik jika template atau asset dimodifikasi. Karena mode <tt>Performance</tt> dipakai terutama saat aplikasi sudah stabil, mengubah template atau asset tidak disukai.
-</p>
-<p id="810687" class="block-content">
-Untuk berganti mode aplikasi, konfigurasi itu dalam konfigurasi aplikasi:
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_810231">
-&lt;application Mode="Performance" &gt;
- ......
-&lt;/application &gt;
-</com:TTextHighlighter>
-
-<h2 id="6405">Mengurangi Ukuran Halaman</h2>
-<p id="810688" class="block-content">
-Standarnya PRADO menyimpan kondisi halaman dalam field tersembunyi dari output HTML. Kondisi halaman bisa berukuran sangat besar jika menggunakan kontrol yang kompleks, seperti <tt>TDataGrid</tt>. Guna mengurangi ukuran besarnya halaman yang dikirimkan melalui jaringan, dua strategi dapat dipakai.
-</p>
-<p id="810689" class="block-content">
-Pertama, Anda dapat mematikan kondisi tampilan dengan menyetel <tt>EnableViewState</tt> menjadi false untuk halaman atau beberapa kontrol pada halaman jika pengguna tidak perlu berinteraksi dengan halaman/kontrol.
-</p>
-<p id="810690" class="block-content">
-Kedua, Anda bisa menggunakan penyimpanan kondisi halaman berbeda. Sebagai contoh, kondisi halaman bisa disimpan dalam sesi, yang menyimpan kondisi halamaa terutama pada sisi server dan menghemat waktu transmisi jaringan. Properti <tt>StatePersisterClass</tt> dari halaman menentukan kelas persisten kondisi yang dipakai. Standarnya menggunakan <tt>System.Web.UI.TPageStatePersister</tt> untuk menyimpan kondisi persisten dalam field tersembunyi. Anda bisa mengubah properti ini ke kelas persisten Anda sendiri, selama kelas persister menerapkan antarmuka <tt>IPageStatePersister</tt>. Anda dapat mengkonfigurasi properti ini dalam beberapa tempat, seperti konfigurasi aplikasi atau konfigurasi halaman menggunakan tag &lt;pages&gt; or &lt;page&gt;,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_810232">
-&lt;pages StatePersisterClass="MyPersister1" ... &gt;
- &lt;page ID="SpecialPage" StatePersisterClass="MyPersister2" ... /&gt;
-&lt;/pages&gt;
-</com:TTextHighlighter>
-<p id="810691" class="block-content">
-Catatan, dalam <tt>SpecialPage</tt> di atas akan menggunakan <tt>MyPersister2</tt> sebagai kelas persisternya, sementara halaman lainnya akan menggunakan <tt>MyPersister1</tt>. Oleh karena itu, Anda dapat memiliki strategi perister kondisi untuk halaman yang berbeda.
-</p>
-
-<h2 id="6406">Teknik Lainnya</h2>
-<p id="810692" class="block-content">
-Teknik cache server terbukti sangat efektif meningkatkan performansi aplikasi PRADO. Sebagai contoh, kita telah mengamati bahwa dengan menggunakan Zend Optimizer, RPS (request per second) dari aplikasi PRADO bisa meningkat lebih dari sepuluh kali. Tentunya, ini merupakan harga dari output yang stabil, sementara teknik cache PRADO selalu memastikan kebenaran output.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/id/Scripts.page b/demos/quickstart/protected/pages/Advanced/id/Scripts.page
deleted file mode 100755
index 714678ab..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/Scripts.page
+++ /dev/null
@@ -1,334 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="6501">Pengenalan Javascript</h1>
-Bimbingan ini berdasarkan pada <a href="http://www.sergiopereira.com/articles/advjs.html">
-Bimbingan cepat bagi tur JavaScript tingkat lanjut dengan beberapa fitur OO</a> oleh Sergio Pereira.
-
-<h2 id="6502">Hey, Saya tidak tahu Anda bisa melakukannya</h2>
-<p id="820693" class="block-content">
- Jika Anda adalah seorang pengembang web developer dan datang dari tempat yang sama seperti saya, Anda mungkin telah mengenal sedikit Javascript dalam halaman web Anda, terutama sebagai perekat UI.
-</p>
-<p id="820694" class="block-content">
-
- Sampai saat ini, saya tahu bahwa Javascript mempunyai kemampuan OO daripada ketika saya dipekerjakan, tetapi saya tidak merasa perlu menggunakannya. Karena browser mulai mendukung set fitur Javascript dan DOM lebih distandarisasikan, itu menjadi semangat untuk menulis kode yang lebih fungsional dan kompleks untuk dijalankan pada klien. Itu membantu kelahiran fenomena AJAX.
-</p>
-<p id="820695" class="block-content">
- Saat kita mulai mempelajari apa yang diperlukan untuk menulis aplikasi AJAX yang baik, kita mulai memperhatikan bahwa Javascript yang kita pakai benar-benar berada di puncak gunung es.
- Sekarang kita melihat Javascript dipakai melampaui pekerjaan UI sehari-hari yang sederhana seperti validasi input dan tugas-tugas kecil. Kode klien sekarang jauh lebih maju dan berlapis, lebih mirip aplikasi desktop sebenarnya atau klien tebal dari klien-server. Kita melihat librari kelas, model obyek, hirarki, pola, dan banyak hal lain yang dapat kita pakai hanya dalam kode di dalam server.
-</p>
-<p id="820696" class="block-content">
- Dalam banyak cata kita dapat mengatakan bahwa dengan tiba-tiba palang ditaruh lebih tinggi dari sebelumnya. Ia mengambil palang pintu lebih ahli menulis aplikasi untuk Web baru dan kita perlu mengingkatkan keahlian Javascript kita agar bisa sampai ke sana.
- Jika Anda mencoba untuk menggunakan banyak librari javascript yang ada di luar sana, seperti
- <a href="http://prototype.conio.net/">Prototipe.js</a>,
- <a href="http://script.aculo.us/">Scriptaculous</a>,
- <a href="http://moofx.mad4milk.net/">moo.fx</a>,
- <a href="http://bennolan.com/behaviour/">Perilaku</a>,
- <a href="http://developer.yahoo.net/yui/">YUI</a>,
- dan lain-lain, Anda secara kebetulan akan menemukan diri Anda sendiri sedang membaca kode JS. Mungkin dikarenakan Anda ingin mempelajari bagaimana mereka melakukannya, atau karena Anda penasaran, atau lebih sering karena itulah satu-satunya cara untuk memahami bagaimana untuk memakainya, karena dokumentasi nampaknya tidak banyak ditujukan terutama terhadap librari ini. Apapun kasusnya, Anda akan menghadapi teknik kung-fu yang akan menjadi asing dan menakutkan jika Anda belum melihat itu sebelumnya.
-</p>
-
-<p id="820697" class="block-content">
- Kegunaan dari artikel ini tepatnya menjelaskan tipe konstruksi yang banyak dari kita belum terbiasa dengannya.
-</p>
-
-
-<h2 id="6503">JSON (JavaScript Object Notation)</h2>
-<p id="820698" class="block-content">
- JavaScript Object Notation (<a href="http://www.json.org/">JSON</a>,) adalah salah satu dari isu baru yang muncul sekitar tema AJAX. JSON, cukup dikatakan suatu cara mendeklarasikan obyek dalam Javascript. Mari kita lihat contoh segera dan perhatikan bagaimana kemudahannya.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820233">
-var myPet = { color: 'black', leg_count: 4, communicate: function(repeatCount){
-for(i=0;i&lt;repeatCount;i++) alert('Woof!');} };
-</com:TTextHighlighter>
-
-<p id="820699" class="block-content">
- Mari kita tambahkan sedikit pembentukan agar terlihat lebih mirip bagaimana kita biasa menemukannya di sana:
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820234">
-var myPet =
-{
- color: 'black',
- legCount: 4,
- communicate: function(repeatCount)
- {
- for(i=0;i&lt;repeatCount;i++)
- alert('Woof!');
- }
-};
-</com:TTextHighlighter>
-<p id="820700" class="block-content">
- Di sini kita membuat referensi ke obyek dengan dua properti (<tt>color</tt>
- dan <tt>legCount</tt>) serta metode (<tt>communicate</tt>.)
- Tidak sulit untuk memahami bahwa properti obyek dan metode didefinisikan sebagai daftar dipisahkan koma. Masing-masing anggota diperkenalkan dengan nama, diikuti oleh titik dua dan kemudian definisi. Dalam hal properti, ini cukup mudah, hanya nilai properti. Metode yang dibuat dengan penempatan fungsi anonim, yang akan kami jelaskan lebih baik di bawah baris.
- Setelah obyek dibuat dan ditempatkan ke variabel <tt>myPet</tt>, kita dapat menggunakanya seperti ini:
-</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820235">
-alert('my pet is ' + myPet.color);
-alert('my pet has ' + myPet.legCount + ' legs');
-//jika Anda anjing, mengonggong tiga kali:
-myPet.communicate(3);
-</com:TTextHighlighter>
-<p id="820701" class="block-content">
- Anda akan melihat JSON banyak dipakai di mana saja dalam JS baru-baru ini, sebagai argumen bagi fungsi, sebagai nilai hasil, sebagai respon server (dalam string,) dll.
-</p>
-
-<h2 id="6504">Apa yang Anda maksud? Fungsi juga adalah sebuah obyek?</h2>
-<p id="820702" class="block-content">
- Ini mungkin tidak biasa bagi para pengembang yang tidak pernah memikirkan tentang itu, tapi dalam fungsi JS adalah sebuah obyek. Anda bisa mengirimkan sebuah fungsi sebagai argumen terhadap fungsi lain sama seperti Anda mengirimkan sebuah string, misalnya. Ini sering dipakai dan siap digunakan.
-</p>
-
-<p id="820703" class="block-content">
- Lihat pada contoh ini. Kami akan mengirimkan fungsi ke fungsi lain yang akan memakainya.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820236">
-var myDog =
-{
- bark: function()
- {
- alert('Woof!');
- }
-};
-
-var myCat =
-{
- meow: function()
- {
- alert('I am a lazy cat. I will not meow for you.');
- }
-};
-
-function annoyThePet(petFunction)
-{
- //let's see what the pet can do
- petFunction();
-}
-
-//ganggu anjing:
-annoyThePet(myDog.bark);
-//ganggu kucing:
-annoyThePet(myCat.meow);
-</com:TTextHighlighter>
-<p id="820704" class="block-content">
- Catatan bahwa kami mengirimkan myDog.bark dan myCat.meow tanpa menambahkan tanda kurung <tt>"()"</tt> kepadanya. Jika kita melakukan itu kita tidak mengirimkan fungsi, sebaliknya kita akan memanggil metode dan mengirimkan nilai hasilnya, <tt>tidak terdefinisi</tt> dalam kedua kasus di sini.
-</p>
-
-<p id="820705" class="block-content">
- Jika Anda ingin membuat kucing malas mulai mengeong, Anda dapat dengan mudah melakukan ini:
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820237">
-myCat.meow = myDog.bark;
-myCat.meow(); //alerts 'Woof!'
-</com:TTextHighlighter>
-
-<h2 id="6505">Arrays, items, and object members</h2>
-<p id="820706" class="block-content">
- Dua baris berikut dalam JS melakukan hal yang sama.
-</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820238">
-var a = new Array();
-var b = [];
-</com:TTextHighlighter>
-<p id="820707" class="block-content">
- Karena saya yakin Anda sudah mengetahuinya, anda dapat mengakses item individual dalam sebuah array menggunakan tanda kurung kotak:
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820239">
-var a = ['first', 'second', 'third'];
-var v1 = a[0];
-var v2 = a[1];
-var v3 = a[2];
-</com:TTextHighlighter>
-<p id="820708" class="block-content">
-
- Tetapi Anda tidak dibatasi pada indeks numerik. Anda bisa mengakses banyak obyek JS dengan menggunakan namanya, dalam sebuah string. Contoh berikut membuat obyek kosong, dan menambah beberapa anggotanya dengan nama.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820240">
-var obj = {}; //baru, obyek kosong
-obj['member_1'] = 'this is the member value';
-obj['flag_2'] = false;
-obj['some_function'] = function(){ /* lakukan sesuatu */};
-</com:TTextHighlighter>
-<p id="820709" class="block-content">
- Kode di atas mempunyai pengaruh yang sama seperti berikut:
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820241">
-var obj =
-{
- member_1:'this is the member value',
- flag_2: false,
- some_function: function(){ /* lakukan sesuatu */}
-};
-</com:TTextHighlighter>
-
-<p id="820710" class="block-content">
- Dalam banyak cara, ide obyek dan array asosiatif (hashes) dalam JS tidak dibedakan. Dua baris berikut melakukan hal yang sama juga.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820242">
-obj.some_function();
-obj['some_function']();
-</com:TTextHighlighter>
-
-
-<h2 id="6506">Cukup tentang obyek, boleh saya memiliki kelas sekarang?</h2>
-<p id="820711" class="block-content">
-
- Kekuatan besar dari bahasa pemrograman obyek berasal dari pemakaian kelas. Saya tidak berpikir telah menebak bagaimana kelas didefinisikan dalam JS hanya menggunakan pengalaman saya sebelumnya dengan bahasa lainnya. Nilailah bagi diri Anda sendiri.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820243">
-//mendefinisikan kelas baru bernama Pet
-var Pet = function(petName, age)
-{
- this.name = petName;
- this.age = age;
-};
-
-//mari kita membuat obyek dari kelas Pet
-var famousDog = new Pet('Santa\'s Little Helper', 15);
-alert('This pet is called ' + famousDog.name);
-</com:TTextHighlighter>
-<p id="820712" class="block-content">
- Mari kita lihat bagaimana kita menambahkan metode pada kelas <tt>Pet</tt> kita. Kita akan menggunakan properti <tt>prototype</tt> yang dimiliki oleh semua kelas. Properti <tt>prototype</tt> adalah sebuah obyek yang berisi semua anggota yang merupakan obyek yang akan dimiliki oleh kelas.
- Bahkan kelas JS standarnya, seperti <tt>String</tt>, <tt>Number</tt>,
- dan <tt>Date</tt> mempunyai obyek <tt>prototype</tt> yang bisa kita tambah metode serta propertinya dan menjadikan setiap obyek dari kelas itu secara otomatis mendapatkan anggota baru ini.
-</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820244">
-Pet.prototype.communicate = function()
-{
- alert('I do not know what I should say, but my name is ' + this.name);
-};
-</com:TTextHighlighter>
-<p id="820713" class="block-content">
- Itulah saatnya librari seperti <a href="http://www.sergiopereira.com/articles/prototype.js.html">prototype.js</a> siap digunakan. Jika kita menggunakan prototype.js, kita dapat membuat kode kita lebih bersih (setidaknya menurut saya.)
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820245">
-var Pet = Class.create();
-Pet.prototype =
-{
- //'constructor' kita
- initialize: function(petName, age)
- {
- this.name = petName;
- this.age = age;
- },
-
- communicate: function()
- {
- alert('I do not know what I should say, but my name is ' + this.name);
- }
-};
-</com:TTextHighlighter>
-
-<h2 id="6507">Fungsi sebagai argumen, pola yang menarik</h2>
-<p id="820714" class="block-content">
- Jika Anda tidak pernah bekerja dengan bahasa yang mendukung klosur Anda akan mendapatkan idion berikut terlalu busuk.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820246">
-var myArray = ['first', 'second', 'third'];
-myArray.each( function(item, index)
-{
- alert('The item in the position #' + index + ' is:' + item);
-});
-</com:TTextHighlighter>
-<p id="820715" class="block-content">
-
- Wah! Mari kita jelaskan apa yang terjadi di sini sebelum Anda memutuskan saya telah pergi terlalu jauh dan beralih ke artikel yang lebih baik dari yang ini.
-</p>
-<p id="820716" class="block-content">
- Pertama, dalam contoh di atas kita menggunakan librari prototype.js, yang menambahkan setiap fungsi ke kelas array. Setiap fungsi menerima satu argumen yang adalah obyek fungsi. Fungsi ini, silah berganti akan dipanggil sekali untuk setiap item dalam array, mengirimkan dua argumen saat dipanggil, item dan indeks untuk item saat ini. Mari kita panggil fungsi ini sebagai fungsi pengulang kita.
- Kita juga dapat menulis kode seperti ini.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820247">
-function myIterator(item, index)
-{
- alert('The item in the position #' + index + ' is:' + item);
-}
-
-var myArray = ['first', 'second', 'third'];
-myArray.each( myIterator );
-</com:TTextHighlighter>
-<p id="820717" class="block-content">
- Tapi ketika kita tidak ingin melakukan seperti semua anak sekolah, bukan?
- Lebih serius, bagaimanapun juga, format terakhir ini lebih sederhana untuk dimengerti karena kita memasuki kode mencari fungsi myIterator. Adalah baik untuk memiliki logaika fungsi iterator di sana dalam tempat yang sama ia dipanggil. Juga, dalam hal ini, kitak tidak memerlukan fungsi iterator di manapun juga dalam kode kita, maka kita dapat mengubahnya ke dalam fungsi anonim tanpa hukuman.
-</p>
-
-<h2 id="6508"><tt>this</tt> ini tapi kadang-kadang juga <tt>this</tt> itu</h2>
-<p id="820718" class="block-content">
-
- Salah satu masalah yang paling umum yang kita miliki dengan JS adalah saat kita mulai menulis kode kita, itulah kegunaan dari kata kunci <tt>this</tt>. Ini benar-benar menjadi tripwire.
-</p>
-<p id="820719" class="block-content">
- Seperti disebutkan sebelumnya, sebuah fungsi juga adalah sebuah obyek dalam JS, dan adakalanya kita tidak memperhatikan bahwa kita mengirimkan sebuah fungsi.
-</p>
-<p id="820720" class="block-content">
- Ambil potongan kode ini sebagai contoh.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820248">
-function buttonClicked()
-{
- alert('button ' + this.id + ' was clicked');
-}
-
-var myButton = document.getElementById('someButtonID');
-var myButton2 = document.getElementById('someOtherButtonID');
-myButton.onclick = buttonClicked;
-myButton2.onclick = buttonClicked;
-</com:TTextHighlighter>
-<p id="820721" class="block-content">
- Karena fungsi buttonClicked didefinisikan di luar obyek manapun kita cenderung berpikir kata kunci <tt>this</tt> akan berisi referensi ke
- obyek <tt>window</tt> atau <tt>document</tt> (menganggap kode ini ada di tengah halaman HTML yang dilihat dalam browser.)
-</p>
-
-<p id="820722" class="block-content">
- Tapi saat kita menjalankan kode ini kita melihat ia bekerja seperti yang dimaksudkan dan menampilkan <tt>id</tt> dari tombol yang diklik. Apa yang terjadi di sini adalah bahwa kita membuat metode onclick dari setiap tombol yang berisi referensi obyek <tt>buttonClicked</tt>, mengganti apapun yang ada di sana sebelumnya. Sekarang kapan saja tombol diklik, browser akan menjalankan sesuatu mirip dengan baris berikut.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820249">
-myButton.onclick();
-</com:TTextHighlighter>
-<p id="820723" class="block-content">
-
- Itu tidak membingungkan sama sekali bukan? Tapi lihat apa yang terjadi, Anda mulai memiliki obyek lain yang berhadapan dengannya dan Anda ingin betindak pada obyek ini terhadap event seperti klik tombol.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820250">
-var myHelper =
-{
- formFields: [ ],
- emptyAllFields: function()
- {
- for(i=0; i < this.formFields.length; i++)
- {
- var elementID = this.formFields[i];
- var field = document.getElementById(elementID);
- field.value = '';
- }
- }
-};
-
-//beritahu kita ingin bekerja dengan field formulir yang mana
-myHelper.formFields.push('txtName');
-myHelper.formFields.push('txtEmail');
-myHelper.formFields.push('txtAddress');
-
-//membersihkan kotak teks:
-myHelper.emptyAllFields();
-
-var clearButton = document.getElementById('btnClear');
-clearButton.onclick = myHelper.emptyAllFields;
-</com:TTextHighlighter>
-<p id="820724" class="block-content">
- Anda pikir bagus, sekarang saya dapat mengklik tombol Clear pada halaman saya dan tiga kotak teks itu akan dikosongkan. Kemudian Anda mencoba mengklik tombol hanya untuk mendapatkan kesalahan runtime. Kesalahan akan terkait dengan
- (tebak apa?) kata kunci <tt>this</tt>.
- Masalahnya adalah bahwa <tt>this.formFields</tt> tidak didefinisikan jika
- <tt>this</tt> berisi sebuah referensi ke tombol, tepatnya itulah apa yang terjadi. Satu solusi cepat adalah menulis ulang baris kode terakhir.
-</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_820251">
-clearButton.onclick = function()
-{
- myHelper.emptyAllFields();
-};
-</com:TTextHighlighter>
-<p id="820725" class="block-content">
- Cara itu kita membuat fungsi baru yang memanggil metode penolong di dalam konteks obyek penolong.
-</p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/id/Scripts1.page b/demos/quickstart/protected/pages/Advanced/id/Scripts1.page
deleted file mode 100755
index 51535de1..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/Scripts1.page
+++ /dev/null
@@ -1,86 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="6601">Catatan Pengembang untuk prototype.js</h1>
-Bimbingan ini didasarkan pada <a href="http://www.sergiopereira.com/articles/prototype.js.html">
-Catatan Pengembang untuk prototype.js</a> oleh Sergio Pereira.
-
-<h2 id="6603">Apa itu?</h2>
-<p id="830726" class="block-content">
-Dalam hal Anda tidak pernah menggunakannya, <a href="http://prototype.conio.net">prototype.js</a> adalah librari
- JavaScript yang ditulis oleh <a href="http://www.conio.net">Sam Stephenson</a>.
- Pemikiran yang hebat ini dan kode <b>sesuai-standar</b> yang ditulis dengan baik mengambil banyak beban terkait dengan pembuatan halaman web sangat interaktif dan kaya yang mengkarakterkan Web 2.0 di belakang Anda.
-</p>
-
-<p id="830727" class="block-content">
- Jika Anda baru saja mencoba menggunakan librari ini, Anda mungkin mencatat bahwa dokumentasi bukanlah salah satu titik yang terkuat. Seperti banyak pengembang lain sebelum saya, saya mempelajari prototype.js dengan membaca kode sumber dan melakukan percobaan denganya. Saya pikir akan baik jika mengambil catatan selama saya mempelajari dan berbagi dengan orang lain.
-</p>
-<p id="830728" class="block-content">
- Setelah Anda membaca contoh dan referensi, para pengembang yang terbiasa dengan bahasa pemrograman Ruby akan mencatat kesamaan maksud antara kelas built-in Ruby dan banyak ekstensi diimplementasikan oleh librari ini.
-</p>
-
-
-<h2 id="6604">Menggunakan fungsi <tt>$()</tt></h2>
-<p id="830729" class="block-content">
- Fungsi <tt>$()</tt> adalah jalan pintas yang siap digunakan untuk fungsi yang semua-terlalu-sering <tt>document.getElementById()</tt> terhadap DOM. Seperti fungsi DOM, fungsi ini mengembalikan elemen yang id-nya dikirimkan sebagai sebuah argumen.
-</p>
-
-<p id="830730" class="block-content">
- Tidak seperti fungsi DOM, bagaimanapun juga, yang satu ini melampauinya. Anda dapat mengirimkan lebih dari satu id dan
- <tt>$()</tt> akan mengembalikan obyek <tt>Array</tt> dengan semua elemen yang diminta. Contoh di bawah seharunya menggambarkan ini.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_830252">
-&lt;com:TClientScript UsingClientScripts="prado" /&gt;
-<div id="myDiv">
- <p id="830731" class="block-content">This is a paragraph</p>
-</div>
-
-<div id="myOtherDiv">
- <p id="830732" class="block-content">This is another paragraph</p>
-</div>
-
-<input type="button" value=Test1 onclick="test1();" />
-<input type="button" value=Test2 onclick="test2();" />
-
-<script type="text/javascript">
-/*<![CDATA[*/
-function test1()
-{
- var d = $('myDiv');
- alert(d.innerHTML);
-}
-
-function test2()
-{
- var divs = $('myDiv','myOtherDiv');
- for(i=0; i<divs.length; i++)
- {
- alert(divs[i].innerHTML);
- }
-}
-/*]]>*/
-</script>
-</com:TTextHighlighter>
-<p id="830733" class="block-content">
- Hal baik lainnya dari fungsi ini adalah bahwa Anda bisa mengirimkan baik string <tt>id</tt> ataupun elemen obyek itu sendiri, yang menjadikan fungsi ini sangat berguna ketika membuat fungsi lain yang juga mengambil bentuk argumen.
-</p>
-
-<h2 id="6605">Menggunakan fungsi <tt>$F()</tt></h2>
-
-<p id="830734" class="block-content">
- Fungsi <tt>$F()</tt> adalah jalan pintas penyambutan lainnya. Ia mengembalikan nilai dari setiap kontrol input field, seperti kotak teks atau daftar drop-down. Fungsi bisa diambil sebagai argumen baik elemen <tt>id</tt> ataupun elemen obyek itu sendiri.
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_830253">
-<input type="text" id="userName" value="Joe Doe" />
-<input type="button" value=Test3 onclick="test3();" />
-
-<script type="text/javascript">
-/*<![CDATA[*/
-function test3()
-{
- alert($F('userName'));
-}
-/*]]>*/
-</script>
-</com:TTextHighlighter>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/id/Scripts2.page b/demos/quickstart/protected/pages/Advanced/id/Scripts2.page
deleted file mode 100755
index 80277628..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/Scripts2.page
+++ /dev/null
@@ -1,214 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="6701">Event DOM dan Javascript</h1>
-
-<h2 id="6702">Penanganan event dasar</h2>
-
-<p id="840735" class="block-content">Sintaks untuk bekerja dengan event terlihat seperti kode di bawah.</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840254">
-Event.observe(element, name, observer, [useCapture]);
-</com:TTextHighlighter>
-
-<p id="840736" class="block-content">Menganggap untuk saat ini kita ingin mengamati sebuah link yang diklik, kita dapat melakukan yang berikut:</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840255">
-// &lt;a id="clicker" href="http://foo.com"&gt;Click me&lt;/a&gt;
-Event.observe('clicker', 'click', function(event)
-{
- alert('clicked!');
-});
-</com:TTextHighlighter>
-
-<p id="840737" class="block-content">Jika kita menginginkan untuk mendapatkan elemen yang memicu event, kita melakukan ini:</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840256">
-Event.observe('clicker', 'click', function(event)
-{
- alert(Event.element(event));
-});
-</com:TTextHighlighter>
-
-<h2 id="6703">Mengamati tekanan tombol</h2>
-
-<p id="840738" class="block-content">Jika kita ingin mengamati tekanan tombol untuk seluruh dokumen, kita dapat melakukan yang berikut:</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840257">
-Event.observe(document, 'keypress', function(event)
-{
- if(Event.keyCode(event) == Event.KEY_TAB)
- alert('Tab Pressed');
-});
-</com:TTextHighlighter>
-
-<p id="840739" class="block-content">Dan katakanlah kita ingin melacak apa yang telak diketikan:</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840258">
-Event.observe('search', 'keypress', function(event)
-{
- Element.update('search-results', $F(Event.element(event)));
-});
-</com:TTextHighlighter>
-
-<p id="840740" class="block-content">Prototipe mendefinisikan properti di dalam obyek event untuk beberapa dari tombol yang lebih umum, maka jangan ragu-ragu untuk mencari di sekitar Prototype guna melihat yang mana saja itu.</p>
-
-<p id="840741" class="block-content">Catatan terakhir pada event tekanan tombol; Jika Anda ingin mendeteksi klik kiri, Anda bisa menggunakan <tt>Event.isLeftClick(event)</tt>.</p>
-
-<h2 id="6704">Mendapatkan koordinat dari penunjuk mouse</h2>
-
-<p id="840742" class="block-content">Tarik dan jatuhkan, pengukuran ulang elemen dinamis, permainan, dan lebih banyak lagi, semuanya memerlukan kemampuan untuk melacak lokasi X dan Y dari mouse. Prototipe menjadikan hal ini cukup sederhana. Kode di bawah melacak posisi X dan Y dari mouse dan memindahkan nilainya ke dalam kotak input bernama mouse.</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840259">
-Event.observe(document, 'mousemove', function(event)
-{
- $('mouse').value = "X: " + Event.pointerX(event) +
- "px Y: " + Event.pointerY(event) + "px";
-});
-</com:TTextHighlighter>
-
-<p id="840743" class="block-content">Jika kita ingin mengamati lokasi mouse saat ia melewati elemen tertentu, cukup ubah argumen dokumen ke id atau elemen yang relevan.</p>
-
-<h2 id="6705">Menghentikan Propagasi</h2>
-
-<p id="840744" class="block-content"><tt>Event.stop(event)</tt> akan menghentikan propagasi sebuah event .</p>
-
-<h2 id="6706">Event, Penyatuan, dan Obyek</h2>
-
-<p id="840745" class="block-content">Sejauh ini semuanya sudah jelas, tapi sesuatu mulai menjadi sedikit lebih rumit ketika Anda perlu bekerja dengan event dalam lingkungan obyek-terorientasi. Anda harus berhadapan dengan penyatuan dan sintaks yang terlihat aneh yang memerlukan beberapa waktu bagi Anda untuk mengetahuinya.</p>
-
-<p id="840746" class="block-content">Mari kita lihat pada beberapa kode agar Anda bisa mendapatkan pengertian yang lebih baik atas apa yang sedang saya bicarakan.</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840260">
-EventDispenser = Class.create();
-EventDispenser.prototype =
-{
- initialize: function(list)
- {
- this.list = list;
-
- // Amati klik pada item list kita
- $$(this.list + " li").each(function(item)
- {
- Event.observe(item, 'click', this.showTagName.bindEvent(this));
- }.bind(this));
-
- // Amati saat tombol pada keyboard ditekan.
- // Dalam pengamat, kita memeriksa
- // tombol tab dan memunculkan pesan jika ditekan.
- Event.observe(document, 'keypress', this.onKeyPress.bindEvent(this));
-
- // Amati kotak pencarian kita yang palsu. Ketika pengguna mengetik
- // sesuatu ke dalam kotak, pengamat akan mengambil nilai (-1) itu
- // dan memutakhirkan hasil pencarian div dengannya.
- Event.observe('search', 'keypress', this.onSearch.bindEvent(this));
-
- Event.observe(document, 'mousemove', this.onMouseMove.bindEvent(this));
- },
-
- // Fungsi bebas untuk merespon event
- showTagName: function(event)
- {
- alert(Event.element(event).tagName);
- },
-
- onKeyPress: function(event)
- {
- var code = event.keyCode;
- if(code == Event.KEY_TAB)
- alert('Tab key was pressed');
- },
-
- onSearch: function(event)
- {
- Element.update('search-results', $F(Event.element(event)));
- },
-
- onMouseMove: function(event)
- {
- $('mouse').value = "X: " + Event.pointerX(event) +
- "px Y: " + Event.pointerY(event) + "px";
- }
-}
-</com:TTextHighlighter>
-<p id="840747" class="block-content">Wah! Apa yang terjadi di sini? Kita telah mendefinisikan kelas kustom kita <tt>EventDispenser</tt>. Kita akan menggunakan kelas ini untuk menyiapkan event untuk dokumenkita. Banyak dari kode ini ditulis ulang yang kita lihat di awal kecuali kali ini, kita bekerja dari dalam sebuah obyek.</p>
-
-<p id="840748" class="block-content">Melihat metode <tt>initialize</tt>, sebenarnya kita dapat melihat bagaimana sesuatu menjadi berbeda sekarang. Lihat kode di bawah ini:</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840261">
-// Observe clicks on our list items
-$$(this.list + " li").each(function(item)
-{
- Event.observe(item, 'click', this.showTagName.bindEvent(this));
-}.bind(this));
-</com:TTextHighlighter>
-
-<p id="840749" class="block-content">Kita mendapatkan iterator, penyatuan dan semua hal lainnya. Mari kita rinci apa yang dikerjakan kode ini.</p>
-
-<p id="840750" class="block-content">Pertama kita memburu koleksi elemen berdasarkan selektor CSS. Ini menggunakan fungsi selektor Prototipe <tt>$$()</tt>.
-Setelah kita menemukan daftar item kita berhadapan dengan apa yang kita kirim ke dalam setiap iterasi di mana kita akan menambahkan pengamat kita.</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840262">
-Event.observe(item, 'click', this.showTagName.bindEvent(this));
-</com:TTextHighlighter>
-
-<p id="840751" class="block-content">Sekarang, melihat kode di atas, Anda akan mencatat fungsi <tt>bindEvent</tt>. Ini mengambil metode sebelumnya <tt>showTagName</tt> dan memperlakukannya sebagai metode yang akan dipicu ketika seseorang mengklik salah satu dari item daftar kita.</p>
-
-<p id="840752" class="block-content">Anda juga akan mencatat bahwa kita mengirimkan ini sebagai argumen ke fungsi <tt>bindEvent</tt>.
-Ini membolehkan kita untuk mereferensi obyek dalam konteks <tt>EventDispenser</tt>
-di dalam fungsi <tt>showTagName(event)</tt> kita. Jika fungsi <tt>showTagName</tt> memerlukan parameter tambahan, Anda melampirkannya ke parameter terakhir dari <tt>bindEvent</tt>. Sebagai contoh</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840263">
-this.showTagName.bindEvent(this, param1, param2);
-
-//di mana fungsi showTagName didefinisikan seperti
-showTime : function (event, param1, param2) { ... }
-</com:TTextHighlighter>
-
-<p id="840753" class="block-content">Selanjutnya, Anda akan melihat <tt>bind(this)</tt> yang dilampirkan ke fungsi iterator.
-Ini sama sekali tidak berkaitan dengan event, ia berada di sini untuk membolehkan saya menggunakan <tt>this</tt> di dalam iterator. Jika kita tidak menggunakan <tt>bind(this)</tt>, saya tidak bisa mereferensi metode <tt>showTagName</tt> di dalam iterator.</p>
-
-<p id="840754" class="block-content">Ok, kita berlanjut untuk melihat metode kita yang sebenarnya dipanggil saat terjadi event. Karena kita sudah berhadapan dengan <tt>showTagName</tt>, mari kita lihat itu.</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840264">
-showTagName: function(event)
-{
- alert(Event.element(event).tagName);
-}
-</com:TTextHighlighter>
-
-<p id="840755" class="block-content">Seperti yang Anda lihat, fungsi ini menerima satu argumen--event.
-Agar kita mendapatkan elemen yang memicu event kita perlu mengirimkan argumen ke <tt>Event.element</tt>. Sekarang kita dapat memanipulasinya kapan saja.</p>
-
-<p id="840756" class="block-content">Ini mencakup bagian yang paling membingungkan dari kode kita. Teks di atas juga relevan untuk bagian sisa dari kode kita. Jika ada sesuatu mengenai ini yang tidak Anda mengerti, jangan ragu-ragu untuk mengajukan pertanyaan dalam forum.</p>
-
-<h2 id="6707">Menghapus Pendengar Event</h2>
-
-<p id="840757" class="block-content">Yang satu ini melontarkan saya dari lingkaran untuk pertama kali saya mencoba menggunakannya.
-Saya mencoba sesuatu yang mirip dengan apa yang saya lakukan dalam pemanggilan <tt>Event.observe</tt> dengan kekecualian penggunaan <tt>stopObserving</tt>, tapi tidak ada yang berubah. Dengan kata lain, kode di bawah ini <b>TIDAK</b> bekerja.</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840265">
-$$(this.list + " li").each(function(item)
-{
- Event.stopObserving(item, 'click', this.showTagName);
-}.bind(this));
-</com:TTextHighlighter>
-
-<p id="840758" class="block-content">Apa yang terjadi di sini? Alasan ini tidak bekerja karena tidak ada penunjuk ke pengamat. Ini berarti bahwa ketika kita mengirimkan <tt>this.showTagName</tt> dalam metode <tt>Event.observe</tt> sebelumnya, kita mengirimkannya sebagai fungsi anonim. Kita tidak bisa mereferensi fungsi anonim karena ia tidak mempunyai penunjuk.</p>
-
-<p id="840759" class="block-content">Lalu bagaimana kita yakin pekerjaan diselesaikan? Semua yang kita perlukan adalah memberikan fungsi mengamati penunjuk, atau kelompok versi bebas: Setel variabel yang mengarah ke <tt>this.showTagName</tt>. Ok, mari kita ubah kode kita sedikit.</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840266">
-this.showTagObserver = this.showTagName.bindEvent(this);
-
-// Amati klik pada item list kita
-$$(this.list + " li").each(function(item)
-{
- Event.observe(item, 'click', this.showTagObserver);
-}.bind(this));
-</com:TTextHighlighter>
-
-<p id="840760" class="block-content">Sekarang kita bisa menghapus pendengar event dari daftar kita seperti ini:</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_840267">
-$$(this.list + " li").each(function(item)
-{
- Event.stopObserving(item, 'click', this.showTagObserver);
-}.bind(this));
-</com:TTextHighlighter>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/id/Scripts3.page b/demos/quickstart/protected/pages/Advanced/id/Scripts3.page
deleted file mode 100755
index b313e7fc..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/Scripts3.page
+++ /dev/null
@@ -1,35 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="6801">Javascript dalam PRADO, Pertanyaan dan Jawaban</h1>
-<h2 id="6802">Bagaimana saya menyertakan librari Javascript yang didistribusikan dengan Prado?</h2>
-<p id="880060" class="block-content">Librari javascript yang didistribusikan dengan Prado dapat ditemukan dalam direktori
-<tt>framework/Web/Javascripts/source</tt>. File <tt>packages.php</tt>
-dalam direktori itu mendefinisikan daftar nama paket yang tersedia yang diambil. Itu bisa diambil seperti berikut.
-</p>
-<ul id="u1" class="block-content"><li>Menambahkan librari dalam template
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_850268">
-&lt;com:TClientScript PradoScripts="effects" /&gt;
-</com:TTextHighlighter>
- </li>
- <li>Menambahkan librari dalam kode PHP
- <com:TTextHighlighter Language="php" CssClass="source block-content" id="code_850269">
-$this->getPage()->getClientScript()->registerPradoScript("effects");
- </com:TTextHighlighter>
- </li>
-</ul>
-Paket librari yang tersedia disertakan dalam Prado adalah
-<ul id="u2" class="block-content">
- <li><tt>prado</tt> : javascript dasar kerangka kerja PRADO berdasarkan Prototype</li>
- <li><tt>effects</tt> : efek visual dari script.aculo.us</li>
- <li><tt>ajax</tt> : terkait ajax dan callback bedasarkan Prototype</li>
- <li><tt>validator</tt> : validasi</li>
- <li><tt>logger</tt> : pencatat javascript dan browser obyek</li>
- <li><tt>datepicker</tt> : datepicker</li>
- <li><tt>colorpicker</tt> : colorpicker</li>
-</ul>
-
-<p id="850761" class="block-content">Ketergantungan masing-masing librari secara otomatis dipecahkan. Komponen yang memerlukan libari tertentu juga akan secara otomatis mengambil librari yang diperlukan.
-Sebagai contoh, jika Anda menambah komponen <tt>TDatePicker</tt> pada halaman, <tt>datepicker</tt> dan dependensinya akan secara otomatis disertakan pada halaman.</p>
-
-<p id="850762" class="block-content">Lihat <a href="?page=Controls.ClientScript">TClientScript</a> untuk opsi penambahan kode Javascript kustom Anda ke halaman.</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/id/Security.page b/demos/quickstart/protected/pages/Advanced/id/Security.page
deleted file mode 100755
index 5e6a8602..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/Security.page
+++ /dev/null
@@ -1,79 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="5601">Keamanan</h1>
-
-<h2 id="5602">Perlindungan Kondisi Tampilan</h2>
-<p id="730563" class="block-content">
-Kondisi tampilan berada di jantung PRADO. Kondisi tampilan menggambarkan data yang bisa dipakai untuk menyimpan kembali halaman ke kondisi terakhir kali dilihat oleh pengguna akhir sebelum membuat permintaan saat ini. Standarnya, PRADO menggunakan field tersembunyi untuk menyimpan informasi kondisi tampilan.
-</p>
-<p id="730564" class="block-content">
-Sangat penting untuk memastikan bahwa kondisi tampilan tidak dirusak oleh pengguna akhir. Tanpa perlindungan, pengguna yang jahat bisa menginjeksi kode berbahaya ke dalam kondisi tampilan dan instruksi yang tidak diinginkan yang mungkin dilakukan ketika kondisi halaman sedang dikembalikan pada sisi server.
-</p>
-<p id="730565" class="block-content">
-Untuk mencegah kondisi tampilan dari perusakan, PRADO memaksa kondisi tampilan memeriksa HMAC (Keyed-Hashing for Message Authentication) sebelum menyimpan kembali kondisi tampilan. Pemeriksaan itu bisa mendeteksi apakah kondisi tampilan sudah dirusak atau tidak oleh pengguna akhir. Seandainya kondisi tampilan dimodifikasi, PRADO akan berhenti mengembalikan kondisi tampilan dan mengembalikan pesan kesalahan.
-</p>
-<p id="730566" class="block-content">
-Pemeriksaan HMAC memerlukan kunci pribadi yang harus menjadi rahasia bagi pengguna akhir. Para pengembang dapat menetapkan kunci ataupun membiarkan PRADO membuat kunci secara otomatis. Menetapkan kunci secara manual berguna saat aplikasi berjalan pada taman server. Untuk melakukannya, konfigurasi <tt>TSecurityManager</tt> dalam konfigurasi aplikasi,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_730186">
-&lt;modules&gt;
- &lt;module id="security"
- class="TSecurityManager"
- ValidationKey="my private key" /&gt;
-&lt;/modules&gt;
-</com:TTextHighlighter>
-<p id="730567" class="block-content">
-Pemeriksaan HMAC tidak mencegah pengguna akhir dari pembacaan konten kondisi tampilan. Ukuran keamanan yang ditambahkanadalah untuk mengenkripsi informasi kondisi tampilan agar pengguna akhir tidak bisa mengurainya. Untuk menghidupkan enkripsi kondisi tampilan, setel <tt>EnableStateEncryption</tt> dari halaman menjadi true. Ini dapat dilakukan dalam <a href="?page=Configurations.PageConfig">konfigurasi halaman</a> atau dalam kode halaman. Catatan, mengenkripsi kondisi tampilan dapat menurunkan performansi aplikasi. Strategi yang lebih baik adalah dengan menyimpan kondisi tampilan pada sisi server daripada field tersembunyi.
-</p>
-
-<h2 id="5603">Pencegahan Penaskahan Situs Silang</h2>
-<p id="730568" class="block-content">
-Penaskahan situs silang (juga dikenal sebagai XSS) terjadi saat aplikasi web mengumpulkan data dari pengguna. Penyerang akan sering menyuntikan JavaScript, VBScript, ActiveX, HTML, atau Flash menjadi aplikasi yang mudah diserang guna mengelabui pengguna aplikasi lain dan mengumpulkan data darinya. Sebagai contoh, Sistem forum yang didesain dengan buruk dapat menampilkan input pengguna dalam tulisan forum tanpa pemeriksaan apapun. Kemudian penyerang bisa menyuntikan beberapa kode jahat JavaScript ke dalam sebuah tulisan agar pengguna lain membaca tulisan ini, JavaScript berjalan tidak seperti yang diharapkan pada komputernya.
-</p>
-<p id="730569" class="block-content">
-Salah satu ukuran paling penting guna mencegah penyerangan XSS adalah memeriksa input pengguna sebelum menampilkannya. Seseorang dapat melakukan pengkodean-HTML dengan input pengguna untuk mencapai tujuan ini. Akan tetapi, dalam beberapa situasi, pengkodean-HTML mungkin tidak disukai karena ia mematikan seluruh tag HTML.
-</p>
-<p id="730570" class="block-content">
-PRADO menyertakan pekerjaan <a href="http://pixel-apes.com/safehtml/">SafeHTML</a> dan menyediakan bagi para pengembang komponen berguna yang disebut <tt>TSafeHtml</tt>. Dengan mengurung konten di dalam tag komponen <tt>TSafeHtml</tt>, konten yang dikurung dipastikan amab bagi pengguna akhir. Sebagai tambahan, <tt>TTextBox</tt> yang umum dipakai memiliki properti <tt>SafeText</tt> yang berisi input pengguna yang dipastikan aman bila ditampilkan secara langsung ke pengguna akhir.
-</p>
-
-<h2 id="5604">Pencegahan Serangan Cookie</h2>
-<p id="730571" class="block-content">
-Melindungi cookie dari serangan adalah sangat penting, karena ID sesi umumnya disimpan dalam cookie. Jika seseorang memegang ID sesi, intinya ia mempunyai semua informasi sesi relevan.
-</p>
-<p id="730572" class="block-content">
-Ada beberapa pengukur guna mencegah cookie dari serangan.
-</p>
-<ul id="u1" class="block-content">
- <li>Aplikasi dapat menggunakan SSL untuk membuat kanal komunikasi aman dan hanya mengirimkan cookie otentikasi melalui sambungan HTTPS. Para penyerang selanjutnya melakukan decipher isi dalam cookie yang dikirimkan.</li>
- <li>Sesi berakhir secara tidak benar, termasuk semua token cookie dan sesi, untuk mengurangi kemungkinan penyerangan.</li>
- <li>Mencegah penaskahan situs-silang (XSS) yang menyebabkan kode sesukanya berjalan dalam browser pengguna dan memunculkan cookie-nya.</li>
- <li>Memvalidasi data cookie dan mendeteksi apakah cookie diubah atau tidak.</li>
-</ul>
-<p id="730573" class="block-content">
-PRADO menertapkan skema validasi cookie yang mencegah cookie dimodifikasi. Dalam keadaan tertentu, ia melakukan pemeriksaan HMAC untuk nilai cookie jika validasi cookie dihidupkan.
-</p>
-<p id="730574" class="block-content">
-Validasi cookie standarnya dimatikan. Untuk menghidupkannya, konfigurasi modul <tt>THttpRequest</tt> seperti berikut,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_730187">
-<modules>
- <module id="request" class="THttpRequest" EnableCookieValidation="true" />
-</modules>
-</com:TTextHighlighter>
-<p id="730575" class="block-content">
-Untuk menggunakan skema validasi cookie yang disediakan oleh PRADO, Anda juga perlu mengambil cookie melalui koleksi <tt>Cookies</tt> dari <tt>THttpRequest</tt> dengan menggunakan pernyataan PHP berikut,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_730188">
-foreach($this->Request->Cookies as $cookie)
- // $cookie adalah tipe THttpCookie
-</com:TTextHighlighter>
-<p id="730576" class="block-content">
-Untuk mengirimkan data cookie yang dikode dengan informasi validasi, buat obyek <tt>THttpCookie</tt> baru dan menambahkannya ke koleksi <tt>Cookies</tt> dari <tt>THttpResponse</tt>,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_730189">
-$cookie=new THttpCookie($name,$value);
-$this->Response->Cookies[]=$cookie;
-</com:TTextHighlighter>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/id/State.page b/demos/quickstart/protected/pages/Advanced/id/State.page
deleted file mode 100755
index 42c5a0c4..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/State.page
+++ /dev/null
@@ -1,54 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="6001">Kondisi Persisten</h1>
-<p id="770606" class="block-content">
-Aplikasi Web sering memerlukan untuk mengingat apa yang pengguna akhir kerjakan dalam permintaan halaman sebelumnya agar permintaan halaman baru bisa dilayani sesuai dengan itu. Persisten kondisi untuk menangani masalah ini. Secara tradisional, jika halaman perlu memelihara interaksi pengguna, ia akan mengurut ulang sesi, cookie, atau field tersembunyi. PRADO menyediakan baris baru skema kondisi persisten, termasuk kondisi tampilan, kondisi kontrol, dan kondisi aplikasi.
-</p>
-
-<h2 id="6002">Kondisi Tampilan</h2>
-<p id="770607" class="block-content">
-Kondisi tampilan berada di jantung PRADO. Dengan kondisi tampilan, halaman Web menjadi tangguh dan mampu menyimpan kembali halaman ke kondisi terakhir kali pengguna akhir berinteraksi sebelum permintaan halaman saat ini. Pemrograman Web mirip dengan pemrograman GUI Windows, dan para pengembang dapat berpikir secara kontinyu tanpa mencemaskan mengenai perjalanan pulang pergi antara pengguna akhir dan server web. Sebagai contoh, dengan kondisi tampilan, sebuah kontrol kotak centang dapat mendeteksi apakah input pengguna mengubah konten dalam kotak centang atau tidak.
-</p>
-<p id="770608" class="block-content">
-Kondisi tampilan hanya tersedia untuk kontrol. Kondisi tampilan dari kontrol bisa dimatikan dengan menyetel properti <tt>EnableViewState</tt> menjadi false. Untuk menyimpan variabel dalam kondisi tampilan, panggil yang berikut,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_770197">
-$this->setViewState('Caption',$caption);
-</com:TTextHighlighter>
-<p id="770609" class="block-content">
-di mana <tt>$this</tt> merujuk ke obyek kontrol, <tt>Caption</tt> adalah kunci unik yang mengidentifikasi variabel <tt>$caption</tt> yang disimpan dalam kondisi tampilan. Untuk mengambil variabel kembali dari kondisi tampilan, panggil yang berikut,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_770198">
-$caption = $this->getViewState('Caption');
-</com:TTextHighlighter>
-
-<h2 id="6003">Kondisi Kontrol</h2>
-<p id="770610" class="block-content">
-Kondisi kontrol mirip dengan kondisi tampilan dalam setiap aspek kecuali bahwa kondisi kontrol tidak bisa dimatikan. Kondisi kontrol bertujuan dipakai untuk menyimpan informasi kondisi krusial halaman atau kontrol mana yang tidak bekerja dengan baik.
-</p>
-<p id="770611" class="block-content">
-Untuk menyimpan dan mengambil variabel dalam kondisi kontrol, gunakan perintah berikut,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_770199">
-$this->setControlState('Caption',$caption);
-$caption = $this->getControlState('Caption');
-</com:TTextHighlighter>
-
-<h2 id="6004">Kondisi Aplikasi</h2>
-<p id="770612" class="block-content">
-Kondisi aplikasi merujuk ke data yang persisten melalui sesi pengguna dan permintaan halaman. Contoh umum dari kondisi aplikasi adalah penghitung kunjungan pengguna. Nilai penghitung adalah persisten meskipun sesi pengguna saat ini berakhir. Catatan, kondisi tampilan dan kondisi kontrol hilang jika permintaan pengguna untuk halaman yang berbeda, karena kondisi sesi hilang jika sesi pengguna berakhir.
-</p>
-<p id="770613" class="block-content">
-Untuk menyimpan dan mengambil variabel dalam kondisi aplikasi, gunakan perintah berikut,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_770200">
-$application->setGlobalState('Caption',$caption);
-$caption = $application->getGlobalState('Caption');
-</com:TTextHighlighter>
-
-<h2 id="6005">Kondisi Sesi</h2>
-<p id="770614" class="block-content">
-PRADO melapisi manajemen sesi tradisional dalam modul <tt>THttpSession</tt>. Modul dapat diakses dari dalam setiap komponen dengan menggunakan <tt>$this->Session</tt>, di mana <tt>$this</tt> merujuk ke obyek komponen.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/id/Themes.page b/demos/quickstart/protected/pages/Advanced/id/Themes.page
deleted file mode 100755
index 5a917484..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/Themes.page
+++ /dev/null
@@ -1,60 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="5901">Tema dan Skin</h1>
-
-<h2 id="5902">Pengenalan</h2>
-<p id="760596" class="block-content">
-Tema dalam PRADO menyediakan cara bagi para pengembang untuk menyediakan tampilan konsisten melintasi seluruh aplikasi web. Tema berisi daftar nilai awal untuk properti dari berbagai tipe kontrol. Ketika menerapkan tema ke sebuah halaman, semua kontrol dalam halaman tersebut akan menerima nilai properti awal terkait dari tema. Ini membolehkan tema untuk berinteraksi dengan seti properti yang banyak dari berbagai kontrol PRADO, berarti bahwa tema bisa dipakai untuk menetapkan jangkauan besar dari properti penyajian yang tidak bisa dilakukan metode tema lain (misaslnya CSS). Sebagai contoh, tema bisa dipakai untuk menetapkan ukuran standar halaman dari semua grid data melintasi aplikasi dengan menetapkan nilai standar untuk properti <tt>PageSize</tt> dari kontrol <tt>TDataGrid</tt>.
-</p>
-
-<h2 id="5903">Memahami Tema</h2>
-<p id="760597" class="block-content">
-Tema adalah sebuah direktori yang terdiri dari file skin, file javascript dan file CSS. Setiap file javascript atau CSS yang berada dalam tema akan diregistrasi dengan halaman yang menerapkan tema. Skin adalah set nilai properti awal untuk tipe kontrol tertentu. Tipe kontrol dapat memiliki satu atau beberapa skin, masing-masing diidentifikasi dengan <tt>SkinID</tt> unik. Ketika menerapkan tema ke sebuah halaman, skin diterapkan ke kontrol jika tipe kontrol dan nilai <tt>SkinID</tt> keduanya sama dengan ada dalam skin. Catatan, jika skin memiliki nilai <tt>SkinID</tt> kosong, ia akan menerapkannya ke semua kontrol dari tipe tertentu yang <tt>SkinID</tt>-nya tidak disetel atau kosong. File skin terdiri dari satu atau beberapa skin, untuk satu atau beberapa tipe kontrol. Tema adalah gabungan dari skin yang didefinisikan dalam semua file skin.
-</p>
-
-<h2 id="5904">Menggunakan Tema</h2>
-<p id="760598" class="block-content">
-Untuk menggunakan sebuah tema, Anda perlu menyetel properti <tt>Theme</tt> dari halaman dengan nama tema, yaitu nama direktori tema. Anda dapat menyetelnya dalam <a href="?page=Configurations.PageConfig">konfigurasi halaman</a> atau dalam konstruktor atau metode <tt>onPreInit()</tt> dari halaman. Anda tidak bisa menyetel properti setelah <tt>onPreInit()</tt> karena saat itu, kontrol anak dari halaman sudah dibuat (skin harus diterapkan ke kontrol setelah kontrol tersebut dibuat.)
-</p>
-<p id="760599" class="block-content">
-Untuk menggunakan skin tertentu dalam tema untuk sebuah kontrol, setel properti <tt>SkinID</tt> dari kontrol dalam template seperti berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_760194">
-&lt;com:TButton SkinID="Blue" ... /&gt;
-</com:TTextHighlighter>
-<p id="760600" class="block-content">
-Ini akan menerapkan skin 'Blue' ke tombol. Catatan, nilai properti awal yang ditetapkan oleh skin 'Blue' akan mengganti setiap nilai properti tombol. Gunakan tema stylesheet jika Anda tidak ingi diganti. Untuk menggunakan tema stylesheet, setel properti <tt>StyleSheetTheme</tt> dari halaman daripada <tt>Theme</tt> (Anda bisa memiliki keduanya <tt>StyleSheetTheme</tt> dan <tt>Theme</tt>).
-</p>
-<p id="760601" class="block-content">
-Untuk menggunakan file Javascript dan file CSS yang berada dalam sebuah tema, kontrol <tt>THead</tt> harus ditempatkan pada template halaman. Ini dikarenakan tema akan meregistrasi file itu dengan halaman dan <tt>THead</tt> adalah tempat yang tepat untuk menempatkan mengambil file tersebut.
-</p>
-<p id="760602" class="block-content">
-Dimungkinkan untuk menetapkan tipe media dari file CSS yang berisikan sebuah tema. Standarnya, file CSS berlaku untuk semua tipe media. Jika file CSS bernama seperti <tt>mystyle.print.css</tt>, ia akan diterapkan hanya pada tipe media <tt>print</tt>. Sebagai contoh lain, <tt>mystyle.screen.css</tt> hanya berlaku untuk media <tt>screen</tt>, dan <tt>mystyle.css</tt> berlaku bagi semua tipe media.
-</p>
-
-<h2 id="5905">Penyimpanan Tema</h2>
-<p id="760603" class="block-content">
-Semua tema standarnya harus ditempatkan di bawah direktori <tt>[AppEntryPath]/themes</tt>, di mana <tt>AppEntryPath</tt> merujuk ke direktori yang berisi naskah entri aplikasi. Jika Anda ingin menggunakan direktori berbeda, konfigurasi properti <tt>BasePath</tt> dan <tt>BaseUrl</tt> dari modul <tt>System.Web.UI.TThemeManager</tt> dalam konfigurasi aplikasi,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_760195">
-&lt;service id="page" class="TPageService"&gt;
- &lt;modules&gt;
- &lt;module id="theme"
- class="System.Web.UI.TThemeManager"
- BasePath="mythemes"
- BaseUrl="mythemes" /&gt;
- &lt;/modules&gt;
-&lt;/service&gt;
-</com:TTextHighlighter>
-
-<h2 id="5906">Membuat Tema</h2>
-<p id="760604" class="block-content">
-Membuat sebuah tema melibatkan pembuatan direktori tema dan penulisan file skin (dan kemungkinan file Javascript serta CSS). Nama file skin harus diakhiri dengan <tt>.skin</tt>. Format file skin adalah sama seperti file template kontrol. Karena file skin tidak mendefinisikan penyajian hubungan leluhur-aak diantara kontrolnya, Anda tidak bisa menempatkan tag komponen di dalam yang lainnya. Dan setiap teks statis antara tag komponen diabaikan. Untuk mendefinisikan skin 'Blue' seperti telah disebutkan di atas untuk <tt>TButton</tt>, tulis yang berikut dalam file skin,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_760196">
-&lt;com:TButton SkinID="Blue" BackColor="blue" /&gt;
-</com:TTextHighlighter>
-<p id="760605" class="block-content">
-Seperti sudah disebutan di atas, Anda dapat menyimpan beberapa skin dalam satu file skin, atau memisahkannya ke dalam beberapa file. Strategi yang umum digunakan adalah bahwa setiap file skin hanya berisi skin untuk satu tipe kontrol. Sebagai contoh, <tt>Button.skin</tt> akan berisi skin hanya untuk tipe kontrol <tt>TButton</tt>.
-</p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Advanced/id/exception.gif b/demos/quickstart/protected/pages/Advanced/id/exception.gif
deleted file mode 100755
index 93b1a07f..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/exception.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Advanced/id/exception2.gif b/demos/quickstart/protected/pages/Advanced/id/exception2.gif
deleted file mode 100755
index 5fe0e625..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/exception2.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Advanced/id/logrouter.gif b/demos/quickstart/protected/pages/Advanced/id/logrouter.gif
deleted file mode 100755
index 5a74dfe1..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/logrouter.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Advanced/id/mastercontent.gif b/demos/quickstart/protected/pages/Advanced/id/mastercontent.gif
deleted file mode 100755
index 9354d65c..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/mastercontent.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Advanced/id/pcrelation.gif b/demos/quickstart/protected/pages/Advanced/id/pcrelation.gif
deleted file mode 100755
index c1960d74..00000000
--- a/demos/quickstart/protected/pages/Advanced/id/pcrelation.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Configurations/id/AppConfig.page b/demos/quickstart/protected/pages/Configurations/id/AppConfig.page
deleted file mode 100755
index c73ddd6f..00000000
--- a/demos/quickstart/protected/pages/Configurations/id/AppConfig.page
+++ /dev/null
@@ -1,59 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="1801">Konfigurasi Aplikasi</h1>
-<p id="210213" class="block-content">
-Konfigurasi aplikasi digunakan untuk menetapkan perilaku global atas aplikasi. Ini terrmasuk spesifikasi alias path, pemakaian namespace, konfigurasi modul dan dan layanan, serta parameter.
-</p>
-<p id="210214" class="block-content">
-Konfigurasi untuk aplikasi disimpan dalam sebuah file XML bernama <tt>application.xml</tt>, yang harus ditempatkan di bawah path basis aplikasi. Formatnya ditampilkan berikut ini. Spesifikasi lengkap dari konfigurasi aplikasi dapat ditemukan dalam file <a href="<%~../../../../../../docs/specs/application.dtd%>">DTD</a> dan <a href="<%~../../../../../../docs/specs/application.xsd%>">XSD</a>.
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_210095">
-<application PropertyName="PropertyValue" ...>
- <paths>
- <alias id="AliasID" path="AliasPath" />
- <using namespace="Namespace" />
- </paths>
- <modules>
- <module id="ModuleID" class="ModuleClass" PropertyName="PropertyValue" ... />
- </modules>
- <parameters>
- <parameter id="ParameterID" class="ParameterClass" PropertyName="PropertyValue" ... />
- </parameters>
- <include file="path.to.extconfig" when="PHP expression" />
- <services>
- <service id="ServiceID" class="ServiceClass" PropertyName="PropertyValue" ... />
- </services>
-</application>
-</com:TTextHighlighter>
-
-<ul id="u1" class="block-content">
-
-<li>Elemen paling luar <tt>&lt;application&gt;</tt> berkaitan dengan turunan <tt>TApplication</tt>. Pasangan <tt>PropertyName="PropertyValue"</tt> menetapkan nilai awal untuk properti <tt>TApplication</tt>.</li>
-
-<li>Elemen <tt>&lt;paths&gt;</tt> berisi definisi alias path dan path penyertaan PHP untuk aplikasi. Setiap alias path ditetapkan melalui <tt>&lt;alias&gt;</tt> yang mana atribut <tt>path</tt> mengambil path absolut atau path relatif ke direktori yang berisi file konfigurasi aplikasi. Elemen <tt>&lt;using&gt;</tt> menetapkan path tertentu (dalam batasan namespace) akan ditambahkan ke path include PHP saat aplikasi dijalankan. PRADO mendefinisikan dua alias standar: <tt>System</tt> dan <tt>Application</tt>. Pembentuk merujuk ke direktori akar framework PRADO, dan yang terakhir merujuk ke direktori berisi file konfigurasi aplikasi.</li>
-
-<li>Elemen <tt>&lt;modules&gt;</tt> berisi konfigurasi untuk daftar modul. Setiap modul ditetapkan dengan elemen <tt>&lt;module&gt;</tt>. Setiap modul diidentifikasi secara unik oleh atribut <tt>id</tt> dan tipe <tt>class</tt>. Pasangan <tt>PropertyName="PropertyValue"</tt> menetapkan nilai awal untuk properti modul.</li>
-
-<li>Elemen <tt>&lt;parameters&gt;</tt> berisi daftar parameter level-aplikasi yang dapat diakses dari mana saja dalam aplikasi. Anda bisa menetapkan parameter tipe-komponen seperti menetapkan modul, atau Anda bisa menetapkan parameter tipe-string yang merupakan format lebih sederhana seperti berikut,
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_210096">
-<parameter id="ParameterID" value="ParameterValue" />
-</com:TTextHighlighter>
-Catatan, jika atribut <tt>value</tt> tidak ditetapkan, seluruh parameter XML node (dari tipe <tt>TXmlElement</tt>) akan dikembalikan sebagai nilai parameter. Sebagai tambahan, modul <tt>System.Util.TParameterModule</tt> menyediakan satu cara untuk mengambil parameter dari file XML eksternal. Lihat lebih jelasnya dalam dokumentasi API.
-</li>
-
-<li>Elemen <tt>&lt;include&gt;</tt> membolehkan seseorang menyertakan file konfigurasi eksternal. Sudah diperkenalkan sejak v3.1.0. Atribut <tt>file</tt> menetapkan file konfigurasi eksternal dalam format namespace. Nama ekstensi dari file harus <tt>.xml</tt>. Atribut <tt>when</tt> berisi ekspresi PHP dan opsional (standarnya true). Hanya ketika ekspresi mengevaluasi true, file konfigurasi eksternal akan disertakan. Konteks ekspresi adalah aplikasi, misalnya <tt>$this</tt> dalam ekspresi akan merujuk ke obyek aplikasi.
-</li>
-
-<li>Elemen <tt>&lt;services&gt;</tt> mirip dengan elemen <tt>&lt;modules&gt;</tt>. Ia sebagian besar menetapkan layanan yang disediakan oleh aplikasi. Di dalam elemen <tt>&lt;service&gt;</tt>, seseorang dapat memiliki salah satu elemen di atas. Ini akan efektif hanya ketika layanan terkait sedang diminta.</li>
-
-</ul>
-
-<p id="210215" class="block-content">
-File konfigurasi eksternal mempunyai format yang sama seperti dijelaskan di atas. Meskipun nama elemen akar tidak menjadi masalah, direkomendasikan adalah <tt>&lt;configuration&gt;</tt>. Konfigurasi eksternal akan menambah konfigurasi utama. Sebagai contoh, jika alias path ditetapkan dalam konfigurasi eksternal, ia akan menjadi tersedia sebagai tambahan terhadap alias yang ditetapkan dalam konfigurasi utama.
-</p>
-
-<p id="210216" class="block-content">
-Standarnya tanpa konfigurasi eksplisit, aplikasi PRADO akan mengambil beberapa modul inti, seperti <tt>THttpRequest</tt>, <tt>THttpResponse</tt>, dll. Ia juga akan menyediakan <tt>TPageService</tt> sebagai layanan standar. Konfigurasi dan penggunaan modul serta layanan ini tercakup dalam seksi individual pada tutorial ini. Catatan, jika aplikasi Anda mengambil setelan standar untuk modul dan layanan ini, Anda tidak perlu menyediakan konfigurasi aplikasi. Akan tetapi, jika modul atau layanan ini tidak mencukupi, atau Anda ingin menghubah perilakunya dengan mengkonfigurasi nilai propertinya, Anda memerlukan konfigurasi aplikasi.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Configurations/id/Overview.page b/demos/quickstart/protected/pages/Configurations/id/Overview.page
deleted file mode 100755
index 480eab84..00000000
--- a/demos/quickstart/protected/pages/Configurations/id/Overview.page
+++ /dev/null
@@ -1,10 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="1401">Tinjauan Konfigurasi</h1>
-<p id="170164" class="block-content">
-PRADO menggunakan konfigurasi untuk merekat komponen bersama ke dalam halaman dan aplikasi. Ada <a href="?page=Configurations.AppConfig">konfigurasi aplikasi</a>, <a href="?page=Configurations.PageConfig">konfigurasi halaman</a>, dan <a href="?page=Configurations.Templates1">template</a>.
-</p>
-<p id="170165" class="block-content">
-Konfigurasi aplikasi dan halaman adalah opsional jika nilai standar yang dipakai. Template sebagian besar digunakan oleh halaman dan kontrol template. Ini juga opsional.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Configurations/id/PageConfig.page b/demos/quickstart/protected/pages/Configurations/id/PageConfig.page
deleted file mode 100755
index 2a05b3dc..00000000
--- a/demos/quickstart/protected/pages/Configurations/id/PageConfig.page
+++ /dev/null
@@ -1,47 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="1901">Konfigurasi Halaman</h1>
-<p id="220217" class="block-content">
-Konfigurasi halaman sebagian besar dipakai oleh <tt>TPageService</tt> untuk memodifikasi atau menambahkan konfigurasi aplikasi. Seperti ditunjukan oleh namanya, konfigurasi halaman dikaitkan dengan direktori yang menyimpan beberapa file halaman. Ia disimpan sebagai file XML bernama <tt>config.xml</tt>.
-</p>
-<p id="220218" class="block-content">
-Ketika pengguna meminta halaman yang disimpan di bawah <tt>&lt;BasePath&gt;/dir1/dir2</tt>, <tt>TPageService</tt> akan mencoba untuk mengurai dan mengambil file <tt>config.xml</tt> di bawah <tt>&lt;BasePath&gt;</tt>, <tt>&lt;BasePath&gt;/dir1</tt> dan <tt>&lt;BasePath&gt;/dir1/dir2</tt>. Path, modul, dan parameter yang ditetapkan dalam file konfigurasi ini akan ditambahkan atau digabungkan ke dalam konfigurasi aplikasi yang sudah ada. Di sini <tt>&lt;BasePath&gt;</tt> seperti yang didefinisikan dalam <a href="?page=Fundamentals.Services">layanan halaman</a>.
-</p>
-<p id="220219" class="block-content">
-Format file konfigurasi halaman adalah sebagai berikut,
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_220097">
-<configuration>
- <paths>
- <alias id="AliasID" path="AliasPath" />
- <using namespace="Namespace" />
- </paths>
- <modules>
- <module id="ModuleID" class="ModuleClass" PropertyName="PropertyValue" ... />
- </modules>
- <parameters>
- <parameter id="ParameterID" class="ParameterClass" PropertyName="PropertyValue" ... />
- </parameters>
- <include file="path.to.extconfig" when="PHP expression" />
- <authorization>
- <allow pages="PageID1,PageID2" users="User1,User2" roles="Role1,Role2" verb="get" />
- <deny pages="PageID1,PageID2" users="User1,User2" roles="Role1,Role2" verb="post" />
- </authorization>
- <pages PropertyName="PropertyValue" ...>
- <page id="PageID" PropertyName="PropertyValue" ... />
- </pages>
-</configuration>
-</com:TTextHighlighter>
-<p id="220220" class="block-content">
-<tt>&lt;paths&gt;</tt>, <tt>&lt;modules&gt;</tt>, <tt>&lt;parameters&gt;</tt> dan <tt>&lt;include&gt;</tt> mirip dengan itu dalam konfigurasi aplikasi. Elemen <tt>&lt;authorization&gt;</tt> menetapkan aturan otorisasi yang berlaku pada direktori halaman saat ini dan seluruh subdirektorinya. Untuk lebih jelasnya, lihat seksi <a href="?page=Advanced.Auth">otentikasi dan otorisasi</a>. Elemen <tt>&lt;pages&gt;</tt> menetapkan nilai awal untuk properti halaman. Setiap elemen <tt>&lt;page&gt;</tt> menetapkan nilai awal untuk halaman tertentu yang diidentifikasi oleh atribut <tt>id</tt>. Nilai properti awal yang diberikan dalam elemen <tt>&lt;pages&gt;</tt> element berlaku untuk semua halaman dalam direktori dan subdirektori saat ini.
-</p>
-<p id="220221" class="block-content">
-Spesifikasi lengkap dari konfigurasi halaman dapat ditemukan dalam file <a href="<%~../../../../../../docs/specs/config.dtd%>">DTD</a> dan <a href="<%~../../../../../../docs/specs/config.xsd%>">XSD</a>.
-</p>
-
-<com:SinceVersion Version="3.1.1" />
-<p class="block-content">
-Sejak versi 3.1.1, atribut <tt>id</tt> dalam elemen &lt;page&gt; bisa berupa path halaman relatif yang mengarah ke halaman di dalam subdirektori pada direktori yang berisi konfigurasi halaman. Sebagai contoh, <tt>id="admin.Home"</tt> merujuk ke halaman <tt>Home</tt> di bawah direktori <tt>admin</tt>. Atribut <tt>id</tt> juga bisa berisi wildcard '*' untuk menemukan seluruh halaman di bawah direktori yang ditetapkan. Sebagai contoh, <tt>id="admin.*"</tt> merujuk ke seluruh halaman di bawah direktori <tt>admin</tt> dan subdirektorinya. Peningkatan ini membolehkan para pengembang untuk memusatkan konfigurasi halamannya (misalnya menyimpan semua inisialisasi semua halaman dalam konfigurasi aplikasi atau konfigurasi akar halaman.)
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Configurations/id/Templates1.page b/demos/quickstart/protected/pages/Configurations/id/Templates1.page
deleted file mode 100755
index fa2a3405..00000000
--- a/demos/quickstart/protected/pages/Configurations/id/Templates1.page
+++ /dev/null
@@ -1,103 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="1501">Template: Bagian I</h1>
-<p id="180166" class="block-content">
-Template dipakai untuk menetapkan penyajian tata letak kontrol. Sebuah template dapat berisi teks statis, komponen, atau kontrol yang membantu penyajian kontrol terkait. Standarnya, turunan <tt>TTemplateControl</tt> atau subkelasnya secara otomatis mengambil dan menurunkan template dari sebuah file yang namanya sama dengan nama kelas kontrol. Untuk template halaman, nama file harus berakhiran <tt>.page</tt>; untuk kontrol template reguler lainnya, akhirannya adalah <tt>.tpl</tt>.
-</p>
-<p id="180167" class="block-content">Format template mirrip HTML, dengan beberapa tag spesifik-PRADO, termasuk <a href="#ct">tag komponen</a>, <a href="#tct">tag kontrol template</a>, <a href="#cot">tag komentar</a>, <a href="?page=Configurations.Templates2#dct">tag konten dinamis</a>, and <a href="?page=Configurations.Templates3#dpt">tag properti dinamis</a>. .
-</p>
-
-<a name="ct"></a>
-<h2 id="1502">Tag Komponen</h2>
-<p id="180168" class="block-content">
-Tag komponen menetapkan komponen sebagai bagian dari konten body pada kontrol template. Jika komponen adalah sebuah kontrol, biasanya akan menjadi anak atau cucu dari kontrol template, dan hasil penyajiannya akan disisipkan di tempat di mana ia terlihat dalam template.
-</p>
-<p id="180169" class="block-content">
-Format dari tag komponen adalah sebagai berikut,
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_180072">
-&lt;com:ComponentType PropertyName="PropertyValue" ... EventName="EventHandler" ...&gt;
-body content
-&lt;/com:ComponentType&gt;
-</com:TTextHighlighter>
-<tt>ComponentType</tt> berupa nama kelas atau nama tipe bertitik (contoh <tt>System.Web.UI.TControl</tt>) pada komponen. <tt>PropertyName</tt> dan <tt>EventName</tt> keduanya tidak sensitif-huruf. <tt>PropertyName</tt> bisa berupa nama properti atau subproperti (contoh <tt>Font.Name</tt>). Catatan, <tt>PropertyValue</tt> menjadi dekode HTML saat ditempatkan ke properti terkait. Konten dikurung diantara tag komponen pembuka dan penutup biasanya diperlakukan sebagai badan komponen.
-</p>
-<p id="180170" class="block-content">
-Diperlukan bahwa tag properti komponen saling mengumpulkan dan tag komponen pembuka dipasangkan dengan tag penutup, mirip dengan apa yang ada dalam XML.
-</p>
-<p id="180171" class="block-content">
-Template berikut memperlihatkan sebuah tag komponen yang menetapkan properti <tt>Text</tt> dan event <tt>OnClick</tt> dari kontrol tombol,
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_180073">
-&lt;com:TButton Text="Register" OnClick="registerUser" />
-</com:TTextHighlighter>
-Catatan, nama properti dan nama event semuanya tidak sensitif-huruf, sementara nama tipe komponen adalah sensitif-huruf. Nama event selalu diawali dengan <tt>On</tt>.
-</p>
-<p id="180172" class="block-content">
-Juga diperhatikan, nilai awal untuk properti yang namanya diakhiri dengan <tt>Template</tt> diproses secara khusus. Dalam keadaan tertentu, nilai awal diurai sebagai obyek <tt>TTemplate</tt>. Properti <tt>ItemTemplate</tt> dari kontrol <tt>TRepeater</tt> dalam contoh tersebut.
-</p>
-<p id="180173" class="block-content">
-Untuk menjembatani properti dengan tempat data besar, tag inisialisasi properti berikut diperkenalkan. Ini sama dengan <tt>...PropertyName="PropertyValue"...</tt> pada setiap aspeknya. Tag inisialisasi properti harus secara langsung dikurung diantara tag pembuka dan penutup komponen.
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_180074">
-&lt;prop:PropertyName&gt;
-PropertyValue
-&lt;/prop:PropertyName&gt;
-</com:TTextHighlighter>
-<p id="200007" class="block-content">
-Sejak versi 3.1.0, inisialisasi tag properti dapat juga dipakai untuk menginisialisasi set subproperti yang berbagi properti leluhur yang sama. Sebagai contoh, yang berikut adalah sama <tt>HeaderStyle.BackColor="black"</tt> dan <tt>HeaderStyle.ForeColor="red"</tt>.
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_180075">
-&lt;prop:HeaderStyle BackColor="black" ForeColor="red" />
-</com:TTextHighlighter>
-
-<h3 id="1505">ID Komponen</h3>
-<p id="180174" class="block-content">
-Ketika ditetapkan dalam template, properti <tt>ID</tt> komponen mempunyai arti khusus sebagai tambahan terhadap definisi properti normalnya. Tag komponen yang ditetapkan dengan nilai ID dalam template akan meregistrasi komponen terkait ke dalam kontrol pemilik template. Selanjutnya komponen dapat diakses secara langsung dari kontrol template dengan nilai ID-nya. Sebagai contoh, dalam template halaman <tt>Home</tt>, tag komponen berikut
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_180076">
-&lt;com:TTextBox ID="TextBox" Text="First Name" />
-</com:TTextHighlighter>
-memungkinkan untuk memperoleh obyek kotak teks dalam kode menggunakan <tt>$page->TextBox</tt>.
-</p>
-
-<a name="tct"></a>
-<h2 id="1503">Tag Kontrol Template</h2>
-Tag kontrol template digunakan untuk mengkonfigurasi nilai properti awal dari kontrol yang memiliki template. Formatnya adalah sebagai berikut,
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_180077">
-&lt;%@ PropertyName="PropertyValue" ... %&gt;
-</com:TTextHighlighter>
-Seperti dalam tag komponen, <tt>PropertyName</tt> adalah tidak sensitif-huruf dan bisa berupa nama properti atau subproperti.
-</p>
-<p id="180175" class="block-content">
-Nilai awal yang ditetapkan melalui tag kontrol template ditempatkan ke properti terkait saat kontrol template dibentuk. Oleh karena itu, Anda dapat mengganti nilai properti ini dalam langkah berikutnya, seperti tahap <tt>Init</tt> dari kontrol.
-</p>
-<p id="180176" class="block-content">
-Tag kontrol template adalah opsional dalam sebuah template. Setiap template dapat berisi paling banyak satu tag kontrol template. Anda dapat menempatkan tag kontrol template di mana saja di dalam template. Direkomendasikan bahwa Anda menempatkannya di awal template untuk visibilitas lebih baik.
-</p>
-
-<a name="cot"></a>
-<h2 id="1504">Tag Komentar</h2>
-<p id="180177" class="block-content">
-Tag komentar dipakai untuk menyimpan komentar pengembang dalam template yang tidak akan ditampilkan ke pengguna-akhir. Isi dikurung di dalam tag komentar akan diperlakukan sebagai teks tring biasa dan PRADO tidak akan mencoba untuk menguraikannya. Tag komentar tidak bisa dipakai di dalam nilai properti. Format tag komentar adalah sebagai berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_180078">
-&lt;!---
-Komentar TIDAK TERLIHAT bagi pengguna-akhir
----&gt;
-</com:TTextHighlighter>
-<div class="note"><b class="tip">Catatan:</b>
-Tag komentar baru <tt>&lt;!--- ... ---&gt;</tt> diperkenalkan sejak PRADO versi 3.1. Sebelumnya adalah <tt>&lt;!-- ... --!&gt;</tt> yang tidak dipakai lagi karena beberapa editor mempunyai masalah dalam penerangan-sintaks tag seperti itu. </div>
-
-<h2 id="1601">Tag Include</h2>
-<p id="180178" class="block-content">
-Sejak versi 3.0.5, PRADO mulai mendukung penyertaan template eksternal. Ini dilakukan melalui tag include, di mana file template eksternal ditetapkan dalam format namespace dan nama filenya harus diakhiri dengan <tt>.tpl</tt>.
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_180079">
-&lt;%include path.to.templateFile %&gt;
-</com:TTextHighlighter>
-
-<p id="180179" class="block-content">
-Template eksternal akan disisipkan di tempat di mana tag include terjadi dalam basis template.
-</p>
-<p id="180180" class="block-content">
-Catatan, pengulangan penyertaan template tidak didukung, misalnya Anda tidak dapat mempunyai tag include di dalam template eksternal.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Configurations/id/Templates2.page b/demos/quickstart/protected/pages/Configurations/id/Templates2.page
deleted file mode 100755
index 41bae6d3..00000000
--- a/demos/quickstart/protected/pages/Configurations/id/Templates2.page
+++ /dev/null
@@ -1,99 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="1601">Template: Bagian II</h1>
-
-<a name="dct"></a>
-<h2 id="1602">Tag Konten Dinamis</h2>
-<p id="190181" class="block-content">
-Tag konten dinamis diperkenalkan sebagai jalan pintas ke beberapa <a href="?page=Configurations.Templates1#ct">tag komponen</a> yang umum dipakai. Tag-tag ini sebagian besar dipakai untuk menyajikan konten yang dihasilkan dari evaluasi beberapa ekspresi atau pernyataan PHP. Ini termasuk <a href="#et">tag ekspresi</a>, <a href="#st">tag pernyataan</a>, <a href="#dt">tag databind</a>, <a href="#pt">parameter tags</a>, <a href="#at">tag asset</a> dan <a href="#lot">tag lokalisasi</a>.
-</p>
-
-<a name="et"></a>
-<h3 id="1603">Tag Ekspresi</h3>
-<p id="190182" class="block-content">
-Tag ekspresi mewakili ekspresi PHP yang dievaluasi saat kontrol template dalam tahap <tt>PreRender</tt>. Hasil evaluasi ekspresi disisipkan di tempat di mana tag berada dalam template. Konteks (yaitu <tt>$this</tt>) dari ekspresi adalah kontrol yang memilik template.
-</p>
-<p id="190183" class="block-content">
-Format tag ekspresi adalah sebagai berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_190079">
-&lt;%= PhpExpression %&gt;
-</com:TTextHighlighter>
-<p id="190184" class="block-content">
-Sebagai contoh, tag ekspresi berikut akan menampilkan judul halaman saat ini di tempat,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_190080">
-&lt;%= $this-&gt;Title %&gt;
-</com:TTextHighlighter>
-
-<a name="st"></a>
-<h3 id="1604">Tag Pernyataan</h3>
-<p id="190185" class="block-content">
-Tag pernyataan mirip dengan tag ekspresi, kecuali bahwa tag pernyataan berisi pernyataan PHP daripada ekspresi. Output dari pernyataan PHP (menggunakan contoh <tt>echo</tt> atau <tt>print</tt> dalam PHP) ditampilkan di tempat di mana tag pernyataan berada dalam template. Konteks (yaitu <tt>$this</tt>) dari pernyataan adalah kontrol yang memiliki template. Format tag pernyataan adalah sebagai berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_190081">
-&lt;%%
-Pernyataan PHP
-%&gt;
-</com:TTextHighlighter>
-<p id="190186" class="block-content">
-Contoh berikut menampilkan waktu saat ini dalam bahasa Belanda di tempat,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_190082">
-&lt;%%
-setlocale(LC_ALL, 'nl_NL');
-echo strftime("%A %e %B %Y",time());
-%&gt;
-</com:TTextHighlighter>
-
-<a name="dt"></a>
-<h3 id="1605">Tag Databind</h3>
-<p id="190187" class="block-content">
-Tag databind mirip dengan tag ekspresi, kecuali bahwa ekspresi dievaluasi hanya ketika panggilan <tt>dataBind()</tt> diterapkan pada kontrol yang mewakili tag databind. Konteks (yaitu <tt>$this</tt>) dari ekspresi databind adalah kontrol yang memiliki template. Format tag databind adalah sebagai berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_190083">
-&lt;%# PhpExpression %&gt;
-</com:TTextHighlighter>
-
-<a name="pt"></a>
-<h3 id="1606">Tag Parameter</h3>
-<p id="190188" class="block-content">
-Tag parameter dipakai untuk menyisipkan parameter aplikasi di tempat di mana ia muncul dalam template. Format tag parameter adalah sebagai berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_190084">
-&lt;%$ ParameterName %&gt;
-</com:TTextHighlighter>
-<p id="190189" class="block-content">
-Catatan, parameter aplikasi biasanya didefinisikan konfigurasi aplikasi atau konfigurasi direktori halaman. Parameter dievaluasi saat template diberi contoh.
-</p>
-
-<a name="at"></a>
-<h3 id="1607">Tag Asset</h3>
-<p id="190190" class="block-content">
-Tag asset dipakai untuk mempublikasikan file pribadi dan menampilkan URL terkait. Sebagai contoh, jika Anda mempunyai file gambar yang tidak bisa diakses Web dan Anda ingin menjadikannya terlihat bagi pengguna-akhir, Anda dapat menggunakan tag asset untuk mempublikasikan file ini dan menampilkan URL ke pengguna-akhir agar mereka dapat mengambil gambar yang dipublikasikan.
-</p>
-<p id="190191" class="block-content">
-Format tag asset adalah sebagai berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_190085">
-&lt;%~ LocalFileName %&gt;
-</com:TTextHighlighter>
-<p id="190192" class="block-content">
-di mana <tt>LocalFileName</tt> merujuk ke path file yang relatif ke direktori yang berisi file template saat ini. Path file bisa berupa file tunggal atau sebuah direktori. Jika direktori, konten dalam seluruh direktori akan dibuat dapat diakses oleh pengguna-akhir.
-</p>
-<p id="190193" class="block-content">
-HARAP SANGAT BERHATI-HATI ketika Anda menggunakan tag asset karena ia dapat memperlihatkan ke pengguna-akhir file yang tidak ingin Anda perlihatkan kepada mereka.
-</p>
-
-<a name="lot"></a>
-<h3 id="1608">Tag Lokalisasi</h3>
-<p id="190194" class="block-content">
-Tag lokalisasi mewakili teks yang dilokalisasi. Formatnya adalah sebagai berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_190086">
-&lt;%[string]%&gt;
-</com:TTextHighlighter>
-<p id="190195" class="block-content">
-di mana <tt>string</tt> akan diterjemahkan ke bahasa berbeda tergantung pada preferensi bahasa pengguna-akhir. Tag lokalisasi sebenarnya adalah jalan pintas ke fungsi panggil <tt>Prado::localize(string)</tt>.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Configurations/id/Templates3.page b/demos/quickstart/protected/pages/Configurations/id/Templates3.page
deleted file mode 100755
index e53d3384..00000000
--- a/demos/quickstart/protected/pages/Configurations/id/Templates3.page
+++ /dev/null
@@ -1,104 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="1701">Template: Bagian III</h1>
-
-<a name="dpt"></a>
-<h2 id="1702">Tag Properti Dinamis</h2>
-<p id="200196" class="block-content">
-Tag properti dinamis sangat mirip dengan tag konten dinamis, kecuali bahwa ia berlaku untuk properti komponen. Kegunaan tag properti dinamis adalah untuk membolehkan konfigurasi properti komponen lebih serba guna. Catatan, Anda tidak perlu memakai tag properti dinamis karena apa yang bisa dikerjakan oleh tag properti dinamis juga bisa dilakukan dalam kode PHP. Akan tetapi, menggunakan tag properti dinamis membawa Anda jauh lebih nyaman saat menyempurnakan tugas yang sama. Pemakaian dasar dari tag properti dinamis adalah sebagai berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_200087">
-&lt;com:ComponentType PropertyName=DynamicPropertyTag ...&gt;
-body content
-&lt;/com:ComponentType&gt;
-</com:TTextHighlighter>
-<p id="200197" class="block-content">
-di mana Anda dapat mengurung <tt>DynamicPropertyTag</tt> di dalam tanda kutip tunggal atau dua agar pembacaannya lebih baik.
-</p>
-<p id="200198" class="block-content">
-Seperti tag konten dinamis, kami mempunyai <a href="#et">tag ekspresi</a>, <a href="#dt">tag databind</a>, <a href="#pt">tag parameter</a>, <a href="#at">tag asset</a> dan <a href="#lot">tag lokalisasi</a>. (Catatan, tidak ada tag pernyataan di sini.)
-</p>
-
-<a name="et"></a>
-<h3 id="1703">Tag Ekspresi</h3>
-<p id="200199" class="block-content">
-Tag ekspresi mewakili ekspresi PHP yang dievaluasi saat kontrol template dalam tahap <tt>PreRender</tt>. Hasil evaluasi ekspresi disisipkan di tempatkan ke properti komponen terkait. Format tag ekspresi adalah sebagai berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_200088">
-&lt;%= PhpExpression %&gt;
-</com:TTextHighlighter>
-<p id="200200" class="block-content">
-Dalam ekspresi, <tt>$this</tt> merujuk ke kontrol yang memiliki template. Contoh berikut menetapkan kontrol <tt>TLabel</tt> di mana properti <tt>Text</tt> diberi contoh seperti judul halaman saat ini saat kontrol <tt>TLabel</tt> sedang dibentuk,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_200089">
-&lt;com:TLabel Text=&lt;%= $this-&gt;Page-&gt;Title %&gt; /&gt;
-</com:TTextHighlighter>
-
-<a name="dt"></a>
-<h3 id="1704">Tag Databind</h3>
-<p id="200201" class="block-content">
-Tag databind mirip dengan tag ekspresi, kecuali bahwa ekspresi dievaluasi hanya ketika panggilan <tt>dataBind()</tt> diterapkan pada kontrol yang mewakili tag databind. Konteks (yaitu <tt>$this</tt>) dari ekspresi databind adalah kontrol yang memiliki template. Tag databind tidak berlaku bagi seluruh komponen. Ia hanya digunakan untuk kontrol.
-</p>
-<p id="200202" class="block-content">
-Format tag databind adalah sebagai berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_200090">
-&lt;%# PhpExpression %&gt;
-</com:TTextHighlighter>
-<p id="200203" class="block-content">
-Sejak v3.0.2, tag ekspresi dan tag databind dapat direkatkan di dalam string statis. Sebagai contoh, Anda bisa menulis yang berikut dalam template,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_200091">
-&lt;com:TLabel&gt;
- &lt;prop:Text&gt;
- Today is &lt;%= date('F d, Y',time()) %&gt;.
- The page class is &lt;%= get_class($this) %&gt;.
- &lt;/prop:Text&gt;
-&lt;/com:TLabel&gt;
-</com:TTextHighlighter>
-<p id="200204" class="block-content">
-Sebelumnya, Anda harus menggunakan ekspresi tunggal dengan penggabungan string untuk mendapatkan efek yang sama.
-</p>
-
-<a name="pt"></a>
-<h3 id="1705">Tag Parameter</h3>
-<p id="200205" class="block-content">
-Tag parameter dipakai untuk menyisipkan parameter aplikasi di tempat di mana ia muncul dalam template. Format tag parameter adalah sebagai berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_200092">
-&lt;%$ ParameterName %&gt;
-</com:TTextHighlighter>
-<p id="200206" class="block-content">
-Catatan, parameter aplikasi biasanya didefinisikan konfigurasi aplikasi atau konfigurasi direktori halaman. Parameter dievaluasi saat template diberi contoh.
-</p>
-
-<a name="at"></a>
-<h3 id="1706">Tag Asset</h3>
-<p id="200207" class="block-content">
-Tag asset dipakai untuk mempublikasikan file pribadi dan menampilkan URL terkait. Sebagai contoh, jika Anda mempunyai file gambar yang tidak bisa diakses Web dan Anda ingin menjadikannya terlihat bagi pengguna-akhir, Anda dapat menggunakan tag asset untuk mempublikasikan file ini dan menampilkan URL ke pengguna-akhir agar mereka dapat mengambil gambar yang dipublikasikan. Tag asset dievaluasi ketika template diberi contoh.
-</p>
-<p id="200208" class="block-content">
-Format tag asset adalah sebagai berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_200093">
-&lt;%~ LocalFileName %&gt;
-</com:TTextHighlighter>
-<p id="200209" class="block-content">
-di mana <tt>LocalFileName</tt> merujuk ke path file yang relatif ke direktori yang berisi file template saat ini. Path file bisa berupa file tunggal atau sebuah direktori. Jika direktori, konten dalam seluruh direktori akan dibuat dapat diakses oleh pengguna-akhir.
-</p>
-<p id="200210" class="block-content">
-HARAP SANGAT BERHATI-HATI ketika Anda menggunakan tag asset karena ia dapat memperlihatkan ke pengguna-akhir file yang tidak ingin Anda perlihatkan kepada mereka.
-</p>
-
-<a name="lot"></a>
-<h3 id="1707">Tag Lokalisasi</h3>
-<p id="200211" class="block-content">
-Tag lokalisasi mewakili teks yang dilokalisir. Formatnya adalah sebagai berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_200094">
-&lt;%[string]%&gt;
-</com:TTextHighlighter>
-<p id="200212" class="block-content">
-di mana <tt>string</tt> akan diterjemahkan ke bahasa berbeda tergantung pada preferensi bahasa pengguna-akhir. Tag lokalisasi sebenarnya adalah jalan pintas ke fungsi panggil <tt>Prado::localize(string)</tt>.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Configurations/id/UrlMapping.page b/demos/quickstart/protected/pages/Configurations/id/UrlMapping.page
deleted file mode 100755
index 46e7bdd4..00000000
--- a/demos/quickstart/protected/pages/Configurations/id/UrlMapping.page
+++ /dev/null
@@ -1,106 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="2101">Pemetaan URL (URL bersahabat)</h1>
-
-<com:DocLink ClassPath="System.Web.TUrlMapping" />
-
-<p id="230222" class="block-content">
-Modul TUrlMapping membolehkan PRADO membentuk dan mengenali URL bersahabat berdasarkan pada pola spesifik.
-</p>
-
-<p id="230223" class="block-content">
-TUrlMapping terdiri dari daftar pola URL yang dipakai untuk menyamakan terhadap URL yang saat ini sedang diminta. Pola pertama yang sama kemudian akan dipakai untuk mendekomposisi URL ke dalam parameter request (dapat diakses melalui
-<tt>$this->Request['paramname']</tt>). Pola juga dipakai untuk membentuk URL yang dikustomisasi. Dalam hal ini, parameter dalam pola yang diterapkan akan diganti dengan nilai variabel GET terkait.
-</p>
-
-<p id="230224" class="block-content">
-Untuk menggunakan <tt>TUrlMapping</tt>, seseorang harus menyetel properti <tt>UrlManager</tt> dari modul <tt>THttpRequest</tt> sebagai ID modul <tt>TUrlMapping</tt>. Lihat contoh berikut,
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_230098">
-<modules>
- <module id="request" class="THttpRequest" UrlManager="friendly-url" />
- <module id="friendly-url" class="System.Web.TUrlMapping">
- <url ServiceParameter="Posts.ViewPost" pattern="post/{id}/?" parameters.id="\d+" />
- <url ServiceParameter="Posts.ListPost" pattern="archive/{time}/?" parameters.time="\d{6}" />
- <url ServiceParameter="Posts.ListPost" pattern="category/{cat}/?" parameters.cat="\d+" />
- </module>
-</modules>
-</com:TTextHighlighter>
-</p>
-
-<p id="230225" class="block-content">
-Contoh di atas adalah bagian dari konfigurasi aplikasi dari demo <tt>blog</tt> dalam rilis PRADO. Ia menghidupkan pengakuan format URL berikut:
-</p>
-<ul id="u1" class="block-content">
- <li><tt>/index.php/post/123</tt> diakui sebagai <tt>/index.php?page=Posts.ViewPost&amp;id=123</tt></li>
- <li><tt>/index.php/archive/200605</tt> diakui sebagai <tt>/index.php?page=Posts.ListPost&amp;time=200605</tt></li>
- <li><tt>/index.php/category/2</tt> diakui sebagai <tt>/index.php?page=Posts.ListPost&amp;cat=2</tt></li>
-</ul>
-
-<p id="230226" class="block-content">
-<tt>ServiceParameter</tt> dan <tt>ServiceID</tt> (ID standarnya adalah 'page') masing-masing menyetel parameter layanan dan ID layanan terhadap <a href="?page=Fundamentals.Modules">modul Request</a>. Parameter layanan untuk layanan <tt>TPageService</tt> adalah nama kelas Page, contohnya untuk URL "index.php?page=Home", "page" adalah ID layanan dan parameter layanan adalah "Home". Layanan lain dapat menggunakan parameter layanan dan ID secara berbeda. Lihat <a href="?page=Fundamentals.Services">Layanan</a> untuk lebih jelasnya.
-</p>
-
-<div class="info"><b class="tip">Info:</b>
-<tt>TUrlMapping</tt> harus dikonfigurasi sebelum
-<a href="?page=Fundamentals.Modules">modul Request</a> mengatasi permintaan.
-Ini biasanya berarti mendeklarasikan modul <tt>TUrlMapping</tt> sebelum tag
-<tt>&lt;services&gt;</tt> dalam <a href="?page=Configurations.AppConfig">konfigurasi aplikasi</a>.
-Menetapkan pemetaan dalam direktori <tt>config.xml</tt> tidak didukung.
-</div>
-
-<h2 id="46023">Menetapkan Pola URL</h2>
-<p id="230227" class="block-content">
-<tt>TUrlMapping</tt> menghidupkan pengakuan terhadap format URL yang dikustomisasi berdasarkan pada daftar pola URL yang ditetapkan sebelumnya. Setiap pola ditetapkan dalam tag <tt>&lt;url&gt;</tt>.
-</p>
-
-<p id="230228" class="block-content">
-Nilai atribut <tt>Pattern</tt> dan <tt>Parameters</tt> adalah pola ekspresi reguler yang menentukan kriteria pemetaan. Properti <tt>Pattern</tt> mengambil ekspresi reguler dengan nama parameter dikurung antara kurung kurawal kiri '<tt>{</tt>' dan kurung kurawal kanan '<tt>}</tt>'. Pola untuk setiap parameter dapat disetel menggunakan koleksi atribut <tt>Parameters</tt>.
-Sebagai contoh,
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_230099">
-<url ServiceParameter="ArticleView" pattern="articles/{year}/{month}/{day}"
- parameters.year="\d{4}" parameters.month="\d{2}" parameters.day="\d+" />
-</com:TTextHighlighter>
-</p>
-Contoh mirip dengan ekspresi reguler berikut (ia memakai fitur "named group" dalam ekspresi reguler yang tersedia dalam PHP):
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_230100">
-<url ServiceParmaeter="ArticleView">
- RegularExpression="/articles\/(?P<year>\d{4})\/(?P<month>\d{2})\/(?P<day>\d+)/u"</url>
-</com:TTextHighlighter>
-<p id="230229" class="block-content">
-Dalam contoh di atas, pola berisi 3 parameter bernama "<tt>year</tt>",
-"<tt>month</tt>" dan "<tt>day</tt>". Pola untuk parameter ini masing-masing adalah, "<tt>\d{4}</tt>" (4 digit), "<tt>\d{2}</tt>" (2 digit)
-dan "<tt>\d+</tt>" (1 atau lebih digit).
-Intinya, nama dan nilai atribut <tt>Parameters</tt> digunakan sebagai substrings dalam penggantian tempat pada string <tt>Pattern</tt> untuk membentuk string ekspresi reguler lengkap.
-</p>
-
-<div class="note"><b class="tip">Catatan:</b> Jika Anda bermaksud untuk menggunakan properti <tt>RegularExpression</tt> Anda perlu mengulang garis miring dalam ekspresi reguler.
-</div>
-
-<p id="230230" class="block-content">Berikut dari contoh pola di atas,
-sebuah URL "<tt>http://example.com/index.php/articles/2006/07/21</tt>" akan disamakan dan benar. Akan tetapi, "<tt>http://example.com/index.php/articles/2006/07/hello</tt>" tidak benar karena pola parameter "<tt>day</tt>" tidak memuaskan.
- Dalam kelas <tt>TUrlMappingPattern</tt> standarnya, pola disamakan dengan properti <b>path</b> dari hanya URL. Sebagai contoh, hanya bagian
-"<tt>/index.php/articles/2006/07/21</tt>" dari URL yang ditetapkan.
- </p>
-
-<p id="230231" class="block-content">
-URL permintaan yang dipetakan mirip dengan <tt>index.php?page=ArticleView&amp;year=2006&amp;month=07&amp;day=21</tt>.
-Nilai parameter tersedia melalui obyek standar <tt>Request</tt>. Sebagai contoh, <tt>$this->Request['year']</tt>.
-</p>
-
-<p id="230232" class="block-content">Pemetaan URL dievaluasi agar ia ditempatkan dan hanya pemetaan pertama yang menyamai URL akan dipakai. Pemetaan beruntun dapat dicapat dengan menempatkan pemetaan URL dalam urutan tertentu. Sebagai contoh, menempatkan pemetaan paling spesifik terlebih dahulu.
-</p>
-
-<h2 id="46024">Membentuk URL Dikustomisasi</h2>
-<p id="230233" class="block-content">
-Sejak versi 3.1.1, <tt>TUrlMapping</tt> mulai mendukung pembentukan format URL terkustomisasi berdasarkan pola yang disediakan. Untuk menghidupkan fitur ini, setel <tt>TUrlMapping.EnableCustomUrl</tt> menjadi true. Saat <tt>THttpRequest.constrcutUrl()</tt> dipanggil, pembantukan kerja URL aktual akan didelegasikan ke turunan <tt>TUrlMappingPattern</tt> yang sama. Ia mengganti parameter dalam pola dengan variabel GET terkait dikirimkan ke <tt>constructUrl()</tt>.
-</p>
-
-<p id="230234" class="block-content">
-Pola yang sama adalah propreti <tt>ServiceID</tt> dan <tt>ServiceParameter</tt> yang sama seperti yang dikirimkan ke <tt>constructUrl()</tt> dan parameter yang diberi nama ditemukan dalam variabel GET. Sebagai contoh, <tt>constructUrl('Posts.ListPost',array('cat'=>2))</tt> akan menggunakan pola pihak ketiga dalam contoh di atas.
-<p>
-
-<p id="230235" class="block-content">
-Standarnya <tt>TUrlMapping</tt> akan membentuk URL yang diawali dengan yang saat ini meminta path naskah PHP, seperti <tt><b>/path/to/index.php</b>/article/3</tt>. Para pengguna dapat mengubah perilaku ini dengan menetapkan prefiks URL secara spesifik melalui properti <tt>UrlPrefix</tt>-nya. Sebagai contoh, jika konfigurasi server Web memperlakukan <tt>index.php</tt> sebagai naskah standar, kita bisa menyetel <tt>UrlPrefix</tt> sebagai <tt>/path/to</tt> dan URL yang dibentuk akan terlihat seperti <tt>/path/to/article/3</tt>.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/HtmlArea4.page b/demos/quickstart/protected/pages/Controls/HtmlArea4.page
index 1fa33424..17c87e18 100755
--- a/demos/quickstart/protected/pages/Controls/HtmlArea4.page
+++ b/demos/quickstart/protected/pages/Controls/HtmlArea4.page
@@ -1,6 +1,6 @@
<com:TContent ID="body" >
-<h1>THtmlArea4</h1>
+<h1 id="86013">THtmlArea4</h1>
<com:DocLink ClassPath="System.Web.UI.WebControls.THtmlArea4" />
<p class="block-content">
diff --git a/demos/quickstart/protected/pages/Controls/Markdown.page b/demos/quickstart/protected/pages/Controls/Markdown.page
index d7cc00c6..0285ed32 100644
--- a/demos/quickstart/protected/pages/Controls/Markdown.page
+++ b/demos/quickstart/protected/pages/Controls/Markdown.page
@@ -1,6 +1,6 @@
<com:TContent ID="body" >
-<h1>TMarkdown</h1>
+<h1 id="108014">TMarkdown</h1>
<com:DocLink ClassPath="System.Web.UI.WebControls.TMarkdown" />
<p class="block-content">
diff --git a/demos/quickstart/protected/pages/Controls/Samples/THyperLink/Home.page b/demos/quickstart/protected/pages/Controls/Samples/THyperLink/Home.page
index 8d3f6853..901aa0f0 100755
--- a/demos/quickstart/protected/pages/Controls/Samples/THyperLink/Home.page
+++ b/demos/quickstart/protected/pages/Controls/Samples/THyperLink/Home.page
@@ -9,8 +9,8 @@ A regular hyperlink:
</td><td class="sampleaction">
Welcome to
<com:THyperLink
- NavigateUrl="http://www.pradosoft.com/"
- Text="PradoSoft.com"
+ NavigateUrl="https://github.com/pradosoft/prado"
+ Text="Prado framework"
Target="_blank" />.
</td></tr>
@@ -19,8 +19,8 @@ A text hyperlink with css style:
</td><td class="sampleaction">
Welcome to
<com:THyperLink
- NavigateUrl="http://www.pradosoft.com/"
- Text="PradoSoft.com"
+ NavigateUrl="https://github.com/pradosoft/prado"
+ Text="Prado framework"
Target="_blank"
BackColor="silver"
Font.Italic="true" />.
@@ -30,7 +30,7 @@ Welcome to
An image hyperlink:
</td><td class="sampleaction">
<com:THyperLink
- NavigateUrl="http://www.pradosoft.com/"
+ NavigateUrl="https://github.com/pradosoft/prado"
ImageUrl=<%~hello_world.gif%>
Text="Hello World" />.
</td></tr>
@@ -39,7 +39,7 @@ An image hyperlink:
A hyerplink with body contents as link text:
</td><td class="sampleaction">
<com:THyperLink
- NavigateUrl="http://www.pradosoft.com/"
+ NavigateUrl="https://github.com/pradosoft/prado"
Target="_blank">
Body contents
</com:THyperLink>
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TImageMap/Home.page b/demos/quickstart/protected/pages/Controls/Samples/TImageMap/Home.page
index 5e56aefd..99ba48aa 100755
--- a/demos/quickstart/protected/pages/Controls/Samples/TImageMap/Home.page
+++ b/demos/quickstart/protected/pages/Controls/Samples/TImageMap/Home.page
@@ -9,8 +9,8 @@
<com:TCircleHotSpot
HotspotMode="Navigate"
- NavigateUrl="http://www.pradosoft.com"
- AlternateText="Navigate to pradosoft.com"
+ NavigateUrl="https://github.com/pradosoft/prado"
+ AlternateText="Navigate to Prado framework project page"
Target="_blank"
X="80"
Y="80"
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TInlineFrame/Home.page b/demos/quickstart/protected/pages/Controls/Samples/TInlineFrame/Home.page
index eea7f1e3..853f6d6d 100755
--- a/demos/quickstart/protected/pages/Controls/Samples/TInlineFrame/Home.page
+++ b/demos/quickstart/protected/pages/Controls/Samples/TInlineFrame/Home.page
@@ -7,7 +7,7 @@
<tr><td class="samplenote">
Inline frame with default settings:
</td><td class="sampleaction">
-<com:TInlineFrame FrameUrl="http://www.pradosoft.com/" />
+<com:TInlineFrame FrameUrl="https://github.com/pradosoft/prado" />
</td></tr>
<tr><td class="samplenote">
@@ -17,7 +17,7 @@ Inline frame customized with margins and align:
MarginWidth="100"
MarginHeight="100"
Align="Right"
- FrameUrl="http://www.pradosoft.com/" />
+ FrameUrl="https://github.com/pradosoft/prado" />
</td></tr>
<tr><td class="samplenote">
@@ -26,7 +26,7 @@ Inline frame without scrollbars and border:
<com:TInlineFrame
ScrollBars="None"
ShowBorder="false"
- FrameUrl="http://www.pradosoft.com/" />
+ FrameUrl="https://github.com/pradosoft/prado" />
</td></tr>
</table>
diff --git a/demos/quickstart/protected/pages/Controls/id/Button.page b/demos/quickstart/protected/pages/Controls/id/Button.page
deleted file mode 100755
index 942b607f..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Button.page
+++ /dev/null
@@ -1,16 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="2001">TButton</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TButton" />
-
-<p id="240234" class="block-content">
-<tt>TButton</tt> membuat tombol klik pada halaman Web. judul tombol ditetapkan dengan properti <tt>Text</tt>. Tombol digunakan untuk mengirimkan data ke sebuah halaman. <tt>TButton</tt> memunculkan dua event sisi-server, <tt>OnClick</tt> dan <tt>OnCommand</tt>, ketika diklik pada sisi-klien. Perbedaan diantara event <tt>OnClick</tt> dan <tt>OnCommand</tt> adalah bahwa event kedua meneruskan ke leluhur kontrol tombol. Pengendali event <tt>OnCommand</tt> bisa menggunakan <tt>CommandName</tt> dan <tt>CommandParameter</tt> terkait dengan event guna melakukan aksi spesifik.
-</p>
-<p id="240235" class="block-content">
-Mengklik tombol dapat memicu formulir validasi, jika <tt>CausesValidation</tt> adalah true. Dan validasi mungkin dibatasi di dalam grup tertentu dari kontrol validator menurut <tt>ValidationGroup</tt>.
-</p>
-<com:RunBar PagePath="Controls.Samples.TButton.Home" />
-
-UNTUK DIKERJAKAN: atribut kustom
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/Captcha.page b/demos/quickstart/protected/pages/Controls/id/Captcha.page
deleted file mode 100755
index 27ffb6dc..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Captcha.page
+++ /dev/null
@@ -1,43 +0,0 @@
-<com:TContent ID="body" >
-
-<h1>TCaptcha</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TCaptcha" />
-
-<p>
-<tt>TCaptcha</tt> menampilkan <a href="http://en.wikipedia.org/wiki/Captcha">CAPTCHA</a> yang bisa dipakai untuk menentukan apakah input dimasukan oleh pengguna asli ataukah beberapa program. <tt>TCaptcha</tt> menampilkan sebuah token (string terdiri dari karakter alfanumerik) sebagai sebuah gambar dan pengguna diharapkan untuk mengulang token dalam kotak teks. Gambar token dibuat dalam cara tertentu yang bisa dikenali oleh manusia, tapi tidak oleh sebuah program.
-</p>
-
-<p>
-Untuk menggunakan <tt>TCaptcha</tt>, anda hrus menghidupkan ekstensi PHP GD2 dengan dukungan font TrueType. Tidak seperti naskah CAPTCHA lain, <tt>TCaptcha</tt> tidak memerlukan sesi atau cookie.
-</p>
-
-<p>
-Token yang dibuat oleh <tt>TCaptcha</tt> dapat dikonfigurasi dalam beberapa cara. Untuk menetapkan panjang karakter dalam token, setel <tt>MinTokenLength</tt> dan <tt>MaxTokenLength</tt>. Untuk menggunakan perbandingan huruf tidak sensitif-huruf dan hanya membuat token huruf-besar, setel <tt>CaseSensitive</tt> ke false. Para pengguna tingkat lanjut dapat mencoba untuk menyetel <tt>TokenAlphabet</tt> guna menetapkan karakter mana yang akan muncul dalam token yang dibuatnya.
-</p>
-
-<p>
-Validasi token terkait dengan dua properti: <tt>TestLimit</tt> (standarnya 5 kali) dan <tt>TokenExpiry</tt> (standarnya 600 detik). Pembentuk menetapkan berapa kali token bisa diuji pada sisi-server, dan yang terakhir mengatakan kapan token yang dibuat akan berakhir. Jika validasi gagal dalam salah satu dari dua skenario, token baru akan secara otomatis dibuat.
-</p>
-
-<p>
-Untuk menetapkan tampilan dari gambar token yang dibuat, setel <tt>TokenImageTheme</tt> ke integer antara 0 dan 31. Ada bisa mencoba contoh berikut untuk melihat bagaimana nilai ini mempengaruhi gambar token yang dihasilkan. Ukuran gambar token ditentukan oleh <tt>TokenFontSize</tt>. Dalam keadaan tertentu, panjang gambar adalah proporsional bagi ukuran font. Anda juga bisa menyetel <tt>Width</tt> untuk mengubah gambar yang dihasilkan ke ukuran yang anda inginkan, gambar yang diskala mungkin tidak terlihat baik.
-</p>
-
-<p>
-Setelah postback, input pengguna dapat di validasi dengan memanggil metode <tt>TCaptcha.validate()</tt>. Jauh lebih mudah, anda dapat menggunakan <tt>TCaptchaValidator</tt> untuk mengotomasi pekerjaan validasi bagi anda. <tt>TCaptchaValidator</tt> mempunyai keuntungan tambahan dari kemampuan untuk memvalidasi input pengguna pada sisi-klien. Standarnya, token yang dihasilkan akan tetap tidak berubah selama postbacks. Token baru dapat dibuat dengan memanggil <tt>TCaptcha.regenerateToken()</tt> secara manual.
-</p>
-
-<p>
-Template berikut memperlihatkan penggunaan umum dari kontrol <tt>TCaptcha</tt>:
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TCaptcha ID="Captcha" />
-&lt;com:TTextBox ID="Input" />
-&lt;com:TCaptchaValidator CaptchaControl="Captcha"
- ControlToValidate="Input"
- ErrorMessage="You are challenged!" />
-</com:TTextHighlighter>
-
-<com:RunBar PagePath="Controls.Samples.TCaptcha.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/CheckBox.page b/demos/quickstart/protected/pages/Controls/id/CheckBox.page
deleted file mode 100755
index cc6976a1..00000000
--- a/demos/quickstart/protected/pages/Controls/id/CheckBox.page
+++ /dev/null
@@ -1,14 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="2101">TCheckBox</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TCheckBox" />
-
-<p id="250236" class="block-content">
-<tt>TCheckBox</tt> menampilkan kotak centang pada halaman Web. Judul bisa ditetapkan melalui <tt>Text</tt> dan ditampilkan disamping kotak centang. Ia bisa muncul baik di sisi kanan atau kiri kotak centang, yang ditentukan oleh <tt>TextAlign</tt>. Selanjutnya anda dapat menetapkan atribut yang diterapkan ke teks dengan menggunakan <tt>LabelAttributes</tt>.
-</p>
-<p id="250237" class="block-content">
-Untuk menentukan apakah kotak centang dicentang atau tidak, uji properti <tt>Checked</tt>. Event <tt>CheckedChanged</tt> dimunculkan jika kondisi <tt>Checked</tt> berubah diantara pengiriman ke server. Jika <tt>AutoPostBack</tt> adalah true, mengubah kotak centang akan menyebabkan aksi postback. Dan jika <tt>CausesValidation</tt> juga true, setelah postback validasi akan dilakukan bagi validator di dalam <tt>ValidationGroup</tt> yang ditetapkan.
-</p>
-<com:RunBar PagePath="Controls.Samples.TCheckBox.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/ClientScript.page b/demos/quickstart/protected/pages/Controls/id/ClientScript.page
deleted file mode 100755
index 2142e65a..00000000
--- a/demos/quickstart/protected/pages/Controls/id/ClientScript.page
+++ /dev/null
@@ -1,42 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="2201">TClientScript</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TClientScript" />
-<h2 id="2202">Menyertakan Bundel Librari Javascript dalam Prado</h2>
-<p id="260238" class="block-content">
-<tt>TClientScript</tt> membolehkan kode Javascript disisipkan atau di-link ke template halaman. PRADO dibundel dengan fungsionalitas librari besar Javascript termasuk efek, AJAX, pengendali event dasar, dan masih banyak lagi. Librari Javascript yang dibundel bisa di-link ke template halaman saat ini menggunakan properti <tt>PradoScripts</tt>. Multipel librari Javascript yang dibundel bisa ditetapkan menggunakan string nama librari Javascript dipisahkan koma untuk disertakan pada halaman. Contoh berikut akan menggunakan librari "ajax" dan "effects".
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_260101">
-&lt;com:TClientScript PradoScripts="ajax, effects" /&gt;
-</com:TTextHighlighter>
-
-<p id="260239" class="block-content">
- Bundel librari yang disertakan dalam Prado adalah</p>
- <ul id="u1" class="block-content">
- <li><tt>prado</tt> : kerangka kerja javascript prado dasar berdasarkan Prototype</li>
- <li><tt>effects</tt> : efek visual dari script.aculo.us</li>
- <li><tt>ajax</tt> : terkait ajax dan callback berdasarkan Prototype</li>
- <li><tt>validator</tt> : validasi</li>
- <li><tt>logger</tt> : javascript pencatat dan browser obyek</li>
- <li><tt>datepicker</tt> : datepicker</li>
- <li><tt>colorpicker</tt> : colorpicker</li>
- </ul>
-<p id="260240" class="block-content">
-Banyak dari librari, seperti <tt>validator</tt> dan <tt>datepicker</tt> akan secara otomatis ketika kontrol yang menggunakan librari ini terlihat pada halaman. Sebagai contoh, semua <a href="?page=Controls.Validation">validator</a>
-jika <tt>EnableClientScript</tt> disetel true akan menyertakan librari javascript <tt>prado</tt> dan <tt>validator</tt>.
-Ketergantungan dari setiap librari secara otomatis dipecahkan. Yakni, menetapkan, katakanlah "ajax", juga akan menyertakan librari "prado".</p>
-
-<h2 id="2203">Menyertakan File Javascript Kustom</h2>
-<p id="260241" class="block-content">File Javascript kustom dapat diregistrasi menggunakan properti <tt>ScriptUrl</tt>. Contoh berikut menyertakan file Javascript "test.js" ke halaman. Dalam hal ini, file "test.js" relatif ke template saat ini yang sedang anda gunakan. Karena nilai properti adalah
-<a href="?page=Configurations.Templates3">tag asset dinamis</a>, file "test.js" akan dipublikasikan secara otomatis, yaitu file akan di-copy ke direktori asset bila perlu.
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_260102">
-&lt;com:TClientScript ScriptUrl=&lt;%~ test.js %&gt; /&gt;
-</com:TTextHighlighter>
-<p id="260242" class="block-content">You can include Javascript files from other servers by specifying the full URL string in
- the <tt>ScriptUrl</tt> property.</p>
-
-<h2 id="2204">Menyertakan Blok Kode Javascript Kustom</h2>
-<p id="260243" class="block-content"> Setiap konten di dalam tag kontrol <tt>TClientScript</tt> akan dianggap sebagai kode Javascript dan akan disajikan di mana ia dideklarasikan.</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/ColorPicker.page b/demos/quickstart/protected/pages/Controls/id/ColorPicker.page
deleted file mode 100755
index bac8a96e..00000000
--- a/demos/quickstart/protected/pages/Controls/id/ColorPicker.page
+++ /dev/null
@@ -1,10 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="2201">TColorPicker</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TColorPicker" />
-
-<p id="270244" class="block-content">
-TBD
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/Conditional.page b/demos/quickstart/protected/pages/Controls/id/Conditional.page
deleted file mode 100755
index e17ba4cd..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Conditional.page
+++ /dev/null
@@ -1,36 +0,0 @@
-<com:TContent ID="body" >
-
-<h1>TConditional</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TConditional" />
-
-<p class="block-content">
-<tt>TConditional</tt> menampilkan konten terkai berdasarkan hasil evaluasi ekspresi PHP yang ditetapkan via <tt>Kondisi</tt>.
-Jika hasil adalah true, ia menurunkan template <tt>TrueTemplate</tt>;
-sebaliknua, template <tt>FalseTemplate</tt> yang diturunkan.
-Ekspresi PHP dievaluasi sebelum tahap <tt>onInit</tt> atas masa hidup kontrol.
-</p>
-
-<p class="block-content">
-Karena <tt>TConditional</tt> mengevaluasi <tt>Kondisi</tt> di tahap awal, direkomendasikan anda menyetel <tt>Condition</tt> hanya dalam template dan ekspresi tidak boleh merujuk ke obyek yang tersedia nanti atau setelah masa hidup <tt>onInit</tt>.
-</p>
-
-<p>
-<tt>TConditional</tt> sangat ringan. Ia menurunkan <tt>TrueTemplate</tt>
-<tt>FalseTemplate</tt>, tapi tidak keduanya sekaligus. Dan kondisi dievaluasi hanya sekali.
-Penggunaan umum dari TConditional diperlihatkan seperti berikut:
-</p>
-
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TConditional Condition="$this->User->IsGuest">
- &lt;prop:TrueTemplate>
- <a href="path/to/login">Login</a>
- &lt;/prop:TrueTemplate>
- &lt;prop:FalseTemplate>
- <a href="path/to/logout">Logout</a>
- &lt;/prop:FalseTemplate>
-&lt;/com:TConditional>
-</com:TTextHighlighter>
-
-<com:RunBar PagePath="Controls.Samples.TConditional.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/Data.page b/demos/quickstart/protected/pages/Controls/id/Data.page
deleted file mode 100755
index 8516880a..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Data.page
+++ /dev/null
@@ -1,19 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="5001">Kontrol Data</h1>
-
-<ul id="u1" class="block-content">
- <li>
- <a href="?page=Controls.DataList">TDataList</a> dipakai untuk menampilkan atau memodifikasi daftar dari item data.
- </li>
-
- <li>
- <a href="?page=Controls.DataGrid">TDataGrid</a> menampilkan data dalam format tabel dengan baris serta kolom.
- </li>
-
- <li>
- <a href="?page=Controls.Repeater">TRepeater</a> menampilkan kontennya yang didefinisikan dalam template secara berulang berdasarkan pada data yang berikan.
- </li>
-</ul>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/DataGrid.page b/demos/quickstart/protected/pages/Controls/id/DataGrid.page
deleted file mode 100755
index 419fa552..00000000
--- a/demos/quickstart/protected/pages/Controls/id/DataGrid.page
+++ /dev/null
@@ -1,185 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="5201">TDataGrid</h1>
-
-<p id="590373" class="block-content">
-TDatagrid adalah kontrol penting dalam membangun aplikasi Web yang kompleks. Ia menampilkan data dalam format tabular dengan baris (juga disebut item) dan kolom. Baris dibuat dengan sel, sementara kolom mengatur bagaimana sel harus ditampilkan berdasarkan kaitannya dengan kolom. Data yang ditetapkan melalui <tt>DataSource</tt> atau <tt>DataSourceID</tt> terikat pada baris dan mengisi kontek ke sel.
-</p>
-<p id="590374" class="block-content">
-TDataGrid sangat interaktif. Para pengguna dapat mengurut data sepanjang kolom yang ditetapkan, mengendalikannya melalui halaman data yang berbeda, dan melakukan aksi, seperti mengedit dan menghapus, pada baris data.
-</p>
-<p id="590375" class="block-content">
-Baris TDataGrid dapat diakses melalui properti <tt>Items</tt>. Baris (item) bisa berupa salah satu dari beberapa mode: browse, mengedit dab memilih, yang mempengaruhi bagaimana sel dalam bariis ditampilkan. Untuk mengubah mode item, modifikasi <tt>EditItemIndex</tt> atau <tt>SelectedItemIndex</tt>. Catatan, jika item dalam mode edit, maka memilih item ini tidak terpengaruh.
-</p>
-
-<h2 id="5202">Kolom</h2>
-<p id="590376" class="block-content">
-Kolom pada data grid menentukan bagaimana sel terkait ditampilkan. Sebagai contoh, sel yang dikaitkan dengan <tt>TBoundColumn</tt> ditampilkan secara berbeda tergantung dari modenya. Sebuah sel ditampilkan sebagai teks statis jika sel dalam mode browse, kotak teks jika dalam mode edit, dan seterusnya.
-</p>
-<p id="590377" class="block-content">
-PRADO menyediakan lima tipe kolom:
-</p>
-<ul id="u1" class="block-content">
- <li><tt>TBoundColumn</tt> menghubungkan sel dengan field data dan menampilkan sel berdasarkan modenya.</li>
- <li><tt>TLiteralColumn</tt> menghubungkan sel dengan field data spesifik dan menampilkan sel dengan teks statis.</li>
- <li><tt>TCheckBoxColumn</tt> menghubungkan sel dengan field data spesifik dan menampilkan kotak centang dalam setiap sel yang kondisi centangnya ditentukan oleh nilai field data.</li>
- <li><tt>TDropDownListColumn</tt> menghubungkan sel dengan field data spesifik dan menampilkan sel berdasarkan modenya. Jika dalam mode edit, sel akan ditampilkan dengan <tt>TDropDownList</tt>.</li>
- <li><tt>THyperLinkColumn</tt> menampilkan hiperlink dalam sel yang URL dan judulnya bisa berupa secara statis ditetapkan atau terikat ke beberapa field data.</li>
- <li><tt>TEditCommandColumn</tt> menampilkan tombol perintah edit/update/cancel dalam sel untuk menyatakan item yang berada di dalamnya.</li>
- <li><tt>TButtonColumn</tt> menampilkan tombol perintah dalam sel.</li>
- <li><tt>TTemplateColumn</tt> menampilkan sel berdasarkan pada template berbeda yang didefinisikan untuknya.</li>
-</ul>
-
-<h2 id="5203">Gaya Item</h2>
-<p id="590378" class="block-content">
-TDataGrid mendefinisikan gaya yang diterapkan pada itemnya. Sebagai contoh, <tt>AlternatingItemStyle</tt> diterapkan untuk mengganti item (item 2, 4, 6, dll.) Melalui properti ini, seseorang dapat menyetel field gaya CSS atau kelas CSS untuk item-item tersebut.
-</p>
-<p id="590379" class="block-content">
-Gaya item diterapkan dalam cara hirarkis. Gaya dalam hirarki lebih tinggi akan diturunkan dari gaya dalam hirarki lebih rendah. Mulai dari hirarki terendah, gaya item termasuk gaya item itu sendiri, <tt>ItemStyle</tt>, <tt>AlternatingItemStyle</tt>, <tt>SelectedItemStyle</tt>, dan <tt>EditItemStyle</tt>. Oleh karena itu, jika warna latar belakang disetel merah dalam <tt>ItemStyle</tt>, <tt>EditItemStyle</tt> juga akan memiliki warna latar belakang merah, kecuali dinyatakan secara eksplisit ke nilai yang berbeda.
-</p>
-
-<h2 id="5204">Event</h2>
-<p id="590380" class="block-content">
-TDataGrid menyediakan beberapa event untuk menjembatani manipulasi item datanya,
-</p>
-<ul id="u2" class="block-content">
- <li><tt>OnItemCreated</tt> - muncul setiap kali item baru saja dibuat. Ketika event muncul, data dan kontrol anak keduanya tersedia bagi item baru.</li>
- <li><tt>OnItemDataBound</tt> - muncul setiap kali item selesai menyatukan data. Ketika event muncul, data dan kontrol anak keduanya tersedia untuk item, dan item telah selesai menyatukan data dari dirinya sendiri dan seluruh kontrol anaknya.</li>
- <li><tt>OnItemCommand</tt> - muncul ketika kontrol anak pada beberapa item (seperti <tt>TButton</tt>) memunculkan event <tt>OnCommand</tt>.</li>
- <li>command events - muncul saat event kontrol anak <tt>OnCommand</tt> mempunyai nama perintah spesifik,
- <ul>
- <li><tt>OnSelectedIndexChanged</tt> - jika nama perintah adalah <tt>select</tt>.</li>
- <li><tt>OnEditCommand</tt> - jika nama perintah adalah <tt>edit</tt>.</li>
- <li><tt>OnDeleteCommand</tt> - jika nama perintah adalah <tt>delete</tt>.</li>
- <li><tt>OnUpdateCommand</tt> - jika nama perintah adalah <tt>update</tt>.</li>
- <li><tt>OnCancelCommand</tt> - jika nama perintah adalah <tt>cancel</tt>.</li>
- <li><tt>OnSortCommand</tt> - jika nama perintah adalah <tt>sort</tt>.</li>
- <li><tt>OnPageIndexChanged</tt> - jika nama perintah adalah <tt>page</tt>.</li>
- </ul>
- </li>
-</ul>
-
-<h2 id="5205">Menggunakan TDataGrid</h2>
-
-<h3 id="5210">Kolom yang Dibuat Secara Otomatis</h3>
-<p id="590381" class="block-content">
-TDataGrid standarnya akan membuat sebuah daftar kolom berdasarkan struktur data terikat. TDataGrid akan membaca baris pertama data, menguraikan nama field dari baris, dan mengkonstruksi kolom untuks setiap field. Setiap field adalah tipe <tt>TBoundColumn</tt>.
-</p>
-<p id="590382" class="block-content">
-Contoh berikut menampilkan daftar informasi produk komputer menggunakan TDataGrid. Kolom secara otomatis dibuat. Perhatikan bagaimana gaya item ditetapkan dan diturunkan. Data dipopulasi ke dalam datagrid menggunakan kode berikut yang umum diantara kebanyakan aplikasi datagrid,
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_590121">
-public function onLoad($param) {
- parent::onLoad($param);
- if(!$this->IsPostBack) {
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-}
-</com:TTextHighlighter>
-<com:RunBar PagePath="Controls.Samples.TDataGrid.Sample1" />
-
-<h3 id="5211">Kolom Ditetapkan secara Manual</h3>
-<p id="590383" class="block-content">
-Menggunakan kolom yang dibuat secara otomatis memberikan cara cepat melihat data tabular. Dalam aplikasi sebenarnya, kolom yang dibuat secara otomatis sering tidak mencukupi karena para pengembang tidak memiliki cara mengkustomisasi penampilannya. Kolom yang dibuat secara manual jauh lebih diinginkan.
-</p>
-<p id="590384" class="block-content">
-Untuk menetapkan kolom secara manual, setel <tt>AutoGenerateColumns</tt> ke false, dan tetapkan kolom dalam template seperti berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_590122">
-&lt;com:TDataGrid ...&gt;
- &lt;com:TBoundColumn DataField="name" .../&gt;
- &lt;com:TBoundColumn DataField="price" .../&gt;
- &lt;com:TEditCommandColumn ...&gt;
- ...
-&lt;/com:TDataGrid&gt;
-</com:TTextHighlighter>
-<p id="590385" class="block-content">
-Catatan, jika <tt>AutoGenerateColumns</tt> adalah true dan di sana ditetapkan kolom secara manual, kolom yang dibuat secara otomatis akan diterapkan ke kolom yang ditetapkan secara manual. Catat juga, properti <tt>Columns</tt> datagrid hanya berisi kolom yang ditetapkan secara manual dan bukan yang secara otomatis dibuat.
-</p>
-<p id="590386" class="block-content">
-Contoh berikut menggunakan kolom yang ditetapkan secara manual untuk memperlihatkan daftar informasi buku,
-</p>
-<ul id="u4" class="block-content">
- <li>Book title - ditampilkan sebagai hiperlink mengarah ke halaman buku amazon.com terkait. <tt>THyperLinkColumn</tt> dipakai.</li>
- <li>Publisher - ditampilkan sebagai bagian teks menggunakan <tt>TBoundColumn</tt>.</li>
- <li>Price - ditampilkan sebagai bagian teks menggunakan <tt>TBoundColumn</tt> dengan output berformat string dan gaya dikustomisasi.</li>
- <li>In-stock or not - ditampilkan sebagai kotak centang menggunakan <tt>TCheckBoxColumn</tt>.</li>
- <li>Rating - ditampilkan sebagai gambar menggunakan <tt>TTemplateColumn</tt> yang membolehkan kebebasan maksimum dalam menetapkan konten sel.</li>
-</ul>
-<p id="590387" class="block-content">Perhatikan bagaimana gaya item (baris) dan kolom bekerja sama untuk mempengaruhi penampilan sel dalam datagrid.</p>
-<com:RunBar PagePath="Controls.Samples.TDataGrid.Sample2" />
-
-
-<h2 id="5206">Berinteraksi dengan TDataGrid</h2>
-<p id="590388" class="block-content">
-Selain kaya fungsionalitas penyajian data seperti didemonstrasikan dalam bagian sebelumnya, TDataGrid juga sangat interaktif bagi pengguna. Pemakaian impor TDataGrid adalah mengedit atau menghapus baris data. <tt>TBoundColumn</tt> dapat menyesuaikan penyajian sel terkait berdasarkan mode item datagrid. Ketika item dalam mode browse, sel ditampilkan dengan teks statis; ketika item ditampilkan dalam mode edit, kotak teks ditampilkan untuk menampung input pengguna. TDataGrid menyediakan <tt>TEditCommandColumn</tt> untuk mengalihkan mode item. Sebagai tambahan, <tt>TButtonColumn</tt> menawarkan kepada para pengembang fleksibilitas dari pembuatan tombol bebas untuk berbagai interaksi pengguna.
-</p>
-<p id="590389" class="block-content">
-Contoh berikut memperlihatkan bagaimana untuk membuat tabel informasi buku sebelumnya menjadi interaktif. Ia membolehkan pengguna untuk mengedit dan menghapus item buku dari tabel. Dua kolom tambahan dipakai dalam contoh untuk membolehkan interaksi para penggunak dengan datagrid: <tt>TEditCommandColumn</tt> dan <tt>TButtonColumn</tt>. Sebagai tambahan,
-<tt>TDropDownListColumn</tt> mengganti <tt>TTemplateColumn</tt> sebelumnya untuk membolehkan pengguna memilih peringkat dari daftar dropdown. Catatan, Ini juga memungkinkan untuk menggunakan <tt>TTemplateColumn</tt> guna menyelesaikan tugas yang sama.
-</p>
-<com:RunBar PagePath="Controls.Samples.TDataGrid.Sample3" />
-
-<h2 id="5207">Pengurutan</h2>
-<p id="590390" class="block-content">
-TDataGrid mendukung pengurutan itemnya yang terkait dengan kolom tertentu. Untuk menghidupkan pengurutan, setel <tt>AllowSorting</tt> ke true. Ini akan mengubah header kolom menjadi tombol yang bisa diklik jika properti <tt>SortExpression</tt> tidak kosong. Ketika para pengguna mengklik pada tombol header, event <tt>OnSortCommand</tt> akan dimunculkan. Para pengembang dapat menulis pengendali guna merespon perintah pengurutan dan mengurut data berdasarkan <tt>SortExpression</tt> yang ditetapkan dalam kolom terkait.
-</p>
-<p id="590391" class="block-content">
-Contoh berikut mengubah datagrid dalam <a href="?page=Controls.Samples.TDataGrid.Sample2">Contoh 2</a> menjadi yang bisa diurutkan. Para pengguna dapat mengklik pada tombol link yang ditampilkan dalam setiap kolom, dan data akan diurut dalam urutan membesar sepanjang kolom tersebut.
-</p>
-<com:RunBar PagePath="Controls.Samples.TDataGrid.Sample4" />
-
-<h2 id="5208">Lembaran</h2>
-<p id="590392" class="block-content">
-Ketika berhadapan dengan dataset besar, lembaran sangat membantu dalam mengurangi ukuran halaman dan kompleksitasnya. TDataGrid disertai lembaran yang membolehkan para pengguna menetapkan di halaman mana data ingin mereka lihat. Lembaran bisa dikustomisasi melalui <tt>PagerStyle</tt>. Sebagai contoh, <tt>PagerStyle.Visible</tt> menentukan apakah lembaran terlihat atau tidak; <tt>PagerStyle.Position</tt> menunjukan di mana lembaran ditampilkan; dan <tt>PagerStyle.Mode</tt> menetapkan tipe lembaran apa yang ditampilkan, numerik atau kata berikutnya-sebelumnya.
-</p>
-<p id="590393" class="block-content">
-Untuk menghidupkan lembaran, setel <tt>AllowPaging</tt> ke true. Jumlah baris data yang ditampilkan dalam halaman ditetapkan oleh <tt>PageSize</tt>, sementara indeks (berbasis-nol) pada halaman yang saat ini terlihat bagi para pengguna adalah dengan <tt>CurrentPageIndex</tt>. Ketika para pengguna mengklik pada tombol lembar, TDataGrid memunculkan event <tt>OnPageIndexChanged</tt>. Biasanya, pengendali event ditulis seperti berikut,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_590123">
-public function pageIndexChanged($sender,$param) {
- $this->DataGrid->CurrentPageIndex=$param->NewPageIndex;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
-}
-</com:TTextHighlighter>
-<p id="590394" class="block-content">
-Contoh berikut menghidupkan fungsionalitas lembar dari datagrid yang ditampilkan dalam <a href="?page=Controls.Samples.TDataGrid.Sample1">Contoh 1</a>. Dalam contoh ini, anda dapat menyetel berbagai gaya lembar secara interaktif untuk melihat bagaimana pengaruh tampilan lembar halaman.
-</p>
-<com:RunBar PagePath="Controls.Samples.TDataGrid.Sample5" />
-
-<h3 id="5212">Lembar Kustom</h3>
-<p id="590395" class="block-content">
-Fungsionalitas lembar halaman yang ditampilkan di atas memerlukan pengambilan seluruh data ke dalam memori, meskipun hanya sebagian darinya ditampilkan dalam sebuah halaman. Untuk dataset besar, ini tidak efisien dan mungkin tidak selalu layak. TDataGrid menyediakan lembar kustom untuk memecahkan masalah ini. Lembar kustom hanya memerlukan sebagian data untuk ditampilkan kepada pengguna akhir.
-</p>
-<p id="590396" class="block-content">
-Untuk menghidupkan lembat kustom, setel <tt>AllowPaging</tt> dan <tt>AllowCustomPaging</tt> ke true. Beritahu TDataGrid jumlah item data (baris) yang tersedia dengan menyetel <tt>VirtualItemCount</tt>. Dan merespon ke event <tt>OnPageIndexChanged</tt>. Dalam pengendali event, gunakan properti <tt>NewPageIndex</tt> atas parameter event untuk megnambil lembar baru data dari sumber data. Untuk MySQL database, ini bisa dikerjakan dengan menggunakan klausul <tt>LIMIT</tt> dalam pernyataan SQL select.
-</p>
-<com:RunBar PagePath="Controls.Samples.TDataGrid.Sample6" />
-
-<h2 id="5209">Memperluas TDataGrid</h2>
-<p id="590397" class="block-content">
-Selain turunan kelas tradisional, kemampuan diperluas TDataGrid dikembangkan terutama melalui komponen kolom datagrid. Sebagai contoh, seseorang mungkin ingin menampilkan sebuah kolom bergambar. Dia dapat menggunakan <tt>TTemplateColumn</tt> untuk menyelesaikan tugas ini. Solusi yang lebih baik adalah mengembangkan komponen kolom gambar pekerjaan tersebut bisa dipakai ulang dengan mudah dalam proyek lain.
-</p>
-<p id="590398" class="block-content">
-Semua komponen kolom datagrid harus diturunkan dari <tt>TDataGridColumn</tt>. Metode utama yang perlu diganti adalah <tt>initializeCell()</tt> yang membuat konten untuk sel dalam kolom terkait. Karena setiap sel juga dalam sebuah item (baris) dan item dapat memiliki tipe berbeda (seperti <tt>Header</tt>, <tt>AltneratingItem</tt>, dll.), konten berbeda bisa dibuat berdasarkan tipe item. Untuk contoh kolom gambar, seseorang dapat membuat kontrol <tt>TImage</tt> di dalam sel dalam item dari tipe <tt>Item</tt> dan <tt>AlterantingItem</tt>.
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_590124">
-class ImageColumn extends TDataGridColumn {
- ...
- public function initializeCell($cell,$columnIndex,$itemType) {
- parent::initializeCell($cell,$columnIndex,$itemType);
- if($itemType==='Item' || $itemType==='AlternatingItem') {
- $image=new TImage;
- // ... kustomisasi gambar
- $cell->Controls[]=$image;
- }
- }
-}
-</com:TTextHighlighter>
-<p id="590399" class="block-content">
-Dalam <tt>initializeCell()</tt>, jangan lupa untuk memanggil implementasi leluhur, karena ia menginisialisasi sel dalam item dari tipe <tt>Header</tt> dan <tt>Footer</tt>.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/DataList.page b/demos/quickstart/protected/pages/Controls/id/DataList.page
deleted file mode 100755
index 517be66f..00000000
--- a/demos/quickstart/protected/pages/Controls/id/DataList.page
+++ /dev/null
@@ -1,113 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="5101">TDataList</h1>
-<p id="580362" class="block-content">
-TDataList mewakili ikatan data dan kontrol list yang bisa dimutakhirkan. Seperti <tt>TRepeater</tt>, TDataList menampilkan kontennya secara berulang berdasarkan data yang diambil dari <tt>DataSource</tt>. Kontek yang diulang dalam TDataList disebut item, yang adalah kontrol dan bisa diakses melalui <tt>Items</tt>. Ketika <tt>dataBind()</tt> dipanggil, TDataList membuat sebuah item untuk setiap baris data dan mengikat baris data ke item. Secara opsional, TDataList dapat mempunyai header, footer dan/atau pemisah antara item.
-</p>
-
-<p id="580363" class="block-content">
-TDataList berbeda dari TRepeater yakni memperkenalkan konsep kondisi item dan membolehkan menerapkan gaya berbeda ke item dalam kondisi berbeda. Sebagai tambahan, TDataList mendukung pengotakan item berulang dalam berbagai cara.
-</p>
-
-<p id="580364" class="block-content">
-Tata letak dari konten yang diulang dalam TDataList ditetapkan dengan template inline. Item TDataList, header, footer, dll. diturunkan dengan template terkait saat data sedang diikat ke pengulang.
-</p>
-
-<p id="580365" class="block-content">
-Sejak v3.1.0, tata letak juga dapat berupa penyaji. Penyaji adalah kelas kontrol yang dapat diturunkan sebagai item datalist, header, dll. Penyaji dapat dilihat sebagai template eksternal (sebenarnya, ia juga merupakan kontrol tanpa-template). Untuk lebih jelasnya, lihat penjelasan mengenai penyaji dalam <a href="?page=Controls.Repeater">Tutorial TRepeater</a>.
-</p>
-
-<p id="580366" class="block-content">
-Properti berikut dipakai untuk menetapkan tipe template dan penyaji datalist. Jika tipe konten didefinisikan dengan template dan penyaji, maka penyaji diambil lebih dulu.
-</p>
-
-<ul id="u5" class="block-content">
-<li><tt>ItemTemplate</tt>, <tt>ItemRenderer</tt>: untuk setiap baris data yang diulang</li>
-<li><tt>AlternatingItemTemplate</tt>, <tt>AlternatingItemRenderer</tt>: untuk setiap pergantian baris data. Jika tidak disetel, <tt>ItemTemplate</tt> atau <tt>ItemRenderer</tt> yang akan dipakai.</li>
-<li><tt>HeaderTemplate</tt>, <tt>HeaderRenderer</tt>: untuk header datalist.</li>
-<li><tt>FooterTemplate</tt>, <tt>FooterRenderer</tt>: untuk footer datalist.</li>
-<li><tt>SeparatorTemplate</tt>, <tt>SeparatorRenderer</tt>: untuk konten yang ditampilkan diantara item.</li>
-<li><tt>EmptyTemplate</tt>, <tt>EmptyRenderer</tt>: dipakai saat data yang terikat ke datalist kosong.</li>
-<li><tt>EditItemTemplate</tt>, <tt>EditItemRenderer</tt>: untuk baris yang sedang diedit.</li>
-<li><tt>SelectedItemTemplate</tt>, <tt>SelectedItemRenderer</tt>: untuk baris yang sedang dipilih.</li>
-</ul>
-
-<p id="580367" class="block-content">
-Ketika <tt>dataBind()</tt> dipanggil, TDataList menjalani masa hidup seperti berikut untuk setiap baris data:
-</p>
-
-<ol id="u6" class="block-content">
-<li>buat item berdasarkan template atau penyaji</li>
-<li>setel baris data ke item</li>
-<li>munculkan event <tt>OnItemCreated</tt></li>
-<li>tambah item sebagai kontrol anak</li>
-<li>panggil <tt>dataBind()</tt> pada item</li>
-<li>munculkan event <tt>OnItemDataBound</tt></li>
-</ol>
-
-<p id="580368" class="block-content">
-TDataList memunculkan <tt>OnItemCommand</tt> kapan saja kontrol tombol di dalam beberapa item datalist memunculkan event <tt>OnCommand</tt>. Oleh karena itu, anda bisa menangani semua event <tt>OnCommand</tt> di satu tempat dengan menulis pengendali event untuk event <tt>OnItemCommand</tt>. Event tambahan dimunculkan jika event <tt>OnCommand</tt> memiliki salah satu dari nama perintah berikut (tidak sensitif-huruf):
-</p>
-
-<ul id="u7" class="block-content">
-<li><tt>edit</tt> - pengguna ingin mengedit item. Event <tt>OnEditCommand</tt> akan dimunculkan.</li>
-<li><tt>update</tt> - pengguna ingin menyimpan perubahan terhadap item. Event <tt>OnUpdateCommand</tt> akan dimunculkan.</li>
-<li><tt>select</tt> - pengguna memilih item. Event <tt>OnSelectedIndexChanged</tt> akan dimunculkan.</li>
-<li><tt>delete</tt> - pengguna menghapus item. Event <tt>OnDeleteCommand</tt> akan dimunculkan.</li>
-<li><tt>cancel</tt> - pengguna membatalkan aksi pengeditan sebelumnya. Event <tt>OnCancelCommand</tt> akan dimunculkan.</li>
-</ul>
-
-<p id="580369" class="block-content">
-TDataList menyediakan beberapa properti untuk mendukung pengotakan item. Jumlah kolom yang digunakan untuk menampilkan item data dietapkan melalui properti <tt>RepeatColumns</tt>, sementara <tt>RepeatDirection</tt> mengatur urutan item yang sedang disajikan. Tata letak item data dalam daftar ditetapkan melalui <tt>RepeatLayout</tt>, yang mengambil salah satu dari nilai berikut:
-</p>
-
-<ul id="u8" class="block-content">
-<li><tt>Table</tt> (default) - item diatur menggunakan tabel HTML dan sel. Ketika menggunakan tata letak ini, seseorang dapat menyetel <tt>CellPadding</tt> dan <tt>CellSpacing</tt> untuk menyesuaikan cellpadding dan cellspacing pada tabel, dan <tt>Caption</tt> serta <tt>CaptionAlign</tt> untuk menambahkan judul tabel dengan penjajaran yang ditetapkan.</li>
-<li><tt>Flow</tt> - item diatur menggunakan span dan break HTML.</li>
-<li><tt>Raw</tt> - TDataList tidak membuat tag HTML apapun untuk melakukan kotak-kotak.</li>
-</ul>
-
-<p id="580370" class="block-content">
-Item dalam TDataList dapat berupa salah satu dari tiga keadaan: sedang dilihat, sedang diedit dan sedang dipilih. Untuk mengubah keadaan item tertentu, setel <tt>SelectedItemIndex</tt> atau <tt>EditItemIndex</tt>. Former akan mengubah item yang ditunjuk ke mode yang dipilih, yang akan menyebabkan item menggunakan <tt>SelectedItemTemplate</tt> atau <tt>SelectedItemRenderer</tt> dalam penyajiannya. Yang terakhir akan mengubah item yang ditunjuk ke mode edit dan menggunakan template atau penyaji terkait. Catatan, jika sebuah item dalam mode edit, maka memilih item ini tidak akan berpengaruh.
-</p>
-
-<p id="580371" class="block-content">
-Gaya berbeda dapat diterapkan ke item dalam status yang berbeda. Gaya aplikasi dilakukan dalam cara hirarkis: Gaya dalam hirarki lebih tinggi akan diturunkan dari hirarki lebih rendah. Dimulai dari hirarki paling rendah, gaya item termasuk:
-</p>
-
-<ul id="u9" class="block-content">
-<li>gaya item sendiri</li>
-<li><tt>ItemStyle</tt></li>
-<li><tt>AlternatingItemStyle</tt></li>
-<li><tt>SelectedItemStyle</tt></li>
-<li><tt>EditItemStyle</tt></li>
-</ul>
-
-<p id="580372" class="block-content">
-Oleh karena itu, jika warna latar belakang disetel sebagai merah dalam <tt>ItemStyle</tt>, <tt>EditItemStyle</tt> juga akan mempunyai warna latar belakang merah keciali ia disetel ke nilai berbeda secara eksplisit.
-</p>
-
-<p id="580373" class="block-content">
-Ketika halaman yang berisi datalist adalah post back, datalist akan mengembalikan secara otomatis seluruh kontennya, termasuk item, header, footer dan pemisah. Akan tetapi, baris data terkait dengan setiap item tidak akan ditemukan kembali dan menjadi null. Untuk mengakses data, gunakan salah satu cara berikut:
-</p>
-
-<ul id="u10" class="block-content">
-<li>Gunakan <tt>DataKeys</tt> untuk memperoleh kunci data terkait dengan item pengulang (repeater) yang ditetapkan dan gunakan kunci untuk mengambil data terkait dari beberapa penyimpanan persisten seperti misalnya DB. </li>
-<li>Simpan seluruh dataset dalam kondisi tampilan, yang akan mengembalikan dataset secara otomatis setelah postback. Bagaimanapun juga, harap berhati-hati jika ukuran dataset anda besar, ukuran halaman akan menjadi besar. Beberapa data kompleks mungkin juga mempunyai masalah serialisasi jika disimpan dalam kondisi tampilan.</li>
-</ul>
-<p id="580374" class="block-content">
-Contoh berikut memperlihatkan bagaimana menggunakan TDataList guna menampilkan data tabular, dengan tata letak dan gaya yang berbeda.
-</p>
-<com:RunBar PagePath="Controls.Samples.TDataList.Sample1" />
-<p id="580375" class="block-content">
-Pemakaian umum dari TDataList adalah untuk memanipulasi data tabular, termasuk melihat, mengedit, meghapus item data. Ini dihidupkan dengan event perintah dan berbagai template item pada TDataList.
-</p>
-<p id="580376" class="block-content">
-Contoh berikut menampilkan informasi produk komputer. Para pengguna dapat menambah produk baru, memodifikasi atau menghapus produk yang sudah ada. Agar bisa mencari item data untuk pemutakhiran atau penghapusan, properti <tt>DataKeys</tt> yang digunakan.
-</p>
-<p id="580377" class="block-content">
-Harap berhati-hati, untuk kemudahan, aplikasi ini tidak melakukan validasi input apapun. Dalam aplikasi sebenarnya, pastikan input divalidasi sebelum menyimpannya ke dalam database.
-</p>
-<com:RunBar PagePath="Controls.Samples.TDataList.Sample2" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/DatePicker.page b/demos/quickstart/protected/pages/Controls/id/DatePicker.page
deleted file mode 100755
index abf980f2..00000000
--- a/demos/quickstart/protected/pages/Controls/id/DatePicker.page
+++ /dev/null
@@ -1,64 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="2301">TDatePicker</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TDatePicker" />
-
-<p id="280245" class="block-content"><tt>TDatePicker</tt> menampilkan kotak teks untuk keperluan input tanggal.
-Ketika kotak teks menerima fokus, kalender akan muncul dan pengguna dapat mengambil tanggal darinya yang akan secara otomatis dimasukan ke dalam kotak teks. Format tanggal string yang ditampilkan dalam kotak teks ditentukan oleh properti <tt>DateFormat</tt>. Format yang benar adalah kombinasi dari token berikut:
-
-<com:TTextHighlighter Language="text" CssClass="source block-content" id="code_280103">
-Karakter Pola Format (en-US)
----------------------------------------------------------------------
- d digit hari
- dd digit hari diisi misalnya 01, 02
- M digit bulan
- MM digit bulan diisi
- MMM singkatan nama bulan yang dilokalisasi, misalnya Mar, Apr
- MMMM nama bulan yang dilokalisasi, misalnya March, April
- yy 2 digit tahun
- yyyy 4 digit tahun
----------------------------------------------------------------------
-</com:TTextHighlighter>
-
-<p id="280246" class="block-content">
-Tanggal pada pengambil tanggal bisa disetel menggunakan properti <tt>Date</tt> atau <tt>Timestamp</tt>. Nilai properti <tt>Date</tt> harus dalam format yang sama seperti pola yang ditetapkan dalam properti <tt>DateFormat</tt>. Properti <tt>Timestamp</tt> hanya menerima integer seperti cap waktu Unix.
-</p>
-
-<p id="280247" class="block-content">
-TDatePicker mempunyai tiga <tt>Mode</tt> untuk menampilkan tampilan pengambil tanggal.</p>
- <ul id="u1" class="block-content">
- <li><tt>Basic</tt> - Hanya menampilkan input teks, memfokuskan pada input menampilkan pengambil tanggal.</li>
- <li><tt>Button</tt> - Menampilkan tombol disebelah input teks, mengklik pada tombol tampilkan tanggal, teks tombol dapat diubah dengan properti <tt>ButtonText</tt>.</li>
- <li><tt>ImageButton</tt> - Menampilkan gambar di sebelah input teks, mengklik pada gambar pengambil tanggal, sumber gambar bisa diubah melalui properti <tt>ImageUrl</tt>.</li>
- </ul>
-
-<p id="280248" class="block-content">Properti <tt>CssClass</tt> dapat dipakai untuk mengganti nama kelas CSS untuk panel pengambil tanggal. Properti <tt>CalendarStyle</tt> mengubah gaya kalender secara keseluruhan.
-Nilai <tt>CalendarStyle</tt> berikut tersedia:</p>
- <ul id="u2" class="block-content">
- <li><tt>default</tt> - gaya standar kalender.</li>
- </ul>
-
-<p id="280249" class="block-content">Properti <tt>InputMode</tt> bisa disetel ke "TextBox" atau "DropDownList" dengan standar sebagai "TextBox". Dalam mode <tt>DropDownList</tt>, sebagai tambahan pada tampilan pengambil tanggal, tiga daftar drop down (hari, bulan dan tahun) disajikan untuk memilih tanggal.
-Ketika <tt>InputMode</tt> sama dengan "DropDownList", urutan dan penampilan tanggal, bulan, dan tahun akan bergantung pada pola yang ditetapkan dalam properti <tt>DateFormat</tt>.
-</p>
-
-<p id="280250" class="block-content">Tampilan pengambil tanggal dapat disembunyikan dengan menetapkan <tt>ShowCalendar</tt> ke false. Banyak teks pada tampilan pengambil tanggal dapat diubah ke bahasa berbeda menggunakan properti <tt>Culture</tt>.
-</p>
-
-<p id="280251" class="block-content">Batas tahun pengambil kalender dapat disetel menggunakan properti <tt>FromYear</tt> dan <tt>UpToYear</tt> di mana
-<tt>FromYear</tt> adalah tahun awal dan <tt>UpToYear</tt> adalah tahun terakhir yang dapat dipilih.
-Awal hari pada seminggu bisa diubah dengan properti <tt>FirstDayOfWeek</tt>, dengan 0 sebagai Minggu, 1 sebagai Senin, dst.
-</p>
-
-<p id="280252" class="block-content"><b>Catatan 1:</b> Jika <tt>InputMode</tt> adalah "TextBox", <tt>DateFormat</tt> <b>TIDAK</b> boleh berisi pola <code>MMM</code> atau <code>MMMM</code>. Pengurai sisi-server tidak akan bisa menentukan tanggal yang benar jika <code>MMM</code> atau <code>MMMM</code> dipakai. Ketika <tt>InputMode</tt> sama dengan "DropDownList", seluruh pola dapat dipergunakan.</p>
-
-<p id="280253" class="block-content"><b>Catatan 2:</b> Ketika <tt>TDatePicker</tt> dipakai bersama dengan validator, properti <tt>DateFormat</tt> pada validator harus sama dengan
-<tt>DateFormat</tt> pada <tt>TDatePicker</tt> <b>DAN</b> harus disetel <tt>DataType</tt>="Date" pada validator guna memastikan validasi yang benar. Lihat
-<a href="?page=Controls.Validation#TCompareValidator">TCompareValidator</a>,
-<a href="?page=Controls.Validation#TDataTypeValidator">TDataTypeValidator</a> dan
-<a href="?page=Controls.Validation#TRangeValidator">TRangeValidator</a>
-untuk lebih jelasnya.</p>
-
-<com:RunBar PagePath="Controls.Samples.TDatePicker.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/Expression.page b/demos/quickstart/protected/pages/Controls/id/Expression.page
deleted file mode 100755
index ff19aa91..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Expression.page
+++ /dev/null
@@ -1,23 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="2401">TExpression</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TExpression" />
-
-<p id="290254" class="block-content">
-<tt>TExpression</tt> mengevaluasi ekspresi PHP dan menampilkan hasil evaluasinya. Untuk menetapkan ekspresi yang akan dievaluasi, setel properti <tt>Expression</tt>. Catatan, <tt>TExpression</tt> mengevaluasi ekspresi selama menyajikan masa hidup kontrol.
-</p>
-
-<p id="290255" class="block-content">
-Konteks dari ekspresi dalam kontrol <tt>TExpression</tt> adalah kontrol itu sendiri. Yaitu, <tt>$this</tt> mewakili obyek kontrol jika ia ada dalam ekspresi. Sebagai contoh, tag template akan menampilkan judul halaman yang berisi kontrol <tt>TExpression</tt>.
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_290104">
-&lt;com:TExpression Expression="$this->Page->Title" /&gt;
-</com:TTextHighlighter>
-
-<p id="290256" class="block-content">
-Harap berhati-hati karena <tt>TExpression</tt> membolehkan eksekusi kode bebas PHP, secara umum anda seharusnya tidak menggunakannya untuk mengevaluasi ekspresi yang dikirimkan oleh para pengguna aplikasi anda.
-</p>
-
-<com:RunBar PagePath="Controls.Samples.TExpression.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/FileUpload.page b/demos/quickstart/protected/pages/Controls/id/FileUpload.page
deleted file mode 100755
index 53c62489..00000000
--- a/demos/quickstart/protected/pages/Controls/id/FileUpload.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="2501">TFileUpload</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TFileUpload" />
-
-<p id="300257" class="block-content">
-<tt>TFileUpload</tt> menampilkan field file upload pada halaman Web. Setelah postback, teks yang dimasukan ke dalam field akan diperlkakukan sebagai nama (lokal) file yang di-upload ke server.
-</p>
-<p id="300258" class="block-content">
-<tt>TFileUpload</tt> memunculkan event <tt>OnFileUpload</tt> ketika ia adalah post back. Properti <tt>HasFile</tt> menunjukan apakah file yang di-upload sukses atau tidak. Jika sukses, file yang di-upload dapat disimpan pada server dengan memanggil metode <tt>saveAs()</tt>.
-</p>
-<p id="300259" class="block-content">
-Properti berikut memberikan informasi mengenai file yang di-upload:
-</p>
-<ul id="u1" class="block-content">
- <li><tt>FileName</tt> - nama file asal pada sisi-klien tanpa direktori.</li>
- <li><tt>FileType</tt> - tipe MIME dari file yang di-upload.</li>
- <li><tt>FileSize</tt> - ukuran file dalam byte.</li>
- <li><tt>LocalName</tt> - path file absolut dari file yang di-upload ke server. Catatan, file ini akan dihapus setelah permintaan halaman saat ini selesai. Panggil <tt>saveAs()</tt> untuk menyimpan file yang di-upload.</li>
-</ul>
-<p id="300260" class="block-content">
-Jika upload file tidak berhasil, properti <tt>ErrorCode</tt> memberikan kode kesalahan yang menyebabkan kegagalan. Lihat <a href="http://www.php.net/manual/en/features.file-upload.errors.php">dokumentasi PHP</a> untuk penjelasan lengkap atas kode kesalahan yang mungkin.
-</p>
-
-<com:RunBar PagePath="Controls.Samples.TFileUpload.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/Head.page b/demos/quickstart/protected/pages/Controls/id/Head.page
deleted file mode 100755
index 89d62544..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Head.page
+++ /dev/null
@@ -1,10 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="2601">THead</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.THead" />
-
-<p id="310261" class="block-content">
-TBD
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/HiddenField.page b/demos/quickstart/protected/pages/Controls/id/HiddenField.page
deleted file mode 100755
index 97a14dda..00000000
--- a/demos/quickstart/protected/pages/Controls/id/HiddenField.page
+++ /dev/null
@@ -1,13 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="2701">THiddenField</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.THiddenField" />
-
-<p id="320262" class="block-content">
-<tt>THiddenField</tt> mewakili field tersembyni pada halaman Web. Nilai field tersembunyi dapat diakses melalui properti <tt>Value</tt>.
-</p>
-<p id="320263" class="block-content">
-<tt>THiddenField</tt> memunculkan event <tt>OnValueChanged</tt> jika nilainya diubah selama postback.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/HtmlArea.page b/demos/quickstart/protected/pages/Controls/id/HtmlArea.page
deleted file mode 100755
index 5a6c4c5c..00000000
--- a/demos/quickstart/protected/pages/Controls/id/HtmlArea.page
+++ /dev/null
@@ -1,48 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="2801">THtmlArea</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.THtmlArea" />
-
-<p id="330264" class="block-content">
-<tt>THtmlArea</tt> menampilkan field input teks WYSIWYG pada halaman Web untuk mengumpulkan input dalam format HTML. Teks yang ditampilkan dalam kontrol <tt>THtmlArea</tt> ditetapkan atau ditentukan dengan menggunakan properti <tt>Text</tt>. Untuk menyesuaikan ukuran bagian input, setel properti <tt>Width</tt> dan <tt>Height</tt> daripada <tt>Columns</tt> dan <tt>Rows</tt> karena keduanya tidak memiliki arti di bawah situasi ini. Untuk mematikan fitur WYSIWYG, setel <tt>EnableVisualEdit</tt> ke false.
-</p>
-
-<p id="330265" class="block-content">
-<tt>THtmlArea</tt> menyediakan fitur WYSIWYG dengan melapisi fungsionalitas yang disediakan oleh <a href="http://tinymce.moxiecode.com/">Proyek TinyMCE</a>.
-</p>
-
-<p id="330266" class="block-content">
-Editor standar hanya memberikan bar piranti dasar. Untuk mengubah atau menambah bar piranti lainnya, gunakan properti <tt>Options</tt> guna menambah opsi editor tambahan dengan setiap opsi pada baris baru. Lihat <a href="http://tinymce.moxiecode.com/tinymce/docs/index.html">TinyMCE website</a> untuk daftar opsi lebih lengkap. Contoh berikut menampilkan bar piranti spesifik untuk memanipulasi tabel HTML,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_330105">
-&lt;com:THtmlArea&gt;
- &lt;prop:Options&gt;
- plugins : "table"
- theme_advanced_buttons3 : "tablecontrols"
- &lt;/prop:Options&gt;
-&lt;/com:THtmlArea&gt;
-</com:TTextHighlighter>
-
-<p id="330267" class="block-content">
-Kemampuan mengedit secara visual sisi-klien didukung oleh Internet Explorer 5.0+ untuk Windows dan browser berbasis-Gecko. Jika browser tidak mendukung mengedit secara visual visual, area teks tradisional yang akan ditampilkan.
-</p>
-
-<pre>
- Windows XP MacOS X 10.4
-----------------------------------------------------
-MSIE 6 OK
-MSIE 5.5 SP2 OK
-MSIE 5.0 OK
-Mozilla 1.7.x OK OK
-Firefox 1.0.x OK OK
-Firefox 1.5b2 OK OK
-Safari 2.0 (412) OK(1)
-Opera 9 Preview 1 OK(1) OK(1)
-----------------------------------------------------
-(1) - sebagian bekerja
-----------------------------------------------------
-</pre>
-
-<com:RunBar PagePath="Controls.Samples.THtmlArea.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/HyperLink.page b/demos/quickstart/protected/pages/Controls/id/HyperLink.page
deleted file mode 100755
index 431a0e98..00000000
--- a/demos/quickstart/protected/pages/Controls/id/HyperLink.page
+++ /dev/null
@@ -1,11 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="2901">THyperLink</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.THyperLink" />
-
-<p id="340268" class="block-content">
-<tt>THyperLink</tt> menampilkan hiperlink pada halaman. URL hiperlink ditetapkan melalui properti <tt>NavigateUrl</tt>, dan teks link melalui properti <tt>Text</tt>. Target link ditetapkan melalui properti <tt>Target</tt>. Memungkinkan juga untuk menampilkan sebuah gambar dengan menyetel properti <tt>ImageUrl</tt>. Dalam hal ini, <tt>Text</tt> ditampilkan sebagai teks alternatif dari gambar. Jika <tt>ImageUrl</tt> dan <tt>Text</tt> keduanya kosong, konten ditutupi di dalam tag kontrol akan disajikan.
-</p>
-<com:RunBar PagePath="Controls.Samples.THyperLink.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/Image.page b/demos/quickstart/protected/pages/Controls/id/Image.page
deleted file mode 100755
index 4c811700..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Image.page
+++ /dev/null
@@ -1,11 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="3201">TImage</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TImage" />
-
-<p id="370273" class="block-content">
-<tt>TImage</tt> menampilkan gambar pada halaman. Gambar ditetapkan melalui properti <tt>ImageUrl</tt> yang mengambil URL absolut terhadap file gambar. Penjajaran gambar yang ditampilkan disetel oleh properti <tt>ImageAlign</tt>. Untuk menyetel teks alternatif atau penjelasan panjang atas gambar, gunakan masing-masing <tt>AlternateText</tt> atau <tt>DescriptionUrl</tt>.
-</p>
-<com:RunBar PagePath="Controls.Samples.TImage.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/ImageButton.page b/demos/quickstart/protected/pages/Controls/id/ImageButton.page
deleted file mode 100755
index 2dbf05ad..00000000
--- a/demos/quickstart/protected/pages/Controls/id/ImageButton.page
+++ /dev/null
@@ -1,11 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="3001">TImageButton</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TImageButton" />
-
-<p id="350269" class="block-content">
-<tt>TImageButton</tt> juga mirip dengan <tt>TButton</tt>, kecuali bahwa <tt>TImageButton</tt> menampilkan tombol sebagai sebuah gambar. Gambar ditetapkan melalui <tt>ImageUrl</tt>, dan teks alternatif ditetapkan oleh <tt>Text</tt>. Sebagai tambahan, dimungkinkan untuk mendapatkan informasi koordinat titik di mana gambar diklik. Informasi koordinat yang diisikan dalam parameter event <tt>OnClick</tt> (bukan <tt>OnCommand</tt>).
-</p>
-<com:RunBar PagePath="Controls.Samples.TImageButton.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/ImageMap.page b/demos/quickstart/protected/pages/Controls/id/ImageMap.page
deleted file mode 100755
index aa719459..00000000
--- a/demos/quickstart/protected/pages/Controls/id/ImageMap.page
+++ /dev/null
@@ -1,25 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="3101">TImageMap</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TImageMap" />
-
-<p id="360270" class="block-content">
-<tt>TImageMap</tt> Mewakili sebuah gambar pada halaman Web dengan bagian titik panas (hotspot) predefinisi yang dapat merespon secara berbeda saat pengguna mengkliknya. Tergantung pada <tt>HotSpotMode</tt> dari bagian hotspot, mengklik pada hotspot akan memicu postback atau mengendalikan URL yang ditetapkan.
-</p>
-<p id="360271" class="block-content">
-Setiap hotspot dijelaskan menggunakan obyek <tt>THotSpot</tt> dan dipelihara dalam koleksi <tt>HotSpots</tt> pada <tt>TImageMap</tt>. Sebuah hotspot dapat berupa lingkaran, persegi panjangn, poligon, dll.
-</p>
-<p id="360272" class="block-content">
-Hotspot dapat ditambahkan ke <tt>TImageMap</tt> melalui properti <tt>HotSpots</tt> atau dalam template seperti berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_360106">
-&lt;com:TImageMap ... &gt;
- &lt;com:TCircleHotSpot ... /&gt;
- &lt;com:TRectangleHotSpot ... /&gt;
- &lt;com:TPolygonHotSpot ... /&gt;
-&lt;/com:TImageMap&gt;
-</com:TTextHighlighter>
-
-<com:RunBar PagePath="Controls.Samples.TImageMap.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/InlineFrame.page b/demos/quickstart/protected/pages/Controls/id/InlineFrame.page
deleted file mode 100755
index 05ca12bb..00000000
--- a/demos/quickstart/protected/pages/Controls/id/InlineFrame.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="3301">TInlineFrame</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TInlineFrame" />
-
-<p id="380274" class="block-content">
-<tt>TInlineFrame</tt> menampilkan sebuah bingkai inline (&lt;iframe&gt;) pada halaman Web. Lokasi konten bingkai ditetapkan oleh properti <tt>FrameUrl</tt>.
-</p>
-<p id="380275" class="block-content">
-Penampilan <tt>TInlineFrame</tt> dapat dikustomisai dengan properti berikut, sebagai tambahan terhadap apa yang diturunkan dari <tt>TWebControl</tt>.
-</p>
-<ul id="u1" class="block-content">
- <li><tt>Align</tt> - penjajaran pada bingkai.</li>
- <li><tt>DescriptionUrl</tt> - URI dari penjelasan panjang pada konten bingkai.</li>
- <li><tt>MarginWidth</tt> dan <tt>MarginHeight</tt> - jumlah pixel masing-masing untuk digunakan sebagai batas kiri/kanan dan atas/bawah..</li>
- <li><tt>ScrollBars</tt> - apakah scrollbar disediakan untuk bingkai inline. Standarnya adalah <tt>Auto</tt>, berarti scroll bar muncul bila diperlukan. Menyetelnya sebagai <tt>None</tt> atau <tt>Both</tt> untuk secara eksplisit to menyembunyikan atau menampilkan scroll bars.</li>
-</ul>
-
-<p id="380276" class="block-content">
-Contoh berikut memperlihatkan <tt>TInlineFrame</tt> dengan setelan properti berbeda. Google homepage dipakai sebagai konten bingkai.
-</p>
-<com:RunBar PagePath="Controls.Samples.TInlineFrame.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/JavascriptLogger.page b/demos/quickstart/protected/pages/Controls/id/JavascriptLogger.page
deleted file mode 100755
index d68bd537..00000000
--- a/demos/quickstart/protected/pages/Controls/id/JavascriptLogger.page
+++ /dev/null
@@ -1,31 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="3401">TJavascriptLogger</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TJavascriptLogger" />
-
-<p id="390277" class="block-content">
-<tt>TJavascriptLogger</tt> menyediakan javascript pencatatan sisi-klien. Ini sebagian besar adalah pelapis dari Javascript yang dikembangkan di <a href="http://web.archive.org/web/20060512041505/gleepglop.com/javascripts/logger/">http://gleepglop.com/javascripts/logger/</a>.
-</p>
-
-<p id="390278" class="block-content">
-Untuk menggunakan <tt>TJavascriptLogger</tt>, cukup tempatkan tag komponen berikut pada template halaman.
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_390107">
-&lt;com:TJavascriptLogger /&gt;
-</com:TTextHighlighter>
-
-<p id="390279" class="block-content">
-Kemudian, Javascript sisi-klien dapat berisi pernyataan berikut. Ketika dieksekusi akan muncul dalam jendela pencatat.
-</p>
-<com:TTextHighlighter Language="js" CssClass="source block-content" id="code_390108">
-Logger.info('something happend');
-Logger.warn('A warning');
-Logger.error('This is an error');
-Logger.debug('debug information');
-</com:TTextHighlighter>
-
-<p id="390280" class="block-content">
-Untuk menghidup matikan penampakan pencatat dan konsol pada jendela browser, tekan ALT-D (atau CTRL-D pada OS X).
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/Keyboard.page b/demos/quickstart/protected/pages/Controls/id/Keyboard.page
deleted file mode 100755
index 6f26a871..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Keyboard.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<com:TContent ID="body" >
-
-<h1>TKeyboard</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TKeyboard" />
-
-<p>
-<tt>TKeyboard</tt> menampilkan keyboard virtual yang dapat diklik pengguna untuk memasukan input dalam kotak teks terkait. Ini membantu mengurangi hacking perekaman.
-</p>
-
-<p>
-Untuk menggunakan TKeyboard, tulis template seperti berikut:
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source">
-&lt;com:TTextBox ID="PasswordInput" />
-&lt;com:TKeyboard ForControl="PasswordInput" />
-</com:TTextHighlighter>
-
-<p>
-Kontrol TKeyboard dikaitkan dengan kontrol <tt>TTextBox</tt> dengan menetapkan
-<tt>ForControl</tt> menjadi ID dari kontrol tersebut. Ketika kotak teks dalam fokus, keyboard virtual akan muncull dan ketika kotak teks kehilangan fokus, keyboard akan sembunyi secara otomatis. Setel <tt>AutoHide</tt> ke false untuk membiarkan keyboard tetap tampil.
-</p>
-
-<p>
-Penampilan keyboard juga bisa diubah dengan menetapkan file CSS terkustomisasi melalui <tt>CssUrl</tt>. Standarnya nama kelas CSS untuk keyboard adalah 'Keyboard'. Ini juga bisa diubah dengan menetapkan <tt>KeyboardCssClass</tt>
-</p>
-
-<com:RunBar PagePath="Controls.Samples.TKeyboard.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/Label.page b/demos/quickstart/protected/pages/Controls/id/Label.page
deleted file mode 100755
index 45663510..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Label.page
+++ /dev/null
@@ -1,11 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="3501">TLabel</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TLabel" />
-
-<p id="400281" class="block-content">
-<tt>TLabel</tt> menampilkan teks pada halaman Web. Teks yang ditampilkan disetel melalui properti <tt>Text</tt>. Jika <tt>Text</tt> kosong, konten yang ditutupi dalam tag komponen <tt>TLabel</tt> akan ditampilkan. <tt>TLabel</tt> juga dapat dipakai sebagai label formulir yang terkait dengan beberapa kontrol pada formulir. Karena <tt>Text</tt> bukan HTML-dikodekan ketika disajikan, pastikan ia tidak berisi karakter berbahaya yang ingin anda hindari.
-</p>
-<com:RunBar PagePath="Controls.Samples.TLabel.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/LinkButton.page b/demos/quickstart/protected/pages/Controls/id/LinkButton.page
deleted file mode 100755
index 666efbd4..00000000
--- a/demos/quickstart/protected/pages/Controls/id/LinkButton.page
+++ /dev/null
@@ -1,11 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="3601">TLinkButton</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TLinkButton" />
-
-<p id="410282" class="block-content">
-<tt>TLinkButton</tt> mirip dengan <tt>TButton</tt> dalam setiap aspek kecuali bahwa <tt>TLinkButton</tt> ditampilkan sebagai hiperlink. Teks link ditentukan oleh properti <tt>Text</tt>. Jika properti <tt>Text</tt> kosong, maka konten tombol yang ditampilkan (oleh karenanya, anda bisa menutupi tag &lt;img&gt; di dalam badan tombol dan mendapatkan tombol gambar.
-</p>
-<com:RunBar PagePath="Controls.Samples.TLinkButton.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/List.page b/demos/quickstart/protected/pages/Controls/id/List.page
deleted file mode 100755
index 558c0d2c..00000000
--- a/demos/quickstart/protected/pages/Controls/id/List.page
+++ /dev/null
@@ -1,99 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="4801">Kontrol Daftar</h1>
-<p id="550329" class="block-content">
-Kontrol Daftar yang tercakup pada seksi ini semuanya diturunkan secara langsung atau tidak langsung dari <tt>TListControl</tt>. Oleh karena itu akan berbagi set properti yang sama dan umum dipakai, termasuk,
-</p>
-<ul id="u1" class="block-content">
-<li><tt>Items</tt> - daftar item dalam kontrol. Item adalah tipe <tt>TListItem</tt>. Daftar item bisa dipopulasikan melalui penyatuan data atau ditetapkan dalam template seperti berikut:
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_550115">
-&lt;com:TListBox&gt;
- &lt;com:TListItem Text="text 1" Value="value 1" /&gt;
- &lt;com:TListItem Text="text 2" Value="value 2" Selected="true" /&gt;
- &lt;com:TListItem Text="text 3" Value="value 3" /&gt;
-&lt;/com:TListBox&gt;
-</com:TTextHighlighter>
-</li>
-<li><tt>SelectedIndex</tt> - indeks berbasis-nol pada item yang dipilih dalam daftar item.</li>
-<li><tt>SelectedIndices</tt> - indeks dari semua item yang dipilih.</li>
-<li><tt>SelectedItem</tt> - item yang pertama dipilih dalam daftar item.</li>
-<li><tt>SelectedValue</tt> - nilai dari item pertama yang dipilih dalam daftar item.</li>
-<li><tt>AutoPostBack</tt> - apakah perubahan pilihan pada kontrol memicu postback atau tidak.</li>
-<li><tt>CausesValidation</tt> - apakah validasi harus dilakukan saat postback dipicu oleh kontrol daftar.</li>
-</ul>
-
-<p id="550330" class="block-content">
-Karena <tt>TListControl</tt> berasal dari <tt>TDataBoundControl</tt>, kontrol daftar ini juga berbagi operasi umum yang sama yang dikenal sebagai <tt>databinding</tt> atau penyatuan data. <tt>Items</tt> dapat dipopulasikan dari data yang sudah ada dan ditetapkan oleh <tt>DataSource</tt> atau <tt>DataSourceID</tt>. Fungsi yang memanggil <tt>dataBind()</tt> akan menyebabkan populasi data. Untuk kontrol daftar, data bisa ditetapkan dalam dua jenis format berikut:
-</p>
-<ul id="u2" class="block-content">
- <li>array satu-dimensi atau obyek yang mengimplementasikan <tt>ITraversable</tt> : kunci array akan dipakai sebagai nilai item daftar, dan nilai array akan dipakai sebagai teks item daftar. Sebagai contoh
-<com:TTextHighlighter CssClass="source block-content" id="code_550116">
-$listbox->DataSource=array(
- 'key 1'=>'item 1',
- 'key 2'=>'item 2',
- 'key 3'=>'item 3');
-$listbox->dataBind();
-</com:TTextHighlighter>
-</li>
- <li>data tabular (dua-dimensi): setiap baris mempopulasi satu item daftar. Nilai item daftar ditetapkan oleh anggota yang diindeks dengan <tt>DataValueField</tt>, dan teks item daftar dengan <tt>DataTextField</tt>. Sebagai contoh,
-<com:TTextHighlighter CssClass="source block-content" id="code_550117">
-$listbox->DataTextField='name';
-$listbox->DataValueField='id';
-$listbox->DataSource=array(
- array('id'=>'001','name'=>'John','age'=>31),
- array('id'=>'002','name'=>'Mary','age'=>30),
- array('id'=>'003','name'=>'Cary','age'=>20));
-$listbox->dataBind();
-</com:TTextHighlighter>
-</li>
-</ul>
-
-<h2 id="4802">TListBox</h2>
-<p id="550331" class="block-content">
-<tt>TListBox</tt> menampilkan kotak daftar yang membolehkan satu atau multipel pilihan. Setel properti <tt>SelectionMode</tt> sebagai <tt>Single</tt> untuk menjadikan kotak daftar pilihan tunggal, dan <tt>Multiple</tt> untuk kotak daftar pilihan multipel. Jumlah baris ditampilkan dalam kotak ditetapkan melalui nilai properti <tt>Rows</tt>.
-</p>
-<com:RunBar PagePath="Controls.Samples.TListBox.Home" />
-
-<h2 id="4803">TDropDownList</h2>
-<p id="550332" class="block-content">
-<tt>TDropDownList</tt> menampilkan kotak daftar dropdown yang membolehkan pengguna untuk memilih opsi tunggal dari beberapa yang telah ditetapkan.
-</p>
-<p class="block-content">
-Sejak v3.1.1, <tt>TDropDownList</tt> mulai mendukung teks pertanyaan (seperti 'Please select:' sebagai item list pertama). Untuk menggunakan fitur ini, setel baik <tt>PromptText</tt> ataupun <tt>PromptValue</tt>, atau keduanya. Jika pengguna memilih item pertanyaan, dropdown list tidak akan dipilih.
-</p>
-<com:RunBar PagePath="Controls.Samples.TDropDownList.Home" />
-
-<h2 id="4804">TCheckBoxList</h2>
-<p id="550333" class="block-content">
-<tt>TCheckBoxList</tt> menampilkan sebuah daftar kotak centang pada halaman Web. Penjajaran teks selain setiap kotak centang dapat ditetapkan dengan <tt>TextAlign</tt>. Tata letak kotak centang bisa dikontrol oleh properti berikut:
-</p>
-<ul id="u3" class="block-content">
- <li><tt>RepeatLayout</tt> - berupa <tt>Table</tt> atau <tt>Flow</tt>. <tt>Table</tt> menggunakan sel tabel HTML untuk mengatur kotak centang, sementara <tt>Flow</tt> mengunakan tag span dan break HTML untuk pengaturannya. Dengan tata letak <tt>Table</tt>, anda bisa menyetel <tt>CellPadding</tt> dan <tt>CellSpacing</tt>.</li>
- <li><tt>RepeatColumns</tt> - berapa banyak kolom kotak centang akan ditampilkan.</li>
- <li><tt>RepeatDirection</tt> - ke mana menjelajahi kotak centang, dalam cara horisontal (karena kotak centang ditampilkan dalam tata letak mirip-matriks).</li>
-</ul>
-
-<com:RunBar PagePath="Controls.Samples.TCheckBoxList.Home" />
-
-<h2 id="4805">TRadioButtonList</h2>
-<p id="550334" class="block-content">
-<tt>TRadioButtonList</tt> mirip dengan <tt>TCheckBoxList</tt> dalam setiap aspek kecuali bahwa setiap <tt>TRadioButtonList</tt> menampilkan sebuah grup tombol radio. Hanya satu tombol radio dapat dipilih, (<tt>TCheckBoxList</tt> membolehkan pilihan multipel).
-</p>
-<com:RunBar PagePath="Controls.Samples.TRadioButtonList.Home" />
-
-<h2 id="4806">TBulletedList</h2>
-<p id="550335" class="block-content">
-<tt>TBulletedList</tt> menampilkan item dalam format bulat pada halaman Web. Gaya bulat dapat ditetapkan dengan <tt>BulletStyle</tt>. Ketika gaya adalah <tt>CustomImage</tt>, tanda bulat ditampilkan sebagai gambar, yang ditetapkan dengan <tt>BulletImageUrl</tt>.
-</p>
-<p id="550336" class="block-content">
-<tt>TBulletedList</tt> menampilkan teks item dalam tiga mode berbeda,
-</p>
-<ul id="u4" class="block-content">
- <li><tt>Text</tt> - teks item ditampilkan sebagai teks statis;</li>
- <li><tt>HyperLink</tt> - setiap item ditampilkan sebagai hiperlink yang URL-nya diberikan oleh nilai item, dan properti <tt>Target</tt> bisa dipakai untuk menetapkan jendela browser;</li>
- <li><tt>LinkButton</tt> - setiap item ditampilkan sebagai tombol link yang melakukan posts back pada halaman jika pengguna mengkliknya, dan event <tt>OnClick</tt> akan dimunculkan di bawah keadaan demikian.</li>
-</ul>
-
-<com:RunBar PagePath="Controls.Samples.TBulletedList.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/Literal.page b/demos/quickstart/protected/pages/Controls/id/Literal.page
deleted file mode 100755
index 2cb07646..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Literal.page
+++ /dev/null
@@ -1,25 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="3701">TLiteral</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TLiteral" />
-
-<p id="420283" class="block-content">
-<tt>TLiteral</tt> menampilkan teks statis pada halaman Web. <tt>TLiteral</tt> mirip dengan kontrol <tt>TLabel</tt>, kecuali bahwa <tt>TLiteral</tt>
- * Kontrol tidak memiliki properti style, seperti <tt>BackColor</tt>, <tt>Font</tt>, dll.
-</p>
-
-<p id="420284" class="block-content">
-Teks yang ditampilkan oleh <tt>TLiteral</tt> bisa dikontrol secara programatis dengan menyetel properti <tt>Text</tt>. Teks yang ditampilkan mungkin HTML-dikodekan jika <tt>Encode</tt> adalah true (nilai standarnya false).
-</p>
-
-<p id="420285" class="block-content">
-<tt>TLiteral</tt> akan menyajikan konten yang dikurung dalam tag komponen jika <tt>Text</tt> kosong.
-</p>
-
-<p id="420286" class="block-content">
-Harap berhati-hati jika <tt>Encode</tt> adalah false, pastikan <tt>Text</tt> tidak berisi karakter yang tidak diinginkan yang dapat menjadikan keamanan mudah ditembus.
-</p>
-
-<com:RunBar PagePath="Controls.Samples.TLiteral.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/MultiView.page b/demos/quickstart/protected/pages/Controls/id/MultiView.page
deleted file mode 100755
index 677f4359..00000000
--- a/demos/quickstart/protected/pages/Controls/id/MultiView.page
+++ /dev/null
@@ -1,43 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="3801">TMultiView</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TMultiView" />
-
-<p id="430287" class="block-content">
-<tt>TMultiView</tt> bertindak sebagai penampung grup kontrol <tt>TView</tt>, yang dapat diambil oleh properti <tt>Views</tt>. Setiap tampilan berisi kontrol anak. <tt>TMultiView</tt> menentukan tampilan mana dan kontrol anaknya yang terlihat. Kapan saja hanya satu tampilan terlihat (disebut <i>aktif</i>). untuk mengaktifkan tampilan, setel <tt>ActiveView</tt> atau <tt>ActiveViewIndex</tt>. Catatan, standarnya tidak ada tampilan yang aktif.
-</p>
-<p id="430288" class="block-content">
-Untuk menambah tampilan ke <tt>TMultiView</tt>, manipulasi koleksi <tt>Views</tt> atau tambah ia dalam template seperti berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_430109">
-&lt;com:TMultiView&gt;
- &lt;com:TView&gt;
- view 1 content
- &lt;/com:TView&gt;
- &lt;com:TView&gt;
- view 2 content
- &lt;/com:TView&gt;
-&lt;/com:TMultiView&gt;
-</com:TTextHighlighter>
-
-<p id="430289" class="block-content">
-<tt>TMultiView</tt> merespon event perintah berikut untuk mengatur penampakan tampilannya.
-</p>
-<ul id="u1" class="block-content">
- <li><tt>NextView</tt> : beralih ke tampilan berikutnya (dengan memperhatikan tampilan aktif saat ini).
- <li><tt>PreviousView</tt> : beralih ke tampilan sebelumnya (dengan memperhatikan tampilan aktif saat ini).
- <li><tt>SwitchViewID</tt> : beralih ke tampilan sesuai path ID. Path ID diambil dari parameter perintah.
- <li><tt>SwitchViewIndex</tt> : beralih ke tampilan sesuai indeks berbasis-nol dalam koleksi <tt>Views</tt>. Indeks diambil dari parameter perintah.
-</ul>
-
-<p id="430290" class="block-content">
-Setelah postback, jika indeks tampilan aktif diubah, <tt>TMultiView</tt> akan memunculkan event <tt>OnActiveViewChanged</tt>.
-</p>
-
-<p id="430291" class="block-content">
-<a href="?page=Fundamentals.Samples.Hangman.Home">Permainan Hangman</a> adalah penggunaan umum dari <tt>TMultiView</tt>. Contoh berikut memperlihatkan kegunaan lain dari <tt>TMultiView</tt>.
-</p>
-
-<com:RunBar PagePath="Controls.Samples.TMultiView.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/NewControl.page b/demos/quickstart/protected/pages/Controls/id/NewControl.page
deleted file mode 100755
index 85c6eff0..00000000
--- a/demos/quickstart/protected/pages/Controls/id/NewControl.page
+++ /dev/null
@@ -1,152 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="5401">Menulis Kontrol Baru</h1>
-<p id="660428" class="block-content">
-Menulis kontrol baru sering diinginkan oleh para pemrogram tingkat lanjut, karena mereka ingin menggunakan ulang kode yang mereka tulis untuk menghadapi penyajian yang komples serta interaksi pengguna.
-</p>
-<p id="660429" class="block-content">
-Secara umum, ada dua cara penulisan kontrol baru: komposisi kontrol yang sudah ada dan memperluas kontrol yang sudah ada. Semuanya memerlukan kontrol baru tersebut berasal dari <tt>TControl</tt> atau kelas anaknya.
-</p>
-
-<h2 id="5402">Komposisi Kontrol yang Sudah Ada</h2>
-<p id="660430" class="block-content">
-Komposisi adalah cara termudah membuat kontrol baru. Ia melibatkan terutama penurunan kontrol yang sudah ada, mengkonfigurasinya dan menjadikannya unsur komponen. Properti dari unsur komponen diperlihatkan melalui <a href="?page=Fundamentals.Components1">subproperti</a>.
-</p>
-<p id="660431" class="block-content">
-Seseorang dapat menciptakan sebuah kontrol baru dalam dua cara. Pertama adalah memperluas <tt>TCompositeControl</tt> dan mengganti metode <tt>TControl::createChildControls()</tt>. Kedua adalah memperluas <tt>TTemplateControl</tt> (atau kelas anaknya) dan menulis template kontrol. Yang terakhir lebih mudah digunakan dan bisa mengatur tata letak unsur komponen lebih intuitif, sementara pembentuk lebih efisien karena ia tidak perlu menguraikan template.
-</p>
-<p id="660432" class="block-content">
-Sebagai contoh, kami memperlihatkan bagaimana untuk membuat kotak teks berlabel yang disebut <tt>LabeledTextBox</tt> menggunakan dua pendekatan di atas. Kotak teks berlabel menampilkan label disamping kotak teks. Kami ingin menggunakan ulang <tt>TLabel</tt> dan <tt>TTextBox</tt> yang disediakan PRADO untuk menyelesaikan tugas ini.
-</p>
-
-<h3 id="5404">Komposisi dengan Menulis Template</h3>
-<p id="660433" class="block-content">
-Kita memerlukan dua file: sebuah file kelas kontrol bernama <tt>LabeledTextBox.php</tt> dan file template kontrol bernama <tt>LabeledTextBox.tpl</tt>. Keduanya harus berada di bawah direktori yang sama.
-</p>
-<p id="660434" class="block-content">
-Seperti membuat halaman PRADO, kita dapat dengan mudah menuliskan konten dalam file template kontrol.
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_660129">
-&lt;com:TLabel ID="Label" ForControl="TextBox" /&gt;
-&lt;com:TTextBox ID="TextBox" /&gt;
-</com:TTextHighlighter>
-<p id="660435" class="block-content">
-Template di atas menetapkan kontrol <tt>TLabel</tt> bernama <tt>Label</tt> dan kontrol <tt>TTextBox</tt> bernama <tt>TextBox</tt>. Kita ingin memperlihatkan kedua kontrol ini. Ini bisa dikerjakan dengan mendefinisikan properti untuk masing-masing kontrol dalam file kelas <tt>LabeledTextBox</tt>. Sebagai contoh, kita dapat mendefinisikan proper <tt>Label</tt> seperti berikut,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_660130">
-class LabeledTextBox extends TTemplateControl {
- public function getLabel() {
- $this->ensureChildControls();
- return $this->getRegisteredObject('Label');
- }
-}
-</com:TTextHighlighter>
-<p id="660436" class="block-content">
-Dalam contoh di atas, metode memanggil <tt>ensureChildControls()</tt> memastikan bahwa kontrol label dan kotak teks sudah dibuat (dari template) ketika properti <tt>Label</tt> diakses. Properti <tt>TextBox</tt> dapat diimplementasikan dengan cara yang sama.
-</p>
-<com:RunBar PagePath="Controls.Samples.LabeledTextBox1.Home" />
-
-<h3 id="5405">Komposisi dengan Penggantian <tt>createChildControls()</tt></h3>
-<p id="660437" class="block-content">
-Untuk kontrol gabungan sesederhana <tt>LabeledTextBox</tt>, lebih baik membuatnya dengan memperluas <tt>TCompositeControl</tt> dan mengganti metode <tt>createChildControls()</tt>, karena ia tidak menggunakan template dan menghemat waktu penguraian template.
-</p>
-<p id="660438" class="block-content">
-Kode lengkap untuk <tt>LabeledTextBox</tt> ditampilkan sebagai berikut,
-</p>
-<com:TTextHighlighter CssClass="source block-content" id="code_660131">
-class LabeledTextBox extends TCompositeControl {
- private $_label;
- private $_textbox;
- public function createChildControls() {
- $this->_label=new TLabel;
- $this->_label->setID('Label');
- // tambah label sebagai anak dari LabeledTextBox
- $this->getControls()->add($this->_label);
- $this->_textbox=new TTextBox;
- $this->_textbox->setID('TextBox');
- $this->_label->setForControl('TextBox');
- // tambah textbox sebagai anak dari LabeledTextBox
- $this->getControls()->add($this->_textbox);
- }
- public function getLabel() {
- $this->ensureChildControls();
- return $this->_label;
- }
- public function getTextBox() {
- $this->ensureChildControls();
- return $this->_textbox;
- }
-}
-</com:TTextHighlighter>
-<com:RunBar PagePath="Controls.Samples.LabeledTextBox2.Home" />
-
-<h3 id="5406">Menggunakan <tt>LabeledTextBox</tt></h3>
-<p id="660439" class="block-content">
-Untuk menggunakan kontrol <tt>LabeledTextBox</tt>, pertama kita perlu menyertakan file kelas terkait. Kemudian dalam template halaman, kita dapat menuliskan baris seperti berikut,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_660132">
-&lt;com:LabeledTextBox ID="Input" Label.Text="Username" /&gt;
-</com:TTextHighlighter>
-<p id="660440" class="block-content">
-Dalam contoh di atas, <tt>Label.Text</tt> adalah subproperti dari <tt>LabeledTextBox</tt>, yang merujuk ke properti <tt>Text</tt> dari properti <tt>Label</tt>. Untuk lebih jelasnya atas pemakaian <tt>LabeledTextBox</tt>, lihat contoh online di atas.
-</p>
-
-<h2 id="5403">Memperluas Kontrol yang Sudah Ada</h2>
-<p id="660441" class="block-content">
-Memperluas kontrol yang sudah ada sama seperti penurunan kelas konvensional. Ia membolehkan para pengembang untuk mengkustomisasi kelas kontrol yang sudah ada dengan mengganti propertinya, metodenya, event, atau membuat yang baru.
-</p>
-<p id="660442" class="block-content">
-Kesulitan tugas tergantung pada seberapa banyak kelas yang sudah ada dikustomisasi. Sebagai contoh, tugas sederhana bisa mengkustomisasi kontrol <tt>TLabel</tt>, agar ia menampilkan label merah sercara standarnya. Ini akan melibatkan setelan properti <tt>ForeColor</tt> ke <tt>"red"</tt> dalam konstruktornya. Tugas yang sulit adalah membuat kontrol yang menyediakan fungsional inovatif secara lengkap. Biasanya, ini memerlukan perluasan kontrol dari kelas kontrol "tingkat rendah", seperti misalnya <tt>TControl</tt> atau <tt>TWebControl</tt>.
-</p>
-<p id="660443" class="block-content">
-Dalam bagian ini, sebagian besar kami memperkenalkan basis kelas kontrol <tt>TControl</tt> dan <tt>TWebControl</tt>, memperlihatkan bagaimana mereka bisa dikustomisasi. Kami juga memperkenalkan bagaimana untuk menulis kontrol dengan fungsionalitas khusus, seperti mengambil data post, memunculkan data post dan penyatuan data dengan sumber data.
-</p>
-
-<h3 id="5407">Memperluas <tt>TControl</tt></h3>
-<p id="660444" class="block-content">
-<tt>TControl</tt> adalah basis kelas dari semua kelas kontrol. Dua metode adalah yang paling penting untuk kelas kontrol turunannya:
-</p>
-<ul id="u1" class="block-content">
- <li><tt>addParsedObject()</tt> - metode ini diminta oleh setiap komponen ata string teks yang dikurung di dalam tag komponen yang menetapkan kontrol dalam sebuah template. Standarnya, komponen dan string teks yang dikurung ditambahkan ke dalam koleksi <tt>Controls</tt> dari kontrol. Kontrol turunannya dapat mengganti metode ini untuk melakukan proses khusus mengenai konten yang dikurung tersebut. Sebagai contoh, <tt>TListControl</tt> hanya menerima komponen <tt>TListItem</tt> dikurung di dalam tag komponennya, dan komponen ini ditambahkan ke koleksi <tt>Items</tt> dari <tt>TListControl</tt>.
- <li><tt>render()</tt> - metode ini menyajikan kontrol. Standarnya menyajikan item-item dalam koleksi <tt>Controls</tt>. Kontrol turunannya dapat mengganti metode ini guna memberikan penyajian yang dikustomisasi.</li>
-</ul>
-Properti dan metode penting lainnya termasuk:
-<ul id="u2" class="block-content">
- <li><tt>ID</tt> - string yang secara unik mengidentifikasi kontrol diantara semua kontrol dari tempat penamaan yang sama. ID otomatis akan dibuat jika properti ID tidak disetel secara eksplisit.</li>
- <li><tt>UnqiueID</tt> - ID unik lengkap yang mengidentifikasi kontrol diantara semua kontrol pada hirarki halaman saat ini. Ia dapat digunakan untuk mencari kontrol dalam hirarki halaman dengan memanggil metode <tt>TControl::findControl()</tt>. Kontrol input pengguna sering memakainya sebagai nilai dari atribut yang sama dari elemen input HTML.</li>
- <li><tt>ClientID</tt> - mirip dengan <tt>UniqueID</tt>, kecuali bahwa ia dipakai terutama untuk penyajian dan umumnya digunakan sebagai nilai atribut id elemen HTML. Jangan bergantung pada format eksplisit <tt>ClientID</tt>.</li>
- <li><tt>Enabled</tt> - apakah kontrol ini dihidupkan atau tidak. Catatan, dalam beberapa kasus, jika salah satu kontrol leluhurnya dimatikan, kontrol juga diperlakukan sebagai dimatikan, meskipun properti <tt>Enabled</tt> adalah true.</li>
- <li><tt>Parent</tt> - kontrol leluhur dari kontrol ini. Kontrol leluhur memegang kendali apakah menyajikan kontrol ini atau tidak dan di mana menempatkan hasil yang disajikan.</li>
- <li><tt>Page</tt> - halaman yang berisi kontrol ini.</li>
- <li><tt>Controls</tt> - koleksi dari semua kontrol anak, termasuk teks statis diantaranya. Ia dapat dipakai seperti sebuah array, karena ia mengimplementasikan antarmuka <tt>Traversable</tt>. Untuk menambah anak ke kontrol, cukup sisipkan ia ke dalam koleksi <tt>Controls</tt> di posisi yang sesuai.</li>
- <li><tt>Attributes</tt> - koleksi dari atribut kustom. Ini berguna untuk membolehkan para pengguna untuk menetapkan atribut dari elemen output HTML yang tidak tercakup oleh properti kontrol.</li>
- <li><tt>getViewState()</tt> dan <tt>setViewState()</tt> - metode ini umum dipakai untuk mendefinisikan properti yang disimpan dalam kondisi tampilan.</li>
- <li><tt>saveState()</tt> dan <tt>loadState()</tt> - kedua metode ini bisa diganti untuk menyediakan langkah terakhir kondisi penyimpanan dan pengambilan.</li>
- <li>Control lifecycles - Seperti halaman, kontrol juga mempunyai masa hidup. Setiap kontrol menjalani masa hidupnya dalam urutan berikut: constructor, <tt>onInit()</tt>, <tt>onLoad()</tt>, <tt>onPreRender()</tt>, <tt>render()</tt>, dan <tt>onUnload</tt>. Lebih jelasnya dapat ditemukan dalam seksi <a href="?page=Fundamentals.Pages">halaman</a>.</li>
-</ul>
-
-<h3 id="5408">Memperluas <tt>TWebControl</tt></h3>
-<p id="660445" class="block-content">
-<tt>TWebControl</tt> dipakai terutama sebagai basis kelas untuk kontrol yang menyajikan elemen HTML. Ia menyediakan satu set properti yang umum diantara elemen HTML. Ia memisahkan <tt>TControl::render()</tt> ke dalam metode berikut yang lebih cocok untuk menyajikan elemen HTML:
-</p>
-<ul id="u3" class="block-content">
- <li><tt>addAttributesToRender()</tt> - menambah atribut untuk elemen HTML yang disajikan. Metode ini sering diganti dengan kelas tutunannya karena biasanya memiliki atribut berbeda yang disajikan.</li>
- <li><tt>renderBeginTag()</tt> - menyajikan tag HTML pembuka.</li>
- <li><tt>renderContents()</tt> - menyajikan konten dikurung di dalam elemen HTML. Standarnya menampilkan item-item dalam koleksi <tt>Controls</tt> daru kontrol. kelas turunannya dapat mengganti metode ini guna menyajikan konten yang dikustomisasi.</li>
- <li><tt>renderEndTag()</tt> - menyajikan tag HTML penutup.</li>
-</ul>
-<p id="660446" class="block-content">
-Ketika menyajikan tag HTML pembuka, <tt>TWebControl</tt> memanggil <tt>getTagName()</tt> untuk mendapatkan nama tag. kelas turunannya dapat mengganti metode ini guna menyajikan nama tag yang berbeda.
-</p>
-
-<h3 id="5409">Membuat Kontrol dengan Fungsional Khusus</h3>
-<p id="660447" class="block-content">
-Jika sebuah kontrol ingin merespon event sisi-klien dan menterjemahkannya ke dalam event sisi server (disebut event postback), seperti <tt>TButton</tt>, ia harus mengimplementasikan antarmuka <tt>IPostBackEventHandler</tt>.
-</p>
-<p id="660448" class="block-content">
-Jika kontrol ingin bisa mengambil data post, seperti <tt>TTextBox</tt>, ia harus mengimplementasikan antarmuka <tt>IPostBackDataHandler</tt>.
-</p>
-<p id="660449" class="block-content">
-Jika kontrol ingin mendapatkan data dari beberapa sumber data eksternal, ia harus memperluas <tt>TDataBoundControl</tt>. <tt>TDataBoundControl</tt> mengimplementasikan properti dasar yang diperlukan untuk mempopulasi data melalui databinding. Kenyataanya, kontrol seperti <tt>TListControl</tt>, <tt>TRepeater</tt> adalah <tt>TDataGrid</tt> semua berasal darinya.
-</p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/OutputCache.page b/demos/quickstart/protected/pages/Controls/id/OutputCache.page
deleted file mode 100755
index 0a605a92..00000000
--- a/demos/quickstart/protected/pages/Controls/id/OutputCache.page
+++ /dev/null
@@ -1,46 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="88025">TOutputCache</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TOutputCache" />
-
-<p id="440292" class="block-content">
-<tt>TOutputCache</tt> menghidupkan cache sebagian dari halaman Web, juga dikenal sebagai partial caching. Konten yang sedang di-cache adalah sumber halaman HTML yang berasal dari teks statis pada template PRADO atau disajikan oleh satu atau beberapa kontrol pada template. Ketika konten yang di-cache dipakai, kontrol yang membuat konten tidak lagi dibuat untuk hirarki halaman dan selanjutnya penghematan secara signifikan waktu pemrosesan halaman dapat dicapai. Efek sampingnya, seperti yang sudah anda bayangkan adalah bahwa konten yang ditampilkan mungkin membosankan jika versi cache ditampilkan ke para pengguna.
-</p>
-
-<p id="440293" class="block-content">
-Untuk menggunakan <tt>TOutputCache</tt>, cukup kurung konten yang akan di-cache di dalam tag komponen <tt>TOutputCache</tt> pada template (baik template kontrol halaman ataupun non-halaman), misalnya
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_440110">
-&lt;com:TOutputCache&gt;
- content to be cached
-&lt;/com:TOutputCache&gt;
-</com:TTextHighlighter>
-<p id="440294" class="block-content">
-di mana konten yang di-cache bisa berupa teks statis dan/atau tag template. Jika yang kedua, hasil penyajian dari tag template akan di-cache. Anda dapat menempatkan satu atau beberapa <tt>TOutputCache</tt> pada satu template dan ia dapat diulang-ulang.
-</p>
-
-<div class="note"><b class="tip">Note:</b>
-<tt>TOutputCache</tt> menyimpan konten yang di-cache melalui modul cache PRADO (misalnya <tt>TSqliteCache</tt>) dan selanjutnya memerlukan setidaknya satu modul cache diambil saat aplikasi dijalankan.
-</div>
-
-<p id="440295" class="block-content">
-Validitas dari konten yang di-cache ditentukan berdasarkan dua faktor: <tt>Durasi</tt> dan ketergantungan cache. Pembentuk menetapkan jumlah detik data bisa tetap benar dalam cache (standarnya 60 detik), sementara yang kedua menetapkan kondisi data yang di-cache tergantung padanya. Jika ketergantungan berubah (misalnya data relevan dalam DB dimutakhirkan), data yang di-cache akan dibuat tidak benar dan diabaikan.
-</p>
-
-<p id="440296" class="block-content">
-Ada dua cara untuk menetapkan ketergantungan cache. Seseorang bisa menulis pengendali event guna merespon event <tt>OnCheckDependency</tt> dan menyetel properti parameter event <tt>IsValid</tt> untuk menunjukan apakah data yang di-cache tetap benar atau tidak. Seseorang juga bisa memperluas <tt>TOutputCache</tt> dan mengganti metode <tt>getCacheDependency()</tt>-nya.
-</p>
-
-<p id="440297" class="block-content">
-Konten yang diambil dari cache dapat bervariasi dengan memperhatikan beberapa parameter. <tt>TOutputCache</tt> mendukung variasi dengan memperhatikan parameter permintaan, yang ditetapkan oleh properti <tt>VaryByParam</tt>. Jika parameter permintaan yang ditetapkan berbeda, versi berbeda dari konten yang di-cache dipakai. Ini sangat berguna jika konten halaman mungkin divariasikan berdasarkan beberapa parameter GET. Konten yang sedang di-cache juga dapat divariasikan dengan sesi pengguna jika <tt>VaryBySession</tt> disetel true. Untuk memvariasikan konten yang di-cache oleh faktor lain, ganti metode <tt>calculateCacheKey()</tt>.
-</p>
-
-<p id="440298" class="block-content">
-Output cache bisa diulang. Cache terluar mengambil lebih dulu di atas cache terdalam dalam menentukan kebenaran konten yang di-cache. Ini berarti, jika konten yang di-cache oleh cache terdalam berakhir atau dibuat tidak benar, sementara yang terluar tidak, maka konten terluar yang di-cache akan dipakai.
-</p>
-
-<p id="440299" class="block-content">
-Standarnya, <tt>TOutputCache</tt> hanya efektif untuk permintaan halaman non-postback dan saat modul cache dihidupkan. Jangan mencoba untuk mengalamatkan kontrol anak pada <tt>TOutputCache</tt> saat konten yang di-cache saat ini sedang dipakai. Gunakan properti <tt>ContentCached</tt> untuk menentukan apakah konten di-cache atau tidak.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/Pager.page b/demos/quickstart/protected/pages/Controls/id/Pager.page
deleted file mode 100755
index 1761e61c..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Pager.page
+++ /dev/null
@@ -1,38 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="3901">TPager</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TPager" />
-
-<p id="450300" class="block-content">
-<tt>TPager</tt> membuat sebuah lembaran yang menyediakan UI bagi pengguna akhir untuk secara interaktif menetapkan halaman data mana yang disajikan dalam kontrol turunan-<tt>TDataBoundControl</tt>, seperti <tt>TDataList</tt>, <tt>TRepeater</tt>, <tt>TCheckBoxList</tt>, dll. Kontrol data-terikat sasaran ditetapkan dengan properti <tt>ControlToPaginate</tt>, yang harus berupa path ID dari kontrol sasaran yang dijangkau dari tempat penamaan lembar.
-</p>
-
-<p id="450301" class="block-content">
-Note, the target data-bound control must have its <tt>AllowPaging</tt> set to true. Otherwise the pager will be invisible. Also, in case when there is only one page of data available, the pager will also be invisible.
-</p>
-
-<p id="450302" class="block-content">
-<tt>TPager</tt> dapat menampilkan salah satu dari tiga tipe antarmuka pengguna, ditetapkan melalui properti <tt>Mode</tt>-nya:
-</p>
-<ul id="u1" class="block-content">
-<li><tt>NextPrev</tt> - tombol halaman berikutnya dan sebelumnya yang disajikan pada setiap halaman.</li>
-<li><tt>Numeric</tt> - daftar tombol indeks halaman yang disajikan.</li>
-<li><tt>DropDownList</tt> - daftar dropdown pada indeks halaman yang disajikan.</li>
-</ul>
-<p id="450303" class="block-content">
-Antarmuka pengguna ini selanjutnya dapat dikustomisasi dengan mengkonfigurasi properti berikut
-</p>
-<ul id="u2" class="block-content">
-<li><tt>NextPageText</tt> dan <tt>PrevPageText</tt> - label dari tombol halaman berikutnya/sebelumnya. Properti ini dipakai ketika <tt>Mode</tt> lembar adalah <tt>NextPrev</tt> atau <tt>Numeric</tt>.</li>
-<li><tt>FirstPageText</tt> dan <tt>LastPageText</tt> - label dari tombol halaman pertama/terakhir. Jika kosong, tombol terkait tidak akan ditampilkan. Properti ini dipakai ketika <tt>Mode</tt> lembar adalah <tt>NextPrev</tt> atau <tt>Numeric</tt>.</li>
-<li><tt>PageButtonCount</tt> - jumlah maksimum tombol indeks halaman pada sebuah halaman. Properti ini dipakai saat <tt>Mode</tt> lembar adalah <tt>Numeric</tt>.</li>
-<li><tt>ButtonType</tt> - tipe tombol halaman, <tt>PushButton</tt> berarti tombol submisi normal, atau <tt>LinkButton</tt> berarti tombol hiperlink.</li>
-</ul>
-
-<p id="450304" class="block-content">
-<tt>TPager</tt> memunculkan event <tt>OnPageIndexChanged</tt> ketika pengguna-akhir berinteraksi dengannya dan menetapkan halaman baru (misalnya dengan mengklik pada tombol halaman berikutnya yang akan membawa ke halaman berikutnya). Para pengembang dapat menulis pengendali untuk merspon event ini dan medapatkan indeks halaman baru yang diinginkan, seseorang bisa memasukan halaman baru data ke kontrol ikatan-data terkait.
-</p>
-
-<com:RunBar PagePath="Controls.Samples.TPager.Sample1" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/Panel.page b/demos/quickstart/protected/pages/Controls/id/Panel.page
deleted file mode 100755
index 1152f65f..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Panel.page
+++ /dev/null
@@ -1,11 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="3901">TPanel</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TPanel" />
-
-<p id="460305" class="block-content">
-<tt>TPanel</tt> bertindak sebagai tempat penyajian untuk kontrol lain. Ia menampilkan elemen &lt;div&gt; pada halaman. Properti <tt>Wrap</tt> menetapkan konten badan panel yang menggulung ataupun tidak, sementara <tt>HorizontalAlign</tt> mengatur bagaimana konten dijajarkan secara horisontal dan <tt>Direction</tt> menunjukan arah konten (kiri ke kanan atau kanan ke kiri). Anda dapat menyetel <tt>BackImageUrl</tt> untuk memberikan gambar latar belakang pada panel, dan dana bisa menyetel <tt>GroupingText</tt> agar panel ditampilkan sebagai set field dengan legenda teks. Terakhir, anda bisa menetapkan tombol standar untuk dipicu saat para pengguna menekan tombol 'return' di dalam panel dengan menyetel properti <tt>DefaultButton</tt>.
-</p>
-<com:RunBar PagePath="Controls.Samples.TPanel.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/PlaceHolder.page b/demos/quickstart/protected/pages/Controls/id/PlaceHolder.page
deleted file mode 100755
index fc269291..00000000
--- a/demos/quickstart/protected/pages/Controls/id/PlaceHolder.page
+++ /dev/null
@@ -1,12 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="4001">TPlaceHolder</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TPlaceHolder" />
-
-<p id="470306" class="block-content">
-<tt>TPlaceHolder</tt> menyimpan tempat pada template, di mana teks statis atau kontrol dapat disisipkan secara dinamis.
-</p>
-
-<com:RunBar PagePath="Controls.Samples.TPlaceHolder.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/RadioButton.page b/demos/quickstart/protected/pages/Controls/id/RadioButton.page
deleted file mode 100755
index e9ff5cc7..00000000
--- a/demos/quickstart/protected/pages/Controls/id/RadioButton.page
+++ /dev/null
@@ -1,11 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="4101">TRadioButton</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TRadioButton" />
-
-<p id="480307" class="block-content">
-<tt>TRadioButton</tt> mirip dengan <tt>TCheckBox</tt> dalam setiap aspek, kecuali bahwa <tt>TRadioButton</tt> menampilkan tombol radio pada halaman Web. Tombol radio dapat dimiliki oleh grup yang ditetapkan oleh <tt>GroupName</tt> dengan demikian hanya satu tombol radio yang bisa dipilih.
-</p>
-<com:RunBar PagePath="Controls.Samples.TRadioButton.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/Repeater.page b/demos/quickstart/protected/pages/Controls/id/Repeater.page
deleted file mode 100755
index 801ef858..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Repeater.page
+++ /dev/null
@@ -1,111 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="5301">TRepeater</h1>
-
-<p id="600400" class="block-content">
-TRepeater menampilkan kontennya secara berulang berdasarkan data yang diambil dari <tt>DataSource</tt>. Konten yang diulang dalam TRepeater disebut <i>items</i> sebuah kontrol yang dapat diakses melalui properti <tt>Items</tt>. Ketika <tt>dataBind()</tt> dipanggil, TRepeater membuat sebuah item untuk setiap baris data dan mengikat baris data ke item. Secara opsional, TDataList dapat mempunyai header, footer dan/atau pemisah antara item.
-</p>
-
-<p id="600401" class="block-content">
-Tata letak dari konten yang diulang dalam TDataList ditetapkan dengan template inline. Item TDataList, header, footer, dll. diturunkan dengan template terkait saat data sedang diikat ke pengulang.
-</p>
-
-<p id="600402" class="block-content">
-Sejak v3.1.0, tata letak juga bisa dietapkan oleh <i>penyaji</i>. Penyaji adalah kelas kontrol yang dapat diturunkan sebagai item datalist, header, dll. Penyaji dapat dilihat sebagai template eksternal (sebenarnya, ia juga merupakan kontrol tanpa-template). Penyaji bisa berupa kelas kontrol apapun. Dengan menggunakan penyaji, seseorang dapat menghindari penulisan panjang dan template yang kacau. Karena penyaji adalah sebuah kelas, ia juga membantu menggunakan kembali template yang sebelumnya mungkin disertekan di dalam template lain. Jika diimplementasikan dengan salah satu antarmuka berikut, penyaji akan diinisialisasi dengan properti tambahan yang relevan terhadap item penyaji:
-</p>
-
-<ul id="u1" class="block-content">
-<li><tt>IDataRenderer</tt> - properti <tt>Data</tt> akan disetel sebagai baris dari data terikat ke item penyaji. Banyak kontrol PRADO mengimplementasikan antarmuka ini, seperti <tt>TLabel</tt>, <tt>TTextBox</tt>, dll.</li>
-<li><tt>IItemDataRenderer</tt> - properti <tt>ItemIndex</tt> akan disetel sebagai indeks berbasis-nol pada item dalam koleksi item penyaji, dan properti <tt>ItemType</tt> sebagai tipe item (seperti <tt>TListItemType::Item</tt>). Untuk kenyamanan basis kelas, <tt>TRepeaterItemRenderer</tt> mengimplementasikan <tt>IDataItemRenderer</tt> dan dapat mempunyai template terkait karena diperluas dari <tt>TTemplateControl</tt>.</li>
-</ul>
-
-
-<p id="600403" class="block-content">
-Properti berikut dipakai untuk menetapkan tipe template dan penyaji datalist. Jika tipe konten didefinisikan dengan template dan penyaji, maka penyaji diambil lebih dulu.
-</p>
-<ul id="u2" class="block-content">
-<li><tt>ItemTemplate</tt>, <tt>ItemRenderer</tt> - untuk setiap baris data yang diulang.</li>
-<li><tt>AlternatingItemTemplate</tt>, <tt>AlternatingItemRenderer</tt>: untuk setiap pergantian baris data. Jika tidak disetel, masing-masing <tt>ItemTemplate</tt> atau <tt>ItemRenderer</tt> yang akan dipakai.</li>
-<li><tt>HeaderTemplate</tt>, <tt>HeaderRenderer</tt> - untuk header repeater.</li>
-<li><tt>FooterTemplate</tt>, <tt>FooterRenderer</tt> - untuk footer repeater.</li>
-<li><tt>SeparatorTemplate</tt>, <tt>SeparatorRenderer</tt> - untuk konten yang ditampilkan diantara item.</li>
-<li><tt>EmptyTemplate</tt>, <tt>EmptyRenderer</tt> - dipakai saat data yang terikat ke penyaji kosong.</li>
-</ul>
-
-
-<p id="600404" class="block-content">
-Untuk mempopulasikan data ke dalam item pengulag, setel <tt>DataSource</tt> ke obyek data yang benar, seperti array, <tt>TList</tt>, <tt>TMap</tt>, atau tabel database, dan kemudian panggil <tt>dataBind()</tt> untuk pengulang. Yaitu,
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_600125">
-class MyPage extends TPage {
- public function onLoad($param) {
- parent::onLoad($param);
- if(!$this->IsPostBack) {
- $this->Repeater->DataSource=$data;
- $this->Repeater->dataBind();
- }
- }
-}
-</com:TTextHighlighter>
-
-<p id="600405" class="block-content">
-Ketika <tt>dataBind()</tt> dipanggil, TRepeater menjalani masa hidup seperti berikut untuk setiap baris data:
-</p>
-
-<ol id="u3" class="block-content">
-<li>buat item berdasarkan template atau penyaji</li>
-<li>setel baris data ke item</li>
-<li>munculkan event <tt>OnItemCreated</tt></li>
-<li>tambah item sebagai kontrol anak</li>
-<li>panggil <tt>dataBind()</tt> pada item</li>
-<li>munculkan event <tt>OnItemDataBound</tt></li>
-</ol>
-
-<p id="600406" class="block-content">
-Biasanya anda hanya perlu mengikat data ke pengulang saat halaman yang berisi pengulang mulai diminta. Ketika halaman adalah post back, pengulang akan mengembalikan secara otomatis seluruh konten, termasuk item, header, footer dan pemisah. Akan tetapi, baris data yang terkait dengan setiap item tidak akan ditemukan kembali dan menjadi null.
-</p>
-
-<p id="600407" class="block-content">
-Untuk mengakses data item pengulang dalam postbacks, gunakan salah satu cara berikut:
-</p>
-<ul id="u4" class="block-content">
-<li>Gunakan <tt>DataKeys</tt> untuk memperoleh kunci data terkait dengan item pengulang (repeater) yang ditetapkan dan gunakan kunci untuk mengambil data terkait dari beberapa penyimpanan persisten seperti misalnya DB. </li>
-<li>Simpan seluruh dataset dalam kondisi tampilan, yang akan mengembalikan dataset secara otomatis setelah postback. Bagaimanapun juga, harap berhati-hati jika ukuran dataset anda besar, ukuran halaman akan menjadi besar. Beberapa data kompleks mungkin juga mempunyai masalah serialisasi jika disimpan dalam kondisi tampilan.</li>
-</ul>
-
-
-<p id="600408" class="block-content">
-TRepeater memunculkan <tt>OnItemCommand</tt> kapan saja kontrol tombol di dalam beberapa item pengulang memunculkan event <tt>OnCommand</tt>. Oleh karena itu, anda bisa menangani semua event <tt>OnCommand</tt> di satu tempat dengan menulis pengendali event untuk event <tt>OnItemCommand</tt>.
-</p>
-
-<p id="600409" class="block-content">
-Contoh berikut memperlihatkan bagaimana menggunakan TRepeater guna menampilkan data tabular.
-</p>
-<com:RunBar PagePath="Controls.Samples.TRepeater.Sample1" />
-<p id="600410" class="block-content">
-TRepeater Dapat digunakan dalam situasi lebih kompleks. Sebagai contoh, kami tampilkan dalam contoh berikut bagaimana menggunakan pengulang yang diulang-ulang, misalnya pengulang dalam pengulang. Ini umum terlihat dalam penyajian data master-detail. Untuk menggunakan pengulang di dalam pengulang lain, untuk sebuah item untuk pengulang di luarnya dibuat, kita perlu menyetel sumber data detail untuk pengulang terdalam. Ini bisa dilakukan dengan merespon ke event <tt>OnItemDataBound</tt> pada pengulang terluar. Event <tt>OnItemDataBound</tt> dimunculkan setiap kali item pengulang terluar menyelesaikan penyatuan data. Dalam contoh berikut, kita mengeksploitasi event lain pada pengulang yang disebut <tt>OnItemCreated</tt>, yang dimunculkan setiap kali item pengulang (dan kontennya) baru saja dibuat. Kita respon ke event ini dengan menyetel warna latar belakang berbeda untuk item pengulang guna menyempurnakan tampilan latar belakang item berganti. Ini menghemat kita dari penulisan <tt>AlternatingItemTemplate</tt> untuk pengulang.
-</p>
-<com:RunBar PagePath="Controls.Samples.TRepeater.Sample2" />
-<p id="600411" class="block-content">
-Selain menampilkan data, TRepeater juga bisa dipakai untuk mengumpulkan data dari pengguna. Kontrol validasi dapat ditempatkan dalam template TRepeater guna memberifikasi bahwa input pengguna sudah benar.
-</p>
-<p id="600412" class="block-content">
-Demo <a href="../composer/index.php">Penyusun komponen PRADO</a> adalah contoh yang baik atas penggunaan tersebut. Ia menggunakan pengulang untuk mengumpulkan properti komponen dan definisi event. Para pengguna juga dapat menghapus atau menyesuaikan event dan propertinya, yang diimplementasikan dengan merespon ke event <tt>OnItemCommand</tt> pada pengulang.
-</p>
-<p id="600413" class="block-content">
-Lihat dalam contoh lain berikut yang memperlihatkan bagaimana menggunakan pengulang untuk mengumpulkan input pengguna.
-</p>
-<com:RunBar PagePath="Controls.Samples.TRepeater.Sample3" />
-
-<p id="600414" class="block-content">
-Contoh ini memperlihatkan bagaimana menggunakan penyaji item "drop-in", tersedia sejak v3.1.0. Penyaji ini ada dalam rilis PRADO. Mereka intinya kontrol yang mengimplementasikan antarmuka <tt>IDataRenderer</tt>. Kontrol Web umum, seperti <tt>TTextBox</tt>, <tt>TLabel</tt>, semuanya mengimplementasikan antarmuka ini. Ketika kontrol tersebut adalah penyaji item yang dipakai, properti <tt>Data</tt> ditempati dengan baris data yang sedang diikat ke item pengulang.
-</p>
-<com:RunBar PagePath="Controls.Samples.TRepeater.Sample4" />
-
-<p id="600415" class="block-content">
-Lebih sering, seseorang perlu mengkustomisasi tata letak item pengulang. Contoh di atas bergantng pada <tt>OnItemCreated</tt> untuk menyesuaikan penampilan pengulang. Pengulang item template lebih disukai dalam situasi ini, karena membolehkan kita untuk menyimpan tata letak dan konten yang lebih kompleks dalam sebuah item pengulang. Contoh berikut mengimplementasikan ulang contoh pengulang yang diulang-ulang menggunakan template item penyadi yang disebut <tt>RegionDisplay</tt>. seperti kita lihat, kode baru lebih mudah dimengerti dan dipelihara.
-</p>
-<com:RunBar PagePath="Controls.Samples.TRepeater.Sample5" />
-
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/SafeHtml.page b/demos/quickstart/protected/pages/Controls/id/SafeHtml.page
deleted file mode 100755
index 6b3257f1..00000000
--- a/demos/quickstart/protected/pages/Controls/id/SafeHtml.page
+++ /dev/null
@@ -1,25 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="4201">TSafeHtml</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TSafeHtml" />
-
-<p id="490308" class="block-content">
-<tt>TSafeHtml</tt> adalah kontrol yang membuang semua konten HTML yang berpotensi membahayakan. Ini terutama sebagai pelapis dari proyek <a href="http://pixel-apes.com/safehtml/">SafeHTML</a>. Menurut proyek SafeHTML, ia mencoba untuk mengamankan situasi berikut saat string ditampilkan kepada pengguna-akhir:
-</p>
-<ul id="u1" class="block-content">
- <li>Tag pembuka tanpa tang penutupnya</li>
- <li>penutupan tag tanpa tag pembukanya
- <li>salah satu dari tag ini: base, basefont, head, html, body, applet, object, iframe, frame, frameset, script, layer, ilayer, embed, bgsound, link, meta, style, title, blink, xml, dll.</li>
- <li>seiap atribut ini: on*, data*, dynsrc</li>
- <li>javascript:/vbscript:/about: dll. protocols</li>
- <li>ekspresi/perangai, dll. dalam style</li>
- <li>konten aktif lainnya.</li>
-</ul>
-
-<p id="490309" class="block-content">
-Untuk menggunakan <tt>TSafeHtml</tt>, cukup kurung konten untuk diamankan dalam tag komponen <tt>TSafeHtml</tt> pada template. Konten bisa terdiri dari teks statis dan kontrol PRADO. Jika yang kedua, hasil penyajian kontrol akan aman.
-</p>
-
-<com:RunBar PagePath="Controls.Samples.TSafeHtml.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/Slider.page b/demos/quickstart/protected/pages/Controls/id/Slider.page
deleted file mode 100755
index 627366d8..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Slider.page
+++ /dev/null
@@ -1,50 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="4401">TSlider</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TSlider" />
-
-<p id="510314" class="block-content">
-<tt>TSlider</tt> menampilkan sebuah slider untuk keperluan input numerik. Slider terdiri dari <em>lajur</em>
-yang medefinisikan jangkauan nilai yang mungkin, dan sebuah <em>kendali</em> yang dapt bergeser pada lajur, untuk memilih
-sebuah nilai dalam jangkauan. Lajur dapat berupa Horisontal atau Vertikal, tergantung dari properti <tt>Direction</tt>.
-Standarnya adalah horisontal.
-</p>
-<p>
-Batas jangkauan ditetapkan oleh properti <tt> MinValue</tt> dan <tt>MaxValue</tt>.
-Jangkauan standar mulai dari 0 sampai 100.
-Properti <tt>StepSize</tt> bisa dipakai untuk mendefinisikan <em>langkah</em> diantara 2 nilai didalam jangkauan.
-Catatan bahwa langkah ini akan dihitung ulang jika ada lebih dari 200 nilai diantara batas jangkauan.
-Anda juga bisa melengkapi nilai yang diijinkan dengan menyetel array <tt>Values</tt>.
-</p>
-
-<p>
-sub-properti kendali dapat diakses dengan properti <tt>Handle</tt>. Anda juga bisa menyediakan kontrol anda sendiri
-untuk kendali, menggunakan properti <tt>HandleClass</tt>. Catatan bahwa kelas ini harus berupa subkelas dari <tt>TSliderHandle</tt>
-</p>
-
-<p>
-Kontrol TSlider bisa dikustomisasi dengan mudah menggunakan CssClasses. Anda bisa menyediakan file css sendiri menggunakan properti <tt>CssUrl</tt>.
-Kelas css untuk TSlider dapat disetel dengan properti <tt>CssClass</tt>. Nilai standarnya dalah <b>'hslider'</b> untuk
-slider Horisontal, atau <b>'vslider'</b> untuk Vertikal.
-Kelas css untuk Handle bisa disetel dengan subproperti <tt>Handle.CssClass</tt>. Standarnya adalah <b>'handle'</b>, yang menggambar blok merah sebagai kursor. Kelas css <b>'handle-image'</b> juga disediakan demi kenyamanan anda, yang berfungsi menampilkan gambar sebagai kendali.
-</p>
-
-<p>
-Jika properti <tt>AutoPostBack</tt> adalah true, postback dilakukan segera setelah nilai berubah.
-</p>
-
-<p>
-TSlider memunculkan event <tt>onValueChanged</tt> saat nilai slider telah berubah selama postback.
-</p>
-
-<p>
-Anda juga bisa melampirkan pengendali event javascript ClientSide ke slider :
-<ul>
-<li><tt>ClientSide.onSlide</tt> dipanggil ketika kendali digeser pada lajur. Anda akan mendapatkan nilai saat ini di dalam variabel javascript <b>value</b>. Anda dapat menggunakan event ini untuk dimutakhirkan pada sisi klien dengan sebuah label dengan nilai saat ini</li>
-<li><tt>ClientSide.onChange</tt> dipanggil saat nilai slider berubah (di akhir perpindahan).</li>
-</ul>
-</p>
-
-<com:RunBar PagePath="Controls.Samples.TSlider.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/Standard.page b/demos/quickstart/protected/pages/Controls/id/Standard.page
deleted file mode 100755
index 5e9f76d8..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Standard.page
+++ /dev/null
@@ -1,147 +0,0 @@
-<com:TContent ID="body" >
-
-<h1>Kontrol Standar</h1>
-<p>* tutorial untuk kontrol ini belum lengkap.</p>
-<ul id="u1" class="block-content">
- <li>
- <a href="?page=Controls.Button">TButton</a> mewakili tombol klik pada halaman Web, dipakai terutama sebagai pemicu postback halaman.
- </li>
-
- <li>
- <a href="?page=Controls.Captcha">TCaptcha</a> menampilkan CAPTCHA untuk menjaga spammers dari pendaftaran untuk akun online tertentu.
- </li>
-
- <li>
- <a href="?page=Controls.CheckBox">TCheckBox</a> mewakili kotak centang pada halaman Web, bisa digunakan untuk mengumpulkan dua-kondisi input pengguna.
- </li>
-
- <li>
- <a href="?page=Controls.ClientScript">TClientScript</a> menambahkan kode javascript ke halaman.
- </li>
-
- <li>*
- <a href="?page=Controls.ColorPicker">TColorPicker</a> mewakili field input yang mengambil nilai warna via dialog warna.
- </li>
-
- <li>
- <a href="?page=Controls.Conditional">TConditional</a> menampilkan konten terkaiit ke hasil true atau false dari sebuah ekspresi PHP.
- </li>
-
- <li>
- <a href="?page=Controls.DatePicker">TDatePicker</a> mewakili field input yang mengambil nilai tanggal via dialog kalender.
- </li>
-
- <li>
- <a href="?page=Controls.Expression">TExpression</a> menerima ekspresi PHP dan menampilkan hasil evaluasi pada halaman Web.
- </li>
-
- <li>
- <a href="?page=Controls.FileUpload">TFileUpload</a> mewakili field upload file, membolehkan pengguna mengirimkan file ke server.
- </li>
-
- <li>*
- <a href="?page=Controls.Head">THead</a> mewakili elemen &lt;head&gt; pada halaman Web HTML. Diperlukan oleh halaman PRADO agar bisa memakai tema.
- </li>
-
- <li>
- <a href="?page=Controls.HiddenField">THiddenField</a> mewakili field input tersembunyi pada halaman Web.
- </li>
-
- <li>
- <a href="?page=Controls.HtmlArea">THtmlArea</a> mewakili field input teks WYSIWYG yang mengambil input pengguna dalam format HTML.
- </li>
-
- <li>
- <a href="?page=Controls.HyperLink">THyperLink</a> mewakili hyperlink pada halaman Web.
- </li>
-
- <li>
- <a href="?page=Controls.Image">TImage</a> mewakili gambar pada halaman Web.
- </li>
-
- <li>
- <a href="?page=Controls.ImageButton">TImageButton</a> mewakili tombol klik yang memiliki gambar sebagai latar belakang, dipakai untuk memicu postback halaman.
- </li>
-
- <li>
- <a href="?page=Controls.ImageMap">TImageMap</a> mewakili gambar pada halaman Web dengan bagian titik yang bisa diklik.
- </li>
-
- <li>
- <a href="?page=Controls.InlineFrame">TInlineFrame</a> mewakili elemen &lt;iframe&gt; HTML pada halaman Web.
- </li>
-
- <li>
- <a href="?page=Controls.JavascriptLogger">TJavascriptLogger</a> mewakili pencatat pada halaman Web yang bisa mencatat berbagai informasi JavaScript.
- </li>
-
- <li>
- <a href="?page=Controls.Keyboard">TKeyboard</a> menampilkan keyboard virtual bagi pengguna untuk memasukan input ke dalam kotak teks.
- </li>
-
- <li>
- <a href="?page=Controls.Label">TLabel</a> mewakili label pada halaman Web. Label bisa dikustomisasi via berbagai atribut CSS.
- </li>
-
- <li>
- <a href="?page=Controls.LinkButton">TLinkButton</a> mewakili hyperlink yang bisa melakukan postbacks halaman.
- </li>
-
- <li>
- <a href="?page=Controls.Literal">TLiteral</a> mewakili teks statis tanpa tag HTML yang mengelilinginya pada halaman Web.
- </li>
-
- <li>
- <a href="?page=Controls.MultiView">TMultiView</a> mewakili tempat untuk grup kontrol <tt>TView</tt>, masing-masing adalah tempat untuk kontrol lainnya. Kapan saja, sebanyak-banyaknya satu <tt>TView</tt> yang terlihat.
- </li>
-
- <li>
- <a href="?page=Controls.OutputCache">TOutputCache</a> menghidupkan bagian cache atas output halaman dan dapat meningkatkan waktu respon halaman secara signifikan.
- </li>
-
- <li>
- <a href="?page=Controls.Pager">TPager</a> membuatUI yang membolehkan pengguna untuk menetapkan halaman mana data ditampilkan secara interaktif dalam kontrol data-bound.
- </li>
-
- <li>
- <a href="?page=Controls.Panel">TPanel</a> mewakili tempat untuk kontrol lain pada halaman Web. Dalam HTML, ia ditampilkan sebagai elemen &lt;div&gt;.
- </li>
-
- <li>
- <a href="?page=Controls.PlaceHolder">TPlaceHolder</a> memesan tempat pada template kontrol. Ia menyisipkan konten body-nya di tempat itu.
- </li>
-
- <li>
- <a href="?page=Controls.RadioButton">TRadioButton</a> mewakili tombol radio pada halaman Web. Dipakai terutama dalam sebuah grup di mana pengguna membuat pilihan.
- </li>
-
- <li>
- <a href="?page=Controls.SafeHtml">TSafeHtml</a> menampilkan konten body dengan kepastian bahwa konten tidak berisi kode yang membahayakan (seperti <a href="?page=Advanced.Security">XSS</a>).
- </li>
-
- <li>
- <a href="?page=Controls.Slider">TSlider</a> mewakili sebuah kontrol Slider
- </li>
-
- <li>
- <a href="?page=Controls.Statements">TStatements</a> menerima beberapa pernyataan PHP dan menampilkan output standarnya pada halaman Web.
- </li>
-
- <li>
- <a href="?page=Controls.Table">TTable</a> mewakili tabel HTML pada halaman Web. Dipakai bersama dengan <tt>TTableRow</tt> dan <tt>TTableCell</tt>.
- </li>
-
- <li>
- <a href="?page=Controls.TextBox">TTextBox</a> mewakili field input teks pada halaman Web. Ia bisa mengumpulkan satu-baris, multi-baris atau input teks sandi dari pengguna.
- </li>
-
- <li>
- <a href="?page=Controls.TextHighlighter">TTextHighlighter</a> menerangi konten body berdasarkan penerang sintaks, seperti PHP, XML, PRADO, dll.
- </li>
-
- <li>
- <a href="?page=Controls.Wizard">TWizard</a> mewakili formulir multi-langkah yang bisas mengambil input pengguna langkah demi langkah. Mirip dengan bimbingan instalasi Windows.
- </li>
-</ul>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/Statements.page b/demos/quickstart/protected/pages/Controls/id/Statements.page
deleted file mode 100755
index bfc0ac72..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Statements.page
+++ /dev/null
@@ -1,40 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="4301">TStatements</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TStatements" />
-
-<p id="500310" class="block-content">
-<tt>TStatements</tt> mengevaluasi rangkaian pernyataan PHP dan menampilkan konten yang disajikan oleh pernyataan. Untuk menetapkan pernyataan PHP yang dievaluasi, setel properti <tt>Statements</tt>. Sebagai contoh, tag komponen berikut menampilkan waktu saat ini pada halaman Web,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_500111">
-&lt;com:TStatements&gt;
- &lt;prop:Statements&gt;
- setlocale(LC_ALL, 'nl_NL');
- echo strftime("%A %e %B %Y",time());
- &lt;/prop:Statements&gt;
-&lt;/com:TStatements&gt;
-</com:TTextHighlighter>
-
-<p id="500311" class="block-content">
-Catatan, <tt>TStatements</tt> mengevaluasi pernyataan PHP selama menyajikan masa hidup kontrol. Tidak seperti <tt>TExpression</tt>, <tt>TStatements</tt> hanya menampilkan konten 'echoed' di dalam pernyataan.
-</p>
-
-<p id="500312" class="block-content">
-Konteks pernyataan dalam kontrol <tt>TStatements</tt> adalah kontrol itu sendiri. Yakni, <tt>$this</tt> mewakili obyek kontrol jika ia ada dalam pernyataan. Sebagai contoh, tag pernyataan berikut akan menampilkan judul halaman berisi kontrol <tt>TStatements</tt>.
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_500112">
-&lt;com:TStatements&gt;
- &lt;prop:Statements&gt;
- $page=$this->Page;
- echo $page->Title;
- &lt;/prop:Statements&gt;
-&lt;/com:TStatements&gt;
-</com:TTextHighlighter>
-
-<p id="500313" class="block-content">
-Harap berhati-hati, karena <tt>TStatements</tt> membolehkan eksekusi kode PHP bebas, secara umum anda jangan menggunakannya untuk mengevaluasi kode PHP yang dikirimkan oleh pengguna aplikasi anda.
-</p>
-
-<com:RunBar PagePath="Controls.Samples.TStatements.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/TabPanel.page b/demos/quickstart/protected/pages/Controls/id/TabPanel.page
deleted file mode 100755
index 02c0e49e..00000000
--- a/demos/quickstart/protected/pages/Controls/id/TabPanel.page
+++ /dev/null
@@ -1,55 +0,0 @@
-<com:TContent ID="body" >
-
-<h1>TTabPanel</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TTabPanel" />
-
-<p>
-<tt>TTabPanel</tt> menampilkan panel bertab. Para pengguna dapat mengklik pada bar tab untuk beralih diantara tampilan tab yang berbeda. Setiap tampilan tab adalah panel independen yang dapat berisi konten bebas.
-</p>
-
-<p>
-Kontrol <tt>TTabPanel</tt> terdiri dari satu atau beberapa kontrol <tt>TTabView</tt> yang mewakili tampilan tab yang mungkin. Kapan saja, hanya satu tampilan tab terlihat (aktif), yang ditetapkan oleh setiap properti berikut:
-</p>
-
-<ul>
-<li><tt>ActiveViewIndex</tt> - indeks integer berbasis-nol pada tampilan dalam koleksi view.</li>
-<li><tt>ActiveViewID</tt> - ID teks pada tampilan yang telihat.</li>
-<li><tt>ActiveView</tt> - turunan tampilan yang terlihat.</li>
-</ul>
-
-<p>
-Jika <tt>ActiveViewIndex</tt> dan <tt>ActiveViewID</tt> keduanya disetel, yang kedua diambil lebih dahulu.
-</p>
-
-<p>
-<tt>TTabPanel</tt> menggunakan CSS untuk menetapkan penampilan bat tab dan panel. Standarnya, file CSS yang disertakan akan diterbitkan berisi CSS standar untuk <tt>TTabPanel</tt>. Anda juga dapat menggunakan file CSS sendiri dengan menetapkan properti <tt>CssUrl</tt>. Properti berikut menetapkan kelas CSS yang dipakai untuk elemen div dalam <tt>TTabPanel</tt>:
-</p>
-
-<ul>
-<li><tt>CssClass</tt> - nama kelas CSS untuk elemen div terluar (standarnya 'tab-panel');</li>
-<li><tt>TabCssClass</tt> - nama kelas CSS untuk tab non aktif elemen div (standarnya 'tab-normal');</li>
-<li><tt>ActiveTabCssClass</tt> - nama kelas CSS untuk tab aktif elemen div (standarnya 'tab-active');</li>
-<li><tt>ViewCssClass</tt> - kelas CSS untuk elemen div menutupi tampilan konten (standarnya 'tab-view');</li>
-</ul>
-
-<p>
-Untuk menggunakan TTabPanel, tulis template seperti berikut:
-</p>
-
-<com:TTextHighlighter Language="prado" CssClass="source">
- &lt;com:TTabPanel>
- &lt;com:TTabView Caption="View 1">
- content for view 1
- &lt;/com:TTabView>
- &lt;com:TTabView Caption="View 2">
- content for view 2
- &lt;/com:TTabView>
- &lt;com:TTabView Caption="View 3">
- content for view 3
- &lt;/com:TTabView>
- &lt;/com:TTabPanel>
-</com:TTextHighlighter>
-
-<com:RunBar PagePath="Controls.Samples.TTabPanel.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/Table.page b/demos/quickstart/protected/pages/Controls/id/Table.page
deleted file mode 100755
index 5326a2d7..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Table.page
+++ /dev/null
@@ -1,11 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="4401">TTable</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TTable" />
-
-<p id="510314" class="block-content">
-<tt>TTable</tt> menampilkan tabel HTML pada halaman. ia dipakai bersama dengan <tt>TTableRow</tt> dan <tt>TTableCell</tt> untuk membolehkan memanipulasi tabel HTML secara programatis. Baris dari tabel disimpan dalam properti <tt>Rows</tt>. Anda dapat menyetel tabel cellspacing dan cellpadding masing-masing melalui properti <tt>CellSpacing</tt> dan <tt>CellPadding</tt>. Judul tabel dapat ditetapkan melalui <tt>Caption</tt> di mana penjajarannya ditetapkan dengan <tt>CaptionAlign</tt>. Properti <tt>GridLines</tt> menunjukan bagaimana tabel harus menampikan bingkainya, dan <tt>BackImageUrl</tt> membolehkan tabel untuk memiliki gambar latar belakang.
-</p>
-<com:RunBar PagePath="Controls.Samples.TTable.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/TextBox.page b/demos/quickstart/protected/pages/Controls/id/TextBox.page
deleted file mode 100755
index 71f6d235..00000000
--- a/demos/quickstart/protected/pages/Controls/id/TextBox.page
+++ /dev/null
@@ -1,11 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="4501">TTextBox</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TTextBox" />
-
-<p id="520315" class="block-content">
-<tt>TTextBox</tt> menampilkan kotak teks pada halaman Web. Konten dalam kotak teks ditentukan oleh properti <tt>Text</tt>. Anda dapat membuat teks <tt>SingleLine</tt>, a <tt>MultiLine</tt>, atau <tt>Kata sandi</tt> dengan menyetel properti <tt>TextMode</tt>. Properti <tt>Rows</tt> dan <tt>Columns</tt> menetapkan dimensinya. Jika <tt>AutoPostBack</tt> adalah true, perubahan konten dalam kotak teks dan kemudian memindahkan fokur keluar darinya akan menyebabkan aksi postback.
-</p>
-<com:RunBar PagePath="Controls.Samples.TTextBox.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/TextHighlighter.page b/demos/quickstart/protected/pages/Controls/id/TextHighlighter.page
deleted file mode 100755
index b1bb4ce7..00000000
--- a/demos/quickstart/protected/pages/Controls/id/TextHighlighter.page
+++ /dev/null
@@ -1,25 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="4601">TTextHighlighter</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TTextHighlighter" />
-
-<p id="530316" class="block-content">
-<tt>TTextHighlighter</tt> melakukan penerangan sintaks untuk konten badannya, termasuk teks statis dan hasil penyajian dari kontrol anaknya. Teks yang sedang diterangi mengikuti sintaks <tt>Language</tt> yang ditetapkan, yang dapat berupa 'php' (standar), 'prado', 'css', 'html', dll. Di sini, 'prado' terdiri dari sintaks template kontrol PRADO.
-</p>
-<p id="530317" class="block-content">
-Jika nomor baris diinginkan di depan setiap baris, setel <tt>ShowLineNumbers</tt> ke true.
-</p>
-<p id="530318" class="block-content">
-Untuk menggunakan <tt>TTextHighlighter</tt>, cukup kurung konten yang sintaksnya akan diterangi di dalam badan pada kontrol <tt>TTextHighlighter</tt>. Contoh berikut menerangi bagian kode PHP,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_530113">
-&lt;com:TTextHighlighter ShowLineNumbers="true"&gt;
-<?php
-$str = 'one|two|three|four';
-print_r(explode('|', $str, 2)); // akan mengeluarkan array
-&lt;/com:TTextHighlighter&gt;
-</com:TTextHighlighter>
-
-<com:RunBar PagePath="Controls.Samples.TTextHighlighter.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/Validation.page b/demos/quickstart/protected/pages/Controls/id/Validation.page
deleted file mode 100755
index e216d71e..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Validation.page
+++ /dev/null
@@ -1,216 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="4901">Kontrol Validasi</h1>
-
-<p id="560337" class="block-content">
-Kontrol validasi disebut validator, melakukan validasi terhadap nilai data yang dimasukan-pengguna saat ia ditulis kembali ke server. Validasi dipicu oleh kontrol postback, seperti properti <tt>TButton</tt>, <tt>TLinkButton</tt> atau <tt>TTextBox</tt> (di bawah mode <tt>AutoPostBack</tt>) di mana properti <tt>CausesValidation</tt> adalah true.
-</p>
-
-<p id="560338" class="block-content">
-Validasi selalu dilakukan pada sisi server. Jika <tt>EnableClientScript</tt> adalah true dan browser klien mendukung JavaScript, validator juga dapat melakukan validasi sisi-klien. Validasi sisi-klien akan memvalidasi input pengguna sebelum ia mengirimkannya ke server. Data formulir tidak akan dikirmkan jika ada kesalahan terdeteksi. Ini menghindari informasi yang diperlukan untuk validasi sisi-server.
-</p>
-
-<p id="560339" class="block-content">
-Validator dengan berbagai set properti umum yang didefinisikan dalam basis kelas <tt>TBaseValidator</tt> dan didaftarkan sebagai berikut,
-</p>
-<ul id="u1" class="block-content">
-<li><tt>ControlToValidate</tt> menetapkan kontrol input yang divalidasi. Properti ini harus disetel ke path ID dari kontrol input. Path ID adalah ID titik-terkoneksi dari kontrol yang menjangkai dari tempat penamaan validator ke kontrol sasaran.</li>
-<li><tt>ErrorMessage</tt> menetapkan pesan kesalahan untuk ditampilkan seandainya validator terkait gagal.</li>
-<li><tt>Text</tt> mirip dengan <tt>ErrorMessage</tt>. Jika keduanya ada, <tt>Text</tt> diambil lebih dulu. Properti ini berguna saat dipakai bersama dengan <tt>TValidationSummary</tt>.</li>
-<li><tt>ValidationGroup</tt> menetapkan di grup mana validator berada. Validator hanya akan melakukan validasi jika postback saat ini dipicu oleh kontrol yang berada dalam grup yang sama.</li>
-<li><tt>EnableClientScript</tt> menetapkan apakah validasi harus dilakukan di sisi-klien atau server. Standarnya dihidupkan.</li>
-<li><tt>Display</tt> menetapkan bagaimana pesan kesalahan ditampilkan. Ia mengambil salah satu dari tiga nilai berikut ini:
- <ul>
- <li><tt>None</tt> - pesn kesalahan tidak akan ditampilkan meskipun validator gagal.</li>
- <li><tt>Static</tt> - spasi untuk menampilkan pesan kesalahan disiapkan. Oleh karena itu, menampilkan pesan kesalahan tidak akan mengubah tata letak halaman anda yang sudah ada.</li>
- <li><tt>Dynamic</tt> - spasi untuk menampilkanpesan kesalahan TIDAK disiapkan. Oleh karena itu, menampilkan pesan kesalahan akan menggeser tata letak halaman anda (biasanya ke bawah).</li>
- </ul>
-</li>
-<li><tt>ControlCssClass</tt> - kelas CSS yang diterapkan ke kontrol yang sedang divalidasi seandainya validasi gagal.</li>
-<li><tt>FocusOnError</tt> - menyetel fokus di tempat validasi jika validasi gagal. Standarnya false.</li>
-<li><tt>FocusElementID</tt> - ID dari elemen HTML yang akan menerima fokus jika validasi gagal dan <tt>FocusOnError</tt> adalah true.</li>
-</ul>
-
-<h1 id="116008">Kontrol Validasi Prado</h1>
-<a name="TRequiredFieldValidator"></a>
-<h2 id="4902">TRequiredFieldValidator</h2>
-<p id="560340" class="block-content">
-TRequiredFieldValidator memastikan bahwa pengguna memasukan beberapa data dalam field input yang ditetapkan. Standarnya TRequiredFieldValidator akan memeriksa apakah input pengguna kosong atau tidak. Validasi gagal jika input kosong. Dengan menyetel <tt>InitialValue</tt>, validator dapat memeriksa apakah input pengguna berbeda dari <tt>InitialValue</tt>. Jika tidak, validasi gagal.
-</p>
-<com:RunBar PagePath="Controls.Samples.TRequiredFieldValidator.Home" />
-
-<a name="TRegularExpressionValidator"></a>
-<h2 id="4903">TRegularExpressionValidator</h2>
-<p id="560341" class="block-content">
-TRegularExpressionValidator memverifikasi input pengguna terhadap pola reguler. Validasi gagal jika input tidak sama dengan pola. Ekspresi reguler bisa ditetapkan dengan properti <tt>RegularExpression</tt>. Beberapa ekspresi reguler yang umumnya dipakai termasuk:
-</p>
-<ul id="u2" class="block-content">
-<li>Setidaknya 6 karakter: <code>[\w]{6,}</code></li>
-<li>Nomor Telepon Jepang: <code>(0\d{1,4}-|\(0\d{1,4}\) ?)?\d{1,4}-\d{4}</code></li>
-<li>Kode Pos Jepang: <code>\d{3}(-(\d{4}|\d{2}))?</code></li>
-<li>Nomor Telepon P.R.C.: <code>(\(\d{3}\)|\d{3}-)?\d{8} </code></li>
-<li>Kode Pos P.R.C.: <code>\d{6}</code></li>
-<li>Nomor Keamanan Sosial P.R.C.: <code>\d{18}|\d{15}</code></li>
-<li>Nomor Telepon Amerika: <code>((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}</code></li>
-<li>Kode ZIP Amerika: <code>\d{5}(-\d{4})?</code></li>
-<li>Nomor Keamanan Sosial Amerika: <code>\d{3}-\d{2}-\d{4}</code></li>
-</ul>
-<p id="560342" class="block-content">
-Pola ekspresi reguler lebih jauh dapat ditemukan di Internet, misalnya
-<a href="http://regexlib.com/">http://regexlib.com/</a>.
-</p>
-<p id="560343" class="block-content">
-Catatan, TRegularExpressionValidator hanya memeriksa input pengguna yang tidak kosong. Gunakan TRequiredFieldValidator untuk memastikan input pengguna tidak kosong.
-</p>
-<com:RunBar PagePath="Controls.Samples.TRegularExpressionValidator.Home" />
-
-<h2 id="TEmailAddressValidator">TEmailAddressValidator</h2>
-<p id="560344" class="block-content">
-TEmailAddressValidator memverifikasi bahwa input pengguna adalah alamat email yang benar. Validator menggunakan ekspresi reguler untuk memeriksa apakah input adalah format alamat email yang benar. Jika <tt>CheckMXRecord</tt> adalah true, validator juga akan memeriksa apakah rekaman MX yang diindikasikan dalam alamat email adalah benar, <tt>checkdnsrr()</tt> tersedia dalam PHP yang diinstalasi.
-</p>
-<p id="560345" class="block-content">
-Catatan, jika input yang divalidasi kosong, TEmailAddressValidator tidak akan melakukan validasi. Gunakan TRequiredFieldValidator untuk memastikan nilai tidak kosong.
-</p>
-<com:RunBar PagePath="Controls.Samples.TEmailAddressValidator.Home" />
-
-<a name="TCompareValidator"></a>
-<h2 id="4904">TCompareValidator</h2>
-<p id="560346" class="block-content">
-TCompareValidator membandingkan input pengguna dengan nilai konstan yang ditetapkan oleh <tt>ValueToCompare</tt>, atau input pengguna lain yang ditetapkan oleh <tt>ControlToCompare</tt>. Properti <tt>Operator</tt> menetapkan bagaimana untuk membandingkan nilai, yang menyertakan <tt>Equal</tt>, <tt>NotEqual</tt>, <tt>GreaterThan</tt>, <tt>GreaterThanEqual</tt>, <tt>LessThan</tt> dan <tt>LessThanEqual</tt>. Sebelum perbandingkan, nilai yang dibandingkan akan diubah ke tipe yang ditetapkan oleh <tt>DataType</tt> seperti didaftarkan sebagai berikut,
-</p>
-<ul id="u3" class="block-content">
-<li><tt>String</tt> - Tipe data string.</li>
-<li><tt>Integer</tt> - Tipe data integer signed 32-bit.</li>
-<li><tt>Float</tt> - Tipe data pecahan presisi-ganda.</li>
-<li><tt>Date</tt> - Tipe data tanggal. Format tanggal dapat ditetapkan dengan menyeting properti <tt>DateFormat</tt>, yang harus dikenal oleh <tt>TSimpleDateFormatter</tt>. Jika properti tidak disetel, sintaks tanggal GNU diasumsikan.</li>
-</ul>
-<p id="560347" class="block-content">
-Catatan, jika input yang sedang divalidasi kosong, TEmailAddressValidator tidak akan melakukan validasi. Gunakan TRequiredFieldValidator untuk memastikan nilai tidak kosong.
-</p>
-<p id="560348" class="block-content">
-<b>N.B.</b> Jika memvalidasi terhadap <a href="?page=Controls.DatePicker">TDatePicker</a> properti <tt>DataType</tt> harus sama dengan "Date" dan properti <tt>DateFormat</tt> pada validator harus sama dengan <tt>DateFormat</tt> pada <a href="?page=Controls.DatePicker">TDatePicker</a>.
-</p>
-<com:RunBar PagePath="Controls.Samples.TCompareValidator.Home" />
-
-<a name="TDataTypeValidator"></a>
-<h2 id="4905">TDataTypeValidator</h2>
-<p id="560349" class="block-content">
-TDataTypeValidator memverifiksai apakah data input adalah tipe spesifik sepeti ditunjukan oleh <tt>DataType</tt>. Tipe data dapat diperiksa kembali apakah sama seperti yang ada dalam TCompareValidator.
-</p>
-<p id="560350" class="block-content">
-<b>N.B.</b> Jika memvalidasi terhadap <a href="?page=Controls.DatePicker">TDatePicker</a> properti <tt>DataType</tt> harus sama dengan "Date" dan properti <tt>DateFormat</tt> pada validator harus sama dengan <tt>DateFormat</tt> pada <a href="?page=Controls.DatePicker">TDatePicker</a>.
-</p>
-
-
-<com:RunBar PagePath="Controls.Samples.TDataTypeValidator.Home" />
-
-<a name="TRangeValidator"></a>
-<h2 id="4906">TRangeValidator</h2>
-<p id="560351" class="block-content">
-TRangeValidator memverifikasi apakah nilai input di dalam jangkauan yang ditetapkan. TRangeValidator menggunakan properti kunci untuk melakukan validasinya. Properti <tt>MinValue</tt> dan properti <tt>MaxValue</tt> menetapkan nilai minimum dan maksimum dari jangkauan yang benar. Properti <tt>DataType</tt> menetapkan tipe data dari nilai yang sedang divalidasi. Pertama, nilai akan diubah ke dalam tipe yang ditetapkan dan kemudian dibandingkan dengan jangkauan yang benar. Tipe data bisa diperiksa apakah sama dengan yang ada dalam TCompareValidator.
-</p>
-
-<p id="range_strict" class="block-content">
-Jika properti <tt>StrictComparison</tt> disetel ke <tt>true</tt>, maka jangkauan dibandingkan semata-mata kurang dari <tt>MaxValue</tt> dan/atau lebih besar dari <tt>MinValue</tt>.
-</p>
-
-<p id="560352" class="block-content">
-<b>N.B.</b> Jika memvalidasi terhadap <a href="?page=Controls.DatePicker">TDatePicker</a> properti <tt>DataType</tt> harus sama dengan "Date" dan properti <tt>DateFormat</tt> pada validator harus sama dengan <tt>DateFormat</tt> pada <a href="?page=Controls.DatePicker">TDatePicker</a>.
-</p>
-
-<com:RunBar PagePath="Controls.Samples.TRangeValidator.Home" />
-
-<a name="TCustomValidator"></a>
-<h2 id="4907">TCustomValidator</h2>
-<p id="560353" class="block-content">
-TCustomValidator melakukan validasi didefinisikan-pengguna (baik sisi-server atau sisi-klien ataupun keduanya) pada kontrol input.
-</p>
-<p id="560354" class="block-content">
-Untuk membuat fungsi validasii sisi-server, sediakan pengendali untuk event <tt>OnServerValidate</tt> yang melakukan validasi. String data pada kontrol input untuk memvalidasi dapat diakses dengan parameter event properti <tt>Value</tt>. Hasil validasi harus disimpan dalam properti <tt>IsValid</tt> pada parameter.
-</p>
-<p id="560355" class="block-content">
-Untuk membuat fungsi validasi sisi-klien, tambahkan fungsi validasi javascript ke template halaman dan tempatkan namanya ke properti <tt>ClientValidationFunction</tt>. Fungsi harus memiliki tanda sebagai berikut:
-</p>
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_560118">
-<script type="text/javascript">
-function ValidationFunctionName(sender, parameter)
-{
- // if(parameter == ...)
- // return true;
- // else
- // return false;
-}
-</script>
-</com:TTextHighlighter>
-<com:RunBar PagePath="Controls.Samples.TCustomValidator.Home" />
-
-<a name="TValidationSummary"></a>
-<h2 id="4908">TValidationSummary</h2>
-<p id="560356" class="block-content">
-TValidationSummary menampilkan ringkasan dari kesalahan inline validasi pada halaman Web, dalam kotak pesan, atau keduanya.
-</p>
-<p id="560357" class="block-content">
-Standarnya ringkasan validasi akan mengumpulkan <tt>ErrorMessage</tt> dari semua validator yang gagal pada halaman. Jika <tt>ValidationGroup</tt> tidak kosong, hanya validator itu yang dimiliki grup akan menampilkan pesan kesaslahannya dalam ringkasan.
-</p>
-<p id="560358" class="block-content">
-Ringkasan dapat ditampilkan sebagai daftar, daftar bertitik, atau satu paragraf berdasarkan properti <tt>DisplayMode</tt>. Pesan yang ditampilkan dapat diawali dengan <tt>HeaderText</tt>. Ringkasan dapat ditampilkan pada halaman Web atau kotak pesan JavaScript, masing-masing dengan menyetel properti <tt>ShowSummary</tt> dan <tt>ShowMessageBox</tt>. Catatan, yang terakhir hanya efektif saat <tt>EnableClientScript</tt> adalah true.
-</p>
-<com:RunBar PagePath="Controls.Samples.TValidationSummary.Home" />
-
-<h1 id="123123">Berinteraksi dengan Validator</h1>
-<h2 id="116009">Mereset atau Membersihkan Validator</h2>
-<p id="1212323">
-Validator bisa mereset pada sisi-klien menggunakan javascript dengan memanggil
-<tt>Prado.Validation.reset(groupID)</tt> di mana <tt>groupID</tt> adalah nama pengelompokan. Jika <tt>groupID</tt> adalah null, maka validator tanpa pengelompokan yang dipakai.
-</p>
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_560118a">
-<script type="text/javascript">
-function reset_validator()
-{
- Prado.Validation.reset("group1");
-}
-</script>
-</com:TTextHighlighter>
-<com:RunBar PagePath="Controls.Samples.ResetValidation.Home" />
-
-<h2 id="5301">Validasi Kondisional Sisi Server dan Klien</h2>
-<p id="560359" class="block-content">
- Semua validator berisi event berikut.
- Event terkait untuk sisi klien tersedia sebagai sub-properti
- dari properti <tt>ClientSide</tt> pada validator.
-</p>
- <ul id="u4" class="block-content">
- <li>Event <tt>OnValidate</tt> muncul sebelum fungsi validasi validator yang dipanggil.</li>
- <li>Event <tt>OnValidationSuccess</tt> muncul setelah validator sukses memvalidasi kontrol.</li>
- <li>Event <tt>OnValidationError</tt> muncul setelah validator gagal memvalidasi.</li>
- </ul>
-
-<div class="note"><b class="tip">Catatan:</b>
-Untuk Prado sebelum versi 3.1 nama properti adalah <tt>OnError</tt> dan <tt>OnSuccess</tt>. Untuk Prado versi 3.1 dan berikutnya masing-masing <tt>OnValidationError</tt> dan <tt>OnValidationSuccess</tt>.
-</div>
-
-<p id="560360" class="block-content">Contoh berikut memunculkan pesan yang mengatakan "hello" saat validator gagal pada sisi-klien.
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_560119">
-&lt;com:TRequiredFieldValidator ... &gt;
- &lt;prop:ClientSide.OnValidationError&gt;
- alert("hello");
- &lt;/prop:ClientSide.OnValidationError&gt;
-&lt;/com:TRequiredFieldValidator&gt;
-</com:TTextHighlighter>
-Hasil event fungsi callback sisi-klien adalah dalam bentuk seperti berikut.
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_560120">
-function onErrorHandler(sender, parameter)
-{
- alert("hello");
-}
-</com:TTextHighlighter>
-di mana <tt>sender</tt> adalah vaidator sisi-klien saat ini dan <tt>parameter</tt> adalah kontrol yang memanggil validator.
-</p>
-<h3 id="5302">Contoh Validasi Kondisional</h3>
-<p id="560361" class="block-content">
-Contoh berikut memperlihatkan penggunaan event validator sisi-klien dan sisi server. Contoh mendemonstrasikan validasi kondisional. Catatan bahwa, kita perlu menuliskan kode untuk sisi server dan klien. Selanjutnya, pada sisi server, kita perlu menghidupkankembali validator kondisional agar kode javascript dihasilkan tanpa mempedulikan apapun (sebaliknya, validator sisi-klien tidak tersedia).
-<com:RunBar PagePath="Controls.Samples.TClientSideValidator.Home" />
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/Wizard.page b/demos/quickstart/protected/pages/Controls/id/Wizard.page
deleted file mode 100755
index 5105adef..00000000
--- a/demos/quickstart/protected/pages/Controls/id/Wizard.page
+++ /dev/null
@@ -1,100 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="4701">TWizard</h1>
-<com:DocLink ClassPath="System.Web.UI.WebControls.TWizard" />
-
-<h2 id="4702">Tinjauan</h2>
-<p id="540319" class="block-content">
-<tt>TWizard</tt> adalah analogi terhadap bimbingan instalasi yang umum digunakan untuk menginstalasi software pada Windows. Ia memisahkan formulir besar dan menyajikan pengguna dengan sederetan formulir lebih kecil, disebut langkah bimbingan, untuk diselesaikan. Gambar berikut memperlihatkan bagaimana bimbingan dibuat atas kapan disajikan untuk pengguna, di mana <tt>konten langkah</tt> adalah konten utama pada langkah bimbingan untuk diselesaikan oleh para pengguna, <tt>header</tt> merujuk ke konten header yang umum bagi seluruh langkah, <tt>navigasi</tt> berisi tombol yang membolehkan pengguna untuk menjelajahi langkah demi langkah, dan <tt>bar samping</tt> berisi daftar hiperlink di mana para pengguna dapat menjangkau ke setiap langkah dengan satu klik. Penampakan bar samping dapat dihidup matikan dengan menyetel <tt>ShowSideBar</tt>.
-</p>
-<img src="<%~wizard.gif%>" alt="components of wizard" />
-
-<p id="540320" class="block-content">
-Standarnya <tt>TWizard</tt> menyertakan komponen di atas dalam sebuah tabel HTML agar bar samping bisa ditampilkan di kiri sementara sisanya di kanan. Jika <tt>UseDefaultLayout</tt> disetel ke false, tidak ada tabel HTML yang akan dipakai, dan para pengembang hrus menggunakan teknik murni CSS untuk posisi komponen bimbingan. Catatan, setiap komponen ditampilkan sebagai &lt;div&gt; dan bimbingan sendiri juga adalah &lt;div&gt; yang mengurung komponennya &lt;div&gt;.
-</p>
-
-<p id="540321" class="block-content">
-Langkah bimbingan disajikan dengan <tt>TWizardStep</tt> dan dipelihara dalam <tt>TWizard</tt> melalui properti <tt>WizardSteps</tt>. Kapan saja hanya satu yang terlihat, yang ditentukan oleh properti <tt>ActiveStep</tt>. Properti <tt>ActiveStepIndex</tt> memberikan indeks pada langkah yang aktif dalam koleksi langkah. Mengklik pada tombol navigasi dapat mengaktifkan langkah bimbingan yang berbeda.
-</p>
-
-<p id="540322" class="block-content">
-Langkah bimbingan biasanya ditambahkan ke bimbingan melalui template seperti berikut,
-</p>
-
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_540114">
-&lt;com:TWizard&gt;
- &lt;com:TWizardStep Title="step 1" StepType="Start"&gt;
- konten dalam langkah 1 dapat berisi kontrol lain
- &lt;/com:TWizardStep&gt;
-
- &lt;com:TWizardStep Title="step 2" StepType="Step"&gt;
- konten dalam langkah 2 dapat berisi kontrol lain
- &lt;/com:TWizardStep&gt;
-
- &lt;com:TWizardStep Title="finish step" StepType="Finish"&gt;
- konten dalam langkah selesai dapat berisi kontrol lain
- &lt;/com:TWizardStep&gt;
-&lt;/com:TWizard&gt;
-</com:TTextHighlighter>
-
-<p id="540323" class="block-content">
-Dalam contoh di atas, <tt>StepType</tt> merujuk ke tipe langkah bimbingan, yang dapat mempengaruhi bagaimana penampilan navigasi dan perilaku langkah. Langkah bimbingan dapat berupa salah satu dari tipe berikut:
-</p>
-<ul id="u1" class="block-content">
- <li><tt>Start</tt> - langkah pertama dalam bimbingan.</li>
- <li><tt>Step</tt> - langkah internal dalam bimbiingan.</li>
- <li><tt>Finish</tt> - langkah terakhir yang membolehkan interaksi pengguna.</li>
- <li><tt>Complete</tt> - langkah yang memperlihatkan ringkasan kepada penngguna. Dalam langkah ini, bar samping dan panel navigasi tidak terlihat. Selanjutnya, langkah ini biasanya tidak membolehkan interaksi pengguna.</li>
- <li><tt>Auto</tt> - tipe langkah ditentukan oleh bimbingan secara otomatis.</li>
-</ul>
-
-
-<h2 id="4703">Menggunakan TWizard</h2>
-
-<h3 id="4704">Contoh Bimbingan Satu-Langkah</h3>
-<p id="540324" class="block-content">
-Dalam contoh ini, kita menggunakan bimbingan untuk mengumpulkan preferensi pengguna pada warna. Dalam langkah pertama, pengguna disajikan dengan daftar dropdown dari mana dia dapat memilih warna favoritnya. Dalam langkah kedua, langkah lengkap, pilihannya dalam langkah sebelumnya ditampilkan. Dalam aplikasi sebenarnya, pada langkah ini pilihan bisa disimpan dalam database di belakang layar.
-</p>
-<com:RunBar PagePath="Controls.Samples.TWizard.Sample1" />
-
-<h3 id="4705">Mengkustomisasi Gaya Bimbingan</h3>
-<p id="540325" class="block-content">
-<tt>TWizard</tt> mendefinisikan seluruh set properti untuk kustomisasi penampilan berbagai komponennya seperti yang ditampilkan pada gambar di atas. Dalam keadaan tertentu, properti berikut disediakan untuk kustomisasi gaya:
-</p>
-<ul id="u2" class="block-content">
- <li>Header - <tt>HeaderStyle</tt>.</li>
- <li>Langkah - <tt>StepStyle</tt>.</li>
- <li>Navigasi - <tt>NavigationStyle</tt>, <tt>StartNextButtonStyle</tt>, <tt>StepNextButtonStyle</tt>, <tt>StepPreviousButtonStyle</tt>, <tt>FinishPreviousButtonStyle</tt>, <tt>FinishCompleteButtonStyle</tt>, <tt>CancelButtonStyle</tt>.</li>
- <li>Bar samping - <tt>SideBarStyle</tt>, <tt>SideBarButtonStyle</tt>.</li>
-</ul>
-<com:RunBar PagePath="Controls.Samples.TWizard.Sample2" />
-
-<h3 id="4706">Mengkustomisasi Navigasi Bimbingan</h3>
-<p id="540326" class="block-content">
-Berikut adalah set langkah bimbingan, <tt>TWizard</tt> mendukung tiga cara navigasi diantaranya:
-</p>
-<ul id="u3" class="block-content">
- <li>Bidirectional - Para pengguna dapat menjelajahi maju dan mundur sepanjang rangkaian langkah bimbingan. Input data pengguna biasanya dikumpulkan di langkah terakhir. Ini juga dikenal sebagai model commit-at-the-end. Itulah cara navigasi standar yang didukung <tt>TWizard</tt>.</li>
- <li>Unidirectional - Para pengguna dapat menjelajahi maju sepanjang rangkaian langkah bimbingan. Pindah mundur tidak dibolehkan. Data input pengguna biasa dikumpulkan langkah demi langkah. Ini juga dikenal sebagai model command-as-you-go. Untuk melarang perpindahan mundur ke langkah tertentu, setel properti <tt>AllowReturn</tt> ke false.</li>
- <li>Nonlinear - Input pengguna dalam langkah menentukan langkah mana berikutnya. Untuk melakukannya, setel <tt>ActiveStepIndex</tt> ke langkah yang anda ingin agar pengguna pergi ke sana. Dalam hal ini, ketika pengguna mengklik pada tombol sebelumnya alam panel navigasi, langkah sebelumnya yang telah mereka kunjungi (bukan langkah sebelumnya dalam urtan sekuensial) akan menjadi terlihat.</li>
-</ul>
-<com:RunBar PagePath="Controls.Samples.TWizard.Sample3" />
-
-<h3 id="4707">Menggunakan Template dalam Bimbingan</h3>
-<p id="540327" class="block-content">
-<tt>TWizard</tt> mendukung kontrol konkrit dari penampilannya melalui template. Dalam keadaan tertentu, ia menyediakan properti template yang membolehkan kustomisasi lengkap pada header, navigasi dan bar samping.
-</p>
-<ul id="u4" class="block-content">
- <li>Header - <tt>HeaderTemplate</tt>.</li>
- <li>Navigation - <tt>StartNavigationTemplate</tt>, <tt>StepNavigationTemplate</tt>, <tt>FinishNavigationTemplate</tt>.</li>
- <li>Side bar - <tt>SideBarTemplate</tt>.</li>
-</ul>
-<com:RunBar PagePath="Controls.Samples.TWizard.Sample4" />
-
-<h3 id="4708">Menggunakan Langkah Bimbingan Bertemplate</h3>
-<p id="540328" class="block-content">
-Langkah bimbingan juga dapat diberi template. Dengan menggunakan <tt>TTemplatedWizardStep</tt>, seseorang dapat mengkustomisasi konten langkah dan navigasi melalui masing-masing properti <tt>ContentTemplate</tt> dan <tt>NavigationTemplate</tt>. Ini berguna untuk pengembang kontrol guna membangun bimbingan khusus seperti registrasi pengguna, kereta belanja, dll.
-</p>
-<com:RunBar PagePath="Controls.Samples.TWizard.Sample5" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Controls/id/wizard.gif b/demos/quickstart/protected/pages/Controls/id/wizard.gif
deleted file mode 100755
index 9faf580d..00000000
--- a/demos/quickstart/protected/pages/Controls/id/wizard.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Database/ActiveRecord.page b/demos/quickstart/protected/pages/Database/ActiveRecord.page
index cf1485bd..566dfe66 100755
--- a/demos/quickstart/protected/pages/Database/ActiveRecord.page
+++ b/demos/quickstart/protected/pages/Database/ActiveRecord.page
@@ -36,7 +36,7 @@
Active Record objects can be used to update the database.
The "relationship" between Active Records and <a href="?page=Database.SqlMap">SqlMap</a> is illustrated in the
following diagram. More details regarding the SqlMap Data Mapper can be found in
- the <a href="http://www.pradosoft.com/demos/sqlmap/">SqlMap Manual</a>.
+ the <a href="http://www.pradoframework.net/site/demos/sqlmap/">SqlMap Manual</a>.
<img src=<%~ sqlmap_active_record.png %> alt="Active Records and SqlMap DataMapper" id="fig:diagram.png" class="figure"/>
</p>
diff --git a/demos/quickstart/protected/pages/Database/SqlMap.page b/demos/quickstart/protected/pages/Database/SqlMap.page
index be8cb03a..8c528070 100755
--- a/demos/quickstart/protected/pages/Database/SqlMap.page
+++ b/demos/quickstart/protected/pages/Database/SqlMap.page
@@ -189,7 +189,7 @@ $user = $sqlmap->queryForObject("SelectUsers");
<p id="700523" class="block-content">The above example shows demonstrates only a fraction of the capabilities
of the SqlMap Data Mapper. Further details can be found in the
- <a href="http://www.pradosoft.com/demo/sqlamp/">SqlMap Manual</a>.
+ <a href="http://www.pradoframework.net/demos/sqlmap/">SqlMap Manual</a>.
</p>
<h2 id="140067">Combining SqlMap with Active Records</h2>
diff --git a/demos/quickstart/protected/pages/Database/ViewsArUpdate.page b/demos/quickstart/protected/pages/Database/ViewsArUpdate.page
index 5dd084c4..2df1d3d7 100644
--- a/demos/quickstart/protected/pages/Database/ViewsArUpdate.page
+++ b/demos/quickstart/protected/pages/Database/ViewsArUpdate.page
@@ -1,6 +1,6 @@
<com:TContent ID="body" >
<h1 id="138046">Views - AR Classes Update</h1>
-<com:SinceVersion Version="4.0" />
+<com:SinceVersion Version="3.3" />
<p class="block-content">
Usually when you use <tt>Active Records Classes</tt> to interact with your Data Base
you also build some proper views to handle them. To save every element of your views in your Data Base
@@ -9,9 +9,9 @@
Thats why Prado offers an automatic mechanism to update your views from your AR Classes and vice versa.
</p>
-<h2>Updating views from AR Classes</h2>
+<h2 id="244034">Updating views from AR Classes</h2>
-<p>Instead of assign each attribute in your AR Class to your view controls like this:</p>
+<p id="1220005" class="block-content">Instead of assign each attribute in your AR Class to your view controls like this:</p>
<com:TTextHighlighter CssClass="source block-content">
$student = AR_Student::finder()->findByPk(1);
$this->name->Text = $student->name;
@@ -20,7 +20,7 @@ $this->gender->Text = $student->gender;
$this->average->Text = $student->average;
</com:TTextHighlighter>
-<p>You can do the same as follows:</p>
+<p id="1220006" class="block-content">You can do the same as follows:</p>
<com:TTextHighlighter CssClass="source block-content">
$student = AR_Student::finder()->findByPk(1);
@@ -28,8 +28,8 @@ $this->tryToUpdateView($student);
</com:TTextHighlighter>
-<h2>Updating AR Classes from views</h2>
-<p>Instead of assign each attribute in your views to your AR Classes like this:</p>
+<h2 id="244035">Updating AR Classes from views</h2>
+<p id="1220007" class="block-content">Instead of assign each attribute in your views to your AR Classes like this:</p>
<com:TTextHighlighter CssClass="source block-content">
$student = new AR_Student();
$student->name = $this->name->Text;
@@ -39,7 +39,7 @@ $student->average = $this->average->Text;
$student->save();
</com:TTextHighlighter>
-<p>You can do the same as follows:</p>
+<p id="1220008" class="block-content">You can do the same as follows:</p>
<com:TTextHighlighter CssClass="source block-content">
$student = new AR_Student();
diff --git a/demos/quickstart/protected/pages/Database/id/ActiveRecord.page b/demos/quickstart/protected/pages/Database/id/ActiveRecord.page
deleted file mode 100755
index 8e81678e..00000000
--- a/demos/quickstart/protected/pages/Database/id/ActiveRecord.page
+++ /dev/null
@@ -1,1000 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="138046">Rekaman Aktif</h1>
-<com:SinceVersion Version="3.1a" />
-<p id="690478" class="block-content">Rekaman Aktif adalah obyek yang melapisi baris dalam tabel atau view database,
- melindungi akses database dan menambahkan logika domain pada data tersebut.
- Dasar dari Rekaman Aktif adalah kelas bisnis, sebagai contoh, kelas
- <tt>Products</tt>, yang hampir menyamai struktur rekaman dari tabel database
- dibawahnya. Setiap Rekaman Aktif akan bertanggung jawab atas
- penyimpanan dan pengambilan data ke dan dari database. </p>
-<div class="info"><b class="note">Info:</b>
- Struktur Rekaman Aktif harus sama dengan tabel dalam database.
- Setiap kolom tabel harus mempunyai variabel atau properti anggota terkait dalam
- kelas Rekaman Aktif yang mewakili tabel.
-</div>
-
-<h2 id="138047">Kapan Menggunakannya</h2>
-<p id="690479" class="block-content">Rekaman Aktif adalah pilihan yang baik untuk logika domain yang tidak terlalu rumit,
- seperti membuat, membaca, memutakhirkan, dan menghapus. Derivasi dan validasi
- didasarkan pada satu rekaman yang bekerja denga baik dalam struktur ini. Rekaman Aktif mempunyai kuntungan utama dalam hal kesederhanaan. Mudah untuk membangun Rekaman Aktif, dan mudah untuk dimengerti.</p>
-
- <p id="690480" class="block-content">Akan tetapi, seiring dengan perkembangan logika bisnis Anda dalm hal kompleksitas, Anda akan segera ingin menggunakan hubungan langsung obyek Anda, koleksi, turunan, dan seterusnya. Ini tidak mudah diterapkan ke dalam Rekaman Aktif, dan menambahkannya sedikit demi sedikit menjadi sangat kacau.
- Argumen lain terhadap Rekaman Aktif adalah kenyataan bahwa ia menyandingkan desin obyek ke desain database. Ini menjadikannya lebih sulit untuk merefraktorisasi karena proyek terus berjalan.</p>
-
- <p id="690481" class="block-content">Alternatifnya adalah menggunakan Pemeta Data yang yang memisahkan aturan dari obyek bisnis dan bagaimana obyek ini disimpan.
- Prado menyediakan pilihan tambahan antara Rekaman Aktif dan
- <a href="?page=Database.SqlMap">Pemeta Data SqlMap</a>.
- Pemeta Data SqlMap bisa dipakai untuk mengambil obyek Rekaman Aktif, hasilnya; obyek Rekaman Aktif ini bisa dipakai untuk memutakhirkan database.
- "Hubungan" antara Rekaman Aktif dan <a href="?page=Database.SqlMap">SqlMap</a> digambarkan dalam diagram berikut. Lebih rinci mengenai Pemeta Data SqlMap dapat ditemukan dalam
- <a href="http://www.pradosoft.com/demos/sqlmap/">Manual SqlMap</a>.
- <img src=<%~ sqlmap_active_record.png %> alt="Rekaman Aktif dan SqlMap DataMapper" id="fig:diagram.png" class="figure"/>
- </p>
-
- <p id="690482" class="block-content">
- Kelas Rekaman Aktif berfungsi untuk melakukan tugas-tugas berikut.
- </p>
- <ul id="u1" class="block-content">
- <li>Membuat, Mengambil, Memutakhirkan dan Menghapus rekaman.</li>
- <li>Metode pencari untuk melapisi queri SQL yang umum dipakai dan mengemalikan obyek Rekaman Aktif.</li>
- <li>Mengambil hubungan (terkait dengan obyek asing) seperti "has many", "has one", "belongs to" dan "has many" melalui asosiasi tabel.</li>
- <li>Pengambilan lazy atas hubungan.</li>
- </ul>
-<h2>Implikasi Desain</h2>
-<p>
-Implementasi Prado terhadap Rekaman Aktif tidak memelihara identitas referensial. Setiap obyek diperoleh menggunakan Rekaman Aktif pada data dalam database. Sebagai contoh, jika Anda meminta kustomer tertentu dan mendapatkan kembali obyek <tt>Customer</tt>, kali berikutnya Anda meminta kustomer itu, Anda akan kembali mendapatkan turunan lain dari obyek <tt>Customer</tt>. Ini berarti bahwa perbandingan tepat (misalnya menggunakan <tt>===</tt>) akan mengembalikan false, sementara perbandingan bebas (misalnya menggunakan <tt>==</tt>) akan mengembalikan true jika nilai obyek sama menurut perbandingan bebas.
-<p>
-<p>
-Implikasi desain ini terkait dengan pertanyaan berikut.
-<i>"Anda pikir kustomer sebagai obyek, di mana hanya satu,
-atau Anda pikir obyek yang Anda operasikan sebagai <b>duplikat</b> dari database?"</i>
-Pemetaan O/R lain akan mengartikan bahwa hanya ada satu obyek Kustomer dengan custID 100, dan secara literal ia adalah kustomer.
-Jika Anda mendapatkan kustomer dan mengubah field-nya, maka Anda sekarang telah mengubah kustomer itu.
-<i>"Itu berbatasan dengan: Anda telah mengubah duplikat kustomer ini, tapi bukan pada duplikat itu.
-Dan jika dua orang memutakhirkan kustomer pada dua duplikat obyek, siapapun yang memutakhirkan pertama kali, atau mungkin yang terakhir yang menang."</i> [A. Hejlsberg 2003]
-</p>
-
-<h2 id="142010">Database yang Didukung</h2>
-<p id="p1" class="block-content">
-Implementasi Rekaman Aktif memanfaatkan kelas <a href="?page=Database.DAO">Prado DAO</a> untuk akses data.
-Implementasi Rekaman Aktif saat ini mendukung database sebagai berikut.
-</p>
-<ul>
- <li><a href="http://www.mysql.com">MySQL 4.1 atau lebih tinggi</a></li>
- <li><a href="http://www.postgres.com">Postgres SQL 7.3 atau lebih tinggi</a></li>
- <li><a href="http://www.sqlite.org">SQLite 2 dan 3</a></li>
- <li><a href="#">MS SQL 2000 atau terbaru</a></li>
- <li><a href="http://www.oracle.com">Oracle Database (alfa)</a></li>
-</ul>
-<p id="710009" class="block-content">Dukungan database lain dapat disediakan jika permintaan mencukupi.</p>
-
-<h1 id="138048">Mendefinisikan Rekaman Aktif</h1>
-<p id="690483" class="block-content">Mari kita anggap tabel
- "<tt>users</tt>" berikut yang berisi dua kolom bernama "<tt>username</tt>" dan "<tt>email</tt>",
- di mana "<tt>username</tt>" juga merupakan kunci primer.
-<com:TTextHighlighter Language="sql" CssClass="source block-content" id="code_690147">
-CREATE TABLE users
-(
- username VARCHAR( 20 ) NOT NULL ,
- email VARCHAR( 200 ) ,
- PRIMARY KEY ( username )
-);
-</com:TTextHighlighter>
-</p>
-<p id="690484" class="block-content">Selanjutnya kelas Rekaman Aktif kita yang terkait dengan tabel "<tt>users</tt>".
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690148">
-class UserRecord extends TActiveRecord
-{
- const TABLE='users'; //nama tabel
-
- public $username; //kolom bernama "username" dalam tabel "users"
- public $email;
-
- /**
- * @return TActiveRecord active record finder instance
- */
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
-</com:TTextHighlighter>
-</p>
-<p id="690485" class="block-content">Setiap kolom dari tabel "<tt>users</tt>" harus mempunyai properti terkait atas nama yang sama seperti nama kolom dalam kelas <tt>UserRecord</tt>.
- Tentunya, Anda juga mendefinisikan variabel atau properti tambahan yang tidak ada dalam struktur tabel.
- Konstan kelas
- <tt>TABLE</tt> adalah opsional saat nama kelas adalah sama seperti nama tabel dalam database, sebaliknya <tt>TABLE</tt> harus
- menetapkan nama tabel yang terkait dengan kelas Rekaman Aktif Anda.
-</p>
-
-<div class="tip"><b class="note">Tip:</b>
-Anda dapat menetapkan nama-nama tabel yang memenuhi syarat. Contohnya untuk MySQL, <tt>TABLE = "`database1`.`table1`"</tt>.
-</div>
-
-<p class="block-content" id="ar_as_component">
- Karena <tt>TActiveRecord</tt> memperluas <tt>TComponent</tt>, metode penyetel dan pengambil dapat didefinisikan guna membolehkan kontrol melalui bagaimana variabel disetel dan dikembalikan. Sebagai contoh, menambah properti <tt>$level</tt> untuk menggunakan kelas UserRecord:
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690149">
-class UserRecord extends TActiveRecord {
- ... //definisi yang sudah ada seprti di atas
-
- private $_level;
- public function setLevel($value) {
- $this->_level=TPropertyValue::ensureInteger($value,0);
- }
- public function getLevel($value){
- return $this->_level;
- }
-}
-</com:TTextHighlighter>
-<p id="710010" class="block-content">Lebih jelas mengenai TComponent dapat ditemukan dalam <a href="?page=Fundamentals.Components1">Dokumentasi komponen</a>.
-Nantinya kita harus dapat menggunakan pengambil/penyetel guna membolehkan pengambilan malas atas obyek yang berhubungan.
-</p>
-
-<div class="info"><b class="note">Info:</b>
-<tt>TActiveRecord</tt> juga dapat bekerja dengan view database dengan menetapkan konstan <tt>TABLE</tt> terkait ke nama view. Akan tetapi,
-obyek yang dikembalikan dari view hanya-baca, memanggil metode
-<tt>save()</tt> atau <tt>delete()</tt> akan memunculkan eksepsi.
-</div>
-
-<p id="690486" class="block-content">
- Metode statis <tt>finder()</tt> mengembalilkan turunan <tt>UserRecord</tt>
- yang dapat dipakai untuk mengambil rekaman dari database. Pengambilan rekaman menggunakan metode finder akan didiskusikan nanti. Metode statis <tt>TActiveRecord::finder()</tt> mengambil nama kelas Rekaman Aktif sebagai parameter.
-</p>
-
-<h2 id="138049">Menyiapkan koneksi database</h2>
-<p id="690487" class="block-content">
- Koneksi database standar untuk Rekaman Aktif dapat disetel sebagai berikut.
- Lihat <a href="?page=Database.DAO">Menetapkan Koneksi Database</a> untuk
- rincian lebih jauh mengenai pembuatan koneksi database secara umum.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690150">
-//buat koneksi dan berikan kepada manajer Rekaman Aktif.
-$dsn = 'pgsql:host=localhost;dbname=test'; //Postgres SQL
-$conn = new TDbConnection($dsn, 'dbuser','dbpass');
-TActiveRecordManager::getInstance()->setDbConnection($conn);
-</com:TTextHighlighter>
-
-<p id="710011" class="block-content">Alternatifnya, Anda dapat membuat basis kelas dan mengganti metode <tt>getDbConnection()</tt> untuk mengembalikan
-koneksi database. Ini adalah cara sederhana untuk mengijinkan koneksi database multipel. Kode berikut mendemonstrasikan penetapan koneksi database dalam sebuah basis kelas (tidak perlu menyetel koneksi DB di manapun juga).
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class MyDb1Record extends TActiveRecord
-{
- public function getDbConnection()
- {
- static $conn;
- if($conn===null)
- $conn = new TDbConnection('xxx','yyy','zzz');
- return $conn;
- }
-}
-class MyDb2Record extends TActiveRecord
-{
- public function getDbConnection()
- {
- static $conn;
- if($conn===null)
- $conn = new TDbConnection('aaa','bbb','ccc');
- return $conn;
- }
-}
-</com:TTextHighlighter>
-
-
-<h3 class="prado-specific">Menggunakan <tt>application.xml</tt> di dalam Kerangka Kerja Prado</h3>
-<div class="prado-specific">
-<p id="690488" class="block-content">
- Koneksi database standar dapat juga dikonfigurasi menggunakan tag <tt>&lt;module&gt;</tt> dalam <a href="?page=Configurations.AppConfig">application.xml</a>
- atau <a href="?page=Configurations.PageConfig">config.xml</a> seperti berikut.
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_690151">
-<modules>
- <module class="System.Data.ActiveRecord.TActiveRecordConfig" EnableCache="true">
- <database ConnectionString="pgsql:host=localhost;dbname=test"
- Username="dbuser" Password="dbpass" />
- </module>
-</modules>
-</com:TTextHighlighter>
-<div class="tip"><b class="note">Tip:</b>
- Atribut <tt>EnableCache</tt> ketika disetel ke "true" akan melakukan cache meta data tabel, yakni nama kolom tabel, indeks dan batasan yang disimpan dalam cache dan dipakai ulang. Anda harus membersihkan atau mematikan cache jika Anda ingin melihat perubahan terhadap definisi tabel Anda. <a href="?page=Advanced.Performance#6402">Modul cache</a> juga harus didefinisikan agar cache berfungsi.
-</div>
-</p>
-
-<p id="690489" class="block-content">Properti <tt>ConnectionID</tt> dapat ditetapkan dengan nilai yang terkait ke nilai ID konfigurasi modul <tt>TDataSourceConfig</tt> lain. Ini membolehkan koneksi database yang sama untuk dipakai dalam modul lainnya seperti <a href="?page=Database.SqlMap">SqlMap</a>.
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_690152">
-<modules>
- <module class="System.Data.TDataSourceConfig" id="db1">
- <database ConnectionString="pgsql:host=localhost;dbname=test"
- Username="dbuser" Password="dbpass" />
- </module>
-
- <module class="System.Data.ActiveRecord.TActiveRecordConfig"
- ConnectionID="db1" EnableCache="true" />
-
- <module class="System.Data.SqlMap.TSqlMapConfig"
- ConnectionID="db1" ... />
-</modules>
-</com:TTextHighlighter>
-</p>
-</div>
-
-<h2 id="138050">Mengambil data dari database</h2>
-<p id="690490" class="block-content">
- Kelas <tt>TActiveRecord</tt> menyediakan banyak metode yang sesuai untuk mencari rekaman dari database. Yang paling sederhana adalah mencari satu rekaman yang sama dengan kunci primer atau kunci komposit (kunci primer yang terdiri dari multipel kolom).
- Lihat <com:DocLink ClassPath="System.Data.ActiveRecord.TActiveRecord" /> untuk lebih jelasnya.
-</p>
-
-<div class="info"><b class="note">Info:</b>
-Semua metode finder yang dapat mengembalikan hanya 1 rekaman akan mengembalikan <tt>null</tt> jika tidak ada data yang sama yang ditemukan. Semua metode finder yang mengembalikan array rekaman akan mengembalikan array kosong jika tidak ada data yang ditemukan.
-</div>
-
- <h3 id="138055"><tt>findByPk()</tt></h3>
- <p id="690491" class="block-content">Mencari satu rekaman hanya menggunakan kunci primer atau kunci gabungan.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690153">
-$finder = UserRecord::finder();
-$user = $finder->findByPk($primaryKey);
-
-//ketika tabel menggunakan kunci gabungan
-$record = $finder->findByPk($key1, $key2, ...);
-$record = $finder->findByPk(array($key1, $key2,...));
-</com:TTextHighlighter>
-</p>
-
- <h3 id="138056"><tt>findAllByPks()</tt></h3>
- <p id="690492" class="block-content">Mencari multipel rekaman menggunakan sebuah daftar kunci primer atau kunci gabungan.
-Berikut adalah persamaan untuk kunci primer (kunci primer terdiri dari hanya satu kolom/field).
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690154">
-$finder = UserRecord::finder();
-$users = $finder->findAllByPks($key1, $key2, ...);
-$users = $finder->findAllByPks(array($key1, $key2, ...));
-</com:TTextHighlighter>
-Berikut adalah persamaan untuk kunci gabungan.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690155">
-//ketika tabel menggunakan kunci gabungan
-$record = $finder->findAllByPks(array($key1, $key2), array($key3, $key4), ...);
-
-$keys = array( array($key1, $key2), array($key3, $key4), ... );
-$record = $finder->findAllByPks($keys);
-</com:TTextHighlighter>
-
-
-<h3 id="138057"><tt>find()</tt></h3>
-<p id="690493" class="block-content">Mencari <b>satu rekaman tunggal</b> yang memenuhi kriteria. Kriteria dapat berupa bagian string SQL atau obyek <tt>TActiveRecordCriteria</tt>.</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690156">
-$finder = UserRecord::finder();
-
-//:name dan :pass adalah tempat untuk nilai $name dan $pass tertentu
-$finder->find('username = :name AND password = :pass',
- array(':name'=>$name, ':pass'=>$pass));
-
-//menggunakan tempat posisi
-$finder->find('username = ? AND password = ?', array($name, $pass));
-//same as above
-$finder->find('username = ? AND password = ?', $name, $pass);
-
-//$criteria adalah TActiveRecordCriteria
-$finder->find($criteria); //the 2nd parameter for find() is ignored.
-</com:TTextHighlighter>
-
-<p id="690494" class="block-content">Kelas <tt>TActiveRecordCriteria</tt> mempunyai properti sebagai berikut:
-</p>
- <ul id="u2" class="block-content">
- <li><tt>Parameters</tt> -- pasangan parameter nama nilai.</li>
- <li><tt>OrdersBy</tt> -- pasangan nama kolom dan urutan.</li>
- <li><tt>Condition</tt> -- bagian dari kondisi SQL WHERE.</li>
- <li><tt>Limit</tt> -- jumlah maksimum rekaman diambil.</li>
- <li><tt>Offset</tt> -- ofset rekaman dalam tabel.</li>
- </ul>
-
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690157">
-$criteria = new TActiveRecordCriteria;
-$criteria->Condition = 'username = :name AND password = :pass';
-$criteria->Parameters[':name'] = 'admin';
-$criteria->Parameters[':pass'] = 'prado';
-$criteria->OrdersBy['level'] = 'desc';
-$criteria->OrdersBy['name'] = 'asc';
-$criteria->Limit = 10;
-$criteria->Offset = 20;
-</com:TTextHighlighter>
-
-<div class="note"><b class="note">Catatan:</b>
-Untuk MSSQL dan saat <tt>Limit</tt> serta <tt>Offset</tt> berisi nilai integer positif. Query aktual yang dijalankan diubah oleh kelas
-<com:DocLink ClassPath="System.Data.ActiveRecord.Common.Mssql.TMssqlCommandBuilder"
-Text="TMssqlCommandBuilder"
-/>
-berdasarkan pada
-<a href="http://troels.arvin.dk/db/rdbms/#select-limit-offset">http://troels.arvin.dk/db/rdbms/</a>
-untuk mengemulasikan kondisi <tt>Limit</tt> dan <tt>Offset</tt>.
-</div>
-
-<h3 id="138058"><tt>findAll()</tt></h3>
-<p id="690495" class="block-content">Sama seperti <tt>find()</tt> tapi mengembalikan array obyek.</p>
-
-<h3 id="138059"><tt>findBy*()</tt> dan <tt>findAllBy*()</tt></h3>
-<p id="690496" class="block-content">Metode find dinamis menggunakan bagian dari nama metode sebagai kriteria pencarian.
-Nama metode dimulai dengan <tt>findBy</tt> mengembalikan hanya 1 rekaman dan nama metode yang dimulai dengan <tt>findAllBy</tt> mengembalikan array rekaman.
-Kondisi diambil sebagai bagian dari nama metode setelah <tt>findBy</tt> atau <tt>findAllBy</tt>.
-
-Blok kode berikut adalah sama:
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690158">
-$finder->findByName($name)
-$finder->find('Name = ?', $name);
-</com:TTextHighlighter>
-
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690159">
-$finder->findByUsernameAndPassword($name,$pass);
-$finder->findBy_Username_And_Password($name,$pass);
-$finder->find('Username = ? AND Password = ?', $name, $pass);
-</com:TTextHighlighter>
-
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690160">
-$finder->findAllByAge($age);
-$finder->findAll('Age = ?', $age);
-</com:TTextHighlighter>
-
-<div class="tip"><b class="note">Tip:</b>
-Anda juga dapat menggunakan kombinasi <tt>AND</tt> dan <tt>OR</tt> sebagai kondisi dalam metode dinamis.
-</div>
-
-<h3 id="138060"><tt>findBySql()</tt> dan <tt>findAllBySql()</tt></h3>
-<p id="690497" class="block-content">Mencari rekaman menggunakan SQL penuh di mana <tt>findBySql()</tt> mengembalikan Rekaman Aktif dan <tt>findAllBySql()</tt>mengembalikan array obyek rekaman.
-Untuk setiap kolom yang dikembalikan, kelas Rekaman Aktif terkait harus mendefinisikan variabel atau properti untuk setiap nama kolom terkait.
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class UserRecord2 extends UserRecord
-{
- public $another_value;
-}
-$sql = "SELECT users.*, 'hello' as another_value FROM users";
-$users = TActiveRecord::finder('UserRecord2')->findAllBySql($sql);
-</com:TTextHighlighter>
-</p>
-<h3 id="138061"><tt>count()</tt></h3>
-<p id="690498" class="block-content">Mencari jumlah rekaman yang sama, menerima beberapa parameters seperti metode <tt>findAll()</tt>.</p>
-
-<h2 id="138051">Menyisipkan dan memutakhirkan rekaman</h2>
-<p id="690499" class="block-content">
-Menambah rekaman baru menggunakan TActiveRecord sangat sederhana, cukup buat obyek Rekaman Aktif baru dan panggil metode <tt>save()</tt>. Misalnya
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690161">
-$user1 = new UserRecord();
-$user1->username = "admin";
-$user1->email = "admin@example.com";
-$user1->save(); //sisipkan rekaman baru
-
-$data = array('username'=>'admin', 'email'=>'admin@example.com');
-$user2 = new UserRecord($data); //buat dengan mengirimkan beberapa data yang sudah ada
-$user2->save(); //sisipkan rekaman baru
-</com:TTextHighlighter>
-<div class="tip"><b class="note">Tip:</b>
-Obyek dimutakhirkan dengan kunci primer dari tabel itu yang berisi definisi yang secara otomatis membuat kunci primer untuk rekaman yang baru saja disisipkan.
-Sebagai contoh, jika Anda menyisipkan sebuah rekaman baru ke dalam tabel MySQL yang kolomnya didefinisikan dengan "autoincrement", obyek Rekaman Aktif akan dimutakhirkan dengan nilai yang ditambahkan.</div>
-
-<p id="690500" class="block-content">
-Untuk memutakhirkan rekaman dalam database, cukup ubah satu atau lebih properti obyek Rekaman Aktif yang sudah diambil dari database dan kemudian panggil metode <tt>save()</tt>.
-
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690162">
-$user = UserRecord::finder()->findByName('admin');
-$user->email="test@example.com"; //ubah properti
-$user->save(); //mutakhirkan.
-</com:TTextHighlighter>
-</p>
-
-<p id="710012" class="block-content">
-Obyek Rekaman Aktif mempunyai masa-hidup sederhana seperti digambarkan dalam diagram berikut.
-</p>
-<img src=<%~ object_states.png %> alt="Active Records Life Cycle" id="fig:cycle.png" class="figure"/>
-<p id="690501" class="block-content">
-Kita melihat bahwa obyek TActiveRecord baru dibuat dengan menggunakan salah satu metode <tt>find*()</tt> ataupun membuat turunan baru dengan menggunakan kata kunci PHP <tt>new</tt>. Obyek yang dibuat dengan metode <tt>find*()</tt> dimulai dengan kondisi <tt>clean</tt>. Turunan baru TActiveRecord membuat selain metode <tt>find*()</tt> yang dimulai dengan kondisi <tt>new</tt>.
-Kapan saja Anda memanggil metode <tt>save()</tt> pada obyek TActiveRecord, obyek memasuki keadaan <tt>clean</tt>. Obyek dalam <tt>clean</tt> menjadi <tt>dirty</tt> ketika satu atau lebih keadaan internalnya diubah. Pemanggilan metode <tt>delete()</tt> pada obyek mengakhiri masa-hidup obyek, tidak ada aksi lanjutan yang dilakukan pada obyek.
-</p>
-
-<h2 id="138052">Menghapus rekaman yang sudah ada</h2>
-<p id="690502" class="block-content">
- Untuk menghapus rekaman yang sudah ada dan diambil, cukup panggil metode <tt>delete()</tt>.
- Anda juga dapat menghapus rekaman dalam database dengan kunci primer tanpa mengambil rekaman apapun menggunakan metode <tt>deleteByPk()</tt> (dan metode yang sama <tt>deleteAllByPks()</tt>).
- Sebagai contoh, untuk menghapus satu atau beberapa rekaman dengan menggunakan satu atau lebih kunci primer.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690163">
-$finder->deleteByPk($primaryKey); //hapus 1 rekaman
-$finder->deleteAllByPks($key1,$key2,...); //hapus multipel rekaman
-$finder->deleteAllByPks(array($key1,$key2,...)); //hapus multipel rekaman
-</com:TTextHighlighter>
-
-<p id="690503" class="block-content">
-Untuk kunci gabungan (ditentukan secara otomatis dari definisi tabel):
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690164">
-$finder->deleteByPk(array($key1,$key2)); //hapus 1 rekaman
-
-//hapus multipel rekaman
-$finder->deleteAllByPks(array($key1,$key2), array($key3,$key4),...);
-
-//hapus multipel rekaman
-$finder->deleteAllByPks(array( array($key1,$key2), array($key3,$key4), .. ));
-</com:TTextHighlighter>
-
-<h3 id="138052a"><tt>deleteAll()</tt> dan <tt>deleteBy*()</tt></h3>
-<p id="690502a" class="block-content">
-Untuk menghapus dengan kriteria, gunakan <tt>deleteAll($criteria)</tt> dan <tt>deleteBy*()</tt>
-yang sintaksnya mirip dengan <tt>findAll($criteria)</tt> dan <tt>findAllBy*()</tt> seperti dijelaskan di atas.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690163a">
-//hapus semua rekaman dengan Name yang sama
-$finder->deleteAll('Name = ?', $name);
-$finder->deleteByName($name);
-
-//hapus dengan username dan password
-$finder->deleteBy_Username_And_Password($name,$pass);
-</com:TTextHighlighter>
-
-<h2 id="138053">Transaksi</h2>
-<p id="690504" class="block-content">Semua obyek Rekaman Aktif berisi properti <tt>DbConnection</tt> yang dapat dipakai untuk mendapatkan obyek transaksi.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690165">
-$finder = UserRecord::finder();
-$finder->DbConnection->Active=true; //buka bila perlu
-$transaction = $finder->DbConnection->beginTransaction();
-try
-{
- $user = $finder->findByPk('admin');
- $user->email = 'test@example.com'; //ubah obyek $user
- $user->save();
- $transaction->commit();
-}
-catch(Exception $e) // eksepsi dimunculkan jika query gagal
-{
- $transaction->rollBack();
-}
-</com:TTextHighlighter>
-
-<h2 id="142011">Event</h2>
-<p id="710013" class="block-content">
-TActiveRecord menawarkan dua event, <tt>OnCreateCommand</tt> dan <tt>OnExecuteCommand</tt>.
-</p>
-
-<p id="710014" class="block-content">Event <tt>OnCreateCommand</tt> dimunculkan ketika perintah disiapkan dan penyatuan parameter lengkap. Obyek parameter adalah <tt>TDataGatewayEventParameter</tt> di mana properti
-<tt>Command</tt> bisa diperiksa agar SQL query dijalankan.
-</p>
-
-<p id="710015" class="block-content">
-Event <tt>OnExecuteCommand</tt> dimunculkan ketika perintah dijalankan dan hasil dari database dikembalikan. Obyek parameter <tt>TDataGatewayResultEventParameter</tt>
-dari properti <tt>Result</tt> berisi data yang dikembalikan dari database.
-Data yang dikembalikan dapat diubah dengan setelan properti <tt>Result</tt>.
-</p>
-
-<h3 id="142016">Contoh Pencatatan</h3>
-<p id="710016" class="block-content">Menggunakan <tt>OnExecuteCommand</tt> kita dapat menempelkan pengendali event untuk mencatat seluruh query SQL yang dijalankan untuk kelas TActiveRecord atau turunan yang diberikan. Sebagai contoh, kita mendefinisikan sebuah basis kelas dan mengganti <tt>getDbConnection()</tt> atau konstruktornya.
-</p>
-
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class MyDb1Record extends TActiveRecord
-{
- public function getDbConnection()
- {
- static $conn;
- if($conn===null)
- {
- $conn = new TDbConnection('xxx','yyy','zzz');
- $this->OnExecuteCommand[] = array($this,'logger');
- }
- return $conn;
- }
- public function logger($sender,$param)
- {
- var_dump($param->Command->Text);
- }
-}
-//alternatifnya sebagai per turunan dari per obyek finder
-function logger($sender,$param)
-{
- var_dump($param->Command->Text);
-}
-TActiveRecord::finder('MyRecord')->OnExecuteCommand[] = 'logger';
-$obj->OnExecuteCommand[] = array($logger, 'log'); //setiap PHP callback yg benar.
-</com:TTextHighlighter>
-
-<h1 id="ar_relations">Hubungan Rekaman Aktif</h1>
-<com:SinceVersion Version="3.1rc1" />
-<p id="690504a" class="block-content">
-Implementasi Rekaman Aktif Prado mendukung pemetaan kunci asing untuk database
-yang mendukung batasan kunci asing. Agar hubungan Rekaman Aktif berfungsi, database di bawahnya harus mendukung batasan kunci asing (misalnya MySQL menggunakan InnoDB).
-</p>
-
-<p id="710017" class="block-content">
-Dalam bagian berikut kita akan menganggap hubungan tabel antara
-<tt>Teams</tt>, <tt>Players</tt>, <tt>Skills</tt> dan <tt>Profiles</tt>.
-</p>
-<img src=<%~ ar_relations.png %> class="figure" />
-
-
-<p id="710018" class="block-content">Tujuannya adalah untuk mendapatkan model obyek yang mewakili ke beberapa derajat hubungan entitas dalam gambar di atas.
-</p>
-
-<img src=<%~ ar_objects.png %> class="figure" />
-
-<p class="block-content">
-Ada ketidak cocokan antara hubungan dengan obyek dan hubungan tabel. Pertama, ada perbedaan dalam penyajian. Penghubung kendali obyek dengen menyimpan referensi yang dipegang oleh lingkungan memori-teratur runtime. Database relasional menangani kaitan dengan membentuk sebuah kunci ke dalam tabel lainnya. Keuda, obyek dapat dengan mudah menggunakan koleksi guna menangani multipel referensi dari satu field, sementara normalisasi memaksa seluruh relasi entitas mengaitkan ke nilai tunggal. Ini menyebabkan pembalikan struktur data antara obyek dan tabel. Pendekatan yang diambil dalam desain Rekaman Aktif Prado adalah untuk menggunakan batasan kunci asing guna memperoleh hubungan obyek. Ini berarti bahwa database di bawahnya harus mendukung batasan kunci asing.
-</p>
-<div class="tip"><b class="note">Tip:</b>
-Untuk database SQLite, Anda dapat membuat tabel yang mendefinisikan batasan kunci asing seperti contoh di bawah ini. Akan tetapi, batasan ini <b>TIDAK</b>
-dipaksakan oleh database SQLite itu sendiri.
-<com:TTextHighlighter Language="sql" CssClass="source block-content">
-CREATE TABLE foo
-(
- id INTEGER NOT NULL PRIMARY KEY,
- id2 CHAR(2)
-);
-CREATE TABLE bar
-(
- id INTEGER NOT NULL PRIMARY KEY,
- foo_id INTEGER
- CONSTRAINT fk_foo_id REFERENCES foo(id) ON DELETE CASCADE
-);
-</com:TTextHighlighter>
-</div>
-
-<h2 id="142012">Pemetaan Kunci Asing</h2>
-<p class="block-content">Hubungan entitas antara tabel <tt>Teams</tt> dan <tt>Players</tt> adalah apa yang dikenal sebagai hubungan 1-M. Yaitu, satu Tim dapat berisi 0 atau lebih Pemain. Dalam batasan hubungan obyek, kita katakan bahwa obyek <tt>TeamRecord</tt> <b>memiliki banyak</b> obyek <tt>PlayerRecord</tt>.
-(Perhatikan kebalikan dari arah hubungan antara tabel dan obyek.)
-<p id="710019" class="block-content">
-
-<h3 id="142017">Hubungan Has Many</h3>
-<p id="710020" class="block-content">
-Kita membuat model obyek <tt>Team</tt> sebagai kelas Rekaman Aktif berikut.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class TeamRecord extends TActiveRecord
-{
- const TABLE='Teams';
- public $name;
- public $location;
-
- public $players=array(); // deklarasi ini tidak diperlukan lagi sejak v3.1.2
-
- //mendefinisikan anggota $player yang memiliki hubungan banyak dengan PlayerRecord
- public static $RELATIONS=array
- (
- 'players' => array(self::HAS_MANY, 'PlayerRecord', 'team_name'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
-</com:TTextHighlighter>
-<p id="710021" class="block-content">
-Properti statis <tt>$RELATIONS</tt> dari <tt>TeamRecord</tt> mendefinisikan bahwa properti <tt>$players</tt> <b>has many</b> <tt>PlayerRecord</tt>. Multipel hubungan dibolehkan dengan mendefinisikan setiap hubungan dengan sebuah entitas dalam array <tt>$RELATIONS</tt> di mana kunci array untuk entri menunjukan nama properti.
-Dalam <tt>array(self::HAS_MANY, 'PlayerRecord')</tt>, elemen pertama mendefinisikan tipe hubungan, tipe yang benar adalah <tt>self::HAS_MANY</tt>,
-<tt>self::HAS_ONE</tt> dan <tt>self::BELONGS_TO</tt>.
-Elemen kedua adalah string <tt>'PlayerRecord'</tt> yang menunjukan nama kelas dari kelas <tt>PlayerRecord</tt>.
-</p>
-
-<div class="note"><b class="note">Catatan:</b>
-Seperti dijelaska dalam komentar kode di atas, sejak versi <b>3.1.2</b>, properti terkait tidak tidak lagi perlu dideklarasikan secara eksplisit. Standarnya, akan secara implisit dideklarasikan berdasarkan pada kunci array <tt>$RELATIONS</tt>. Keuntungan utama atas properti terkait yang dideklarasikan secara implisit adalah obyek terkait dapat diambil secara otomatis dengan cara malas. Sebagai contoh, anggap kita mempunyai <tt>TeamRecord</tt> turunan <tt>$team</tt>. Kita dapat mengakses players via <tt>$team->players</tt>,
-meskipun kita tidak pernah menerbitkan perintah mengambil untuk players. Jika <tt>$players</tt> dideklarasikan secara eksplisit, kita harus menggunakan pendekatan <tt>with</tt> seperti dijelaskan dalam contoh berikut untuk mengambil rekaman player.
-</div>
-
-<p id="710022" class="block-content">
-Batasan kunci asing tabel <tt>Players</tt> dipakai untuk menentukan nama kunci tabel <tt>Teams</tt> terkait. Ini dikerjakan secara otomatis, ditangani dalam Rekaman Aktif dengan memeriksa definisi tabel <tt>Players</tt> dan <tt>Teams</tt>.
-</p>
-
-<div class="info"><b class="note">Info:</b>
-Sejak versi <b>3.1.2</b>, Rekaman Aktif mendukung multipel referensi kunci asing pada tabel yang sama. Kerancuan diantara multipel referensi kunci asing dipecahkan dengan penyediaan nama kolom kunci asing sebagai parameter ke-3 dalam array relationship.
-Sebagai contoh, kedua kunci asing <tt>owner_id</tt> dan <tt>reporter_id</tt>
-merujuk tabel yang sama, didefinisikan dalam <tt>UserRecord</tt>.
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class TicketRecord extends TActiveRecord
-{
- public $owner_id;
- public $reporter_id;
-
- public $owner; // deklarasi ini tidak diperlukan lagi sejak v3.1.2
- public $reporter; // deklarasi ini tidak diperlukan lagi sejak v3.1.2
-
- public static $RELATION=array
- (
- 'owner' => array(self::BELONGS_TO, 'UserRecord', 'owner_id'),
- 'reporter' => array(self::BELONGS_TO, 'UserRecord', 'reporter_id'),
- );
-}
-</com:TTextHighlighter>
-Ini berlaku untuk hubungan termasuk <tt>BELONGS_TO</tt>, <tt>HAS_ONE</tt> dan
-<tt>HAS_MANY</tt>. Lihat seksi <a href="#142021">Tabel Asosiaasi Merujuk Dirinya Sendiri</a> untuk memecahkan kerancuan atas hubungan <tt>MANY_TO_MANY</tt>.
-</div>
-
-<p id="710023" class="block-content">Hubungan "has many" tidak diambil secara otomatis ketika Anda menggunakan salah satu metode finder Rekaman Aktif.
-Anda perlu untuk mengambil secara eksplisit obyek terkait seperti berikut. Dalam kode di bawah ini, kedua baris adalah sama dan nama metode tidak sensitif huruf.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-$team = TeamRecord::finder()->withPlayers()->findAll();
-$team = TeamRecord::finder()->with_players()->findAll(); //equivalent
-</com:TTextHighlighter>
-<p id="710024" class="block-content">
-Metode <tt>with_xxx()</tt> (di mana <tt>xxx</tt> adalah nama properti hubungan, dalam hal ini, <tt>players</tt>) mengambil PlayerRecords terkait menggunakan query kedua (bukan menggunakan join). <tt>with_xxx()</tt> menerima argumen yang sama seperti metode finder lainnya dari TActiveRecord, misalnya <tt>with_players('age = ?', 35)</tt>.
-</p>
-
-<div class="note"><b class="note">Catatan:</b>
-Penting untuk dimengerti bahwa obyek terkait diambil menggunakan query tambahan. Query pertama mengambil obyek sumber, misalnya <tt>TeamRecord</tt> dalam contoh kode di atas.
-Query kedua dipakai untuk mengambil obyek <tt>PlayerRecord</tt> terkait.
-Penggunaan dua query mirip dengan query tunggal menggunakan Left-Outer join dengan eksepsi bahwa hasil null pada tabel kanan tidak dikembalikan. Konsekuensi pemakaian dua tau lebih query adalah kondisi agregat dan join tidak layak menggunakan Rekaman Aktif. Untuk query di luar lingkup Rekaman Aktif, <a href="?page=Database.SqlMap">Pemeta Data SqlMap</a> diapat dupertimbangkan.
-</div>
-
-<div class="info"><b class="info">Info:</b>
-Pendekatan <tt>with</tt> di atas juga bekerja dengan properti terkait yang dideklarasikan secara implisit (diperkenalkan dalam versi 3.1.2). Lalu apa perbedaan antara pendekatan <tt>with</tt> dan pendekatan pengambilan malas? Pengambilan malas berarti kita menerbitkan query SQL jika obyek terkait awalnya diakses dan tidak siap,
-sementara query pendekatan <tt>with</tt> untuk obyek terkait sekaligus, tida peduli obyek terkait diakses atau tidak. Pendekatan pengambilan malas sangat cocok karena kita tidak perlu secara eksplisit mengambil obyek terkait, sementara pendekatan <tt>with</tt> lebih efisien jika multipel rekaman yang dikembalikan, masing-masing dengan beberapa obyek terkait.
-</div>
-
-<h3 id="142018">Hubungan Belongs To</h3>
-<p id="710025" class="block-content">Hubungan "has many" dalam bagian di atas mendefinisikan koleksi obyek asing. Dalam keadaan tertentu, kita mempunyai <tt>TeamRecord</tt> memiliki banyak (nol atau lebih) obyek <tt>PlayerRecord</tt>. Kita juga dapat menambah penunjuk kembali dengan menambahkan properti dalam kelas <tt>PlayerRecord</tt> yang mengaitkan kembali ke obyek <tt>TeamRecord</tt>, secara efektif membuat asosiasi dua arah.
-Kita katakan bahwa properti <tt>$team</tt> dalam kelas <tt>PlayerRecord</tt> <tt>belongs to</tt> obyek <tt>TeamRecord</tt>.
-Kode berikut mendefinisikan kelas <tt>PlayerRecord</tt> lengkap dengan 3 hubungan.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class PlayerRecord extends TActiveRecord
-{
- const TABLE='Players';
- public $player_id;
- public $age;
- public $team_name;
-
- public $team; // deklarasi ini tidak diperlukan lagi sejak v3.1.2
- public $skills=array(); // deklarasi ini tidak diperlukan lagi sejak v3.1.2
- public $profile; // deklarasi ini tidak diperlukan lagi sejak v3.1.2
-
- public static $RELATIONS=array
- (
- 'team' => array(self::BELONGS_TO, 'TeamRecord', 'team_name'),
- 'skills' => array(self::MANY_TO_MANY, 'SkillRecord', 'Player_Skills'),
- 'profile' => array(self::HAS_ONE, 'ProfileRecord', 'player_id'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
-</com:TTextHighlighter>
-<p id="710026" class="block-content">
-Properti <tt>$RELATIONS</tt> dari <tt>PlayerRecord</tt> mendefinisikan properti <tt>$team</tt> <b>milik</b> <tt>TeamRecord</tt>.
-Array <tt>$RELATIONS</tt> juga mendefinisikan dua hubungan lainnya yang nanti akan kita uji dalam seksi di bawah ini.
-Dalam <tt>array(self::BELONGS_TO, 'TeamRecord')</tt>, elemen pertama mendefinisikan tipe hubungan, dalam hal ini <strong><tt>self::BELONGS_TO</tt></strong> dan
-elemen kedua adalah string <tt>'TeamRecord'</tt> yang terkait ke nama kelas dari kelas <tt>TeamRecord</tt>.
-Obyek pemain dengan obyek tim terkait dapat diambil serperti berikut.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-$players = PlayerRecord::finder()->with_team()->findAll();
-</com:TTextHighlighter>
-
-<p id="710027" class="block-content">
- Metode <tt>with_xxx()</tt> (di mana <tt>xxx</tt> adalah nama properti hubungan dalam hal ini, <tt>team</tt>) mengambil <tt>TeamRecords</tt> terkait menggunakan query kedua (bukan menggunakan join). <tt>with_xxx()</tt> menerima argumen yang sama seperti metode finder lainnya dari <tt>TActiveRecord</tt>, contohnya <tt>with_team('location = ?', 'Madrid')</tt>.
-</p>
-
-<div class="tip"><b class="note">Tip:</b>
-Hubungan tambahan dapat diambil dengan mengaitkan <tt>with_xxx()</tt> bersama seperti yang didemonstrasikan berikut.
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-$players = PlayerRecord::finder()->with_team()->with_skills()->findAll();
-</com:TTextHighlighter>
-Setiap metode <tt>with_xxx()</tt> akan menjalankan query SQL tambahan. Setiap <tt>with_xxx()</tt> menerima argumen mirip dengan apa yang ada di dalam metode <tt>findAll()</tt> dan hanya diterapkan ke query hubungan tertentu tersebut.
-</div>
-
-<p id="710028" class="block-content">Hubungan "belongs to" dari kelas <tt>ProfileRecord</tt> didefinisikan hampir sama.</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class ProfileRecord extends TActiveRecord
-{
- const TABLE='Profiles';
- public $player_id;
- public $salary;
-
- public $player; // deklarasi ini tidak diperlukan lagi sejak v3.1.2
-
- public static $RELATIONS=array
- (
- 'player' => array(self::BELONGS_TO, 'PlayerRecord'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
-</com:TTextHighlighter>
-
-<p id="710029" class="block-content">Intinya, ada hubungan "<b>belongs to</b>" untuk obyek yang mengaitkan entitas yang memmpunyai kolom yakni kunci asing. Dalam keadaan tertentu, kita melihat bahwa tabel <tt>Profiles</tt> mempunyai batasan kunci asing pada kolom <tt>player_id</tt> yang terkait ke tabel
-<tt>Players</tt> kolom <tt>player_id</tt>. Selanjutnya, obyek <tt>ProfileRecord</tt>
-memiliki properti (<tt>$player</tt>) yang adalah <b>milik</b> obyek <tt>PlayerRecord</tt>.
-Demikian juga, tabel <tt>Players</tt> mempunyai batasan kunci asing pada kolom <tt>team_name</tt> yang terkait ke tabel <tt>Teams</tt> kolom <tt>name</tt>.
-Kemudian, obyek <tt>PlayerRecord</tt> mempunyai properti (<tt>$team</tt>) yang adalah <b>milik</b> obyek <tt>TeamRecord</tt>.
-</p>
-
-<h3 id="142019">Hubungan Has One</h3>
-<p id="710030" class="block-content">Hubungan entitas antara <tt>Players</tt> dan <tt>Profiles</tt> adalah satu ke satu. Yaitu, setiap obyek
-<tt>PlayerRecord</tt> <b>has one</b> obyek <tt>ProfileRecord</tt> (mungkin tidak ada atau null).
-Hubungan <b>has one</b> hampir identik ke hubungan <b>has many</b> dengan eksepsi bahwa obyek terkait hanya satu obyek (bukan koleksi obyek).
-</p>
-
-<h3 id="142020">Hubungan Leluhur Anak</h3>
-<p id="710031" class="block-content">Hubungan leluhur anak bisa didefinisikan menggunakan kombinasi hubungan <tt>has many</tt> dan <tt>belongs to</tt> yang
-merujuk ke kelas yang sama. Contoh berikut memperlihatkan hubungan leluhur dan anaknya antara "kategori" dan "leluhur kategori".
-</p>
-
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class Category extends TActiveRecord
-{
- public $cat_id;
- public $category_name;
- public $parent_cat_id;
-
- public $parent_category; // deklarasi ini tidak diperlukan lagi sejak v3.1.2
- public $child_categories=array(); // deklarasi ini tidak diperlukan lagi sejak v3.1.2
-
- public static $RELATIONS=array
- (
- 'parent_category' => array(self::BELONGS_TO, 'Category', 'parent_cat_id'),
- 'child_categories' => array(self::HAS_MANY, 'Category', 'parent_cat_id'),
- );
-}
-</com:TTextHighlighter>
-
-<h3>Kriteria Query untuk Obyek Terkait</h3>
-<p>
-Dalam contoh di atas, kami memperlihatkan bahwa obyek Rekaman Aktif dapat mereferensi ke obyek terkaitnya sendiri dengan
-mendeklarasikan anggota kelas statis $RELATIONS yang menetapkan sebuah daftar relasi. Setiap relasi
-ditetapkan sebagai array yang terdiri dari tiga elemen: tipe relasi, nama kelas AR terkait,
-dan kunci asing. Sebagai contoh, kami menggunakan <tt>array(self::HAS_MANY, 'PlayerRecord', 'team_name')</tt>
-untuk menetapkan pemain dalam sebuah tim. Ada dua elemen opsional berikutnya yang dapat ditetapkan
-dalam array ini: kondisi query (elemen keempat) dan parameters (elemen kelima).
-Elemen tersebut dipakai untuk mengontrol bagaimana untuk melakukan query terhadap obyek terkait. Sebagai contoh, jika kita ingin memperoleh
-para pemain yang diurut dengan usianya, kita dapat menetapkan <tt>array(self::HAS_MANY, 'PlayerRecord', 'team_name', 'ORDER BY age')</tt>.
-Jika kita ingin mendapatkan para pemain yang usianya kurang dari 30, kita dapat menggunakan
-<tt>array(self::HAS_MANY, 'PlayerRecord', 'team_name', 'age<:age', array(':age'=>30))</tt>. Secara umum,
-dua elemen tambahan ini mirip seperti parameter yang dikirimkan ke metode <tt>find()</tt> dalam AR.
-</p>
-
-<h2 id="142013">Pemetaan Tabel Asosiasi</h2>
-<p id="710032" class="block-content">
-Obyek dapat dengan mudah menangani field multi nilai dengan menggunakan koleksi sebagai nilai field. Database relasional tidak memiliki fitur ini dan dibatasi hanya ke field nilai-tunggal. Ketika Anda memetakan asosiasi satu-ke-banyak, Anda bisa menangani ini menggunakan hubungan <b>has many</b>, intinya menggunakan kunci asing untuk nilai-tunggal akhir dari asosiasi. Tapi asosiasi banyak-ke-banyak tidak bisa melakukan ini karena tidak ada nilai-tunggal akhir ke kunci asing yang dipegangnya.
-</p>
-<p id="710033" class="block-content">
-Jawabannya adalah resolusi klasik yang telah dipakai oleh orang selama dekade ini yakni: buat tabel ekstra (tabel asosiasi) untuk merekam asosiasi.
-Ide dasarnya adalah menggunakan tabel asosiasi untuk menyimpan asosiasi. Tabel ini memiliki ID kunci asing untuk dua tabel yang dikaitkan bersama, masing-masing memiliki pasangan dari obyek yang diasosiasikan.
-</p>
-<p id="710034" class="block-content">
-Tabel asosiasi tidak mempunyai kaitan obyek dalam-memori dan kunci primernya adalah gabungan dari dua kunci primer dari tabel yang diasosiasikan.
-Dalam batasan yang sederhana, tuntuk mengambil data dari tabel asosiasi, Anda melakukan dua query (secara umum, ini juga bisa dicapai menggunakan satu query yang terdiri dari join).
-Anggap pengambilan koleksi <tt>SkillRecord</tt> untuk daftar obyek <tt>PlayerRecord</tt>.
-Dalam hal ini, Anda melakukan query dalam dua tahap. Tahap pertama meng-query tabel <tt>Players</tt> untuk mencari seluruh baris dari pemain yang Anda inginkan. Tahap kedua mencari obyek <tt>SkillRecord</tt> ID pemain terkait untuk setiap barisnya dalam tabel asosiasi <tt>Player_Skills</tt> menggunakan sebuah inner join.
-</p>
-
-<p id="710035" class="block-content">Desain Rekaman Aktif Prado mengimplementasikan dua tahap pendekatan. Untuk hubungan entitas <tt>Players</tt>-<tt>Skills</tt> M-N (many-to-many), kita perlu mendefinisikan sebuah hubungan <b>has many</b> dalam kelas <tt>PlayerRecord</tt> dan sebagai tambahan mendefinisikan hubungan <b>has many</b> dalam kelas <tt>SkillRecord</tt> juga.
-Kode contoh berikut mendefinisikan kelas <tt>SkillRecord</tt> lengkap dengan hubungan banyak-ke-banyak dengan kelas <tt>PlayerRecord</tt>. (Lihat definisi kelas <tt>PlayerRecord</tt> di atas untuk mengaitkan hubungan banyak-ke-banyak dengan kelas <tt>SkillRecord</tt>.)
-</p>
-
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class SkillRecord extends TActiveRecord
-{
- const TABLE='Skills';
- public $skill_id;
- public $name;
-
- public $players=array(); // deklarasi ini tidak diperlukan lagi sejak v3.1.2
-
- public static $RELATIONS=array
- (
- 'players' => array(self::MANY_TO_MANY, 'PlayerRecord', 'Player_Skills'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
-</com:TTextHighlighter>
-
-<p id="710036" class="block-content">
-Properti statis <tt>$RELATIONS</tt> dari SkillRecord mendefinisikan bahwa properti <tt>$players</tt> memiliki banyak <tt>PlayerRecord</tt>s melalui tabel asosiasi '<tt>Player_Skills</tt>'.
-Dalam <tt>array(self::MANY_TO_MANY, 'PlayerRecord', 'Player_Skills')</tt>, elemen pertama mendefinisikan tipe hubungan, dalam hal ini <strong><tt>self::HAS_MANY</tt></strong>,
-elemen kedua adalah string <tt>'PlayerRecord'</tt> yang terkait ke nama kelas dari kelas <tt>PlayerRecord</tt>, dan elemen ketiga adalah nama dari nama tabel asosiasi.
-</p>
-
-<div class="note"><b class="note">Catatan:</b>
-Sebelum versi <b>3.1.2</b> (versi sampai dengan 3.1.1), hubungan many-to-many didefinisikan menggunakan <tt>self::HAS_MANY</tt>. Untuk versi <b>3.1.2</b> dan seterusnya, ini harus diubah ke <tt>self::MANY_TO_MANY</tt>. Ini bisa dikerjakan dengan mencari <tt>HAS_MANY</tt> dalam kode sumber dan hati-hati mengubah definisi terkait.
-</div>
-
-<p id="710037" class="block-content">
-Daftar obyek pemain dengan koleksi obyek skil terkait bisa diambil seperti berikut.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-$players = PlayerRecord::finder()->withSkills()->findAll();
-</com:TTextHighlighter>
-<p id="710038" class="block-content">
-Metode <tt>with_xxx()</tt> (di mana <tt>xxx</tt> adalah nama properti hubungan, dalam hal ini, <tt>Skill</tt>) mengambil <tt>SkillRecords</tt> terkait menggunakan query kedua (tidak dengan menggunakan join). <tt>with_xxx()</tt> menerima argumen yang sama seperti metode finder dari <tt>TActiveRecord</tt>.
-</p>
-
-<h3 id="142021">Tabel Asosiasi Mereferensi Dirinya</h3>
-<p id="710039" class="block-content">
-Untuk tabel asosiasi yang mererefensi dirinya sendiri, yaitu titik asosiasi ke tabel yang sama. Sebagai contoh, anggap tabel <tt>items</tt> dengan item terkait M-N melalui tabel asosiasi <tt>related_items</tt>. Sintaks dalam contoh berikut adalah benar untuk database PostgreSQL. Untuk database lain, lihat dokumentasinya masing-masing untuk mendefinisikan batasan kunci asing.
-<com:TTextHighlighter Language="sql" CssClass="source block-content">
-CREATE TABLE items
-(
- "item_id" SERIAL,
- "name" VARCHAR(128) NOT NULL,
- PRIMARY KEY("item_id")
-);
-CREATE TABLE "related_items"
-(
- "item_id" INTEGER NOT NULL,
- "related_item_id" INTEGER NOT NULL,
- CONSTRAINT "related_items_pkey" PRIMARY KEY("item_id", "related_item_id"),
- CONSTRAINT "related_items_item_id_fkey" FOREIGN KEY ("item_id")
- REFERENCES "items"("item_id")
- ON DELETE CASCADE
- ON UPDATE NO ACTION
- NOT DEFERRABLE,
- CONSTRAINT "related_items_related_item_id_fkey" FOREIGN KEY ("related_item_id")
- REFERENCES "items"("item_id")
- ON DELETE CASCADE
- ON UPDATE NO ACTION
- NOT DEFERRABLE
-);
-</com:TTextHighlighter>
-
-<p id="710040" class="block-content">Nama tabel asosiasi dalam elemen ketiga dari array hubungan dapat berisi nama kolom tabel asing. Kolom yang didefinisikan dalam tabel asosiasi harus juga didefinisikan dalam kelas rekaman (contohnya properti <tt>$related_item_id</tt> terkait ke kolom <tt>related_item_id</tt> dalam tabel <tt>related_items</tt>).
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class Item extends TActiveRecord
-{
- const TABLE="items";
- public $item_id;
- public $details;
-
- //id item asing tambahan didefinisikan dalam tabel asosiasi
- public $related_item_id;
- public $related_items=array(); // deklarasi ini tidak diperlukan lagi sejak v3.1.2
-
- public static $RELATIONS=array
- (
- 'related_items' => array(self::MANY_TO_MANY,
- 'Item', 'related_items.related_item_id'),
- );
-}
-</com:TTextHighlighter>
-<div class="tip"><b class="note">Tip:</b>
-Kunci gabungan dalam tabel asing dapat ditetapkan sebagai nilai dipisahkan koma diantara kurung buka/tutup. Contohnya <tt>'related_items.(id1,id2)'</tt>.
-</div>
-
-<!---
-<h2 id="142014">Menambah/Menghapus/Memutakhirkan Obyek Terkait</h2>
-
-<p id="710041" class="block-content">Obyek terkait dapat disisipkan/dimutakhirkan dengan menambahkan obyek terkait itu ke obyek sumber saat ini (misalnya obyek yang saat ini sedang bekerja) dan kemudian memanggil metode <tt>save()</tt> pada obyek sumber. Referensi obyek terkait dan referensi asosiasi (jika diperlukan) akan ditambahkan dan/atau dimutakhirkan.
-Sebagai contoh, untuk menambah dua pemain baru ke tim (mengasumsikan bahwa 'Team A' ada), kita cukup melakukan hal berikut.
-</p>
-
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-$team = TeamRecord::finder()->findByPk('Team A');
-$team->players[] = new PlayerRecord(array('age'=>20));
-$team->players[] = new PlayerRecord(array('age'=>25));
-$team->save();
-</com:TTextHighlighter>
-<p id="710042" class="block-content">
-Karena kelas <tt>TeamRecord</tt> berisi hubungan <b>has many</b> dengan <tt>PlayerRecord</tt>, maka menyimpan obyek <tt>TeamRecord</tt> juga akan memutakhirkan obyek asing terkait dalam array <tt>$players</tt>. Yaitu, obyek dalam <tt>$players</tt> disisipkan/dimutakhirkan dalam database dan properti
-<tt>$team_name</tt>, obyek itu akan berisi nilai kunci asing yang terkait dengan obyek nilai kunci primer <tt>$team</tt>.
-</p>
-
-<p id="710043" class="block-content">Untuk menghapus obyek asing tertentu (atau setiap obyek Rekaman Aktif), cukup panggil metode obyek <tt>delete()</tt>. Anda dapat menyiapkan batas kunci asing tabel database seperti saat menghapus data tertentu dalam database ia akan menghapus data yang direferensi juga (ia juga dapat dicapai dengan menggunakan pemicu database). Contohnya seperti mempunyai batasan "<tt>ON DELETE CASCADE</tt>".
-Menghapus kunci obyek asing dengan menyetel nilai properti ke null atau menghapus obyek dari array <b>TIDAK</b> akan menghapus data terkait dalam database.
-</p>
-
-<p id="710044" class="block-content">Untuk menghapus asosiasi hubungan banyak-ke-banyak melalui tabel asosiasi, Rekaman Aktif yang terkait tabel asosiasi yang bisas dipakai. Kemudian asosiasi dapat dihapus dengan memanggil metode <tt>deleteByPk()</tt>, sebagai contoh:
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-PlayerSkillAssocation::finder()->deleteByPk(array('fk1','fk2'));
-//di mana 'fk1' adalah nilai kunci primer dari seorang player
-// dan 'fk2' adalah nilai kunci primer dari skill
-</com:TTextHighlighter>
---->
-
-<h2 id="142015">Pengambilan Malas Obyek Terkait</h2>
-
-<div class="note"><b class="note">Catatan:</b>
-Secara implisit mendeklarasikan properti terkait yang diperkenalkan dalam versi 3.1.2 secara otomatis memiliki fitur pengambilan malas. Oleh karena itu, teknik pengambilan malas dijelaskan berikut ini tidak lagi diperlukan dalam banyak kasus, kecuali Anda ingin memanipulasi obyek terkait melalui pengambil/penyetel.
-</div>
-
-<p id="710045" class="block-content">Menggunakan metode <tt>with_xxx()</tt> akan mengambil hubungan rekaman sesuai permintaan. Mengambil rekaman terkait dengan lazy loading (yaitu, hanya obyek terkait itu saja yang diakses) bisa dicapai dengan menggunakan sebuah fitur <tt>TComponent</tt> yang menyediakan metode pengakses. Dalam keadaan tertentu, kita mendefinisikan pasangan metode pengambil dan penyetel di mana metode pengambil akan mengambil hubungan secara kondisional. Contoh berikut menggambarkan bahwa <tt>PlayerRecord</tt> dapat mengambil obyek asing <tt>$skills</tt> secara kondisional.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class PlayerRecord extends BaseFkRecord
-{
- //... properti dan metode lainnya seperti sebelumnya
-
- private $_skills; //ubah ke private dan standar sebagai null
-
- public function getSkills()
- {
- if($this->_skills===null && $this->player_id !==null)
- {
- //lazy load rekaman skill
- $this->setSkills($this->withSkills()->findByPk($this->player_id)->skills);
- }
- else if($this->_skills===null)
- {
- //buat TList baru;
- $this->setSkills(new TList());
- }
-
- return $this->_skills;
- }
-
- public function setSkills($value)
- {
- $this->_skills = $value instanceof TList ? $value : new TList($value);
- }
-}
-</com:TTextHighlighter>
-<p id="710046" class="block-content">Pertama kita perlu mengubah deklarasi <tt>$skills=array()</tt> ke properti private <tt>$_skills</tt> (perhatikan garis bawah) dan sebaliknya setel ke null. Ini membolehkan kita untuk mendefinisikan properti <tt>skills</tt> menggunakan metode pengambil/penyetel
-(lihat <a href="?page=Fundamentals.Components1">Komponen</a> untuk lebih jelasnya). Metode pengambil <tt>getSkills()</tt> untuk properti <tt>skills</tt> akan mengambil malas rekaman skill terkait saat ia dipakai sebagai berikut. Catatan bahwa kita hanya melakukan pengambilan malas ketika <tt>$player_id</tt> tidak null (yakni, ketika rekaman sudah diambil dari database ataau id player sudah disetel).
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-$player = PlayerRecord::finder()->findByPk(1);
-var_dump($player->skills); //pengambilan malas saat akses pertama
-var_dump($player->skills[0]); //properti skills sudah diambil
-$player->skills[] = new SkillRecord(); //menambah skill
-</com:TTextHighlighter>
-
-<p id="710047" class="block-content">The <tt>setSkills()</tt> memastikan bahwa properti <tt>skills</tt> akan selalu berupa TList.
-Menggunakan TList yang membolehkan kita untuk menyetel elemen properti <tt>skills</tt> seolah-olah mereka
-sebuah array. Contohnya <tt>$player->skills[] = new SkillRecord()</tt>. Jika <tt>array</tt> dipakai, kesalahan PHP
-akan dikeluarkan.
-</p>
-
-<h2>Pemetaan Kolom</h2>
-<p>
-Sejak v3.1.1, Rekaman Aktif mulai mendukung pemetaan kolom. Pemetaan kolom membolehkan para
-pengembang untuk mengalamatkan kolom dalam Rekaman Aktif menggunakan konvensi penamaan lebih
-konsisten. Dalam keadaan tertentu, menggunakan pemetaan kolom, seseorang dapat mengakses kolom
-menggunakan apapun namanya yang disukainya, daripada nama terbatas yang didefinisikan dalam
-skema database.
-</p>
-<p>
-Untuk menggunakan pemetaan kolom, deklarasikan array statis bernama <tt>COLUMN_MAPPING</tt> dalam kelas Rekaman Aktif.
-Kunci dari array adalah nama kolom (disebut <i>nama kolom fisik</i>) yang didefinisikan dalam skema database,
-sementara nilai terkait dengan nama properti (disebut <i>nama kolom logika</i>) didefinisikan dalam
-kelas Rekaman Aktif. Nama properti dapat nama variabel anggota kelas public atau nama properti komponen
-yang didefinisikan via pengambil/penyetel. Jika nama kolom fisik terjadi sama seperti nama kolom logika,
-keduanya tidak perlu didaftarkan dalam <tt>COLUMN_MAPPING</tt>.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class UserRecord extends TActiveRecord
-{
- const TABLE='users';
- public static $COLUMN_MAPPING=array
- (
- 'user_id'=>'id',
- 'email_address'=>'email',
- 'first_name'=>'firstName',
- 'last_name'=>'lastName',
- );
- public $id;
- public $username; // nama kolom fisik dan logika sama
- public $email;
- public $firstName;
- public $lastName;
- //....
-}
-</com:TTextHighlighter>
-<p>
-Dengan pemetaan kolom di atas, kita mengalamatkan <tt>first_name</tt> menggunakan <tt>$userRecord->firstName</tt>
-daripada <tt>$userRecord->first_name</tt>. Ini membantu pemisahan dari logika dengan model.
-</p>
-
-<h2 id="138054">Referensi</h2>
-<ul id="u3" class="block-content">
- <li>Fowler et. al. <i>Patterns of Enterprise Application Architecture</i>,
- Addison Wesley, 2002.</li>
- <li>B. Venners with B. Eckel. <i><a href="http://www.artima.com/intv/abstract3.html">Inappropriate Abstractions - A Conversation with Anders Hejlsberg, Part VI.</a></i>
- Artima Developer, 2003.
- </li>
-
-</ul>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Database/id/DAO.page b/demos/quickstart/protected/pages/Database/id/DAO.page
deleted file mode 100755
index 8ccfb149..00000000
--- a/demos/quickstart/protected/pages/Database/id/DAO.page
+++ /dev/null
@@ -1,163 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="136039">Data Access Object (DAO)</h1>
-<com:SinceVersion Version="3.1a" />
-<p id="680461" class="block-content">
-Obyek Akses Data atau Data Access Object (DAO) memisahkan data sumber daya antarmuka klien dari mekanisme akses datanya. Ia mengadaptasi API akses sumber daya ke antarmuka klien generik. Hasilnya, mekanisme akses data dapat diubah tersendiri atas kode yang menggunakan data.
-</p>
-<p id="680462" class="block-content">
-Sejak versi 3.1, PRADO mulai menyediakan DAO yang adalah pelapis tipis sekitar <a href="http://www.php.net/manual/en/ref.pdo.php">PHP Data Objects (PDO)</a>. Meskipun PDO memiliki set fitur bagus dan API yang baik, kami memilih untuk mengimplementasikan PRADO DAO di atas PDO karena kelas PRADO DAO adalah kelas komponen dan bisa dikonfigurasi dalam aplikasi PRADO. Para pengguna dapat menggunakan kelas DAO ini dalam cara yang lebih disukai-PRADO.
-</p>
-<div class="note"><b class="tip">Catatan:</b>
-Karena PRADO DAO didasarkan pada PDO, ekstensi PDO PHP perlu diinstalasi. Sebagai tambahan, Anda perlu menginstalasi driver PDO database terkait untuk digunakan dalam aplikasi Anda. Lihat lebih jelasnya dalam <a href="http://www.php.net/manual/en/ref.pdo.php">PHP Manual</a>.
-</div>
-<p id="680463" class="block-content">
-PRADO DAO sebagian besar terdiri dari empat kelas (kebalikan dari PDO yang hanya dua kelas, <tt>PDO</tt> dan <tt>PDOStatement</tt>):
-</p>
-<ul id="u1" class="block-content">
-<li><tt>TDbConnection</tt> - mewakili koneksi ke database.</li>
-<li><tt>TDbCommand</tt> - mewakili pernyataan SQL yang dijalankan terhadap database.</li>
-<li><tt>TDbDataReader</tt> - mewakili stream hanya-maju atas stream baris dari set hasil query.</li>
-<li><tt>TDbTransaction</tt> - mewakili transaksi DB.</li>
-</ul>
-<p id="680464" class="block-content">
-Berikutnya, kami memperkenalkan penggunaan PRADO DAO dalam skenario yang berbeda.
-</p>
-
-<h2 id="136040">Menetapkan Koneksi Database</h2>
-<p id="680465" class="block-content">
-Untuk menetapkan koneksi database, seseorang membuat turunan <tt>TDbConnection</tt> dan mengaktifkannya. Nama sumber data (DSN) diperlukan guna menetapkan informasi yang dibutuhkan untuk menyambung ke database. Nama pengguna dan kata sandi database mungkin perlu disertakan untuk menetapkan koneksi.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_680140">
-$connection=new TDbConnection($dsn,$username,$password);
-// panggil setAttribute() untuk mengirim parameter koneksi tambahan
-// $connection->Persistent=true; // gunakan koneksi persisten
-$connection->Active=true; // koneksi terlaksana
-....
-$connection->Active=false; // koneksi ditutup
-</com:TTextHighlighter>
-<p id="680466" class="block-content">
-Spesifikasi lengkap terhadap DSN dapat ditemukan dalam <a href="http://www.php.net/manual/en/ref.pdo.php#pdo.drivers">dokumentasi PDO</a>. Di bawah ini adalah daftar format DNS paling umum dipakai:
-</p>
-<ul id="u2" class="block-content">
-<li>MySQL - <tt>mysql:host=localhost;dbname=test</tt></li>
-<li>SQLite - <tt>sqlite:/path/to/dbfile</tt></li>
-<li>ODBC - <tt>odbc:SAMPLE</tt>
-</ul>
-<p id="680467" class="block-content">
-Dalam hal terjadi kesalahan ketika menetapkan koneksi (seperti DSN atau nama pengguna/sandi salah), <tt>TDbException</tt> akan dimunculkan.
-</p>
-
-<h2 id="136041">Menjalankan Pernyataan SQL</h2>
-<p id="680468" class="block-content">
-Sekali koneksi database terlaksana, pernyataan SQL dapat dijalankan melalui <tt>TDbCommand</tt>. Seseorang membuat <tt>TDbCommand</tt> dengan memanggil <tt>TDbConnection.createCommand()</tt> dengan pernyataan SQL yang ditetapkan:
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_680141">
-$command=$connection->createCommand($sqlStatement);
-// jika diperlukan, pernyataan SQL dapat dimutakhirkan seperti berikut:
-$command->Text=$newSqlStatement;
-</com:TTextHighlighter>
-
-<p id="680469" class="block-content">
-Pernyataan SQL dijalankan melalui <tt>TDbCommand</tt> dalam salah satu dari dua cara berikut:
-</p>
-<ul id="u4" class="block-content">
-<li><tt>execute()</tt> - melakukan pernyataan SQL non-query, seperti <tt>INSERT</tt>, <tt>UPDATE</tt> dan <tt>DELETE</tt>. Jika berhasil, ia mengembalikan jumlah baris yang dipengaruhi oleh eksekusi.</li>
-<li><tt>query()</tt> - melakukan pernyataan SQL yang mengembalikan baris data, seperti <tt>SELECT</tt>. Jika berhasil, ia mengembalikan turunan <tt>TDbDataReader</tt> dari salah satu yang bisa mengambil hasil baris data.
-</li>
-</ul>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_680142">
-$affectedRowCount=$command->execute(); // jalankan SQL non-query
-$dataReader=$command->query(); // jalankan query SQL
-$row=$command->queryRow(); // jalankan query SQL dan kembalikan hasil baris pertama
-$value=$command->queryScalar(); // jalankan query SQL dan kembalikan nilai kolom pertama
-</com:TTextHighlighter>
-<p id="680470" class="block-content">
-Dalam hal terjadi kesalahan selama eksekusi pernyataan SQL, <tt>TDbException</tt> akan dimunculkan.
-</p>
-
-<h2 id="136042">Mengambil Hasil Query</h2>
-<p id="680471" class="block-content">
-Setelah <tt>TDbCommand.query()</tt> membuat turunan <tt>TDbDataReader</tt>, seseorang dapat mengambil baris dari data hasil dengan memanggil <tt>TDbDataReader.read()</tt> secara berulang. Seseorang juga bisa menggunakan <tt>TDbDataReader</tt> dalam konstruksi bahasa PHP <tt>foreach</tt> untuk mengambil baris demi baris.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_680143">
-// memanggil read() secara berulang sampai ia mengembalikan false
-while(($row=$dataReader->read())!==false) { ... }
-// menggunakan foreach untuk menjelajah melalui setiap baris data
-foreach($dataReader as $row) { ... }
-// mengambil semua baris sekaligus dalam satu array tunggal
-$rows=$dataReader->readAll();
-</com:TTextHighlighter>
-
-<h2 id="136043">Menggunakan Transaksi</h2>
-<p id="680472" class="block-content">
-Ketika aplikasi menjalankan beberapa query, setiap pembacaan dan/atau penulisan informasi dalam database, penting untuk memastikan bahwa datanase tidak dibiarkan dengan hanya beberapa query yang dibawanya. Transaksi, mewakili turunan <tt>TDbTransaksi</tt> dalam PRADO, dapat diinisialisasi dalam hal ini:
-</p>
-<ul id="u5" class="block-content">
-<li>Mulai transaksi.</li>
-<li>Jalankan query satu demi satu. Setiap memutakhirkan ke database tidak terlihat bagi dunia luar.</li>
-<li>Komit transaksi. Pemutakhiran menjadi terlihat jika transaksi berhasil.</li>
-<li>Jika salah satu query gagal, seluruh transaksi digulung kembali.</li>
-</ul>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_680144">
-$transaction=$connection->beginTransaction();
-try
-{
- $connection->createCommand($sql1)->execute();
- $connection->createCommand($sql2)->execute();
- //.... eksekusi SQL lain
- $transaction->commit();
-}
-catch(Exception $e) // eksepsi dimunculkan jika query gagal
-{
- $transaction->rollBack();
-}
-</com:TTextHighlighter>
-
-
-<h2 id="136044">Mengikat Parameter</h2>
-<p id="680473" class="block-content">
-Guna menghindari <a href="http://en.wikipedia.org/wiki/SQL_injection">serangan injeksi SQL</a> dan untuk meningkatkan performansi dari eksekusi pernyataan SQL yang dipakai secara berulang-ulang, seseorang dapat "menyiapkan" pernyataan SQL dengan tempat parameter opsional yang akan diganti dengan parameter sebenarnya selama proses pengikatan parameter.
-</p>
-<p id="680474" class="block-content">
-Tempat parameter dapat bernama (diwakili dengan token unik) ataupun tidak bernama (diwakili dengan tanda tanya). Panggil <tt>TDbCommand.bindParameter()</tt> atau <tt>TDbCommand.bindValue()</tt> untuk mengganti tempat ini dengan parameter aktual. Parameter tidak perlu diberi tanda kutip: driver database melakukan ini bagi Anda. Pengikatan parameter harus dikerjakan sebelum pernyataan SQL dijalankan.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_680145">
-// sebuah SQL dengan dua tempat ":username" dan ":email"
-$sql="INSERT INTO users(username, email) VALUES(:username,:email)";
-$command=$connection->createCommand($sql);
-// ganti tempat ":username" dengan nilai username sebenarnya
-$command->bindParameter(":username",$username,PDO::PARAM_STR);
-// ganti tempat ":email" dengan nilai email sebenarnya
-$command->bindParameter(":email",$email,PDO::PARAM_STR);
-$command->execute();
-// sisipkan baris lain dengan set parameter baru
-$command->bindParameter(":username",$username2,PDO::PARAM_STR);
-$command->bindParameter(":email",$email2,PDO::PARAM_STR);
-$command->execute();
-</com:TTextHighlighter>
-<p id="680475" class="block-content">
-Metode <tt>bindParameter()</tt> dan <tt>bindValue()</tt> sangat mirip. Perbedaanya hanyalah pembentuk mengikat parameter dengan referensi variabel PHP sementara yang terkahir dengan nila. Untuk parameters yang mewakili blok memori data besar, pembentuk lebih disukai untuk pertimbangan performansi.
-</p>
-<p id="680476" class="block-content">
-Untuk lebih jelasnya mengenai pengikatan parameter, lihat <a href="http://www.php.net/manual/en/function.pdostatement-bindparam.php">dokumentasi PHP terkait</a>.
-</p>
-
-
-<h2 id="136045">Mengikat Kolom</h2>
-<p id="680477" class="block-content">
-Ketika mengambil hasil query, seseorang dapat juga mengikat kolom dengan bariabel PHP agar dipopulasikan secara otomatis dengan data terbaru setiap kali baris diambil.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_680146">
-$sql="SELECT username, email FROM users";
-$dataReader=$connection->createCommand($sql)->query();
-// ikat kolom ke-1 (username) dengan variabel $username
-$dataReader->bindColumn(1,$username);
-// ikat kolom ke-2 (email) dengan variabel $email
-$dataReader->bindColumn(2,$email);
-while($dataReader->read()!==false)
-{
- // $username dan $email berisi username dan email dalam baris sekarang
-}
-</com:TTextHighlighter>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Database/id/Scaffold.page b/demos/quickstart/protected/pages/Database/id/Scaffold.page
deleted file mode 100755
index e9f15b39..00000000
--- a/demos/quickstart/protected/pages/Database/id/Scaffold.page
+++ /dev/null
@@ -1,130 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="144022">Tampilan Scaffold Rekaman Aktif</h1>
-<com:SinceVersion Version="3.1b" />
-<p id="720048" class="block-content">Kelas <a href="?page=Database.ActiveRecord">Rekaman Aktif</a> dapat digunakan dengan
-<com:DocLink ClassPath="System.Data.ActiveRecord.Scaffold.TScaffoldListView" Text="TScaffoldListView"/>
-dan
-<com:DocLink ClassPath="System.Data.ActiveRecord.Scaffold.TScaffoldEditView" Text="TScaffoldEditView"/>
-( <com:DocLink ClassPath="System.Data.ActiveRecord.Scaffold.TScaffoldView" Text="TScaffoldView"/>
-mengaitkan <tt>TScaffoldListView</tt> dan <tt>TScaffoldEditView</tt>) untuk membuat aplikasi web Create/Read/Update/Delete (CRUD) <i>sederhana</i>.</p>
-
-<p id="720049" class="block-content">Tampilan scaffold dimaksudkan untuk membantu dalam membuat prototipe aplikasi web, tidak didesain sebagai yang bisa dikustomisasi atau serumit komponen misalnya
-<a href="?page=Controls.DataGrid">TDataGrid</a>. Tampilan scaffold menyediakan fungsionalitas builtin:
-</p>
-
-<ul>
- <li>Mendaftar semua item rekaman aktif.</li>
- <li>Mencari rekaman.</li>
- <li>Memilah halaman dan mengurut.</li>
- <li>Menghapus item.</li>
- <li>Menyisipkan item baru.</li>
- <li>Memutakhirkan item yang ada.</li>
- <li>Memvalidasi field dan tipe data dasar yang diperlukan.</li>
- <li>Menyajikan kontrol khusus seperti pengambil tanggal.</li>
-</ul>
-
-<p id="720050" class="block-content">Tampilan Scaffold berdiri sendiri pada Rekaman Aktif dan saat ini mendukung database: Mysql, Sqlite dan Postgres SQL. Dukungan untuk database lain dapat diputuskan bila ada permintaan yang cukup.</p>
-
-<h2 id="144023">Menyiapkan Tampilan Scaffold</h2>
-<p id="720051" class="block-content">Untuk menggunakan tampilan scaffold, pertama kita mendefinisikan kelas <a href="?page=Database.ActiveRecord">Rekaman Aktif</a> yang mewakili tabel atau view dalam database. Tetapkan kelas Rekaman Aktif berikut yang berkaitan dengan tabel <tt>users</tt>
-seperti didefinisikan dalam halaman <a href="?page=Database.ActiveRecord">Rekaman Aktif</a>.
-</p>
-
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_720188">
-class UserRecord extends TActiveRecord
-{
- const TABLE='users';
-
- public $username;
- public $email;
-}
-</com:TTextHighlighter>
-
-<p id="720052" class="block-content">Kelas tampilan scaffold ada di <tt>System.Data.ActiveRecord.Scaffold.*</tt>
-<a href="?page=Fundamentals.Components#704">namespace</a>.
-<a href="?page=Fundamentals.Components#704">namespace</a> ini bisa diimpor ke
-<a href="?page=Configurations.AppConfig">Konfigurasi Aplikasi</a>
-menggunakan file <tt>application.xml</tt> atau melalui kode php menggunakan metode <tt>Prado::using()</tt>. Untuk mulai menggunakan
-<com:DocLink ClassPath="System.Data.ActiveRecord.Scaffold.TScaffoldView" Text="TScaffoldView"/>
-cukup setel nilai properti <tt>RecordClass</tt> sama dengan nama kelas Rekaman Aktif.
-</p>
-
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_720189">
-&lt;com:TScaffoldView RecordClass="UserRecord" /&gt;
-</com:TTextHighlighter>
-
-<p id="720053" class="block-content">Kode di atas akan mendaftar rekaman saat ini dalam tabel <tt>users</tt>.
-Setiap rekaman dapat diedit dengan mengklik tombol "edit" dan dihapus dengan mengklik tombol "delete". Rekaman baru bisa ditambahkan dengan mengklik pada tombol "Add new record", masukkan beberapa data (perhatikan validasi otomatis terhadap field dan tipe data yang diperlukan), dan klik tombol "save".
-Menetapkan batas pencarian dalam kotak teks cari guna menemukan rekaman tertentu. Akhirnya, daftar rekaman bisa disimpan pada setiap kolom dengan mengubah kolom pengurutan serta urutan.
-</p>
-
-<p id="720054" class="block-content"><tt>TScaffoldView</tt> adalah kontrol template yang dibuat dari kontrol scaffold lainnya.
-Properti berikut memberikan akses ke kontrol gabungan ini.</p>
-<ul>
- <li><b><tt>ListView</tt></b> -- <tt>TScaffoldListView</tt> menampilkan daftar rekaman. </li>
- <li><b><tt>EditView</tt></b> -- <tt>TScaffoldEditView</tt> yang menyajikan input untuk mengedit dan menambah rekaman.</li>
- <li><b><tt>SearchControl</tt></b> -- <tt>TScaffoldSearch</tt> bertanggung jawab atas pencarian antarmuka pengguna.</li>
-</ul>
-<p id="720055" class="block-content">
- Semua kontrol gabungan ini bisa dikustomisasi seperti yang akan kita lihat di bawah.
-</p>
-
-<h2 id="144024">TScaffoldListView</h2>
-
-<p id="720056" class="block-content">Daftar Rekaman Aktif dapat ditampilkan menggunakan <tt>TScaffoldListView</tt> dengan properti berguna berikut.</p>
-<ul>
- <li><b><tt>Header</tt></b> -- <a href="?page=Controls.Repeater">TRepeater</a> menampilkan properti/nama field Rekaman Aktif. </li>
- <li><b><tt>Sort</tt></b> -- <a href="?page=Controls.List">TDropDownList</a> menampilkan kombinasi properti dan kemungkinan urutannya. </li>
- <li><b><tt>Pager</tt></b> -- kontrol <a href="?page=Controls.Pager">TPager</a> menampilkan link dan/atau tombol yang menavigasi ke halaman berbeda dalam data Rekaman Aktif.</li>
- <li><b><tt>List</tt></b> -- <a href="?page=Controls.Repeater">TRepeater</a> yang menyajikan baris data Rekaman Aktif.</li>
-</ul>
-
-<p id="720057" class="block-content">Penyajian kustom dari Rekaman Aktif dapat dicapai dengan menetapkan properti <tt>ItemTemplate</tt> dan/atau <tt>AlternatingItemTemplate</tt> dari pengulang <tt>List</tt>.
-<tt>TScaffoldListView</tt> akan mendengarkan dua event perintah bernama "delete" dan "edit". Perintah "delete" akan menghapus rekaman untuk baris di mana perintah "delete" berasal.
-Perintah "edit" akan memaksa data rekaman untuk diedit oleh
-<tt>TScaffoldEditView</tt> dengan ID yang ditetapkan dengan properti <tt>EditViewID</tt>.
-Contoh berikut mendaftar nama pengguna hanya dengan format tebal.
-</p>
-
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_720190">
-&lt;com:TScaffoldListView RecordClass="UserRecord" &gt;
- &lt;prop:List.ItemTemplate&gt;
- &lt;strong>&lt;%# $this->Data->username %>&lt;/strong&gt;
- &lt;/prop:List.ItemTemplate&gt;
-&lt;/com:TScaffoldListView&gt;
-</com:TTextHighlighter>
-
-<div class="info"><b class="note">Info:</b>
-Untuk <tt>TScaffoldView</tt>, tampilan daftar dapat diakses melalui properti <tt>ListView</tt> dari <tt>TScaffoldView</tt>.
-Selanjutnya, subproperti <tt>ListView.List.ItemTemplate</tt> pada <tt>TScaffoldView</tt>
-adalah sama dengan subproperti <tt>List.ItemTemplate</tt> dari <tt>TScaffoldListView</tt> dalam contoh di atas.
-</div>
-
-<p id="720058" class="block-content">Properti <tt>SearchCondition</tt> dan properti <tt>SearchParameters</tt> (mengambil nilai array) bisa ditetapkan untuk mengkustomisasi rekaman yang ditampilkan. <tt>SearchCondition</tt>
-akan dipakai sebagai properti <tt>Condition</tt> dari <tt>TActiveRecordCriteria</tt>
-dan properti <tt>SearchParameters</tt> berkaitan dengan properti
-<tt>Parameters</tt> dari <tt>TActiveRecordCriteria</tt>.</p>
-
-<h2 id="144025">TScaffoldEditView</h2>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_720191">
-&lt;com:TScaffoldEditView RecordPk="user1" RecordClass="UserRecord" /&gt;
-</com:TTextHighlighter>
-
-<h2 id="144026">Menggabungkan tampilan daftar + edit</h2>
-
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_720192">
-&lt;com:TScaffoldEditView ID="edit_view" RecordClass="UserRecord" /&gt;
-&lt;com:TScaffoldListView EditViewID="edit_view" RecordClass="UserRecord" /&gt;
-</com:TTextHighlighter>
-
-<h2 id="144027">Mengkustomisasi TScaffoldView</h2>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_720193">
-&lt;com:TScaffoldView RecordClass="UserRecord" &gt;
- &lt;prop:ListView.List.ItemTemplate&gt;
- &lt;%# $this->DataItem->username %&gt;
- &lt;com:TLinkButton Text="Edit" CommandName="edit" /&gt;
- &lt;/prop:ListView.List.ItemTemplate&gt;
-&lt;/com:TScaffoldView/&gt;
-</com:TTextHighlighter>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Database/id/SqlMap.page b/demos/quickstart/protected/pages/Database/id/SqlMap.page
deleted file mode 100755
index 4b5041cc..00000000
--- a/demos/quickstart/protected/pages/Database/id/SqlMap.page
+++ /dev/null
@@ -1,210 +0,0 @@
-<com:TContent ID="body">
-
-<h1 id="140062">Pemeta Data</h1>
-<com:SinceVersion Version="3.1a" />
-<p id="700505" class="block-content">Pemeta Data memindahkan data antara obyek dan database sementara memeliharanya berdiri sendiri satu sama lain dan pemetanya sendiri. Jika Anda mulai dengan
- <a href="?page=Database.ActiveRecord">Active Records</a>, mungkin nantinya Anda dihadapkan dengan obyek bisnis lebih kompleks seiring denga kemajuan proyek Anda. Ketika Anda membangun model obyek dengan banyak logika bisnis, sangat berharga untuk memakai mekanisme ini untuk mengatur data lebih baik dan perilaku bersamanya. Melakukan itu menyebabkan skema varian; yakni skema obyek dan skema relasional tidak sama.
-</p>
-
-<p id="700506" class="block-content">Pemeta Data memisahkan obyek dalam-memori dari database. Tanggung jawabnya adalah mentransfer data diantara keduanya dan juga saling mengisolasinya.
- Dengan Pemeta Data obyek dalam-memori tidak perlu mengetahui meskipun ada sebuah database; tidak perlu kode antarmuka SQL, dan tentunya tidak mengetahui skema database. (Skema database selalu diabaikan dari obyek yang memakainya.)
-</p>
-
-<h2 id="140063">Kapan Menggunakannya</h2>
-<p id="700507" class="block-content">Tujuan utama menggunakan Pemeta Data ialah ketika Anda menginginkan skema database dan model obyek tumbuh secara independen. Keuntungan utama dari Pemeta Data adalah bahwa saat bekerja pada obyek bisnis (atau domain) Anda bisa mengabaikan database, baik dalam desain maupun pembangunan propes pengujian. Obyek domain tidak mengetahui struktur databasenya karena semua ini dikerjakan oleh pemeta.
-</p>
-
-<p id="700508" class="block-content">Ini membantu Anda dalam kode karena Anda bisa mengerti serta bekerja dengan obyek domain tanpa harus mengerti bagaimana ia disimpan dalam. Anda bisa memodifikasi model bisnis atau database tanpa harus mengubahnya. Dengan pemetaan rumit, terutama yang menyangkut <b>database yang sudah ada</b>, ini sangat berharga.
-</p>
-
-<p id="700509" class="block-content">Harga tentunya merupakan lapisan ekstra yang tidak Anda peroleh dengan <a href="?page=Database.ActiveRecord">Rekaman Aktif</a>, maka pengujian menggunakan pola ini adalah kompleksitas dari logika bisnis. Jika Anda memiliki logika bisa cukup sederhana, <a href="?page=Database.ActiveRecord">Rekaman Aktif</a> mungkin akan mencukupi.
-Untuk logika yang lebih rumit, Pemeta Data mungkin lebih cocok.
-</p>
-
-<h2 id="140064">Pemeta Data SqlMap</h2>
-<p id="700510" class="block-content">Kerangka kerja Pemeta Data SqlMap memudahkan untuk menggunakan database dengan aplikasi PHP.
- PemetaData SqlMap memasangkan obyek dengan prosedur tersimpan atau pernyataan SQL menggunakan deskriptor XML. Kesederhanaan adalah keuntungan terbesar dari PemetaData SqlMap di atas piranti pemetaan relasional obyek. Untuk menggunakan PemetaData SqlMap Anda bergantung pada obyek Anda sendiri,
- XML, dan SQL. Anda sedikit yang harus mempelajari yang belum Anda ketahui.
- Dengan Pemeta Data SqlMap Anda mempunyai tenaga penuh pada SQL dan prosedur tersimpan di tangan Anda.
-</p>
-
-<p id="700511" class="block-content">
- <img src=<%~ diagram.png %> alt="Tinjauan Pemeta Data SqlMap" id="fig:sqlmap.png" class="figure"/>
-
- Ini adalah penjelasan tingkat tinggi atas alur kerja yang dilukiskan pada gambar di atas.
- Menyediakan parameter, baik sebagai obyek ataupun tipe primitif. Parameter bisa dipakai untuk menyetel nilai runtime dalam pernyataan SQL atau prosedur. Jika nilai runtime tidak diperlukan, parameter dapat diabaikan.
-</p>
-<p id="700512" class="block-content">Menjalankan pemetaan dengan mengirimkan parameter dan nama yang Anda berikan pada deskriptor XML Anda. Langkah ini adalah saat di mana keajaiban terjadi. Kerangka kerja akan menyiapkan pernyataan SQL atau prosedur tersimpan, menyetel setiap nilai runtime menggunakan parameter Anda, menjalankan prosedur atau pernyataan, dan mengembalikan hasil.
-</p>
-
-<p id="700513" class="block-content">Dalam hal pemutakhiran, jumlah baris yang dipengaruhi dikembalikan. Dalam hal query, obyek tunggal, atau koleksi obyek dikembalikan. Seperti parameter, obyek hasil, atau koleksi obyek, bisa berupa obyek biasa ataupun tipe PHP primitif.
-</p>
-
-<h2 id="140065">Menyiapkan koneksi database dan menginisialisasi SqlMap</h2>
-<p id="700514" class="block-content">
- Koneksi database untuk SqlMap dapat disetel seperti berikut.
- Lihat <a href="?page=Database.DAO">Menetapkan Koneksi Database</a> untuk lebih jelasnya mengenai pembuatan koneksi database secara umum.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_700166">
-//buat koneksi dan berikan ke manajer SqlMap.
-$dsn = 'pgsql:host=localhost;dbname=test'; //Postgres SQL
-$conn = new TDbConnection($dsn, 'dbuser','dbpass');
-$manager = new TSqlMapManager($conn);
-$manager->configureXml('my-sqlmap.xml');
-$sqlmap = $manager->getSqlMapGateway();
-</com:TTextHighlighter>
-</p>
-
-<p id="700515" class="block-content">
- <tt>TSqlMapManager</tt> bertanggung jawab untuk menyiapkan koneksi database dan mengkonfigurasi SqlMap dengan file XML yang diberikan. metode <tt>configureXml()</tt> menerima string yang merujuk ke file konfigurasi XML SqlMap. Sekali dikonfigurasi, panggil metode <tt>getSqlMapGateway()</tt> untuk memperoleh turunan dari antarmuka gateway SqlMap (pakai obyek ini untuk menyisipkan/menghapus/mencari rekaman).
-</p>
-
-<p id="700516" class="block-content">
- Koneksi database SqlMap juga bisa dikonfigurasi menggunakan tag <tt>&lt;module&gt;</tt> dalam <a href="?page=Configurations.AppConfig">application.xml</a> atau
- <a href="?page=Configurations.PageConfig">config.xml</a> seperti berikut.
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_700167">
-<modules>
- <module id="my-sqlmap" class="System.Data.SqlMap.TSqlMapConfig"
- EnableCache="true" ConfigFile="my-sqlmap.xml" >
- <database ConnectionString="pgsql:host=localhost;dbname=test"
- Username="dbuser" Password="dbpass" />
- </module>
-</modules>
-</com:TTextHighlighter>
-</p>
-
-<p id="700517" class="block-content">
- Atribut <tt>ConfigFile</tt> harus menunjuk ke file konfigurasi SqlMap (dijelaskan nanti) baik menggunakan path absolut, path relatif ataupun path notasi titik namespace Prado (harus mengabaikan ekstensi ".xml").
-
- <div class="tip"><b class="note">Tip:</b>
- Atribut <tt>EnableCache</tt> saat disetel "true" akan men-cache
- konfigurasi yang diurai. Anda harus membersihkan atau menghapus cache jika Anda mengubah file konfigurasinya.
- <a href="?page=Advanced.Performance#6402">modul cache</a> juga harus didefinisikan agar cache berfungsi.
- </div>
-</p>
-
-<p id="700518" class="block-content">Untuk mendapatkan antarmuka gateway SqlMap dari konfigurasi &lt;module&gt;, cukup lakukan misalnya
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_700168">
-class MyPage extends TPage
-{
- public function onLoad($param)
- {
- parent::onLoad($param);
- $sqlmap = $this->Application->Modules['my-sqlmap']->Client;
- $sqlmap->queryForObject(...); //query beberapa obyek
- }
-}
-</com:TTextHighlighter>
-</p>
-
-<h2 id="140066">Contoh cepat</h2>
-<p id="700519" class="block-content">Mari kita anggap tabel "users" berikut yang berisi dua kolom bernama "username" dan "email", di mana "username" juga merupakan kunci primer.
-<com:TTextHighlighter Language="sql" CssClass="source block-content" id="code_700169">
-CREATE TABLE users
-(
- username VARCHAR( 20 ) NOT NULL ,
- email VARCHAR( 200 ) ,
- PRIMARY KEY ( username )
-);
-</com:TTextHighlighter>
-</p>
-<p id="700520" class="block-content">Kemudian kita mendefinisikan kelas <tt>User</tt> biasa seperti berikut. Perhatikan bahwa <tt>User</tt> sangat sederhana.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_700170">
-class User
-{
- public $username;
- public $email;
-}
-</com:TTextHighlighter>
-</p>
-</p>
-
-<p id="700521" class="block-content">Selanjutnya, kita perlu mendefinisikan file konfigurasi XML SqlMap, mari namai file sebagai <tt>my-sqlmap.xml</tt>.
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_700171">
-<?xml version="1.0" encoding="utf-8" ?>
-<sqlMapConfig>
- <select id="SelectUsers" resultClass="User">
- SELECT username, email FROM users
- </select>
-</sqlMapConfig>
-</com:TTextHighlighter>
-</p>
-<p id="700522" class="block-content">Tag &lt;select&gt; mengembalikan definisi pernyataan SQL. Atribut <tt>id</tt> akan dipakai sebagai pengenal untuk query. Nilai atribut <tt>resultClass</tt> adalah nama kelas obyek yang dikembalikan.
- Sekarang kita dapat melakukan query obyek sebagai berikut:
-
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_700172">
-//anggap bahwa $sqlmap adalah turunan TSqlMapGateway
-$userList = $sqlmap->queryForList("SelectUsers");
-
-//Atau hanya satu, jika hanya itu yang Anda butuhkan:
-$user = $sqlmap->queryForObject("SelectUsers");
-</com:TTextHighlighter>
-</p>
-
-<p id="700523" class="block-content">Contoh di atas hanya menampilkan demonstrasi sedikit kemampuan Pemeta Data SqlMap. Rincian selanjutnya dapat ditemukan dalam
- <a href="http://www.pradosoft.com/demo/sqlamp/">SqlMap Manual</a>.
-</p>
-
-<h2 id="140067">Menggabung SqlMap dengan Rekaman Aktif</h2>
-<p id="700524" class="block-content">Contoh di atas nampaknya seperti sepele dan ia juga seperti banyak pekerjaan hanya untuk mengambil data. Akan tetapi, perhatikan bahwa kelas <tt>User</tt> sama sekali tidak mengetahui telah disimpan dalam database, dan database tidak mengetahui kelas <tt>User</tt>.
-</p>
-<p id="700525" class="block-content">
- Salah satu keuntungan dari SqlMap adalah kemampuan memetakan hubungan
- obyek yang kompleks, koleksi dari datbase yang sudah ada. Dilain pihak,
- <a href="?page=Database.ActiveRecord">Rekaman Aktif</a> menyediakan cara
- yang sangat sederhana untuk berinteraksi dengan database tapi tidak bisa
- melakukan hubungan atau koleksi yang lebih rumit. Kompromi yang baik adalah
- menggunakan SqlMap untuk mengambil hubungan dan koleksi rumit sebagai
- obyek Rekaman Aktif dan kemudian menggunakan Rekaman Aktif ini untuk memutakhirkan, menyisipkan dan menghapus.
-</p>
-<p id="700526" class="block-content">Melanjutkan contoh sebelumnya, kita mengubah definisi kelas <tt>User</tt> menjadi sebuah Rekaman Aktif.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_700173">
-class UserRecord extends TActiveRecord
-{
- const TABLE='users'; //nama tabel
-
- public $username; //kolom bernama "username" dalam tabel "users"
- public $email;
-
- /**
- * @return TActiveRecord active record finder instance
- */
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
-</com:TTextHighlighter>
-</p>
-
-<p id="700527" class="block-content">Kita juga perlu mengubah definisi dari konfigurasi XML SqlMap XML configuration. Kita cukup perlu mengubah nilai atribut <tt>resultClass</tt> ke <tt>UserRecord</tt>.
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_700174">
-<?xml version="1.0" encoding="utf-8" ?>
-<sqlMapConfig>
- <select id="SelectUsers" resultClass="UserRecord">
- SELECT username, email FROM users
- </select>
-</sqlMapConfig>
-</com:TTextHighlighter>
-</p>
-
-
-<p id="700528" class="block-content">Kode PHP untuk mengambil pengguna tetap sama, tapi sebaliknya SqlMap mengembalikan Rekaman Aktif, dan kita bisa mengambil keuntungan dari metode Rekaman Aktif.
-
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_700175">
-//anggap bahwa $sqlmap adalah turunan TSqlMapGateway
-$user = $sqlmap->queryForObject("SelectUsers");
-
-$user->email = 'test@example.com'; //ubah data
-$user->save(); //simpan menggunakan Rekaman Aktif
-</com:TTextHighlighter>
-</p>
-
-<h2 id="140068">Referensi</h2>
-<ul id="u1" class="block-content">
- <li>Fowler et. al. <i>Patterns of Enterprise Application Architecture</i>,
- Addison Wesley, 2002.</li>
- <li>iBatis Team. <i>iBatis Data Mapper</i>,
- <a href="http://ibatis.apache.org">http://ibatis.apache.org</a>.</li>
-</ul>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Database/id/ar_objects.png b/demos/quickstart/protected/pages/Database/id/ar_objects.png
deleted file mode 100755
index 50ab812d..00000000
--- a/demos/quickstart/protected/pages/Database/id/ar_objects.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Database/id/ar_relations.png b/demos/quickstart/protected/pages/Database/id/ar_relations.png
deleted file mode 100755
index 48e29f48..00000000
--- a/demos/quickstart/protected/pages/Database/id/ar_relations.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Database/id/diagram.png b/demos/quickstart/protected/pages/Database/id/diagram.png
deleted file mode 100755
index 0a0ca73d..00000000
--- a/demos/quickstart/protected/pages/Database/id/diagram.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Database/id/object_states.png b/demos/quickstart/protected/pages/Database/id/object_states.png
deleted file mode 100755
index db194783..00000000
--- a/demos/quickstart/protected/pages/Database/id/object_states.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Database/id/sqlmap_active_record.png b/demos/quickstart/protected/pages/Database/id/sqlmap_active_record.png
deleted file mode 100755
index 6d958d33..00000000
--- a/demos/quickstart/protected/pages/Database/id/sqlmap_active_record.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Database/pl/ActiveRecord.page b/demos/quickstart/protected/pages/Database/pl/ActiveRecord.page
deleted file mode 100755
index 3a073e57..00000000
--- a/demos/quickstart/protected/pages/Database/pl/ActiveRecord.page
+++ /dev/null
@@ -1,1144 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="138046">Rekord Aktywny (ang. Active Record)</h1>
-<com:SinceVersion Version="3.1a" />
-<p id="690478" class="block-content">Rekordy Aktywne są obiektami, które opakowują wiersz w bazie danych lub widoku,
- obudowują (ang. encapsulate) dostęp do bazy danych oraz dziedziny logiki dla tych danych.
- Podstawą Rekordu Aktywnego są klasy biznesowe np. klasa
- <tt>Produkty</tt>, które są bardzo podobne do struktury rekordu należącego do bazy danych. Każdy Rekord Aktywny jest odpowiedzialny
- za zapisywanie i łądowanie danych do i z bazy danych.</p>
-<div class="info"><b class="note">Info:</b>
- Struktura danych Rekordu Sktywnego powinna zgadzać się ze strukturą tablicy w bazie danych.
- Każda kolumna w bazie danych powinna posiadać odpowiadający element: zmienną lub właściwość w klasie Rekordu Aktywnego reprezentującego tablicę.
-</div>
-
-<h2 id="138047">Kiedy używać?</h2>
- <p id="690479" class="block-content">Rekord Aktywne jest dobrym wyborem dla dziedziny logiki, która nie jest zbyt złożona, tak jak tworzenie, odczyty, aktualizacje oraz usuwanie.
- Pochocne (ang. derivations) oraz sprawdzenia bazujące na pojedyńczym rekordzie sprawdzają się dobrze w tej konstrukcji.
- Rekord Aktywne ma podstawową zaletę, którą jest prostota. Łatwo jest stworzyć Rekord Aktywny, łatwo go również zrozuieć.
- </p>
-
- <p id="690480" class="block-content">Jednakże, jeśli twoja logika biznesowa staje się coraz bardziej złożona, wkrótce będziesz chciał
- używać bezpośrednich relacji, zbiorów, dziedziczenia twojego obiektu i tak dalej. Nie da się tego łatwo odwzorować za pomocą Rekordu Aktywnego,
- a dodawanie ich po kawałku staje się bardzo kłopotliwe. Innym argumentem przeciw Rekordowi Aktywnemu jest fakt, że łączy model obiektowy z modelem baz danych.
- To czyni trudniejszym refaktoring, gdy projekt idzie naprzód.
- </p>
-
- <p id="690481" class="block-content">Alternatywą jest używanie wzorca Data Mapper (mapa danych), który odseparowuje role obiektu biznesowego od tego jak te obiekty są przechowywane.
- Prado dostarcza
- Prado provides a darmowy wybór pomiędzy rekordem aktywnym a <a href="?page=Database.SqlMap">SqlMap Data Mapper</a>.
- SqlMap Data Mapper może być uzywany do wczytania obiektów Rekordu Aktywnego, i na odwrót, te Rekordy Aktywne mogą zostać użyte do aktualizacji bazy danych.
- Związek pomiędzy Rekordem Aktywnym a <a href="?page=Database.SqlMap">SqlMap</a> przedstawiony jest na kolejnym diagramie. Więcej informacji związanych z SqlMap Data Mapper można znaleźć w
- <a href="http://www.pradosoft.com/demos/sqlmap/">manualu SqlMap</a>.
- <img src=<%~ sqlmap_active_record.png %> alt="Active Records and SqlMap DataMapper" id="fig:diagram.png" class="figure"/>
- </p>
-
- <p id="690482" class="block-content">
- Klasa Rekordu aktywnego posiada funkcjonalność do przeprowadzenia następujących zadań:
- </p>
- <ul id="u1" class="block-content">
- <li>Tworzenie, zwracanie, aktualizowani i usuwanie recordów (CRUD)</li>
- <li>metody wyszukujące obudowujące powszechnie używane zapytania SQL i zwracające obiekty Rekordu Aktywnego</li>
- <li>Wydobywają relacje (powiazanych obcych obiektów) takie jak "posiada wiele" (ang. has many), "posiada jedno" (ang. has one), "należy do" (ang. belongs to) oraz wiele do wielu "many to many" poprzez tablice asocjacyjne.</li>
- <li>Opóźnione ładowanie (ang. Lazy loading) relacji</li>
- </ul>
-<h2>Implikacje modelu</h2>
-<p>
-Implementacja wzorca Aktywnego Rekordu w PRADO nie zapewnia referencyjnej tożsamości (ang. referential identity). Każdy istniejący obiekt używający
-Rekordu Aktywnego jest koopią danych z bazy danych. Na przykład jeśli zapytasz o konkretnego klienta i zostanie zwrócony obiekt <tt>Klient</tt>,
-to następnym razem kiedy zapytasz o tego klienta otrzymasz spowrotem inną instancję obiektu <tt>Klient</tt>. To implikuje, że ścisłe porównianie (np. używając <tt>===</tt>)
-zwróci fałsz, natomiast luźne porównianie (np. używając <tt>==</tt>) zwróci prawdę jeśli wartości obiektu są równe poprzez luźne porónanie.
-<p>
-<p>
-Jest to implikacja modelu wynikająca z następującego pytania:
-<i>"Czy myślisz o kliencie jako o obiekcie, którego któy jest tylko jeden, czy też myślisz o obiekcie na którym działasz jako o <b>kopii</b> bazy danych.</i>
-Inne mapowania O/R implikują, że istnieje tylko jeden obiekt Klienta z KlientID 100
-Other O/R mappings will imply that there is only one Customer object with custID 100 i to dosłownie jest ten klient.
-Jeśli pobierzesz klienta i zmienisz pole w nim, wtedy masz zmienionego tego klienta.
-<i>"To kontroastuje z: zmieniłeś tą kopię klienta ale nie tamtą kopię.
-Jeśli dwóch ludzi zaktualizuje kleinta z dwóch kopii obiektu, kto zaktualizuje pierwszy lub być może ostanie wygrywa."</i> [A. Hejlsberg 2003]
-</p>
-
-<h2 id="142010">Wspierane bazy danych</h2>
-<p id="p1" class="block-content">
-Implementacja Aktywnego Rekordu wykorzystuje kalsy <a href="?page=Database.DAO">Prado DAO</a> by uzyskać dostęp do danych. Aktualna implementacja Aktywnego Rekordu wspiera następujace bazy danych
-</p>
-<ul>
- <li><a href="http://www.mysql.com">MySQL 4.1 i wyższe</a></li>
- <li><a href="http://www.postgres.com">Postgres SQL 7.3 i wyższe</a></li>
- <li><a href="http://www.sqlite.org">SQLite 2 i 3</a></li>
- <li><a href="#">MS SQL 2000 i wyższe</a></li>
- <li><a href="http://www.oracle.com">Oracle Database (alfa)</a></li>
-</ul>
-<p id="710009" class="block-content">Wsparcie dla pozostałych baz danych może zostać wprowadzone, keidy będzie dostatecne zapotrzebowanie</p>
-
-<h1 id="138048">Definiowanie Aktywnego Rekordu</h1>
-<p id="690483" class="block-content">Rozważmy następującą tablicę "<tt>users</tt>", która zawiera dwie kolumny nazwane "<tt>username</tt>" oraz "<tt>email</tt>",
- gdzie "<tt>username</tt>" jest kluczem głównym.
-<com:TTextHighlighter Language="sql" CssClass="source block-content" id="code_690147">
-CREATE TABLE users
-(
- username VARCHAR( 20 ) NOT NULL ,
- email VARCHAR( 200 ) ,
- PRIMARY KEY ( username )
-);
-</com:TTextHighlighter>
-</p>
-<p id="690484" class="block-content">Następnie zdefiniujemy naszą klasę Rekordu Aktywnego odpowiadającą tablicy "<tt>users</tt>".
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690148">
-class UserRecord extends TActiveRecord
-{
- const TABLE='users'; //nazwa tablicy
-
- public $username; //kolumna nazwana "username" w tablicy "users"
- public $email;
-
- /**
- * @return TActiveRecord intancja finder rekordu aktywnego
- */
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
-</com:TTextHighlighter>
-</p>
-<p id="690485" class="block-content">Każda kolumna tablicy "<tt>users</tt>" musi posiadać odpowiadającą jej właściwość o tej samej nazwie co kolumna w tablicy w klasie <tt>UserRecord</tt>.
- Oczywiście, możesz zdefiniować dodatkowe zmienne lub właściwości, które nie istnieją w strukturze tablicy.
- Stała <tt>TABLE</tt> jest opcjonalna w klasie , kiedy nazwa klasy jest taka sama jak nazwa tablicy w bazie danych, w przeciwnym przypadku <tt>TABLE</tt>
- musi określać nazwę tablicy, która odpowiada klasie Rekordu Aktywnego.
-</p>
-
-<div class="tip"><b class="note">Tip:</b>
-Możesz określić kwalifikowane (ang. qualified) nazwy tablic np dla MySQL, <tt>TABLE = "`bazadanych1`.`tablica1`"</tt>.
-</div>
-
-<p class="block-content" id="ar_as_component">
- Odkąd <tt>TActiveRecord</tt> rozszerza <tt>TComponent</tt>, metody setter i getter mogą zostać zdefiniowane
- by umożliwić kontrolę nad tym jak zmienne są ustawiane i zwracane. Na przykłąd dodanie właściwości <tt>$level</tt>
- do klasy UserRecord:
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690149">
-class UserRecord extends TActiveRecord {
- ... //istniejąca uprzednio część definicji
-
- private $_level;
- public function setLevel($value) {
- $this->_level=TPropertyValue::ensureInteger($value,0);
- }
- public function getLevel($value){
- return $this->_level;
- }
-}
-</com:TTextHighlighter>
-<p id="710010" class="block-content">Więcej szczegółów dotyczących TComponent można znaleźć <a href="?page=Fundamentals.Components1">dokumentacji komponentów</a>.
-Później użyjemy metod getter/setters by umożliwić opóźnione ładowanie (ang. lazy loading) obiektów relacji.
-</p>
-
-<div class="info"><b class="note">Info:</b>
-<tt>TActiveRecord</tt> może również działać z widokami poprzez przypisanie do stałej <tt>TABLE</tt>
- odpowiedniej nazwy widoku. Jednakże obiektu zwracane przez widoki są tylko do odczytu, wywołanie metod <tt>save()</tt> lub <tt>delete()</tt>
-spowoduje wywołanie wyjątku.
-</div>
-
-<p id="690486" class="block-content">
- Metoda statyczna <tt>finder()</tt> zwraca instancję <tt>UserRecord</tt>, która może zostać użyta do załadowania rekordów z bazy.
- Ładowanie rekordów za pomocą tej metody będzie omówione później. Statyczna metoda <tt>TActiveRecord::finder()</tt>
- pobiera nazwę klasy Rekord Aktywnego jako parametr.
-</p>
-
-<h2 id="138049">Ustanawianie połączenia z bazą danych</h2>
-<p id="690487" class="block-content">
- Domyślne połączenie z bazą dla Rekordu Aktywnego może zostać ustawione następujaco.
- Zobacz <a href="?page=Database.DAO">Ustanawianie połączenia z bazą</a>
- by uzyskać ogólnie dalsze szczegóły odnośnie tworzenia połączenia z bazą danych.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690150">
-//utwóz połączenie i przekaż je do menadżera Rekordu Aktywnego
-$dsn = 'pgsql:host=localhost;dbname=test'; //Postgres SQL
-$conn = new TDbConnection($dsn, 'dbuser','dbpass');
-TActiveRecordManager::getInstance()->setDbConnection($conn);
-</com:TTextHighlighter>
-
-<p id="710011" class="block-content">Alternatywnie, możesz stworzyć klasę bazową i nadpisać metodę <tt>getDbConnection()</tt>
-do zwracania połączenia z bazą. To jest prosty spodób, by umożliwić wielkokrotne połączenia do wielu baz danych.
- Następujący kod demonstruje definiowanie połączenia z bazą danych w klasie bazowej (nie ma potrzeby by ustawiać połączenie DB gdziekolwiek indziej).
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class MyDb1Record extends TActiveRecord
-{
- public function getDbConnection()
- {
- static $conn;
- if($conn===null)
- $conn = new TDbConnection('xxx','yyy','zzz');
- return $conn;
- }
-}
-class MyDb2Record extends TActiveRecord
-{
- public function getDbConnection()
- {
- static $conn;
- if($conn===null)
- $conn = new TDbConnection('aaa','bbb','ccc');
- return $conn;
- }
-}
-</com:TTextHighlighter>
-
-
-<h3 class="prado-specific">Używanie <tt>application.xml</tt> w frameworku Prado</h3>
-<div class="prado-specific">
-<p id="690488" class="block-content">
- Domyślne połączenie z bazą może zostać również skonfigurowane używając tagu <tt>&lt;module&gt;</tt>
- w pliku <a href="?page=Configurations.AppConfig">application.xml</a>
- lub <a href="?page=Configurations.PageConfig">config.xml</a> następująco:
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_690151">
-<modules>
- <module class="System.Data.ActiveRecord.TActiveRecordConfig" EnableCache="true">
- <database ConnectionString="pgsql:host=localhost;dbname=test"
- Username="dbuser" Password="dbpass" />
- </module>
-</modules>
-</com:TTextHighlighter>
-<div class="tip"><b class="note">Wskazówka:</b>
- Atrybut <tt>EnableCache</tt> gdy ustawiony na "true" będzie keszował metadane tablicy, to oznacza, że nazwy kolumn, indeksy i ograniczenia (ang. constraints)
- są zapisywane w keszu i używane ponownie. Musisz wyczyścić lub wyłączyć kesz jeśli chcesz zobaczyć wprowadzone zmiany do definicji twoich tablic.
- <a href="?page=Advanced.Performance#6402">Moduł keszowania</a> musi być również zdefiniowany dla keszu by zadziałał.
-</div>
-</p>
-
-<p id="690489" class="block-content">Do właściwość <tt>ConnectionID</tt> może zostać przypisana wartość ID z konfiguracji z innego modułu
- <tt>TDataSourceConfig</tt>. To pozwala uyżywać to połączenie z bazą danych w innych modułach, takich jak <a href="?page=Database.SqlMap">SqlMap</a> (mapa SQL).
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_690152">
-<modules>
- <module class="System.Data.TDataSourceConfig" id="db1">
- <database ConnectionString="pgsql:host=localhost;dbname=test"
- Username="dbuser" Password="dbpass" />
- </module>
-
- <module class="System.Data.ActiveRecord.TActiveRecordConfig"
- ConnectionID="db1" EnableCache="true" />
-
- <module class="System.Data.SqlMap.TSqlMapConfig"
- ConnectionID="db1" ... />
-</modules>
-</com:TTextHighlighter>
-</p>
-</div>
-
-<h2 id="138050">Ładowanie danych z tablicy</h2>
-<p id="690490" class="block-content">
- Klasa <tt>TActiveRecord</tt> dostarcza wielu wygodnych metod do wyszukiwania rekordów z bazy danych.
- Najprostszym jest znajdowanie jednego rekordu poprzez dopasowanie klucza głównego lub klucza złożonego (ang. composite key)
- (klucz główny skłądający się z wielu kolumn).
- Zobacz <com:DocLink ClassPath="System.Data.ActiveRecord.TActiveRecord" /> by dowiedzieć się więcej.
-</p>
-
-<div class="info"><b class="note">Info:</b>
-Wszystkie metody wyszukujące, które mogą zwrócić tylko 1 rekord zwrócą <tt>null</tt> jeśli nie znajdą pasujących danych.
-Wszystkie metody wyszukujące, które zwracają tablicę rekordów zwrócą pustą tablicęm jeśli nie znajdą pasujących danych.
-</div>
-
- <h3 id="138055"><tt>findByPk()</tt></h3>
- <p id="690491" class="block-content">Znajduje jeden rekord używając klucza głównego lub klucza złożonego.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690153">
-$finder = UserRecord::finder();
-$user = $finder->findByPk($primaryKey);
-
-//kiedy tablica używa klucza złożonego
-$record = $finder->findByPk($key1, $key2, ...);
-$record = $finder->findByPk(array($key1, $key2,...));
-</com:TTextHighlighter>
-</p>
-
- <h3 id="138056"><tt>findAllByPks()</tt></h3>
- <p id="690492" class="block-content">Znajduje wiele rekordów używając listy kluczy głównych lub kluczy złożonych.
-Co następuje jest odpowiednie dla kluczów głównych (klucz główny składa się tylko z jednego pola/kolumny)
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690154">
-$finder = UserRecord::finder();
-$users = $finder->findAllByPks($key1, $key2, ...);
-$users = $finder->findAllByPks(array($key1, $key2, ...));
-</com:TTextHighlighter>
-Co następuje jest odpowiednie dla kluczów złożonych:
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690155">
-//kiedy tablica używa klucza złożonego
-$record = $finder->findAllByPks(array($key1, $key2), array($key3, $key4), ...);
-
-$keys = array( array($key1, $key2), array($key3, $key4), ... );
-$record = $finder->findAllByPks($keys);
-</com:TTextHighlighter>
-
-
-<h3 id="138057"><tt>find()</tt></h3>
-<p id="690493" class="block-content">Znajduje <b>pojedyńczy rekord</b>, który spełnia kryteria. Kryteria mogą być częściowym łąńcuchem SQL lub obiektem <tt>TActiveRecordCriteria</tt></p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690156">
-$finder = UserRecord::finder();
-
-//:name oraz :pass są pojemnikami dla konkretnych wartości $name oraz $pass
-$finder->find('username = :name AND password = :pass',
- array(':name'=>$name, ':pass'=>$pass));
-
-//użycie znaków zastępczych
-$finder->find('username = ? AND password = ?', array($name, $pass));
-//jak wyżej
-$finder->find('username = ? AND password = ?', $name, $pass);
-
-//$criteria są typu TActiveRecordCriteria
-$finder->find($criteria); //drugi parametr dla find() jest zignorowany.
-</com:TTextHighlighter>
-
-<p id="690494" class="block-content">Klasa <tt>TActiveRecordCriteria</tt> ma następujące właściwości:
-</p>
- <ul id="u2" class="block-content">
- <li><tt>Parameters</tt> -- pary wartość nazwa parametru.</li>
- <li><tt>OrdersBy</tt> -- nazwa kolumny i sortowanie par</li>
- <li><tt>Condition</tt> -- część WHERE zapytania SQL</li>
- <li><tt>Limit</tt> -- maksymalna ilość rekordów, któe zostaną zwrócone.</li>
- <li><tt>Offset</tt> -- offset rekordów w tablicy.</li>
- </ul>
-
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690157">
-$criteria = new TActiveRecordCriteria;
-$criteria->Condition = 'username = :name AND password = :pass';
-$criteria->Parameters[':name'] = 'admin';
-$criteria->Parameters[':pass'] = 'prado';
-$criteria->OrdersBy['level'] = 'desc';
-$criteria->OrdersBy['name'] = 'asc';
-$criteria->Limit = 10;
-$criteria->Offset = 20;
-</com:TTextHighlighter>
-
-<div class="note"><b class="note">Przypis:</b>
-For MSSQL and when <tt>Limit</tt> and <tt>Offset</tt> are positive integer values. The
-actual query to be executed is modified by the
-<com:DocLink ClassPath="System.Data.ActiveRecord.Common.Mssql.TMssqlCommandBuilder"
-Text="TMssqlCommandBuilder"
-/>
-class according to
-<a href="http://troels.arvin.dk/db/rdbms/#select-limit-offset">http://troels.arvin.dk/db/rdbms/</a>
-to emulate the <tt>Limit</tt> and <tt>Offset</tt> conditions.
-</div>
-
-<h3 id="138058"><tt>findAll()</tt></h3>
-<p id="690495" class="block-content">Podobnie jak <tt>find()</tt> ale zwraca tablicę obiektów.</p>
-
-<h3 id="138059"><tt>findBy*()</tt> oraz <tt>findAllBy*()</tt></h3>
-<p id="690496" class="block-content">Dynamiczne metody wyszukujące używające część nazwy metody jako kryteria wyszukiwania.
-Metody zaczynające się od słów <tt>findBy</tt> zwracają tylko 1 rekord natomiast metody zaczynające się <tt>findAllBy</tt> zwracają tablicę obiektów.
-Warunej jest wzięty jako część nazwy metody po przedrostku <tt>findBy</tt> lub <tt>findAllBy</tt>.
-
-Następujące bloki kodów są sobie równoważne:
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690158">
-$finder->findByName($name)
-$finder->find('Name = ?', $name);
-</com:TTextHighlighter>
-
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690159">
-$finder->findByUsernameAndPassword($name,$pass);
-$finder->findBy_Username_And_Password($name,$pass);
-$finder->find('Username = ? AND Password = ?', $name, $pass);
-</com:TTextHighlighter>
-
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690160">
-$finder->findAllByAge($age);
-$finder->findAll('Age = ?', $age);
-</com:TTextHighlighter>
-
-<div class="tip"><b class="note">Tip:</b>
-Możesz również użyć połączenia <tt>AND</tt> oraz <tt>OR</tt> jako warunek w dynamicznych metodach.
-</div>
-
-<h3 id="138060"><tt>findBySql()</tt> oraz <tt>findAllBySql()</tt></h3>
-<p id="690497" class="block-content">Znajdują rekordy używając pełnego zapytania SQL z tym, że <tt>findBySql()</tt>
-zwraca Rekord Aktywny a <tt>findAllBySql()</tt>zwraca tablicę obiektów rekordów.
-Dla każdej zwróconej kolumny, odpowiadająca klasa Rekordu Aktywnego musi posiadać zdefiniowaną zmienną lub właściwość odpowiadającą nazwie kolumny.
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class UserRecord2 extends UserRecord
-{
- public $another_value;
-}
-$sql = "SELECT users.*, 'hello' as another_value FROM users";
-$users = TActiveRecord::finder('UserRecord2')->findAllBySql($sql);
-</com:TTextHighlighter>
-</p>
-<h3 id="138061"><tt>count()</tt></h3>
-<p id="690498" class="block-content">Zlicza ilość pasujących rekordów, akceptuje te same parametry co metoda <tt>findAll()</tt></p>
-
-<h2 id="138051">Wstawianie i aktualizowanie rekordów</h2>
-<p id="690499" class="block-content">
-Dodanie nowego rekordu za pomocą TActiveRecord jest bardzo łatwe, po prostu stwórz nowy obiekt Rekordu Aktywnego i wywołaj metodę <tt>save()</tt>. Na przykład
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690161">
-$user1 = new UserRecord();
-$user1->username = "admin";
-$user1->email = "admin@example.com";
-$user1->save(); //wstaw nowy rekord
-
-$data = array('username'=>'admin', 'email'=>'admin@example.com');
-$user2 = new UserRecord($data); //stwórz przekazując istniejące dane
-$user2->save(); //wstaw nowy rekord
-</com:TTextHighlighter>
-<div class="tip"><b class="note">Wskazówka:</b>
-Obiekty są aktualizowe automatycznie o wartość klucza głównego dla tych tablic, które zawierają definicję
-określającą automatyczne tworzenie klucza głównego dla nowo tworzonych rekordów (przyp. tłum. autoincrement).
-Na przykład jeśli wstawiasz nowy rekord do tablicy MySQL która posiada kolumnę zdefiniowaną jako to obiekt Rekordu Aktywnego
-zostanie zaktualizowant o nową zwiększoną wartość.</div>
-
-<p id="690500" class="block-content">
-Aby zaktualizować rekord w bazie danych po prostu zmień jedną lub więcej właściwości obiektu Rekordu Aktywnego które zostały odczytane z bazy a następnie wywołaj metodę <tt>save()</tt>.
-
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690162">
-$user = UserRecord::finder()->findByName('admin');
-$user->email="test@example.com"; //zmiana właściwości
-$user->save(); //zaktualizuj ją
-</com:TTextHighlighter>
-</p>
-
-<p id="710012" class="block-content">
-Obiekt Rekordu Aktywnego posiada prosty cykl życia zilustrowany następujący diagram.
-</p>
-<img src=<%~ object_states.png %> alt="Active Records Life Cycle" id="fig:cycle.png" class="figure"/>
-<p id="690501" class="block-content">
-Widzimy, że nowe obiekty Rekordu Aktywnego są tworzone zarówno przez jedną z metod <tt>find*()</tt>
-lub poprzez stworzenie nowej instancji poprzez użycie polecenia PHP <tt>new</tt>. Obiekty stworzone przez metodę <tt>find*()</tt>
-zaczynają ze stanem <tt>czysty (ang. clean)</tt>. Nowa instancja TActiveRecord stworzona inaczej niż za pomocą metod <tt>find*()</tt> zaczyna ze stanem <tt>nowy (ang. new)</tt>.
-Kiedykolwiek wywołasz metodę <tt>save()</tt> na obiekcie TActiveRecord, obiekt przyjmuje stan <tt>czysty</tt>.
-Obiekty będące <tt>czystymi</tt> stają się <tt>brudne (ang. dirty)</tt> kiedy jeden lub więcej ze stwoich wewnętrznych stanów ulegnie zmianie.
-Wywoałanie metody <tt>delete()</tt> obiektu kończy cykl życia, żadne inne akcje nie mogą być wywołane na obiekcie.
-</p>
-
-<h2 id="138052">Usuwanie istniejących obiektów</h2>
-<p id="690502" class="block-content">
- Aby usunąc istniejący rekord, który jest załadowany, po prostu wywołaj metodę <tt>delete</tt>.
- Możesz rónież usunąć rekord w bazie danych poprzez klucz główny bez ładowania żadnego rekordu używając metody
- <tt>deleteByPk()</tt> (również metoda <tt>deleteAllByPks()</tt>).
- Na przykład, aby usunąć jeden lub więcej rekordów z tabeli używając jednego lub wielu kluczów głównych:
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690163">
-$finder->deleteByPk($primaryKey); //usuwanie 1 rekordu
-$finder->deleteAllByPks($key1,$key2,...); //usuwanie wielu rekordów
-$finder->deleteAllByPks(array($key1,$key2,...)); //usuwanie wielu rekordów
-</com:TTextHighlighter>
-
-<p id="690503" class="block-content">
-Dla klucza złożonego (ustalanego automatycznie na podstawie definicji tablicy):
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690164">
-$finder->deleteByPk(array($key1,$key2)); //usuwanie 1 rekordu
-
-//usuwanie wielu rekordów
-$finder->deleteAllByPks(array($key1,$key2), array($key3,$key4),...);
-
-//usuwanie wielu rekordów
-$finder->deleteAllByPks(array( array($key1,$key2), array($key3,$key4), .. ));
-</com:TTextHighlighter>
-
-<h3 id="138052a"><tt>deleteAll()</tt> oraz <tt>deleteBy*()</tt></h3>
-<p id="690502a" class="block-content">
-Aby usunąć używając kryteria użyj <tt>deleteAll($criteria)</tt> oraz <tt>deleteBy*()</tt>
-z podobną składnią jak <tt>findAll($criteria)</tt> oraz <tt>findAllBy*()</tt> opisaną wcześniej.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690163a">
-//usuwanie wszystkich rekordów z pasującym Name
-$finder->deleteAll('Name = ?', $name);
-$finder->deleteByName($name);
-
-//usuwanie na podstawie Name oraz Password
-$finder->deleteBy_Username_And_Password($name,$pass);
-</com:TTextHighlighter>
-
-<h2 id="138053">Tranzakcje</h2>
-<p id="690504" class="block-content">Wszystkie obiekkty Rekordu Aktywnego zawierają właściwość <tt>DbConnection</tt>,
- która może być używana by uzyskać obiekt tranzakcyjny.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_690165">
-$finder = UserRecord::finder();
-$finder->DbConnection->Active=true; //otwórz jeśli to konieczne
-$transaction = $finder->DbConnection->beginTransaction();
-try
-{
- $user = $finder->findByPk('admin');
- $user->email = 'test@example.com'; //zmień obiekt użytkownika $user
- $user->save();
- $transaction->commit();
-}
-catch(Exception $e) // wyjątek jest wołany jeśli zapytanie nie powiedzie się
-{
- $transaction->rollBack();
-}
-</com:TTextHighlighter>
-
-<h2 id="142011">Zdarzenia</h2>
-<p id="710013" class="block-content">
-Rekord Aktywny oferuje dwa zdarzenia: <tt>OnCreateCommand</tt> oraz <tt>OnExecuteCommand</tt>.
-</p>
-
-<p id="710014" class="block-content">Zdarzenie <tt>OnCreateCommand</tt> jest wołane gdy polecenie jest przygotowywane i przypisywanie (ang. binding) parametrów jest zakończone.
- Parametrem obiektu jest <tt>TDataGatewayEventParameter</tt>, którego właściwość <tt>Command</tt> może być sprawdzona by otrzymać zapytanie, które będzie wykonane wykonywane.
-</p>
-
-<p id="710015" class="block-content">
-Zdarzenie <tt>OnExecuteCommand</tt> jest wywoływane kiedy polecenie jest wykonane i rezultat z bazy danych został zwrócony.
- Parametrem obiektu jest <tt>TDataGatewayResultEventParameter</tt>, którego właściwość <tt>Result</tt> zawiera dane zwrócone z bazy danych.
- Dane zwrócone mogą zostać zmienione poprzez ustawienie właściwości <tt>Result</tt>.
-</p>
-
-<h3 id="142016">Przykład z logowaniem</h3>
-<p id="710016" class="block-content">Używając <tt>OnExecuteCommand</tt> możemy przypiąć uchwyt zdarzenia by logować całe
-zapytanie SQL wwywoływane dla danej instancji lub klasy TActiveRecord. Na przykład definiujemy klasę bazową i nadpisujemy
-metodę <tt>getDbConnection()</tt> lub konstruktor.
-</p>
-
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class MyDb1Record extends TActiveRecord
-{
- public function getDbConnection()
- {
- static $conn;
- if($conn===null)
- {
- $conn = new TDbConnection('xxx','yyy','zzz');
- $this->OnExecuteCommand[] = array($this,'logger');
- }
- return $conn;
- }
- public function logger($sender,$param)
- {
- var_dump($param->Command->Text);
- }
-}
-//alternatively as per instance of per finder object
-function logger($sender,$param)
-{
- var_dump($param->Command->Text);
-}
-TActiveRecord::finder('MyRecord')->OnExecuteCommand[] = 'logger';
-$obj->OnExecuteCommand[] = array($logger, 'log'); //dowolny poprawny callback PHP
-</com:TTextHighlighter>
-
-<h1 id="ar_relations">Relacje dla Rekordu Aktywnego</h1>
-<com:SinceVersion Version="3.1rc1" />
-<p id="690504a" class="block-content">
-Implementacja Rekordu Aktywnego w Prado wspiera mapowanie kluczów obcych dla baz, które wspierają ograniczenia (ang. constraints) kluczów obcych.
- Aby relacje dla Rekordu Aktywnego działały używana baza danych musi wspierać ograniczenia klucza głównego (np. MySQL używająca InnoDB)
-</p>
-
-<p id="710017" class="block-content">
-W następnych sekcjach będziemy rozważać nastepujące relacje pomiędzy tabelami <tt>Teams</tt>, <tt>Players</tt>, <tt>Skills</tt> oraz <tt>Profiles</tt>.
-</p>
-<img src=<%~ ar_relations.png %> class="figure" />
-
-
-<p id="710018" class="block-content">Celem jest uzyskanie modelu obiektowego, który będzie reprezetnował w pewnym stopniu relacje pomiędzy polami z powyższego rysunku.
-</p>
-
-<img src=<%~ ar_objects.png %> class="figure" />
-
-<p class="block-content">
-Istnieje rozbieżność pomiędzy relacjami w obiektach i relacjami w tablicach.
- Po pierwsze jest różnica w reprezentacji. Obiekty trzymają powiązanie poprzez przechowywanie referencji,
-które są trzymane poprzez zarządzające pamięcią środowiko uruchomieniowe. Bazy relacyjne trzymają powiązanie poprzez utworzenie klucza do innej tablicy.
- Po drugie, obiekty mogą łatwo uzywać kolekcji by trzymać wielokrotnie referencje z jednego pola,
-to handle multiple references from a single field, gdyż normalizacja zmusza wszystkie powiązania relacji encji by były pojedyńczymi wartościami.
-To prowadzi do odwrócenia struktury danych pomiędzy obiektami i tablicami.
-Podejście zastosowane w modelu Rekordu Aktywnego Prado uzywa ograniczeń kluczów obcych tablicy do wyprowadzenia relacji obiektów.
-To implikuje fakt wspierania ograniczeń kluczów obcych dla bazy danych.
-</p>
-<div class="tip"><b class="note">Tip:</b>
-Dla baz danych SQLite możesz stworzyć tablice, które definiują ograniczenia kluczó obcych tak jak na przykładzie poniżej.
-Jednakże te ograniczenia <b>NIE SĄ</b> narzucane przez samą bazę SQLite.
-<com:TTextHighlighter Language="sql" CssClass="source block-content">
-CREATE TABLE foo
-(
- id INTEGER NOT NULL PRIMARY KEY,
- id2 CHAR(2)
-);
-CREATE TABLE bar
-(
- id INTEGER NOT NULL PRIMARY KEY,
- foo_id INTEGER
- CONSTRAINT fk_foo_id REFERENCES foo(id) ON DELETE CASCADE
-);
-</com:TTextHighlighter>
-</div>
-
-<h2 id="142012">Mapowanie kluczów obcych</h2>
-<p class="block-content">Relacja pól pomiędzy tablicami <tt>Teams</tt> and <tt>Players</tt> jest znana jako relacja jeden-do-wielu (ang. 1-M). Oznacza to, że jeden Team moze zawierać zero lub więcej Players. Z punktu widzenia relacji obiektów
-powiemy, że obiekt <tt>TeamRecord</tt> <b>posiada wiele</b> (ang. has many) obiektów <tt>PlayerRecord</tt>.
-(Zauważ odwrócenie kierunku relacji pomiędzy tablicami a obiektami)
-</p>
-
-<h3 id="142017">Relacja posiada wiele (ang. has Many Relationship)</h3>
-<p id="710020" class="block-content">
-Zamodelujemy obiekt <tt>Team</tt> jako następującą klasę Rekordu Aktywnego.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class TeamRecord extends TActiveRecord
-{
- const TABLE='Teams';
- public $name;
- public $location;
-
- public $players=array(); // this declaration is no longer needed since v3.1.2
-
- //define the $player member having has many relationship with PlayerRecord
- public static $RELATIONS=array
- (
- 'players' => array(self::HAS_MANY, 'PlayerRecord', 'team_name'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
-</com:TTextHighlighter>
-<p id="710021" class="block-content">
-The static <tt>$RELATIONS</tt> property of <tt>TeamRecord</tt> defines that the
-property <tt>$players</tt> <b>has many</b> <tt>PlayerRecord</tt>s. Multiple relationships
-is permitted by defining each relationship with an entry in the <tt>$RELATIONS</tt>
-array where array key for the entry corresponds to the property name.
-In <tt>array(self::HAS_MANY, 'PlayerRecord')</tt>, the first element defines the
-relationship type, the valid types are <tt>self::HAS_MANY</tt>, <tt>self::HAS_ONE</tt>,
-<tt>self::BELONGS_TO</tt> and <tt>self::MANY_TO_MANY</tt>.
-The second element is a string <tt>'PlayerRecord'</tt> that corresponds to the
-class name of the <tt>PlayerRecord</tt> class.
-And the third element 'team_name' refers to the foreign key column in the Players table that
-references to the Teams table.
-</p>
-
-<div class="note"><b class="note">Note:</b>
-As described in the code comment above, since version <b>3.1.2</b>, related properties no longer
-need to be explicitly declared. By default, they will be implicitly declared according to
-keys of the <tt>$RELATIONS</tt> array. A major benefit of declared related properties implicitly
-is that related objects can be automatically loaded in a lazy way. For example, assume we have
-a <tt>TeamRecord</tt> instance <tt>$team</tt>. We can access the players via <tt>$team->players</tt>,
-even if we have never issued fetch command for players. If <tt>$players</tt> is explicitly declared,
-we will have to use the <tt>with</tt> approach described in the following to fetch the player records.
-</div>
-
-<p id="710022" class="block-content">
-The foreign key constraint of the <tt>Players</tt> table is used to determine the corresponding
-<tt>Teams</tt> table's corresponding key names. This is done automatically handled
-in Active Record by inspecting the <tt>Players</tt> and <tt>Teams</tt> table definitions.
-</p>
-
-<div class="info"><b class="note">Info:</b>
-Since version <b>3.1.2</b>, Active Record supports multiple foreign key
-references of the same table. Ambiguity between multiple foreign key references to the same table is
-resolved by providing the foreign key column name as the 3rd parameter in the relationship array.
-For example, both of the following foreign keys <tt>owner_id</tt> and <tt>reporter_id</tt>
-references to the same table defined in <tt>UserRecord</tt>.
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class TicketRecord extends TActiveRecord
-{
- public $owner_id;
- public $reporter_id;
-
- public $owner; // this declaration is no longer needed since v3.1.2
- public $reporter; // this declaration is no longer needed since v3.1.2
-
- public static $RELATION=array
- (
- 'owner' => array(self::BELONGS_TO, 'UserRecord', 'owner_id'),
- 'reporter' => array(self::BELONGS_TO, 'UserRecord', 'reporter_id'),
- );
-}
-</com:TTextHighlighter>
-This is applicable to relationships including <tt>BELONGS_TO</tt>, <tt>HAS_ONE</tt> and
-<tt>HAS_MANY</tt>. See section <a href="#142021">Self Referenced Association Tables</a> for solving ambiguity of <tt>MANY_TO_MANY</tt>
-relationships.
-</div>
-
-<p id="710023" class="block-content">The "has many" relationship is not fetched automatically when you use any of the Active Record finder methods.
-You will need to explicitly fetch the related objects as follows. In the code below, both lines
-are equivalent and the method names are case insensitive.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-$team = TeamRecord::finder()->withPlayers()->findAll();
-$team = TeamRecord::finder()->with_players()->findAll(); //equivalent
-</com:TTextHighlighter>
-<p id="710024" class="block-content">
-The method <tt>with_xxx()</tt> (where <tt>xxx</tt> is the relationship property
-name, in this case, <tt>players</tt>) fetches the corresponding PlayerRecords using
-a second query (not by using a join). The <tt>with_xxx()</tt> accepts the same
-arguments as other finder methods of TActiveRecord, e.g. <tt>with_players('age = ?', 35)</tt>.
-</p>
-
-<div class="note"><b class="note">Note:</b>
-It is essential to understand that the related objects are fetched using additional
-queries. The first query fetches the source object, e.g. the <tt>TeamRecord</tt> in the above example code.
-A second query is used to fetch the corresponding related <tt>PlayerRecord</tt> objects.
-The usage of the two query is similar to a single query using Left-Outer join with the
-exception that null results on the right table
-are not returned. The consequence of using two or more queries is that the aggregates
-and other join conditions are not feasible using Active Records. For queries outside the
-scope of Active Record the <a href="?page=Database.SqlMap">SqlMap Data Mapper</a> may be considered.
-</div>
-
-<div class="info"><b class="info">Info:</b>
-The above <tt>with</tt> approach also works with implicitly declared related properties (introduced
-in version 3.1.2). So what is the difference between the <tt>with</tt> approach and the lazy loading
-approach? Lazy loading means we issue an SQL query if a related object is initially accessed and not ready,
-while the <tt>with</tt> approach queries for the related objects once for all, no matter the related objects
-are accessed or not. The lazy loading approach is very convenient since we do not need to explictly
-load the related objects, while the <tt>with</tt> approach is more efficient if multiple records are
-returned, each with some related objects.
-</div>
-
-<h3 id="142019">Has One Relationship</h3>
-<p id="710030" class="block-content">The entity relationship between <tt>Players</tt> and <tt>Profiles</tt> is one to one. That is,
-each <tt>PlayerRecord</tt> object <b>has one</b> <tt>ProfileRecord</tt> object (may be none or null).
-A <b>has one</b> relationship is nearly identical to a <b>has many</b> relationship with the exception
-that the related object is only one object (not a collection of objects).
-</p>
-
-<h3 id="142018">Belongs To Relationship</h3>
-<p id="710025" class="block-content">The "has many" relationship in the above section defines a collection of foreign
-objects. In particular, we have that a <tt>TeamRecord</tt> has many (zero or more)
-<tt>PlayerRecord</tt> objects. We can also add a back pointer by adding a property
-in the <tt>PlayerRecord</tt> class that links back to the <tt>TeamRecord</tt> object,
-effectively making the association bidirectional.
-We say that the <tt>$team</tt> property in <tt>PlayerRecord</tt> class <tt>belongs to</tt> a <tt>TeamRecord</tt> object.
-The following code defines the complete <tt>PlayerRecord</tt> class with 3 relationships.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class PlayerRecord extends TActiveRecord
-{
- const TABLE='Players';
- public $player_id;
- public $age;
- public $team_name;
-
- public $team; // this declaration is no longer needed since v3.1.2
- public $skills=array(); // this declaration is no longer needed since v3.1.2
- public $profile; // this declaration is no longer needed since v3.1.2
-
- public static $RELATIONS=array
- (
- 'team' => array(self::BELONGS_TO, 'TeamRecord', 'team_name'),
- 'skills' => array(self::MANY_TO_MANY, 'SkillRecord', 'Player_Skills'),
- 'profile' => array(self::HAS_ONE, 'ProfileRecord', 'player_id'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
-</com:TTextHighlighter>
-<p id="710026" class="block-content">
-The static <tt>$RELATIONS</tt> property of <tt>PlayerRecord</tt> defines that the
-property <tt>$team</tt> <b>belongs to</b> a <tt>TeamRecord</tt>.
-The <tt>$RELATIONS</tt> array also defines two other relationships that we
-shall examine in later sections below.
-In <tt>array(self::BELONGS_TO, 'TeamRecord', 'team_name')</tt>, the first element defines the
-relationship type, in this case <strong><tt>self::BELONGS_TO</tt></strong>;
-the second element is a string <tt>'TeamRecord'</tt> that corresponds to the
-class name of the <tt>TeamRecord</tt> class; and the third element 'team_name' refers
-to the foreign key of Players referencing Teams.
-A player object with the corresponding team object may be fetched as follows.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-$players = PlayerRecord::finder()->with_team()->findAll();
-</com:TTextHighlighter>
-
-<p id="710027" class="block-content">
- The method <tt>with_xxx()</tt> (where <tt>xxx</tt> is the relationship property
- name, in this case, <tt>team</tt>) fetches the corresponding <tt>TeamRecords</tt> using
- a second query (not by using a join). The <tt>with_xxx()</tt> accepts the same
-arguments as other finder methods of <tt>TActiveRecord</tt>, e.g.
-<tt>with_team('location = ?', 'Madrid')</tt>.
-</p>
-
-<div class="tip"><b class="note">Tip:</b>
-Additional relationships may be fetched by chaining the <tt>with_xxx()</tt> together as the following
-example demonstrates.
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-$players = PlayerRecord::finder()->with_team()->with_skills()->findAll();
-</com:TTextHighlighter>
-Each <tt>with_xxx()</tt> method will execute an additional SQL query. Every
-<tt>with_xxx()</tt> accepts arguments similar to those in the <tt>findAll()</tt> method and is only
-applied to that particular relationship query.
-</div>
-
-<p id="710028" class="block-content">The "belongs to" relationship of <tt>ProfileRecord</tt> class is defined similarly.</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class ProfileRecord extends TActiveRecord
-{
- const TABLE='Profiles';
- public $player_id;
- public $salary;
-
- public $player; // this declaration is no longer needed since v3.1.2
-
- public static $RELATIONS=array
- (
- 'player' => array(self::BELONGS_TO, 'PlayerRecord'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
-</com:TTextHighlighter>
-
-<p id="710029" class="block-content">In essence, there exists a "<b>belongs to</b>" relationship for objects corresponding to
-entities that has column which are foreign keys. In particular, we see that
-the <tt>Profiles</tt> table has a foreign key constraint on the column <tt>player_id</tt>
-that relates to the <tt>Players</tt> table's <tt>player_id</tt> column. Thus, the <tt>ProfileRecord</tt>
-object has a property (<tt>$player</tt>) that <b>belongs to</b> a <tt>PlayerRecord</tt> object.
-Similarly, the <tt>Players</tt> table has a foreign key constraint on the column <tt>team_name</tt> that relates to the
-<tt>Teams</tt> table's <tt>name</tt> column.
-Thus, the <tt>PlayerRecord</tt> object has a property (<tt>$team</tt>) that <b>belongs to</b> a
-<tt>TeamRecord</tt> object.
-</p>
-
-<h3 id="142020">Parent Child Relationships</h3>
-<p id="710031" class="block-content">A parent child relationship can be defined using a combination of <tt>has many</tt> and <tt>belongs to</tt>
-relationship that refers to the same class. The following example shows a parent children relationship between
-"categories" and a "parent category".
-</p>
-
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class Category extends TActiveRecord
-{
- public $cat_id;
- public $category_name;
- public $parent_cat_id;
-
- public $parent_category; // this declaration is no longer needed since v3.1.2
- public $child_categories=array(); // this declaration is no longer needed since v3.1.2
-
- public static $RELATIONS=array
- (
- 'parent_category' => array(self::BELONGS_TO, 'Category', 'parent_cat_id'),
- 'child_categories' => array(self::HAS_MANY, 'Category', 'parent_cat_id'),
- );
-}
-</com:TTextHighlighter>
-
-<h3>Query Criteria for Related Objects</h3>
-<p>
-In the above, we show that an Active Record object can reference to its related objects by
-declaring a static class member $RELATIONS which specifies a list of relations. Each relation
-is specified as an array consisting of three elements: relation type, related AR class name,
-and the foreign key(s). For example, we use <tt>array(self::HAS_MANY, 'PlayerRecord', 'team_name')</tt>
-to specify the players in a team. There are two more optional elements that can be specified
-in this array: query condition (the fourth element) and parameters (the fifth element).
-They are used to control how to query for the related objects. For example, if we want to obtain
-the players ordered by their age, we can specify <tt>array(self::HAS_MANY, 'PlayerRecord', 'team_name', 'ORDER BY age')</tt>.
-If we want to obtain players whose age is smaller than 30, we could use
-<tt>array(self::HAS_MANY, 'PlayerRecord', 'team_name', 'age<:age', array(':age'=>30))</tt>. In general,
-these two additional elements are similar as the parameters passed to the <tt>find()</tt> method in AR.
-</p>
-
-
-
-<h2 id="142013">Association Table Mapping</h2>
-<p id="710032" class="block-content">
-Objects can handle multivalued fields quite easily by using collections as field values.
-Relational databases don't have this feature and are constrained to single-valued fields only.
-When you're mapping a one-to-many association you can handle this using <b>has many</b> relationships,
-essentially using a foreign key for the single-valued end of the association.
-But a many-to-many association can't do this because there is no single-valued end to
-hold the foreign key.
-</p>
-<p id="710033" class="block-content">
-The answer is the classic resolution that's been used by relational data people
-for decades: create an extra table (an association table) to record the relationship.
-The basic idea is using an association table to store the association. This table
-has only the foreign key IDs for the two tables that are linked together, it has one
-row for each pair of associated objects.
-</p>
-<p id="710034" class="block-content">
-The association table has no corresponding in-memory object and its primary key is the
-compound of the two primary keys of the tables that are associated.
-In simple terms, to load data from the association table you perform two queries (in general, it may also be achieved using one query consisting of joins).
-Consider loading the <tt>SkillRecord</tt> collection for a list <tt>PlayerRecord</tt> objects.
-In this case, you do queries in two stages.
-The first stage queries the <tt>Players</tt> table to find all the rows of the players you want.
-The second stage finds the <tt>SkillRecord</tt> object for the related player ID for each row
-in the <tt>Player_Skills</tt> association table using an inner join.
-</p>
-
-<p id="710035" class="block-content">The Prado Active Record design implements the two stage approach. For the
-<tt>Players</tt>-<tt>Skills</tt> M-N (many-to-many) entity relationship, we
-define a <b>many-to-many</b> relationship in the <tt>PlayerRecord</tt> class and
-in addition we may define a <b>many-to-many</b> relationship in the <tt>SkillRecord</tt> class as well.
-The following sample code defines the complete <tt>SkillRecord</tt> class with a
-many-to-many relationship with the <tt>PlayerRecord</tt> class. (See the <tt>PlayerRecord</tt>
-class definition above to the corresponding many-to-many relationship with the <tt>SkillRecord</tt> class.)
-</p>
-
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class SkillRecord extends TActiveRecord
-{
- const TABLE='Skills';
- public $skill_id;
- public $name;
-
- public $players=array(); // this declaration is no longer needed since v3.1.2
-
- public static $RELATIONS=array
- (
- 'players' => array(self::MANY_TO_MANY, 'PlayerRecord', 'Player_Skills'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
-</com:TTextHighlighter>
-
-<p id="710036" class="block-content">
-The static <tt>$RELATIONS</tt> property of SkillRecord defines that the
-property <tt>$players</tt> has many <tt>PlayerRecord</tt>s via an association table '<tt>Player_Skills</tt>'.
-In <tt>array(self::MANY_TO_MANY, 'PlayerRecord', 'Player_Skills')</tt>, the first element defines the
-relationship type, in this case <strong><tt>self::MANY_TO_MANY</tt></strong>,
-the second element is a string <tt>'PlayerRecord'</tt> that corresponds to the
-class name of the <tt>PlayerRecord</tt> class, and the third element is the name
-of the association table name.
-</p>
-
-<div class="note"><b class="note">Note:</b>
-Prior to version <b>3.1.2</b> (versions up to 3.1.1), the many-to-many relationship was
-defined using <tt>self::HAS_MANY</tt>. For version <b>3.1.2</b> onwards, this must be changed
-to <tt>self::MANY_TO_MANY</tt>. This can be done by searching for the <tt>HAS_MANY</tt> in your
-source code and carfully changing the appropriate definitions.
-</div>
-
-<p id="710037" class="block-content">
-A list of player objects with the corresponding collection of skill objects may be fetched as follows.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-$players = PlayerRecord::finder()->withSkills()->findAll();
-</com:TTextHighlighter>
-<p id="710038" class="block-content">
-The method <tt>with_xxx()</tt> (where <tt>xxx</tt> is the relationship property
-name, in this case, <tt>Skill</tt>) fetches the corresponding <tt>SkillRecords</tt> using
-a second query (not by using a join). The <tt>with_xxx()</tt> accepts the same
-arguments as other finder methods of <tt>TActiveRecord</tt>.
-</p>
-
-<h3 id="142021">Self Referenced Association Tables</h3>
-<p id="710039" class="block-content">
-For self referenced association tables, that is, the association points to the same
-table. For example, consider the <tt>items</tt> table with M-N related
-item via the <tt>related_items</tt> association table. The syntax in the following
-example is valid for a PostgreSQL database. For other database, consult their respective documentation for
-defining the foreign key constraints.
-<com:TTextHighlighter Language="sql" CssClass="source block-content">
-CREATE TABLE items
-(
- "item_id" SERIAL,
- "name" VARCHAR(128) NOT NULL,
- PRIMARY KEY("item_id")
-);
-CREATE TABLE "related_items"
-(
- "item_id" INTEGER NOT NULL,
- "related_item_id" INTEGER NOT NULL,
- CONSTRAINT "related_items_pkey" PRIMARY KEY("item_id", "related_item_id"),
- CONSTRAINT "related_items_item_id_fkey" FOREIGN KEY ("item_id")
- REFERENCES "items"("item_id")
- ON DELETE CASCADE
- ON UPDATE NO ACTION
- NOT DEFERRABLE,
- CONSTRAINT "related_items_related_item_id_fkey" FOREIGN KEY ("related_item_id")
- REFERENCES "items"("item_id")
- ON DELETE CASCADE
- ON UPDATE NO ACTION
- NOT DEFERRABLE
-);
-</com:TTextHighlighter>
-
-<p id="710040" class="block-content">The association table name in third element of the relationship array may
-contain the foreign table column names. The columns defined in the association
-table must also be defined in the record class (e.g. the <tt>$related_item_id</tt> property
-corresponds to the <tt>related_item_id</tt> column in the <tt>related_items</tt> table).
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class Item extends TActiveRecord
-{
- const TABLE="items";
- public $item_id;
- public $details;
-
- //additional foreign item id defined in the association table
- public $related_item_id;
- public $related_items=array(); // this declaration is no longer needed since v3.1.2
-
- public static $RELATIONS=array
- (
- 'related_items' => array(self::MANY_TO_MANY,
- 'Item', 'related_items.related_item_id'),
- );
-}
-</com:TTextHighlighter>
-<div class="tip"><b class="note">Tip:</b>
-Compound keys in the foreign table can
-be specified as comma separated values between brackets. E.g.
-<tt>'related_items.(id1,id2)'</tt>.
-</div>
-
-<!---
-<h2 id="142014">Adding/Removing/Updating Related Objects</h2>
-
-<p id="710041" class="block-content">Related objects can be simply inserted/updated by first adding those related objects to
-the current source object (i.e. the object currently been worked on) and then call
-the <tt>save()</tt> method on the source object. The related object's references
-and the association reference (if required) will be added and/or updated.
-For example, to add two new players to the team (assuming that 'Team A' exists), we can simply do the following.
-</p>
-
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-$team = TeamRecord::finder()->findByPk('Team A');
-$team->players[] = new PlayerRecord(array('age'=>20));
-$team->players[] = new PlayerRecord(array('age'=>25));
-$team->save();
-</com:TTextHighlighter>
-<p id="710042" class="block-content">
-Since the <tt>TeamRecord</tt> class contains a <b>has many</b> relationship with the <tt>PlayerRecord</tt>,
-then saving a <tt>TeamRecord</tt> object will also update the corresponding foreign objects in <tt>$players</tt> array.
-That is, the objects in <tt>$players</tt> are inserted/updated in the database and the
-<tt>$team_name</tt> property of those objects will contain the foreign key value that corresponds to the <tt>$team</tt> object's primary key value.
-</p>
-
-<p id="710043" class="block-content">To delete a particular foreign object (or any Active Record object), simply call
-the object's <tt>delete()</tt> method. You may setup the database table's foreign key constraints such that
-when deleting a particular data in the database it will delete the referenced data as well (it may also be achieved using database
-triggers). E.g. such as having a "<tt>ON DELETE CASCADE</tt>" constraint.
-Deleting foreign objects by either setting the property value to null or removing the object from an array will <b>NOT</b>
-remove the corresponding data in the database.
-</p>
-
-<p id="710044" class="block-content">To remove associations for the many-to-many relationships via an association table, an Active Record
-that corresponds to the association table can be used. Then the association can be removed by calling the <tt>deleteByPk()</tt> method, for example:
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-PlayerSkillAssocation::finder()->deleteByPk(array('fk1','fk2'));
-//where 'fk1' is the primary key value of a player
-// and 'fk2' is the primary key value of a skill
-</com:TTextHighlighter>
---->
-
-<h2 id="142015">Lazy Loading Related Objects</h2>
-
-<div class="note"><b class="note">Note:</b>
-Implicitly declared related properties introduced in version 3.1.2 automatically have lazy
-loading feature. Therefore, the lazy loading technique described in the following is no longer
-needed in most of the cases, unless you want to manipulate the related objects through getter/setter.
-</div>
-
-<p id="710045" class="block-content">Using the <tt>with_xxx()</tt> methods will load the relationship record on demand. Retrieving the
-related record using lazy loading (that is, only when those related objects are accessed) can be
-achieved by using a feature of the <tt>TComponent</tt> that provides accessor methods. In particular,
-we define a pair of getter and setter methods where the getter method will retrieve the relationship
-conditionally. The following example illustrates that the <tt>PlayerRecord</tt> can retrieve its
-<tt>$skills</tt> foreign objects conditionally.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class PlayerRecord extends BaseFkRecord
-{
- //... other properties and methods as before
-
- private $_skills; //change to private and default as null
-
- public function getSkills()
- {
- if($this->_skills===null && $this->player_id !==null)
- {
- //lazy load the skill records
- $this->setSkills($this->withSkills()->findByPk($this->player_id)->skills);
- }
- else if($this->_skills===null)
- {
- //create new TList;
- $this->setSkills(new TList());
- }
-
- return $this->_skills;
- }
-
- public function setSkills($value)
- {
- $this->_skills = $value instanceof TList ? $value : new TList($value);
- }
-}
-</com:TTextHighlighter>
-<p id="710046" class="block-content">We first need to change the <tt>$skills=array()</tt> declaration to a private property
-<tt>$_skills</tt> (notice the underscore) and set it to null instead. This allows us
-to define the <tt>skills</tt> property using getter/setter methods
-(see <a href="?page=Fundamentals.Components1">Components</a> for details). The <tt>getSkills()</tt>
-getter method for the <tt>skills</tt> property will lazy load the corresponding skills foreign record
-when it is used as follows. Notice that we only do a lazy load when its <tt>$player_id</tt> is
-not null (that is, when the record is already fetched from the database or player id was already set).
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-$player = PlayerRecord::finder()->findByPk(1);
-var_dump($player->skills); //lazy load it on first access
-var_dump($player->skills[0]); //already loaded skills property
-$player->skills[] = new SkillRecord(); //add skill
-</com:TTextHighlighter>
-
-<p id="710047" class="block-content">The <tt>setSkills()</tt> ensures that the <tt>skills</tt> property will always be a TList.
-Using a TList allows us to set the elements of the <tt>skills</tt> property as if they were
-arrays. E.g. <tt>$player->skills[] = new SkillRecord()</tt>. If <tt>array</tt> was used, a PHP error
-will be thrown.
-</p>
-
-<h2>Column Mapping</h2>
-<p>
-Since v3.1.1, Active Record starts to support column mapping. Column mapping allows developers
-to address columns in Active Record using a more consistent naming convention. In particular,
-using column mapping, one can access a column using whatever name he likes, rather than limited by
-the name defined in the database schema.
-</p>
-<p>
-To use column mapping, declare a static array named <tt>COLUMN_MAPPING</tt> in the Active Record class.
-The keys of the array are column names (called <i>physical column names</i>) as defined in the database
-schema, while the values are corresponding property names (called <i>logical column names</i>) defined
-in the Active Record class. The property names can be either public class member variable names or
-component property names defined via getters/setters. If a physical column name happens to be the same
-as the logical column name, they do not need to be listed in <tt>COLUMN_MAPPING</tt>.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content">
-class UserRecord extends TActiveRecord
-{
- const TABLE='users';
- public static $COLUMN_MAPPING=array
- (
- 'user_id'=>'id',
- 'email_address'=>'email',
- 'first_name'=>'firstName',
- 'last_name'=>'lastName',
- );
- public $id;
- public $username; // the physical and logical column names are the same
- public $email;
- public $firstName;
- public $lastName;
- //....
-}
-</com:TTextHighlighter>
-<p>
-With the above column mapping, we can address <tt>first_name</tt> using <tt>$userRecord->firstName</tt>
-instead of <tt>$userRecord->first_name</tt>. This helps separation of logic and model.
-</p>
-
-<h2 id="138054">References</h2>
-<ul id="u3" class="block-content">
- <li>Fowler et. al. <i>Patterns of Enterprise Application Architecture</i>,
- Addison Wesley, 2002.</li>
- <li>B. Venners with B. Eckel. <i><a href="http://www.artima.com/intv/abstract3.html">Inappropriate Abstractions - A Conversation with Anders Hejlsberg, Part VI.</a></i>
- Artima Developer, 2003.
- </li>
-
-</ul>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Database/pl/ar_objects.png b/demos/quickstart/protected/pages/Database/pl/ar_objects.png
deleted file mode 100755
index ac33b88b..00000000
--- a/demos/quickstart/protected/pages/Database/pl/ar_objects.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Database/pl/ar_relations.png b/demos/quickstart/protected/pages/Database/pl/ar_relations.png
deleted file mode 100755
index 48e29f48..00000000
--- a/demos/quickstart/protected/pages/Database/pl/ar_relations.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Database/pl/diagram.png b/demos/quickstart/protected/pages/Database/pl/diagram.png
deleted file mode 100755
index 0a0ca73d..00000000
--- a/demos/quickstart/protected/pages/Database/pl/diagram.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Database/pl/object_states.png b/demos/quickstart/protected/pages/Database/pl/object_states.png
deleted file mode 100755
index db194783..00000000
--- a/demos/quickstart/protected/pages/Database/pl/object_states.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Database/pl/sqlmap_active_record.png b/demos/quickstart/protected/pages/Database/pl/sqlmap_active_record.png
deleted file mode 100755
index 6d958d33..00000000
--- a/demos/quickstart/protected/pages/Database/pl/sqlmap_active_record.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/Pages.page b/demos/quickstart/protected/pages/Fundamentals/Pages.page
index 58f4f06d..3e03a24c 100755
--- a/demos/quickstart/protected/pages/Fundamentals/Pages.page
+++ b/demos/quickstart/protected/pages/Fundamentals/Pages.page
@@ -15,7 +15,7 @@ A form submission is called <i>postback</i> if the submission is made to the pag
<tt>TPage</tt> has a <tt>IsPostBack</tt> property exposing whether the current request being handled is the first request for this page or the consequence of a postback.
</p>
-<h2>CallBack</h2>
+<h2 id="34012">CallBack</h2>
<p class="block-content">
A <i>callback</i> is a special form submission that, instead of requiring a full page reload on the browser, gets executed in the background through an ajax call. So, a callback is considered a postback too, but not vice versa.
<br/>
diff --git a/demos/quickstart/protected/pages/Fundamentals/id/Applications.page b/demos/quickstart/protected/pages/Fundamentals/id/Applications.page
deleted file mode 100755
index 43b956c3..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/id/Applications.page
+++ /dev/null
@@ -1,55 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="1201">Aplikasi</h1>
-<p id="160157" class="block-content">
-Aplikasi adalah turunan dari <tt>TApplication</tt> atau asal kelasnya. Ia mengatur modul yang menyediakan fungsionalitas berbeda dan diambil bila diperlukan. Ia menyediakan layanan bagi pengguna-akhir. Ia adalah tempat utama untuk menyimpan berbagai parameter dalam sebuah aplikasi. Dalam aplikasi PRADO, turunan aplikasi adalah satu-satunya obyek yang secara global dapat diakses melalui panggilan fungsi <tt>Prado::getApplication()</tt>.
-</p>
-<p id="160158" class="block-content">
-Aplikasi dikonfigurasi melalui <a href="?page=Configurations.AppConfig">konfigurasi aplikasi</a>. Biasanya dibuat dalam naskah entri seperti berikut,
-<com:TTextHighlighter CssClass="source block-content" id="code_160071">
-require_once('/path/to/prado.php');
-$application = new TApplication;
-$application->run();
-</com:TTextHighlighter>
-Di mana metode <tt>run()</tt> memulai aplikasi untuk menangani permintaan pengguna.
-</p>
-
-<h2 id="1202">Organisasi Direktori</h2>
-<p id="160159" class="block-content">
-Aplikasi PRADO minimal berisi dua file: file entri dan file template halaman. Ini harus diatur sebagai berikut,
-<img src="<%~directory.gif%>" class="figure"/>
-</p>
-<ul id="u2" class="block-content">
-<li><tt>wwwroot</tt> - Akar dokumen Web atau sub-direktori.</li>
-<li><tt>index.php</tt> - naskah entri dari aplikasi PRADO.</li>
-<li><tt>assets</tt> - direktori yang menyimpan file pribadi yang dipublikasikan. Lihat seksi <a href="?page=Advanced.Assets">assets</a>.</li>
-<li><tt>protected</tt> - path basis aplikasi yang menyimpan data aplikasi dan file naskah pribadi. Direktori ini harus dikonfigurasi tidak bisa diakses terhadap Web-inaccessible, atau ia dapat ditempatkan di luar direktori Web.</li>
-<li><tt>runtime</tt> - path penyimpan runtime aplikasi. Direktori ini dipakai oleh PRADO untuk menyimpan informasi runtime aplikasi, seperti kondisi aplikasi, data di-cache, dll.</li>
-<li><tt>pages</tt> - path basis yang menyimpan semua halaman PRADO. Lihat seksi <a href="?page=Fundamentals.Services">layanan</a>.</li>
-<li><tt>Home.page</tt> - Halaman standar yang diberikan saat pengguna tidak secara eksplisit menetapkan halaman yang diminta. Ini adalah file template halaman. Nama file tanpa akhiran adalah nama halaman. Kelas halaman adalah <tt>TPage</tt>. Jika di sana juga aga file kelas <tt>Home.php</tt>, kelas halaman menjadi <tt>Home</tt>.</li>
-</ul>
-
-<p id="160160" class="block-content">
-Produk aplikasi PRADO biasanya membutuhkan file lebih banyak. Ia dapat menyertakan file konfigurasi aplikasi bernama <tt>application.xml</tt> di bawah path basis aplikasi <tt>protected</tt>. Halaman bisa diatur dalam direktori, beberapa diantaranya dapat berisi file konfigurasi halaman bernama <tt>config.xml</tt>. Untuk lebih jelasnya, silahkan lihat seksi <a href="?page=Configurations.Overview">konfigurasi</a>.
-</p>
-
-<h2 id="1203">Penyebaran Aplikasi</h2>
-<p id="160161" class="block-content">
-Menyebarkan aplikasi PRADO sebagian besar terkait dengan meng-copy direktori. Sebagai contoh, untuk menyebarkan aplikasi minimal di atas ke server lain, ikuti langkah-langkah berikut,
-</p>
-<ol>
-<li>Copy konten di bawah <tt>wwwroot</tt> ke direktori yang dapat diakses=Web pada server baru.</li>
-<li>Ubah file naskah entri <tt>index.php</tt> agar ia menyertakan file <tt>prado.php</tt> secara benar.</li>
-<li>Hapus semua konten di bawah direktori <tt>assets</tt> dan <tt>runtime</tt> dan pastikan kedua direktori dapat ditulis oleh proses server Web.</li>
-</ol>
-
-<h2 id="1204">Masa Hidup Aplikasi</h2>
-<p id="160162" class="block-content">
-Seperti masa hidup halaman, aplikasi juga mempunyai masa hidup. Modul aplikasi dapat meregistrasi event masa hidup. Ketika aplikasi mencapai masa hidup tertentu dan memunculkan event terkait, metode modul teregistrasi akan di panggil secara otomatis. Modul yang disertakan dalam rilis PRADO, seperti <tt>TAuthManager</tt>, menggunakan cara ini untuk melasanakan tujuannya.
-</p>
-<p id="160163" class="block-content">
-Masa hidup aplikasi dapat digambarkan sebagai berikut,
-</p>
-<img src="<%~applifecycles.gif%>" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/id/Architecture.page b/demos/quickstart/protected/pages/Fundamentals/id/Architecture.page
deleted file mode 100755
index 354e2403..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/id/Architecture.page
+++ /dev/null
@@ -1,13 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="601">Arsitektur</h1>
-
-<p id="100111" class="block-content">
-PRADO adalah kerangka kerja presentasi utama, meskipun tidak dibatasi demikian. Kerangka kerja terfokus pada pembuatan pemrograman Web, yang banyak berkaitan dengan interaksi pengguna, menjadi berbasis-komponen dan kendali-event agar pengembang itu bisa lebih produktif. Susunan kelas berikut menggambarkan beberapa kelas utama yang disediakan oleh PRADO,
-</p>
-<img src="<%~classtree.gif%>" />
-
-<p id="100112" class="block-content">
-Ketika aplikasi PRADO memproses permintaan halaman, diagram obyek statisnya dapat dilihat sebagai berikut,
-</p>
-<img src="<%~objectdiagram.gif%>" />
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/id/Components.page b/demos/quickstart/protected/pages/Fundamentals/id/Components.page
deleted file mode 100755
index 4eb14964..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/id/Components.page
+++ /dev/null
@@ -1,128 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="701">Komponen</h1>
-<p id="110113" class="block-content">
-Komponen adalah turunan dari <tt>TComponent</tt> atau kelas anaknya. Basis kelas <tt>TComponent</tt> menerapkan mekanisme properti dan event komponen.
-</p>
-
-<h2 id="702">Properti Komponen</h2>
-<p id="110114" class="block-content">
-Properti komponen dapat dilihat sebagai variabel public yang menjelaskan aspek tertentu dari komponen seperti warna latar belakang, besar font, dll. Properti didefinisikan dengan keberadaan metode penyetel dan/atau pengambil dalam kelas komponen. Sebagai contoh, dalam <tt>TControl</tt>, kami mendefinisikan properti <tt>ID</tt> menggunakan metode pengambil dan penyetel berikut,
-<com:TTextHighlighter CssClass="source block-content" id="code_110056">
-class TControl extends TComponent {
- public function getID() {
- ...
- }
- public function setID($value) {
- ...
- }
-}
-</com:TTextHighlighter>
-</p>
-<p id="110115" class="block-content">
-Untuk mendapatkan atau menetapkan properti <tt>ID</tt>, lakukan seperti berikut, seperti bekerja dengan sebuah variabel,
-<com:TTextHighlighter CssClass="source block-content" id="code_110057">
-$id = $component->ID;
-$component->ID = $id;
-</com:TTextHighlighter>
-Ini sama dengan yang berikut,
-<com:TTextHighlighter CssClass="source block-content" id="code_110058">
-$id = $component->getID();
-$component->setID( $id );
-</com:TTextHighlighter>
-</p>
-<p id="110116" class="block-content">
-Properti hanya-baca jika metode pengambil tetapi tidak untuk metode penyetel. Karena nama metode PHP adalah sensitif-huruf, nama properti juga sensitif-huruf. Kelas komponen mewariskan seluruh properti kelas leluhurnya.
-</p>
-
-<h3 id="706">Subproperti</h3>
-<p id="110117" class="block-content">
-Subproperti adalah properti dari beberapa properti tipe-obyek. Sebagai contoh, <tt>TWebControl</tt> mempunyai properti <tt>Font</tt> yang merupakan tipe <tt>TFont</tt>. Kemudian properti <tt>Name</tt> dari <tt>Font</tt> dirujuk sebagai subproperti (dengan memperhatikan <tt>TWebControl</tt>).
-</p>
-<p id="110118" class="block-content">
-Untuk mendapatkan atau menentukan subproperti <tt>Name</tt>, gunakan metode beriktu,
-<com:TTextHighlighter CssClass="source block-content" id="code_110059">
-$name = $component-&gt;getSubProperty('Font.Name');
-$component->setSubProperty('Font.Name', $name);
-</com:TTextHighlighter>
-Ini sama dengan yang berikut,
-<com:TTextHighlighter CssClass="source block-content" id="code_110060">
-$name = $component->getFont()->getName();
-$component-&gt;getFont()-&gt;setName( $name );
-</com:TTextHighlighter>
-
-
-</p>
-
-<h2 id="703">Event Komponen</h2>
-<p id="110119" class="block-content">
-Event komponen adalah properti khusus yang mengambil nama metode sebagai nilainya. Melampirkan (setelan) metode ke sebuah event akan menancapkan metode ke tempat di mana event dimunculkan. Oleh karena itu, perilaku komponen bisa diubah dalam cara yang tidak terlihat selama pengembangan komponen.
-</p>
-<p id="110120" class="block-content">
-Event komponen didefinisikan dengan keberadaan metode yang namanya dimulai dengan kata <tt>on</tt>. Nama event adalah nama metode dan sensitif-huruf. Sebagai contoh, dalam <tt>TButton</tt>, kita mempunyai
-<com:TTextHighlighter CssClass="source block-content" id="code_110061">
-class TButton extends TWebControl {
- public function onClick( $param ) {
- ...
- }
-}
-</com:TTextHighlighter>
-Ini mendefinisikan event bernama <tt>OnClick</tt>, dan pengendali dapat dilampirkan ke event menggunakan salah satu cara berikut,
-<com:TTextHighlighter CssClass="source block-content" id="code_110062">
-$button->OnClick = $callback;
-$button->OnClick->add( $callback );
-$button->OnClick[] = $callback;
-$button->attachEventHandler( 'OnClick' , $callback );
-</com:TTextHighlighter>
-di mana <tt>$callback</tt> merujuk ke callback PHP yang benar (misalnya nama fungsi, metode kelas <tt>array($object,'method')</tt>, dll).
-</p>
-
-<h2 id="704">Namespace</h2>
-<p id="110121" class="block-content">
-Namespace merujuk ke pengelompokan logis dari beberapa nama kelas agar dapat dibedakan dari nama kelas lain meskipun jika namanya sama. Karena PHP pada hakekatnya tidak mendukung namespace, Anda tidak bisa membuat turunan dari dua kelas yang mempunyai nama sama tapi dengan definisi berbeda. Untuk membedakan dari kelas didefinisikan pengguna, semua kelas PRADO diawali dengan huruf 'T' (berarti 'Type'). Para pengguna disarankan untuk tidak menamai kelasnya seperti ini. Sebaiknya mengawali nama kelasnya dengan huruf yang lainnya.
-</p>
-<p id="110122" class="block-content">
-Namespace dalam PRADO dianggap sebagai direktori yang berisi satu atau beberapa file kelas. Sebuah kelas dapat ditetapkan tanpa dwimakna menggunakan namespace demikian diikuti oleh nama kelas. Setiap namespace dalam PRADO ditetapkan dalam format berikut,
-<div class="source">
-PathAlias.Dir1.Dir2
-</div>
-di mana <tt>PathAlias</tt> adalah alias dari beberapa direktori, sementara <tt>Dir1</tt> dan <tt>Dir2</tt> adalah subdirektori di bawah direktori itu. Kelas yang benama <tt>MyClass</tt> didefinisikan di bawah <tt>Dir2</tt> sekarang berkualifikasi lengkap sebagai <tt>PathAlias.Dir1.Dir2.MyClass</tt>.
-</p>
-<p id="110123" class="block-content">
-Untuk menggunakan namespace dalam kode, lakukan seperti berikut,
-<com:TTextHighlighter CssClass="source block-content" id="code_110063">
-Prado::using('PathAlias.Dir1.Dir2.*');
-</com:TTextHighlighter>
-menambah direktori yang dirujuk oleh <tt>PathAlias.Dir1.Dir2</tt> ke dalam path include PHP agar kelas itu didefinisikan di bawah direktori itu dapat diturunkan tanpa prefiks namespace. Anda juga dapat menyertakan definisi kelas individual dengan
-<com:TTextHighlighter CssClass="source block-content" id="code_110064">
-Prado::using('PathAlias.Dir1.Dir2.MyClass');
-</com:TTextHighlighter>
-yang akan menyertakan file kelas jika <tt>MyClass</tt> tidak didefinisikan.
-</p>
-<p id="110124" class="block-content">
-Untuk lebih jelasnya mengenai mendefinisikan alias path, lihat seksi <a href="?page=Configurations.AppConfig">konfigurasi aplikasi</a>.
-</p>
-
-<h2 id="705">Penurunan Komponen</h2>
-<p id="110125" class="block-content">
-Penurunan komponen berarti membuat turunan dari kelas komponen. Ada dua tipe penurunan komponen: penurunan statis dan dinamis. Komponen yang dibuat masing-masing disebut komponen statis dan komponen dinamis.
-</p>
-
-<h3 id="707">Penurunan Komponen Dinamis</h3>
-<p id="110126" class="block-content">
-Penurunan komponen dinamis berarti membuat turunan komponen dalam kode PHP. Itu sama dengan apa yang umum dirujuk pembuatan obyek dalam PHP. Sebuah komponen dapat dibuat secara dinamis menggunakan salah satu dari dua metode berikut dalam PHP,
-<com:TTextHighlighter CssClass="source block-content" id="code_110065">
-$component = new ComponentClassName;
-$component = Prado::createComponent('ComponentType');
-</com:TTextHighlighter>
-di mana <tt>ComponentType</tt> merujuk ke nama kelas atau nama tipe dalam format namespace (contoh <tt>System.Web.UI.TControl</tt>). Pendekatan kedua diperkenalkan guna mengimbangi kekurangan dukungan namespace dalam PHP.
-</p>
-
-<h3 id="708">Penurunan Komponen Statis</h3>
-<p id="110127" class="block-content">
-Penurunan komponen statis adalah mengenai pembuatan komponen melalui <a href="?page=Configurations.Overview">konfigurasi</a>. Pekerjaan pembuatan sebenarnya dilakukan oleh kerangka kerja PRADO. Sebagai contoh, dalam <a href="?page=Configurations.AppConfig">konfigurasi aplikasi</a>, seseorang dapat mengkonfigurasi sebuah modul untuk diambil ketika aplikasi dijalankan. Selanjutnya modul adalah komponen statis yang dibuat oleh kerangka kerja. Penurunan komponen statis lebih umum digunakan dalam <a href="?page=Configurations.Templates1">template</a>. Setiap tag komponen dalam sebuah template menetapkan komponen yang akan dibuat secara otomatis oleh kerangka kerja ketika template diambil. Sebagai contoh, dalam sebuah template halaman, tag berikut akan membawa ke pembuatan komponen <tt>TButton</tt> pada halaman,
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_110066">
-&lt;com:TButton Text="Register" /&gt;
-</com:TTextHighlighter>
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/id/Controls.page b/demos/quickstart/protected/pages/Fundamentals/id/Controls.page
deleted file mode 100755
index 47222b3d..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/id/Controls.page
+++ /dev/null
@@ -1,51 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="801">Kontrol</h1>
-<p id="120128" class="block-content">
-Kontrol adalah turunan dari kelas <tt>TControl</tt> atau asal sub kelasnya. Kontrol adalah komponen yang didefinisikan sebagai tambahan pada antarmuka pengguna. Kelas basis <tt>TControl</tt> mendefinisikan hubungan leluhur-anak diantara kontrol yang mencerminkan pengurungan hubungan diantara elemen antarmuka pengguna.
-</p>
-
-<h2 id="802">Susunan Kontrol</h2>
-<p id="120129" class="block-content">
-Kontrol dikaitkan satu sama lain melalui hubungan leluhur-anak. Setiap kontrol leluhur dapat memiliki beberapa kontrol anak. Kontrol leluhur bertugas terhadap transisi keadaan dari kontrol anaknya. Hasil dari kontrol anak biasanya dipakai untuk mengatur penampilan kontrol leluhur. Hubungan leluhur-anak membawa kontrol bersama ke dalam susunan kontrol. Halaman ada di akar dari susunan yang penampilannya di berikan kepada pengguna-akhir.
-</p>
-<p id="120130" class="block-content">
-Hubungan leluhur-anak biasanya dilakukan oleh kerangka kerja melalui <a href="?page=Configurations.Templates1">template</a>. Dalam kode, Anda dapat menetapkan kontrol secara eksplisit sebagai anak dari yang lainnya menggunakan salah satu metode berikut,
-<com:TTextHighlighter CssClass="source block-content" id="code_120067">
-$parent->Controls->add($child);
-$parent->Controls[]=$child;
-</com:TTextHighlighter>
-di mana properti <tt>Controls</tt> merujuk ke koleksi kontrol anak dari leluhur.
-</p>
-
-<h2 id="803">Identifikasi Kontrol</h2>
-<p id="120131" class="block-content">
-Setiap kontrol mempunyai properti <tt>ID</tt> yang dapat secara unik dapat mengidentifikasi dirinya sendiri diantara kontrol keluarganya. Sebagai tambahan, setiap kontrol mempunyai <tt>UniqueID</tt> dan <tt>ClientID</tt> yang dapat dipakai untuk mengidentifikasi kontrol secara global dalam susunan di mana kontrol berada. <tt>UniqueID</tt> dan <tt>ClientID</tt> sangat mirip. Pembentuk dipakai oleh kerangka kerja guna menentukan lokasi dari kontrol terkait dalam susunan, sementara yang kedua sebagian besar dipakai pada sisi klien sebagai ID tag HTML. Secara umum, Anda tidak boleh bergantung pada bentuk eksplisit <tt>UniqueID</tt> atau <tt>ClientID</tt>.
-</p>
-
-<h2 id="804">Wadah Penamaan</h2>
-<p id="120132" class="block-content">
-Setiap kontrol mempunyai wadah penamaan yang mana kontrol membuat ruang nama (namespace) unik untuk membedakan antara kontrol dengan <tt>ID</tt> yang sama. Sebagai contoh, kontrol <tt>TRepeater</tt> membuat multipel item masing-masing mempunyai kontrol anak dengan <tt>ID</tt> yang sama. Untuk membedakan kontrol anak ini, setiap item bertindak sebagai wadah penamaan. Oleh karena itu, kontrol anak dapat diidentifikasi secara unik menggunakan wadah penamaan <tt>ID</tt> bersama dengan <tt>ID</tt>-nya sendiri. Seperti yang mungkin sudah Anda mengerti, <tt>UniqueID</tt> dan <tt>ClientID</tt> bergantung pada wadah penamaan.
-</p>
-<p id="120133" class="block-content">
-Kontrol dapat bertindak sebagai wadah penamaan jika ia menerapkan antarmuka <tt>INamingContainer</tt>.
-</p>
-
-<h2 id="805">ViewState dan ControlState</h2>
-<p id="120134" class="block-content">
-HTTP adalah protokol tidak berkondisi, berarti ia tidak menyediakan fungsionalitas untuk mendukung interaksi berlanjut antara pengguna dan server. Setiap permintaan dianggap sebagai diskrit dan berdiri sendiri dari yang lainnya. Aplikasi Web, sering perlu untuk mengetahui apa yang telah dilakukan pengguna dalam permintaan sebelumnya. Selanjutnya orang memperkenalkan sesi guna membantu mengingat informasi kondisi seperti itu.
-</p>
-<p id="120135" class="block-content">
-PRADO meminjam konsep viewstate dan controlstate dari Microsoft ASP.NET guna menyediakan tambahan mekanisme pemrograman berkondisi. Penyimpanan nilai dalam viewstate atau controlstate mungkin tersedia untuk permintaan berikutnya jika permintaan baru dari submisi (disebut postback) ke halamanyang sama oleh pengguna yang sama. Perbedaan antara viewstate dan controlstate adalah bahwa pembentuk dapat dimatikan saat yang kemudian tidak bisa.
-</p>
-<p id="120136" class="block-content">
-Viewstate dan controlstate diterapkan dalam <tt>TControl</tt>. Biasanya dipakai untuk mendefinisikan berbagai properti kontrol. Untuk menyimpan dan mengambil nilai dari viewstate atau controlstate, gunakan metode berikut,
-<com:TTextHighlighter CssClass="source block-content" id="code_120068">
-$this->getViewState('Name',$defaultValue);
-$this->setViewState('Name',$value,$defaultValue);
-$this->getControlState('Name',$defaultValue);
-$this->setControlState('Name',$value,$defaultValue);
-</com:TTextHighlighter>
-di mana <tt>$this</tt> merujuk ke turunan kontrol, <tt>Name</tt> merujuk ke kunci yang mengidentifikasi nilai pasti, <tt>$defaultValue</tt> adalah opsional. Ketika mengambil nilai dari viewstate atau controlstate, jika kunci terkait tidak ada, nilai standar akan diberikan.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/id/Hangman.page b/demos/quickstart/protected/pages/Fundamentals/id/Hangman.page
deleted file mode 100755
index 44a8887e..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/id/Hangman.page
+++ /dev/null
@@ -1,14 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="1301">Contoh: Permainan Hangman</h1>
-<p id="60043" class="block-content">
-Setelah melihat aplikasi "Hello World", sekarang kita membuat aplikasi yang lebih rumit disebut "Permainan Hangman". Dalam permainan ini, pemain diminta untuk menebak kata, satu huruf setiap waktu. Jika dia menebak huruf dengan benar, huruf akan ditampilkan dalam kata. Pemain dapat melanjutkan untuk menebak selama angka kesalahannya dalam batas yang sudah ditetapkan. Pemain memenangkan permainan jika menemukan kata dalam batas kesalahan, atau dia kalah.
-</p>
-<p id="60044" class="block-content">
-Untuk memfasilitasi pembangunan permainan ini, kami perlihatkan diagram transisi keadaan dari proses permainan sebagai berikut,
-<br /><br />
-Untuk dilanjutkan...
-</p>
-<com:RunBar PagePath="Fundamentals.Samples.Hangman.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/id/Modules.page b/demos/quickstart/protected/pages/Fundamentals/id/Modules.page
deleted file mode 100755
index f484fece..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/id/Modules.page
+++ /dev/null
@@ -1,50 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="1001">Modul</h1>
-<p id="140141" class="block-content">
-Modul adalah turunan dari kelas yang menerapkan antarmuka <tt>IModule</tt>. Umumnya sebuah modul didesain untuk fungsionalitas tertentu yang dapat disertakan ke dalam aplikasi PRADO dan berbagi dengan semua komponen dalam aplikasi.
-</p>
-<p id="140142" class="block-content">
-PRADO menggunakan konfigurasi untuk menetapkan apakah mengambil sebuah modul, mengambil modul jenis apa, dan bagaimana untuk menginisialisasi modul yang diambilnya. Para pengembang dapat mengganti modul inti dengan implementasinya sendiri melalui konfigurasi aplikasi, atau mereka dapat menulis modul baru guna menyediakan fungsionalitas tambahan. Sebagai contoh, modul dapat dikembangkan untuk menyediakan logika database umum pada satu atau beberapa halaman. Untuk lebih jelasnya, silahkan lihat <a href="?page=Configurations.Overview">konfigurasi</a>.
-</p>
-<p id="140143" class="block-content">
-Ada tiga modul inti yang diambil secara standar kapan saja aplikasi dijalankan. Ketiganya adalah <a href="#request">modul permintaan</a>, <a href="#response">modul respon</a>, dan <a href="#error">modul pengendali kesalahan</a>. Sebagai tambahan, <a href="#session">modul sesi</a> diambil saat ia digunakan dalam aplikasi. PRADO menyediakan implementasi standar untuk semua modul ini. <a href="#custom">Modul kustom</a> dapat dikonfigurasi atau dikembangkan guna mengganti atau menambah modul inti ini.
-</p>
-
-<a name="request"></a>
-<h2 id="1002">Modul Permintaan</h2>
-<p id="140144" class="block-content">
-Modul permintaan menyediakan penyimpanan dan skema akses untuk permintaan pengguna yang dikirim melalui HTTP. Permintaan pengguna datang dari beberapa sumber, termasuk URL, data post, data sesi, data cookie, dll. Data ini semuanya dapat diakses melalui modul permintaan. Standarnya PRADO menggunakan <tt>THttpRequest</tt> sebagai modul permintaan. Modul permintaan dapat diakses melalui properti <tt>Request</tt> dari aplikasi dan kontrol.
-</p>
-
-<a name="response"></a>
-<h2 id="1003">Modul Respon</h2>
-<p id="140145" class="block-content">
-Modul respon menerapkan mekanisme untuk mengirimkan output ke pengguna klien. Modul respon dapat dikonfigurasi guna mengontrol bagaimana output di-cache pada sisi klien. Standarnya PRADO menggunakan <tt>THttpResponse</tt> sebagai modul respon. Modul respon dapat diakses melalui properti <tt>Response</tt> dari aplikasi dan kontrol.
-</p>
-
-<a name="session"></a>
-<h2 id="1004">Modul Sesi</h2>
-<p id="140146" class="block-content">
-Modul sesi melapisi fungsionalitas terkait dengan penanganan sesi pengguna. Modul sesi secara otomatis diambil saat aplikasi menggunakan sesi. Standarnya PRADO menggunakan <tt>THttpSession</tt> sebagai modul sesi, yang merupakan pelapis sederhana dari fungsi sesi yang disediakan oleh PHP. Modul sesi dapat diakses melalui properti <tt>Session</tt> dari aplikasi dan kontrol.
-</p>
-
-<a name="error"></a>
-<h2 id="1005">Modul Pengendali Kesalahan</h2>
-<p id="140147" class="block-content">
-Modul pengendali kesalahan dipakai untuk menangkap dan memproses semua kondisi kesalahan dalam sebuah aplikasi. PRADO menggunakan <tt>TErrorHandler</tt> sebagai modul pengendali kesalahan. Ia menangkap semua peringatan PHP, perhatian dan eksepsi, dan ditampilkan dalam bentuk yang tepat bagi pengguna-akhir. Modul pengendali kesalahan dapat diakses melalui properti <tt>ErrorHandler</tt> dari turunan aplikasi.
-</p>
-
-<a name="custom"></a>
-<h2 id="1006">Modul Kustom</h2>
-<p id="140148" class="block-content">
-PRADO dirilis dengan beberapa modul lebih disamping yang inti. Ini termasuk modul cache (<tt>TSqliteCache</tt> dan <tt>TMemCache</tt>), modul manajemen pengguna (<tt>TUserManager</tt>), modul otentikasi dan otorisasi (<tt>TAuthManager</tt>), dll.
-</p>
-<p id="140149" class="block-content">
-Ketika <tt>TPageService</tt> diminta, ia juga mengambil modul tertentu untuk layanan halaman, termasuk manajer asset (<tt>TAssetManager</tt>), manajer template (<tt>TTemplateManager</tt>), manajer tema/skin (<tt>TThemeManager</tt>).
-</p>
-<p id="140150" class="block-content">
-Modul kustom dan modul inti semuanya dapat dikonfigurasi melalui <a href="?page=Configurations.Overview">konfigurasi</a>.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/id/Pages.page b/demos/quickstart/protected/pages/Fundamentals/id/Pages.page
deleted file mode 100755
index 496f9530..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/id/Pages.page
+++ /dev/null
@@ -1,23 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="901">Halaman</h1>
-<p id="130137" class="block-content">
-Halaman adalah kontrol teratas yang tidak mempunyai leluhur. Presentasi halaman ditampilkan secara langsung ke pengguna-akhir. Pengguna mengakses halaman dengan mengirimkan permintaan layanan halaman.
-</p>
-<p id="130138" class="block-content">
-Setiap halaman harus mempunyai file <a href="?page=Configurations.Templates1">template</a>. Akhiran nama file harus <tt>.page</tt>. Nama file (tanpa akhiran) adalah nama halaman. PRADO akan mencoba mencari file kelas halaman di bawah direktori yang berisi file template halaman. File kelas halaman tersebut harus mempunyai nama file yang sama (diakhiri dengan <tt>.php</tt>) seperti file template. Jika file kelas tidak ditemukan, halaman akan mengambil kelas <tt>TPage</tt>.
-</p>
-
-<h2 id="902">PostBack</h2>
-<p id="130139" class="block-content">
-Submisi formulir disebut <i>postback</i> jika submisi dibuat untuk halaman yang berisi formulir. Postback dapat dianggap sebagai kondisi di sisi klien, dimunculkan oleh pengguna. PRADO akan mencoba mengidentifikasi kontrol mana pada sisi server untuk postback kondisi. Jika seseorang menentukan misalnya, <tt>TButton</tt>, kami menyebutnya pengirim event postback yang akan menterjemahkan event postback ke dalam beberapa event sisi-server tertentu (contoh event <tt>OnClick</tt> dan <tt>OnCommand</tt> untuk <tt>TButton</tt>).
-
-</p>
-
-<h2 id="903">Masa Hidup Halaman</h2>
-<p id="130140" class="block-content">
-Mengerti masa hidup halaman adalah penting untuk menguasai pemrograman PRADO. Masa hidup halaman merujuk ke transisi kondisi dari sebuah halaman saat melayani halaman ini bagi pengguna-akhir. Ini dapat digambarkan dalam grafik kondisi berikut,
-<img src="<%~lifecycles.gif %>" />
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/id/Services.page b/demos/quickstart/protected/pages/Fundamentals/id/Services.page
deleted file mode 100755
index 8834f214..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/id/Services.page
+++ /dev/null
@@ -1,34 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="1101">Layanan</h1>
-<p id="150151" class="block-content">
-Layanan adalah turunan dari kelas yang menerapkan antarmuka <tt>IService</tt>. Setiap jenis layanan memproses tipe permintaan tertentu pengguna. Sebagai contoh, respon layanan halaman terhadap permintaan pengguna untuk halaman PRADO.
-</p>
-<p id="150152" class="block-content">
-Sebuah layanan diidentifikasi secara unik dengan properti <tt>ID</tt>-nya. Standarnya ketika <tt>THttpRequest</tt> dipakai sebagai <a href="?page=Fundamentals.Modules#request">modul permintaan</a>, nama variabel GET digunakan untuk mengidentifikasi layanan mana yang sedang diminta oleh pengguna. Jika nama variabel GET sama dengan beberapa <tt>ID</tt> layanan, permintaan dianggap untuk layanan itu, dan nilai dari variabel GET dikirimkan sebagai parameter layanan. Untuk layanan halaman, nama variabel GET harus <tt>page</tt>. Sebagai contoh, URKL berikut meminta halaman <tt>Fundamentals.Services</tt>,
-<com:TTextHighlighter Language="none" CssClass="source block-content" id="code_150069">
-http://hostname/index.php?page=Fundamentals.Services
-</com:TTextHighlighter>
-</p>
-<p id="150153" class="block-content">
-Para pengembang dapat menerapkan layanan tambahan untuk aplikasinya. Untuk menjadikan layanan agar tersedia, konfigurasi itu dalam <a href="?page=Configurations.AppConfig">konfigurasi aplikasi</a>.
-</p>
-
-<h2 id="1102">Layanan Halaman</h2>
-<p id="150154" class="block-content">
-PRADO menerapkan <tt>TPageService</tt> untuk melayani permintaan halaman pengguna. Halam disimpan di bawah direktori yang ditetapkan oleh properti <tt>BasePath</tt> dari layanan halaman. Properti standarnya ke direktori <tt>pages</tt> di bawah path basis aplikasi. Anda boleh mengubah standar ini dengan mengkonfigurasi layanan dalam konfigurasi aplikasi.
-</p>
-<p id="150155" class="block-content">
-Halaman disusun ke dalam direktori di bawah <tt>BasePath</tt>. Dalam setiap direktori, di sana ada file konfigurasi bernama <tt>config.xml</tt>, yang berisi konfigurasi yang hanya efektif ketika halaman di bawah direktori atau sub direktori itu diminta. Untuk lebih jelasnya, lihat seksi <a href="?page=Configurations.PageConfig">konfigurasi halaman</a>.
-</p>
-<p id="150156" class="block-content">
-Parameter layanan untuk layanan halaman merujuk pada halaman yang sedang diminta. Parameter seperti <tt>Fundamentals.Services</tt> merujuk pada halaman <tt>Services</tt> di bawah direktori <tt>&lt;BasePath&gt;/Fundamentals</tt>. Jika parameter tersebut tidak ada dalam permintaan, dianggap sebagai halaman standar bernama <tt>Home</tt>. Menggunakan <tt>THttpRequest</tt> sebagai modul permintaan (default), URL berikut masing-masing akan meminta halaman <tt>Home</tt>, <tt>About</tt> dan <tt>Register</tt>,
-<com:TTextHighlighter Language="none" CssClass="source block-content" id="code_150070">
-http://hostname/index.php
-http://hostname/index.php?page=About
-http://hostname/index.php?page=Users.Register
-</com:TTextHighlighter>
-di mana contoh pertama mengambiil keuntungan bahwa layanan halaman adalah layanan standar dan <tt>Home</tt> adalah halaman default.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/id/applifecycles.gif b/demos/quickstart/protected/pages/Fundamentals/id/applifecycles.gif
deleted file mode 100755
index d5300aa6..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/id/applifecycles.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/id/applifecycles.vsd b/demos/quickstart/protected/pages/Fundamentals/id/applifecycles.vsd
deleted file mode 100755
index 56f6602d..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/id/applifecycles.vsd
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/id/classtree.gif b/demos/quickstart/protected/pages/Fundamentals/id/classtree.gif
deleted file mode 100755
index b1fbf0d6..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/id/classtree.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/id/classtree.vsd b/demos/quickstart/protected/pages/Fundamentals/id/classtree.vsd
deleted file mode 100755
index c000d32f..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/id/classtree.vsd
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/id/directory.gif b/demos/quickstart/protected/pages/Fundamentals/id/directory.gif
deleted file mode 100755
index c7d5086d..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/id/directory.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/id/lifecycles.gif b/demos/quickstart/protected/pages/Fundamentals/id/lifecycles.gif
deleted file mode 100755
index 5edaff5f..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/id/lifecycles.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/id/lifecycles.vsd b/demos/quickstart/protected/pages/Fundamentals/id/lifecycles.vsd
deleted file mode 100755
index 368d0ba7..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/id/lifecycles.vsd
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/id/objectdiagram.gif b/demos/quickstart/protected/pages/Fundamentals/id/objectdiagram.gif
deleted file mode 100755
index 7910469c..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/id/objectdiagram.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/id/objectdiagram.vsd b/demos/quickstart/protected/pages/Fundamentals/id/objectdiagram.vsd
deleted file mode 100755
index b2457220..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/id/objectdiagram.vsd
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/ja/Applications.page b/demos/quickstart/protected/pages/Fundamentals/ja/Applications.page
deleted file mode 100755
index 8e0b9e9a..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/ja/Applications.page
+++ /dev/null
@@ -1,55 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="1201">Applications</h1>
-<p id="160157" class="block-content">
-An application is an instance of <tt>TApplication</tt> or its derived class. It manages modules that provide different functionalities and are loaded when needed. It provides services to end-users. It is the central place to store various parameters used in an application. In a PRADO application, the application instance is the only object that is globally accessible via <tt>Prado::getApplication()</tt> function call.
-</p>
-<p id="160158" class="block-content">
-Applications are configured via <a href="?page=Configurations.AppConfig">application configurations</a>. They are usually created in entry scripts like the following,
-<com:TTextHighlighter CssClass="source block-content" id="code_160071">
-require_once('/path/to/prado.php');
-$application = new TApplication;
-$application->run();
-</com:TTextHighlighter>
-where the method <tt>run()</tt> starts the application to handle user requests.
-</p>
-
-<h2 id="1202">Directory Organization</h2>
-<p id="160159" class="block-content">
-A minimal PRADO application contains two files: an entry file and a page template file. They must be organized as follows,
-<img src="<%~directory.gif%>" class="figure"/>
-</p>
-<ul id="u2" class="block-content">
-<li><tt>wwwroot</tt> - Web document root or sub-directory.</li>
-<li><tt>index.php</tt> - entry script of the PRADO application.</li>
-<li><tt>assets</tt> - directory storing published private files. See <a href="?page=Advanced.Assets">assets</a> section.</li>
-<li><tt>protected</tt> - application base path storing application data and private script files. This directory should be configured inaccessible to Web-inaccessible, or it may be located outside of Web directories.</li>
-<li><tt>runtime</tt> - application runtime storage path. This directory is used by PRADO to store application runtime information, such as application state, cached data, etc.</li>
-<li><tt>pages</tt> - base path storing all PRADO pages. See <a href="?page=Fundamentals.Services">services</a> section.</li>
-<li><tt>Home.page</tt> - default page returned when users do not explicitly specify the page requested. This is a page template file. The file name without suffix is the page name. The page class is <tt>TPage</tt>. If there is also a class file <tt>Home.php</tt>, the page class becomes <tt>Home</tt>.</li>
-</ul>
-
-<p id="160160" class="block-content">
-A product PRADO application usually needs more files. It may include an application configuration file named <tt>application.xml</tt> under the application base path <tt>protected</tt>. The pages may be organized in directories, some of which may contain page configuration files named <tt>config.xml</tt>. Fore more details, please see <a href="?page=Configurations.Overview">configurations</a> section.
-</p>
-
-<h2 id="1203">Application Deployment</h2>
-<p id="160161" class="block-content">
-Deploying a PRADO application mainly involves copying directories. For example, to deploy the above minimal application to another server, follow the following steps,
-</p>
-<ol>
-<li>Copy the content under <tt>wwwroot</tt> to a Web-accessible directory on the new server.</li>
-<li>Modify the entry script file <tt>index.php</tt> so that it includes correctly the <tt>prado.php</tt> file.</li>
-<li>Remove all content under <tt>assets</tt> and <tt>runtime</tt> directories and make sure both directories are writable by the Web server process.</li>
-</ol>
-
-<h2 id="1204">Application Lifecycles</h2>
-<p id="160162" class="block-content">
-Like page lifecycles, an application also has lifecycles. Application modules can register for the lifecycle events. When the application reaches a particular lifecycle and raises the corresponding event, the registered module methods are invoked automatically. Modules included in the PRADO release, such as <tt>TAuthManager</tt>, are using this way to accomplish their goals.
-</p>
-<p id="160163" class="block-content">
-The application lifecycles can be depicted as follows,
-</p>
-<img src="<%~applifecycles.gif%>" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/ja/Architecture.page b/demos/quickstart/protected/pages/Fundamentals/ja/Architecture.page
deleted file mode 100755
index 7d828803..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/ja/Architecture.page
+++ /dev/null
@@ -1,15 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="601">アーキテクチャ</h1>
-
-<p id="100111" class="block-content">
-PRADO は主にプレゼンテーションを操作するためのフレームワークです。(プレゼンテーション操作のみで制限されるわけではありません)<br />
-このフレームワークはウェブプログラミングに集中するためのものであり、開発者がより生産性を上げられるようにコンポーネントベース、イベントドリブンなプログラミングが可能なつくりになっています。<br />
-以下のクラスツリーは PRADO によって提供されている主要なクラスについて書かれたものです。
-</p>
-<img src="<%~classtree.gif%>" />
-
-<p id="100112" class="block-content">
-PRADO アプリケーションがページ要求処理を行う際、以下のオブジェクトダイアグラムで動作します。
-</p>
-<img src="<%~objectdiagram.gif%>" />
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/ja/Components.page b/demos/quickstart/protected/pages/Fundamentals/ja/Components.page
deleted file mode 100755
index 5662b53b..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/ja/Components.page
+++ /dev/null
@@ -1,128 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="701">Components</h1>
-<p id="110113" class="block-content">
-A component is an instance of <tt>TComponent</tt> or its child class. The base class <tt>TComponent</tt> implements the mechanism of component properties and events.
-</p>
-
-<h2 id="702">Component Properties</h2>
-<p id="110114" class="block-content">
-A component property can be viewed as a public variable describing a specific aspect of the component, such as the background color, the font size, etc. A property is defined by the existence of a getter and/or a setter method in the component class. For example, in <tt>TControl</tt>, we define its <tt>ID</tt> property using the following getter and setter methods,
-<com:TTextHighlighter CssClass="source block-content" id="code_110056">
-class TControl extends TComponent {
- public function getID() {
- ...
- }
- public function setID($value) {
- ...
- }
-}
-</com:TTextHighlighter>
-</p>
-<p id="110115" class="block-content">
-To get or set the <tt>ID</tt> property, do as follows, just like working with a variable,
-<com:TTextHighlighter CssClass="source block-content" id="code_110057">
-$id = $component->ID;
-$component->ID = $id;
-</com:TTextHighlighter>
-This is equivalent to the following,
-<com:TTextHighlighter CssClass="source block-content" id="code_110058">
-$id = $component->getID();
-$component->setID( $id );
-</com:TTextHighlighter>
-</p>
-<p id="110116" class="block-content">
-A property is read-only if it has a getter method but no setter method. Since PHP method names are case-insensitive, property names are also case-insensitive. A component class inherits all its ancestor classes' properties.
-</p>
-
-<h3 id="706">Subproperties</h3>
-<p id="110117" class="block-content">
-A subproperty is a property of some object-typed property. For example, <tt>TWebControl</tt> has a <tt>Font</tt> property which is of <tt>TFont</tt> type. Then the <tt>Name</tt> property of <tt>Font</tt> is referred to as a subproperty (with respect to <tt>TWebControl</tt>).
-</p>
-<p id="110118" class="block-content">
-To get or set the <tt>Name</tt> subproperty, use the following method,
-<com:TTextHighlighter CssClass="source block-content" id="code_110059">
-$name = $component-&gt;getSubProperty('Font.Name');
-$component->setSubProperty('Font.Name', $name);
-</com:TTextHighlighter>
-This is equivalent to the following,
-<com:TTextHighlighter CssClass="source block-content" id="code_110060">
-$name = $component->getFont()->getName();
-$component-&gt;getFont()-&gt;setName( $name );
-</com:TTextHighlighter>
-
-
-</p>
-
-<h2 id="703">Component Events</h2>
-<p id="110119" class="block-content">
-Component events are special properties that take method names as their values. Attaching (setting) a method to an event will hook up the method to the places at which the event is raised. Therefore, the behavior of a component can be modified in a way that may not be foreseen during the development of the component.
-</p>
-<p id="110120" class="block-content">
-A component event is defined by the existence of a method whose name starts with the word <tt>on</tt>. The event name is the method name and is thus case-insensitve. For example, in <tt>TButton</tt>, we have
-<com:TTextHighlighter CssClass="source block-content" id="code_110061">
-class TButton extends TWebControl {
- public function onClick( $param ) {
- ...
- }
-}
-</com:TTextHighlighter>
-This defines an event named <tt>OnClick</tt>, and a handler can be attached to the event using one of the following ways,
-<com:TTextHighlighter CssClass="source block-content" id="code_110062">
-$button->OnClick = $callback;
-$button->OnClick->add( $callback );
-$button->OnClick[] = $callback;
-$button->attachEventHandler( 'OnClick' , $callback );
-</com:TTextHighlighter>
-where <tt>$callback</tt> refers to a valid PHP callback (e.g. a function name, a class method <tt>array($object,'method')</tt>, etc.)
-</p>
-
-<h2 id="704">Namespaces</h2>
-<p id="110121" class="block-content">
-A namespace refers to a logical grouping of some class names so that they can be differentiated from other class names even if their names are the same. Since PHP does not support namespace intrinsically, you cannot create instances of two classes who have the same name but with different definitions. To differentiate from user defined classes, all PRADO classes are prefixed with a letter 'T' (meaning 'Type'). Users are advised not to name their classes like this. Instead, they may prefix their class names with any other letter(s).
-</p>
-<p id="110122" class="block-content">
-A namespace in PRADO is considered as a directory containing one or several class files. A class may be specified without ambiguity using such a namespace followed by the class name. Each namespace in PRADO is specified in the following format,
-<div class="source">
-PathAlias.Dir1.Dir2
-</div>
-where <tt>PathAlias</tt> is an alias of some directory, while <tt>Dir1</tt> and <tt>Dir2</tt> are subdirectories under that directory. A class named <tt>MyClass</tt> defined under <tt>Dir2</tt> may now be fully qualified as <tt>PathAlias.Dir1.Dir2.MyClass</tt>.
-</p>
-<p id="110123" class="block-content">
-To use a namespace in code, do as follows,
-<com:TTextHighlighter CssClass="source block-content" id="code_110063">
-Prado::using('PathAlias.Dir1.Dir2.*');
-</com:TTextHighlighter>
-which appends the directory referred to by <tt>PathAlias.Dir1.Dir2</tt> into PHP include path so that classes defined under that directory may be instantiated without the namespace prefix. You may also include an individual class definition by
-<com:TTextHighlighter CssClass="source block-content" id="code_110064">
-Prado::using('PathAlias.Dir1.Dir2.MyClass');
-</com:TTextHighlighter>
-which will include the class file if <tt>MyClass</tt> is not defined.
-</p>
-<p id="110124" class="block-content">
-For more details about defining path aliases, see <a href="?page=Configurations.AppConfig">application configuration</a> section.
-</p>
-
-<h2 id="705">Component Instantiation</h2>
-<p id="110125" class="block-content">
-Component instantiation means creating instances of component classes. There are two types of component instantation: static instantiation and dynamic instantiation. The created components are called static components and dynamic components, respectively.
-</p>
-
-<h3 id="707">Dynamic Component Instantiation</h3>
-<p id="110126" class="block-content">
-Dynamic component instantiation means creating component instances in PHP code. It is the same as the commonly referred object creation in PHP. A component can be dynamically created using one of the following two methods in PHP,
-<com:TTextHighlighter CssClass="source block-content" id="code_110065">
-$component = new ComponentClassName;
-$component = Prado::createComponent('ComponentType');
-</com:TTextHighlighter>
-where <tt>ComponentType</tt> refers to a class name or a type name in namespace format (e.g. <tt>System.Web.UI.TControl</tt>). The second approach is introduced to compensate for the lack of namespace support in PHP.
-</p>
-
-<h3 id="708">Static Component Instantiation</h3>
-<p id="110127" class="block-content">
-Static component instantiation is about creating components via <a href="?page=Configurations.Overview">configurations</a>. The actual creation work is done by the PRADO framework. For example, in an <a href="?page=Configurations.AppConfig">application configuration</a>, one can configure a module to be loaded when the application runs. The module is thus a static component created by the framework. Static component instantiation is more commonly used in <a href="?page=Configurations.Templates1">templates</a>. Every component tag in a template specifies a component that will be automatically created by the framework when the template is loaded. For example, in a page template, the following tag will lead to the creation of a <tt>TButton</tt> component on the page,
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_110066">
-&lt;com:TButton Text="Register" /&gt;
-</com:TTextHighlighter>
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/ja/Controls.page b/demos/quickstart/protected/pages/Fundamentals/ja/Controls.page
deleted file mode 100755
index 75f6bedf..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/ja/Controls.page
+++ /dev/null
@@ -1,51 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="801">Controls</h1>
-<p id="120128" class="block-content">
-A control is an instance of class <tt>TControl</tt> or its subclass. A control is a component defined in addition with user interface. The base class <tt>TControl</tt> defines the parent-child relationship among controls which reflects the containment relationship among user interface elements.
-</p>
-
-<h2 id="802">Control Tree</h2>
-<p id="120129" class="block-content">
-Controls are related to each other via parent-child relationship. Each parent control can have one or several child controls. A parent control is in charge of the state transition of its child controls. The rendering result of the child controls are usually used to compose the parent control's presentation. The parent-child relationship brings together controls into a control tree. A page is at the root of the tree, whose presentation is returned to the end-users.
-</p>
-<p id="120130" class="block-content">
-The parent-child relationship is usually established by the framework via <a href="?page=Configurations.Templates1">templates</a>. In code, you may explicitly specify a control as a child of another using one of the following methods,
-<com:TTextHighlighter CssClass="source block-content" id="code_120067">
-$parent->Controls->add($child);
-$parent->Controls[]=$child;
-</com:TTextHighlighter>
-where the property <tt>Controls</tt> refers to the child control collection of the parent.
-</p>
-
-<h2 id="803">Control Identification</h2>
-<p id="120131" class="block-content">
-Each control has an <tt>ID</tt> property that can be uniquely identify itself among its sibling controls. In addition, each control has a <tt>UniqueID</tt> and a <tt>ClientID</tt> which can be used to globally identify the control in the tree that the control resides in. <tt>UniqueID</tt> and <tt>ClientID</tt> are very similar. The former is used by the framework to determine the location of the corresponding control in the tree, while the latter is mainly used on the client side as HTML tag IDs. In general, you should not rely on the explicit format of <tt>UniqueID</tt> or <tt>ClientID</tt>.
-</p>
-
-<h2 id="804">Naming Containers</h2>
-<p id="120132" class="block-content">
-Each control has a naming container which is a control creating a unique namespace for differentiating between controls with the same <tt>ID</tt>. For example, a <tt>TRepeater</tt> control creates multiple items each having child controls with the same <tt>ID</tt>s. To differentiate these child controls, each item serves as a naming container. Therefore, a child control may be uniquely identified using its naming container's <tt>ID</tt> together with its own <tt>ID</tt>. As you may already have understood, <tt>UniqueID</tt> and <tt>ClientID</tt> rely on the naming containers.
-</p>
-<p id="120133" class="block-content">
-A control can serve as a naming container if it implements the <tt>INamingContainer</tt> interface.
-</p>
-
-<h2 id="805">ViewState and ControlState</h2>
-<p id="120134" class="block-content">
-HTTP is a stateless protocol, meaning it does not provide functionality to support continuing interaction between a user and a server. Each request is considered as discrete and independent of each other. A Web application, however, often needs to know what a user has done in previous requests. People thus introduce sessions to help remember such state information.
-</p>
-<p id="120135" class="block-content">
-PRADO borrows the viewstate and controlstate concept from Microsoft ASP.NET to provides additional stateful programming mechanism. A value storing in viewstate or controlstate may be available to the next requests if the new requests are form submissions (called postback) to the same page by the same user. The difference between viewstate and controlstate is that the former can be disabled while the latter cannot.
-</p>
-<p id="120136" class="block-content">
-Viewstate and controlstate are implemented in <tt>TControl</tt>. They are commonly used to define various properties of controls. To save and retrieve values from viewstate or controlstate, use following methods,
-<com:TTextHighlighter CssClass="source block-content" id="code_120068">
-$this->getViewState('Name',$defaultValue);
-$this->setViewState('Name',$value,$defaultValue);
-$this->getControlState('Name',$defaultValue);
-$this->setControlState('Name',$value,$defaultValue);
-</com:TTextHighlighter>
-where <tt>$this</tt> refers to the control instance, <tt>Name</tt> refers to a key identifying the persistent value, <tt>$defaultValue</tt> is optional. When retrieving values from viewstate or controlstate, if the corresponding key does not exist, the default value will be returned.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/ja/Hangman.page b/demos/quickstart/protected/pages/Fundamentals/ja/Hangman.page
deleted file mode 100755
index d1776b7c..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/ja/Hangman.page
+++ /dev/null
@@ -1,14 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="1301">Sample: Hangman Game</h1>
-<p id="60043" class="block-content">
-Having seen the simple "Hello World" application, we now build a more complex application called "Hangman Game". In this game, the player is asked to guess a word, a letter at a time. If he guesses a letter right, the letter will be shown in the word. The player can continue to guess as long as the number of his misses is within a prespecified bound. The player wins the game if he finds out the word within the miss bound, or he loses.
-</p>
-<p id="60044" class="block-content">
-To facilitate the building of this game, we show the state transition diagram of the gaming process in the following,
-<br /><br />
-To be continued...
-</p>
-<com:RunBar PagePath="Fundamentals.Samples.Hangman.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/ja/Modules.page b/demos/quickstart/protected/pages/Fundamentals/ja/Modules.page
deleted file mode 100755
index 37406976..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/ja/Modules.page
+++ /dev/null
@@ -1,50 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="1001">Modules</h1>
-<p id="140141" class="block-content">
-A module is an instance of a class implementing the <tt>IModule</tt> interface. A module is commonly designed to provide specific functionality that may be plugged into a PRADO application and shared by all components in the application.
-</p>
-<p id="140142" class="block-content">
-PRADO uses configurations to specify whether to load a module, load what kind of modules, and how to initialize the loaded modules. Developers may replace the core modules with their own implementations via application configuration, or they may write new modules to provide additional functionalities. For example, a module may be developed to provide common database logic for one or several pages. For more details, please see the <a href="?page=Configurations.Overview">configurations</a>.
-</p>
-<p id="140143" class="block-content">
-There are three core modules that are loaded by default whenever an application runs. They are <a href="#request">request module</a>, <a href="#response">response module</a>, and <a href="#error">error handler module</a>. In addition, <a href="#session">session module</a> is loaded when it is used in the application. PRADO provides default implementation for all these modules. <a href="#custom">Custom modules</a> may be configured or developed to override or supplement these core modules.
-</p>
-
-<a name="request"></a>
-<h2 id="1002">Request Module</h2>
-<p id="140144" class="block-content">
-Request module represents provides storage and access scheme for user request sent via HTTP. User request data comes from several sources, including URL, post data, session data, cookie data, etc. These data can all be accessed via the request module. By default, PRADO uses <tt>THttpRequest</tt> as request module. The request module can be accessed via the <tt>Request</tt> property of application and controls.
-</p>
-
-<a name="response"></a>
-<h2 id="1003">Response Module</h2>
-<p id="140145" class="block-content">
-Response module implements the mechanism for sending output to client users. Response module may be configured to control how output are cached on the client side. It may also be used to send cookies back to the client side. By default, PRADO uses <tt>THttpResponse</tt> as response module. The response module can be accessed via the <tt>Response</tt> property of application and controls.
-</p>
-
-<a name="session"></a>
-<h2 id="1004">Session Module</h2>
-<p id="140146" class="block-content">
-Session module encapsulates the functionalities related with user session handling. Session module is automatically loaded when an application uses session. By default, PRADO uses <tt>THttpSession</tt> as session module, which is a simple wrapper of the session functions provided by PHP. The session module can be accessed via the <tt>Session</tt> property of application and controls.
-</p>
-
-<a name="error"></a>
-<h2 id="1005">Error Handler Module</h2>
-<p id="140147" class="block-content">
-Error handler module is used to capture and process all error conditions in an application. PRADO uses <tt>TErrorHandler</tt> as error handler module. It captures all PHP warnings, notices and exceptions, and displays in an appropriate form to end-users. The error handler module can be accessed via the <tt>ErrorHandler</tt> property of the application instance.
-</p>
-
-<a name="custom"></a>
-<h2 id="1006">Custom Modules</h2>
-<p id="140148" class="block-content">
-PRADO is released with a few more modules besides the core ones. They include caching modules (<tt>TSqliteCache</tt> and <tt>TMemCache</tt>), user management module (<tt>TUserManager</tt>), authentication and authorization module (<tt>TAuthManager</tt>), etc.
-</p>
-<p id="140149" class="block-content">
-When <tt>TPageService</tt> is requested, it also loads modules specific for page service, including asset manager (<tt>TAssetManager</tt>), template manager (<tt>TTemplateManager</tt>), theme/skin manager (<tt>TThemeManager</tt>).
-</p>
-<p id="140150" class="block-content">
-Custom modules and core modules are all configurable via <a href="?page=Configurations.Overview">configurations</a>.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/ja/Pages.page b/demos/quickstart/protected/pages/Fundamentals/ja/Pages.page
deleted file mode 100755
index 19900937..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/ja/Pages.page
+++ /dev/null
@@ -1,23 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="901">Pages</h1>
-<p id="130137" class="block-content">
-Pages are top-most controls that have no parent. The presentation of pages are directly displayed to end-users. Users access pages by sending page service requests.
-</p>
-<p id="130138" class="block-content">
-Each page must have a <a href="?page=Configurations.Templates1">template</a> file. The file name suffix must be <tt>.page</tt>. The file name (without suffix) is the page name. PRADO will try to locate a page class file under the directory containing the page template file. Such a page class file must have the same file name (suffixed with <tt>.php</tt>) as the template file. If the class file is not found, the page will take class <tt>TPage</tt>.
-</p>
-
-<h2 id="902">PostBack</h2>
-<p id="130139" class="block-content">
-A form submission is called <i>postback</i> if the submission is made to the page containing the form. Postback can be considered an event happened on the client side, raised by the user. PRADO will try to identify which control on the server side is responsible for a postback event. If one is determined, for example, a <tt>TButton</tt>, we call it the postback event sender which will translate the postback event into some specific server-side event (e.g. <tt>OnClick</tt> and <tt>OnCommand</tt> events for <tt>TButton</tt>).
-
-</p>
-
-<h2 id="903">Page Lifecycles</h2>
-<p id="130140" class="block-content">
-Understanding the page lifecycles is crucial to grasp PRADO programming. Page lifecycles refer to the state transitions of a page when serving this page to end-users. They can be depicted in the following statechart,
-<img src="<%~lifecycles.gif %>" />
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/ja/Services.page b/demos/quickstart/protected/pages/Fundamentals/ja/Services.page
deleted file mode 100755
index 5e5889df..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/ja/Services.page
+++ /dev/null
@@ -1,34 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="1101">Services</h1>
-<p id="150151" class="block-content">
-A service is an instance of a class implementing the <tt>IService</tt> interface. Each kind of service processes a specific type of user requests. For example, the page service responds to users' requests for PRADO pages.
-</p>
-<p id="150152" class="block-content">
-A service is uniquely identified by its <tt>ID</tt> property. By default when <tt>THttpRequest</tt> is used as the <a href="?page=Fundamentals.Modules#request">request module</a>, GET variable names are used to identify which service a user is requesting. If a GET variable name is equal to some service <tt>ID</tt>, the request is considered for that service, and the value of the GET variable is passed as the service parameter. For page service, the name of the GET variable must be <tt>page</tt>. For example, the following URL requests for the <tt>Fundamentals.Services</tt> page,
-<com:TTextHighlighter Language="none" CssClass="source block-content" id="code_150069">
-http://hostname/index.php?page=Fundamentals.Services
-</com:TTextHighlighter>
-</p>
-<p id="150153" class="block-content">
-Developers may implement additional services for their applications. To make a service available, configure it in <a href="?page=Configurations.AppConfig">application configurations</a>.
-</p>
-
-<h2 id="1102">Page Service</h2>
-<p id="150154" class="block-content">
-PRADO implements <tt>TPageService</tt> to process users' page requests. Pages are stored under a directory specified by the <tt>BasePath</tt> property of the page service. The property defaults to <tt>pages</tt> directory under the application base path. You may change this default by configuring the service in the application configuration.
-</p>
-<p id="150155" class="block-content">
-Pages may be organized into subdirectories under the <tt>BasePath</tt>. In each directory, there may be a page configuration file named <tt>config.xml</tt>, which contains configurations effective only when a page under that directory or a sub-directory is requested. For more details, see the <a href="?page=Configurations.PageConfig">page configuration</a> section.
-</p>
-<p id="150156" class="block-content">
-Service parameter for the page service refers to the page being requested. A parameter like <tt>Fundamentals.Services</tt> refers to the <tt>Services</tt> page under the <tt>&lt;BasePath&gt;/Fundamentals</tt> directory. If such a parameter is absent in a request, a default page named <tt>Home</tt> is assumed. Using <tt>THttpRequest</tt> as the request module (default), the following URLs will request for <tt>Home</tt>, <tt>About</tt> and <tt>Register</tt> pages, respectively,
-<com:TTextHighlighter Language="none" CssClass="source block-content" id="code_150070">
-http://hostname/index.php
-http://hostname/index.php?page=About
-http://hostname/index.php?page=Users.Register
-</com:TTextHighlighter>
-where the first example takes advantage of the fact that the page service is the default service and <tt>Home</tt> is the default page.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/ja/applifecycles.gif b/demos/quickstart/protected/pages/Fundamentals/ja/applifecycles.gif
deleted file mode 100755
index d5300aa6..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/ja/applifecycles.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/ja/classtree.gif b/demos/quickstart/protected/pages/Fundamentals/ja/classtree.gif
deleted file mode 100755
index b1fbf0d6..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/ja/classtree.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/ja/directory.gif b/demos/quickstart/protected/pages/Fundamentals/ja/directory.gif
deleted file mode 100755
index c7d5086d..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/ja/directory.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/ja/lifecycles.gif b/demos/quickstart/protected/pages/Fundamentals/ja/lifecycles.gif
deleted file mode 100755
index 5edaff5f..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/ja/lifecycles.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/ja/objectdiagram.gif b/demos/quickstart/protected/pages/Fundamentals/ja/objectdiagram.gif
deleted file mode 100755
index 7910469c..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/ja/objectdiagram.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/pl/Applications.page b/demos/quickstart/protected/pages/Fundamentals/pl/Applications.page
deleted file mode 100755
index 23866005..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/pl/Applications.page
+++ /dev/null
@@ -1,58 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="1201">Aplikacja</h1>
-<p id="160157" class="block-content">
-Aplikacja jest instancją <tt>TApplication</tt> lub klasy po niej dziedziczącej. Zarządza modułami dostarczającymi różnorodne funkcjonalności i ładuje je w razie potrzeby. Dostarcza użytkownikowu końcowemu serwisy.
-Jest centralnym miejscem do przechowywania różnych parametrów używanych w aplikacji. W aplikacji PRADO instancja aplikacji jest jedynym globalnie dostepnym obiektem poprzez wywołania funkcji <tt>Prado::getApplication()</tt>.
-</p>
-<p id="160158" class="block-content">
-Aplikacje są konfigurowane poprzez <a href="?page=Configurations.AppConfig">konfigurację aplikacji</a>. Są zazwyczaj tworzone w skrypcie wejściowym w podobny do następującego sposób,
-<com:TTextHighlighter CssClass="source block-content" id="code_160071">
-require_once('/path/to/prado.php');
-$application = new TApplication;
-$application->run();
-</com:TTextHighlighter>
-gdzie metoda <tt>run()</tt> rozpoczyna działanie aplikacji obsługującej żądania użytkownika.
-</p>
-
-<h2 id="1202">Organizacja folderów</h2>
-<p id="160159" class="block-content">
-Minimalna aplikacja PRADO zawiera dwa pliki: plik wejściowy i plik szablonu. Muszą być one zorganizowane w następujący sposób.
-<img src="<%~directory.gif%>" class="figure"/>
-</p>
-<ul id="u2" class="block-content">
-<li><tt>wwwroot</tt> - główny katalog serwera WWW lub jeden z podkatalogów.</li>
-<li><tt>index.php</tt> - skrypt wejściowy aplikacji PRADO.</li>
-<li><tt>assets</tt> - katalog przechowujący opublikowane pliki prywatne. Zobacz sekcję <a href="?page=Advanced.Assets">assets</a>.</li>
-<li><tt>protected</tt> - podstawowa ścieżka aplikacji zawierająca jej dane oraz prywatne pliki skryptów. Ten folder powinien być niedostepny z zewnątrz lub powinien znajdować się poza strukturą serwera WWW.</li>
-<li><tt>runtime</tt> - application runtime storage path. Ten folder jest używany przez PRADO do przechowywania informacji o wykonywanej aplikacji, takich jak stan aplikacji, kedzowane dane, itd.</li>
-<li><tt>pages</tt> - podstawowa ścieżka przechowująca wszystkie strony PRADO. Zobacz sekcję <a href="?page=Fundamentals.Services">serwisy</a>.</li>
-<li><tt>Home.page</tt> - domyślna strona zwracana gdy użytkownik nie poda jawnie żadanej strony. Jest to plik szablonu strony. Nazwa pliku bez rozszerzenia jest nazwą strony. Klasą strony jest klasa <tt>TPage</tt>. Jeśli znajduje się tam również plik klasy <tt>Home.php</tt>, klasą strony staje się <tt>Home</tt>.</li>
-</ul>
-
-<p id="160160" class="block-content">
-Produktywna aplikacja PRADO zazwyczaj potrzebuje więcej plików. Może ona zawierać plik konfiguracji aplikacji <tt>application.xml</tt> w podstawej ścieżce aplikacji <tt>protected</tt>. Strony mogą być zorganizowane w foldery, część z nich może zawierać pliki konfiguracji strony <tt>config.xml</tt>. Aby dowiedzieć się wiecej, zajrzyć do sekcji <a href="?page=Configurations.Overview">konfiguracji</a>.
-</p>
-
-<h2 id="1203">Osadzanie aplikacji</h2>
-<p id="160161" class="block-content">
-Osadzanie aplikacji PRADO zazwyczaj wiąże się z kopiowaniem folderów. Na przykład, aby osadzić powyższą minimalną wersję aplikacji na innym serwerze należy wykonać następujące kroki.
-</p>
-<ol>
-<li>Skopiuj zawartość z <tt>wwwroot</tt> do dostępnego poprzez WWW foldera na nowym serwerze.</li>
-<li>Zmodyfikuj skrypt wejściowy <tt>index.php</tt> tak by prawidłowo inkludował plik <tt>prado.php</tt>.</li>
-<li>Usuń całą zawartość z folderów <tt>assets</tt> i <tt>runtime</tt> i upewnij się, że oba umożliwiają zapis procesom serwera WWW.</li>
-</ol>
-
-<h2 id="1204">Cykle życia aplikacji</h2>
-<p id="160162" class="block-content">
-Tak jak cykle życia strony tak aplikacja również posiada cykle życia. Moduły aplikacji mogą rejestrować zdarzenia dla cykli życia.
-Kiedy aplikacja znajduje się w konkretnym cyklu i wywołuje odpowiednie zdarzenie, zarejstrowana metoda modułu jest wywoływana automatycznie.
-Moduły załaczone w oficjalnym wydaniu PRADO, takie jak <tt>TAuthManager</tt>, używają tego sposobu aby wyknać swoje zadania.
-</p>
-<p id="160163" class="block-content">
-Cykle życia aplikacji mogą zostać przedstawione następująco:
-</p>
-<img src="<%~applifecycles.gif%>" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/pl/Architecture.page b/demos/quickstart/protected/pages/Fundamentals/pl/Architecture.page
deleted file mode 100755
index db429253..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/pl/Architecture.page
+++ /dev/null
@@ -1,15 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="601">Architektura</h1>
-
-<p id="100111" class="block-content">
-Prado jest przede wszystkim frameworkiem służącym do prezentacji, mimo to nie jest on ograniczony jedynie do ten funkcjonalności.
-Framework skupia się na programowaniu webowym, które w większości czasu ma do czynienia z interakcją z użytkownikiem, bazując na programowaniu sterowanym zdarzeniami (ang. event driven) oraz bazującym na komponentach (ang. component based),
-tak by deweloper był bardziej produktywny. Następujące drzewko klas pokazuje główne klasy dostarczanych przez PRADO.
-</p>
-<img src="<%~classtree.gif%>" />
-
-<p id="100112" class="block-content">
-Kiedy PRADO przetwarza żądanie strony, jego diagram obiektów statycznych wygląda następująco.
-</p>
-<img src="<%~objectdiagram.gif%>" />
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/pl/Components.page b/demos/quickstart/protected/pages/Fundamentals/pl/Components.page
deleted file mode 100755
index 5890f17f..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/pl/Components.page
+++ /dev/null
@@ -1,128 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="701">Komponenty</h1>
-<p id="110113" class="block-content">
-Komponent jest instancją klasy lub klasy potomnej <tt>TComponent</tt>. Klasa bazowa <tt>TComponent</tt> implementuje mechanizm właściwości oraz zdarzeń kompomentu.
-</p>
-
-<h2 id="702">Właściwości komponentu (ang. component properties)</h2>
-<p id="110114" class="block-content">
-Właściwość kompoenentu może być postrzegana jako publiczna zmienna opsiującą określoną cechę/właściwość komponentu, taką jak kolor tła, rozmiar czcionki, itp. Właściwość jest definiowana poprzez istnienie metody getter i/lub setter w klasie. Na przykład w <tt>TControl</tt> definiujemy właściwość <tt>ID</tt> komponentu używając następujących funkcji typu getter i setter,
-<com:TTextHighlighter CssClass="source block-content" id="code_110056">
-class TControl extends TComponent {
- public function getID() {
- ...
- }
- public function setID($value) {
- ...
- }
-}
-</com:TTextHighlighter>
-</p>
-<p id="110115" class="block-content">
-Aby pobrać lub ustawić właściwość <tt>ID</tt>, postępuj jak poniżej (tak jakbyś miał do czynienia ze zmienną):
-<com:TTextHighlighter CssClass="source block-content" id="code_110057">
-$id = $component->ID;
-$component->ID = $id;
-</com:TTextHighlighter>
-Jest to równoznaczne z następującym zapisem:
-<com:TTextHighlighter CssClass="source block-content" id="code_110058">
-$id = $component->getID();
-$component->setID( $id );
-</com:TTextHighlighter>
-</p>
-<p id="110116" class="block-content">
-Właściwość jest "tylko do odczytu" jeśli posiada metodę getter a nie posiada metody setter. Odkąd nazwy metod w PHP nie są zależne od wielkiej bądź małej litery, właściwości również są niewrażliwe na wielkość liter. Klasa kompomentu dziedziny wszystkie właściwości rodzica.
-</p>
-
-<h3 id="706">Subwłaściwości (ang. subproperties)</h3>
-<p id="110117" class="block-content">
-Subwłaściwość jest właściwością właściwości typu obiektowego. Dla przykładu <tt>TWebControl</tt> posiada właściwość <tt>Font</tt>, która jest typu <tt>TFont</tt>. Wtedy właściwość <tt>Name</tt> właściwości <tt>Font</tt> jest subwłaściwością w stosunku do <tt>TWebControl</tt>.
-</p>
-<p id="110118" class="block-content">
-Aby pobrać lub ustawić subwłaściwość <tt>Name</tt> należy użyć następującej metody:
-<com:TTextHighlighter CssClass="source block-content" id="code_110059">
-$name = $component-&gt;getSubProperty('Font.Name');
-$component->setSubProperty('Font.Name', $name);
-</com:TTextHighlighter>
-Jest to równoznaczne z następującym zapisem:
-<com:TTextHighlighter CssClass="source block-content" id="code_110060">
-$name = $component->getFont()->getName();
-$component-&gt;getFont()-&gt;setName( $name );
-</com:TTextHighlighter>
-
-
-</p>
-
-<h2 id="703">Zdarzenia komponentu</h2>
-<p id="110119" class="block-content">
-Zdarzenia komponentu są specjalnymi właściwościami, które pobierają nazwy metod jako swoje wartości. Przypisując (ustawiając) metodę do zdarzenia (will hook up the method ) do miejsca gdzie zdarzenie jest wywoływane. Dzięki temu zachowanie komponentu może zostać zmodyfikowane w sposób, który nie był przewidziany podczas fazy dewelopowania komponentu.
-</p>
-<p id="110120" class="block-content">
-Zdarzenie komponentu jest definiowane poprzez istnienie metody, której nazwa zaczyna się przedrostkiem <tt>on</tt>. Nazwa zdarzenia jest nazwą metody i z tego powodu jest niewrażliwa na wielkość liter. Na przykład w komponencie <tt>TButton</tt> mamy:
-<com:TTextHighlighter CssClass="source block-content" id="code_110061">
-class TButton extends TWebControl {
- public function onClick( $param ) {
- ...
- }
-}
-</com:TTextHighlighter>
-W ten sposób definiujemy metodę o nazwie <tt>OnClick</tt> a uchwyt do zdarzenia przez nią definiowanego może być przypisany w jeden z następujących sposobów:
-<com:TTextHighlighter CssClass="source block-content" id="code_110062">
-$button->OnClick = $callback;
-$button->OnClick->add( $callback );
-$button->OnClick[] = $callback;
-$button->attachEventHandler( 'OnClick' , $callback );
-</com:TTextHighlighter>
-gdzie <tt>$callback</tt> odnosi się do poprawnej funkcji typu callback w PHP (np. nazwy funkcji, metody klasy <tt>array($object,'method')</tt>, itp.)
-</p>
-
-<h2 id="704">Przestrzenie nazw (ang. namespaces)</h2>
-<p id="110121" class="block-content">
-Przestrzeń nazw odnosi się do logicznego pogrupowania nazwy klas w taki sposób, że moga być one odróżniane od innych klas, których nazwy są identyczne. Ponieważ PHP nie wspiera przestrzeni nazw sam w sobie, nie można stworzyć instancji dwóch klas, które mają tą samoą nazwę ale różne definicje. Aby odróżniać się od klas użytkowników wszystkie klasy PRADO posiadają prefix 'T' (oznaczający 'Type' - z angielskiego: typ). Zachęcamy do nazywania własnych klas w ten sposób. W odróznieniu można dodawać prefiksy klas zaczynające się dowolną inną literą (lub grupą liter).
-</p>
-<p id="110122" class="block-content">
-Przestrzeń nazw w PRADO jest postrzegana jako folder zawierający jednen lub więcej plików klas. Poprzez poprzedzania nazwy klasy przestrzenią nazw klasa może zostać określona jednoznacznie. Każda przestrzeń nazw jest w PRADO określona w następujący sposób:
-<div class="source">
-PathAlias.Dir1.Dir2
-</div>
-gdzie <tt>PathAlias</tt> jest aliasem jakiegoś katalogu, gdzie <tt>Dir1</tt> i <tt>Dir2</tt> są podkatalogami tego katalogu. Klasa o nazwie <tt>MyClass</tt> zdefiniowana w <tt>Dir2</tt> jest fully qualified poprzez <tt>PathAlias.Dir1.Dir2.MyClass</tt>.
-</p>
-<p id="110123" class="block-content">
-By używać przestrzeni nazw w kodzie, napisz:
-<com:TTextHighlighter CssClass="source block-content" id="code_110063">
-Prado::using('PathAlias.Dir1.Dir2.*');
-</com:TTextHighlighter>
-co spowoduje dołączenie katalogu wskazywanego przez <tt>PathAlias.Dir1.Dir2</tt> do ścieżek include w PHP, dzięki czemu instancje klas zdefiniowanych w podanym katalogu mogą zostać utworzone bez podawania pełnej przestrzeni nazw. Możesz również zainkludować pojedyńczą definicję klasy poprzez
-<com:TTextHighlighter CssClass="source block-content" id="code_110064">
-Prado::using('PathAlias.Dir1.Dir2.MyClass');
-</com:TTextHighlighter>
-co spowoduje zainkludowanie pliku klasy <tt>MyClass</tt> jeśli nie została ona jeszcze zdefiniowana.
-</p>
-<p id="110124" class="block-content">
-Aby zobaczyć więcej informacji o definiowaniu aliasów zobacz sekcję <a href="?page=Configurations.AppConfig">konfigurowanie aplikacji</a>.
-</p>
-
-<h2 id="705">Tworzenie instancji komponentu</h2>
-<p id="110125" class="block-content">
-Tworzenie instancji komponentu oznacza tworzenie instancji klasy komponentu. Rozróżniamy dwa typy instancji komponentu: statyczną i dynamiczną. Utworzone komponenty nazywane są odpowiednio komponentami statycznymi i dynamicznymi.
-</p>
-
-<h3 id="707">Dynamiczne tworzenie instancji komponentów</h3>
-<p id="110126" class="block-content">
-Dynamiczne tworzenie instancji komponentów oznacza tworzenie instancji komponentu w kodzie PHP. Wygląda to identycznie jak zwyczajne tworznie komponentów w PHP. Komponent może zostać dynamicznie utworzony w jeden z poniższych sposobów w PHP:
-<com:TTextHighlighter CssClass="source block-content" id="code_110065">
-$component = new ComponentClassName;
-$component = Prado::createComponent('ComponentType');
-</com:TTextHighlighter>
-gdzie <tt>ComponentType</tt> wskazuje na nazwę klasy lub nazwę typu w formacie przestrzeni nazw (np. <tt>System.Web.UI.TControl</tt>). Drugi sposób został wprowadzony aby wypełnić brak wsparcia dla przestrzeni nazw w PHP.
-</p>
-
-<h3 id="708">Statyczne tworzenie instancji komponentów</h3>
-<p id="110127" class="block-content">
-Statyczne tworzenie instancji komponentów odnosi się do tworznenia komponentów poprzez <a href="?page=Configurations.Overview">konfigurację</a>. Proces tworzenia odbywa się po stronie frameworku. Na przykład w <a href="?page=Configurations.AppConfig">konfiguracji aplikacji</a> można skonfigurować moduł, który zostanie załadowany podczas uruchamiania aplikacji. Zatem moduł jest statycznym komponentem stworzonym przez framework. Statyczne tworzenie instancji jest często wspólnie używane w <a href="?page=Configurations.Templates1">szablonach</a>. Każdy tag komponentu w szablonie określa komponent, który będzie automatycznie stworzony przez framework, kiedy szablon będzie ładowany. Na przykład w szablonie strony następujący tag doprowadzi do stworzenia komponentu <tt>TButton</tt> na stronie:
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_110066">
-&lt;com:TButton Text="Register" /&gt;
-</com:TTextHighlighter>
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/pl/Controls.page b/demos/quickstart/protected/pages/Fundamentals/pl/Controls.page
deleted file mode 100755
index 68fdb993..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/pl/Controls.page
+++ /dev/null
@@ -1,51 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="801">Kontrolki (ang. controls)</h1>
-<p id="120128" class="block-content">
-Kontrolka jest instancją klasy <tt>TControl</tt> lub jej dziecka. Kontrolka jest komponentem definiowanym z dodatkiem interfejsu użytkownika. Klasa bazowa <tt>TControl</tt> definiuje relację rodzic-dziecko among controls which reflects the containment relationship among user interface elements.
-</p>
-
-<h2 id="802">Drzewko kontrolek</h2>
-<p id="120129" class="block-content">
-Kontrolki są powiązane z sobą za pomocą relacji rodzic-dziecko. Każda kontrolka rodzica może posiadać jedną lub więcej kontrolek dzieci. Kontrolka rodzica jest in charge of the state transition of its child controls. Wynik renderowanie kontrolki dziecka jest zazwyczaj używany do stworzenia warstwy prezentacji kontrolki rodzica. Relacja rodzic-dziecko brings together controls into a control tree. Strona jest korzeniem drzewka, której warstwa prezentacji jest zwracana dla użytkownika końcowego.
-</p>
-<p id="120130" class="block-content">
-Relacja rodzic-dziecko jest zazwyczaj ustalana przez framework poprzez <a href="?page=Configurations.Templates1">szablony</a>. W kodzie można bezpośrednio określić kontrolkę jako dziecko innej kontrolki stosując jedną z następujących metod:
-<com:TTextHighlighter CssClass="source block-content" id="code_120067">
-$parent->Controls->add($child);
-$parent->Controls[]=$child;
-</com:TTextHighlighter>
-gdzie właściwość <tt>Controls</tt> wskazuje na kolekcję kontrolek bedących dziećmi rodzica.
-</p>
-
-<h2 id="803">Identyfikacja kontrolki</h2>
-<p id="120131" class="block-content">
-Każda kontrolka ma właściwość <tt>ID</tt>, która jednoznacznie identyfikuje ją samą spośród jej rodzeństwa. W dodatku każda kontrolka posiada właściwość <tt>UniqueID</tt> oraz <tt>ClientID</tt>, która może zostać użyta do identyfikacji "globalnej" kontrolki w drzewku gdzie znajduje się ta kontrolka. Właściwości <tt>UniqueID</tt> oraz <tt>ClientID</tt> są bardzo podobne. Pierwsza jest używana przez framework do określenia położenia odpowiedniej kontrolki w drzewku, druga jest głównie używana po stronie klienta jako ID w tagach HTML. Ogólnie rzecz ujmując nie powinno się polegać na tak sprecyzowanym formacie <tt>UniqueID</tt> lub <tt>ClientID</tt>.
-</p>
-
-<h2 id="804">Kontenery nazw (ang. naming containers)</h2>
-<p id="120132" class="block-content">
-Każda kontrolka posiada kontener nazw, który jest kontrolką tworzącą unikalną przestrzeń nazw dla rozróżnienie pomiędzy kontrolkami o tych samych <tt>ID</tt>. Na przykład kontrolka <tt>TRepeater</tt> tworzy wiele pozycji, które posiadają kontrolki-dzieci o tych samych <tt>ID</tt>. Aby rozróżnić te kontrolki-dzieci, każda pozycja służy jako kontener nazw. Dzięki temu, kontrolka-dziecko może zostać jednoznacznie zidentyfikowana używając <tt>ID</tt> swojego kontenera nazw razem z swoim własnym <tt>ID</tt>. Powinieneś teraz zrozumieć, że właściwości <tt>UniqueID</tt> i <tt>ClientID</tt> bazują (wynikają?) na kontenerze nazw.
-</p>
-<p id="120133" class="block-content">
-Kontrolka może służyć jako kontener naz jeśli implementuje interfejs <tt>INamingContainer</tt>.
-</p>
-
-<h2 id="805">Stan widoku (ang. ViewState) oraz stan kontrolki (ang. ControlState)</h2>
-<p id="120134" class="block-content">
-HTTP jest protokołem bezstanowym, co oznacza, że nie dostarcza on funkjonalności wspierającej kontynuowanie interakcji pomiędzy użytkownikiem a serwerem. Każde żądanie (ang. request) jest rozpatrywane jako pojedyńcze i niezależne w stosunku do innego żądania. Jednakże, aplikacja webowa często potrzebuje wiedzieć co użytkownik zrobił w poprzednich żądaniach. Dlatego wprowadzono sesje by pomóc zapamiętać te informacje o stanie.
-</p>
-<p id="120135" class="block-content">
-PRADO zapożycza koncept stanu widoku oraz stanu kontrolki z ASP.NET Microsoftu by dostarczać dodatkowego stanowego mechanizmu programowania (ang. stateful programming mechanism). Wartość zachowana w stanie widoku lub stanie kontrolki może być dostępna w następnym żądaniu jeśli nowe żądanie pochodzi od wysłania formularza (ang. form submissions) (nazywanej postback'iem) do tej samej strony przez tego samego użytkownika. Różnica pomiędzy stanem widoku a stanem kontrolki wynika z tego iż pierwsza może zostać wyłączona a druga nie.
-</p>
-<p id="120136" class="block-content">
-Stan widoku i stan kontrolki są zaimplementowane w <tt>TControl</tt>. Są one zazwyczaj używane do zdefiniowania różnych właściwościu kontrolki. By zapisać i przywrócić wartości ze stanu widoku lub stanu kontrolki, należy użyć następujących sposobów:
-<com:TTextHighlighter CssClass="source block-content" id="code_120068">
-$this->getViewState('Nazwa',$wartoscDomyslna);
-$this->setViewState('Nazwa',$wartosc,$wartoscDomyslna);
-$this->getControlState('Nazwa',$wartoscDomyslna);
-$this->setControlState('Nazwa',$wartosc,$wartoscDomyslna);
-</com:TTextHighlighter>
-gdzie <tt>$this</tt> odnosi się do instancji kontrolki, <tt>Nazwa</tt> odnosi się to klucza identyfikującego zachowaną wartość, <tt>$wartoscDomyslna</tt> jest opcjonalna. Kiedy przywracamy wartości z stanu widoku lub stanu kontrolki, jeśli podany klucz nie istnieje, wartość domyślna jest zwracana.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/pl/Hangman.page b/demos/quickstart/protected/pages/Fundamentals/pl/Hangman.page
deleted file mode 100755
index e3ad1338..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/pl/Hangman.page
+++ /dev/null
@@ -1,16 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="1301">Przykład: wisielec</h1>
-<p id="60043" class="block-content">
-Zobaczywszy prostą aplikację "Witaj Świecie" stworzymy teraz bardziej skomplikowaną aplikację "Wisielca".
-W tej grze gracz musi odgadnąć słowo podając litery w zadanym czasie. Jeśli odgadnie prawidłowo litera pojawi się w słowie. Gracz może tak długo kontynuować zgadywanie dopóki liczba pomyłek znajduje się w zdefiniwanym na początku zakresie.
-Gracz wygrywa grę jeśli znajdzie słowo zanim przekroczy dozwoloną liczbę pomyłek, w przeciwnym przypadku przegrywa.
-</p>
-<p id="60044" class="block-content">
-Aby ułatwić stowrzenie tej gry, pokażemy diagram zmiany stanów gry następująco
-<br /><br />
-Ciąg dalszy nastąpi...
-</p>
-<com:RunBar PagePath="Fundamentals.Samples.Hangman.Home" />
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/pl/Modules.page b/demos/quickstart/protected/pages/Fundamentals/pl/Modules.page
deleted file mode 100755
index 1bc8ca94..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/pl/Modules.page
+++ /dev/null
@@ -1,50 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="1001">Moduły (ang. modules)</h1>
-<p id="140141" class="block-content">
-Moduł jest instancją klasy implementującej interfejs <tt>IModule</tt>. Moduł jest zazwyczaj zaprojektowany by dostarczać określonej funkcjonalności, która może być podłączona do aplikacji PRADO i dzielona wśród wszystkich komponentów aplikacji.
-</p>
-<p id="140142" class="block-content">
-PRADO używa konfiguracji aby określić kiedy załadować moduł, jaki rodzaj modułu i jak zainicjalizować załadowane moduły. Deweloper może zastąpić zródłowe (ang. core) moduły własnymi implementacjami poprzez konfigurację aplikacji lub może napisać nowe moduły by dostarczać dodatkowe funkcjonalności. Na przykład można stworzyć moduł, który będzie dostarczał wspólną logikę baz danych dla jednej lub więcej stron. Aby dowiedzieć się więcej zobacz sekcję <a href="?page=Configurations.Overview">konfiguracja</a>.
-</p>
-<p id="140143" class="block-content">
-Domyślnie ładowane są 3 moduły źródłowe (ang. core modules) podczas starty aplikacji. Są to <a href="#request">moduł żądania (ang. request module)</a>, <a href="#response">moduł odpowiedzi (ang. responce module)</a> oraz <a href="#error">moduł zarządzania błędami (ang. error handler module)</a>. Dodatkowo <a href="#session">moduł sesji (ang. session module)</a> jest ładowany kiedy jejst on używany w aplikacji. PRADO dostarcza domyślną implementację dla wszystkich tych modułów. <a href="#custom">Dodatkowe moduły (ang. custom modules)</a> mogą być konfigurowane lub stworzone by nadpisać lub uzupełnić te trzy moduły źródłowe.
-</p>
-
-<a name="request"></a>
-<h2 id="1002">Moduł żądania (ang. request module)</h2>
-<p id="140144" class="block-content">
-Moduł żądań reprezentuje i dostarcza schemat dostępu i przechowywania żądań użytkownika wysyłanych poprzez HTTP. Dane żądania użytkownika przychodzą z kilku źródeł wliczając adresy URL, dane z żądania POST, dane sesyjne, dane z ciasteczek, itd. Te dane są dostępne poprzez moduł żądania. Domyślnie PRADO używa <tt>THttpRequest</tt> jako moduł żądania. Moduł żądania jest dostępne poprzez właściwość <tt>Request</tt> aplikacjji i kontrolek.
-</p>
-
-<a name="response"></a>
-<h2 id="1003">Moduł odpowiedzi (ang. response module)</h2>
-<p id="140145" class="block-content">
-Moduł odpowiedzi implementuje mechanizm do wysywałania wyjścia do klienta użytkwonika. Moduł odpowiedzi może zostać skonfigurowany by kontrolować jak wyjście jest keszowane po stronie klienta. Może on być również uzywany by wysyłać cookie z powrotem na stronę klienta. Domyślnie PRADO używa <tt>THttpResponse</tt> jako moduły odpowiedzi. Moduł odpowiedzi jest dostępny poprzez właściwość <tt>Response</tt> aplikacji i kontrolek.
-</p>
-
-<a name="session"></a>
-<h2 id="1004">Moduł sesji (ang. session module)</h2>
-<p id="140146" class="block-content">
-Moduł sesji enkapsuluje funkcjonalność związaną z zarządzaniem sesji użytkowika. Moduł sesji jest automatycznie ładowany jeśli aplikacja używa sesji. Domyślnie PRADO używa <tt>THttpSession</tt> jako moduł sesji, który jest po prostu nadkładką (ang. wrapper) dla funkcji sesyjnych dostarczanych przez PHP. Moduł sesji jest dostępny poprzez właściwość <tt>Session</tt> aplikacji i kontrolek.
-</p>
-
-<a name="error"></a>
-<h2 id="1005">moduł zarządzania błędami (ang. error handler module)</h2>
-<p id="140147" class="block-content">
-Moduł zarządzzania błędami jest użuwany by przechwycić i obsłużyć wszystkie przypadki błędów w aplikacji. PRADO używa <tt>TErrorHandler</tt> jako moduł zarządzania błędami. Przechwytuje on wszystkie ostrzeżenia PHP (ang. warnings), wiadomości (ang. notices) oraz wyjątki (ang. exceptions) i wyświetla w odpowiedniej formie użytkownikowi końcowemu. Moduł zarządzania błędami jest dostępny poprzez właściwość <tt>ErrorHandler</tt> instancji aplikacji.
-</p>
-
-<a name="custom"></a>
-<h2 id="1006">Dodatkowe moduły (ang. custom modules)</h2>
-<p id="140148" class="block-content">
-PRADO zostało wydane z większą ilością modułów niż wymienione moduły źródłowe. PRADO zawiera moduły keszujące (<tt>TSqliteCache</tt> oraz <tt>TMemCache</tt>), moduły zarządzające użytkownikami (<tt>TUserManager</tt>), moduły autentykacji i autoryzacji (<tt>TAuthManager</tt>), itd.
-</p>
-<p id="140149" class="block-content">
-Kiedy wystąpi żądanie <tt>TPageService</tt> ładowane są także określone moduły dla serwisu stron, włączając menedżer elementów aktywnych (ang. assets manager) (<tt>TAssetManager</tt>), menedżer szablonów (<tt>TTemplateManager</tt>), menedżer tematów/skórek (ang. theme/skin manager) (<tt>TThemeManager</tt>).
-</p>
-<p id="140150" class="block-content">
-Dodatkowe moduły oraz moduły źródłowe są konfigurowalne poprzez <a href="?page=Configurations.Overview">konfigurację</a>.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/pl/Pages.page b/demos/quickstart/protected/pages/Fundamentals/pl/Pages.page
deleted file mode 100755
index a6318674..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/pl/Pages.page
+++ /dev/null
@@ -1,25 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="901">Strony (ang. pages)</h1>
-<p id="130137" class="block-content">
-Strony są najwyżej umiejscowionymi w hierarchi kontrolkamki, które nie posiadają rodzica.
-Prezentacja strony jest bezpośrednio wyświetlana użytkownikowi końcowemu. Użytkownicy posiadają dostęp do strony poprzez wysłanie żądanie do serwisu strony (ang. sending page service requests).
-</p>
-<p id="130138" class="block-content">
-Każda strona musi posiadać plik <a href="?page=Configurations.Templates1">szablonu</a>. Musi posiadać on rozszerzenie <tt>.page</tt>. Nazwa pliku (bez rozszerzenia) jest nazwą strony. PRADO będzie próbować znaleźć plik klasy strony w katalogu zawierającym szablon strony. Taki plik klasy strony musi posiadać tą samą nazwę (z rozszerzeniem <tt>.php</tt>) jak plik szablonu. Jeśli klasa nie zostanie znaleziona, strona skorzysta z klasy <tt>TPage</tt>.
-</p>
-
-<h2 id="902">PostBack</h2>
-<p id="130139" class="block-content">
-Wysłanie formularza jest nazywane <i>postback</i> jeśli wysłanie następuje do strony zawierającej formularz. Postback może być postrzegany jako zdarzenie po stronie klienta, wywoływane przez użytkownika. PRADO będzie próbowało zidentyfikować, która kontrolka po stronie serwera jest odpowiedzialna za zdarzenie postblack. Jeśli znajdzie taką, np. przykład <tt>TButton</tt>, nazywać ją będziemy senderem zdarzenia postback, który przetłumaczy zdarzenie postback na pewne specyficzne zdarzenia po stronie serwera (np. zdarzenia <tt>OnClick</tt> i <tt>OnCommand</tt> dla <tt>TButton</tt>).
-
-</p>
-
-<h2 id="903">Cykl życia strony (ang. page lifecycles)</h2>
-<p id="130140" class="block-content">
-Zrozumienie cyklu życia strony jest kluczowe by zrozumieć istotę programowania w PRADO.
-Cykl życia strony odwołuje się do stanów przejściowych strony, gdy jest ona dostarczana użytkownikowi końcowemu. Może on (cykl) być przedstawiony za pomocą następującej tablicy stanów:
-<img src="<%~lifecycles.gif %>" />
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/pl/Services.page b/demos/quickstart/protected/pages/Fundamentals/pl/Services.page
deleted file mode 100755
index 6d8b8866..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/pl/Services.page
+++ /dev/null
@@ -1,34 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="1101">Serwisy (ang. services)</h1>
-<p id="150151" class="block-content">
-Serwis jest instancją klasy implementującej interfejs <tt>IService</tt>. Każdy rodzaj serwisu przetwarza specyficzny typ żądania użytkownika. Na przykład serwis strony (ang. page service) odpowiada na żądania użytkownika dla stron PRADO.
-</p>
-<p id="150152" class="block-content">
-Serwis jest jednoznacznie identyfikowany poprzez swoją właściwość <tt>ID</tt>. Domyślnie kiedy <tt>THttpRequest</tt> jest używany jako <a href="?page=Fundamentals.Modules#request">moduł żądania</a> (ang. request module), nazwy zmiennych GET są używane by zidentyfikować serwis żadany przez użytkownika. Jeśli nazwa zmiennej GET zgadza się z jakimś <tt>ID</tt> serwisu, żądanie jest przetwarzane przez ten serwis oraz wartość parametru GET jest przekazywana jako parametr serwisu. Dla serwisu strony nazwą zmiennej GET musi być <tt>page</tt>. Na przykład następujący adres URL żadą strony <tt>Fundamentals.Services</tt>,
-<com:TTextHighlighter Language="none" CssClass="source block-content" id="code_150069">
-http://hostname/index.php?page=Fundamentals.Services
-</com:TTextHighlighter>
-</p>
-<p id="150153" class="block-content">
-Deweloper może zaimplementować dodatkowe serwisy dla swojej aplikacji. Aby uczynić serwis dostępnym należy go skonfigurować w <a href="?page=Configurations.AppConfig">konfiguracji aplikacji</a>.
-</p>
-
-<h2 id="1102">Serwis strony (ang. page service)</h2>
-<p id="150154" class="block-content">
-PRADO implementuje <tt>TPageService</tt> by przetwarzać żądania stron użytkonika. Strony są przechowywane w katalogu określonej przez właściwość <tt>BasePath</tt> serwisu strony. Właściwość wskazuje domyślnie na katalog <tt>pages</tt> w ścieżce aplikacji. Możesz zmienić tą wartość domyślną poprzez skonfigurowanie serwisu w konfiguracji aplikacji.
-</p>
-<p id="150155" class="block-content">
-Strony mogą być zorganizowane w podkatalogi w <tt>BasePath</tt>. W każdym katalogu może znajdować się plik konfiguracji strony o nazwie <tt>config.xml</tt>, który zawiera konfigurację aktywną tylko wtedy gdy strona spod tego katalogu lub podkatalogu jest żądana. Aby dowiedzieć się wiecej zobacz sekcję <a href="?page=Configurations.PageConfig">konfiguracja strony</a>.
-</p>
-<p id="150156" class="block-content">
-Parametr dla serwisu stron wskazuje na żądaną stronę. Parametr taki jak <tt>Fundamentals.Services</tt> wskazuje na stronę <tt>Services</tt> w katalogu <tt>&lt;BasePath&gt;/Fundamentals</tt>. Jeśli taki parametr nie jest obecny w żądaniu domyślnie przyjmowana jest jego wartość jako <tt>Home</tt>. Używając <tt>THttpRequest</tt> jako moduł żądania (domyślnie), następujący adres URL zażada stron <tt>Home</tt>, <tt>About</tt> i <tt>Register</tt> odpowiednio dla:
-<com:TTextHighlighter Language="none" CssClass="source block-content" id="code_150070">
-http://hostname/index.php
-http://hostname/index.php?page=About
-http://hostname/index.php?page=Users.Register
-</com:TTextHighlighter>
-gdzie pierwszy przukład wynika z faktu, że serwis strony jest domyślnym serwisem a strona <tt>Home</tt> jest stroną domyślną.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Fundamentals/pl/applifecycles.gif b/demos/quickstart/protected/pages/Fundamentals/pl/applifecycles.gif
deleted file mode 100755
index caf16028..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/pl/applifecycles.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/pl/classtree.gif b/demos/quickstart/protected/pages/Fundamentals/pl/classtree.gif
deleted file mode 100755
index b1fbf0d6..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/pl/classtree.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/pl/directory.gif b/demos/quickstart/protected/pages/Fundamentals/pl/directory.gif
deleted file mode 100755
index c7d5086d..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/pl/directory.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/pl/lifecycles.gif b/demos/quickstart/protected/pages/Fundamentals/pl/lifecycles.gif
deleted file mode 100755
index 5edaff5f..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/pl/lifecycles.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Fundamentals/pl/objectdiagram.gif b/demos/quickstart/protected/pages/Fundamentals/pl/objectdiagram.gif
deleted file mode 100755
index 7910469c..00000000
--- a/demos/quickstart/protected/pages/Fundamentals/pl/objectdiagram.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/GettingStarted/CommandLine.page b/demos/quickstart/protected/pages/GettingStarted/CommandLine.page
index 3619d3d9..9e919212 100644
--- a/demos/quickstart/protected/pages/GettingStarted/CommandLine.page
+++ b/demos/quickstart/protected/pages/GettingStarted/CommandLine.page
@@ -110,22 +110,22 @@ PostRecord#1
</com:TTextHighlighter>
</p>
-<h2>Creating Active Record Classes</h2>
-<p>
+<h2 id="18007">Creating Active Record Classes</h2>
+<p id="90001" class="block-content">
In the blog demo project, we need to create two <a href="?page=Database.ActiveRecord">Active Record</a> classes, <tt>UserRecord</tt> and <tt>PostRecord</tt>, to represent data records in the <tt>users</tt> and <tt>posts</tt> tables, respectively. Active Record classes must extend from the base class <tt>ActiveRecord</tt>, and must define property names that matches with the field names of the corresponding table.
</p>
-<p>
+<p id="90002" class="block-content">
To better organize our directories, we create a new directory <tt>protected/database</tt> to hold the class files. We also modify our application configuration by inserting the following lines. It is equivalent to adding the directory <tt>protected/database</tt> to PHP include_path, which allows us to use the classes without explicitly including them.
</p>
-<com:TTextHighlighter CssClass="source" Language="xml">
+<com:TTextHighlighter CssClass="source block-content" id="code_90016" Language="xml">
<paths>
<using namespace="Application.database.*" />
</paths>
</com:TTextHighlighter>
-<p>
+<p id="90003" class="block-content">
At the prompt, enter the following two commands to create <tt>UserRecord</tt> and <tt>PostRecord</tt> classes:
</p>
@@ -135,7 +135,7 @@ At the prompt, enter the following two commands to create <tt>UserRecord</tt> an
>> generate posts Application.database.PostRecord
</com:TTextHighlighter>
-<p>
+<p id="90004" class="block-content">
Here we used the <a href="?page=Fundamentals.Components1">namespace format</a> again to specify the classes to be created. The path <tt>Application.database.UserRecord</tt> indicates that we want the <tt>UserRecord</tt> class file to be <tt>protected/database/UserRecord.php</tt>.
</p>
diff --git a/demos/quickstart/protected/pages/GettingStarted/HelloWorld.page b/demos/quickstart/protected/pages/GettingStarted/HelloWorld.page
index d65cf7f8..285be3b4 100755
--- a/demos/quickstart/protected/pages/GettingStarted/HelloWorld.page
+++ b/demos/quickstart/protected/pages/GettingStarted/HelloWorld.page
@@ -77,7 +77,7 @@ class Home extends TPage
The application is now ready and can be accessed via: <tt>http://Web-server-address/helloworld/index.php</tt>, assuming <tt>helloworld</tt> is directly under the Web <tt>DocumentRoot</tt>. Try to change <tt>TButton</tt> in <tt>Home.page</tt> to <tt>TLinkButton</tt> and see what happens.
</p>
<p id="50042">
-Complete source code of this demo can be found in the PRADO release. You can also try the <a href="http://www.pradosoft.com/demos/helloworld/">online demo</a>.
+Complete source code of this demo can be found in the PRADO release. You can also try the <a href="http://www.pradoframework.net/site/demos/helloworld/">online demo</a>.
</p>
</div>
diff --git a/demos/quickstart/protected/pages/GettingStarted/Installation.page b/demos/quickstart/protected/pages/GettingStarted/Installation.page
index 956f53c2..5280d25b 100755
--- a/demos/quickstart/protected/pages/GettingStarted/Installation.page
+++ b/demos/quickstart/protected/pages/GettingStarted/Installation.page
@@ -13,9 +13,9 @@ The minimum requirement by PRADO is that the Web server support PHP 5.3.3. PRADO
PRADO can be installed as a standalone package or using <a href="http://getcomposer.org/">composer</a>
</p>
<div id="install-steps" class="block-content">
-<h3>Standalone package</h3>
+<h3 id="6001">Standalone package</h3>
<ol>
-<li>Go to <a href="http://www.pradosoft.com/download/">pradosoft.com</a> to grab the latest version of PRADO.</li>
+<li>Go to the <a href="https://github.com/pradosoft/prado">Prado framework project page</a> to grab the latest version of PRADO.</li>
<li>Unpack the PRADO release file to a Web-accessible directory.
</ol>
</div>
@@ -28,7 +28,7 @@ If you encounter any problems with the demo applications, please use the PRADO r
</p>
<div id="install-steps" class="block-content">
-<h3>Composer install</h3>
+<h3 id="6002">Composer install</h3>
<ol>
<li>If you don't have installed composer already, install it globally:
<com:TTextHighlighter CssClass="source block-content">
diff --git a/demos/quickstart/protected/pages/GettingStarted/Introduction.page b/demos/quickstart/protected/pages/GettingStarted/Introduction.page
index 522e385c..2056b5e1 100755
--- a/demos/quickstart/protected/pages/GettingStarted/Introduction.page
+++ b/demos/quickstart/protected/pages/GettingStarted/Introduction.page
@@ -52,11 +52,7 @@ You may refer to the following resources if you find this tutorial does not fulf
</p>
</div>
<ul class="block-content" id="intro-links">
- <li><a href="http://www.pradosoft.com/docs/classdoc/">PRADO Classes</a></li>
- <li><a href="http://www.pradosoft.com/docs/manual/">PRADO API Documentation</a></li>
- <li><a href="http://www.pradosoft.com/forum/">PRADO Forum</a></li>
- <li><a href="http://www.pradosoft.com/wiki/">PRADO Wiki</a></li>
+ <li><a href="http://pradosoft.github.io/docs/manual/">PRADO API Documentation</a></li>
<li><a href="http://github.com/pradosoft/prado/issues">PRADO Issue Tracker</a></li>
</ul>
-
</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/Upgrading32.page b/demos/quickstart/protected/pages/GettingStarted/Upgrading32.page
index e2378ed5..7e630488 100644
--- a/demos/quickstart/protected/pages/GettingStarted/Upgrading32.page
+++ b/demos/quickstart/protected/pages/GettingStarted/Upgrading32.page
@@ -1,6 +1,6 @@
<com:TContent ID="body" >
-<h1>Upgrading from v3.2</h1>
+<h1 id="12003">Upgrading from v3.2</h1>
<div class="block-content">
<p class="block-content">
@@ -17,7 +17,7 @@ We summarize in the following the most significant changes in v3.3 to help devel
</p>
</div>
-<h2>Basic Prototype to jQuery javascript porting</h2>
+<h2 id="12004">Basic Prototype to jQuery javascript porting</h2>
<p class="block-content">
The number one rule on writing jQuery javascript code is to read the <a href="http://api.jquery.com/">jQuery documentation</a>. Porting code from Prototype to jQuery needs some effort: here's a basic lookup table to port existing code:
</p>
@@ -168,7 +168,7 @@ The number one rule on writing jQuery javascript code is to read the <a href="ht
</tr>
</table>
-<h2>PRADO specific code changes</h2>
+<h2 id="12005">PRADO specific code changes</h2>
<p class="block-content">
PRADO
Porting prado to jQuery some method signatures has changed, or have been adapted:
@@ -207,7 +207,7 @@ Porting prado to jQuery some method signatures has changed, or have been adapted
</tr>
</table>
-<h2>Specific controls changes</h2>
+<h2 id="12006">Specific controls changes</h2>
<p class="block-content">
Some Prado controls were based on specific extensions of the Prototype + Scriptaculous javascript framework, and they have been deprecated now that jQuery has become the primary js framework in PRADO.
PRADO 3.3 introduces jQuery-based counterpart for these controls and encourage everyone to port their code to the new controls, but the old controls are still supposed to work with some minor annoyance:
diff --git a/demos/quickstart/protected/pages/GettingStarted/Wsat.page b/demos/quickstart/protected/pages/GettingStarted/Wsat.page
index 3d07e6f2..a76ca163 100644
--- a/demos/quickstart/protected/pages/GettingStarted/Wsat.page
+++ b/demos/quickstart/protected/pages/GettingStarted/Wsat.page
@@ -1,5 +1,5 @@
<com:TContent ID="body">
- <h1>Web Site Administration Tool</h1>
+ <h1 id="20008">Web Site Administration Tool</h1>
<p class="block-content">
Web Site Administration Tool (WSAT) is a development tool which allows you to perform several
tedious tasks of a PRADO project in a GUI fashion. Its inspired in both Asp.Net - Web Site Administration Tool and Yii's Gii.
@@ -12,12 +12,12 @@
</ul>
</p>
- <h2>Requirements</h2>
+ <h2 id="20009">Requirements</h2>
<p class="block-content">
To use WSAT, you need to add in your project configuration file: <tt>application.xml</tt>,
in the services section the wsat service like follows:
-<com:TTextHighlighter CssClass="source" Language="xml">
+<com:TTextHighlighter CssClass="source block-content" id="code_100018" Language="xml">
<services>
...
<service id="wsat" class="System.Wsat.TWsatService" Password="my_secret_password" />
@@ -25,7 +25,7 @@
</com:TTextHighlighter>
</p>
- <h2>Usage</h2>
+ <h2 id="20010">Usage</h2>
<p class="block-content">
Then you are ready to go to: http://localhost/yoursite/index.php?wsat=TWsatLogin and doing so you should see
the following page:
@@ -36,7 +36,7 @@
is part of a basic security system to avoid undesirable persons to use this tool.
</p>
- <h2>Active Record classes generation</h2>
+ <h2 id="20011">Active Record classes generation</h2>
<p class="block-content">
In order to generate AR classes you need to go to: http://localhost/divermania/index.php?wsat=TWsatGenerateAR
by clicking the proper links in the welcome page. Then you should see the following page:
diff --git a/demos/quickstart/protected/pages/GettingStarted/de/Introduction.page b/demos/quickstart/protected/pages/GettingStarted/de/Introduction.page
deleted file mode 100755
index 0c6b4ee6..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/de/Introduction.page
+++ /dev/null
@@ -1,62 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="101">Willkommen zum PRADO Quickstart Tutorial</h1>
-<div id="intro" class="block-content">
-<p id="10001">
-Das Quicktstart tutorial soll Sie bei der Erstellung einer PRADO 3.x-basierten Webanwendung unterstützen.
-</p>
-<p id="10001" class="block-content">
-Wenn Sie bereits PRADO 3.x nutzen und herausfinden möchten welche Verbesserungen und neuen Funktionen mit welcher Prado-Version unterstützt werden, besuchen sie die <a href="?page=GettingStarted.NewFeatures">Neue Features-Seite</a>.
-</p>
-<!--
-<div class="start-page">
- <div class="concepts start-block">
- <h2 id="2001">How PRADO Works</h2>
- <p id="10002" class="block-content">Concepts and fundamentals</p>
- <ol>
- <li><a href="#">Building web applications with PRADO</a></li>
- <li><a href="#">Web controls and events</a></li>
- <li><a href="#">Validating user input</a></li>
- <li><a href="#">Connecting to your database</a></li>
- <li><a href="#">Displaying data from database</a></li>
- </ol>
- </div>
- <div class="examples start-block">
- <h2 id="2002">Examples and Demos</h2>
- <ul>
- <li><a href="../helloworld/">Hello World</a></li>
- <li><a href="../currency-convert/">Currency Converter</a></li>
- <li><a href="../address-book/">Address Book</a></li>
- <li><a href="../blog/">Blog</a></li>
- <li><a href="../chat/">AJAX Chat</a></li>
- <li><a href="../time-tracker/">Project Time Tracker</a></li>
- </ul>
- <p id="10003" class="block-content">More examples in <a href="?page=Controls.Standard">Standard Controls</a>,
- <a href="?page=Controls.Validation">Validation Controls</a> and
- <a href="?page=Controls.Data">Data Controls</a>.
- </div>
-
- <div class="tutorials start-block">
- <h2 id="2003">Tutorials and Help</h2>
- <ul>
- <li><a href="?page=GettingStarted.HelloWorld">Hello World in detail</a></li>
- <li><a href="?page=Tutorial.CurrencyConverter">Currency Converter Tutorial</a></li>
- <li><a href="?page=Tutorial.AddressBook">Address Book Tutorial</a></li>
- <li><a href="?page=Tutorial.AjaxChat">AJAX Chat Tutorial</a></li>
- </ul>
- </div>
-</div>
--->
-
-<p id="10002">
-Nutzen Sie auch die folgenden Ressourcen, wenn dieses Tutorial ihre Fragen nicht hinreichend beantwortet:
-</p>
-</div>
-<ul class="block-content" id="intro-links">
- <li><a href="http://www.pradosoft.com/docs/classdoc/">PRADO Classes</a></li>
- <li><a href="http://www.pradosoft.com/docs/manual/">PRADO API Documentation</a></li>
- <li><a href="http://www.pradosoft.com/forum/">PRADO Forum</a></li>
- <li><a href="http://www.pradosoft.com/wiki/">PRADO Wiki</a></li>
- <li><a href="http://github.com/pradosoft/prado/issues">PRADO Issue Tracker</a></li>
-</ul>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/es/AboutPrado.page b/demos/quickstart/protected/pages/GettingStarted/es/AboutPrado.page
deleted file mode 100755
index 1aa1d765..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/es/AboutPrado.page
+++ /dev/null
@@ -1,86 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="201">&iquest;Que es PRADO?</h1>
-<p id="20003" class="block-content">
-PRADO es una capa de programación (framework) basada componentes y programación dirigida por eventos, para desarrollos de aplicaciones Web en PHP 5. Las siglas PRADO significan en espa&ntilde;ol Desarrollo Rapido de Aplicaciones con Programación Orientada a Objetos en PHP (<b>P</b>HP <b>R</b>apid <b>A</b>pplication <b>D</b>evelopment <b>O</b>bject-oriented).
-</p>
-<p id="20004" class="block-content">
-El principal objetivo de PRADO es utilizar al máximo la reutilización en la programación Web. Por reusabilidad, queremos decir no solamente reutilizar el código propio, si no el de otros programadores de una manera fácil. Lo último dicho es más importante, ya que evita el esfuerzo de reinventar nuevamente la rueda y además posibilita disminuir notablemente los tiempos de desarrollos. La introducción al concepto de componentes tiene este propósito.
-</p>
-<p id="20005" class="block-content">
-Para alcanzar el propósito mencionado, PRADO estipula un protocolo para escribir y usar componentes para construir una aplicación Web. Un componente es una pieza de programa que es autocontenido (self-contained) y puede ser reutilizado con una mínima personalización del mismo. Nuevos componentes pueden ser creados por una simple composición de componentes existentes.
-</p>
-<p id="20006" class="block-content">
-Para facilitar la interacción con componentes, PRADO implementa el paradigma de la programación dirigida por eventos (event-driven) que permite la delegación de comportamientos extensibles a los componentes.
-Las actividades de los usuarios finales, tales como hacer clic en un botón de un formulario, son capturados como eventos en el lado del servidor (server events).
-Metodos o funciones deben ser enlazadas a dichos eventos de tal manera que cuando los eventos sucedan, estos son invocados automáticamente para responder a dicho evento. Comparado con la programación Web tradicional en la cual los desarrolladores tienen que tratar directamente (raw) con las variables de arreglo POST y GET, la programación dirigida por eventos ayuda a los desarrolladores enfocarse mejor en las necesidades lógicas y reducir significativamente el código de bajo nivel repetitivo (low-level repetitive coding).
-</p>
-<p id="20007" class="block-content">
-En resumen, desarrollar aplicaciones Web con PRADO principalmente involucra instantáneamente tipos de componentes predesarrollados, configurarlos mediante sus propiedades, responder a sus eventos escribiendo funciones manipuladoras de los mismos , y agrupándolos (composing them) dentro de paginas para la aplicación. Es muy similar al Kit de herramientas RAD de Borland Delphi y Microsoft Visual Basic, que son utilizadas para desarrollar aplicaciones (Interfaces Graficas de Usuarios, GUI) de escritorio.
-</p>
-
-<h2 id="202">&iquest;Proque PRADO?</h2>
-<p id="20008" class="block-content">
-PRADO es comúnmente citado como una plataforma de programación (framework) única. En realidad es tan único que puede convertir una tediosa y aburrida tarea de programación en PHP en una tarea divertida (fun task). La siguiente lista es un pequeño resumen de las características principales de PRADO,
-</p>
-<ul id="prado-features" class="block-content">
-<li>
-Reutilización - Los codigos que se rigen por el protocolo basado en componentes de PRADO son altamente reutilizables. Esto beneficia a los equipos de desarrollo a largo plazo, ya que pueden reutilizar sus trabajos anteriores e integrar otras partes de trabajo con facilidad.</li>
-<li>
-Programación dirigida por eventos - Las actividades del usuario final, tales como como hacer clic en un botón de enviar, son capturadas como eventos del servidor permitiendo que los desarrolladores tengan un mejor enfoque en interacciones del usuario.</li>
-<li>Integración de equipo - La capa de presentacion y la capa logica son almacenados por separado. Las aplicaciones en PRADO pueden ser armadas por temas (themable).</li>
-<li>
-Controles webs Potentes - PRADO viene con un conjunto de poderosos componentes que se ocupan de interfaces de usuario Web. Altamente interactivo de páginas web se puede crear con unas pocas líneas de código. Por ejemplo, utilizando el componente DataGrid, se puede crear rápidamente una página que presenta una tabla de datos que permite la paginación, la clasificación, editar y eliminar filas de los datos.
-<li>
-Fuerte soporte de bases de datos - Desde la versión 3.1, PRADO ha sido equipada con total soporte de bases de datos escrita en forma nativa y, por tanto, encaja con el resto del framework PRADO. De acuerdo a la complejidad de los objetos de negocio, se puede optar por utilizar la PDO simple, basada en el acceso a los datos, o el apmpliamente conocido Active Record, o el mapa completo de los objetos del negocio SqlMap.</li>
-<li>
-Soporte de AJAX sin fisuras - Uso de AJAX en PRADO nunca ha sido más fácil con su innovador Controles Activos (Active Controls) introducidos desde la versión 3.1. Puede escribir una aplicación AJAX sin escribir una sola línea de código javascript. De hecho, que la utilización de los Controles Activos, no es muy diferente a la utilizacion de componentes no-AJAX.</li>
-<li>
-Soporte de I18N y L10N - PRADO incluye soporte completo para crear aplicaciones con múltiples idiomas y la localización.</li>
-<li>
-Compatibilidad (compliance) XHTML - Las páginas Web generadas por PRADO son compatibles con XHTML.</li>
-<li>
-Albergar trabajos ya existentes - PRADO es un framework genérico, con especial atención a la capa de presentación. No excluye a desarrolladores que hacen uso de la mayoría de las actuales bibliotecas de clase o juegos (kits) de herramientas. Por ejemplo, uno puede usar ADOdb o Creole para tratar con base de datos en su aplicación PRADO.
-<li>
-Otras características - Potente manipulación de errores /excepciones y registro de mensjes (message logging); cahe genérico y memoria caché de salida selectiva; manejo de errores personalizable y localizable; extensible autentificación y autorización; prevención de medidas de seguridad tales como cross-site script (XSS) , protección de cookies, etc.
-</li>
-</ul>
-
-<h2 id="203">¿Qué es adecuado para utilizar PRADO </h2>
-<p id="20009" class="block-content">
-PRADO es mejor adecuado para la creación de aplicaciones Web que tienen alta interactividdad con usuarios (user-interactive). Se puede utilizar para desarrollar sistemas tan simple como un blog o para aquellos sistema tan complejo como un sistema de gestión de contenidos (CMS) o una completa solución de comercio electrónico. PRADO promueve la programación orientada a objetos a través de su metodología basada en componente , se ajusta muy bien para el trabajo en equipo y el desarrollo empresarial.
-</p>
-<p id="20011" class="block-content">
-PRADO viene con un conjunto completo de técnicas de caching que ayudan a acelerar las aplicaciones Web PRADO y acomodar el tráfico de alta exigencia. Su arquitectura modular permite a los desarrolladores el uso o icorporar (plug-in) diferentes módulos de caché de memoria para diferentes necesidades. La salida de caché permite elegir selectivamente el caché de las paginas webs generadas.
-</p>
-
-<h2 id="204">
-¿Cómo se PRADO en comparación con otros Frameworks?
-</h2>
-<p id="20012" class="block-content">
-PRADO es a menudo citado como un framework único. Su singularidad radica principalmente en el paradigma de la programacion basada en componentes (component-based) y dirigida a eventos (event-driven) que pretende promover. Aunque este paradigma de programación no es nuevo en programación de aplicaciones de escritorio y no en una nueva web de algunos lenguajes de programación, PRADO es quizás el primer framework PHP que lo lleva a cabo.
-</p>
-<p id="20013" class="block-content">
-La mayoría de frameworks de PHP principalmente se centra en separar la presentación y la lógica y promueve el patrón de diseño MVC (modelo-vista-controlador) . PRADO logra el mismo objetivo, naturalmente, al exigir que la lógica se almacena en las clases y la presentación en las plantillas. PRADO hace mucho más en otros aspectos distintos de MVC. Se llena de mucho espacio en blanco en la programación web en PHP, con su paradigma de programacion basada en componentes, la riqueza de su conjunto de controles Web, sus potente soporte de bases de datos, su flexible manejo de errores y registro de mensajes, y muchos otros.
-</p>
-
-<h2 id="4004">
-¿Es PRADO lo suficientemente estable?
-</h2>
-<p id="20004" class="block-content">
-Sí. PRADO inicialmente fue liberado en agosto de 2004. Muchas series de ensayos se han escrito y realizado con frecuencia para asegurar su calidad. Se ha utilizado por miles de desarrolladores y muchas aplicaciones Web se han desarrollado sobre la base de la misma. Bugs y peticiones se gestionan a través del sistema TRAC y tenemos una gran comunidad de usuarios y el equipo de desarrollo para asegurar que todas las preguntas se respondan en forma oportuna.
-</p>
-
-<h2 id="205">Historia de PRADO</h2>
-<p id="20014" class="block-content">
-La propia inspiración original de PRADO vino de Apache Tapestry. Durante el diseño y la ejecución, me tome prestadas muchas ideas de Borland Delphi y Microsoft ASP.NET. La primera versión de PRADO salió en junio de 2004 y fue escrita en PHP 4. Impulsado por el concurso de codificación de Zend PHP 5 , re-escrbí PRADO en PHP 5, que resultó ser una sabia decisión, gracias al nuevo modelo de objetos proporcionados por PHP 5. PRADO ganó el gran premio en el concurso Zend, ganando el más alto de votos del público y los jueces del panel.
-</p>
-<p id="20015" class="block-content">
-En agosto de 2004, PRADO comenzó a ser alojado en SourceForge como un proyecto de código abierto. Poco después, el sitio del proyecto <a href="http://www.xisc.com/"> xisc.com </a> se anunció para el orden público. Con el fantástico apoyo del equipo de desarrolladores PRADO y usuarios PRADO, PRADO evolucionado a la versión 2,0 a mediados de 2005. En esta versión, Wei Zhuo contribuyó en PRADO con el excelente I18N y L10N apoyo.
-</p>
-<p id="20016" class="block-content">
-En mayo de 2005, se decidió re-escribir por completo el framework PRADO para resolver algunas cuestiones fundamentales que se encuentran en la versión 2.0 y para ponerse al día con algunas geniales características disponibles en Microsoft ASP.NET 2.0. Después de casi un año de arduo trabajo con más de 50.000 líneas de nuevo código, la versión 3.0 fue finalmente puesta a disposición en abril de 2006.
-</p>
-<p id="20017" class="block-content">
-A partir de la versión 3.0, importantes esfuerzos se asignan a asegurar la calidad y la estabilidad de PRADO. Si decimos PRADO v2.x y v1.x son prueba de concepto de trabajo, podemos decir PRADO 3.x ha crecido a un proyecto que es adecuado para un negocio serio el desarrollo de aplicaciones.
-</p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/es/Installation.page b/demos/quickstart/protected/pages/GettingStarted/es/Installation.page
deleted file mode 100755
index 973415fa..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/es/Installation.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="301">Installing PRADO</h1>
-<div id="install-info" class="block-content">
-<p id="30018">
-Su usted esta viendo esta pagina desde su explorador Web, usted ha ya realizado la instalación.
-</p>
-<p id="30019">
-Los requerimientos minimos por PRADO, son que el servidor Web soporte PHP version 5. PRADO ha sido probado con el servidor Web Apache en las plataformas Windows y Linux. Existen muchas probabilidades de que tambien pueda correr en otras plataformas con otros servidores Webs siempre y cuando estos soporten PHP 5.
-</p>
-</div>
-
-<div id="install-steps" class="block-content">
-<p id="30020">
-La instalacion de PRADO, consiste principalmente en descargarlo y descomprimirlo.
-</p>
-<ol>
-<li>Ingrese en <a href="http://www.pradosoft.com/">pradosoft.com</a> para obtener la ultima version de PRADO.</li>
-<li>Descomprima el archivo de la ultima publicacion de PRADO en una carpeta o directorio accesible via Web (Web-accessible).
-</ol>
-</div>
-<div id="install-after" class="block-content">
-<p id="30021">
-Su instalacion de PRADO esta lista y usted puede comenzar a probarlo con las aplicaciones de demostraciones incluidas en la pulicacion de prado a travez de la URL <tt>http://web-server-address/prado/demos/</tt>. Aqui asumimos que PRADO esta descomprimido en la subcarpeta <tt>prado</tt> que se ecnuentra debajo de <tt>DocumentRoot</tt> del servidor Web.
-</p>
-<p id="30022">
-Si encuentra algun problema con las aplicaciones demostrativa de PRADO, utilice por favor el script de chequeo de requerimientos que viene con PRADO , accesible desde <tt>http://web-server-address/prado/requirements/index.php</tt>, para comprobar primeramente si la configuracion de su server cumple con las condiciones requeridas por PRADO.
-</p>
-</div>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/es/Introduction.page b/demos/quickstart/protected/pages/GettingStarted/es/Introduction.page
deleted file mode 100755
index 324843ea..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/es/Introduction.page
+++ /dev/null
@@ -1,60 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="101">Bienvenido al Tutorial rápido de PRADO</h1>
-<div id="intro" class="block-content">
-<p id="10001">Este tutorial rápido se presta a ayudarle rápidamente a empezar a construir tu propia web aplicaciones basadas en PRADO versión 3.x.
-</p>
-<p id="10001" class="block-content">Si ya es usuario PRADO 3.x y me gustaría saber qué mejoras están disponibles para cada nueva versión, por favor, consulte las <a href="?page=GettingStarted.NewFeatures"> nuevas características </a>. De lo contrario, las siguientes secciones son útiles para novatos.
-</p>
-
-<div class="start-page">
- <div class="concepts start-block">
- <h2 id="2001">¿Cómo funciona PRADO?</h2>
- <p id="10002" class="block-content">Conceptos y fundamentos</p>
- <ol>
- <li><a href="#">Creación de aplicaciones web con PRADO</a></li>
- <li><a href="#">Controles Web y eventos</a></li>
- <li><a href="#">Validación de entrada de usuario</a></li>
- <li><a href="#">Conexión a bases de datos</a></li>
- <li><a href="#">Viendo los datos de la base de datos</a></li>
- </ol>
- </div>
- <div class="examples start-block">
- <h2 id="2002">Examples and Demos</h2>
- <ul>
- <li><a href="../helloworld/">Hello World (Hola Mundo)</a></li>
- <li><a href="../currency-convert/">Currency Converter (Conversor de monedas)</a></li>
- <li><a href="../address-book/">Address Book (Libreta de direcciones)</a></li>
- <li><a href="../blog/">Blog</a></li>
- <li><a href="../chat/">AJAX Chat (Chat en AJAX)</a></li>
- <li><a href="../time-tracker/">Project Time Tracker (Seguimiento de tiempos de un proyecto)</a></li>
- </ul>
- <p id="10003" class="block-content">Más ejemplos en <a href="?page=Controls.Standard">Controles Estándard</a>,
- <a href="?page=Controls.Validation">Controles de validación</a> and
- <a href="?page=Controls.Data">Controles de Datos</a>.
- </div>
-
- <div class="tutorials start-block">
- <h2 id="2003">Tutorials and Help</h2>
- <ul>
- <li><a href="?page=GettingStarted.HelloWorld">Hello World en detalles</a></li>
- <li><a href="?page=Tutorial.CurrencyConverter">Tutorial de Currency Converter</a></li>
- <li><a href="?page=Tutorial.AddressBook">Tutorial de Address Book Tutorial</a></li>
- <li><a href="?page=Tutorial.AjaxChat">Tutorial de AJAX Chat Tutorial</a></li>
- </ul>
- </div>
-</div>
-<p> </p>
-
-<p id="10002">
-Usted podrá hacer referencia a los siguientes recursos si usted encuentra que este tutorial no cumple con todas sus necesidades.
-</p>
-</div>
-<ul class="block-content" id="intro-links">
- <li><a href="http://www.pradosoft.com/docs/classdoc/">Classes PRADO </a></li>
- <li><a href="http://www.pradosoft.com/docs/manual/">Documentación API PRADO </a></li>
- <li><a href="http://www.pradosoft.com/forum/">Foro PRADO</a></li>
- <li><a href="http://www.pradosoft.com/wiki/">Wiki PRADO</a></li>
- <li><a href="http://trac.pradosoft.com/prado/">Trac PRADO</a></li>
-</ul>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/fr/AboutPrado.page b/demos/quickstart/protected/pages/GettingStarted/fr/AboutPrado.page
deleted file mode 100755
index 25bb0bc7..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/fr/AboutPrado.page
+++ /dev/null
@@ -1,71 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="201">Qu'est-ce que PRADO ?</h1>
-<p id="20003" class="block-content">
-PRADO est un framework de programmation évènementielle basé sur des composants pour développer des applications Web en PHP5. PRADO signifie <b>P</b>HP <b>R</b>apid <b>A</b>pplication <b>D</b>evelopment <b>O</b>bject-oriented.
-</p>
-<p id="20004" class="block-content">
-Le but principal de PRADO est la réutilisation maximale de code dans la programmation Web. Par réutilisation, cela ne se limite pas à son propre code mais aussi celui d'autres développeurs, de manière la plus aisée possible. Cela est très important car cela évite de réinventer la roue et peut donc réduire de façon significative le temps de développement. L'introduction du concept de composant provient de cela.
-</p>
-<p id="20005" class="block-content">
-Afin de parvenir au but ci-dessus, PRADO stipule un protocole d'écriture et d'utilisation des composants afin de construire des applications Web. Un composant est une brique logicielle qui peut être réutilisée avec quelques modifications. De nouveaux composants peuvent ainsi être construits en utilisant des composants existants.
-</p>
-<p id="20006" class="block-content">
-Afin de faciliter l'intéraction avec les composants, PRADO implémente une programmation évènementielle qui permet la délégation des comportements aux composants. Les actions des utilisateurs comme le click sur un bouton de type submit sont capturées comme des évènements serveurs. Des méthodes ou fonctions peuvent être attachées à ces évènements et lorsque l'évènement se produit, elles sont automatiquement invoquées afin de répondre à ces même évènements. Comparé à la traditionnelle programmation Web où les développeurs doivent utiliser les variables POST ou GET, la programmation évènementielle aide les développeurs à se consacrer à la logique et réduit de façon significative le code répétitif.
-</p>
-<p id="20007" class="block-content">
-Développer une application Web avec PRADO se résume à instancier des composants existants, les configurer en définissant leurs propriétés, leur affecter des fonctions répondants à ces mêmes évènements, et ainsi composer les pages de l'application. Cela est très similaire aux développants à l'aide de RAD, comme Borland Delphi et Microsoft Visual Basic, qui sont utilisés pour développer des applications GUI.
-</p>
-
-<h2 id="202">Pourquoi PRADO ?</h2>
-<p id="20008" class="block-content">
-PRADO est le plus souvent cité comme un framework unique. En fait, il est tellement unique qu'il peut changer votre programmation PHP en une tâche amusante. La liste suivante est un rapide résumé des principales fonctionnalités de PRADO,
-</p>
-<ul id="prado-features" class="block-content">
-<li>Réutilisation - Le code provenant du protocole de composant PRADO est réellement réutilisable. Cela bénéficie à l'équipe de développement dans le sens où ils peuvent réutiliser leur travail précédent afin de l'intégrer dans d'autres parties de façon aisée.</li>
-<li>Programmation évènementielle - Les actions de l'utilisateur, comme un click sur un bouton de type submit, sont capturées comme évènement serveur afin que le développeur se consacre principalement à la façon de gérer ces interactions.</li>
-<li>Intégration des équipes - La logique et la présentation sont séparées. Des thèmes peuvent être appliqués aux applications PRADO.</li>
-<li>Contrôles Web puissants - PRADO possède un large éventail de composants afin de gérer les interfaces Web. Des pages Web très interactives peuvent être crées avec peu de lignes de code. Par exemple, le seul composant "datagrid" (ou grille de données) permet de créer rapidement une page présentant un tableau paginé triable qui permet l'édition et la suppression de lignes de données.
-<li>Support robuste des base de données - Depuis la version 3.1, PRADO a été doté d'un support complet des base de données qui s'intègre totalement avec les autres parties du framework. Selon la complexité des objets métiers, votre choix pourra porter vers une simple couche d'accès PDA, vers les largements connus "Active Record" ou un mapping complet des objets métiers à travers un schéma SqlMap.</li>
-<li>Support de AJAX - Utiliser AJAX dans PRADO n'a jamais été aussi facile qu'avec les innovants "active controls" introduits depuis la version 3.1. Vous pouvez facilement créer une application intégrant de l'AJAX sans écrire une seule ligne de javascript. En fait, l'utilisation des "active controls" n'est pas différente des contrôles Web standards.</li>
-<li>Support I18N et L10N - PRADO intègre un support complet afin de contruire des applications dans plusieurs langues et plusieurs locales.</li>
-
-<li>Rendu XHTML - Les pages Web générées par PRADO sont "XHTML-compliant" et ainsi conformes aux standards W3C.</li>
-<li>Intégration de l'existant - PRADO est un framework généric se focalisant sur la couche de présentation. Cela n'empêche en rien les développeurs d'utiliser la plupart des bibliothèques existantes. Par exemple, on peut utiliser AdoDB ou Creole afin de gérer l'accès données dans son application PRADO.
-<li>Autres fonctionnalités - Puissante gestion des erreurs et/ou exceptions et enregistrement des messages; Cache générique et sélectif; Gestion des erreurs customisable et localisable; Authentification et authorisation extensible; Mesures de sésurité comme prévention des cross-site script (CSS), protection des cookies, etc...</li>
-</ul>
-
-<h2 id="203">Pour quelles applications PRADO est-il adapté ?</h2>
-<p id="20009" class="block-content">
-PRADO est le plus adapté pour des applications Web très interactives. Il peut être utilisé pour développer des systèmes simples comme un blog, ou complexes comme un système de gestion de contenu (CMS), ou une solution complète de e-commerce. Puisque PRADO est basé sur une programmation orientée objet à travers sa méthodologie de composants, il convient particulièrement bien pour le travail en équipe et le développement d'entreprise.
-</p>
-<p id="20011" class="block-content">
-PRADO intègre un système de cache complet qui peut aider les applications à tenir des charges de traffic élevées. Son architecture modulaire permet aux développeurs d'utiliser des modules de cache différents pour chaque besoin. Le cache peut s'effectuer sur toute ou partie d'une page Web.
-</p>
-
-<h2 id="204">Comment est PRADO comparé à d'autres Frameworks ?</h2>
-<p id="20012" class="block-content">
-PRADO est souvent cité comme un framework unique. Sa particularité est principalement liée à la gestion des composants et à la programmation évènementielle qu'il essaie de promouvoir. Bien que ce paradigme ne soit pas nouveau dans la programmation d'application GUI, PRADO est peut-être le premier framework PHP à l'intégrer.
-</p>
-<p id="20013" class="block-content">
-La plupart des frameworks PHP se focalise principalement sur la séparation des couches de présentation et de la logique en utilisant le design pattern MVC (Model-Vue-Contrôleur). PRADO atteint le même but en imposant que la logique se situe dans des classes et la présentation dans des templates. PRADO fait beaucoup plus sur d'autres aspects que le MVC. Il comble des manque dans la programmation PHP avec son modèle de composants Web riches, son support robuste des bases de données, sa gestion d'erreur flexible et beaucoup d'autre...
-</p>
-
-<h2>PRADO est-il assez stable ?</h2>
-<p>
-Oui. Le projet PRADO a débuté en août 2004. Beaucoup de tests unitaires ont été écrits et fréquemment éxecutés afin d'assurer sa qualité. Il a été utilisé par des milliers de développeurs et beaucoup d'applications sont basés sur celui-ci. Les bugs et les demandes de fonctionnalités sont gérées à travers le système TRAC, nous avons une grande communauté d'utilisateurs et une équipe de développement afin d'assurer que toutes les questions sont répondues en un temps record.
-</p>
-
-<h2 id="205">Histoire de PRADO</h2>
-<p id="20014" class="block-content">
-L'inspiration originale de PRADO vient de Apache Tapestry. Pendant le design et l'implémentation, j'ai emprunté beaucoup d'idées de Borland Delphi et Microsoft ASP.NET. La première version de PRADO a vue le jour en juin 2004 et était écrite en PHP4. Conduit par le concours de codage de Zend, j'ai réécrit PRADO en PHP5, qui est un changement majeur grâce au nouveau modèle objet fourni par PHP5. PRADO a remporté le grand prix du concours grâce aux votes du public ainsi que du jury.
-</p>
-<p id="20015" class="block-content">
-En août 2004, PRADO a commencé à être hébergé sur SourceForge en projet Open Source. Peu après, le site du projet <a href="http://www.xisc.com/">xisc.com</a> a été annoncé au public. Grâce au fantastique support de l'équipe de développement et des utilisateurs de PRADO, PRADO a évolué en version 2.0 mi 2005. Dans cette version, Wei Zhuo a contribué à PRADO avec le support I18N et L10N.
-</p>
-<p id="20016" class="block-content">
-En mai 2005, nous avons décidé de réécrire complètement le framework PRADO afin de résoudre quelques problèmes trouvés dans la version 2.0 et ajouter des fonctionnalités disponibles dans Microsoft ASP.NET 2.0. Après près d'un an de dur labeur et 50.000 lignes de nouveau code, la version 3.0 était finalement disponible en avril 2006.
-</p>
-<p id="20017" class="block-content">
-Au démarrage de la version 3.0, des efforts significatifs ont été fournis afin d'assurer la qualité et la stabilité de PRADO. Si PRADO v2.x et v1.x sont la preuve du concept, nous pouvons affirmer que PRADO v3.x est un projet qui est désormais adapté pour le développement d'applications métiers.
-</p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/fr/CommandLine.page b/demos/quickstart/protected/pages/GettingStarted/fr/CommandLine.page
deleted file mode 100755
index d1406928..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/fr/CommandLine.page
+++ /dev/null
@@ -1,94 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="501">Outil en ligne de commande</h1>
-<p id="70046" class="block-content">Le script optionnel <tt>prado-cli.php</tt> du répertoire <tt>framework</tt> est un outil en ligne de commande destiné à éxecuter certaines tâches dans PRADO.
-Le script <tt>prado-cli.php</tt> peut être utilisé pour créer le squelette de projet PRADO, des fichiers tests et accéder à un shell interactif PHP.
-</p>
-<h2 id="502">Pré-requis</h2>
-<p id="70047" class="block-content">
-Afin d'utiliser l'outil en ligne de commande, vous aurez à utiliser une console. De plus, PHP doit être capable d'éxecuter des scripts en ligne de commande.
-</p>
-
-<h2 id="503">Utilisation</h2>
-<p id="70048" class="block-content">
-Si vous tapez <tt>php chemin/vers/framework/prado-cli.php</tt>, vous devez voir les informations suivantes. Alternativement, si vous n'êtes pas sous Windows, vous pouvez essayer de transformer le fichier <tt>prado-cli.php</tt> en un éxecutable</p>
-<com:TTextHighlighter Language="cli" CssClass="source block-content" id="code_70006">
-Command line tools for Prado 3.0.5.
-usage: php prado-cli.php action <parameter> [optional]
-example: php prado-cli.php -c mysite
-
-actions:
- -c <directory>
- Creates a Prado project skeleton for the given <directory>.
-
- -t <directory>
- Create test fixtures in the given <directory>.
-
- shell [directory]
- Runs a PHP interactive interpreter. Initializes the Prado
- application in the given [directory].
-</com:TTextHighlighter>
-
-<p id="70049" class="block-content">Les <b>&lt;parameter&gt;</b> sont les paramètres requis et <b>[optional]</b>
-désignent les paramètres optionnels. </p>
-
-<h2 id="504">Créer un nouveau squelette de projet PRADO</h2>
-
-<p id="70050" class="block-content">Afin de créer un squelettre de projet PRADO, suivez les instructions suivantes :</p>
-<ol>
- <li>Placez-vous dans le dossier où vous souhaitez créer le projet.</li>
- <li>Tapez, <tt>php ../prado/framework/prado-cli.php -c helloworld</tt>, où
- <tt>helloworld</tt> est le nom du dossier où vous souhaitez créer le squelette.</li>
- <li>Tapez, <tt>php ../prado/framework/prado-cli.php <b>-t</b> helloworld</tt> afin de créer les fichiers tests du projet <tt>helloworld</tt>.</li>
-</ol>
-
-<h2 id="505">Shell interactif</h2>
-<p id="70051" class="block-content">
-Le shell interactif vous permet d'évaluer des scripts PHP directement en ligne de commande.
-Le script <tt>prado-cli.php</tt> peut être utilisé pour démarrer le shell et charger un projet PRADO existant.
-Par exemple, chargons le projet de démo blog. En supposant que votre console se situe actuellement dans le répertoire <tt>prado</tt> de la distribution, tapez :
-</p>
-<p id="70052" class="block-content">
-<com:TTextHighlighter Language="cli" CssClass="source block-content" id="code_70007">
-$: php framework/prado-cli.php shell demos/blog
-</com:TTextHighlighter>
-Le résultat doit être
-<com:TTextHighlighter Language="cli" CssClass="source block-content" id="code_70008">
-Command line tools for Prado 3.0.5.
-** Loaded Prado application in directory "demos\blog\protected".
-PHP-Shell - Version 0.3.1
-(c) 2006, Jan Kneschke <jan@kneschke.de>
-
->> use '?' to open the inline help
-
->>
-</com:TTextHighlighter>
-Ensuite, nous allons appeler une instance de l'application du blog PRADO, et de cette instance nous allons créer une instance du module<tt>'data'</tt>. Notez qu'un <b>point-virgule</b> à la fin de la ligne <b>n'affiche pas la sortie</b>.
-
-<com:TTextHighlighter Language="cli" CssClass="source block-content" id="code_70009">
->> $app = Prado::getApplication();
-
->> $db = $app->getModule('data');
-</com:TTextHighlighter>
-Pour finir, nous voulons utiliser le module 'data' pour récupérer le post ayant l'<tt>ID=1</tt>. Notez que nous <b>n'avons pas mis de point-virgule</b> afin de voir le résultat de la commande.
-<com:TTextHighlighter Language="cli" CssClass="source block-content" id="code_70010">
->> $db->queryPostByID(1)
-</com:TTextHighlighter>
-Aucune erreur ne doit se produire et vous devez dorénavant voir :
-<com:TTextHighlighter Language="cli" CssClass="source block-content" id="code_70011">
-PostRecord#1
-(
- [ID] => 1
- [AuthorID] => 1
- [AuthorName] => 'Prado User'
- [CreateTime] => 1148819691
- [ModifyTime] => 0
- [Title] => 'Welcome to Prado Weblog'
- [Content] => 'Congratulations! You have successfully installed Prado Blog --
- a PRADO-driven weblog system. A default administrator account has been created.
- Please login with <b>admin/prado</b> and update your password as soon as possible.'
- [Status] => 0
- [CommentCount] => 0
-)
-</com:TTextHighlighter>
-</p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/fr/HelloWorld.page b/demos/quickstart/protected/pages/GettingStarted/fr/HelloWorld.page
deleted file mode 100755
index 1e0f5574..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/fr/HelloWorld.page
+++ /dev/null
@@ -1,83 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="401">Ma première application PRADO</h1>
-<div id="hello1" class="block-content">
-<p id="50034">
-Dans cette partie, nous allons vous guider afin de créer votre première application PRADO, la fameuse application "Hello World".
-</p>
-<p id="50035">
-"Hello World" est peut-être l'application PRADO la plus simple et <i>interactive</i> que vous pouvez créer. Cela affiche une page avec un bouton où il est affiché <tt>Click Me</tt>. Lorsque l'utilisateur clicke sur la bouton, il est affiché <tt>Hello World</tt>.
-</p>
-<p id="50036">
-Il y a plusieurs approches afin d'arriver au but ci-dessus. On peut envoyer la page au serveur, vérifier le contenu de la variable POST, et générer une nouvelle page avec le texte du bouton modifié. On peut également simplement utiliser du javascript afin de mettre à jour le libellé du bouton après l'évènement <tt>onclick</tt>.
-</p>
-</div>
-<p id="50037" class="block-content">
-PRADO privilégie une programmation évènementielle basée sur des composants. Le bouton est représenté par un objet <tt>TButton</tt>. Celui-ci comprend le libellé du bouton en tant que propriété <tt>Text</tt> et associe l'évènement "click" avec un évènement serveur <tt>OnClick</tt>. Afin de répondre à l'action de l'utilisateur sur le click du bouton, il suffit simplement d'attacher une fonction à l'évènement <tt>OnClick</tt> du bouton. Dans cette fonction, la propriété <tt>Text</tt> est modifiée en "Hello World". Le diagramme suivant image la séquence ci-dessus :
-<img src="<%~sequence.gif%>" class="figure"/>
-</p>
-<p id="50038" class="block-content">
-Notre application PRADO sera composée de trois fichiers, <tt>index.php</tt>, <tt>Home.page</tt> et <tt>Home.php</tt>, qui sont organisés de la façon suivante :
-<img src="<%~directory.gif%>" class="figure"/>
-
-où chaque répertoire est expliqué comme suit. Notez que la structure des répertoire peut être personnalisée. Par example, le dossier <tt>protected</tt> peut se trouver hors du répertoire Web public. Vous saurez comment faire à la suite de ce tutorial.
-</p>
-<ul id="dir-struct" class="block-content">
-<li><tt>assets</tt> - dossier de stockage des fichiers publiés privés. Voir la partie <a href="?page=Advanced.Assets">"assets"</a> pour plus de détails. Le processus du serveur Web doit avoir les droits d'écriture sur ce répertoire.</li>
-<li><tt>protected</tt> - répertoire de base de l'application comprenant les données et fichiers privés. Ce répertoire se doit de ne pas être accessible au public.</li>
-<li><tt>runtime</tt> - répertoire de stockage des fichiers d'éxecution de l'application, comme des données de cache, etc. Le processus du serveur Web doit avoir les droits d'écriture sur ce répertoire.</li>
-<li><tt>pages</tt> - répertoire de base des pages PRADO.</li>
-</ul>
-
-<div class="tip">
-<b class="tip">Astuce :</b>Vous pouvez également utiliser le script <tt>framework/prado-cli.php</tt>
-<a href="?page=GettingStarted.CommandLine">en ligne de commande</a>
-afin de créer la structure de votre projet PRADO. Par exemple, tapez la commande
-<tt>php path/to/prado-cli.php -c helloworld</tt> dans le dossier où vous souhaitez créer votre projet <tt>helloworld</tt>.
-</div>
-
-<p id="50040">
-Les trois fichiers dont nous avons besoin sont expliqués comme suit.
-</p>
-<ul id="file-list" class="block-content">
-<li><tt>index.php</tt> - script d'entrée de notre application PRADO. Ce fichier est requis par toutes les applications PRADO et il s'agit du seul script accessible par les utilisateurs finaux. Le contenu du fichier <tt>index.php</tt> consiste principalement aux trois lignes suivantes :
-<com:TTextHighlighter CssClass="source block-content" id="code_50003">
-require_once('path/to/prado.php'); // include du script prado
-$application=new TApplication; // création de l'instance de l'application PRADO
-$application->run(); // démarrage de l'application
-</com:TTextHighlighter>
-</li>
-<li><tt>Home.page</tt> - template de la page par défaut retournée lorsque les utilisateurs ne spécifient pas de façon explicite la page demandée. Un template désigne la présentation des composants. Dans cet exemple, nous utiliserons deux composants,<tt>TForm</tt> et <tt>TButton</tt>, qui correspondent respectivement aux tags HTML &lt;form&gt; et &lt;input&gt;. Le fichier template contient le contenu suivant :
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_50004">
-<html>
- <body>
- &lt;com:TForm&gt;
- &lt;com:TButton Text="Click me" OnClick="buttonClicked" /&gt;
- &lt;/com:TForm&gt;
- </body>
-</html>
-</com:TTextHighlighter>
-</li>
-<li><tt>Home.php</tt> - fichier de classe pour la page <tt>Home</tt> page. Celui-ci contient principalement la méthode répondant à l'évènement <tt>OnClick</tt> du bouton.
-<com:TTextHighlighter CssClass="source block-content" id="code_50005">
-class Home extends TPage
-{
- public function buttonClicked($sender,$param)
- {
- // $sender se rapporte au composant bouton
- $sender->Text="Hello World!";
- }
-}
-</com:TTextHighlighter>
-</li>
-</ul>
-<div id="hello-end" class="block-content">
-<p id="50041">
-L'application is maintenant prête et est accesible à l'adresse
-The application is now ready and can be accessed via: <tt>http://Web-server-address/helloworld/index.php</tt>, en supposant que <tt>helloworld</tt> soit directement sous la racine de votre serveur. Essayez de modifier le <tt>TButton</tt> de la page <tt>Home.page</tt> en <tt>TLinkButton</tt> et voyez ce qui se produit.
-</p>
-<p id="50042">
-Le code source complet de cette démonstration peut être téléchargé dans la release de PRADO. Vous pouvez également essayer <a href="http://www.pradosoft.com/demos/helloworld/">la démonstration en ligne</a>.
-</p>
-</div>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/fr/Installation.page b/demos/quickstart/protected/pages/GettingStarted/fr/Installation.page
deleted file mode 100755
index 04b31cef..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/fr/Installation.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="301">Installer PRADO</h1>
-<div id="install-info" class="block-content">
-<p id="30018">
-Si vous voyez cette page à partir de votre serveur Web, c'est que l'installation s'est déjà bien déroulée.
-</p>
-<p id="30019">
-La configuration minimum requise par PRADO est que le serveur Web supporte PHP 5. PRADO a été testé avec un serveur Apache sur une platforme Windows et Linux. Il est fort possible qu'il fonctionne avec d'autres platformes avec d'autres types de serveurs Web tant que PHP 5 est supporté.
-</p>
-</div>
-
-<div id="install-steps" class="block-content">
-<p id="30020">
-L'installation de PRADO se résume principalement au téléchargement et à la décompression des sources.
-</p>
-<ol>
-<li>Rendez-vous sur <a href="http://www.pradosoft.com/">pradosoft.com</a> afin de récupérer la dernière version de PRADO.</li>
-<li>Décompressez le fichier PRADO dans le répertoire du serveur Web.
-</ol>
-</div>
-<div id="install-after" class="block-content">
-<p id="30021">
-Votre installation de PRADO est terminée et vous pouvez commencer à utiliser les applications de démonstration incluses dans PRADO avec l'URL <tt>http://web-server-address/prado/demos/</tt>. Ici nous supposons que PRADO est décompressé dans le sous-répertoire <tt>prado</tt> sous le <tt>répertoire racine</tt> du serveur Web.
-</p>
-<p id="30022">
-Si vous rencontrez un problème avec les applications de démonstration, merci d'utiliser le script de vérification des pré-requis de PRADO, accessible à l'adresse <tt>http://web-server-address/prado/requirements/index.php</tt>, afin de vérifier que votre configuration réponds bien aux exigences de PRADO.
-</p>
-</div>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/fr/Introduction.page b/demos/quickstart/protected/pages/GettingStarted/fr/Introduction.page
deleted file mode 100755
index 2a7768ee..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/fr/Introduction.page
+++ /dev/null
@@ -1,19 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="101">Bienvenue sur le tutorial de démarrage rapide de PRADO</h1>
-<div id="intro" class="block-content">
-<p id="10001">
-Ce tutorial est destiné à vous aider rapidement à créer votre propre application Web basée sur PRADO version 3.X.
-</p>
-<p id="10002">
-Vous pouvez vous réferrer aux ressouces suivantes si vous trouvez que ce tutorial ne correspond pas à vos besoins.
-</p>
-</div>
-<ul class="block-content" id="intro-links">
- <li><a href="http://www.pradosoft.com/docs/classdoc/">PRADO Classes</a></li>
- <li><a href="http://www.pradosoft.com/docs/manual/">PRADO API Documentation</a></li>
- <li><a href="http://www.pradosoft.com/forum/">PRADO Forum</a></li>
- <li><a href="http://www.pradosoft.com/wiki/">PRADO Wiki</a></li>
- <li><a href="http://trac.pradosoft.com/prado/">PRADO Trac</a></li>
-</ul>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/fr/NewFeatures.page b/demos/quickstart/protected/pages/GettingStarted/fr/NewFeatures.page
deleted file mode 100755
index 7e0805c4..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/fr/NewFeatures.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<com:TContent ID="body" >
-
-<h1>Nouvelles fonctionnalités</h1>
-
-<p>
-Cette page résume les principale fonctionnalités introduites dans chaque version de PRADO.
-</p>
-
-<h2>Version 3.1.0</h2>
-<ul>
-
-<li>Ajout d'un support d'AJAX. Un large panel de contrôles AJAX, appelés "active controls", est introduit. L'utilisation de ces contrôles est très similaires à leur homologue "non-AJAX". Pour plus de détails, voir le détail sur les <a href="?page=ActiveControls.Home">"active controls"</a>.</li>
-
-<li>Ajout d'un support complet de base de données.</li>
-<li>Ajout de nouveaux contrôles, modules et services, incluant <a href="?page=Services.SoapService">TSoapService</a>, <a href="?page=Controls.OutputCache">TOutputCache</a>, TSessionPageStatePersister, TFeedService, TJsonService, cache des dépendances entre les classes et TXmlTransform.
-</li>
-
-<li>Amélioration de certains contrôles de données avec des "renderers". Le "Renderer" permet la réutilisation des templates qui sont généralement trouvés dans les contrôles comme <tt>TRepeater</tt>, <tt>TDataList</tt> et <tt>TDataGrid</tt>, rendant ainsi la configuration de ces contrôles plus "propre". Pour plus de détails, consultez les tutoriaux mis à jour : <a href="?page=Controls.Repeater"><tt>TRepeater</tt></a>, <a href="?page=Controls.DataList"><tt>TDataList</tt></a> et <a href="?page=Controls.DataGrid"><tt>TDataGrid</tt></a>.</li>
-
-<li>Ajout du support des <a href="?page=Configurations.AppConfig">fichiers de configurations externes</a>. Amélioration de la syntaxe des templates afin de faciliter la <a href="?page=Configurations.Templates1">configuration des sous-propriétés</a>.</li>
-
-</ul>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/fr/Upgrading.page b/demos/quickstart/protected/pages/GettingStarted/fr/Upgrading.page
deleted file mode 100755
index 18d3b218..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/fr/Upgrading.page
+++ /dev/null
@@ -1,63 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="501">Mise à jour à partir des versions v2.x et v1.x</h1>
-
-<div id="from-2-or-1" class="block-content">
-<p id="40023">
-PRADO v3.0 n'est pas rétro-compatible avec les versions précédents de PRADO.
-</p>
-<p id="40024">
-La bonne nouvelle est que les propriétés et que les évènements de la plupart des contrôles restent identiques ainsi que la syntaxe des templates qui reste largement inchangée. Par conséquent, les connaissances des développeurs des anciennes versions restent applicables dans la v3.0.
-</p>
-<p id="40025">
-Nous résumons ci-dessous les changements les plus significatifs de la v3.0 afin d'aider les développeurs à migrer leurs applications v2.x et v1.x plus facilement, si besoin est.
-</p>
-</div>
-
-<h2 id="502">Définition des composants</h2>
-<p id="40026" class="block-content">
-La version 3.0 a complètement changé de besoin de fichiers de spécifications des composants. Il se fonde davantage sur des conventions pour définir les propriétés et les événements des composants . En particulié, une propriété est définit par la présence d'une méthode getter et/ou setter, tandis qu'un évènement est définit par l'existance d'une méthode <tt>on</tt>... .Les noms des propriétés et évènements dans la v3.0 sont tous les deux case-insensitive. Par conséquence, les développeurs sont désormais obligés de faire attention aux conversions de type lorsque la propriété d'un composant est définie. Par example, le code suivant est utilisé afin de définir la propriété <tt>Enabled</tt> propriétaire d'un <tt>TControl</tt>, qui est un type <tt>booléen</tt>,
-</p>
-<com:TTextHighlighter Language="php" CssClass="block-content source" ID="code1">
-public function setEnabled($value)
-{
- $value=TPropertyValue::ensureBoolean($value);
- $this->setViewState('Enabled',$value,true);
-}
-</com:TTextHighlighter>
-<p id="40027" class="block-content">
-où la fonction <tt>TPropertyValue::ensureBoolean()</tt> est utilisée afin de s'assurer que la variable est bien un booléen. Ceci car lorsque la propriété est configurée dans un template, une chaîne de caractère est passée au setter. Dans les versions précédentes, PRADO connaissait le type de chaque propriété des composants grâce aux fichiers de spécifications et se chargeait de la conversion de type pour vous.
-</p>
-
-<h2 id="503">Contrôleur de l'application</h2>
-<p id="40028" class="block-content">
-Le contrôleur de l'application implémente désormais une architecture modulaire. Les modules peuvent être ajoutés et configurés dans la configuration de l'application. Chaque module assure une fonction particulière et ils peuvent être coordonnés entre eux par <a href="?page=Fundamentals.Applications">le cycle de vie de l'application</a>. Le concept des modules de la version 2.x a été replacé dans la v3.0 par <a href="?page=Configurations.PageConfig">les répertoires des pages</a>. En conséquence, le format de <a href="?page=Configurations.AppConfig">configuration de l'application</a> de la v3.0 est très différent des versions précédentes.
-</p>
-
-<h2 id="504">Pages</h2>
-<p id="40029" class="block-content">
-Les pages dans la version 3.0 sont organisés dans des répertoires qui peuvent être comparés au concept des modules de la v2.x. Les pages sont demandées selon leur structure. Par exemple, une URL <tt>index.php?page=Controls.Samples.Sample1</tt> sera utilisée pour servir une page nommée <tt>Sample1</tt> se trouvant dans le répertoire <tt>[BasePath]/Controls/Samples</tt>, où <tt>[BasePath]</tt> se réfère au répertoire racine des pages. Le nom d'un fichier template d'une page doit avoir comme extension <tt>.page</tt>, principalement pour différencier les templates des pages des templates des contrôles qui se termineront par l'extension <tt>.tpl</tt>.
-</p>
-
-<h2 id="505">Relation des contrôles</h2>
-<p id="40030" class="block-content">
-La version 3.0 redéfinit les relations entre les contrôles. En particulier, la relation parent-enfant se réfère désormais à la relation entre les contrôles et la présentation. Un nouveau nom de relation est introduit afin d'aider la gestion des identifiants des contrôles. Pour plus de détails, voir la section concernant les <a href="?page=Fundamentals.Controls">contrôles</a>.
-</p>
-
-<h2 id="506">Syntaxe des Templates</h2>
-<div id="template-syntax" class="block-content">
-<p id="40031">
-La syntaxe des contrôles dans les templates de la v3.0 est très similaire à celle des versions précédentes avec beaucoup d'améliorations. Un changement important est au sujet des expression dans le databinding. Dans la v3.0, cela est fait de la façon suivante,</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_40002">
-&lt;com:MyComponent PropertyName=&lt;%# PHP expression %&gt; .../&gt;
-</com:TTextHighlighter>
-<p id="40032">
-Les expressions et les tags d'états ont aussi changé. Pour plus de détails, voir la section concernant la <a href="?page=Configurations.Templates1">définition des templates</a>.
-</p>
-</div>
-<h2 id="507">Syntaxe des Thèmes</h2>
-<p id="40033" class="block-content">
-Les thèmes dans la v3.0 sont définis comme les contrôles des templates avec quelques restrictions.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/fr/directory.gif b/demos/quickstart/protected/pages/GettingStarted/fr/directory.gif
deleted file mode 100755
index e6c4f724..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/fr/directory.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/GettingStarted/fr/sequence.gif b/demos/quickstart/protected/pages/GettingStarted/fr/sequence.gif
deleted file mode 100755
index 4207a9bb..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/fr/sequence.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/GettingStarted/id/AboutPrado.page b/demos/quickstart/protected/pages/GettingStarted/id/AboutPrado.page
deleted file mode 100755
index e2704859..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/id/AboutPrado.page
+++ /dev/null
@@ -1,70 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="201">Apa itu PRADO?</h1>
-<p id="20003" class="block-content">
-PRADO adalah kerangka pemrograman berbasis-komponen dan kendali-event untuk mengembangkan aplikasi Web dalam PHP 5. PRADO singkatan dari <b>P</b>HP <b>R</b>apid <b>A</b>pplication <b>D</b>evelopment <b>O</b>bject-oriented.
-</p>
-<p id="20004" class="block-content">
-Tujuan utama dari PRADO adalah menghidupkan usabilitas secara maksimum dalam pemrograman Web. Dengan usabilitas, kami artikan tidak hanya menggunakan ulang kode yang dimiliki seseorang, tapi juga menggunakan ulang kode orang lain dalam cara yang mudah. Yang terakhir lebih penting karena menghemat usaha penciptaan roda dan menghemat waktu pengembangan secara dramatis. Pengenalan atas konsep komponen adalah untuk tujuan ini.
-</p>
-<p id="20005" class="block-content">
-Untuk mencapai tujuan di atas, PRADO menetapkan sebuah protokol atas penulisan dan pemakaian komponen untuk membentuk aplikasi Web. Komponen adalah unit software yang mengandung-dirinya sendiri dan dapat dipakai ulang dengan kustomisasi mudah. Komponen baru dapat dibuat dengan komposisi sederhana terhadap komponen-komponen yang sudah ada.
-</p>
-<p id="20006" class="block-content">
-Untuk menjembatani interaksi dengan komponen, PRADO menerapkan paradigma pemrograman kendali-event yang membolehkan delegasi aturan yang bisa diperpanjang ke komponen. Aktivitas pengguna-akhir seperti mengklik pada tombol kirim, ditangkap sebagai event server. Metode atau fungsi dapat disertakan pada event ini agar ketika event terjadi, metode atau fungsi dipanggil secara otomatis untuk merespon event. Dibandingkan dengan pemrograman Web tradisional di mana para pengembang harus berhadapan dengan variabel kasar POST atay GET, pemrograman kendali-event membantu para pengembang lain lebih berfokus pada logika yang diperlukan dan mengurangi secara drastis pengkodean berulang kali.
-</p>
-<p id="20007" class="block-content">
-Ringkasnya, mengembangkan aplikasi Web PRADO sebagian besar menyangkut penurunan tipe komponen yang sudah dibuat sebelumnya, mengkonfigurasinya dengan menyetel propertinya, merespon ke event-nya dengan menulis fungsi pengendali, dan mengaturnya ke dalam halaman untuk aplikasi. Ini sangat mirip dengan kit piranti RAD, seperti Borland Delphi dan Microsoft Visual Basic, yang digunakan untuk mengembangkan aplikasi GUI desktop.
-</p>
-
-<h2 id="202">Mengapa PRADO?</h2>
-<p id="20008" class="block-content">
-PRADO banyak dikutip sebagai kerangka kerja yang unik. Kenyataannya, ia begitu unik sehinggi ia dapat mengalihkan pemrograman PHP yang membosankan menjadi tugas yang menyenangkan. Daftar berikut adalah ringkasan pendek dari fitur utama PRADO,
-</p>
-<ul id="prado-features" class="block-content">
-<li>Usabilitas - Kode mengikuti protokol komponen yang dapat digunakan secara berulang-ulang. Ini menguntungkan tim pengembang selama bekerja karena mereka dapat menggunakan kembali pekerjaan mereka sebelumnya serta mengintegrasikan pekerjaan pihak lain dengan mudah.</li>
-<li>Pemrograman kendali-event - Aktivitas pengguna-akhir, seperti mengklik pada tombol kirim, dianggap sebagai event server dengan begitu para pengembang lebih terfokus pada menghadapi interaksi pengguna.</li>
-<li>Integrasi tim - Penyajian dan logika disimpan secara terpisah. Aplikasi PRADO dapat berganti tema.</li>
-<li>Kontrol Web bertenaga - PRADO hadir dengan set komponen bertenaga berkenaan dengan antarmuka pengguna Web. Halaman Web interaktif tinggi dapat dibuat dengan beberapa baris kode. Sebagai contoh, menggunakan komponen datagrid, seseorang bisa dengan cepat membuat sebuah halaman yang menyajikan tabel data yang membolehkan banyak halaman, pengurutan, penyuntingan, dan penghapusan baris data.
-<li>Dukungan database kuat - Sejak versi 3.1, PRADO telah dilengkapi dengan dukungan database lengkap yang secara alami ditulis dan selanjutnya cocok dengan kerangka kerja PRADO lainnya. Berdasarkan kompleksitas dari obyek bisnis, seseorang dapat memilih untuk menggunakan akses data berbasis-PDO, atau rekaman aktif yang lebih umum dikenal, atau skema pemetaan obyek bisnis lengkap SqlMap.</li>
-<li>Dukungan AJAX - Menggunakan AJAX dalam PRADO jauh lebih mudah dengan kontrol aktif inovatif yang diperkenalkan sejak versi 3.1. Dengan mudah Anda dapat menulis aplikasi AJAX-enabled tanpa menuliskan satu barispun kode javascript. Kenyataannya, menggunakan kontrol aktif tidak jauh berbeda dengan menggunakan kontrol Web reguler non-AJAX.</li>
-<li>Dukungan I18N dan L10N - PRADO menyertakan dukungan lengkap untuk membangun aplikasi dengan multipel bahasa dan lokal.</li>
-<li>Sesuai XHTML - Halaman Web yang dibuat oleh PRADO sesuai dengan XHTML.</li>
-<li>Akomodasi dari pekerjaan yang sudah ada - PRADO adalah kerangka kerja umum dengan fokus pada lapisan penyajian. Ita tidak mengecualikan para pengembang dari pemakaian librari kelas atau kit piranti yang sudah ada. Sebagai contoh, seseorang dapat memakai AdoDB atau Creole untuk berhadapan dengan DB dalam aplikasi PRADO-nya.
-<li>Fitur lainnya - Penangangan kesalahan/kekecualian bertenaga serta pencatatan pesan; cache generik dan cache output selektif; penanganan kesalahan yang dapat dikustomisasi serta dilokalisasi; otorisasi dan otentikasi yang yang dapat diperluas; ukuran keamanan serperti pencegahan naskah situs-silang (XSS), proteksi cookie, dll.</li>
-</ul>
-
-<h2 id="203">Untuk Apa PRADO Paling Cocok?</h2>
-<p id="20009" class="block-content">
-PRADO paling cocok untuk membuat aplikasi Web yang tingkat interaksif-penggunanya cukup tinggi. Ia dapat dipakai untuk mengembangkan sistem sesederhana sistem blog sampai serumit sistem manajemen konten (CMS) atau solusi e-commerce lengkap. Karena PRADO mempromosikan pemrograman terorientasi-obyek melalui metodologi basis-komponennya, ia sangat cocok untuk kerjasama tim dan pengembangan enterprise.
-</p>
-<p id="20011" class="block-content">
-PRADO hadir dengan set lengkap atas teknik cache yang membantu mempercepat aplikasi Web PRADO untuk mengakomodasi kebutuhan lalu lintas tinggi. Arsitektur modularnya membolehkan para pengembang menyertakan modul cache berbeda untuk keperluan yang berbeda pula. Cache output membebaskan seseorang untuk memilih secara selektif bagian halaman Web yang akan di-cache.
-</p>
-
-<h2 id="204">Bagaimana PRADO Bila Dibandingkan dengan Kerangka Kerja Lain?</h2>
-<p id="20012" class="block-content">
-PRADO sering dikutip sebagai kerangka kerja unik. Keunikannya terutama berada pada paradigma pemrograman berbasis-komponen dan kendali-event yang dicoba dipromosikan. Meskipun paradigma pemrograman ini bukan hal baru dalam pemrograman aplikasi desktop dan bukan hal baru dalam beberapa bahasa pemrograman Web, Barangkali PRADO adalah kerangka kerja PHP pertama yang menghidupkannya.
-</p>
-<p id="20013" class="block-content">
-Kebanyakan kerangka kerja PHP berfokus pada pemisahan penyajian dan logika serta mempromosikan pola desain MVC (model-view-controller). Pada dasarnya PRADO melakukan tujuan yang sama dengan membutuhkan logika disimpan dalam kelas dan penyajian dalam template. PRADO melakukan lebih banyak aspek tidak hanya MVC. Ia mengisi banyak area kosong dalam pemrograman Web PHP dengan paradigma pemrograman berbasis-komponen, kontrol Web yang kaya, dukungan database yang handal, fitur penanganan kesalahan yang fleksibel serta fitur pencatatan, dan masih banyak lagi.
-</p>
-
-<h2 id="4004">Apakah PRADO Cukup Stabil?</h2>
-<p id="20004" class="block-content">
-Ya. PRADO awalnya dirilis pada bulan Agustus 2004. Banyak rangkaian pengujian sudah ditulis dan dilaksanakan secara berkala guna memastikan kualitasnya. Sudah dipakai oleh ribuan pengembang dan banyak aplikasi Web dikembangkan berbasis itu. Bugs dan permintaan fitur diatur melalui sistem TRAC dan kami mempunyai komunitas pengguna besar dan tim pengembangan untuk memastikan semua pertanyaan dijawab dalam model berkala.
-</p>
-
-<h2 id="205">Sejarah PRADO</h2>
-<p id="20014" class="block-content">
-Inspirasi orisinil PRADO berasal dari Apache Tapestry. Selama desain dan implementasi, Saya meminjam ide dari Borland Delphi dan Microsoft ASP.NET. Versi pertama PRADO keluar dalam bulan Juni 2004 dan ditulis dalam PHP 4. Karena adanya kontes kode Zend PHP 5, Saya menulis ulang PRADO dalam PHP 5, yang membuktikan menjadi perpindahan yang bijaksana, terima kasih pada model obyek baru yang disediakan PHP 5. PRADO memenangkan hadiah utama dalam kontes Zend, memperoleh pilihan tertinggi baik dari umum dan panelis juri.
-</p>
-<p id="20015" class="block-content">
-Dalam bulan Agustus 2004, PRADO mulai ditampung pada SourceForge sebagai proyek sumber terbuka. Segera setelah itu, situs proyek <a href="http://www.xisc.com/">xisc.com</a> diumumkan kepada publik. Dengan dukungan fantastis dari tim pengembang PRADO dan pengguna PRADO, PRADO berkembang ke versi 2.0 di pertengahan 2005. Dalam versi ini, Wei Zhuo berkontribusi ke PRADO dengan dukungan I18N dan L10N yang istimewa.
-</p>
-<p id="20016" class="block-content">
-Dalam bulan Mei 2005, kami memutuskan untuk menulis ulang sepenuhnya kerangka kerja PRADO untuk memecahkan beberapa isu dasar dalam versi 2.0 dan untuk menangkap dengan beberapa fitur bagus dalam Microsoft ASP.NET 2.0. Setelah hampir setahun kerja keras dengan lebih dari 50,000 baris kode baru, versi 3.0 akhirnya tersedia pada bulan April 2006.
-</p>
-<p id="20017" class="block-content">
-Mulai dari versi 3.0, usaha signifikan dialokasikan untuk memastikan kualitas dan stabilitas PRADO. Jika kami katakan PRADO v2.x dan v1.x adalah pekerjaan bukti-konsep, kami dapat mengatakan PRADO 3.x telah berkembang menjadi proyek yang layak untuk pengembangan aplikasi bisnis serius.
-</p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/id/CommandLine.page b/demos/quickstart/protected/pages/GettingStarted/id/CommandLine.page
deleted file mode 100755
index 36c29700..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/id/CommandLine.page
+++ /dev/null
@@ -1,93 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="501">Piranti Baris Perintah</h1>
-<p id="70046" class="block-content">File naskah PHP opsional <tt>prado-cli.php</tt> dalam direktori <tt>framework</tt>
-menyediakan piranti baris perintah untuk melakukan berbagai hal membosankan dalam Prado.
-<tt>prado-cli.php</tt> dapat dipakai untuk membuat kerangka proyek Prado, membuat perlengkapan pengujian awal, dan akses ke shell PHP interaktif.
-</p>
-<h2 id="502">Persyaratan</h2>
-<p id="70047" class="block-content">
-Untuk menggunakan piranti baris perintah, Anda perlu memakai prompt perintah Anda, konsol perintah atau terminal. Sebagai tambahan, PHP harus dapat menjalankan naskah PHP dari baris perintah.
-</p>
-
-<h2 id="503">Usage</h2>
-<p id="70048" class="block-content">
-Jika Anda ketik <tt>php path/ke/framework/prado-cli.php</tt>, Anda seharusnya melihat informasi berikut. Alternatifnya, jika Anda tidak pada Windows, Anda dapat mencoba untuk mengubah <tt>prado-cli.php</tt> ke dalam eksecutabel dan menjalankannya seperti sebuah naskah</p>
-<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70006">
-Command line tools for Prado 3.0.5.
-usage: php prado-cli.php action <parameter> [optional]
-example: php prado-cli.php -c mysite
-
-actions:
- -c <directory>
- Creates a Prado project skeleton for the given <directory>.
-
- -t <directory>
- Create test fixtures in the given <directory>.
-
- shell [directory]
- Runs a PHP interactive interpreter. Initializes the Prado
- application in the given [directory].
-</com:TTextHighlighter>
-
-<p id="70049" class="block-content"><b>&lt;parameter&gt;</b> adalah parameter diperlukan dan <b>[optional]</b> adalah parameter opsional. </p>
-
-<h2 id="504">Membuat kerangka proyek Prado baru</h2>
-
-<p id="70050" class="block-content">Untuk membuat kerangka proyek Prado, lakukan yang berikut:</p>
-<ol>
- <li>Ubah direktori di mana Anda ingin membuat kerangka proyek.</li>
- <li>Ketik, <tt>php ../prado/framework/prado-cli.php -c helloworld</tt>, sedangkan
- <tt>helloworld</tt> adalah nama direktori di mana file kerangka proyek ingin Anda buat.</li>
- <li>Ketik, <tt>php ../prado/framework/prado-cli.php <b>-t</b> helloworld</tt> untuk membuat perlengkapan pengujian untuk proyek <tt>helloworld</tt>.</li>
-</ol>
-
-<h2 id="505">Shell Interaktif</h2>
-<p id="70051" class="block-content">
-Shell interaktif membolehkan Anda untuk mengevaluasi pernyataan PHP dari baris perintah.
-Naskah <tt>prado-cli.php</tt> dapat dipakai untuk memulai shell dan mengambil proyek Prado yang sudah ada. Sebagai contoh, mari kita ambil proyek demo blog. Anggap bahwa baris perintah Anda ada dalam direktori distribusi <tt>prado</tt> dan Anda mengetikkannya.
-</p>
-<p id="70052" class="block-content">
-<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70007">
-$: php framework/prado-cli.php shell demos/blog
-</com:TTextHighlighter>
-Output seharusnya
-<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70008">
-Command line tools for Prado 3.0.5.
-** Loaded Prado application in directory "demos\blog\protected".
-PHP-Shell - Version 0.3.1
-(c) 2006, Jan Kneschke <jan@kneschke.de>
-
->> use '?' to open the inline help
-
->>
-</com:TTextHighlighter>
-Selanjutnya kita akan mendapatkan turunan dari aplikasi blog Prado, dan dari turunan itu kita menginginkan sebuah turunan dari modul <tt>'data'</tt>. Catatan bahwa <b>titik koma</b> di akhir baris <b>menindih output</b>.
-
-<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70009">
->> $app = Prado::getApplication();
-
->> $db = $app->getModule('data');
-</com:TTextHighlighter>
-Terakhir, kita ingin menggunakan modul data untuk meng-query sebuah tulisan dengan <tt>ID=1</tt>. Catatan bahwa kita <b>membiarkan titik koma</b> untuk menampilkan hasilnya.
-<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70010">
->> $db->queryPostByID(1)
-</com:TTextHighlighter>
-Di sana seharusnya tidak terjadi kesalahan apapun dan seharusnya Anda melihat yang berikut.
-<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70011">
-PostRecord#1
-(
- [ID] => 1
- [AuthorID] => 1
- [AuthorName] => 'Prado User'
- [CreateTime] => 1148819691
- [ModifyTime] => 0
- [Title] => 'Welcome to Prado Weblog'
- [Content] => 'Congratulations! You have successfully installed Prado Blog --
- a PRADO-driven weblog system. A default administrator account has been created.
- Please login with <b>admin/prado</b> and update your password as soon as possible.'
- [Status] => 0
- [CommentCount] => 0
-)
-</com:TTextHighlighter>
-</p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/id/HelloWorld.page b/demos/quickstart/protected/pages/GettingStarted/id/HelloWorld.page
deleted file mode 100755
index a24b5969..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/id/HelloWorld.page
+++ /dev/null
@@ -1,82 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="401">Aplikasi PRADO Pertama Saya</h1>
-<div id="hello1" class="block-content">
-<p id="50034">
-Dalam seksi ini, kami membimbing Anda melalui pembuatan aplikasi PRADO pertama Anda, aplikasi terkenal "Hello World".
-</p>
-<p id="50035">
-"Hello World" barangkali adalah aplikasi PRADO <i>interaktif</i> paling sederhana yang bisa Anda buat. Ia menampilkan kepada pengguna-akhir sebuah halaman dengan tombol kirim yang judulnya adalah <tt>Click Me</tt>. Setelah pengguna mengklik tombol, judulnya diubah ke <tt>Hello World</tt>.
-</p>
-<p id="50036">
-Ada banyak pendekatan yang dapat mencapai tujuan di atas. Seseorang dapat mengirim halaman ke server, menentukan variabel POST, dan membuat halaman baru dengan judul tombol yang dimutakhirkan. Atau seseorang cukup menggunakan JavaScript untuk memutakhirkan judul tombol setelah event klien <tt>onclick</tt>.
-</p>
-</div>
-<p id="50037" class="block-content">
-PRADO mempromosikan pemrograman Web berbasis-komponen dan kendali-event. Tombol disajikan oleh obyek <tt>TButton</tt>. Ia melapisi judul tombol sebagai properti <tt>Text</tt> dan mengaitkan tindakan klik pengguna dengan event sisi-server <tt>OnClick</tt>. Untuk merespon klik pengguna pada tombol, seseorang cukup perlu menyertakan fungsi ke event <tt>OnClick</tt> tombol. Di dalam fungsi, properti tombol <tt>Text</tt> diubah sebagai "Hello World". Diagram berikut menampilkan urutan di atas,
-<img src="<%~sequence.gif%>" class="figure"/>
-</p>
-<p id="50038" class="block-content">
-Aplikasi PRADO kita terdiri dari tiga file, <tt>index.php</tt>, <tt>Home.page</tt> dan <tt>Home.php</tt>, yang diatur sebagai berikut,
-<img src="<%~directory.gif%>" class="figure"/>
-
-di mana setiap direktori dijelaskan sebagai berikut. Catatan, struktur direktori di atas bisa dikustomisasi. Sebagai contoh, seseorang dapat memindahkan direktori <tt>protected</tt> ke luar direktori Web. Anda akan mengetahui bagaimana melakukan ini setelah Anda melewati tutorial ini.
-</p>
-<ul id="dir-struct" class="block-content">
-<li><tt>assets</tt> - direktori yang menyimpan file pribadi yang dipublikasikan. Lihat seksi <a href="?page=Advanced.Assets">assets</a> untuk lebih jelasnya. Direktori ini harus bisa ditulisi oleh proses server Web.</li>
-<li><tt>protected</tt> - path basis aplikasi yang menyimpan data aplikasi dan file naskah pribadi. Direktori ini harus dikonfigurasi tidak bisa diakses terhadap pengguna-akhir.</li>
-<li><tt>runtime</tt> - path penyimpan runtime aplikasi. Direktori ini dipakai oleh PRADO untuk menyimpan informasi runtime aplikasi, seperti kondisi aplikasi, data di-cache, dll. Direktori ini harus bisa ditulisi oleh proses server Web.</li>
-<li><tt>pages</tt> - path basis yang menyimpan semua halaman PRADO.</li>
-</ul>
-
-<div class="tip">
-<b class="tip">Tip:</b>Anda juga dapat menggunakan <tt>framework/prado-cli.php</tt>
-<a href="?page=GettingStarted.CommandLine">naskah baris perintah</a>
-untuk membuat struktur direktori Prado. Sebagai contoh, ketik perintah
-<tt>php path/to/prado-cli.php -c helloworld</tt> dalam direktori di mana Anda ingin membuat proyek <tt>helloworld</tt>.
-</div>
-
-<p id="50040">
-Ketiga file yang kita pakai dijelaskan sebagai berikut.
-</p>
-<ul id="file-list" class="block-content">
-<li><tt>index.php</tt> - naskah entri dari aplikasi PRADO. File ini dibutuhkan oleh semua aplikasi PRADO dan satu-satunya file naskah yang secara langsung bisa diakses oleh pengguna-akhir. Konten dalam <tt>index.php</tt> sebagian besar terdiri dari tiga baris berikut,
-<com:TTextHighlighter CssClass="source block-content" id="code_50003">
-require_once('path/to/prado.php'); // sertakan naskah prado
-$application=new TApplication; // buat turunan aplikasi PRADO
-$application->run(); // jalankan aplikasi
-</com:TTextHighlighter>
-</li>
-<li><tt>Home.page</tt> - template untuk setiap halaman standar saat pengguna tidak secara eksplisit menetapkan halaman yang diminta. Sebuah template menetapkan penyajian tata letak komponen. Dalam contoh ini, kita gunakan dua komponen, <tt>TForm</tt> dan <tt>TButton</tt>, masing-masing terkait ke tag HTML &lt;form&gt; dan &lt;input&gt;. Template berisi konten berikut,
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_50004">
-<html>
- <body>
- &lt;com:TForm&gt;
- &lt;com:TButton Text="Click me" OnClick="buttonClicked" /&gt;
- &lt;/com:TForm&gt;
- </body>
-</html>
-</com:TTextHighlighter>
-</li>
-<li><tt>Home.php</tt> - Kelas halaman untuk halaman <tt>Home</tt>. Ia terutama berisi metode yang terkait dengan event tombol <tt>OnClick</tt>.
-<com:TTextHighlighter CssClass="source block-content" id="code_50005">
-class Home extends TPage
-{
- public function buttonClicked($sender,$param)
- {
- // $sender refers to the button component
- $sender->Text="Hello World!";
- }
-}
-</com:TTextHighlighter>
-</li>
-</ul>
-<div id="hello-end" class="block-content">
-<p id="50041">
-Aplikasi sekarang siap dan dapat diakses melalui: <tt>http://Web-server-address/helloworld/index.php</tt>, menganggap <tt>helloworld</tt> adalah direktori di bawah Web <tt>DocumentRoot</tt>. Coba untuk mengubah <tt>TButton</tt> dalam <tt>Home.page</tt> ke <tt>TLinkButton</tt> dan lihat apa yang terjadi.
-</p>
-<p id="50042">
-Kode sumber lengkap dari demo ini dapat ditemukan pada rilis PRADO. Anda juga dapat mencoba <a href="http://www.pradosoft.com/demos/helloworld/">demo online</a>.
-</p>
-</div>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/id/Installation.page b/demos/quickstart/protected/pages/GettingStarted/id/Installation.page
deleted file mode 100755
index 1990335b..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/id/Installation.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="301">Menginstalasi PRADO</h1>
-<div id="install-info" class="block-content">
-<p id="30018">
-Jika Anda sedang melihat halaman ini dari server Web Anda, maka Anda sudah selesai dengan instalasi.
-</p>
-<p id="30019">
-Persyaratan minimum PRADO adalah server Web yang mendukung PHP 5. PRADO sudah diuji dengan server Web Apache pada Windows dan Linux. Sangat dimungkinkan ia juga berjalan pada platform lain dengan server Web lain, selama PHP 5 didukung.
-</p>
-</div>
-
-<div id="install-steps" class="block-content">
-<p id="30020">
-Instalasi PRADO sebagian besar menyangkut download dan penguraian.
-</p>
-<ol>
-<li>Pergi ke <a href="http://www.pradosoft.com/">pradosoft.com</a> untuk mendapatkan PRADO versi terbaru.</li>
-<li>Uraikan file rilis PRADO ke direktori yang dapat diakses Web.
-</ol>
-</div>
-<div id="install-after" class="block-content">
-<p id="30021">
-Instalasi PRADO Anda selesai dan dapat mulai bermain dengan demo aplikasi yang disertakan dalam rilis PRADO via URL <tt>http://web-server-address/prado/demos/</tt>. Di sini kami menganggap PRADO diurai ke subdirektori <tt>prado</tt> di bawah <tt>DocumentRoot</tt> pada server Web.
-</p>
-<p id="30022">
-Jika Anda menemukan masalah dengan demo aplikasi, silahkan gunakan naskah pemeriksa persyaratan, yang dapapt diakses melalui <tt>http://web-server-address/prado/requirements/index.php</tt>, untuk terlebih dahulu memeriksa apakah konfigurasi server Anda memenuhi kondisi yang dibutuhkan oleh PRADO.
-</p>
-</div>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/id/Introduction.page b/demos/quickstart/protected/pages/GettingStarted/id/Introduction.page
deleted file mode 100755
index 3aed6f6e..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/id/Introduction.page
+++ /dev/null
@@ -1,62 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="101">Selamat datang di Tutorial Cepat PRADO</h1>
-<div id="intro" class="block-content">
-<p id="10001">
-Tutorial Cepat ini disediakan untuk membantu Anda secara cepat membangun aplikasi Web Anda sendiri berbasis PRADO versi 3.x.
-</p>
-<p id="10001" class="block-content">
-Jika Anda adalah pengguna yang sudah mengenal PRADO 3.x dan ingin mempelajari peningkatan apa yang tersedia pada versi baru, silahkan periksa halaman <a href="?page=GettingStarted.NewFeatures">fitur baru</a>. Sebaliknya, seksi berikut sangat membantu bagi para pemula.
-</p>
-<!--
-<div class="start-page">
- <div class="concepts start-block">
- <h2 id="2001">Bagaimana PRADO Bekerja</h2>
- <p id="10002" class="block-content">Konsep dan fundamental</p>
- <ol>
- <li><a href="#">Membangun aplikasi web dengan PRADO</a></li>
- <li><a href="#">Kontrol dan event Web</a></li>
- <li><a href="#">Memvalidasi input pengguna</a></li>
- <li><a href="#">Menyambung ke database Anda</a></li>
- <li><a href="#">Menampilkan data dari database</a></li>
- </ol>
- </div>
- <div class="examples start-block">
- <h2 id="2002">Contoh dan Demo</h2>
- <ul>
- <li><a href="../helloworld/">Hello World</a></li>
- <li><a href="../currency-convert/">Pengubah Kurs</a></li>
- <li><a href="../address-book/">Buku Alamat</a></li>
- <li><a href="../blog/">Blog</a></li>
- <li><a href="../chat/">AJAX Chat</a></li>
- <li><a href="../time-tracker/">Pelacak Waktu Proyek</a></li>
- </ul>
- <p id="10003" class="block-content">Lebih banyak contoh di <a href="?page=Controls.Standard">Kontrol Standar</a>,
- <a href="?page=Controls.Validation">Memvalidasi Kontrol</a> dan
- <a href="?page=Controls.Data">Kontrol Data</a>.
- </div>
-
- <div class="tutorials start-block">
- <h2 id="2003">Tutorial dan Bantuan</h2>
- <ul>
- <li><a href="?page=GettingStarted.HelloWorld">Hello World secara rinci</a></li>
- <li><a href="?page=Tutorial.CurrencyConverter">Tutorial Pengubah Kurs</a></li>
- <li><a href="?page=Tutorial.AddressBook">Tutorial Buku Alamat</a></li>
- <li><a href="?page=Tutorial.AjaxChat">Tutorial Obrolan AJAX</a></li>
- </ul>
- </div>
-</div>
--->
-
-<p id="10002">
-Anda dapat merujuk ke sumber daya berikut jika Anda mendapatkan tutorial ini tidak memenuhi semua kebutuhan Anda.
-</p>
-</div>
-<ul class="block-content" id="intro-links">
- <li><a href="http://www.pradosoft.com/docs/classdoc/">Kelas PRADO</a></li>
- <li><a href="http://www.pradosoft.com/docs/manual/">Dokumentasi API PRADO</a></li>
- <li><a href="http://www.pradosoft.com/forum/">Forum PRADO</a></li>
- <li><a href="http://www.pradosoft.com/wiki/">Wiki PRADO</a></li>
- <li><a href="http://trac.pradosoft.com/prado/">Trac PRADO</a></li>
-</ul>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/id/NewFeatures.page b/demos/quickstart/protected/pages/GettingStarted/id/NewFeatures.page
deleted file mode 100755
index 6d3ce4f9..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/id/NewFeatures.page
+++ /dev/null
@@ -1,41 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="8005">Fitur Baru</h1>
-
-<p id="40005" class="block-content">
-Halaman ini meringkas fitur-fitur utama baru yang diperkenalkan dalam setiap rilis PRADO.
-</p>
-
-<h2>Version 3.1.1</h2>
-<ul>
-<li>Ditambahkan kontrol baru <a href="?page=Controls.TabPanel">TTabPanel</a> yang menampilkan tampilan tab.</li>
-<li>Ditambahkan kontrol baru <a href="?page=Controls.Keyboard">TKeyboard</a> yang menampilkan keyboard virtual untuk input teks.</li>
-<li>Ditambahkan kontrol baru <a href="?page=Controls.Captcha">TCaptcha</a> yang menampilkan CAPTCHA untuk menjaga spammers dari pendaftaran untuk akun online tertentu. Validator <tt>TCaptchaValidator</tt> terkait juga diimplementasikan.</li>
-<li>Ditambahkan kontrol baru <a href="?page=Controls.Slider">TSlider</a> yang menampilkan sebuah slider yang dapat dipakai untuk input numerik.</li>
-<li>Ditambahkan kontrol baru <a href="?page=Controls.Conditional">TConditional</a> yang menampilkan salah satu dari dua konten secara kondisional.</li>
-<li>Ditambahkan dukungan Oracle DB ke Rekaman Aktif</li>
-<li>Ditambahkan dukungan TDataGrid untuk membolehkan pengelompokan sel yang berurutan dengan isi yang sama.</li>
-<li>Ditambahkan dukungan untuk mengkonfigurasi properti halaman dan aturan otorisasi menggunakan <a href="?page=Configurations.PageConfig">path halaman relatif</a> dalam konfigurasi aplikasi dan halaman. Ditambahkan dukungan untuk membolehkan <a href="?page=Advanced.Auth">otorisasi</a> didasarkan pada alamat remote host.</li>
-<li>Ditambahkan persister kondisi halaman baru <tt>TCachePageStatePersister</tt>. Ia membolehkan kondisi halaman untuk disimpan menggunakan modul cache (misalnya TMemCache, TDbCache, dll.)
-<li>Ditambahkan dukungan untuk <a href="?page=Advanced.Auth">kerangka kerja otentikasi</a> guna mengingat yang sudah masuk.</li>
-<li>Ditambahkan dukungan untuk menampilkan item pertanyaan dalam TDropDownList dan TListBox (sesuatu mirip 'Please select:' sebagai item pertama.)</li>
-<li>Ditambahkan dukungan untuk <a href="?page=Database.ActiveRecord">pemetaan kolom dalam Rekaman Aktif</a>.</li>
-</ul>
-
-<h2 id="8006">Versi 3.1.0</h2>
-<ul>
-<li>Ditambahkan dukungan AJAX. Seluruh array dari kontrol AJAX-enabled, disebut kontrol aktif, diperkenalkan. Penggunaan dari kontrol aktif ini sangat mirip dengan kontrol non-AJAX lainnya, misalnya masukkan dan gunakan. Untuk lebih jelasnya, lihat tutorial mengenai <a href="?page=ActiveControls.Home">kontrol aktif</a>.</li>
-
-<li>Ditambahkan dukungan lengkap database. </li>
-<li>Ditambahkan kontrol, modul dan layanan baru, termasuk <a href="?page=Services.SoapService">TSoapService</a>, <a href="?page=Controls.OutputCache">TOutputCache</a>, TSessionPageStatePersister, TFeedService, TJsonService, cache dependency classes, TXmlTransform.
-</li>
-
-<li>Ditingkatkan beberapa kontrol data dengan penyaji. Penyaji mendhidupkan penggunaan kembali item template yang umumnya ditemukan dalam <tt>TRepeater</tt>, <tt>TDataList</tt> dan <tt>TDataGrid</tt>, dan menjadikan konfigurasi pada kontrol-kontrol ini jauh lebih mudah. Untuk lebih jelasnya mengenai penyaji, lihat tutorial yang dimutakhirkan pada <a href="?page=Controls.Repeater"><tt>TRepeater</tt></a>, <a href="?page=Controls.DataList"><tt>TDataList</tt></a> dan <a href="?page=Controls.DataGrid"><tt>TDataGrid</tt></a>.</li>
-
-<li>Ditambahkan dukungan untuk membolehkan <a href="?page=Configurations.AppConfig">menyertakan konfigurasi aplikasi eksternal</a>. Sintaks template ditingkatkan untuk menjembatani <a href="?page=Configurations.Templates1">konfigurasi subproperti</a>.</li>
-
-<li>Ditambahkan TDbUserManager dan TDbUser untuk menyederhanakan <a href="?page=Advanced.Auth">otentikasi dan otorisasi</a> dengan akun pengguna yang disimpan dalam sebuah database.</li>
-
-</ul>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/id/Upgrading.page b/demos/quickstart/protected/pages/GettingStarted/id/Upgrading.page
deleted file mode 100755
index 744256ce..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/id/Upgrading.page
+++ /dev/null
@@ -1,64 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="501">Meningkatkan dari v2.x dan v1.x</h1>
-
-<div id="from-2-or-1" class="block-content">
-<p id="40023">
-PRADO v3.0 TIDAK kompatibel mundur dengan versi PRADO sebelumnya.
-</p>
-<p id="40024">
-Berita baiknya adalah, properti dan event dari kebanyakan kontrol tetap sama, dan sintaks template kontrol sebagian besar tidak diubah. Oleh karena itu, pengetahuan para pengembang dari versi PRADIO sebelumnya masih berlaku dalam v3.0.
-</p>
-<p id="40025">
-Kami meringkas perubahan paling berarti dalam v3.0 guna membantu para pengembang meningkatkan aplikasi PRADO v2.x dan v1.x lebih mudah, jika diperlukan.
-</p>
-</div>
-
-<h2 id="502">Definisi Komponen</h2>
-<p id="40026" class="block-content">
-Versi 3.0 sepenuhnya telah mengabaikan kebutuhan file spesifikasi komponen. Ia banyak bergantung pada konvensi untuk mendefinisikan properti dan event komponen. Dalam keadaan tertentu, properti didefinisikan oleh keberadaan dari metode pengambil dan/atau metode penyetel, sementara event didefinisikan dengan keberadaan <tt>pada</tt>-metode. Nama properti dan event dalam v3.0 keduanya sensitif-huruf. Sebagai konsekuensinya, para pengembang diperlukan untuk memelihara perubahan tipe saat properti komponen sedang disetel. Sebagai contoh, kode berikut dipakai untuk mendefinisikan metode penyetel untuk properti yang <tt>Dihidupkan</tt> dari <tt>TControl</tt>, yang merupakan tipe <tt>boolean</tt>,
-</p>
-<com:TTextHighlighter Language="php" CssClass="block-content source" ID="code1">
-public function setEnabled($value)
-{
- $value=TPropertyValue::ensureBoolean($value);
- $this->setViewState('Enabled',$value,true);
-}
-</com:TTextHighlighter>
-<p id="40027" class="block-content">
-di mana <tt>TPropertyValue::ensureBoolean()</tt> dipakai untuk memastikan bahwa nilai input adalah boolean. Ini adalah karena ketika properti dikonfigurasi dalam template, nilai string dikirimkan ke penyetel. Dalam versi sebelumnya, PRADO mengetahui tipe properti berdasarkan file spesifikasi komponen dan melakukan konversi tipe bagi Anda.
-</p>
-
-<h2 id="503">Pengontrol Aplikasi</h2>
-<p id="40028" class="block-content">
-Pengontrol aplikasi sekarang menerapkan sebuah arsitektur modular. Modul bisa disertakan dan dikonfigurasi dalam spesifikasi aplikasi. Setiap modul menganggap fungsionalitas tertentu, dan dikoordinasikan bersama oleh <a href="?page=Fundamentals.Applications">masa hidup aplikasi</a>. Konsep modul v2.x diganti dalam v3.0 by <a href="?page=Configurations.PageConfig">direktori halaman</a>. Walhasil, format v3.0 <a href="?page=Configurations.AppConfig">spesifikasi aplikasi</a> juga berbeda dari versi sebelumnya.
-</p>
-
-<h2 id="504">Halaman</h2>
-<p id="40029" class="block-content">
-Halaman pada v3.0 diatur dalam direktori yang bisa dibandingkan ke konsep modul pada v2.x. Halaman diminta menggunakan path kepadanya. Sebagai contoh, URL <tt>index.php?page=Controls.Samples.Sample1</tt> akan dipakai untuk meminta halaman bernama <tt>Sample1</tt> yang disimpan di bawah direktori <tt>[BasePath]/Controls/Samples</tt>, di mana <tt>[BasePath]</tt> merujuk ke akar path halaman. Nama file dari template halaman harus diakhiri dengan <tt>.page</tt>, terutama untuk membedakan template halaman dari template kontrol non-halaman yang nama filenya sama harus diakhiri dengan <tt>.tpl</tt>.
-</p>
-
-<h2 id="505">Hubungan Kontrol</h2>
-<p id="40030" class="block-content">
-Versi 3.0 mendefinsikan kembali hubungan diantara kontrol. Dalam keadaan tertentu, hubungan leluhur-anak sekarang merujuk ke hubungan lampiran antara penyajian kontrol. Dan hubungan wadah-penamaan baru diperkenalkan guna membantu lebih baik mengatur ID kontrol. Untuk lebih jelasnya, lihat seksi <a href="?page=Fundamentals.Controls">controls</a>.
-</p>
-
-<h2 id="506">Sintaks Template</h2>
-<div id="template-syntax" class="block-content">
-<p id="40031">
-Sintaks template kontrol dalam v3.0 tetap mirip dengan versi sebelumnya, dengan banyak peningkatan. Perubahan utama adalah mengenai ekspresi penyatuan data. Dalam v3.0, ini dikerjakan dengan mengikuti,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_40002">
-&lt;com:MyComponent PropertyName=&lt;%# PHP expression %&gt; .../&gt;
-</com:TTextHighlighter>
-<p id="40032">
-Tag ekspresi dan pernyataan juga diubah. Untuk lebih jelasnya, lihat seksi <a href="?page=Configurations.Templates1">definisi template</a>.
-</p>
-</div>
-<h2 id="507">Sintaks Tema</h2>
-<p id="40033" class="block-content">
-Tema dalam v3.0 didefinisikan seperti template kontrol dengan beberapa batasan.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/id/directory.gif b/demos/quickstart/protected/pages/GettingStarted/id/directory.gif
deleted file mode 100755
index e6c4f724..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/id/directory.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/GettingStarted/id/sequence.gif b/demos/quickstart/protected/pages/GettingStarted/id/sequence.gif
deleted file mode 100755
index df5e7cef..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/id/sequence.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/GettingStarted/id/sequence.vsd b/demos/quickstart/protected/pages/GettingStarted/id/sequence.vsd
deleted file mode 100755
index 4129f1fc..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/id/sequence.vsd
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/GettingStarted/ja/AboutPrado.page b/demos/quickstart/protected/pages/GettingStarted/ja/AboutPrado.page
deleted file mode 100755
index 81c1efa0..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/ja/AboutPrado.page
+++ /dev/null
@@ -1,79 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="201">PRADO とは?</h1>
-<p id="20003" class="block-content">
-PRADO はコンポーネントベースかつイベントドリブンなウェブアプリケーションを開発するためのPHP5フレームワークです。「PRADO」の名称は、<b>P</b>HP <b>R</b>apid <b>A</b>pplication <b>D</b>evelopment <b>O</b>bject-oriented の略です。
-</p>
-
-<p id="20004" class="block-content">
-PRADO の第一の目標は、ウェブプログラミングにおけるコードの再利用性を最大限に高めることです。
-ここでの再利用性は、自分自身で開発したコードを再利用することだけではなく、簡単な方法で他人の開発したコードを再利用することも意味しています。これは、「車輪の発明」という無駄な努力に要する時間を節約し開発工数を劇的に減らすためにはとても重要な項目といえます。PRADOではこの目的を実現するためにコンポーネントという概念を導入しています。
-</p>
-<p id="20005" class="block-content">
-上記の目的を達するために、PRADO ではウェブアプリケーション構築のためのコンポーネントの作成方法および使用方法を規定しています。コンポーネントとは、自己充足的かつちょっとしたカスタマイズで再利用が可能なソフトウェアユニットです。新しいコンポーネントは既存のコンポーネントを単純に組み合わせるだけで作成する事ができます。
-</p>
-<p id="20006" class="block-content">
-コンポーネントをインタラクティブに利用できるように、PRADO ではイベントドリブンプログラミングの枠組みを実装しています。ボタンの押下などのユーザーアクションはサーバー側のイベントとして補足されます。メソッドや関数をそれらのイベントに対応付けておくと、イベントに反応するかのように自動的にメソッドや関数が実行されます。POST/GET 変数を取得して処理をする従来のウェブプログラミングと比べて、イベントドリブン型プログラミングは開発者が必要な処理に集中でき、POST/GET の取得などの反復コードも激減する事になります。
-</p>
-<p id="20007" class="block-content">
-PRADO でのアプリケーション開発は、ページにコンポーネントを配置し、プロパティの設定やイベントに反応するメソッドをコーディングすることが主な作業となります。これはデスクトップ GUI アプリケーションを開発するのに使用する Borland Delphi や Microsoft Visual Basic などの RAD ツールと非常に似た作りとなっています。
-</p>
-
-<h2 id="202">なぜ PRADO を使うのですか?</h2>
-<p id="20008" class="block-content">
-PRADO はユニークなフレームワークとして紹介されています。事実、退屈な PHP プログラミングを楽しいものと変えることができるくらいユニークなフレームワークです。以下のリストは、PRADO に関する主な機能となっています。
-</p>
-<ul id="prado-features" class="block-content">
-<li>再利用性 - PRADOコンポーネント規約に則って作成されたコードは再利用性が高いです。開発チームの他の人が開発したコードを再利用することにより、容易にチーム開発での連携を強める事ができます。</li>
-
-<li>イベントドリブン型プログラミング - サーバーイベントとしてユーザーのアクションを取得する事ができるので、開発者はユーザの操作とアプリケーションとの相互作用に今まで以上に焦点を合わせることができます。。</li>
-
-<li>チーム統合 - 画面出力部分とロジック部分が別々に保存されるので、デザイナーと開発者の連携が容易になります。</li>
-<li>便利なウェブコントロール - PRADO ではとても便利なウェブコントロールがいくつも用意されており、インタラクティブなウェブページをほんの数行のコードで作成することができます。例えば DataGrid コントロールを使用すると、ページングやソート、編集、行の削除が可能なテーブルを表示するページをすぐに作成することができます。</li>
-
-<li>バージョン3.1から、PRADOはデータベースアクセス機能をサポートがしています。開発者はビジネスロジックの複雑さに応じて、シンプルな PDO ベースのデータベースアクセス、広く知られているアクティブレコードによるデータベースアクセス、複雑なビジネスオブジェクトとスキーマとのマッピングをサポートした SqlMapによるデータベースアクセスという3つの中から選択する事ができます。はどうでしょう。
-</li>
-
-<li>AJAX サポート - バージョン3.1から、アクティブコントロールが実装されました。開発者は javascript のコードを一行も書くことなく、AJAXを利用する事ができます。アクティブコントロールの利用は、通常のコントロールの利用方法とまったく変わらずに行う事ができます。</li>
-<li>I18N/L10N サポート - PRADO では国際語化ならびにローカライズに対応しています。</li>
-<li>XHTML 対応 - PRADO で生成されたウェブページは XHTML に対応しています。</li>
-<li>既存技術の利用が可能 - PRADO はプレゼンテーション層にターゲットを当てたフレームワークです。ほとんどの既存クラスライブラリやツールをそのまま利用する事ができます。例として、AdoDB や Creole なども PRADO アプリケーションで利用する事ができます。</li>
-<li>その他の機能 - エラーハンドリングとメッセージのロギング機能、キャッシング機構、エラーハンドリングのカスタム、ローカライズ、拡張可能な認証機能、クロスサイトサイトスクリプティング等のセキュリティに対応、クッキー保護等</li>
-</ul>
-
-<h2 id="203">PRADO での開発はどの場面が適していますか?</h2>
-<p id="20009" class="block-content">
-PRADO はインタラクティブなウェブアプリケーションを開発するのにとても適しています。コンテンツ管理システム(CMS)や、Eコマースなどの複雑なシステムを比較的容易に開発する事ができます。PRADO はコンポーネントベースのオブジェクト指向プログラミングですので、企業等でのチーム開発で力を発揮します。
-</p>
-<p id="20011" class="block-content">
-PRADO はアプリケーションの高速化とスケーラビリティを実現するためのキャッシュ機構を実装しています。利用する環境によりキャッシュモジュールを選択し、PRADO アプリケーションで利用する事ができます。出力キャッシュは、レンダリングされたウェブページの一部をキャッシュとして保存しておき、再度レンダリングする際に自動的にキャッシュから取得する機構になっています。
-</p>
-
-<h2 id="204">PRADO は他のフレームワークと比較してどのような点が異なっていますか?</h2>
-<p id="20012" class="block-content">
-PRADO はよくユニークなフレームワークと呼ばれています。コンポーネントベースとイベントドリブンな実装が特にユニークであるとされています。このプログラミング方法はデスクトップアプリケーション開発においては新しくはなく、いくつかのウェブプログラミング言語でも実装されていますが、PHP のフレームワークとしてはおそらく初めて実装されたフレームワークです。
-</p>
-<p id="20013" class="block-content">
-ほとんどの PHP フレームワークでは、画面表示部分とロジック部分を分離することに着目し、そのためにMVCデザインパターンで開発することを推奨しています。一方PRADOでは、テンプレートの中に画面表示部分を、クラスにロジック部分を記述することで、自然に同様の目標を達成する事ができています。そして、MVCでは実現できなかったコンポーネントベースのプログラミングスタイル、豊富なウェブコントロール、強力なデータベースサポート、柔軟なエラー処理とロギング機能などの色々な機能を実装することができています。
-</p>
-
-<h2 id="4004">PRADO は安定していますか?</h2>
-<p id="20004" class="block-content">
-はい。PRADO は2004年8月に初めてリリースされました。品質を確保するために多くのテストプログラムが作成されており、何千人もの開発者が利用しています。このテストプログラムによるテストを重ねて、フレームワークは開発されており、バグや機能追加などは TRAC システムにより管理されています。そして、すべての開発者の疑問にスピーディーに回答できるようにコミュニティも用意してあります。
-</p>
-
-<h2 id="205">PRADO の歴史</h2>
-<p id="20014" class="block-content">
-PRADO のユニークな発想は Apache Tapestry から生まれました。設計と実装には、Borland Delphi と Microsoft ASP.NET から多くのアイディアを借りました。PRADO の最初のバージョンは、2004年6月にできて、PHP4で書かれていましたが、Zend PHP5コンテストに応募するためにPHP5のコードに書き直しました。(PHP5から提供されたオブジェクトモデルはとても助けになりました)そして PRADO は Zend コンテストで観客・審査員の高い評価を得て特賞を勝ち取りました。
-</p>
-<p id="20015" class="block-content">
-2004年8月にオープンソースプロジェクトとして SourceForge にて提供され始め、そのすぐ後にプロジェクトサイト「<a href="http://www.xisc.com/">xisc.com</a>」が公開されました。PRADO 開発チームと PRADO ユーザーのサポートにより、PRADO は2005年中頃にバージョン2.0へとバージョンアップしました。このバージョンでは Wei Zhuo が I18N/L10N サポートの実装で貢献をしました。
-</p>
-<p id="20016" class="block-content">
-2005年5月に、バージョン2.0で見つかった問題点を解決し、さらに Microsoft ASP.NET2.0 で利用可能ないくつかの機能を実装するために PRADO フレームワークを完全に書き直す決定をしました。1年近い期間をかけて、新たに50,000行を超える新しいコードを追加し、2006年4月にバージョン3.0をリリースしました。
-</p>
-<p id="20017" class="block-content">
-バージョン3.0では、PRADO の品質と安定性を確実にするために多くの時間を当てています。
-そして私たちは、PRADO 2.x/1.x においてそのコンセプトの正しさが証明され、PRADO 3.x において重要なビジネスアプリケーションの開発に適したフレームワークにまで成長したと私たちは確信しています。
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/ja/CommandLine.page b/demos/quickstart/protected/pages/GettingStarted/ja/CommandLine.page
deleted file mode 100755
index 5f5dacb9..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/ja/CommandLine.page
+++ /dev/null
@@ -1,106 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="501">Command Line Tool</h1>
-<p id="70046" class="block-content">The optional <tt>prado-cli.php</tt> PHP script file in the <tt>framework</tt>
-directory provides command line tools to perform various tedious takes in Prado.
-The <tt>prado-cli.php</tt> can be used to create Prado project skeletons, create
-initial test fixtures, and access to an interactive PHP shell.
-</p>
-<h2 id="502">Requirements</h2>
-<p id="70047" class="block-content">
-To use the command line tool, you need to use your command prompt, command console
-or terminal. In addition, PHP must be able to execute PHP scripts from
-the command line.
-</p>
-
-<h2 id="503">Usage</h2>
-<p id="70048" class="block-content">
-If you type <tt>php path/to/framework/prado-cli.php</tt>, you should see
-the following information. Alternatively, if you are not on Windows,
-you may try to change the <tt>prado-cli.php</tt> into an executable
-and execute it as a script</p>
-<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70006">
-Command line tools for Prado 3.0.5.
-usage: php prado-cli.php action <parameter> [optional]
-example: php prado-cli.php -c mysite
-
-actions:
- -c <directory>
- Creates a Prado project skeleton for the given <directory>.
-
- -t <directory>
- Create test fixtures in the given <directory>.
-
- shell [directory]
- Runs a PHP interactive interpreter. Initializes the Prado
- application in the given [directory].
-</com:TTextHighlighter>
-
-<p id="70049" class="block-content">The <b>&lt;parameter&gt;</b> are required parameters and <b>[optional]</b>
-are optional parameters. </p>
-
-<h2 id="504">Creating a new Prado project skeleton</h2>
-
-<p id="70050" class="block-content">To create a Prado project skeleton, do the following:</p>
-<ol>
- <li>Change to the directory where you want to create the project skeleton.</li>
- <li>Type, <tt>php ../prado/framework/prado-cli.php -c helloworld</tt>, where
- <tt>helloworld</tt> is the directory name that you want to create the project skeleton files.</li>
- <li>Type, <tt>php ../prado/framework/prado-cli.php <b>-t</b> helloworld</tt> to create
- the test fixtures for the <tt>helloworld</tt> project.</li>
-</ol>
-
-<h2 id="505">Interactive Shell</h2>
-<p id="70051" class="block-content">
-The interactive shell allows you to evaluate PHP statements from the command line.
-The <tt>prado-cli.php</tt> script can be used to start the shell and load an existing
-Prado project. For example, let us load the blog demo project. Assume that your
-command line is in the <tt>prado</tt> distribution directory and you type.
-</p>
-<p id="70052" class="block-content">
-<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70007">
-$: php framework/prado-cli.php shell demos/blog
-</com:TTextHighlighter>
-The output should be
-<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70008">
-Command line tools for Prado 3.0.5.
-** Loaded Prado application in directory "demos\blog\protected".
-PHP-Shell - Version 0.3.1
-(c) 2006, Jan Kneschke <jan@kneschke.de>
-
->> use '?' to open the inline help
-
->>
-</com:TTextHighlighter>
-Then we will get an instance of the Prado blog application, and from
-that instance we want an instance of the <tt>'data'</tt> module. Notice that
-a <b>semicolon</b> at the end of the line <b>suppresses the output</b>.
-
-<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70009">
->> $app = Prado::getApplication();
-
->> $db = $app->getModule('data');
-</com:TTextHighlighter>
-Lastly, we want to use the data module to query for a post with <tt>ID=1</tt>. Notice that
-we <b>leave out the semicolon</b> to show the results.
-<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70010">
->> $db->queryPostByID(1)
-</com:TTextHighlighter>
-There should not be any errors and you should see the following.
-<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70011">
-PostRecord#1
-(
- [ID] => 1
- [AuthorID] => 1
- [AuthorName] => 'Prado User'
- [CreateTime] => 1148819691
- [ModifyTime] => 0
- [Title] => 'Welcome to Prado Weblog'
- [Content] => 'Congratulations! You have successfully installed Prado Blog --
- a PRADO-driven weblog system. A default administrator account has been created.
- Please login with <b>admin/prado</b> and update your password as soon as possible.'
- [Status] => 0
- [CommentCount] => 0
-)
-</com:TTextHighlighter>
-</p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/ja/HelloWorld.page b/demos/quickstart/protected/pages/GettingStarted/ja/HelloWorld.page
deleted file mode 100755
index bc9cf264..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/ja/HelloWorld.page
+++ /dev/null
@@ -1,89 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="401">初めての PRADO アプリケーション</h1>
-<div id="hello1" class="block-content">
-<p id="50034">
-ここでは、初めて PRADO アプリケーションを開発する人のために、定番の "Hello World" アプリケーションを解説します。
-</p>
-<p id="50035">
-"Hello World" を作る事は、最もシンプルで<i>インタラクティブ</i>な PRADO アプリケーションを作る事かもしれません。<br />
-このアプリケーションは、ページに <tt>Click Me</tt> と書いてある送信ボタンを配置してあります。<br />
-ユーザーがボタンをクリックすると、ボタン文字が <tt>Hello World</tt> に変わるというアプリケーションです。
-</p>
-<p id="50036">
-このアプリケーションには、複雑なアプリケーションを作る上で重要なアプローチがいくつかあります。<br />
-ひとつは、ページからサーバーに変数を送信して、その変数を利用して新しいページ(新しいボタン)を生成していることです。<br />
-またもう一つは、Javascript の <tt>onclick</tt> を意識することなく利用し、ボタン文字を変更する事ができるということです。
-</p>
-</div>
-<p id="50037" class="block-content">
-PRADO ではコンポーネントベース、そしてイベントドリブンのウェブプログラミングを構築する事ができます。<br />
-ボタンは、<tt>TButton</tt> オブジェクトを使用します。
-<tt>TButton</tt> では <tt>Text</tt> プロパティがボタン文字となり、ユーザーのクリック動作をサーバーサイドの <tt>OnClick</tt> イベントに対応付けます。<br />
-<tt>Text</tt> プロパティを変更する内容を定義したメソッドを <tt>OnClick</tt> に対応付けるだけで、ボタンクリックのアクションを設定することができます。<br />
-以下にアプリケーションのシーケンスを示します。
-<img src="<%~sequence.gif%>" class="figure"/>
-</p>
-<p id="50038" class="block-content">
-このアプリケーションは3つのファイル <tt>index.php</tt>, <tt>Home.page</tt>, <tt>Home.php</tt> から構成されています。
-<img src="<%~directory.gif%>" class="figure"/>
-
-各ディレクトリ名は開発者によって変更する事が可能です。例えば <tt>protected</tt> ディレクトリはウェブサーバーにより公開されたディレクトリ以外の場所へ移動することができます。このチュートリアルを読む事で、その方法を修得する事ができます。
-</p>
-<ul id="dir-struct" class="block-content">
-<li><tt>assets</tt> - このディレクトリにはコンポーネントからファイルが展開されます。詳細は <a href="?page=Advanced.Assets">assets</a> に書かれていますのでご覧下さい。このディレクトリはウェブサーバープロセスから書き込み可能である事が必要となります。</li>
-<li><tt>protected</tt> - アプリケーションデータと開発したコードが保存されるディレクトリです。このディレクトリは閲覧者からのアクセスを禁止されているべきディレクトリです。</li>
-<li><tt>runtime</tt> - アプリケーション状態などのアプリケーション情報がキャッシュとして保存されるディレクトリです。このディレクトリはウェブサーバープロセスからの書き込みが可能でなければなりません。</li>
-<li><tt>pages</tt> - PRADO ページを保存するディレクトリです。</li>
-</ul>
-
-<div class="tip">
-<b class="tip">Tip:</b>PRADO プロジェクトディレクトリを作成するのに <tt>framework/prado-cli.php</tt>(<a href="?page=GettingStarted.CommandLine">コマンドラインスクリプト</a>)を使用することができます。<br />
-例えば、<tt>helloworld</tt> プロジェクトを作りたいディレクトリへ移動し、<tt>php path/to/prado-cli.php -c helloworld</tt> とコマンド入力する事で、<tt>helloworld</tt> プロジェクトディレクトリを作成する事ができます。
-</div>
-
-<p id="50040">
-アプリケーションの実行に必要な3つのファイルの内容は以下のとおりです。
-</p>
-<ul id="file-list" class="block-content">
-<li><tt>index.php</tt> - PRADO アプリケーションのエントリースクリプトです。このファイルは、PRADO アプリケーションでは必ず必要なファイルであり、唯一エンドユーザーが直接アクセスできるスクリプトファイルです。<tt>index.php</tt> の内容は主に以下の3つの項目からなっています。
-<com:TTextHighlighter CssClass="source block-content" id="code_50003">
-require_once('path/to/prado.php'); // PRADO スクリプトの読み込み
-$application=new TApplication; // PRADO アプリケーションインスタンスの作成
-$application->run(); // アプリケーション実行
-</com:TTextHighlighter>
-</li>
-<li><tt>Home.page</tt> - エンドユーザーが明示的にページを指定しない場合にこのページテンプレートが呼び出されます。テンプレートファイルでは、コンポーネントのレイアウトを定義します。この例では、<tt>TForm</tt> と <tt>TButton</tt> を使用しており、それぞれ&lt;form&gt; &lt;input&gt; のHTMLタグに対応しています。
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_50004">
-<html>
- <body>
- &lt;com:TForm&gt;
- &lt;com:TButton Text="Click me" OnClick="buttonClicked" /&gt;
- &lt;/com:TForm&gt;
- </body>
-</html>
-</com:TTextHighlighter>
-</li>
-<li><tt>Home.php</tt> - <tt>Home</tt> テンプレートファイルのクラス定義ファイルです。ここではボタンの <tt>OnClick</tt> イベント内容の定義を行っています。
-<com:TTextHighlighter CssClass="source block-content" id="code_50005">
-class Home extends TPage
-{
- public function buttonClicked($sender,$param)
- {
- // $sender refers to the button component
- $sender->Text="Hello World!";
- }
-}
-</com:TTextHighlighter>
-</li>
-</ul>
-<div id="hello-end" class="block-content">
-<p id="50041">
-アプリケーションファイルの準備ができたら、次のURLからアクセスすることができます。 <tt>http://Web-server-address/helloworld/index.php</tt><br />
-この例では<tt>ドキュメントルート</tt>配下に <tt>helloworld</tt> というディレクトリを配置しています。<tt>Home.page</tt> テンプレートファイル内の <tt>TButton</tt> を <tt>TLinkButton</tt> へ変更してみてどのようになるかも試してみてください。
-</p>
-<p id="50042">
-PRADO リリースアーカイブファイルにこのデモのソースを格納しています。また、<a href="http://www.pradosoft.com/demos/helloworld/">オンラインデモ</a>にて動作を確認する事ができます。
-</p>
-</div>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/ja/Installation.page b/demos/quickstart/protected/pages/GettingStarted/ja/Installation.page
deleted file mode 100755
index b0c35205..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/ja/Installation.page
+++ /dev/null
@@ -1,33 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="301">PRADO のインストール</h1>
-<div id="install-info" class="block-content">
-<p id="30018">
-ご自分で管理されているサーバーをお持ちであれば、すぐにインストールすることが可能です。
-</p>
-<p id="30019">
-PRADO の最小構成は、サーバーがPHP5をサポートしていることです。<br />
-PRADO は Windows と Linux 両環境の Apache サーバーでテストされています。<br />
-PHP5 がサポートされているのであれば、他の環境でも動作させることができるかもしれません。
-</p>
-</div>
-
-<div id="install-steps" class="block-content">
-<p id="30020">
-PRADO のインストールは、PRADO をダウンロードし解凍することが主な作業となります。
-</p>
-<ol>
-<li><a href="http://www.pradosoft.com/">PRADO公式ページ</a>からPRADOの最新版をダウンロードします。</li>
-<li>ウェブアクセス可能なディレクトリに展開します。</li>
-</ol>
-</div>
-<div id="install-after" class="block-content">
-<p id="30021">
-上記の作業のみでPRADOのインストールが完了します。<br />
-<tt>http://web-server-address/prado/demos/</tt> 以下にPRADOデモアプリケーションが展開されますので、PRADOを利用したアプリケーションの動作を体験する事ができます。<br />
-デモアプリケーションの動作が確認できていれば、<tt>DocumentRoot</tt> 配下に <tt>prado</tt> サブディレクトリが展開されたことになりますので、インストールは正常に完了しております。
-</p>
-<p id="30022">
-もしデモアプリケーションが動作しない等の問題が発生しましたら、サーバー構成がPRADO必要条件を満たしているかどうかを確認する事ができるスクリプト <tt>http://web-server-address/prado/requirements/index.php</tt> が用意されていますので、確認してください。
-</p>
-</div>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/ja/Introduction.page b/demos/quickstart/protected/pages/GettingStarted/ja/Introduction.page
deleted file mode 100755
index 832b5916..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/ja/Introduction.page
+++ /dev/null
@@ -1,62 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="101">ようこそ PRADO クイックスタートチュートリアルへ</h1>
-<div id="intro" class="block-content">
-<p id="10001">
-このチュートリアルはPRADO3.xを使ったアプリケーションをスピーディーに構築するためのものです。
-</p>
-<p id="10001" class="block-content">
-既にPRADO3.xを使用しており新しいバージョンで強化された機能を知りたい方は、まずは<a href="?page=GettingStarted.NewFeatures">新機能ページ</a>をご覧ください。PRADOを使用したことのない方にはこのチュートリアルはとても役立つものですので、ぜひご覧下さい。
-</p>
-<!--
-<div class="start-page">
- <div class="concepts start-block">
- <h2 id="2001">How PRADO Works</h2>
- <p id="10002" class="block-content">Concepts and fundamentals</p>
- <ol>
- <li><a href="#">Building web applications with PRADO</a></li>
- <li><a href="#">Web controls and events</a></li>
- <li><a href="#">Validating user input</a></li>
- <li><a href="#">Connecting to your database</a></li>
- <li><a href="#">Displaying data from database</a></li>
- </ol>
- </div>
- <div class="examples start-block">
- <h2 id="2002">Examples and Demos</h2>
- <ul>
- <li><a href="../helloworld/">Hello World</a></li>
- <li><a href="../currency-convert/">Currency Converter</a></li>
- <li><a href="../address-book/">Address Book</a></li>
- <li><a href="../blog/">Blog</a></li>
- <li><a href="../chat/">AJAX Chat</a></li>
- <li><a href="../time-tracker/">Project Time Tracker</a></li>
- </ul>
- <p id="10003" class="block-content">More examples in <a href="?page=Controls.Standard">Standard Controls</a>,
- <a href="?page=Controls.Validation">Validation Controls</a> and
- <a href="?page=Controls.Data">Data Controls</a>.
- </div>
-
- <div class="tutorials start-block">
- <h2 id="2003">Tutorials and Help</h2>
- <ul>
- <li><a href="?page=GettingStarted.HelloWorld">Hello World in detail</a></li>
- <li><a href="?page=Tutorial.CurrencyConverter">Currency Converter Tutorial</a></li>
- <li><a href="?page=Tutorial.AddressBook">Address Book Tutorial</a></li>
- <li><a href="?page=Tutorial.AjaxChat">AJAX Chat Tutorial</a></li>
- </ul>
- </div>
-</div>
--->
-
-<p id="10002">
-もしこのチュートリアルの内容では不十分と感じたら、以下リンクの各種資料もご覧ください。
-</p>
-</div>
-<ul class="block-content" id="intro-links">
- <li><a href="http://www.pradosoft.com/docs/classdoc/">PRADO Classes</a></li>
- <li><a href="http://www.pradosoft.com/docs/manual/">PRADO APIドキュメント</a></li>
- <li><a href="http://www.pradosoft.com/forum/">PRADO フォーラム</a></li>
- <li><a href="http://www.pradosoft.com/wiki/">PRADO Wiki</a></li>
- <li><a href="http://trac.pradosoft.com/prado/">PRADO Trac</a></li>
-</ul>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/ja/NewFeatures.page b/demos/quickstart/protected/pages/GettingStarted/ja/NewFeatures.page
deleted file mode 100755
index f2fdc618..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/ja/NewFeatures.page
+++ /dev/null
@@ -1,35 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="8005">新機能</h1>
-
-<p id="40005" class="block-content">
-このページは、以下バージョンの PRADO に含まれる新機能の概要を紹介するページです。
-</p>
-
-<h2 id="8006">バージョン 3.1.0</h2>
-<ul>
-
-<li>AJAXサポート<br />
-全てのコントロールにて Ajaxが有効になりました。(アクティブコントロール - active controls)<br />
-アクティブコントロールは、通常のコントロールととても似た作りになっています。<br />
-使用方法の詳細はチュートリアル <a href="?page=ActiveControls.Home">アクティブコントロール</a> をご覧下さい。</li>
-
-<li>データベース連携サポートの完成 </li>
-<li>新しいコントロール/モジュール/サービスを追加<br />
-<a href="?page=Services.SoapService">TSoapService</a>, <a href="?page=Controls.OutputCache">TOutputCache</a>, TSessionPageStatePersister, TFeedService, TJsonService, cache dependency classes, TXmlTransform.
-</li>
-
-<li>データコントロールの描画エンジンを改善<br />
-データコントロールにて、アイテムテンプレートを再利用して描画するよう改善しました。<br />
-<tt>TRepeater</tt>, <tt>TDataList</tt>, <tt>TDataGrid</tt> などのコントロールでの構成がクリアなコードになりました。<br />
-チュートリアルが更新されているので、詳細はチュートリアル <a href="?page=Controls.Repeater"><tt>TRepeater</tt></a>, <a href="?page=Controls.DataList"><tt>TDataList</tt></a>, <a href="?page=Controls.DataGrid"><tt>TDataGrid</tt></a> をご覧下さい。</li>
-
-<li>アプリケーション構造ファイルにて外部ファイル設定をサポート<br />
-<a href="?page=Configurations.AppConfig">アプリケーション構造</a>を外部ファイルにも定義できるようになり、<a href="?page=Configurations.Templates1">テンプレート</a>での定義など柔軟なアプリケーション定義ができるようになりました</li>
-
-<li>TDbUserManager / TDbUser によるシンプルなユーザー認証<br />
-<a href="?page=Advanced.Auth">認証</a>処理時のユーザーアカウントをデータベースに簡単に保存できるようになりました。</li>
-
-</ul>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/ja/Upgrading.page b/demos/quickstart/protected/pages/GettingStarted/ja/Upgrading.page
deleted file mode 100755
index 9ad1f003..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/ja/Upgrading.page
+++ /dev/null
@@ -1,64 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="501">Upgrading from v2.x and v1.x</h1>
-
-<div id="from-2-or-1" class="block-content">
-<p id="40023">
-PRADO v3.0 is NOT backward compatible with earlier versions of PRADO.
-</p>
-<p id="40024">
-A good news is, properties and events of most controls remain intact, and the syntax of control templates remains largely unchanged. Therefore, developers' knowledge of earlier versions of PRADO are still applicable in v3.0.
-</p>
-<p id="40025">
-We summarize in the following the most significant changes in v3.0 to help developers upgrade their v2.x and v1.x PRADO applications more easily, if needed.
-</p>
-</div>
-
-<h2 id="502">Component Definition</h2>
-<p id="40026" class="block-content">
-Version 3.0 has completely discarded the need of component specification files. It relies more on conventions for defining component properties and events. In particular, a property is defined by the existence of a getter method and/or a setter method, while an event is defined by the existence of an <tt>on</tt>-method. Property and event names in v3.0 are both case-insensitive. As a consequence, developers are now required to take care of type conversions when a component property is being set. For example, the following code is used to define the setter method for the <tt>Enabled</tt> property of <tt>TControl</tt>, which is of <tt>boolean</tt> type,
-</p>
-<com:TTextHighlighter Language="php" CssClass="block-content source" ID="code1">
-public function setEnabled($value)
-{
- $value=TPropertyValue::ensureBoolean($value);
- $this->setViewState('Enabled',$value,true);
-}
-</com:TTextHighlighter>
-<p id="40027" class="block-content">
-where <tt>TPropertyValue::ensureBoolean()</tt> is used to ensure that the input value be a boolean. This is because when the property is configured in template, a string value is passed to the setter. In previous versions, PRADO knows the property type based on the component specification files and does the type conversion for you.
-</p>
-
-<h2 id="503">Application Controller</h2>
-<p id="40028" class="block-content">
-Application controller now implements a modular architecture. Modules can be plugged in and configured in application specifications. Each module assumes a particular functionality, and they are coordinated together by the <a href="?page=Fundamentals.Applications">application lifecycle</a>. The concept of v2.x modules is replaced in v3.0 by <a href="?page=Configurations.PageConfig">page directories</a>. As a result, the format of v3.0 <a href="?page=Configurations.AppConfig">application specification</a> is also different from earlier versions.
-</p>
-
-<h2 id="504">Pages</h2>
-<p id="40029" class="block-content">
-Pages in v3.0 are organized in directories which may be compared to the module concept in v2.x. Pages are requested using the path to them. For example, a URL <tt>index.php?page=Controls.Samples.Sample1</tt> would be used to request for a page named <tt>Sample1</tt> stored under the <tt>[BasePath]/Controls/Samples</tt> directory, where <tt>[BasePath]</tt> refers to the root page path. The file name of a page template must be ended with <tt>.page</tt>, mainly to differentiate page templates from non-page control templates whose file names must be ended with <tt>.tpl</tt>.
-</p>
-
-<h2 id="505">Control Relationship</h2>
-<p id="40030" class="block-content">
-Version 3.0 redefines the relationships between controls. In particular, the parent-child relationship now refers to the enclosure relationship between controls' presentation. And a new naming-container relationship is introduced to help better manage control IDs. For more details, see the <a href="?page=Fundamentals.Controls">controls</a> section.
-</p>
-
-<h2 id="506">Template Syntax</h2>
-<div id="template-syntax" class="block-content">
-<p id="40031">
-The syntax of control templates in v3.0 remains similar to those in earlier versions, with many enhancements. A major change is about the databinding expression. In v3.0, this is done by the following,
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_40002">
-&lt;com:MyComponent PropertyName=&lt;%# PHP expression %&gt; .../&gt;
-</com:TTextHighlighter>
-<p id="40032">
-Expression and statement tags are also changed similarly. For more details, see the <a href="?page=Configurations.Templates1">template definition</a> section.
-</p>
-</div>
-<h2 id="507">Theme Syntax</h2>
-<p id="40033" class="block-content">
-Themes in v3.0 are defined like control templates with a few restrictions.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/ja/directory.gif b/demos/quickstart/protected/pages/GettingStarted/ja/directory.gif
deleted file mode 100755
index e6c4f724..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/ja/directory.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/GettingStarted/ja/sequence.gif b/demos/quickstart/protected/pages/GettingStarted/ja/sequence.gif
deleted file mode 100755
index 4207a9bb..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/ja/sequence.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/GettingStarted/pl/AboutPrado.page b/demos/quickstart/protected/pages/GettingStarted/pl/AboutPrado.page
deleted file mode 100755
index 023a9fe1..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/pl/AboutPrado.page
+++ /dev/null
@@ -1,71 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="201">Czym jest PRADO?</h1>
-<p id="20003" class="block-content">
-PRADO jest napisanym w PHP5 frameworkiem dla aplikacji webowych opartym na komponentach oraz programowaniu zdarzeniowym (<i>ang. event-driven programming</i>).
-PRADO z angielskiego oznacza <b>P</b>HP <b>R</b>apid <b>A</b>pplication <b>D</b>evelopment <b>O</b>bject-oriented (przyp. tłum. <i>szybkie tworzenie aplikacji zorientowanych obiektowo w PHP</i>).
-</p>
-<p id="20004" class="block-content">
-Głównym celem PRADO jest zmaksymalizowanie ponownego wykorzystania kodu (ang. <i>reusability</i> w programowaniu webowym. Poprzez ponowne wykorzystanie kodu rozumiemy nie tylko ponowne używanie własnego kodu ale również ponowne używanie w prosty sposób tego kodu przez inne osoby. To drugie jest bardziej ważne, gdyż oszczędza niepotrzebny wysiłek włożony w ponowne odkrywanie koła i może znacznie zmniejszyć czas developmentu. Taka jest właśnie intencja zastosowania koncepcji komponentów.
-</p>
-<p id="20005" class="block-content">
-Aby osiągnąć powyższe cele, PRADO wymaga protokołu pisania i używania komnponentów do konstrukcji aplikacji webowych. Komponent jest jednostką programowania, która jest samowystarczalna i może być użyta ponownie poprzez proste dostosowanie (ang. <i>trivial customization</i>). Nowy komponent może zostać stworzony jako prosta kompozycja istniejących komponentów.
-</p>
-<p id="20006" class="block-content">
-Aby ułatwić interakcję z komponentami, PRADO implementuje paradygmat programowania sterowanego zdarzeniami (ang. <i>event-driven programming paradigm</i>), który umożliwia elastyczne przekierowanie zachowania do komponentu. Czynności użytkownika końcowego, takie jak kliknięcie na przycisk (ang. <i>submit button</i>), są przechwytywane jako zdarzenia serwera. Zarówno metody jak i funkcje mogą być przypisane do tych zdarzeń. W chwili gdy takie zdarzenie występuje są one (metody, funkcje) automatycznie wywoływane w odpowiedzi na zdarzenie. W porównaniu do tradycyjnego programowania, w których developerzy muszą zmagać się z surowymi zmiennymi POST i GET, programowanie zdarzeniowe pomaga developerom lepiej skupić się na niezbędnej logice i poważnie zredukować nispoziomowe powtarzające się kodowanie.
-</p>
-<p id="20007" class="block-content">
-Sumując, tworzenie w PRADO aplikacji sieciowych, polega głównie na tworzeniu instancji różnego typu wbudowanych komponentów, konfigurowania ich, odpowiadania na ich zdarzenia poprzez przypisanie im uchwytów funkcji oraz wkomponowanie ich w stronę aplikacji. Jest to bardzo podobne do narzędzi RAD, takich jak Borland Delphi, czy też Microsoft Visual Basic, które używane są do tworzenia desktopowych aplickacji GUI (ang. <i>develop GUI application</i>).
-</p>
-
-<h2 id="202">Dlaczego PRADO?</h2>
-<p id="20008" class="block-content">
-PRADO jest najczęściej postrzegane jako jedyny w swoim rodzaju framework. W rzeczy samej, jest on tak unikatowy, że może zamienić nużące programowanie w PHP w przyjemną zabawę. Poniższa lista jest krótkim podsumowaniem, głównych możliwości (cech) PRADO.
-</p>
-<ul id="prado-features" class="block-content">
-<li>Ponowne wykorzystanie kodu (ang. <i>Reusability</i>) - kod zgodny z protokołem komponentów PRADO jest wysoce wielokrotnie używalny. To przynosi korzyści zespołom developerów w dłuższej prespektywie czasowej, gdyż mogą oni ponownie używać swoje poprzednio wykonane prace oraz łatwo integrować rozwiązania stron trzecich.</li>
-<li>Programowanie zdarzeniowe - czynności użytkownika końcowego, takie jak kliknięcie na [submit button], są przechwytywane jako zdarzenia serwera, w ten sposób developerzy lepiej skupiają się na działaniach związanych z interakcją użytkownika.</li>
-<li>Grupowa integracja - warstwa prezentacji i logiki są rozdzielone. W aplikacjach PRADO można stosować motywy.</li>
-<li>Wszechstronne kotnrolki webowe - PRADO składa się z zestawu wszechstronnych komponentów mających do czynienia z interfejsem użytkownika. Wysoko interaktywne strony internetowe, mogą być stworzone za pomocą kilku linijek kodu. Na przykład, użycie komponentu datagrid (przyp. tłum. <i>z and. data - dane, grid - siatka</i>), może szybko stworzyć stronę prezentującą tabelę z danymi, krórą można posortować, stronicowac, edytować oraz usuwać wiersze danych.
-<li>Silne wsparcie dla baz danych - od wersji 3.1, PRADO zostało wyposażone w kompletną obsługę baz danych, własnoręcznie napisaną, dzięki czemu odpowiednio współgrającą z pozostałymi elementami frameworku PRADO. W zależności od złożoności obiektów biznesowych, każdy może wybrać pomiędzy używaniem prostego, bazujacego na PDO dostępie do danych lub powszechnie znanym wzorcem Active Record lub też kompletnym schematem mapowania obiektów biznesowych SqlMap.</li>
-<li>Jednolite wsparcie dla AJAXA - Używanie AJAX-a w PRADO nigdy nie było łatwiejsze. Wraz ze swym innowacymi aktywnymi kontrolkami (ang. <i>active controls</i>) wprowadzonymi w wersji 3.1 możesz łatwo napisać aplikację używającą AJAX-a bez napisania nawet linijki kodu w Java Skrypcie. W rzeczy samej, używanie kontrolek aktywnych, prawie nie różni się w użyciu od zwykłych nieAJAX-owych kontrolek webowych.</li>
-<li>Wsparcie dla I18N oraz L10N - PRADO zawiera kompletne wsparcie dla tworzenia aplikacji wielojęzycznych i lokalnych</li>
-<li>Zgodność z XHTML - Strony internetowe generowanie przez PRADO są zgodne z XHTML.</li>
-<li>Przystosowanie istniejących prac - PRADO jest ogólnym frameworkiem skupiającym się na warstwie prezentacyjnej. Nie pozbawia on developerów możliwości używania istniejących bibliotek klas czy też narzędzi. Na przykład, kazdy może używać AdoDB czy też Creole do obsługi baz danych w aplikacjach PRADO.
-ś<li>Pozostałe cechy - Wszechstronna obsługa błędów/wyjątków oraz logowania komunikatów; standardowe keszowanie oraz selektywne kaszowanie danych wyściowych; rozszerzalna oraz lokalizowalna obsługa błędów; elastyczna autentykacja oraz autoryzacja; przedsięwzięcie króków chroniących przed atakami cross-site script (XSS), ochrona plików cookie, itd.</li>
-</ul>
-
-<h2 id="203">Do czego najlepiej nadaje się PRADO?</h2>
-<p id="20009" class="block-content">
-Stosowanie PRADO jest najbardziej wskazane w aplikacjach internetowych, które są wysoce interaktywne z użytkownikiem. Może być wykorzystywane do tworzenia systemów tak prostych jak internetowe blogi po kompleksowe rozwiązania e-commerce. Ponieważ PRADO wspiera programowanie zorietnowane obiektowo (OOP) poprzez własną metodologię, bazująca na komponentach, pasuje ono ekstremalnie dobrze do pracy grupowej oraz tworzenia aplikacji klasy enterprise (ang. <i>enterprise development</i>).
-</p>
-<p id="20011" class="block-content">
-PRADO przychodzi z kompletnym zestawem technik keszowania, które pomagają przyśpieszyć aplikacje internetowe PRADO, by móc zastosować je do aplikacji o wysokim ruchu. Jego modularna architektura umożliwia developerom używanie oraz podłączanie różnych modułów keszujących w zależności od potrzeb. Keszowanie wyjścia umożliwia każdemu selektywny wybór keszowania części wyświetlanej strony.
-</p>
-
-<h2 id="204">Jak PRADO reprezentuje się na tle innych frameworków?</h2>
-<p id="20012" class="block-content">
-PRADO często jest postrzegane jako jedyny w swoim rodzaju framework. Jego unikatowość polega głównie na programowaniu bazującym na komponentach oraz paradygmacie programowania sterowanego zdarzeniami, które stara się promować. Chociaż ten paradygmat nie jest nowością w aplikacjach desktopowych oraz nie jest nowy w kilku językach programowania webowego, PRADO jest prawdopodobnie pierwszym frameworkiem umożliwiającym go.
-</p>
-<p id="20013" class="block-content">
-Większość frameworków PHP skupia się głównie na odseparowaniu warstwy prezentacji i logiki promując wzorzec programowania MVC (przyp. tłum. od pierwszych liter <i>model</i> - model <i>view</i> - widok <i>controler</i> - kontroler). PRADO osiąga te same cele naturalnie poprzez potrzebę prechowywania logiki w klasach a prezetnacji w szablonach (ang. <i>templates</i>). PRADO robi dużo więcej w sprawach innych niż MVC. Wypełnia wiele białych plam w programowaniu webowym w PHP, swoim bazującym na komponentach paradygmacie programowania, jego bogatym zestawem kontrolek webowych, jego wszechstronną obsługą baz danych, jego elastyczną obsługą błędów oraz ich logowania oraz wiele wiele innych.
-</p>
-
-<h2 id="4004">Czy PRADO jest wystarczająco stabilne?</h2>
-<p id="20004" class="block-content">
-Tak. PRADO zostało pierwszy raz opublikowane w sierpniu 2004 roku. Wiele zestawów testów zostało od tego czasu napisanych oraz często przeprowadzanych by upewnić sie o jakości PRADO. Framework był używany przez tysiące użytkowników oraz developerów a wiele aplikacji internetowych powstało w oparciu o niego. Bugi oraz żądania rozszerzeń są zarządzane poprzez system TRAC, posiadamy także wspaniałą społeczność użytkowników oraz zespół developerów by być pewnym, że żadne pytanie nie pozostanie bez odpowiedzi.
-</p>
-
-<h2 id="205">Historia PRADO</h2>
-<p id="20014" class="block-content">
-Pierwotna inspiracja PRADO pochodziła od Apache Taperstry. W trakcie projektowania i implementacji, zapożyczyłem wiele idei z Borland Delphi oraz Microsodt ASP.NET. Pierwsza wersja PRADO ujrzała świat w czerwcu 2004 roku i została napisana w PHP4. Zachęcony konkursem kodowania w PHP5 Zenda, przepisałem PRADO do PHP5, co okazało się mądrym posunięciem, dzięki nowemu modelowi obiektowemu dostarczonemu przez PHP5. PRADO zdobyło główną nagrodę w konkrusie Zenda, uzyskując najwięcej głosów zarówno wsród publiczności jak i wśród sędziów.
-</p>
-<p id="20015" class="block-content">
-W sierpniu 2004, PRADO zaczęło być hostowane przez SourceForge jako projekt open source. Wkrótce, stona projektu <a href="http://www.xisc.com/">xisc.com</a> została zaprezentowana publicznie. Wraz z fantastycznym wparciem zespołu developerów PRADO oraz jego użytkowników, PRADO rozwinęło się do wersji 2.0 w połówie 2005 roku. W tej wersji, Wei Zhuo dołączył do PRADO ze znakomita opbsługą dla I18N oraz L10N.
-</p>
-<p id="20016" class="block-content">
-W maju 2005, zdecydowaliśmy się całkowicie przepisać framewrork PRADO, by rozwiązać kilka kluczowych kwestii z wersji 2.0 oraz by porwać kilka fajnych możliwości dostępncyh w Microsoft ASP.NET. Po około roku ciężkiej pracy z ponad 50.000 liniami nowego kodu, wersja 3.0 została w końcu udostępniona w kwietniu 2006r.
-</p>
-<p id="20017" class="block-content">
-Poczynając od wersji 3.0, znaczny nakład jest kładziony by zapewnić jakość oraz stabilność PRADO. Jeśli powiemy, że PRADO w wersjach 2.x oraz 1.x były dziełem potwierdzającym koncept (ang. <i>proof-of-concept work</i>), możemy powiedzieć, że PRADO 3.X wyrosło na projekt, który jest odpowiedni dla tworzenia plikacji biznesowych.
-</p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/pl/CommandLine.page b/demos/quickstart/protected/pages/GettingStarted/pl/CommandLine.page
deleted file mode 100755
index f0edb39a..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/pl/CommandLine.page
+++ /dev/null
@@ -1,101 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="501">Narzędzie linii poleceń</h1>
-<p id="70046" class="block-content">Opcjonalny plik skryptu PHP <tt>prado-cli.php</tt> PHP w folderze <tt>framework</tt>
-dostarcza narzędzia linii poleceń do wykonywania różnych monotonnych czynności w PRADO.
-<tt>Prado-cli.php</tt> może zostać użyte do stworzenia szkieletu projektu PRADO, zainicjowania testów oraz uzyskania dostępu do
-interaktywnej powłoki PHP.
-</p>
-<h2 id="502">Wymagania</h2>
-<p id="70047" class="block-content">
-Aby używać narzędzia linii poleceń powinieneś użyć terminala, consoli komend lub opcji uruchom. Dodatkowo PHP musi mieć możliwość
-wykonywania skryptów PHP z linii poleceń.
-</p>
-
-<h2 id="503">Używanie</h2>
-<p id="70048" class="block-content">
-Wpisując <tt>php ścieżka/do/katalogu/framework/prado-cli.php</tt>, powinieneć zobaczyć następujace informacje.
-Alternatywnie, jeśli nie używasz Windowsa możesz spróbować zamienić <tt>prado-cli.php</tt> na plik wykonywalny
-i wywołać go jako skrypt.</p>
-<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70006">
-Command line tools for Prado 3.0.5.
-usage: php prado-cli.php action <parameter> [optional]
-example: php prado-cli.php -c mysite
-
-actions:
- -c <directory>
- Creates a Prado project skeleton for the given <directory>.
-
- -t <directory>
- Create test fixtures in the given <directory>.
-
- shell [directory]
- Runs a PHP interactive interpreter. Initializes the Prado
- application in the given [directory].
-</com:TTextHighlighter>
-
-<p id="70049" class="block-content"><b>&lt;parameter&gt;</b> są wymaganymi parametrami a <b>[optional]</b>
-są parametrami opcjonalnymi. </p>
-
-<h2 id="504">Tworzenie szkieletu nowego projektu PRADO</h2>
-
-<p id="70050" class="block-content">Aby stworzyć szkielekt projektu Prado, wykonaj następujące czynności:</p>
-<ol>
- <li>Przejdź do folderu gdzie chcesz utworzyć szkielet projektu.</li>
- <li>Wpisz <tt>php ../prado/framework/prado-cli.php -c helloworld</tt>, gdzie
- <tt>helloworld</tt> jest nazwą katalogu w której chcesz utworzyć pliki należace do szkieletu projektu.</li>
- <li>Wpisz <tt>php ../prado/framework/prado-cli.php <b>-t</b> helloworld</tt> aby stworzyć wbudowany test dla projektu <tt>helloworld</tt> (Witaj Świecie).</li>
-</ol>
-
-<h2 id="505">Interaktywna powłoka</h2>
-<p id="70051" class="block-content">
-Interaktywna powłoka umożliwia Ci wykonywanie wyrażeń PHP z linii poleceń.
-Skrypt <tt>prado-cli.php</tt> może zostać użyty do uruchomienia powłoki i załadowania istniejącego projektu Prado.
-Dla przykładu załadujmy projekt demo blogu. Zakładając, że twoja linia poleceń jest w katalogu żródłowym <tt>prado</tt> i wpiszesz...
-</p>
-<p id="70052" class="block-content">
-<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70007">
-$: php framework/prado-cli.php shell demos/blog
-</com:TTextHighlighter>
-jako rezultat powinieneś ujrzeć
-<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70008">
-Command line tools for Prado 3.0.5.
-** Loaded Prado application in directory "demos\blog\protected".
-PHP-Shell - Version 0.3.1
-(c) 2006, Jan Kneschke <jan@kneschke.de>
-
->> use '?' to open the inline help
-
->>
-</com:TTextHighlighter>
-Następnie pobierzemy instancję aplikacji blogu Prado a następnie z niej instancję modułu
- <tt>'data'</tt>. Zauważ, że <b>średnik</b> na koncu linii <b>wycisza wyjście</b>.
-
-<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70009">
->> $app = Prado::getApplication();
-
->> $db = $app->getModule('data');
-</com:TTextHighlighter>
-Na koniec będziemy chcieli użyć wybranego modułu aby zapytać o post o <tt>ID=1</tt>. Zauważ, że
-<b>pomijamy średnik</b> aby zobaczyć rezultat.
-<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70010">
->> $db->queryPostByID(1)
-</com:TTextHighlighter>
-Nie powinien wystąpić żaden błąd i powinieneś zobaczyć następujący reziltat
-<com:TTextHighlighter Language="cli" CssClass="source block-content cli" id="code_70011">
-PostRecord#1
-(
- [ID] => 1
- [AuthorID] => 1
- [AuthorName] => 'Prado User'
- [CreateTime] => 1148819691
- [ModifyTime] => 0
- [Title] => 'Welcome to Prado Weblog'
- [Content] => 'Congratulations! You have successfully installed Prado Blog --
- a PRADO-driven weblog system. A default administrator account has been created.
- Please login with <b>admin/prado</b> and update your password as soon as possible.'
- [Status] => 0
- [CommentCount] => 0
-)
-</com:TTextHighlighter>
-</p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/pl/HelloWorld.page b/demos/quickstart/protected/pages/GettingStarted/pl/HelloWorld.page
deleted file mode 100755
index c4a23059..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/pl/HelloWorld.page
+++ /dev/null
@@ -1,82 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="401">Moja pierwsza aplikacja w PRADO</h1>
-<div id="hello1" class="block-content">
-<p id="50034">
-W tej sekcji, przeprowadzimy Cię przez proces tworzenia Twojej pierwszej aplikcaji w PRADO, słynną aplikację "Witaj świecie" (ang. "Hello World").
-</p>
-<p id="50035">
-"Witaj świecie" prawdopodobnie jest najprostszą <i>interaktywną</i> aplikacją w PRADO, którą możesz stworzyć. Wyświetla ona użytkownikowu końcowemu stronę z przyciskiem, którego napis to <tt>Kliknij mnie</tt> (ang. Click Me). Po tym jak użytkownik kliknie na przycisk, jego napis zmienia się na <tt>Witaj świecie</tt>.
-</p>
-<p id="50036">
-Jest wiele dróg aby osiągnąć ten cel. Można przesłać (ang. <i>submit</i>) stronę do serwera, sprawdzić zmienną POST i wygenerować nową stronę z przyciskiem ze zaktualizowanym napisem. Można też przez proste użycie JavaScript zaktualizować napis podczas zdarzenia <tt>OnClick</tt> po stronie klienta.
-</p>
-</div>
-<p id="50037" class="block-content">
-PRADO promuje programowanie sterowane zdarzeniami i bazujące na komponentach. Przycisk jest reprezentowany przez obiekt <tt>TButton</tt>. Hermetyzuje on napis na przycisku jako właściwość <tt>Text</tt> przycisku oraz wiąże akcję naciśnięcia przez użytkownika przycisku ze zdarzeniem po stronie serwera <tt>OnClick</tt>. Aby odpowiedzieć na naciśnięcie przez użytkownika przycisku, należy po prostu przypisać funkcję do zdarzenia <tt>OnClick</tt> przycisku. Wewnątrz funkcji, właściwość <tt>Text</tt> przycisku jest zmodyfikowana na "Witaj świecie". Poniższy diagram pokazuje powyższą sekwencję.
-<img src="<%~sequence.gif%>" class="figure"/>
-</p>
-<p id="50038" class="block-content">
-Nasza aplikacja PRADO składa się z trzech plików <tt>index.php</tt>, <tt>Home.page</tt> and <tt>Home.php</tt>, które są zorganizowane w poniższy sposób,
-<img src="<%~directory.gif%>" class="figure"/>
-
-gdzie każdy katalog należy rozumieć następująco. Zauważ, że powyższa struktura katalogów jest rozszerzalna. Na przykład, można przenieść katalog <tt>protected</tt> poza katalog WWW. Będziesz wiedział jak tego dokonać, jeśli przejdziesz przez ten przewodnik.
-</p>
-<ul id="dir-struct" class="block-content">
-<li><tt>assets</tt> - katalog zawierający upublicznione prywatne pliki. Zobacz sekcję <a href="?page=Advanced.Assets">assets</a> by dowiedzieć się więcej. Katalog ten musi być zapisywalny przez proces serwera.</li>
-<li><tt>protected</tt> - podstawowa ścieżka aplikacji zawierająca dane aplikacji oraz prywatne skrypty plików. Katalog ten powinien być skonfigurowany jako niedostępny dla użytkownika końcowego.</li>
-<li><tt>runtime</tt> - składująca uruchomieniowa ścieżka aplikacji (ang. <i>application runtime storage path</i>) przechowuje informacje rurchomieniowe aplikacji, takie jak stan aplikacji, keszowane dane, itp. Katalog ten musi być zapisywalny przez proces serwera.</li>
-<li><tt>pages</tt> - podstawowa ścieżka przechowująca wszystkie strony PRADO.</li>
-</ul>
-
-<div class="tip">
-<b class="tip">Podpowiedż:</b>Możesz również użyć <tt>framework/prado-cli.php</tt>
-<a href="?page=GettingStarted.CommandLine">narzędzia linii poleceń</a>
-aby stworzyć strukturę katalogów dla projektu w PRADO. Na przykład, wpisz komendę
-<tt>php ścieżka/do/prado-cli.php -c helloworld</tt> w katalogu gdzie chcesz stworzyć projekt <tt>helloworld</tt> (witaj świecie).
-</div>
-
-<p id="50040">
-Trzy pliki, krórych potrzebujemy, kolejno oznaczają
-</p>
-<ul id="file-list" class="block-content">
-<li><tt>index.php</tt> - skrypt wejściowy aplikacji PRADO. Ten plik jest wymagany prez wszyskie aplikacje PRADO i jest jedynym skryptem, który jest bezpośrednio dostępny przez użytkownika końcowego. Zawartość <tt>index.php</tt> przeważnie zawiera następujące trzy linie,
-<com:TTextHighlighter CssClass="source block-content" id="code_50003">
-require_once('path/to/prado.php'); // załącz skrypt PRADO
-$application=new TApplication; // utwórz instancję aplikacji PRADO
-$application->run(); // uruchom aplikację
-</com:TTextHighlighter>
-</li>
-<li><tt>Home.page</tt> - szablon dla domyślnej strony, zwracany gdy użytkownik nie wybierze jawnie żadnej strony. Szablon określa warstwę prezentacji komponentów. W tym przykładzie, używamy dwóch komponentów, <tt>TForm</tt> oraz <tt>TButton</tt>, które odpowiadają odpowiednio znacznikom HTML &lt;form&gt; oraz &lt;input&gt;. Szablon posiada następującą treść
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_50004">
-<html>
- <body>
- &lt;com:TForm&gt;
- &lt;com:TButton Text="Kliknij mnie" OnClick="buttonClicked" /&gt;
- &lt;/com:TForm&gt;
- </body>
-</html>
-</com:TTextHighlighter>
-</li>
-<li><tt>Home.php</tt> - klasa strony dla strony głównej <tt>Home</tt>. Zawieta przeważnie metody odpowiadające na zdarzenia<tt>OnClick</tt> przycisku.
-<com:TTextHighlighter CssClass="source block-content" id="code_50005">
-class Home extends TPage
-{
- public function buttonClicked($sender,$param)
- {
- // $sender wskazuje na komponent przycisku
- $sender->Text="Witaj świecie!";
- }
-}
-</com:TTextHighlighter>
-</li>
-</ul>
-<div id="hello-end" class="block-content">
-<p id="50041">
-Aplikacja jest teraz gotowa i jest dostępna poprzez adres <tt>http://adres-serwera/helloworld/index.php</tt>, zakładając, że <tt>helloworld</tt> znajduje się bezpośrenio w <tt>KataloguGłównymDokumentó</tt> serwera (ang. <i>DocumentRoot</i>). Spróbuj zmienić <tt>TButton</tt> w <tt>Home.page</tt> na <tt>TLinkButton</tt> i zobacz co się stanie.
-</p>
-<p id="50042">
-Kompletne źródło kodu dla tego demo można znaleźć w wydaniu PRADO. Możesz również spróbować <a href="http://www.pradosoft.com/demos/helloworld/">demo online</a>.
-</p>
-</div>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/pl/Installation.page b/demos/quickstart/protected/pages/GettingStarted/pl/Installation.page
deleted file mode 100755
index f25a4cc2..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/pl/Installation.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="301">Instalacja PRADO</h1>
-<div id="install-info" class="block-content">
-<p id="30018">
-Jeśli widzisz tą stronę z poziomu własnego serwera, zakończyłeś właśnie instalację.
-</p>
-<p id="30019">
-Minimalne wymagania PRADO to serwer internetowy wspierający PHP5. PRADO zostało przetestowane na serwerze Apache na Windowsie oraz Linuxie. Jest wielce prawdopodobne, że może również działać na innych platformach z innymi serwerami internetowymi dopóki wspierają one PHP5.
-</p>
-</div>
-
-<div id="install-steps" class="block-content">
-<p id="30020">
-Instalacja PRADO składa się głównie z jego pobrania oraz rozpakowania.
-</p>
-<ol>
-<li>Przejdź do strony <a href="http://www.pradosoft.com/">pradosoft.com</a> aby pobrać ostatnią wersję PRADO.</li>
-<li>Rozpakuj plik PRADO zawierający jego ostatnie wydanie do katalogu znajdującego się na serwerze.
-</ol>
-</div>
-<div id="install-after" class="block-content">
-<p id="30021">
-Twoja instalacja PRADO jest zakończona i możesz zacząć zabawę z aplikacjami demo zawartymi w PRADO znajdującymi się pod adresem <tt>http://adres-serwera/prado/demos/</tt>. Tutaj zakładamy, że PRADO jest rozpakowane do katalogu <tt>prado</tt> w <tt>katalogu głównym</tt> serwera.
-</p>
-<p id="30022">
-Jeśli spotkasz się z jakimkolwiek problemem w aplikacjach demo, proszę użyj skryptu sprawdzającego wymagania do korzystania z PRADO dostępnego poprzez <tt>http://adres-serwera/prado/requirements/index.php</tt>, aby najpierw sprawdzić czy Twoja konfiguracja serwera spełnia wszystkie warunki wymagane przez PRADO.
-</p>
-</div>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/pl/Introduction.page b/demos/quickstart/protected/pages/GettingStarted/pl/Introduction.page
deleted file mode 100755
index d8bd6381..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/pl/Introduction.page
+++ /dev/null
@@ -1,23 +0,0 @@
-<com:TContent ID="body" >
-<h1 id="101">Witamy w przewodniku SzybkiStart z PRADO</h1>
-<div id="intro" class="block-content">
-<p id="10001">
-Niniejszy przewodnik powstał by pomóc Tobie w szybkim rozpoczęciu budowania Twojej własnej aplikacji internetowej bazującej na PRADO w wersji 3.x
-</p>
-<p id="10001" class="block-content">
-Jeśli jesteś już użytkownikiem PRADO #.x i chciałbyś dowiedzieć się jakie rozszerzenia są dostępne dla każdej nowej wersji, proszę sprawdź <a href="?page=GettingStarted.NewFeatures">nowe właściwości</a>.
-Następujące sekcje są pomocne dla początkujących.
-</p>
-<p id="10002">
-Możesz odwoływać się do następujących zasobów jeśli czujesz, że ten przewodnik nie spełnia wszystkich twoich oczekiwań.
-</p>
-</div>
-<ul class="block-content" id="intro-links">
- <li><a href="http://www.pradosoft.com/docs/classdoc/">Klasy PRADO</a></li>
- <li><a href="http://www.pradosoft.com/docs/manual/">Dokumentacja API PRADO</a></li>
- <li><a href="http://www.pradosoft.com/forum/">Forum PRADO</a></li>
- <li><a href="http://www.pradosoft.com/wiki/">PRADO Wiki</a></li>
- <li><a href="http://trac.pradosoft.com/prado/">PRADO Trac</a></li>
-</ul>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/pl/NewFeatures.page b/demos/quickstart/protected/pages/GettingStarted/pl/NewFeatures.page
deleted file mode 100755
index c5de2f02..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/pl/NewFeatures.page
+++ /dev/null
@@ -1,33 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="8005">Nowe możliwości</h1>
-
-<p id="40005" class="block-content">
-Poniższa strona podsumowuje główne możliwości, które zostały wprowadzone w każnym z wydań PRADO.
-</p>
-
-<h2>Wersja 3.1.1</h2>
-<ul>
-<li>Dodano nową kontrolkę <a href="?page=Controls.TabPanel">TTabPanel</a> wyświetlającą zawartość widoków w zakładkach.</li>
-<li>Dodano nową kontrolkę <a href="?page=Controls.Keyboard">TKeyboard</a> wyświetlającą wirtualną klawiaturę do wprowadzania tekstu.</li>
-<li>Dodano nową kontrolkę <a href="?page=Controls.Captcha">TCaptcha</a> wyświetlającą CAPTCHA uniemożliwiającą spamerom logowanie się do kont online. Powiązany Validator <tt>TCaptchaValidator</tt> został również zaimplementowany.</li>
-<li>Dodano nową kontrolkę <a href="?page=Controls.Slider">TSlider</a> wyświetlającą suwak do wprowadzania wartości numerycznych.</li>
-<li>Dodano nową kontrolkę <a href="?page=Controls.Conditional">TConditional</a> wyświetlającą jedną z dwóch rodzajów zawartości w zależności od spełnionego (bądź nie) warunku.</li>
-<li>Dodano wsparcie dla baz Oracle dla Rekordu Aktywnego (Active Record).</li>
-<li>Dodano wsparcie dla TDataGrid umożliwiające grupowanie kolejnych komórek z tą samą zawartością.</li>
-<li>Dodanow możliwość konfiguracji właściwości strony oraz reguł autoryzacji za pomocą <a href="?page=Configurations.PageConfig">relacyjnych ścieżek strony</a> w aplikacji oraz konfiguracji strony. Dodano możliwość <a href="?page=Advanced.Auth">autoryzacji</a> bazującej na zewnętrzym adresie hosta.</li>
-<li>Dodano nowy utrzymywacz (ang. persister) stanu strony <tt>TCachePageStatePersister</tt> umożliwiający przetrzymywanie stanu strony za pomocą modułów cache (np. TMemCache, TDbCache, itd.)
-<li>Dodano wsparcie dla <a href="?page=Advanced.Auth">frameworku authentykacji</a> umożliwiającą zapamiętanie logowania.</li>
-<li>Dodano możliwość wyświetlenia wskazówki w TDropDownList oraz TListBox (coś na wzów 'Proszę wybrać :' jako pierwszą pozycję w liście.)</li>
-<li>Dodanow wsparcie dla <a href="?page=Database.ActiveRecord">mapowania kolumn w Rekordzie Aktywnym (Active Record)</a>.</li>
-</ul>
-
-<h2 id="8006">wersja 3.1.0</h2>
-<ul>
-<li>Dodano jednolite/spójne wsparcie dla AJAX-a. Wprowadzono cały zestaw kontrolek AJAX-owych, nazywanych kontrolkami aktywnymi (ang. <i>active controls</i>).Uzywanie tych kontrolek jest bardzo podobne do swoich nieAJAX-owych odpowiedników, np. wstaw w kod i korzystaj. Aby uzyskać więcej szczegółów, zobacz przewodnik o <a href="?page=ActiveControls.Home">aktywnych kotnrolkach</a>.</li>
-<li>Dodano kompletną obsługę baz danych. </li>
-<li>Dodano nowe kontrolki, moduły i serwisy, w tym <a href="?page=Services.SoapService">TSoapService</a>, <a href="?page=Controls.OutputCache">TOutputCache</a>, TSessionPageStatePersister, TFeedService, TJsonService, klasy powiązane z cachem (ang. <i>cache dependency classes</i>), TXmlTransform.</li>
-<li>Rozszerzono część kontrolek danych o "odtwóców" (ang. <i>renderers</i>). "Odtwórcy" umożliwiają ponowne używanie szablonów pozycji (ang. <i>item templates</i>), które powszechnie można znaleźć w <tt>TRepeater</tt>, <tt>TDataList</tt> i <tt>TDataGrid</tt>, przez co czynią konfigurację tych kontrolek bardziej przejrzystą. Aby uzyskać więcej szczegółów o "odtwórcach" zobacz zaktualizowany przewodnik <a href="?page=Controls.Repeater"><tt>TRepeater</tt></a>, <a href="?page=Controls.DataList"><tt>TDataList</tt></a> oraz <a href="?page=Controls.DataGrid"><tt>TDataGrid</tt></a>.</li>
-<li>Dodano usługę umożliwiającą <a href="?page=Configurations.AppConfig">inkludowanie zewnętrznej konfiguracji serwera</a>. Rozszerzono składnię szablonów ułatwiającą <a href="?page=Configurations.Templates1">konfigurację subwłaściwości</a> (ang. <i>subproperties</i>).</li>
-</ul>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/pl/Upgrading.page b/demos/quickstart/protected/pages/GettingStarted/pl/Upgrading.page
deleted file mode 100755
index deb726bb..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/pl/Upgrading.page
+++ /dev/null
@@ -1,64 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="501">Aktualizowanie z wersji 2.x i 1.x</h1>
-
-<div id="from-2-or-1" class="block-content">
-<p id="40023">
-PRADO 3.0 nie jest kompatybilne wstecz z wcześniejszymi wersjalmi PRADO.
-</p>
-<p id="40024">
-Dobrą wiadomością jest, że własciwości oraz zdarzenia większości kontrolek pozostają niezmienione a składnia szablonów kontrolek pozostaje w dużej mierze niezmieniona. Dlatego więc, wiedza develoiperów dotycząca wcześniejszych wersji PRADO wciąż znajduje zastosowanie w wersji 3.0.
-</p>
-<p id="40025">
-Kolejno podsumujemu najbardziej znaczące zmiany w wersji 3.0 aby pomóc developerom aktualizację ich aplikacji PRADO z wersji 2.x oraz 1.x jeśli wystąpi taka potrzeba.
-</p>
-</div>
-
-<h2 id="502">Definicja komponentu (<i>Component definition</i>)</h2>
-<p id="40026" class="block-content">
-Wersja 3.0 całkowicie zarzuciła potrzebę występowania pliku specyfikującego komponent. Polega ona obecnie bardziej na konwencji definiowania właściwości komponentu i jego zdarzeń. Uszczegóławiając, właściwość (ang. <i>property</i>) jest definiowana poprzez istnienie metod: getterów i/lub setterów (ang. getter and/or setter methods), natomiast zdarzenie jest zdefiniowane poprzez istnienie metod z przedrostniem <tt>on</tt> (ang. <i>on-methods</i>). Zarówno właściwości jak i nazwy zdarzeń są w wersji 3.0 nie są wrażliwe na wielkość liter. W konsekwencji developerzy, są teraz zobowiązaniu do troszczenia się konwersję typów, kiedy właściwość komponentu jest ustawiana. Na przykład, następujący kod jest używany do zdefiniowania metody będącej setterem dla właściwości <tt>Enabled</tt> (przyp. tłum. ang <i>enabled</i> - dostępny, umożliwiony) <tt>TControl</tt>, która jest typu boolowskiego: <tt>boolean</tt>,
-</p>
-<com:TTextHighlighter Language="php" CssClass="block-content source" ID="code1">
-public function setEnabled($value)
-{
- $value=TPropertyValue::ensureBoolean($value);
- $this->setViewState('Enabled',$value,true);
-}
-</com:TTextHighlighter>
-<p id="40027" class="block-content">
-gdzie <tt>TPropertyValue::ensureBoolean()</tt> jest używana aby ipewnić się, że wartość wejściowa jest typu boolean. Dziejse się tak ponieważ, gdy watość jest konfigurowana w szablonie, wartość łańcuchowa (ang. <i>string value<i/>) jest przekazywana do settera. W poprzednich wersjach PRADO znało typ właściwości bazując na pliku specyfikacji i wykonywało konwersję typów za Ciebie.
-</p>
-
-<h2 id="503">Kontroler aplickacji (<i>Application Controller</i>)</h2>
-<p id="40028" class="block-content">
-Kontroler aplickacji implementuje teraz architekturę modułową. Moduły mogą być podłączone i skonfigurowane w specyfikacji aplikacji. Każdy moduł obejmuje określoną funkcjonalność a wszystkie one są koordynowane przez <a href="?page=Fundamentals.Applications">cykl życia aplickacji</a> (ang. <i>application lidecycle</i>). Konecpcja modułów w wersji 2.x została zastąpiona w wersji 3.0 przez <a href="?page=Configurations.PageConfig">katalogi stron</a> (ang. <i>page directories</i>). W wyniku tego format <a href="?page=Configurations.AppConfig">specyfikacji aplikacji</a> (ang. <i>application specification</i>) w wersji 3.0 różni się od wersji wcześniejszych.
-</p>
-
-<h2 id="504">Strony (<i>Pages</i>)</h2>
-<p id="40029" class="block-content">
-Strony w wersji 3.0 są zorganizowane w katalogach, które mogą zostać porównane do koncepcji modułów w wersji 2.x. Strony są dostępne poprzez ścieżkę do nich. Na przykład, adres URL <tt>index.php?page=Kontrolki.Przyklady.Przyklad1</tt> będzie używany do dostępu do strony nazwanej <tt>Przyklad1</tt> przechowywanej w katalogu <tt>[ŚcieżkaBazowa]/Kontrolki/Przyklad</tt>, gdzie <tt>[ŚcieżkaBazowa]</tt> oznacza główny katalog stron (ang. <i>root page path</i>). Nazwa pliku szablonu strony musi kończyć się rozszerzeniem <tt>.page</tt>, głównie, aby odróżnić szablony stron od "niestronowych" (ang. <i>non-paged</i>) szablonów kontrolek, których nazwa musi być zakończona rozszerzeniem <tt>.tpl</tt>.
-</p>
-
-<h2 id="505">Zależności między kontrolkami (<i>Control Relationship</i>)</h2>
-<p id="40030" class="block-content">
-Wersja 3.0 redefiniuje zależności pomiędzy kontrolkami. W szczególności, relacja rodzic-dziecko (<i>parent-child relationship</i> teraz odnosi się do relacji zawierajacej się w prezentacji kontrolek. Nowa relacja naming-container (przyp tłum. ang. <i>naming</i> - nazywanie, <i>container</i> - kontener) została wprowadzona dla lepszego zarządzania identyfikatorami ID kontrolek. Aby uzyskać więcej informacji zobacz sekcję <a href="?page=Fundamentals.Controls">kontrolki</a>.
-</p>
-
-<h2 id="506">Składnia szablonów (<i>Template Syntax</i>)</h2>
-<div id="template-syntax" class="block-content">
-<p id="40031">
-Składnia szblonów kontrolek w wersji 3.0 została podobna do tej we wcześniejszych wersjach, ale z wieloma rozszerzeniami. Główna zmiana dotyczy wyrażenia wiążącego dane (ang. <i>databind expression</i>), które jest wykonywane następująco
-</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_40002">
-&lt;com:MojKomponent NazwaWlasciwosci=&lt;%# formuła PHP %&gt; .../&gt;
-</com:TTextHighlighter>
-<p id="40032">
-Tagi formuł oraz wyrażeń (ang. <i>expression and statement tags</i>) zostały zmienione w podobny sposób. Aby uzyskać więcej szczegółów zobacz sekcję <a href="?page=Configurations.Templates1">definiowanie szablonów</a> (ang. <i>template definition</i>).
-</p>
-</div>
-<h2 id="507">Składnia tematów (<i>Theme Syntax</i>)</h2>
-<p id="40033" class="block-content">
-Tematy w wersji 3.0 są definiowane jak szablony kotnrolek z kilkoma obwarowaniami.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/GettingStarted/pl/directory.gif b/demos/quickstart/protected/pages/GettingStarted/pl/directory.gif
deleted file mode 100755
index e6c4f724..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/pl/directory.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/GettingStarted/pl/sequence.gif b/demos/quickstart/protected/pages/GettingStarted/pl/sequence.gif
deleted file mode 100755
index 4207a9bb..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/pl/sequence.gif
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/GettingStarted/wsat_generate_ar.png b/demos/quickstart/protected/pages/GettingStarted/wsat_generate_ar.png
index 8f0f59e7..6333d26b 100644
--- a/demos/quickstart/protected/pages/GettingStarted/wsat_generate_ar.png
+++ b/demos/quickstart/protected/pages/GettingStarted/wsat_generate_ar.png
Binary files differ
diff --git a/demos/quickstart/protected/pages/GettingStarted/wsat_login.png b/demos/quickstart/protected/pages/GettingStarted/wsat_login.png
index dbe1ad8b..3159a8ff 100644
--- a/demos/quickstart/protected/pages/GettingStarted/wsat_login.png
+++ b/demos/quickstart/protected/pages/GettingStarted/wsat_login.png
Binary files differ
diff --git a/demos/quickstart/protected/pages/GettingStarted/zh/Introduction.page b/demos/quickstart/protected/pages/GettingStarted/zh/Introduction.page
deleted file mode 100755
index ee5db70f..00000000
--- a/demos/quickstart/protected/pages/GettingStarted/zh/Introduction.page
+++ /dev/null
@@ -1,20 +0,0 @@
-<com:TContent ID="body" >
-<h1>欢迎使用PRADO快速教程</h1>
-
-<div id="intro" class="block-content">
-<p>
-本教程旨在帮助您快速掌握用PRADO v3.x构建Web应用。
-</p>
-<p>
-如果您觉得本教程没能满足您的需求,您也可以参考以下资源:
-</p>
-</div>
-<ul class="block-content" id="intro-links">
- <li><a href="http://www.pradosoft.com/docs/classdoc/">PRADO类库文档</a></li>
- <li><a href="http://www.pradosoft.com/docs/manual/">PRADO API文档</a></li>
- <li><a href="http://www.pradosoft.com/forum/">PRADO论坛</a></li>
- <li><a href="http://www.pradosoft.com/wiki/">PRADO Wiki</a></li>
- <li><a href="http://trac.pradosoft.com/prado/">PRADO Trac</a></li>
-</ul>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/JuiControls/Home.page b/demos/quickstart/protected/pages/JuiControls/Home.page
index 4bf8f7fe..f997e573 100644
--- a/demos/quickstart/protected/pages/JuiControls/Home.page
+++ b/demos/quickstart/protected/pages/JuiControls/Home.page
@@ -1,9 +1,9 @@
<com:TContent ID="body" >
-<h1>Jui Controls (jQuery UI)</h1>
+<h1 id="224018">Jui Controls (jQuery UI)</h1>
<p class="block-content">
Jui controls are the PRADO port of the standard <a href="http://jqueryui.com/">jQuery UI</a> widgets. They can be used as standard <a href="?page=ActiveControls.Introduction">Active Controls</a>, but will automatically load the needed jQuery-UI javascript libraries.
</p>
-<h3>Options</h3>
+<h3 id="224021">Options</h3>
<p class="block-content">
The <tt>Options</tt> property of PRADO Jui controls is used to pass options to the underlying javascript object. Each subproperty set on <tt>Options</tt> will be translated to a javascript property added to the object. The complete list of options available for each widget is availble at jQuery-UI's API Documentation.
</p>
@@ -24,7 +24,7 @@ jQuery-UI's <a href="http://jqueryui.com/resizable/">Resizable</a> adds an handl
/&gt;
</com:TTextHighlighter>
-<h3>Events</h3>
+<h3 id="224022">Events</h3>
<p class="block-content">
jQuery-UI widgets offers a lot of events that PRADO can hook up and trasmit to the serverside using a <a href="?page=ActiveControls.Introduction">callback request</a>. Event available for PRADO Jui controls inherits their names from their jQuery-UI counterparts, prefixed with "On".
Jui controls doesn't make use of the AutoPostback property anymore, but only triggers a callback when an event handler is associated to the corresponding event.
@@ -42,7 +42,7 @@ jQuery's <a href="http://jqueryui.com/draggable/">Draggable</a> allows a target
/&gt;
</com:TTextHighlighter>
-<h2>PRADO Jui interactions controls</h2>
+<h2 id="224019">PRADO Jui interactions controls</h2>
<p class="block-content">
Jui interactions adds basic mouse-based interactions to elements like moving, resizing or sorting. PRADO Jui interactions controls applies there interactions to a <a href="?page=ActiveControls.ActivePanel">TActivePanel</a>
For informations of the specific options of each interaction, follow jQuery-UI Interaction <a href="http://api.jqueryui.com/category/interactions/">API Documentation</a> for the specific interaction.
@@ -74,15 +74,15 @@ For informations of the specific options of each interaction, follow jQuery-UI I
</li>
</ul>
-<h2>PRADO Jui widgets controls</h2>
+<h2 id="224020">PRADO Jui widgets controls</h2>
<ul id="u2" class="block-content">
<li>
<a href="?page=JuiControls.Widgets#TJuiProgressbar">TJuiProgressbar</a>
displays a progress bar.
</li>
<li>
- <a href="?page=JuiControls.Widgets#TJuiAutoComplete">TJuiProgressbar</a>
- provides a list of suggestions on the current partial word typed in the textbox
+ <a href="?page=JuiControls.Widgets#TJuiAutoComplete">TJuiAutoComplete</a>
+ is a textbox that provides a list of suggestion on the current partial typed word
</li>
<li>
<a href="?page=JuiControls.Widgets#TJuiDialog">TJuiDialog</a>
diff --git a/demos/quickstart/protected/pages/JuiControls/Interactions.page b/demos/quickstart/protected/pages/JuiControls/Interactions.page
index 2b48da68..b2be141f 100644
--- a/demos/quickstart/protected/pages/JuiControls/Interactions.page
+++ b/demos/quickstart/protected/pages/JuiControls/Interactions.page
@@ -1,12 +1,12 @@
<com:TContent ID="body">
-<h1>Jui interactions controls</h1>
+<h1 id="226023">Jui interactions controls</h1>
<p class="block-content">
Jui interactions adds basic mouse-based interactions to elements like moving, resizing or sorting. PRADO Jui interactions controls applies these interactions to a <a href="?page=ActiveControls.ActivePanel">TActivePanel</a>
For informations of the specific options of each interaction, follow jQuery-UI Interaction <a href="http://api.jqueryui.com/category/interactions/">API Documentation</a> for the specific interaction.
</p>
<a name="TJuiDraggable"></a>
-<h2>TJuiDraggable</h2>
+<h2 id="226024">TJuiDraggable</h2>
<com:DocLink ClassPath="System.Web.UI.JuiControls.TJuiDraggable" /> - <a href="http://api.jqueryui.com/draggable/">jQuery UI API</a>
<p class="block-content">
@@ -22,7 +22,7 @@ The panel can be moved using the mouse, and eventually dropped over a <a href="?
<a name="TJuiDroppable"></a>
-<h2>TJuiDroppable</h2>
+<h2 id="226025">TJuiDroppable</h2>
<com:DocLink ClassPath="System.Web.UI.JuiControls.TJuiDroppable" /> - <a href="http://api.jqueryui.com/droppable/">jQuery UI API</a>
<p class="block-content">
@@ -37,7 +37,7 @@ When a <a href="?page=JuiControls.Interactions#TJuiDroppable">TJuiDraggable</a>
<br/>
<a name="TJuiResizable"></a>
-<h2>TJuiResizable</h2>
+<h2 id="226026">TJuiResizable</h2>
<com:DocLink ClassPath="System.Web.UI.JuiControls.TJuiResizable" /> - <a href="http://api.jqueryui.com/resizable/">jQuery UI API</a>
<p class="block-content">
<tt>TJuiResizable</tt> is an extension to <a href="?page=ActiveControls.ActivePanel">TActivePanel</a> based on jQuery-UI's <a href="http://jqueryui.com/resizable/">Resizable</a> interaction.
@@ -52,7 +52,7 @@ A small handle is shown on the bottom right corner of the panel, that permits th
<a name="TJuiSelectable"></a>
-<h2>TJuiSelectable</h2>
+<h2 id="226027">TJuiSelectable</h2>
<com:DocLink ClassPath="System.Web.UI.JuiControls.TJuiSelectable" /> - <a href="http://api.jqueryui.com/selectable/">jQuery UI API</a>
<p class="block-content">
<tt>TJuiSelectable</tt> is an extension to <a href="?page=ActiveControls.ActivePanel">TActivePanel</a> based on jQuery-UI's <a href="http://jqueryui.com/selectable/">Selectable</a> interaction.
@@ -67,7 +67,7 @@ A small handle is shown on the bottom right corner of the panel, that permits th
<a name="TJuiSortable"></a>
-<h2>TJuiSortable</h2>
+<h2 id="226028">TJuiSortable</h2>
<com:DocLink ClassPath="System.Web.UI.JuiControls.TJuiSortable" /> - <a href="http://api.jqueryui.com/sortable/">jQuery UI API</a>
<p class="block-content">
<tt>TJuiSortable</tt> is an extension to <a href="?page=ActiveControls.ActivePanel">TActivePanel</a> based on jQuery-UI's <a href="http://jqueryui.com/sortable/">Sortable</a> interaction.
diff --git a/demos/quickstart/protected/pages/JuiControls/Widgets.page b/demos/quickstart/protected/pages/JuiControls/Widgets.page
index 63c6aa32..5bf8b083 100644
--- a/demos/quickstart/protected/pages/JuiControls/Widgets.page
+++ b/demos/quickstart/protected/pages/JuiControls/Widgets.page
@@ -1,5 +1,5 @@
<com:TContent ID="body">
-<h1>Jui widgets controls</h1>
+<h1 id="228029">Jui widgets controls</h1>
<p class="block-content">
Jui widgets are complex controls built on the foundations of jQuery effects and jQueryUI interactions.
PRADO Jui widgets controls can be divided in two groups:
@@ -11,7 +11,7 @@ For informations of the specific options of each widget, follow jQuery-UI Widget
</p>
<a name="TJuiProgressbar" />
-<h2>TJuiProgressbar</h2>
+<h2 id="228030">TJuiProgressbar</h2>
<com:DocLink ClassPath="System.Web.UI.JuiControls.TJuiProgressbar" /> - <a href="http://api.jqueryui.com/progressbar/">jQuery UI API</a>
<p class="block-content">
@@ -26,7 +26,7 @@ The panel takes the aspect of a progressbar ranging from a value of 0 to the val
<br/>
<a name="TJuiAutoComplete" />
-<h2>TJuiAutoComplete</h2>
+<h2 id="228031">TJuiAutoComplete</h2>
<com:DocLink ClassPath="System.Web.UI.JuiControls.TJuiAutoComplete" /> - <a href="http://api.jqueryui.com/autocomplete/">jQuery UI API</a>
<p class="block-content">
@@ -50,7 +50,7 @@ When a suggestion is selected the <tt>OnSuggestionSelected</tt> event is raised,
<a name="TJuiDialog" />
-<h2>TJuiDialog</h2>
+<h2 id="228032">TJuiDialog</h2>
<com:DocLink ClassPath="System.Web.UI.JuiControls.TJuiDialog" /> - <a href="http://api.jqueryui.com/dialog/">jQuery UI API</a>
<p class="block-content">
@@ -72,7 +72,7 @@ The buttons may contain a callback that will be fired when they are clicked.
<a name="TJuiDatePicker" />
-<h2>TJuiDatePicker</h2>
+<h2 id="228033">TJuiDatePicker</h2>
<com:DocLink ClassPath="System.Web.UI.JuiControls.TJuiDatePicker" /> - <a href="http://api.jqueryui.com/datepicker/">jQuery UI API</a>
<p class="block-content">
diff --git a/demos/quickstart/protected/pages/Services/id/SoapService.page b/demos/quickstart/protected/pages/Services/id/SoapService.page
deleted file mode 100755
index e7f552c4..00000000
--- a/demos/quickstart/protected/pages/Services/id/SoapService.page
+++ /dev/null
@@ -1,164 +0,0 @@
-<com:TContent ID="body" >
-
-<h1 id="134038">Layanan SOAP</h1>
-
-<p id="670450" class="block-content">
-SOAP membentuk lapisan dasar dari tumpukan layanan Web. Ia menyediakan cara yang rapi agar aplikasi PHP saling berkomunikasi atau dengan aplikasi yang ditulis dalam bahasa lain. PRADO menyediakan <tt>TSoapService</tt> yang membuat pengembagan aplikasi server SOAP menjadi tugas yang sangat mudah.
-</p>
-
-<p id="670451" class="block-content">
-Untuk menggunakan <tt>TSoapService</tt>, konfigurasi itu dalam spesifikasi aplikasi seperti berikut:
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_670133">
-<services>
- <service id="soap" class="System.Web.Services.TSoapService">
- <soap id="stockquote" provider="path.to.StockQuote" />
- <!--
- <soap...other soap service... />
- -->
- </service>
-</services>
-</com:TTextHighlighter>
-<p id="670452" class="block-content">
-Contoh menetapkan penyedia layanan SOAP bernama <tt>stockquote</tt> yang mengimplementasikan metode SOAP <tt>getPrice</tt> dalam kelas penyedia <tt>StockQuote</tt>,
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_670134">
-class StockQuote
-{
- /**
- * @param string $symbol the symbol of the stock
- * @return float the stock price
- * @soapmethod
- */
- public function getPrice($symbol)
- {
- ....return stock price for $symbol
- }
-}
-</com:TTextHighlighter>
-
-<div class="note"><b class="tip">Catatan:</b>
-<tt>TSoapService</tt> didasarkan pada <a href="http://www.php.net/manual/en/ref.soap.php">ekstensi SOAP PHP</a> dan memerlukan ekstensi terinstalasi.
-</div>
-
-<p id="670453" class="block-content">
-Dengan kode sederhana di atas, kita sudah menyelesaikan layanan SOAP sederhana yang membolehkan aplikasi lain untuk meng-query harga dari stok tertentu. Sebagai contoh, umumnya klien SOAP bisa ditulis seperti berikut guna mendapatkan harga stok atas IBM,
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_670135">
-$client=new SoapClient('http://path/to/index.php?soap=stockquote.wsdl');
-echo $client->getPrice('IBM');
-</com:TTextHighlighter>
-
-<p id="670454" class="block-content">
-Perhatikan URL yang digunakan untuk membentuk <tt>SoapClient</tt> (kelas disediakan oleh ekstensi SOAP PHP). Ini adalah URL untuk <a href="http://en.wikipedia.org/wiki/WSDL">WSDL</a> yang menjelaskan protokol komunikasi untuk layanan SOAP yang baru kita implementasikan. WSDL sering kali terlalu rumit untuk ditulis secara manual. Kebetulan, <tt>TSoapService</tt> bisa membuat ini bagi kita menggunakan generator WSDL. Secara umum, URL untuk membuat WSDL secara otomatis dalam PRADO mempunyai format berikut:
-</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_670136">
-http://path/to/index.php?SoapServiceID=SoapProviderID.wsdl
-</com:TTextHighlighter>
-
-<p id="670455" class="block-content">
-Agar generator WSDL membuat WSDL untuk layanan SOAP, kelas penyedia perlu untuk mengikuti sintaks tertentu. Dalam keadaan tertentu, untuk metode yang akan diperlihatkan sebagai metode SOAP, kata kunci <tt>@soapmethod</tt> harus muncul dalam komentar phpdoc terhadap metode dengan baris berikut yang menetapkan parameter metode dan nilai hasil:
-</p>
-<ul id="u1" class="block-content">
-<li>parameter: <tt>@param parameter-type $parameter-name description</tt></li>
-<li>return value: <tt>@return value-type description</tt></li>
-</ul>
-<p id="670456" class="block-content">
-Parameter yang benar dan tipe hasil termasuk: <tt>string</tt>, <tt>int</tt>, <tt>boolean</tt>, <tt>float</tt>, <tt>array</tt>, <tt>mixed</tt>, dll. Anda dapat juga menetapkan nama kelas sebagai tipe, yang menterjemahkan ke dalam tipe SOAP kompleks. Sebagai contoh, untuk tipe kompleks <tt>Contact</tt>
-</p>
-
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_670137">
-/**
- * Memperluas TComponent untuk menyediakan metode pengambil/penentu properti
- */
-class Contact {
- /**
- * @var string $name
- * @soapproperty
- */
- public $name;
-
- /**
- * @var Address $address
- * @soapproperty
- */
- private $_address;
-
- public function setAddress($value) {
- $this->_address=$value;
- }
-
- public function getAddress() {
- if($this->_address===null)
- $this->_address=new Address;
- return $this->_address;
- }
-}
-
-class Address{
- /**
- * @var string $city
- * @soapproperty
- */
- public $city;
-}
-
-class ContactManager {
- /**
- * @return Contact[] an array of contacts
- * @soapmethod
- */
- function getAllContacts() {
- return array(new Contact);
- }
-
- /**
- * @return Contact one contact
- * @soapmethod
- */
- function getContact($name) {
- return new Contact;
- }
-}
-</com:TTextHighlighter>
-<p id="670457" class="block-content">Untuk obyek soap kompleks, properti obyek ditetapkan dengan kata kunci <tt>@soapproperty</tt> dalam phpdocs. Selanjutnya, nama tipe properti harus ditetapkan sebagai <tt>@var type $name</tt> di mana <tt>type</tt> adalah tipe apapun yang benar seperti telah disebutkan sebelumnya dan <tt>$name</tt> akan mendefinisikan properti <tt>name</tt> (catatan bahwa jika kelas Anda adalah TComponent, Anda bisa menyediakan properti pengambil/penentu).
-</p>
-<p id="670458" class="block-content">
-Sebuah array dari obyek yang kompleks juga bisa dihasilkan dengan menambahkan pasangan yang dilindungi kurung kotak setelah nama tipe. Sebagai contoh, untuk menghasilkan array dari tipe <tt>Contact</tt>, kita mendefinisikan <tt>@return Contact[] ...</tt>.
-</p>
-
-<div class="tip"><b class="note">Tip:</b>
-Piranti sangat berguna untuk menguji layanan web Anda adalah piranti bebas
-<a href="http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=65a1d4ea-0f7a-41bd-8494-e916ebc4159c">WebServiceStudio 2.0</a>. Ia bisa memanggil webmethods secara interaktif. Pengguna dapat menyediakan sebuah titik akhir WSDL. Pada saat mengklik tombol Get piranti mengambil WSDL, membuat proxy .NET dari WSDL dan menampilkan daftar metode yang tersedia. Pengguna bisa memilih setiap metode dan menyediakan parameter input yang diplerukan.
-Piranti membutuhkan MS .NET runtime terinstalasi.
-
-<p id="690008" class="block-content">Piranti semacam itu tersedia untuk Mac OS X Tiger dari
-<a href="http://www.ditchnet.org/soapclient/">http://www.ditchnet.org/soapclient/</a>
-</p>
-</div>
-
-<p id="670459" class="block-content">
-<tt>TSoapService</tt> bisa dikonfigurasi dan dikustomisasi dalam beberapa cara. Dalam contoh di atas, elemen <tt>&lt;soap&gt;</tt> sebenarnya menetapkan sebuah layanan SOAP menggunakan implementasi standar <tt>TSoapServer</tt>. Atribut dalam <tt>&lt;soap&gt;</tt> dikirimkan ke <tt>TSoapServer</tt> sebagai nilai properti awalnya. Sebagai contoh, atribut <tt>provider</tt> menginisialisasi properti <tt>Provider</tt> dari <tt>TSoapServer</tt>. Dengan menyetel <tt>SessionPersistent</tt> menjadi true dalam elemen <tt>&lt;soap&gt;</tt>, turunan penyedia akan sama di dalam sesi pengguna. Anda bisa mengembangkan kelas server SOAP sendiri dan menggunakannya dengan menetapkan atribut <tt>class</tt> dari <tt>&lt;soap&gt;</tt>.
-</p>
-
-<p id="670460" class="block-content">Standarnya, server SOAP PHP akan membuat obyek dari tipe <tt>StdClass</tt> ketika obyek diterima dari klien. Server soap bisa dikonfigurasi untuk secara otomatis membuat obyek dari obyek tipe tertentu diterima sebagai parameter metode. Sebagai contoh, jika kita mempunyai sebuah metode Soap yang menerima obyek <tt>Contact</tt> sebagai parameter.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_670138">
-/**
- * @param Contact $contact
- * @return boolean true if saved, false otherwise
- * @soapmethod
- */
- function save(Contact $contact)
- {
- return true
- }
-</com:TTextHighlighter>
-Untuk melakukan ini, kita perlu menyetel properti <tt>ClassMaps</tt> dari
-<tt>TSoapServer</tt> dalam tag <tt>&lt;soap&gt;</tt> sebagai nama kelas string dipisahkan koma yang kita inginkan secara otomatis dikonversi.
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_670139">
-<soap id="contact-manager" provider="path.to.ContactManager"
- ClassMaps="Contact, Address"/>
-</com:TTextHighlighter>
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Tutorial/AjaxChat.page b/demos/quickstart/protected/pages/Tutorial/AjaxChat.page
index 92118720..40e283dd 100755
--- a/demos/quickstart/protected/pages/Tutorial/AjaxChat.page
+++ b/demos/quickstart/protected/pages/Tutorial/AjaxChat.page
@@ -22,7 +22,7 @@
that asks the user to enter their nickname and the main application chat
page.
You can try the application <a href="../chat/index.php">locally</a> or at
- <a href="http://www.pradosoft.com/demos/chat/">Pradosoft.com</a>.
+ <a href="http://www.pradoframework.net/site/demos/chat/">Prado website</a>.
The main application chat page is shown bellow.
<img src=<%~ chat1.png %> class="figure" />
</p>
diff --git a/demos/quickstart/protected/pages/Tutorial/CurrencyConverter.page b/demos/quickstart/protected/pages/Tutorial/CurrencyConverter.page
index 1abd68b9..0beeaaf4 100755
--- a/demos/quickstart/protected/pages/Tutorial/CurrencyConverter.page
+++ b/demos/quickstart/protected/pages/Tutorial/CurrencyConverter.page
@@ -10,15 +10,15 @@
a dollar amount to an other currency, given the rate of that currency
relative to the dollar. The completed application is shown bellow.
<img src=<%~ example2.png %> class="figure" />
- You can try the application <a href="../currency-converter/index.php">locally</a> or at
- <a href="http://www.pradosoft.com/demos/currency-converter/">Pradosoft.com</a>.
+ You can try the application <a href="../currency-converter/index.php">locally</a> or at the
+ <a href="http://www.pradoframework.net/site/demos/currency-converter/">Prado website</a>.
Notice that the application still functions exactly the same if javascript
is not available on the user's browser.
</p>
<h1 id="download">Downloading and Installing Prado</h1>
- <p id="80055" class="block-content">To install Prado, simply download the latest version of Prado from
- <a href="http://www.pradosoft.com/">http://www.pradosoft.com</a>
+ <p id="80055" class="block-content">To install Prado, simply download the latest version of Prado from the
+ <a href="https://github.com/pradosoft/prado">Prado project website</a>
and unzip the file to a directory <b>not</b> accessible by your web server
(you may unzip it to a directory accessible by the web server if you wish
to see the demos and test). For further detailed installation, see the
diff --git a/demos/quickstart/protected/pages/Tutorial/fr/AjaxChat.page b/demos/quickstart/protected/pages/Tutorial/fr/AjaxChat.page
deleted file mode 100755
index 568e920f..00000000
--- a/demos/quickstart/protected/pages/Tutorial/fr/AjaxChat.page
+++ /dev/null
@@ -1,755 +0,0 @@
-<com:TContent ID="body">
- <h1 id="18008">Building an AJAX Chat Application</h1>
- <p id="90081" class="block-content">This tutorial introduces the Prado web application framework's
- <a href="?page=Database.ActiveRecord">ActiveRecord</a>
- and <a href="?page=ActiveControls.Home">Active Controls</a> to build a Chat
- web application. It is assumed that you
- are familiar with PHP and you have access to a web server that is able to serve PHP5 scripts.
- This basic chat application will utilize the following ideas/components in Prado.
- </p>
- <ul id="u1" class="block-content">
- <li>Building a custom User Manager class.</li>
- <li>Authenticating and adding a new user to the database.</li>
- <li>Using ActiveRecord to interact with the database.</li>
- <li>Using Active Controls and callbacks to implement the user interface.</li>
- <li>Separating application logic and application flow.</li>
- </ul>
-
- <p id="90082" class="block-content">In this tutorial you will build an AJAX Chat web application that allows
- multiple users to communicate through their web browser.
- The application consists of two pages: a login page
- that asks the user to enter their nickname and the main application chat
- page.
- You can try the application <a href="../chat/index.php">locally</a> or at
- <a href="http://www.pradosoft.com/demos/chat/">Pradosoft.com</a>.
- The main application chat page is shown bellow.
- <img src=<%~ chat1.png %> class="figure" />
- </p>
-
- <h1 id="18009">Download, Install and Create a New Application</h1>
- <p id="90083" class="block-content">The download and installation steps are similar to those in
- the <a href="?page=Tutorial.CurrencyConverter#download">Currency converter tutorial</a>.
- To create the application, we run from the command line the following.
- See the <a href="?page=GettingStarted.CommandLine">Command Line Tool</a>
- for more details.
-<com:TTextHighlighter Language="text" CssClass="source block-content" id="code_90027">
-php prado/framework/prado-cli.php -c chat
-</com:TTextHighlighter>
- </p>
-
- <p id="90084" class="block-content">The above command creates the necessary directory structure and minimal
- files (including "index.php" and "Home.page") to run a Prado web application.
- Now you can point your browser's URL to the web server to serve up
- the <tt>index.php</tt> script in the <tt>chat</tt> directory.
- You should see the message "Welcome to Prado!"
- </p>
-
- <h1 id="18010">Authentication and Authorization</h1>
- <p id="90085" class="block-content">The first task for this application is to ensure that each user
- of the chat application is assigned with a unique (chosen by the user)
- username. To achieve this, we can secure the main chat application
- page to deny access to anonymous users. First, let us create the <tt>Login</tt>
- page with the following code. We save the <tt>Login.php</tt> and <tt>Login.page</tt>
- in the <tt>chat/protected/pages/</tt> directory (there should be a <tt>Home.page</tt>
- file created by the command line tool).
- </p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90028">
-&lt;?php
-class Login extends TPage
-{
-}
-</com:TTextHighlighter>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_90029">
-<!doctype html public "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>Prado Chat Demo Login</title>
-</head>
-<body>
-&lt;com:TForm&gt;
- <h1 class="login">Prado Chat Demo Login</h1>
- <fieldset class="login">
- <legend>Please enter your name:</legend>
- <div class="username">
- &lt;com:TLabel ForControl="username" Text="Username:" /&gt;
- &lt;com:TTextBox ID="username" MaxLength="20" /&gt;
- &lt;com:TRequiredFieldValidator
- ControlToValidate="username"
- Display="Dynamic"
- ErrorMessage="Please provide a username." /&gt;
- </div>
- <div class="login-button">
- &lt;com:TButton Text="Login" /&gt;
- </div>
-&lt;/com:TForm&gt;
-</body>
-</html>
-</com:TTextHighlighter>
- <p id="90086" class="block-content">The login page contains
- a <com:DocLink ClassPath="System.Web.UI.TForm" Text="TForm" />,
- a <com:DocLink ClassPath="System.Web.UI.WebControls.TTextBox" Text="TTextBox" />,
- a <com:DocLink ClassPath="System.Web.UI.WebControls.TRequiredFieldValidator" Text="TRequiredFieldValidator" />
- and a <com:DocLink ClassPath="System.Web.UI.WebControls.TButton" Text="TButton" />. The resulting
- page looks like the following (after applying some a style sheet).
- <img src=<%~ chat2.png %> class="figure" />
- If you click on the <tt>Login</tt> button without entering any
- text in the username textbox, an error message is displayed. This is
- due to the <com:DocLink ClassPath="System.Web.UI.WebControls.TRequiredFieldValidator" Text="TRequiredFieldValidator" />
- requiring the user to enter some text in the textbox before proceeding.
- </p>
-<h2 id="18019">Securing the <tt>Home</tt> page</h2>
-<p id="90087" class="block-content">Now we wish that if the user is trying to access the main application
-page, <tt>Home.page</tt>, before they have logged in, the user is presented with
-the <tt>Login.page</tt> first. We add a <tt>chat/protected/application.xml</tt> configuration
-file to import some classes that we shall use later.
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_90030">
-<?xml version="1.0" encoding="utf-8"?>
-<application id="Chat" Mode="Debug">
- <paths>
- <using namespace="System.Data.*" />
- <using namespace="System.Data.ActiveRecord.*" />
- <using namespace="System.Security.*" />
- <using namespace="System.Web.UI.ActiveControls.*" />
- </paths>
-</application>
-</com:TTextHighlighter>
-Next, we add a <tt>chat/protected/pages/config.xml</tt> configuration file to
-secure the <tt>pages</tt> directory.
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_90031">
-<?xml version="1.0" encoding="utf-8"?>
-<configuration>
- <modules>
- <module id="users" class="TUserManager" />
- <module id="auth" class="TAuthManager" UserManager="users" LoginPage="Login" />
- </modules>
- <authorization>
- <allow pages="Login" users="?" />
- <allow roles="normal" />
- <deny users="*" />
- </authorization>
-</configuration>
-</com:TTextHighlighter>
-We setup the authentication using the default classes as explained in the
-<a href="?page=Advanced.Auth">authentication/authorization quickstart</a>.
-In the authorization definition, we allow anonymous users to access the
-<tt>Login</tt> page (anonymous users is specified by the <tt>?</tt> question mark).
-We allow any users with role equal to "normal" (to be defined later)
-to access all the pages, that is, the <tt>Login</tt> and <tt>Home</tt> pages.
-Lastly, we deny all users without any roles to access any page. The authorization
-rules are executed on first match basis.
-</p>
-
-<p id="90088" class="block-content">If you now try to access the <tt>Home</tt> page by pointing your browser
-to the <tt>index.php</tt> you will be redirected to the <tt>Login</tt> page.
-</p>
-
-<h1 id="18011">Active Record for <tt>chat_users</tt> table</h1>
-<p id="90089" class="block-content">The <com:DocLink ClassPath="System.Secutity.TUserManager" Text="TUserManager" />
-class only provides a read-only list of users. We need to be able to add or
-login new users dynamically. So we need to create our own user manager class.
-First, we shall setup a database with a <tt>chat_users</tt> table and create an ActiveRecord
-that can work with the <tt>chat_users</tt> table with ease. For the demo, we
-use <tt>sqlite</tt> as our database for ease of distributing the demo. The demo
-can be extended to use other databases such as MySQL or Postgres SQL easily.
-We define the <tt>chat_users</tt> table as follows.
-<com:TTextHighlighter Language="text" CssClass="source block-content" id="code_90032">
-CREATE TABLE chat_users
-(
- username VARCHAR(20) NOT NULL PRIMARY KEY,
- last_activity INTEGER NOT NULL DEFAULT "0"
-);
-</com:TTextHighlighter>
-Next we define the corresponding <tt>ChatUserRecord</tt> class and save it as
-<tt>chat/protected/App_Code/ChatUserRecord.php</tt> (you need to create the
-<tt>App_Code</tt> directory as well). We also save the sqlite database file
-as <tt>App_Code/chat.db</tt>.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90033">
-class ChatUserRecord extends TActiveRecord
-{
- const TABLE='chat_users';
-
- public $username;
- public $last_activity;
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
-</com:TTextHighlighter>
-Before using the <tt>ChatUserRecord</tt> class we to configure a default
-database connection for ActiveRecord to function. In the <tt>chat/protected/application.xml</tt>
-we import classes from the <tt>App_Code</tt> directory and add an
-<a href="?page=Database.ActiveRecord">ActiveRecord configuration module</a>.
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_90034">
-<?xml version="1.0" encoding="utf-8"?>
-<application id="Chat" Mode="Debug">
- <paths>
- <using namespace="Application.App_Code.*" />
- <using namespace="System.Data.*" />
- <using namespace="System.Data.ActiveRecord.*" />
- <using namespace="System.Security.*" />
- <using namespace="System.Web.UI.ActiveControls.*" />
- </paths>
- <modules>
- <module class="TActiveRecordConfig" EnableCache="true"
- Database.ConnectionString="sqlite:protected/App_Code/chat.db" />
- </modules>
-</application>
-</com:TTextHighlighter>
-</p>
-
-<h2 id="18020">Custom User Manager class</h2>
-<p id="90090" class="block-content">To implement a custom user manager module class we just need
-to extends the <tt>TModule</tt> class and implement the <tt>IUserManager</tt>
-interface. The <tt>getGuestName()</tt>, <tt>getUser()</tt> and <tt>validateUser()</tt>
-methods are required by the <tt>IUserManager</tt> interface.
-We save the custom user manager class as <tt>App_Code/ChatUserManager.php</tt>.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90035">
-class ChatUserManager extends TModule implements IUserManager
-{
- public function getGuestName()
- {
- return 'Guest';
- }
-
- public function getUser($username=null)
- {
- $user=new TUser($this);
- $user->setIsGuest(true);
- if($username !== null && $this->usernameExists($username))
- {
- $user->setIsGuest(false);
- $user->setName($username);
- $user->setRoles(array('normal'));
- }
- return $user;
- }
-
- public function addNewUser($username)
- {
- $user = new ChatUserRecord();
- $user->username = $username;
- $user->save();
- }
-
- public function usernameExists($username)
- {
- $finder = ChatUserRecord::finder();
- $record = $finder->findByUsername($username);
- return $record instanceof ChatUserRecord;
- }
-
- public function validateUser($username,$password)
- {
- return $this->usernameExists($username);
- }
-}
-</com:TTextHighlighter>
-<p id="90091" class="block-content">
-The <tt>getGuestName()</tt>
-method simply returns the name for a guest user and is not used in our application.
-The <tt>getUser()</tt> method returns a <tt>TUser</tt> object if the username
-exists in the database, the <tt>TUser</tt> object is set with role of "normal"
-that corresponds to the <tt>&lt;authorization&gt;</tt> rules defined in our
-<tt>config.xml</tt> file. </p>
-
-<p id="90092" class="block-content">The <tt>addNewUser()</tt> and <tt>usernameExists()</tt>
-method uses the ActiveRecord corresponding to the <tt>chat_users</tt> table to
-add a new user and to check if a username already exists, respectively.
-</p>
-
-<p id="90093" class="block-content">The next thing to do is change the <tt>config.xml</tt> configuration to use
-our new custom user manager class. We simply change the <tt>&lt;module&gt;</tt>
-configuration with <tt>id="users"</tt>.</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_90036">
-<module id="users" class="ChatUserManager" />
-</com:TTextHighlighter>
-
-<h1 id="18012">Authentication</h1>
-<p id="90094" class="block-content">To perform authentication, we just want the user to enter a unique
-username. We add a
-<com:DocLink ClassPath="System.Web.UI.WebControls.TCustomValidator" Text="TCustomValidator" />
-for validate the uniqueness of the username and add an <tt>OnClick</tt> event handler
-for the login button.</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_90037">
-&lt;com:TCustomValidator
- ControlToValidate="username"
- Display="Dynamic"
- OnServerValidate="checkUsername"
- ErrorMessage="The username is already taken." /&gt;
-
-...
-
-&lt;com:TButton Text="Login" OnClick="createNewUser" /&gt;
-</com:TTextHighlighter>
-In the <tt>Login.php</tt> file, we add the following 2 methods.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90038">
-function checkUsername($sender, $param)
-{
- $manager = $this->Application->Modules['users'];
- if($manager->usernameExists($this->username->Text))
- $param->IsValid = false;
-}
-
-function createNewUser($sender, $param)
-{
- if($this->Page->IsValid)
- {
- $manager = $this->Application->Modules['users'];
- $manager->addNewUser($this->username->Text);
-
- //do manual login
- $user = $manager->getUser($this->username->Text);
- $auth = $this->Application->Modules['auth'];
- $auth->updateSessionUser($user);
- $this->Application->User = $user;
-
- $url = $this->Service->constructUrl($this->Service->DefaultPage);
- $this->Response->redirect($url);
- }
-}
-</com:TTextHighlighter>
-The <tt>checkUserName()</tt> method uses the <tt>ChatUserManager</tt> class
-(recall that in the <tt>config.xml</tt> configuration we set the
-ID of the custom user manager class as "users") to validate the username
-is not taken.
-</p>
-<p id="90095" class="block-content">
-In the <tt>createNewUser</tt> method, when the validation passes (that is,
-when the user name is not taken) we add a new user. Afterward we perform
-a manual login process:</p>
-<ul id="u2" class="block-content">
- <li>First we obtain a <tt>TUser</tt> instance from
-our custom user manager class using the <tt>$manager->getUser(...)</tt> method.</li>
- <li>Using the <tt>TAuthManager</tt> we set/update the user object in the
- current session data.</li>
- <li>Then we set/update the <tt>Application</tt>'s user instance with our
- new user object.</li>
-</ul>
-</p>
-<p id="finally" class="block-content">
-Finally, we redirect the client to the default <tt>Home</tt> page.
-</p>
-
-<h2 id="18021">Default Values for ActiveRecord</h2>
-<p id="90096" class="block-content">If you try to perform a login now, you will receive an error message like
-"<i>Property '<tt>ChatUserRecord::$last_activity</tt>' must not be null as defined
-by column '<tt>last_activity</tt>' in table '<tt>chat_users</tt>'.</i>". This means that the <tt>$last_activity</tt>
-property value was null when we tried to insert a new record. We need to either
-define a default value in the corresponding column in the table and allow null values or set the default
-value in the <tt>ChatUserRecord</tt> class. We shall demonstrate the later by
-altering the <tt>ChatUserRecord</tt> with the addition of a set getter/setter
-methods for the <tt>last_activity</tt> property.
-
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90039">
-private $_last_activity;
-
-public function getLast_Activity()
-{
- if($this->_last_activity === null)
- $this->_last_activity = time();
- return $this->_last_activity;
-}
-
-public function setLast_Activity($value)
-{
- $this->_last_activity = $value;
-}
-</com:TTextHighlighter>
-Notice that we renamed <tt>$last_activity</tt> to <tt>$_last_activity</tt> (note
-the underscore after the dollar sign).
-</p>
-
-<h1 id="18013">Main Chat Application</h1>
-<p id="90097" class="block-content">Now we are ready to build the main chat application. We use a simple
-layout that consist of one panel holding the chat messages, one panel
-to hold the users list, a textarea for the user to enter the text message
-and a button to send the message.
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_90040">
-<!doctype html public "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>Prado Chat Demo</title>
-<style>
-.messages
-{
- width: 500px;
- height: 300px;
- float: left;
- border: 1px solid ButtonFace;
- overflow: auto;
-}
-.user-list
-{
- margin-left: 2px;
- float: left;
- width: 180px;
- height: 300px;
- border: 1px solid ButtonFace;
- overflow: auto;
- font-size: 0.85em;
-}
-.message-input
-{
- float: left;
-}
-
-.message-input textarea
-{
- margin-top: 3px;
- padding: 0.4em 0.2em;
- width: 493px;
- font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
- font-size: 0.85em;
- height: 40px;
-}
-.send-button
-{
- margin: 0.5em;
-}
-</style>
-</head>
-<body>
-&lt;com:TForm&gt;
-<h1 id="18014">Prado Chat Demo</h1>
-<div id="messages" class="messages">
- &lt;com:TPlaceHolder ID="messageList" /&gt;
-</div>
-<div id="users" class="user-list">
- &lt;com:TPlaceHolder ID="userList" /&gt;
-</div>
-<div class="message-input">
- &lt;com:TActiveTextBox ID="userinput"
- Columns="40" Rows="2" TextMode="MultiLine" /&gt;
- &lt;com:TActiveButton ID="sendButton" CssClass="send-button"
- Text="Send" /&gt;
-</div>
-&lt;/com:TForm&gt;
-</body>
-</html>
-</com:TTextHighlighter>
-We added two Active Control components: a
-<com:DocLink ClassPath="System.Web.UI.ActiveControls.TActiveTextBox" Text="TActiveTextBox" />
-and a
-<com:DocLink ClassPath="System.Web.UI.ActiveControls.TActiveButton" Text="TActiveButton" />.
-We also added a
-<com:DocLink ClassPath="System.Web.UI.WebControls.TJavascriptLogger" Text="TJavascriptLogger" />
-that will be very useful for understanding how the Active Controls work.
-</p>
-
-<h2 id="18022">Exploring the Active Controls</h2>
-<p id="90098" class="block-content">We should have some fun before we proceeding with setting up the chat buffering. We want
-to see how we can update the current page when we receive a message. First, we add
-an <tt>OnClick</tt> event handler for the <tt>Send</tt> button.
-
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_90041">
-&lt;com:TActiveButton ID="sendButton" CssClass="send-button"
- Text="Send" OnClick="processMessage"/&gt;
-</com:TTextHighlighter>
-And the corresponding event handler method in the <tt>Home.php</tt> class (we
-need to create this new file too).
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90042">
-class Home extends TPage
-{
- function processMessage($sender, $param)
- {
- echo $this->userinput->Text;
- }
-}
-</com:TTextHighlighter>
-If you now type something in the main application textbox and click the send button
-you should see whatever you have typed echoed in the <tt>TJavascriptLogger</tt> console.
-</p>
-
-<p id="90099" class="block-content">To append or add some content to the message list panel, we need to use
-some methods in the
-<com:DocLink ClassPath="System.Web.UI.ActiveControls.TCallbackClientScript" Text="TCallbackClientScript" />
-class which is available through the <tt>CallbackClient</tt> property of the
-current <tt>TPage</tt> object. For example, we do can do
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90043">
-function processMessage($sender, $param)
-{
- $this->CallbackClient->appendContent("messages", $this->userinput->Text);
-}
-</com:TTextHighlighter>
-This is one way to update some part of the existing page during a callback (AJAX style events)
-and will be the primary way we will use to implement the chat application.
-</p>
-
-<h1 id="18015">Active Record for <tt>chat_buffer</tt> table</h1>
-<p id="90100" class="block-content">To send a message to all the connected users we need to buffer or store
-the message for each user. We can use the database to buffer the messages. The
-<tt>chat_buffer</tt> table is defined as follows.
-<com:TTextHighlighter Language="text" CssClass="source block-content" id="code_90044">
-CREATE TABLE chat_buffer
-(
- id INTEGER PRIMARY KEY,
- for_user VARCHAR(20) NOT NULL,
- from_user VARCHAR(20) NOT NULL,
- message TEXT NOT NULL,
- created_on INTEGER NOT NULL DEFAULT "0"
-);
-</com:TTextHighlighter>
-The corresponding <tt>ChatBufferRecord</tt> class is saved as
-<tt>App_Code/ChatBufferRecord.php</tt>.
-
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90045">
-class ChatBufferRecord extends TActiveRecord
-{
- const TABLE='chat_buffer';
-
- public $id;
- public $for_user;
- public $from_user;
- public $message;
- private $_created_on;
-
- public function getCreated_On()
- {
- if($this->_created_on === null)
- $this->_created_on = time();
- return $this->_created_on;
- }
-
- public function setCreated_On($value)
- {
- $this->_created_on = $value;
- }
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
-</com:TTextHighlighter>
-</p>
-
-<h1 id="18016">Chat Application Logic</h1>
-<p id="90101" class="block-content">We finally arrive at the guts of the chat application logic. First, we
-need to save a received message into the chat buffer for <b>all</b> the
-current users. We add this logic in the <tt>ChatBufferRecord</tt> class.
-
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90046">
-public function saveMessage()
-{
- foreach(ChatUserRecord::finder()->findAll() as $user)
- {
- $message = new self;
- $message->for_user = $user->username;
- $message->from_user = $this->from_user;
- $message->message = $this->message;
- $message->save();
- if($user->username == $this->from_user)
- {
- $user->last_activity = time(); //update the last activity;
- $user->save();
- }
- }
-}
-</com:TTextHighlighter>
-We first find all the current users using the <tt>ChatUserRecord</tt> finder
-methods. Then we duplicate the message and save it into the database. In addition,
-we update the message sender's last activity timestamp. The above piece of code
-demonstrates the simplicity and succinctness of using ActiveRecords for simple database designs.
-</p>
-
-<p id="90102" class="block-content">The next piece of the logic is to retrieve the users' messages from the buffer.
-We simply load all the messages for a particular username and format that message
-appropriately (remember to escape the output to prevent Cross-Site Scripting attacks).
-After we load the messages, we delete those loaded messages and any older
-messages that may have been left in the buffer.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90047">
-public function getUserMessages($user)
-{
- $content = '';
- foreach($this->findAll('for_user = ?', $user) as $message)
- $content .= $this->formatMessage($message);
- $this->deleteAll('for_user = ? OR created_on < ?',
- $user, time() - 300); //5 min inactivity
- return $content;
-}
-
-protected function formatMessage($message)
-{
- $user = htmlspecialchars($message->from_user);
- $content = htmlspecialchars($message->message);
- return "<div class=\"message\"><strong>{$user}:</strong>"
- ." <span>{$content}</span></div>";
-}
-</com:TTextHighlighter>
-
-To retrieve a list of current users (formatted), we add this logic to the
-<tt>ChatUserRecord</tt> class. We delete any users that may have been inactive
-for awhile.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90048">
-public function getUserList()
-{
- $this->deleteAll('last_activity < ?', time()-300); //5 min inactivity
- $content = '<ul>';
- foreach($this->findAll() as $user)
- $content .= '<li>'.htmlspecialchars($user->username).'</li>';
- $content .= '</ul>';
- return $content;
-}
-</com:TTextHighlighter>
-
-<div class="note"><b class="tip">Note:</b>
-For simplicity
-we formatted the messages in these Active Record classes. For large applications,
-these message formatting tasks should be done using Prado components (e.g. using
-a TRepeater in the template or a custom component).
-</div>
-</p>
-
-<h1 id="18017">Putting It Together</h1>
-<p id="90103" class="block-content">Now comes to put the application flow together. In the <tt>Home.php</tt> we update
-the <tt>Send</tt> buttons <tt>OnClick</tt> event handler to use the application
-logic we just implemented.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90049">
-function processMessage($sender, $param)
-{
- if(strlen($this->userinput->Text) > 0)
- {
- $record = new ChatBufferRecord();
- $record->message = $this->userinput->Text;
- $record->from_user = $this->Application->User->Name;
- $record->saveMessage();
-
- $this->userinput->Text = '';
- $messages = $record->getUserMessages($this->Application->User->Name);
- $this->CallbackClient->appendContent("messages", $messages);
- $this->CallbackClient->focus($this->userinput);
- }
-}
-</com:TTextHighlighter>
-We simply save the message to the chat buffer and then ask for all the messages
-for the current user and update the client side message list using a callback
-response (AJAX style).
-</p>
-
-<p id="90104" class="block-content">At this point the application is actually already functional, just not very
-user friendly. If you open two different browsers, you should be able to communicate
-between the two users whenever the <tt>Send</tt> button is clicked.
-</p>
-
-<p id="90105" class="block-content">The next part is perhaps the more tricker and fiddly than the other tasks. We
-need to improve the user experience. First, we want a list of current users
-as well. So we add the following method to <tt>Home.php</tt>, we can call
-this method when ever some callback event is raised, e.g. when the <tt>Send</tt>
-button is clicked.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90050">
-protected function refreshUserList()
-{
- $lastUpdate = $this->getViewState('userList','');
- $users = ChatUserRecord::finder()->getUserList();
- if($lastUpdate != $users)
- {
- $this->CallbackClient->update('users', $users);
- $this->setViewstate('userList', $users);
- }
-}
-</com:TTextHighlighter>
-</p>
-
-<p id="90106" class="block-content">Actually, we want to periodically update the messages and user list as new
-users join in and new message may arrive from other users. So we need to refresh
-the message list as well.</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90051">
-function processMessage($sender, $param)
-{
- ...
- $this->refreshUserList();
- $this->refreshMessageList();
- ...
-}
-
-protected function refreshMessageList()
-{
- //refresh the message list
- $finder = ChatBufferRecord::finder();
- $content = $finder->getUserMessages($this->Application->User->Name);
- if(strlen($content) > 0)
- {
- $anchor = (string)time();
- $content .= "<a href=\"#\" id=\"{$anchor}\"> </a>";
- $this->CallbackClient->appendContent("messages", $content);
- $this->CallbackClient->focus($anchor);
- }
-}
-</com:TTextHighlighter>
-The anchor using <tt>time()</tt> as ID for a focus point is so that when the
-message list on the client side gets very long, the focus method will
-scroll the message list to the latest message (well, it works in most browsers).
-</p>
-
-<p id="90107" class="block-content">Next, we need to redirect the user back to the login page if the user has
-been inactive for some time, say about 5 mins, we can add this check to any stage
-of the page life-cycle. Lets add it to the <tt>onLoad()</tt> stage.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90052">
-public function onLoad($param)
-{
- $username = $this->Application->User->Name;
- if(!$this->Application->Modules['users']->usernameExists($username))
- {
- $auth = $this->Application->Modules['auth'];
- $auth->logout();
-
- //redirect to login page.
- $this->Response->Redirect($this->Service->ConstructUrl($auth->LoginPage));
- }
-}
-</com:TTextHighlighter>
-</p>
-
-<h1 id="18018">Improving User Experience</h1>
-<p id="90108" class="block-content">The last few details are to periodically check for new messages and
-refresh the user list. We can accomplish this by polling the server using a
-<com:DocLink ClassPath="System.Web.UI.ActiveControls.TTimeTriggeredCallback" Text="TTimeTriggeredCallback" />
-control. We add a <tt>TTimeTriggeredCallback</tt> to the <tt>Home.page</tt>
-and call the <tt>refresh</tt> handler method defined in <tt>Home.php</tt>.
-We set the polling interval to 2 seconds.
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_90053">
-&lt;com:TTimeTriggeredCallback OnCallback="refresh"
- Interval="2" StartTimerOnLoad="true" /&gt;
-</com:TTextHighlighter>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90054">
-function refresh($sender, $param)
-{
- $this->refreshUserList();
- $this->refreshMessageList();
-}
-</com:TTextHighlighter>
-</p>
-
-<p id="90109" class="block-content">The final piece requires us to use some javascript. We want that when the
-user type some text in the textarea and press the <tt>Enter</tt> key, we want it
-to send the message without clicking on the <tt>Send</tt> button. We add to the
-<tt>Home.page</tt> some javascript.
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_90055">
-&lt;com:TClientScript&gt;
-Event.observe($("&lt;%= $this->userinput->ClientID %&gt;"), "keypress", function(ev)
-{
- if(Event.keyCode(ev) == Event.KEY_RETURN)
- {
- if(Event.element(ev).value.length > 0)
- new Prado.Callback("&lt;%= $this->sendButton->UniqueID %&gt;");
- Event.stop(ev);
- }
-});
-&lt;/com:TClientScript&gt;
-</com:TTextHighlighter>
-Details regarding the javascript can be explored in the
-<a href="?page=Advanced.Scripts">Introduction to Javascript</a> section of the quickstart.
-</p>
-
-<p id="90110" class="block-content">This completes the tutorial on making a basic chat web application using
-the Prado framework. Hope you have enjoyed it.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Tutorial/fr/CurrencyConverter.page b/demos/quickstart/protected/pages/Tutorial/fr/CurrencyConverter.page
deleted file mode 100755
index 6b8c7bc3..00000000
--- a/demos/quickstart/protected/pages/Tutorial/fr/CurrencyConverter.page
+++ /dev/null
@@ -1,404 +0,0 @@
-<com:TContent ID="body">
- <h1 id="16001">Building a Simple Currency Converter</h1>
- <p id="80053" class="block-content">This tutorial introduces the Prado web application framework and teaches
- you how to build a simple web application in a few simple steps. This
- tutorial assumes that you are familiar with PHP and you have access
- to a web server that is able to serve PHP5 scripts.
- </p>
-
- <p id="80054" class="block-content">In this tutorial you will build a simple web application that converts
- a dollar amount to an other currency, given the rate of that currency
- relative to the dollar. The completed application is shown bellow.
- <img src=<%~ example2.png %> class="figure" />
- You can try the application <a href="../currency-converter/index.php">locally</a> or at
- <a href="http://www.pradosoft.com/demos/currency-converter/">Pradosoft.com</a>.
- Notice that the application still functions exactly the same if javascript
- is not available on the user's browser.
- </p>
-
- <h1 id="download">Downloading and Installing Prado</h1>
- <p id="80055" class="block-content">To install Prado, simply download the latest version of Prado from
- <a href="http://www.pradosoft.com/">http://www.pradosoft.com</a>
- and unzip the file to a directory <b>not</b> accessible by your web server
- (you may unzip it to a directory accessible by the web server if you wish
- to see the demos and test). For further detailed installation, see the
- <a href="?page=GettingStarted.Installation">Quickstart Installation</a> guide.
- </p>
-
- <h1 id="16002">Creating a new Prado web Application</h1>
- <p id="80056" class="block-content">The quickest and simplest way to create a new Prado web application is
- to use the command tool <tt>prado-cli.php</tt> found in the <tt>framework</tt>
- directory of the Prado distribution. We create a new application by running
- the following command in your
- command prompt or console. The command creates a new directory named
- <tt>currency-converter</tt> in your current working directory.
- You may need to change to the appropriate directory
- first.
- See the <a href="?page=GettingStarted.CommandLine">Command Line Tool</a>
- for more details.
- </p>
-<com:TTextHighlighter Language="text" CssClass="source block-content" id="code111">
-php prado/framework/prado-cli.php -c currency-converter
-</com:TTextHighlighter>
-
- <p id="80057" class="block-content">The above command creates the necessary directory structure and minimal
- files (including "index.php" and "Home.page") to run a Prado web application.
- Now you can point your browser's url to the web server to serve up
- the <tt>index.php</tt> script in the <tt>currency-converter</tt> directory.
- You should see the message "Welcome to Prado!"
- </p>
-
- <h1 id="16003">Creating the Currency Converter User Interface</h1>
- <p id="80058" class="block-content">We start by editing the <tt>Home.page</tt> file found in the
- <tt>currency-converter/protected/pages/</tt> directory. Files ending
- with ".page" are page templates that contains HTML and Prado controls.
- We simply add two textboxes, three labels and one button as follows.
- </p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="form1">
-&lt;com:TForm&gt;
- <fieldset>
- <legend>Currency Converter</legend>
- <div class="rate-field">
- &lt;com:TLabel ForControl="currencyRate" Text="Exchange Rate per $1:" /&gt;
- &lt;com:TTextBox ID="currencyRate" /&gt;
- </div>
- <div class="dollar-field">
- &lt;com:TLabel ForControl="dollars" Text="Dollars to Convert:" /&gt;
- &lt;com:TTextBox ID="dollars" /&gt;
- </div>
- <div class="total-field">
- <span class="total-label">Amount in Other Currency:</span>
- &lt;com:TLabel ID="total" CssClass="result" /&gt;
- </div>
- <div class="convert-button">
- &lt;com:TButton Text="Convert" /&gt;
- </div>
- </fieldset>
-&lt;/com:TForm&gt;
-</com:TTextHighlighter>
- <p id="refresh" class="block-content">
- If you refresh the page, you should see something similar to the following figure.
- It may not look very pretty or orderly, but we shall change that later using CSS.
- <img src=<%~ example1.png %> class="figure" />
- </p>
-
- <p id="80059" class="block-content">
- The first component we add is a
- <com:DocLink ClassPath="System.Web.UI.TForm" Text="TForm" />
- that basically corresponds to the HTML <tt>&lt;form&gt;</tt> element.
- In Prado, only <b>one</b> <tt>TForm</tt> element is allowed per page.
- </p>
-
- <p id="80060" class="block-content">The next two pair of component we add is the
- <com:DocLink ClassPath="System.Web.UI.WebControls.TLabel" Text="TLabel" />
- and
- <com:DocLink ClassPath="System.Web.UI.WebControls.TTextBox" Text="TTextBox" />
- that basically defines a label and a textbox for the user of the application
- to enter the currency exchange rate.
- The <tt>ForControl</tt> property value determines which component
- that the label is for. This allows the user of the application to click
- on the label to focus on the field (a good thing). You could have used
- a plain HTML <tt>&lt;label&gt;</tt> element to do the same thing, but
- you would have to find the correct <tt>ID</tt> of the textbox (or
- <tt>&lt;input&gt;</tt> in HTML) as Prado components may/will render the
- <tt>ID</tt> value differently in the HTML output.
- </p>
-
- <p id="80061" class="block-content">The next pair of components are similar and defines the textbox
- to hold the dollar value to be converted.
- The <tt>TLabel</tt> with <tt>ID</tt> value "total" defines a simple label.
- Notice that the <tt>ForControl</tt> property is absent. This means that this
- label is simply a simple label which we are going to use to display the
- converted total amount.
- </p>
-
- <p id="80062" class="block-content">The final component is a
- <com:DocLink ClassPath="System.Web.UI.WebControls.TButton" Text="TButton" />
- that the user will click to calculate the results. The <tt>Text</tt>
- property sets the button label.
- </p>
-
- <h1 id="16004">Implementing Currency Conversion</h1>
-
- <p id="80063" class="block-content">If you tried clicking on the "Convert" button then the page will refresh
- and does not do anything else. For the button to do some work, we need
- to add a "Home.php" to where "Home.page" is. The <tt>Home</tt> class
- should extends the
- <com:DocLink ClassPath="System.Web.UI.TPage" Text="TPage" />, the default base
- class for all Prado pages.
- </p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code3">
-&lt;?php
-class Home extends TPage
-{
-
-}
-</com:TTextHighlighter>
- <p id="1111" class="block-content">
- Prado uses PHP's <tt>__autoload</tt> method to load classes. The convention
- is to use the class name with ".php" extension as filename.
- </p>
-
- <p id="80064" class="block-content">So far there is nothing interesting about Prado, we just declared some
- "web components" in some template file named Home.page and created
- a "Home.php" file with a <tt>Home</tt> class. The more interesting
- bits are in Prado's event-driven architecture as we shall see next.
- </p>
-
- <p id="80065" class="block-content">We want that when the user click on the "Convert" button, we take the
- values in the textbox, do some calculation and present the user with
- the converted total. To handle the user clicking of the "Convert" button
- we simply add an <tt>OnClick</tt> property to the "Convert" button in
- the "Home.page" template and add a corresponding event handler method
- in the "Home.php".
- </p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code4">
-&lt;com:TButton Text="Convert" OnClick="convert_clicked" /&gt;
-</com:TTextHighlighter>
- <p id="222" class="block-content">
- The value of the <tt>OnClick</tt>, "<tt>convert_clicked</tt>", will be the method
- name in the "Home.php" that will called when the user clicks on the
- "Convert" button.
- </p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code5">
-class Home extends TPage
-{
- public function convert_clicked($sender, $param)
- {
- $rate = floatval($this->currencyRate->Text);
- $dollars = floatval($this->dollars->Text);
- $this->total->Text = $rate * $dollars;
- }
-}
-</com:TTextHighlighter>
-<div id="3332" class="block-content">
- <p id="333">
- If you run the application in your web browser, enter some values and click
- the "Convert" button then you should see that calculated value displayed next
- to the "Amount in Other Currency" label.
- </p>
-
- <p id="80066">In the "<tt>convert_clicked</tt>" method the first parameter, <tt>$sender</tt>,
- corresponds to the object that raised the event, in this case,
- the "Convert" button. The second parameter, <tt>$param</tt> contains
- any additional data that the <tt>$sender</tt> object may wish to have added.
- </p>
-
- <p id="80067">We shall now examine, the three lines that implements the simply currency
- conversion in the "<tt>convert_clicked</tt>" method.
- </p>
-</div>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code6" >
-$rate = floatval($this->currencyRate->Text);
-</com:TTextHighlighter>
- <p id="444" class="block-content">
- The statement <tt>$this->currencyRate</tt> corresponds to the
- <tt>TTextBox</tt> component with <tt>ID</tt> value "currencyRate" in the
- "Home.page" template. The <tt>Text</tt> property of the <tt>TTextBox</tt>
- contains the value that the user entered. So, we obtain this
- value by <tt>$this->currencyRate->Text</tt> which we convert the
- value to a float value.
- </p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code7">
-$dollars = floatval($this->dollars->Text);
-</com:TTextHighlighter>
-<div id="5551" class="block-content">
- <p id="555">
- The next line does a similar things, it takes the user value from
- the <tt>TTextBox</tt> with <tt>ID</tt> value "dollars and converts it to
- a float value.
- </p>
-
- <p id="80068">The third line calculates the new amount and set this value in the
- <tt>Text</tt> property of the <tt>TLabel</tt> with <tt>ID="total"</tt>.
- Thus, we display the new amount to the user in the label.
- </p>
-</div>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code8">
-$this->total->Text = $rate * $dollars;
-</com:TTextHighlighter>
-
- <h1 id="16005">Adding Validation</h1>
- <p id="80069" class="block-content">The way we convert the user entered value to float ensures that the
- total amount is always a number. So the user is free to enter what
- ever they like, they could even enter letters. The user's experience
- in using the application can be improved by adding validators
- to inform the user of the allowed values in the currency rate and the
- amount to be calcuated.
- </p>
-
- <p id="80070">For the currency rate, we should ensure that</p>
- <ol id="o111" class="block-content">
- <li>the user enters a value,</li>
- <li>the currency rate is a valid number,</li>
- <li>the currency rate is positive.</li>
- </ol>
- <p id="666" class="block-content">
- To ensure 1 we add one
- <com:DocLink ClassPath="System.Web.UI.WebControls.TRequiredFieldValidator" Text="TRequiredFieldValidator" />. To ensure 2 and 3, we add one
- <com:DocLink ClassPath="System.Web.UI.WebControls.TCompareValidator" Text="TCompareValidator" />. We may add these validators any where within
- the "Home.page" template. Further details regarding these validator and other
- validators can be found in the
- <a href="?page=Controls.Validation">Validation Controls</a> page.
- </p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code9">
-&lt;com:TRequiredFieldValidator
- ControlToValidate="currencyRate"
- ErrorMessage="Please enter a currency rate." /&gt;
-&lt;com:TCompareValidator
- ControlToValidate="currencyRate"
- DataType="Float"
- ValueToCompare="0"
- Operator="GreaterThan"
- ErrorMessage="Please enter a positive currency rate." /&gt;
-</com:TTextHighlighter>
-
- <p id="80071" >For the amount to be calculated, we should ensure that</p>
- <ol id="o222" class="block-content">
- <li>the user enters a value,</li>
- <li>the value is a valid number (not including any currency or dollar signs).</li>
- </ol>
- <p id="777" class="block-content">
- To ensure 1 we just add another <tt>TRequiredFieldValidator</tt>, for 2
- we could use a
- <com:DocLink ClassPath="System.Web.UI.WebControls.TDataTypeValidator" Text="TDataTypeValidator" />. For simplicity we only allow the user to enter
- a number for the amount they wish to convert.
- </p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code9a">
-&lt;com:TRequiredFieldValidator
- ControlToValidate="dollars"
- ErrorMessage="Please enter the amount you wish to calculate." /&gt;
-&lt;com:TDataTypeValidator
- ControlToValidate="dollars"
- DataType="Float"
- ErrorMessage="Please enter a number." /&gt;
-</com:TTextHighlighter>
- </p>
-
- <p id="80072" class="block-content">Now if you try to enter some invalid data in the application or left out
- any of the fields the validators will be activated and present the user
- with error messages. Notice that the error messages are presented
- without reloading the page. Prado's validators by default validates
- using both javascript and server side. The server side validation
- is <b>always performed</b>. For the server side, we
- should skip the calculation if the validators are not satisfied. This can
- done as follows.
- </p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code10" >
-public function convert_clicked($sender, $param)
-{
- if($this->Page->IsValid)
- {
- $rate = floatval($this->currencyRate->Text);
- $dollars = floatval($this->dollars->Text);
- $this->total->Text = $rate * $dollars;
- }
-}
-</com:TTextHighlighter>
-
- <h1 id="16006">Improve User Experience With Active Controls</h1>
- <p id="80073" class="block-content">In this simple application we may further improve the user experience
- by increasing the responsiveness of the application. One way to achieve
- a faster response is calculate and present the results without reloading
- the whole page.
- </p>
-
- <p id="80074" class="block-content">We can replace the <tt>TButton</tt> with the Active Control counter part,
- <com:DocLink ClassPath="System.Web.UI.ActiveControls.TActiveButton" Text="TActiveButton" />,
- that can trigger a server side click event without reloading the page.
- In addition, we can change the "totals" <tt>TLabel</tt> with the
- Active Control counter part,
- <com:DocLink ClassPath="System.Web.UI.ActiveControls.TActiveLabel" Text="TActiveLabel" />, such that the server side can update the browser without
- reloading the page.
- </p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code11">
-<div class="total-field">
- <span class="total-label">Amount in Other Currency:</span>
- &lt;com:TActiveLabel ID="total" CssClass="result" /&gt;
- </div>
- <div class="convert-button">
- &lt;com:TActiveButton Text="Convert" OnClick="convert_clicked" /&gt;
-</div>
-</com:TTextHighlighter>
- <p id="1232" class="block-content">
- The server side logic remains the same, we just need to import the
- Active Controls name space as they are not included by default. We
- add the following line to the begin of "Home.php".
- </p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code12">
-Prado::using('System.Web.UI.ActiveControls.*');
-</com:TTextHighlighter>
-
- <p id="80075" class="block-content">If you try the application now, you may notice that the page no longer
- needs to reload to calculate and display the converted total amount.
- However, since there is not page reload, there is no indication or not obvious
- that by clicking on the "Convert" button any has happened.
- We can further refine the user experience by change the text of "total" label
- to "calculating..." when the user clicks on the "Convert" button. The text of
- the "total" label will still be updated with the new calculate amount as before.
- </p>
-
- <p id="80076" class="block-content">To indicate that the calculation is in progress, we can change the text
- of the "total" label as follows. We add a <tt>ClientSide.OnLoading</tt> property
- to the "Convert" button (since this button is responsible for requesting
- the calculation).
- </p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code13">
-&lt;com:TActiveButton Text="Convert" OnClick="convert_clicked" &gt;
- &lt;prop:ClientSide.OnLoading&gt;
- $('&lt;%= $this->total->ClientID %&gt;').innerHTML = "calculating..."
- &lt;/prop:ClientSide.OnLoading&gt;
-&lt;/com:TActiveButton&gt;
-</com:TTextHighlighter>
-
- <p id="80077" class="block-content">The <tt>ClientSide.OnLoading</tt> and various
- <com:DocLink ClassPath="System.Web.UI.ActiveControls.TCallbackClientSide" Text="other properties" /> accept a javascript block as their content or value.
- The javascript code <tt>$('...')</tt> is a javascript function that is
- equivalent to <tt>document.getElementById('...')</tt> that takes a string
- with the ID of an HTML element. Since Prado renders its components's IDs, we need
- to use the rendered ID of the "total" label, that is, <tt>$this->total->ClientID</tt>. We place this bit of code within a <tt>&lt;%= %&gt;</tt> to obtain the rendered HTML ID for the "total" label. The rest of the
- javascript code <tt>innerHTML = "calculating..."</tt> simply changes
- the content of the "total" label.
- </p>
-
- <h1 id="16007">Adding Final Touches</h1>
- <p id="80078" class="block-content">So far we have built a simple currency converter web application with
- little attention of the looks and feel. Now we can add a stylesheet
- to improve the overall appearance of the application. We can simply
- add the stylesheet inline with the template code or we may create
- a "theme".
- </p>
-
- <p id="80079" class="block-content">To create and use a theme with Prado applications, we simply create a new
- directory "themes/Basic" in the <tt>currency-converter</tt> directory.
- You may need to create the <tt>themes</tt> directory first. Any
- directory within the <tt>themes</tt> are considered as a theme with the
- name of the theme being the directory name. See the
- <a href="?page=Advanced.Themes">Themes and Skins</a> for further details.
- </p>
-
- <p id="80080" class="block-content">We simply create a CSS file named "common.css" and save it in the
- <tt>themes/Basic</tt> directory. Then we add the following code
- to the beginning of "Home.page" (we add a little more HTML as well).
- </p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code14">
-&lt;%@ Theme="Basic" %&gt;
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
-&lt;com:THead Title="Currency Converter" /&gt;
-<body>
-</com:TTextHighlighter>
- <p id="4334" class="block-content">
- The first line <tt>&lt;%@ Theme="Basic" %&gt;</tt> defines the
- theme to be used for this page. The
- <com:DocLink ClassPath="System.Web.UI.WebControls.THead" Text="THead" />
- corresponds to the HTML <tt>&lt;head&gt;</tt> element. In addition
- to display the <tt>Title</tt> property by the <tt>THead</tt>, all CSS
- files in the <tt>themes/Basic</tt> directory are also rendered/linked
- for the current page. Our final currency converter web application
- looks like the following.
- <img src=<%~ example2.png %> class="figure" />
- This completes introduction tutorial to the Prado web application framework.
- </p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Tutorial/fr/chat1.png b/demos/quickstart/protected/pages/Tutorial/fr/chat1.png
deleted file mode 100755
index 8288b496..00000000
--- a/demos/quickstart/protected/pages/Tutorial/fr/chat1.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Tutorial/fr/chat2.png b/demos/quickstart/protected/pages/Tutorial/fr/chat2.png
deleted file mode 100755
index 97cbc51d..00000000
--- a/demos/quickstart/protected/pages/Tutorial/fr/chat2.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Tutorial/fr/example1.png b/demos/quickstart/protected/pages/Tutorial/fr/example1.png
deleted file mode 100755
index 0c7da7ba..00000000
--- a/demos/quickstart/protected/pages/Tutorial/fr/example1.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Tutorial/fr/example2.png b/demos/quickstart/protected/pages/Tutorial/fr/example2.png
deleted file mode 100755
index 1df56cfb..00000000
--- a/demos/quickstart/protected/pages/Tutorial/fr/example2.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Tutorial/id/AddressBook.page b/demos/quickstart/protected/pages/Tutorial/id/AddressBook.page
deleted file mode 100755
index 3e930df1..00000000
--- a/demos/quickstart/protected/pages/Tutorial/id/AddressBook.page
+++ /dev/null
@@ -1,8 +0,0 @@
-<com:TContent ID="body">
- <h1 id="22007">Buku Alamat Sederhana</h1>
- <p id="110006" class="block-content">Tutorial ini memperkenalkan dasar penyambungan ke sebuah database
- menggunakan <a href="?page=Database.ActiveRecord">ActiveRecord</a>
- dan menggunakan <a href="?page=Database.Scaffold">Kerangka Rekaman Aktif</a> untuk secara cepat membangun sebuah buku alamat sederhana.
- </p>
-
-</com:TContent> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Tutorial/id/AjaxChat.page b/demos/quickstart/protected/pages/Tutorial/id/AjaxChat.page
deleted file mode 100755
index 50759868..00000000
--- a/demos/quickstart/protected/pages/Tutorial/id/AjaxChat.page
+++ /dev/null
@@ -1,685 +0,0 @@
-<com:TContent ID="body">
- <h1 id="18008">Membangun Aplikasi Obrolan AJAX</h1>
- <com:RequiresVersion Version="3.1a" />
- <p id="90081" class="block-content">Tutorial ini memperkenalkan kerangka kerja aplikasi web Prado
- <a href="?page=Database.ActiveRecord">ActiveRecord</a>
- dan <a href="?page=ActiveControls.Home">Kontrol Aktif</a> untuk membangun aplikasi web Chat. Diasumsikan bahwa Anda sudah terbiasa dengan PHP dan akan telah mengakses server web yang dapat melayani naskah PHP5.
- Aplikasi chat dasar ini akan memanfaatkan ide/komponen berikut dalam Prado.
- </p>
- <ul id="u1" class="block-content">
- <li>Membangun kelas kustom Manajer Pengguna.</li>
- <li>Mengotentikasi dan menambahkan pengguna ke database.</li>
- <li>Menggunakan ActiveRecord untuk berinteraksi dengan database.</li>
- <li>Menggunakan Kontrol Aktif dan callbacks untuk menerapkan antarmuka pengguna.</li>
- <li>Memisahkan logika aplikasi dan alur aplikasi.</li>
- </ul>
-
- <p id="90082" class="block-content">Dalam tutorial ini Anda akan membangun sebuah aplikasi web Chat AJAX yang membolehkan
- multipel pengguna untuk berkomunikasi melalui web browser mereka.
- Aplikasi terdiri dari dua halaman: halaman masuk yang menanyakan pada
- pengguna untuk memasukkan nama panggilannya dan halaman aplikasi chat utama.
- Anda dapat mencoba aplikasi <a href="../chat/index.php">secara lokal</a> atau di
- <a href="http://www.pradosoft.com/demos/chat/">Pradosoft.com</a>.
- Aplikasi chat utama ditampilkan di bawah ini.
- <img src=<%~ chat1.png %> class="figure" />
- </p>
-
- <h1 id="18009">Download, Instalasi dan Buat Aplikasi Baru</h1>
- <p id="90083" class="block-content">Langkah download dan instalasi mirip dengan
- <a href="?page=Tutorial.CurrencyConverter#download">Tutorial pengubah kurs</a>.
- Untuk membuat aplikasi, kita menjalankan dari baris perintah berikut.
- Lihat <a href="?page=GettingStarted.CommandLine">Piranti Baris Perintah</a>
- untuk lebih jelasnya.
-<com:TTextHighlighter Language="text" CssClass="source block-content" id="code_90027">
-php prado/framework/prado-cli.php -c chat
-</com:TTextHighlighter>
- </p>
-
- <p id="90084" class="block-content">Perintah di atas membuat struktur direktori yang diperlukan dan file minimal (termasuk "index.php" dan "Home.page") untuk menjalankan aplikasi web Prado.
- Sekarang Anda dapat mengarahkan URL browser Anda ke server web untuk melayani
- naskah <tt>index.php</tt> dalam direktori <tt>chat</tt>.
- Anda seharusnya melihat pesan "Welcome to Prado!"
- </p>
-
- <h1 id="18010">Otentikasi dan Otorisasi</h1>
- <p id="90085" class="block-content">Tugas pertama untuk aplikasi ini adalah memastikan bahwa setiap pengguna
- dari aplikasi chat memiliki nama pengguna (dipilih oleh pengguna)
- unik. Untuk melaksanakan ini, kita akan mengamankan halaman aplikasi chat utama
- untuk menolak akses bagai pengguna anonim. Pertama, mari kita membuat halaman <tt>Login</tt>
- dengan kode berikut. Kita simpan <tt>Login.php</tt> dan <tt>Login.page</tt>
- dalam direktori <tt>chat/protected/pages/</tt> (di sana harus ada file <tt>Home.page</tt>
- yang dibuat oleh piranti baris perintah).
- </p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90028">
-&lt;?php
-class Login extends TPage
-{
-}
-</com:TTextHighlighter>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_90029">
-<!doctype html public "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>Prado Chat Demo Login</title>
-</head>
-<body>
-&lt;com:TForm&gt;
- <h1 class="login">Prado Chat Demo Login</h1>
- <fieldset class="login">
- <legend>Please enter your name:</legend>
- <div class="username">
- &lt;com:TLabel ForControl="username" Text="Username:" /&gt;
- &lt;com:TTextBox ID="username" MaxLength="20" /&gt;
- &lt;com:TRequiredFieldValidator
- ControlToValidate="username"
- Display="Dynamic"
- ErrorMessage="Please provide a username." /&gt;
- </div>
- <div class="login-button">
- &lt;com:TButton Text="Login" /&gt;
- </div>
-&lt;/com:TForm&gt;
-</body>
-</html>
-</com:TTextHighlighter>
- <p id="90086" class="block-content">Halaman login berisi
- a <com:DocLink ClassPath="System.Web.UI.TForm" Text="TForm" />,
- a <com:DocLink ClassPath="System.Web.UI.WebControls.TTextBox" Text="TTextBox" />,
- a <com:DocLink ClassPath="System.Web.UI.WebControls.TRequiredFieldValidator" Text="TRequiredFieldValidator" />
- dan <com:DocLink ClassPath="System.Web.UI.WebControls.TButton" Text="TButton" />. Halaman yang dihasilkan terlihat seperti berikut (setelah menerapkan beberapa style sheet).
- <img src=<%~ chat2.png %> class="figure" />
- Jika Anda mengklik pada tombol <tt>Login</tt> tanpa memasukan teks
- apapun dalam kotak teks nama pengguna, pesan kesalahan ditampilkan. Ini dikarenakan <com:DocLink ClassPath="System.Web.UI.WebControls.TRequiredFieldValidator" Text="TRequiredFieldValidator" />
- memerlukan pengguna untuk memasukan beberapa teks dalam kotak teks sebelum melanjutkan.
- </p>
-<h2 id="18019">Mengamankan halaman <tt>Home</tt></h2>
-<p id="90087" class="block-content">Sekarang kita menginginkan bahwa jika pengguna mencoba untuk mengakses halaman aplikasi utama, <tt>Home.page</tt>, sebelum masuk, pengguna diberi <tt>Login.page</tt> lebih dulu. Kita menambahkan file konfigurasi <tt>chat/protected/application.xml</tt> untuk mengimpor beberapa kelas yang harus kita pakai nanti.
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_90030">
-<?xml version="1.0" encoding="utf-8"?>
-<application id="Chat" Mode="Debug">
- <paths>
- <using namespace="System.Data.*" />
- <using namespace="System.Data.ActiveRecord.*" />
- <using namespace="System.Security.*" />
- <using namespace="System.Web.UI.ActiveControls.*" />
- </paths>
-</application>
-</com:TTextHighlighter>
-Selanjutnya, kita menambahkan file konfigurasi <tt>chat/protected/pages/config.xml</tt> guna mengamankan direktori <tt>pages</tt>.
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_90031">
-<?xml version="1.0" encoding="utf-8"?>
-<configuration>
- <modules>
- <module id="users" class="TUserManager" />
- <module id="auth" class="TAuthManager" UserManager="users" LoginPage="Login" />
- </modules>
- <authorization>
- <allow pages="Login" users="?" />
- <allow roles="normal" />
- <deny users="*" />
- </authorization>
-</configuration>
-</com:TTextHighlighter>
-Kita menyiapkan otentikasi menggunakan kelas standar seperti dijelaskan dalam
-<a href="?page=Advanced.Auth">tutorial cepat otentikasi/otorisasi</a>.
-Dalam definisi otorisasi, kita membolehkan pengguna anonim untuk mengakses halaman <tt>Login</tt> (pengguna anonim dietapkan dengan the <tt>?</tt> tanda tanya).
-Kita membolehkan setiap pengguna dengan aturan yang sama dengan "normal" (didefinisikan nanti) untuk mengakses semua halaman, yakni halaman <tt>Login</tt> dan <tt>Home</tt>.
-Terakhir, kita menolak semua pengguna tanpa aturan apapun untuk mengakses setiap halaman. Aturan otorisasi dijalankan pada basis sama pertama kali.
-</p>
-
-<p id="90088" class="block-content">Jika Anda mencoba untuk mengakses halaman <tt>Home</tt> dengan mengarahkan browser Anda ke
-<tt>index.php</tt> Anda akan dialihkan ke halaman <tt>Login</tt>.
-</p>
-
-<h1 id="18011">Rekaman Aktif untuk tabel <tt>chat_users</tt></h1>
-<p id="90089" class="block-content">Kelas <com:DocLink ClassPath="System.Secutity.TUserManager" Text="TUserManager" />
-hanya menyediakan daftar pengguna hanya-baca. Kita perlu untuk bisa menambah atau memasukan pengguna baru secara dinamis. Maka kita perlu untuk membuat kelas manajer pengguna kita sendiri.
-Pertama, kita menyiapkan database dengan tabel <tt>chat_users</tt> dan membuat sebuah ActiveRecord yang dapat bekerja pada tabel <tt>chat_users</tt> dengan mudah. Untuk demo, kita menggunakan <tt>sqlite</tt> sebagai database kita guna kemudahan menditribusikandemo. Demo dapat diperluas dengan mudah untuk memakai database lain seperti MySQL atau Postgres SQL.
-Kita mendefinisikan tabel <tt>chat_users</tt> sebagai berikut.
-<com:TTextHighlighter Language="text" CssClass="source block-content" id="code_90032">
-CREATE TABLE chat_users
-(
- username VARCHAR(20) NOT NULL PRIMARY KEY,
- last_activity INTEGER NOT NULL DEFAULT "0"
-);
-</com:TTextHighlighter>
-Selanjutnya kita mendefinisikan kelas <tt>ChatUserRecord</tt> dan menyimpannya sebagai <tt>chat/protected/App_Code/ChatUserRecord.php</tt> (Anda perlu untuk membuat direktori <tt>App_Code</tt> juga). Kita juga menyimpan file database sqlite sebagai <tt>App_Code/chat.db</tt>.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90033">
-class ChatUserRecord extends TActiveRecord
-{
- const TABLE='chat_users';
-
- public $username;
- public $last_activity;
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
-</com:TTextHighlighter>
-Sebelum menggunakan kelas <tt>ChatUserRecord</tt> kita perlu mengkonfigurasi koneksi database standar agar ActiveRecord berfungsi. Dalam <tt>chat/protected/application.xml</tt>
-kita mengimpor kelas dari direktori <tt>App_Code</tt> dan menambahkan
-<a href="?page=Database.ActiveRecord">modul konfigurasi ActiveRecord</a>.
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_90034">
-<?xml version="1.0" encoding="utf-8"?>
-<application id="Chat" Mode="Debug">
- <paths>
- <using namespace="Application.App_Code.*" />
- <using namespace="System.Data.*" />
- <using namespace="System.Data.ActiveRecord.*" />
- <using namespace="System.Security.*" />
- <using namespace="System.Web.UI.ActiveControls.*" />
- </paths>
- <modules>
- <module class="TActiveRecordConfig" EnableCache="true"
- Database.ConnectionString="sqlite:protected/App_Code/chat.db" />
- </modules>
-</application>
-</com:TTextHighlighter>
-</p>
-
-<h2 id="18020">Kelas Manajer Pengguna Kustom</h2>
-<p id="90090" class="block-content">Untuk menerapkan modul kelas kustom manajer pengguna kita cukup memperluas kelas <tt>TModule</tt> dan menerapkan antarmuka <tt>IUserManager</tt>. Metode <tt>getGuestName()</tt>, <tt>getUser()</tt> dan <tt>validateUser()</tt> diperlukan oleh antarmuka <tt>IUserManager</tt>.
-Kita menyimpan kelas manajer pengguna kustom sebagai <tt>App_Code/ChatUserManager.php</tt>.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90035">
-class ChatUserManager extends TModule implements IUserManager
-{
- public function getGuestName()
- {
- return 'Guest';
- }
-
- public function getUser($username=null)
- {
- $user=new TUser($this);
- $user->setIsGuest(true);
- if($username !== null && $this->usernameExists($username))
- {
- $user->setIsGuest(false);
- $user->setName($username);
- $user->setRoles(array('normal'));
- }
- return $user;
- }
-
- public function addNewUser($username)
- {
- $user = new ChatUserRecord();
- $user->username = $username;
- $user->save();
- }
-
- public function usernameExists($username)
- {
- $finder = ChatUserRecord::finder();
- $record = $finder->findByUsername($username);
- return $record instanceof ChatUserRecord;
- }
-
- public function validateUser($username,$password)
- {
- return $this->usernameExists($username);
- }
-}
-</com:TTextHighlighter>
-<p id="90091" class="block-content">
-Metode <tt>getGuestName()</tt>
-mengembalikan nama untuk pengguna tamu dan tidak dipakai dalam aplikasi kita.
-Metode <tt>getUser()</tt> mengembalikan obyek <tt>TUser</tt> jika nama pengguna ada dalam database, obyek <tt>TUser</tt> disetel dengan aturan "normal"
-yang terkait ke aturan <tt>&lt;otorisasi&gt;</tt> yang didefinisikan dalam file
-<tt>config.xml</tt> kita. </p>
-
-<p id="90092" class="block-content">Metode <tt>addNewUser()</tt> dan <tt>usernameExists()</tt>
-menggunakan ActiveRecord terkait dengan tabel <tt>chat_users</tt> masing-masing untuk menambah pengguna baru dan untuk memeriksa apakah nama pengguna sudah ada atau belum.
-</p>
-
-<p id="90093" class="block-content">Hal berikutnya yang dilakukan adalah mengubah konfigurasi <tt>config.xml</tt> untuk menggunakan kelas manajer pengguna kustom baru kita. Kita cukup mengubah konfigurasi <tt>&lt;module&gt;</tt>
-dengan <tt>id="users"</tt>.</p>
-<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_90036">
-<module id="users" class="ChatUserManager" />
-</com:TTextHighlighter>
-
-<h1 id="18012">Otentikasi</h1>
-<p id="90094" class="block-content">Untuk melakukan otentikasi, kita menginginkan pengguna untuk memasukkan nama pengguna unik. Kita menambahkan
-<com:DocLink ClassPath="System.Web.UI.WebControls.TCustomValidator" Text="TCustomValidator" />
-untuk memvalidasi keunikan nama pengguna dan menambahkan pengendali event <tt>OnClick</tt> untuk tombol login.</p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_90037">
-&lt;com:TCustomValidator
- ControlToValidate="username"
- Display="Dynamic"
- OnServerValidate="checkUsername"
- ErrorMessage="The username is already taken." /&gt;
-
-...
-
-&lt;com:TButton Text="Login" OnClick="createNewUser" /&gt;
-</com:TTextHighlighter>
-Dalam file <tt>Login.php</tt>, kita menambahkan 2 metode berikut.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90038">
-function checkUsername($sender, $param)
-{
- $manager = $this->Application->Modules['users'];
- if($manager->usernameExists($this->username->Text))
- $param->IsValid = false;
-}
-
-function createNewUser($sender, $param)
-{
- if($this->Page->IsValid)
- {
- $manager = $this->Application->Modules['users'];
- $manager->addNewUser($this->username->Text);
-
- //do manual login
- $user = $manager->getUser($this->username->Text);
- $auth = $this->Application->Modules['auth'];
- $auth->updateSessionUser($user);
- $this->Application->User = $user;
-
- $url = $this->Service->constructUrl($this->Service->DefaultPage);
- $this->Response->redirect($url);
- }
-}
-</com:TTextHighlighter>
-Metode <tt>checkUserName()</tt> menggunakan kelas <tt>ChatUserManager</tt>
-(ingat bahwa dalam konfigurasi <tt>config.xml</tt> kita menyetel ID dari kelas manajer pengguna kustom sebagai "users") untuk memvalidasi nama pengguna belum dipakai.
-</p>
-<p id="90095" class="block-content">
-Dalam metode <tt>createNewUser</tt>, Ketika validasi lulus (yaitu ketika nama pengguna belum dipakai) kita menambahkan pengguna baru. Setelah itu kita melakukan proses login secara manual:</p> <ul id="u2" class="block-content">
- <li>Pertama kita peroleh turunan <tt>TUser</tt> dari kelas manajer
-pengguna kita menggunakan metode <tt>$manager->getUser(...)</tt>.</li>
- <li>Menggunakan <tt>TAuthManager</tt> kita menetapkan/memutakhirkan obyek pengguna dalam data sesi saat ini.</li>
- <li>Kemudian kita menetapkan/memutakhirkan turunan <tt>APlikasi</tt> pengguna dengan obyek pengguna baru kita.</li>
-</ul>
-</p>
-<p id="finally" class="block-content">
-Akhirnya, kita mengalihkan klien ke halaman standar <tt>Home</tt>.
-</p>
-
-<h2 id="18021">Nilai Standar untuk ActiveRecord</h2>
-<p id="90096" class="block-content">Jika Anda mencoba untuk melakukan login sekarang, Anda akan menerima pesan kesalahan seperti
-"<i>Property '<tt>ChatUserRecord::$last_activity</tt>' must not be null as defined
-by column '<tt>last_activity</tt>' in table '<tt>chat_users</tt>'.</i>". Ini berarti bahwa nilai properti <tt>$last_activity</tt> adalah null dalam kolom terkait pada tabel dan memboleh nilai null atau menetapkan nilai standar dalam kelas <tt>ChatUserRecord</tt>. Kita akan mendemonstrasikannya nanti dengan mengubah <tt>ChatUserRecord</tt> dengan tambahan dari metode setelan pengambil/pengetap untuk properti <tt>last_activity</tt>.
-
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90039">
-private $_last_activity;
-
-public function getLast_Activity()
-{
- if($this->_last_activity === null)
- $this->_last_activity = time();
- return $this->_last_activity;
-}
-
-public function setLast_Activity($value)
-{
- $this->_last_activity = $value;
-}
-</com:TTextHighlighter>
-Catatan bahwa kita mengganti nama <tt>$last_activity</tt> menjadi <tt>$_last_activity</tt> (perhatikan garis bawah setelah tanda dolar).
-</p>
-
-<h1 id="18013">Aplikasi Chat Utama</h1>
-<p id="90097" class="block-content">Sekarang kita siap untuk membangun aplikasi chat utama. Kita menggunakan tata letak sederhana yang terdiri dari satu panel yang menampung pesan chat, satu panel untuk menampung daftar pengguna, area teks untuk pengguna memasukan pesan teks dan tombol untuk mengirimkan pesan.
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_90040">
-<!doctype html public "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>Prado Chat Demo</title>
-<style>
-.messages
-{
- width: 500px;
- height: 300px;
- float: left;
- border: 1px solid ButtonFace;
- overflow: auto;
-}
-.user-list
-{
- margin-left: 2px;
- float: left;
- width: 180px;
- height: 300px;
- border: 1px solid ButtonFace;
- overflow: auto;
- font-size: 0.85em;
-}
-.message-input
-{
- float: left;
-}
-
-.message-input textarea
-{
- margin-top: 3px;
- padding: 0.4em 0.2em;
- width: 493px;
- font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
- font-size: 0.85em;
- height: 40px;
-}
-.send-button
-{
- margin: 0.5em;
-}
-</style>
-</head>
-<body>
-&lt;com:TForm&gt;
-<h1 id="18014">Prado Chat Demo</h1>
-<div id="messages" class="messages">
- &lt;com:TPlaceHolder ID="messageList" /&gt;
-</div>
-<div id="users" class="user-list">
- &lt;com:TPlaceHolder ID="userList" /&gt;
-</div>
-<div class="message-input">
- &lt;com:TActiveTextBox ID="userinput"
- Columns="40" Rows="2" TextMode="MultiLine" /&gt;
- &lt;com:TActiveButton ID="sendButton" CssClass="send-button"
- Text="Send" /&gt;
-</div>
-&lt;/com:TForm&gt;
-&lt;com:TJavascriptLogger /&gt;
-</body>
-</html>
-</com:TTextHighlighter>
-Kita menambahkan dua komponen Kontrol Aktif: a
-<com:DocLink ClassPath="System.Web.UI.ActiveControls.TActiveTextBox" Text="TActiveTextBox" />
-dan
-<com:DocLink ClassPath="System.Web.UI.ActiveControls.TActiveButton" Text="TActiveButton" />.
-Kita juga menambahkan
-<com:DocLink ClassPath="System.Web.UI.WebControls.TJavascriptLogger" Text="TJavascriptLogger" />
-yang akan sangat berguna untuk mengerti bagaimana Kontrol Aktif bekerja.
-</p>
-
-<h2 id="18022">Menjelajah Kontrol Aktif</h2>
-<p id="90098" class="block-content">Kita sudah mempunyai beberapa kesenangan sebelum kita melanjutkan dengan penyiapan bufer chat. Kita ingin melihat bagaimana kita dapat memutakhirkan halaman saat ini ketika kita menerima sebuah pesan. Pertama, kita menambahkan sebuah tombol
-<tt>OnClick</tt> event handler for the <tt>Send</tt>.
-
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_90041">
-&lt;com:TActiveButton ID="sendButton" CssClass="send-button"
- Text="Send" OnClick="processMessage"/&gt;
-</com:TTextHighlighter>
-Dan metode pengendali event terkait dalam kelas <tt>Home.php</tt> (kita perlu untuk membuat file baru ini juga).
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90042">
-class Home extends TPage
-{
- function processMessage($sender, $param)
- {
- echo $this->userinput->Text;
- }
-}
-</com:TTextHighlighter>
-Jika Anda sekarang mengetikan sesuatu dalam kotak teks aplikasi utama dan mengklik tombol kirim, Anda seharusnya melihat apapun yang Anda ketikan muncul dalam konsol <tt>TJavascriptLogger</tt>.
-</p>
-
-<p id="90099" class="block-content">Untuk menambah atau menambahkan beberapa konten ke panel daftar pesan, kita perlu memakai beberapa metode dalam kelas
-<com:DocLink ClassPath="System.Web.UI.ActiveControls.TCallbackClientScript" Text="TCallbackClientScript" />
-yang tersedia melalui properti <tt>CallbackClient</tt> property dari obyek <tt>TPage</tt> saat ini. Sebagai contoh, kita kita dapat melakukan
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90043">
-function processMessage($sender, $param)
-{
- $this->CallbackClient->appendContent("messages", $this->userinput->Text);
-}
-</com:TTextHighlighter>
-Ini adalah satu cara untuk memutakhirkan beberapa bagian dari halaman yang sudah ada selama callback (AJAX style event) dan akan menjadi cara utama yang akan kita gunakan untuk menerapkan aplikasi chat.
-</p>
-
-<h1 id="18015">Rekaman Aktif untuk tabel <tt>chat_buffer</tt></h1>
-<p id="90100" class="block-content">Untuk mengirimkan pesan ke seluruh pengguna yang tersambung kita memerlukan bufer atau menyimpan pesan untuk setiap pengguna. Kita dapat menggunakan database untuk membufer pesan. Tabel
-<tt>chat_buffer</tt> didefinisikan sebagai berikut.
-<com:TTextHighlighter Language="text" CssClass="source block-content" id="code_90044">
-CREATE TABLE chat_buffer
-(
- id INTEGER PRIMARY KEY,
- for_user VARCHAR(20) NOT NULL,
- from_user VARCHAR(20) NOT NULL,
- message TEXT NOT NULL,
- created_on INTEGER NOT NULL DEFAULT "0"
-);
-</com:TTextHighlighter>
-Kelas <tt>ChatBufferRecord</tt> terkait disimpan sebagai
-<tt>App_Code/ChatBufferRecord.php</tt>.
-
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90045">
-class ChatBufferRecord extends TActiveRecord
-{
- const TABLE='chat_buffer';
-
- public $id;
- public $for_user;
- public $from_user;
- public $message;
- private $_created_on;
-
- public function getCreated_On()
- {
- if($this->_created_on === null)
- $this->_created_on = time();
- return $this->_created_on;
- }
-
- public function setCreated_On($value)
- {
- $this->_created_on = $value;
- }
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
-</com:TTextHighlighter>
-</p>
-
-<h1 id="18016">Logika Aplikasi Chat</h1>
-<p id="90101" class="block-content">Akhirnya kita tiba di kanal logika aplikasi chat. Pertama, kita perlu menyimpan pesan yang diterima ke dalam bufer chat untuk <b>semua</b> pengguna saat ini. Kita menambahkan logika ini dalam kelas <tt>ChatBufferRecord</tt>.
-
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90046">
-public function saveMessage()
-{
- foreach(ChatUserRecord::finder()->findAll() as $user)
- {
- $message = new self;
- $message->for_user = $user->username;
- $message->from_user = $this->from_user;
- $message->message = $this->message;
- $message->save();
- if($user->username == $this->from_user)
- {
- $user->last_activity = time(); //update the last activity;
- $user->save();
- }
- }
-}
-</com:TTextHighlighter>
-Terlebih dahulu kita mencari semua pengguna saat ini menggunkan metode penemu <tt>ChatUserRecord</tt>. Kemudian kita gandakan pesan dan menyompannya ke dalam database. Sebagai tambahan, kita mutakhirkan cap waktu aktivitas terakhir pengirim pesan. Kode di atas memperlihatkan kesederhanaan dan keringkasan dari penggunaan ActiveRecords untuk desain database sederhana.
-</p>
-
-<p id="90102" class="block-content">Logika berikutnya adalah untuk mengambil pesan pengguna dari bufer.
-Kita cukup mengambil semua pesan untuk nama pengguna tertentu dan membentuk pesan itu secar benar (ingat untuk meng-escape output guna menghindari serangan Penaskahan Situs-Silang).
-Setelah kita ambil pesan, kita hapus pesan yang diambil dan pesan lainnya yang lebih lama yang mungkin tertinggal dalam bufer.
-</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90047">
-public function getUserMessages($user)
-{
- $content = '';
- foreach($this->findAll('for_user = ?', $user) as $message)
- $content .= $this->formatMessage($message);
- $this->deleteAll('for_user = ? OR created_on < ?',
- $user, time() - 300); //5 min inactivity
- return $content;
-}
-
-protected function formatMessage($message)
-{
- $user = htmlspecialchars($message->from_user);
- $content = htmlspecialchars($message->message);
- return "<div class=\"message\"><strong>{$user}:</strong>"
- ." <span>{$content}</span></div>";
-}
-</com:TTextHighlighter>
-
-Untuk mengambil daftar dari pengguna saat ini (terformat), kita menambahkan logika kelas ini
-<tt>ChatUserRecord</tt>. Kita menghapus setiap pengguna yang sudah tidak aktif untuk beberapa waktu.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90048">
-public function getUserList()
-{
- $this->deleteAll('last_activity < ?', time()-300); //5 min inactivity
- $content = '<ul>';
- foreach($this->findAll() as $user)
- $content .= '<li>'.htmlspecialchars($user->username).'</li>';
- $content .= '</ul>';
- return $content;
-}
-</com:TTextHighlighter>
-
-<div class="note"><b class="tip">Catatan:</b>
-Untuk kemudahan kita membentuk pesan dalam kelas Rekaman Aktif. Untuk aplikasi besar, tugas pembentukan pesan ini harus dilakukan menggunakan komponen Prado (contohnya menggunakan TRepeater dalam template atau komponen kustom).
-</div>
-</p>
-
-<h1 id="18017">Menyatukan Semuanya</h1>
-<p id="90103" class="block-content">Sekarang waktunya untuk menyatukan alur aplikasi secara keseluruhan. Dalam <tt>Home.php</tt> kita memutakhirkan tombol <tt>Send</tt> pengendali event <tt>OnClick</tt> untuk menggunakan logika aplikasi yang baru saja kita implementasikan.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90049">
-function processMessage($sender, $param)
-{
- if(strlen($this->userinput->Text) > 0)
- {
- $record = new ChatBufferRecord();
- $record->message = $this->userinput->Text;
- $record->from_user = $this->Application->User->Name;
- $record->saveMessage();
-
- $this->userinput->Text = '';
- $messages = $record->getUserMessages($this->Application->User->Name);
- $this->CallbackClient->appendContent("messages", $messages);
- $this->CallbackClient->focus($this->userinput);
- }
-}
-</com:TTextHighlighter>
-Kita cukup menyimpan pesan ke bufer chat dan kemudian meminta semua pesan untuk pengguna saat ini dan memutakhirkan pesan sisi klien menggunakan respon callback
-(gaya AJAX).
-</p>
-
-<p id="90104" class="block-content">Pada titik ini aplikasi sebenarnya sudah berfungsi, cuma tidak bersahabat. Jika Anda membuka dua browser berbeda, Anda seharusnya bisa berkomunikasi diantara dua pengguna kapan saja tombol <tt>Send</tt> diklik.
-</p>
-
-<p id="90105" class="block-content">Bagian berikutnya barangkali lebih rumit dan mengakali daripada tugas lainnya. Kita perlu untuk meningkatkan pengalaman pengguna. Pertama, kita menginginkan daftar pengguna saat ini juga. Maka kita menambahkan metode berikut ke <tt>Home.php</tt>, kita dapat memanggil metode ini kapan saja beberapa event callback dimunculkan, misalnya saat tombol <tt>Send</tt> diklik.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90050">
-protected function refreshUserList()
-{
- $lastUpdate = $this->getViewState('userList','');
- $users = ChatUserRecord::finder()->getUserList();
- if($lastUpdate != $users)
- {
- $this->CallbackClient->update('users', $users);
- $this->setViewstate('userList', $users);
- }
-}
-</com:TTextHighlighter>
-</p>
-
-<p id="90106" class="block-content">Sebenarnya, kita menginginkan untuk secara
-periodik memutakhirkan pesan dan daftar pengguna saat pengguna baru bergabung
-dan pesan baru yang datang dari pengguna lainnya. Maka kita perlu untuk menyegarkan
-daftar pesan juga.</p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90051">
-function processMessage($sender, $param)
-{
- ...
- $this->refreshUserList();
- $this->refreshMessageList();
- ...
-}
-
-protected function refreshMessageList()
-{
- //refresh the message list
- $finder = ChatBufferRecord::finder();
- $content = $finder->getUserMessages($this->Application->User->Name);
- if(strlen($content) > 0)
- {
- $anchor = (string)time();
- $content .= "<a href=\"#\" id=\"{$anchor}\"> </a>";
- $this->CallbackClient->appendContent("messages", $content);
- $this->CallbackClient->focus($anchor);
- }
-}
-</com:TTextHighlighter>
-Jangkar menggunakan <tt>time()</tt> sebagai ID untuk titik fokus agar saat daftar
-pesan pada sisi klien diperoleh sangat lama, metode fokus akan menggulung daftar
-pesan ke pesan terbaru (ini bekerja baik pada umumnya browser).
-</p>
-
-<p id="90107" class="block-content">Selanjutnya, kita perlu mengalihkan pengguna
-kembali ke halaman login jika pengguna tidak aktif untuk beberapa waktum
-katakanlah 5 menit, kita menambahkan pemeriksaan ini ke setiap tahap dari masa hidup
-halaman. Mari menambahkannya ke tahapan <tt>onLoad()</tt>.
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90052">
-public function onLoad($param)
-{
- $username = $this->Application->User->Name;
- if(!$this->Application->Modules['users']->usernameExists($username))
- {
- $auth = $this->Application->Modules['auth'];
- $auth->logout();
-
- //redirect to login page.
- $this->Response->Redirect($this->Service->ConstructUrl($auth->LoginPage));
- }
-}
-</com:TTextHighlighter>
-</p>
-
-<h1 id="18018">Memperbaiki Pengalaman Pengguna</h1>
-<p id="90108" class="block-content">Beberapa rincian terakhir secara periodeik memeriksa
-pesan baru dan menyegarkan daftar pengguna. Kita bisa melakukan ini dengan menanyakan
-server menggunakan kontrol
-<com:DocLink ClassPath="System.Web.UI.ActiveControls.TTimeTriggeredCallback" Text="TTimeTriggeredCallback" />.
-Kita menambahkan tt>TTimeTriggeredCallback</tt> ke <tt>Home.page</tt> dan memanggil
-metode pengendali <tt>refresh</tt> yang didefinisikan dalam <tt>Home.php</tt>.
-Kita setel interval pertanyaan menjadi 2 detik.
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code_90053">
-&lt;com:TTimeTriggeredCallback OnCallback="refresh"
- Interval="2" StartTimerOnLoad="true" /&gt;
-</com:TTextHighlighter>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_90054">
-function refresh($sender, $param)
-{
- $this->refreshUserList();
- $this->refreshMessageList();
-}
-</com:TTextHighlighter>
-</p>
-
-<p id="90109" class="block-content">Langkah terakhir memerlukan kita untuk menggunakan beberapa javascript. Kita menginginkan bahwa saat pengguna mengetikan beberapa teks dalam area teks dan menekan tombol <tt>Enter</tt>, kita menginginkannya untuk mengirimkan pesan tanpa mengklik tombol <tt>Send</tt>. Kita menambahkan beberapa javascript ke
-<tt>Home.page</tt>.
-
-<com:TTextHighlighter Language="javascript" CssClass="source block-content" id="code_90055">
-&lt;com:TClientScript&gt;
-Event.observe($("&lt;%= $this->userinput->ClientID %&gt;"), "keypress", function(ev)
-{
- if(Event.keyCode(ev) == Event.KEY_RETURN)
- {
- if(Event.element(ev).value.length > 0)
- new Prado.Callback("&lt;%= $this->sendButton->UniqueID %&gt;");
- Event.stop(ev);
- }
-});
-&lt;/com:TClientScript&gt;
-</com:TTextHighlighter>
-Rincian sehubungan dengan javascript bisa dilihat dalam seksi
-<a href="?page=Advanced.Scripts">Pengenalan Javascript</a> pada tutorial cepat.
-</p>
-
-<p id="90110" class="block-content">Ini melengkapi tutorial untuk membuat aplikasi chat web menggunakan kerangka kerja Prado. Diharapkan Anda menikmatinya.
-</p>
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Tutorial/id/CurrencyConverter.page b/demos/quickstart/protected/pages/Tutorial/id/CurrencyConverter.page
deleted file mode 100755
index c1eae035..00000000
--- a/demos/quickstart/protected/pages/Tutorial/id/CurrencyConverter.page
+++ /dev/null
@@ -1,349 +0,0 @@
-<com:TContent ID="body">
- <h1 id="16001">Membangun Pengubah Kurs Sederhana</h1>
- <p id="80053" class="block-content">Tutorial ini memperkenalkan kerangka kerja aplikasi web Prado dan mengajarkan Anda bagaimana untuk
- membangun aplikasi web sederhana dalam beberapa langkah sederhana. Tutorial
- ini menganggap bahwa Anda terbiasa dengan PHP dan Anda telah mengakses
- server web yang dapat melayani naskah PHP5.
- </p>
-
- <p id="80054" class="block-content">Dalam tutorial ini Anda akan membangun aplikasi web sederhana yang mengubah
- nilai dolar ke kurs lain, nilai kurs yang disediakan untuk kurs tersebut relatif terhadap dolar. Aplikasi lengkap ditampilkan di bawah ini.
- <img src=<%~ example2.png %> class="figure" />
- Anda dapat mencoba aplikasi <a href="../currency-converter/index.php">secara lokal</a> atau di
- <a href="http://www.pradosoft.com/demos/currency-converter/">Pradosoft.com</a>.
- Catatan bahwa aplikasi masih berfungsi sama persis apabila javascript tidak tersedia pada browser pengguna.
- </p>
-
- <h1 id="download">Men-download dan Menginstalasi Prado</h1>
- <p id="80055" class="block-content">Untuk menginstalasi Prado, cukup download versi terbaru Prado dari
- <a href="http://www.pradosoft.com/">http://www.pradosoft.com</a>
- dan uraikan file ke sebuah direktori yang <b>tidak</b> dapat diakses oleh server web Anda (Anda dapat menguraikannya ke sebuah direktori yang dapat diakses oleh server web jika Anda ingin melihat demo dan pengujian). Untuk instalasi lebih rinci, lihat bimbingan
- <a href="?page=GettingStarted.Installation">Instalasi Cepat</a>.
- </p>
-
- <h1 id="16002">Membuat Aplikasi web Prado baru</h1>
- <p id="80056" class="block-content">Cara tercepat dan termudah untuk membuat aplikasi web Prado baru adalah menggunakan piranti perintah <tt>prado-cli.php</tt> yang ditemukan dalam direktori <tt>framework</tt>
- pada distribusi Prado. Kita membuat aplikasi baru dengan menjalankan perintah berikut dalam prompt perintah atau konsol Anda. Perintah membuat direktori baru bernama <tt>currency-converter</tt> dalam direktori kerja Anda saat ini.
- Anda perlu mengubahnya ke direktori yang benar terlebih dahulu.
- Lihat <a href="?page=GettingStarted.CommandLine">Piranti Baris Perintah</a>
- untuk lebih jelasnya.
- </p>
-<com:TTextHighlighter Language="text" CssClass="source block-content" id="code111">
-php prado/framework/prado-cli.php -c currency-converter
-</com:TTextHighlighter>
-
- <p id="80057" class="block-content">Perintah di atas membuat struktur direktori yang diperlukan dan file minimal (termasuk "index.php" dan "Home.page") untuk menjalankan aplikasi Prado.
- Sekarang Anda dapat mengarahkan url browser Anda ke server web untuk melayani naskah <tt>index.php</tt> dalam direktori <tt>currency-converter</tt>.
- Seharusnya Anda melihat pesan "Welcome to Prado!"
- </p>
-
- <h1 id="16003">Membuat Antarmuka Pengguna Pengubah Kurs</h1>
- <p id="80058" class="block-content">Kita mulai dengan mengedit file <tt>Home.page</tt> yang ditemukan dalam direktori <tt>currency-converter/protected/pages/</tt>. File yang berakhiran dengan ".page" adalah template halaman yang berisi HTML dan kontrol Prado.
- Kita cukup menambah dua kotak teks, tiga label dan satu tombol seperti berikut.
- </p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="form1">
-&lt;com:TForm&gt;
- <fieldset>
- <legend>Currency Converter</legend>
- <div class="rate-field">
- &lt;com:TLabel ForControl="currencyRate" Text="Exchange Rate per $1:" /&gt;
- &lt;com:TTextBox ID="currencyRate" /&gt;
- </div>
- <div class="dollar-field">
- &lt;com:TLabel ForControl="dollars" Text="Dollars to Convert:" /&gt;
- &lt;com:TTextBox ID="dollars" /&gt;
- </div>
- <div class="total-field">
- <span class="total-label">Amount in Other Currency:</span>
- &lt;com:TLabel ID="total" CssClass="result" /&gt;
- </div>
- <div class="convert-button">
- &lt;com:TButton Text="Convert" /&gt;
- </div>
- </fieldset>
-&lt;/com:TForm&gt;
-</com:TTextHighlighter>
- <p id="refresh" class="block-content">
- Jika Anda menyegarkan halaman, Anda akan melihat sesuatu mirip dengan gambar berikut.
- Ia mungkin terlihat tidak cukup bagus atau berurut, tapi kita akan mengubahnya nanti dengan menggunakan CSS.
- <img src=<%~ example1.png %> class="figure" />
- </p>
-
- <p id="80059" class="block-content">
- Komponen pertama yang kita tambahkan adalah
- <com:DocLink ClassPath="System.Web.UI.TForm" Text="TForm" />
- yang pada dasarnya terkait ke elemen HTML <tt>&lt;form&gt;</tt>.
- Dalam Prado, hanya <b>satu</b> elemen <tt>TForm</tt> dibolehkan per halaman.
- </p>
-
- <p id="80060" class="block-content">Dua pasang komponen berikutnya yang kita tambahkan adalah
- <com:DocLink ClassPath="System.Web.UI.WebControls.TLabel" Text="TLabel" />
- dan
- <com:DocLink ClassPath="System.Web.UI.WebControls.TTextBox" Text="TTextBox" />
- yang pada dasarnya mendefinisikan sebuah label dan kotak teks bagi pengguna aplikasi
- untuk memasukan nilai pertukaran kurs.
- Nilai properti <tt>ForControl</tt> property menentukan komponen mana label
- diperuntukan. Ini membolehkan pengguna aplikasi mengklik pada label
- untuk memfokuskan pada field (hal yang baik). Anda mungkin telah menggunakan elemen
- biasa HTML <tt>&lt;label&gt;</tt> untuk melakukan hal yang sama, tapi
- Anda harus mencari <tt>ID</tt> yang benar pada kotak teks (atau
- <tt>&lt;input&gt;</tt> dalam HTML) karena komponen Prado dapat/mungkin menyajikan
- nilai <tt>ID</tt> secara berbeda dalam output HTML.
- </p>
-
- <p id="80061" class="block-content">Pasangan komponen berikutnya adalah sama dan mendefinisikan
- kotak teks guna menampung nilai dolar yang akan dikonversi.
- <tt>TLabel</tt> dengan nilai <tt>ID</tt> "total" mendefinisikan label sederhana.
- Catatan bahwa properti <tt>ForControl</tt> tidak ada. Ini berarti bahwa label ini
- merupakan sebuah label yang akan dipakai untuk menampilkan jumlah total yang dikonversi.
- </p>
-
- <p id="80062" class="block-content">Komponen terakhir adalah
- <com:DocLink ClassPath="System.Web.UI.WebControls.TButton" Text="TButton" />
- yang akan diklik oleh pengguna untuk menghitung hasil. Properti <tt>Text</tt>
- menetapkan label tombol.
- </p>
-
- <h1 id="16004">Mengimplementasikan Konversi Kurs</h1>
-
- <p id="80063" class="block-content">Jika Anda mencoba mengklik pada tombol "Convert" kemudian halaman akan menyegarkan
- dan tidak melakukan apapun. Agar tombol melakukan beberapa pekerjaan, kita perlu
- menambahkan "Home.php" ke di mana "Home.page" berada. Kelas <tt>Home</tt> harus
- memperluas <com:DocLink ClassPath="System.Web.UI.TPage" Text="TPage" />, basis kelas standar untuk semua halaman Prado.
- </p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code3">
-&lt;?php
-class Home extends TPage
-{
-
-}
-</com:TTextHighlighter>
- <p id="1111" class="block-content">
- Prado menggunakan metode PHP <tt>__autoload</tt> untuk mengambil kelas. Konvensi
- adalah untuk menggunakan nama kelas dengan ekstensi ".php" sebagai nama file.
- </p>
-
- <p id="80064" class="block-content">Sejauh ini tidak ada hal menarik mengenai Prado, kita hanya mendeklarasikan beberapa
- "komponen web" dalam beberapa file template bernama Home.page dan membuat
- sebuah file "Home.php" dengan kelas <tt>Home</tt>. Sedikit yang lebih menarik adalah
- arsitektur kendali-event Prado seperti yang akan kita lihat nanti.
- </p>
-
- <p id="80065" class="block-content">Kita menginginkan bahwa saat pengguna mengklik tombol "Convert", kita mengambil
- nilai dalam kotak teks, melakukan beberapa perhitungan dan menyajikan kepada pengguna dengan
- total nilai yang dikonversi. Untuk menangani pengguna mengklik pada tombo "Convert",
- kita cukup menambahkan sebuah properti <tt>OnClick</tt> ke tombol "Convert" dalam
- template "Home.page" dan menambahkan metode pengendali event terkait dalam "Home.php".
- </p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code4">
-&lt;com:TButton Text="Convert" OnClick="convert_clicked" /&gt;
-</com:TTextHighlighter>
- <p id="222" class="block-content">
- Nilai dari <tt>OnClick</tt>, "<tt>convert_clicked</tt>", akan menjadi nama metode
- dalam "Home.php" yang akan dipanggil saat pengguna mengklik tombol "Convert".
- </p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code5">
-class Home extends TPage
-{
- public function convert_clicked($sender, $param)
- {
- $rate = floatval($this->currencyRate->Text);
- $dollars = floatval($this->dollars->Text);
- $this->total->Text = $rate * $dollars;
- }
-}
-</com:TTextHighlighter>
-<div id="3332" class="block-content">
- <p id="333">
- Jika Anda menjalankan aplikasi dalam web browser Anda, masukkan beberapa nilai
- dan klik tombol "Convert" kemudian Anda akan melihat nilai yang dihitung ditampilkan
- di dekat label "Amount in Other Currency".
- </p>
-
- <p id="80066">Dalam metode "<tt>convert_clicked</tt>" parameter pertama, <tt>$sender</tt>,
- berhubungan dengan obyek yang memunculkan event, dalam hal ini, tombol
- "Convert". Parameter kedua, <tt>$param</tt> berisi data tambahan lain
- di mana obyek <tt>$sender</tt> yang ingin ditambahkan.
- </p>
-
- <p id="80067">Sekarang kita akan memeriksa, tiga baris yang mengimplementasikan konversi
- kurs sederhana dalam metode "<tt>convert_clicked</tt>".
- </p>
-</div>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code6" >
-$rate = floatval($this->currencyRate->Text);
-</com:TTextHighlighter>
- <p id="444" class="block-content">
- Pernyataan <tt>$this->currencyRate</tt> berhubungan dengan komponen
- <tt>TTextBox</tt> dengan nilai <tt>ID</tt> "currencyRate" dalam template
- "Home.page". Properti <tt>Text</tt> dari <tt>TTextBox</tt> berisi
- nilai yang dimasukan oleh pengguna. Maka kita memperoleh nilai ini dengan
- <tt>$this->currencyRate->Text</tt> yang kita konversi nilainya ke nilai
- pecahan.
- </p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code7">
-$dollars = floatval($this->dollars->Text);
-</com:TTextHighlighter>
-<div id="5551" class="block-content">
- <p id="555">
- Baris berikutnya melakukan hal yang mirip, ia mengambil nilai pengguna
- dari <tt>TTextBox</tt> dengan nilai <tt>ID</tt> "dollars dang mengubahnya
- ke nilai pecahan.
- </p>
-
- <p id="80068">Baris ketiga menghitung jumlah baru dan menyetel nilai ini dalam properti
- <tt>Text</tt> dari <tt>TLabel</tt> dengan <tt>ID="total"</tt>.
- Selanjutnya, kita tampilkan jumlah baru ke pengguna dalam label.
- </p>
-</div>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code8">
-$this->total->Text = $rate * $dollars;
-</com:TTextHighlighter>
-
- <h1 id="16005">Menambahkan Validasi</h1>
- <p id="80069" class="block-content">Cara kita mengubah nilai yang dimasukan oleh pengguna ke pecahan memastikan bahwa jumlah total selalu sebuah angka. Maka pengguna bebas untuk memasukan apapun yang mereka sukai, bahkan mereka dapat memasukan huruf. Pengalaman pengguna dalam pemakaian aplikasi dapat ditingkatkan dengan menambahkan validator untuk memberitahu pengguna atas nilai yang dibolehkan dalam kurs mata uang dan jumlah yang akan dihitung.
- </p>
-
- <p id="80070">Untuk kurs mata uang, kita harus memastikan bahwa</p>
- <ol id="o111" class="block-content">
- <li>pengguna memasukan sebuah nilai,</li>
- <li>kurs mata uang adalah angka yang benar,</li>
- <li>kurs mata uang adalah positif.</li>
- </ol>
- <p id="666" class="block-content">
- Untuk memastikan poin 1 kita menambahkan satu
- <com:DocLink ClassPath="System.Web.UI.WebControls.TRequiredFieldValidator" Text="TRequiredFieldValidator" />. Untuk memastikan poin 2 dan 3, kita menambahkan satu <com:DocLink ClassPath="System.Web.UI.WebControls.TCompareValidator" Text="TCompareValidator" />. Kita dapat menambahkan validator ini di mana saja di dalam template "Home.page". Perincian selanjutnya mengenai validator ini dan validator lainnya dapat ditemukan dalam halaman
- <a href="?page=Controls.Validation">Validation Controls</a>.
- </p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code9">
-&lt;com:TRequiredFieldValidator
- ControlToValidate="currencyRate"
- ErrorMessage="Please enter a currency rate." /&gt;
-&lt;com:TCompareValidator
- ControlToValidate="currencyRate"
- DataType="Float"
- ValueToCompare="0"
- Operator="GreaterThan"
- ErrorMessage="Please enter a positive currency rate." /&gt;
-</com:TTextHighlighter>
-
- <p id="80071" >Untuk jumlah yang dihitung, kita harus memastikan bahwa</p>
- <ol id="o222" class="block-content">
- <li>pengguna memasukan sebuah nilai,</li>
- <li>nilai adalah angka yang benar (tidak menyertakan tanda kurs atau dolar).</li>
- </ol>
- <p id="777" class="block-content">
- Untuk memastikan 1 kita cukup menambahkan <tt>TRequiredFieldValidator</tt> lainnya, untuk 2
- kita dapat menggunakan
- <com:DocLink ClassPath="System.Web.UI.WebControls.TDataTypeValidator" Text="TDataTypeValidator" />. Untuk memudahkan kita hanya membolehkan pengguna untuk memasukan sebuah angka untuk jumlah yang ingin mereka ubah.
- </p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code9a">
-&lt;com:TRequiredFieldValidator
- ControlToValidate="dollars"
- ErrorMessage="Please enter the amount you wish to calculate." /&gt;
-&lt;com:TDataTypeValidator
- ControlToValidate="dollars"
- DataType="Float"
- ErrorMessage="Please enter a number." /&gt;
-</com:TTextHighlighter>
- </p>
-
- <p id="80072" class="block-content">Sekarang jika Anda mencoba memasukan beberapa data tidak benar dalam aplikasi atau membiarkan field kosong
- validators akan diaktifkan dan menyajikan pesan kesalahan kepada pengguna. Catatan bahwa pesan kesalahan disajikan tanpa mengambil ulang halaman. Validator Prado standarnya memvalidasi javascript dan di dalam server. Validasi di dalam server <b>selalu dilakukan</b>. Untuk sisi server, kita harus melewati perhitungan jika validator tidak memuaskan. Ini dapat dilakukan seperti berikut.
- </p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code10" >
-public function convert_clicked($sender, $param)
-{
- if($this->Page->IsValid)
- {
- $rate = floatval($this->currencyRate->Text);
- $dollars = floatval($this->dollars->Text);
- $this->total->Text = $rate * $dollars;
- }
-}
-</com:TTextHighlighter>
-
- <h1 id="16006">Meningkatkan Pengalaman Pengguna Dengan Kontrol Aktif</h1>
-
- <com:RequiresVersion Version="3.1a" />
-
- <p id="80073" class="block-content">Dalam aplikasi sederhana selanjutnya kita dapat
-memperbaiki pengalaman pengguna dengan meningkatkan tanggapan aplikasi. Satu cara untuk mencapai respon tercepat adalah menghitung dan menyajikan hasil tanpa mengambil ulang seluruh halaman.
- </p>
-
- <p id="80074" class="block-content">Kita dapat mengganti <tt>TButton</tt> dengan pasangan Kontrol Aktif,
- <com:DocLink ClassPath="System.Web.UI.ActiveControls.TActiveButton" Text="TActiveButton" />,
- yang dapat memicu event klik di dalam server tanpa mengambil ulang halaman.
- Sebagai tambahan, kita dapat mengubah "total" <tt>TLabel</tt> dengan pasangan Kontrol Aktif,
- <com:DocLink ClassPath="System.Web.UI.ActiveControls.TActiveLabel" Text="TActiveLabel" />, dengan demikian di dalam server dapat memutakhirkan browser tanpa mengambil ulang halaman.
- </p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code11">
-<div class="total-field">
- <span class="total-label">Amount in Other Currency:</span>
- &lt;com:TActiveLabel ID="total" CssClass="result" /&gt;
- </div>
- <div class="convert-button">
- &lt;com:TActiveButton Text="Convert" OnClick="convert_clicked" /&gt;
-</div>
-</com:TTextHighlighter>
- <p id="1232" class="block-content">
- Logika di dalam server tetap sama, kita hanya perlu mengimpor
- ruang nama Kontrol Aktif karena secara standar tidak disertakan. Kita menambahkan baris berikut ke awal "Home.php".
- </p>
-<com:TTextHighlighter Language="php" CssClass="source block-content" id="code12">
-Prado::using('System.Web.UI.ActiveControls.*');
-</com:TTextHighlighter>
-
- <p id="80075" class="block-content">Jika Anda mencoba aplikasi sekarang, Anda akan melihat bahwa halaman tidak perlu lagi mengambil ulang untuk menghitung dan menampilkan jumlah total yang dikonversi.
- Akan tetapi, karena di sana tidak ada pengambilan halaman ulang, tidak ada petunjuk atau tidak jelas bahwa dengan mengklik pada tombol "Convert" telah terjadi.
- Selanjutnya kita bisa memperbaiki pengalaman pengguna dengan mengunah label teks "total" menjadi "calculating..." saat pengguna mengklik tombol "Convert". Label teks "total" masih dimutakhirkan dengan jumlah perhitungan baru seperti sebelumnya.
- </p>
-
- <p id="80076" class="block-content">Untuk mengindikasikan bahwa perhitungan sedang berlangsung, kita dapat mengubah label teks "total" sebagai berikut. Kita menambahkan properti <tt>ClientSide.OnLoading</tt> ke tombol "Convert" (karena tombol ini bertanggung jawab terhadap permintaan perhitungan).
- </p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code13">
-&lt;com:TActiveButton Text="Convert" OnClick="convert_clicked" &gt;
- &lt;prop:ClientSide.OnLoading&gt;
- $('&lt;%= $this->total->ClientID %&gt;').innerHTML = "calculating..."
- &lt;/prop:ClientSide.OnLoading&gt;
-&lt;/com:TActiveButton&gt;
-</com:TTextHighlighter>
-
- <p id="80077" class="block-content"><tt>ClientSide.OnLoading</tt> dan berbagai
- <com:DocLink ClassPath="System.Web.UI.ActiveControls.TCallbackClientSide" Text="properti lainnya" /> menerima blok javascript sebagai konten atau nilainya.
- Kode javascript <tt>$('...')</tt> adalah fungsi javascript sama dengan <tt>document.getElementById('...')</tt> yang mengambil string dengan ID dari elemen HTML. Karena Prado menyajikan ID komponennya, kita perlu menggunakan ID yang disajikan dari label "total", yakni <tt>$this->total->ClientID</tt>. Kita tempatkan sedikit kode ini ini di dalam <tt>&lt;%= %&gt;</tt> untuk memperoleh ID HTML yang disajikan untuk label "total". Kode javascript sisanya <tt>innerHTML = "calculating..."</tt> cukup mengubah konten label "total".
- </p>
-
- <h1 id="16007">Menambahkan Sentuhan Akhir</h1>
- <p id="80078" class="block-content">Sejauh ini kita telah membangun aplikasi web pengubah kurs sederhana dengan sedikit perhatian terhadap penampilannya. Sekarang kita dapat menambahkan stylesheet guna meningkatkan penampilan secara keseluruhan aplikasi. Kita cukup menambahkan inline stylesheet dengan kode template atau kita membuat sebuah "tema".
- </p>
-
- <p id="80079" class="block-content">Untuk membuat dan menggunakan tema dengan aplikasi Prado, kita membuat direktori baru "themes/Basic" dalam direktori <tt>currency-converter</tt>.
- Anda mungkin perlu untuk membuat direktori <tt>themes</tt> lebih dahulu. Direktori apapun di dalam <tt>themes</tt> dianggap sebagai tema dengan nama temanya adalah nama direktori. Lihat
- <a href="?page=Advanced.Themes">Tema dan Skin</a> untuk lebih jelasnya.
- </p>
-
- <p id="80080" class="block-content">Kita cukup dengan membuat file CSS bernama "common.css" dan menyimpannya dalam direktori
- <tt>themes/Basic</tt>. Kemudian kita menambahkan kode berikut ke awal "Home.page" (kita menambahkan sedikit kode HTML juga).
- </p>
-<com:TTextHighlighter Language="prado" CssClass="source block-content" id="code14">
-&lt;%@ Theme="Basic" %&gt;
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
-&lt;com:THead Title="Currency Converter" /&gt;
-<body>
-</com:TTextHighlighter>
- <p id="4334" class="block-content">
- Baris pertama <tt>&lt;%@ Theme="Basic" %&gt;</tt> mendefinisikan tema
- yang dipakai untuk halaman ini.
- <com:DocLink ClassPath="System.Web.UI.WebControls.THead" Text="THead" />
- merujuk ke elemen HTML <tt>&lt;head&gt;</tt>. Sebagai tambahan terhadap
- tampilan properti <tt>Title</tt> pada <tt>THead</tt>, semua file CSS
- dalam direktori <tt>themes/Basic</tt> juga disajikan/dikaitkan untuk
- halaman saat ini. Aplikasi web pengubah kurs final kita terlihat seperti
- berikut.
- <img src=<%~ example2.png %> class="figure" />
- Tutorial pengenalan lengkap terhadap kerangka kerja aplikasi web Prado.
- </p>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/Tutorial/id/chat1.png b/demos/quickstart/protected/pages/Tutorial/id/chat1.png
deleted file mode 100755
index 8288b496..00000000
--- a/demos/quickstart/protected/pages/Tutorial/id/chat1.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Tutorial/id/chat2.png b/demos/quickstart/protected/pages/Tutorial/id/chat2.png
deleted file mode 100755
index 97cbc51d..00000000
--- a/demos/quickstart/protected/pages/Tutorial/id/chat2.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Tutorial/id/example1.png b/demos/quickstart/protected/pages/Tutorial/id/example1.png
deleted file mode 100755
index 0c7da7ba..00000000
--- a/demos/quickstart/protected/pages/Tutorial/id/example1.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/Tutorial/id/example2.png b/demos/quickstart/protected/pages/Tutorial/id/example2.png
deleted file mode 100755
index 1df56cfb..00000000
--- a/demos/quickstart/protected/pages/Tutorial/id/example2.png
+++ /dev/null
Binary files differ
diff --git a/demos/quickstart/protected/pages/pl/Construction.page b/demos/quickstart/protected/pages/pl/Construction.page
deleted file mode 100755
index dff18284..00000000
--- a/demos/quickstart/protected/pages/pl/Construction.page
+++ /dev/null
@@ -1,5 +0,0 @@
-<com:TContent ID="body">
-
-Przepraszamy, ta strona jest w trakcie tworzenia. Proszę sprawdź później.
-
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/pl/Search.page b/demos/quickstart/protected/pages/pl/Search.page
deleted file mode 100755
index 859f2619..00000000
--- a/demos/quickstart/protected/pages/pl/Search.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<com:TContent ID="body">
-<div class="quicksearch">
- <div class="search">
- <com:SearchBox ID="search" />
- </div>
-
- <com:TRepeater id="quickstart_results">
- <prop:HeaderTemplate>
- <div class="searchHeader">
- <%# $this->Parent->DataSource->Count %> znalezionych w Quickstart Tutorial.
- </div>
- </prop:HeaderTemplate>
- <prop:ItemTemplate>
- <div class="searchItem">
- <div class="searchItemLink">
- <%# $this->ItemIndex + 1 %>.
- <a href="<%# $this->DataItem->link %>">
- <%# $this->DataItem->title %>
- </a>
- </div>
- <p class="searchItemBody"><%# $this->Page->HighlightSearch($this->DataItem->text) %></p>
- </div>
- </prop:ItemTemplate>
- </com:TRepeater>
- <com:TPanel id="emptyResult" CssClass="empty_search_result" Visible="false">
- Nie znaleziono żadnych rezultatów dla frazy "<%= htmlentities($this->Page->search->Text) %>".
- </com:TPanel>
-</div>
-</com:TContent>
diff --git a/demos/quickstart/protected/pages/pl/ViewSource.page b/demos/quickstart/protected/pages/pl/ViewSource.page
deleted file mode 100755
index 8d5e0574..00000000
--- a/demos/quickstart/protected/pages/pl/ViewSource.page
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
-
-<com:THead Title="Podgląd źródeł w PRADO QuickStart">
-<meta http-equiv="content-language" content="en"/>
-</com:THead>
-
-<body>
-<com:TForm>
-<div id="sourceList">
-<table border="0">
-<com:TRepeater ID="SourceList">
-<prop:ItemTemplate>
-<tr>
- <td align="right"><%# $this->DataItem['type']%>:</td>
- <td><a href="<%# $this->DataItem['active']?'':$this->DataItem['url']%>"><%# $this->DataItem['name']%></a></td>
-</tr>
-</prop:ItemTemplate>
-</com:TRepeater>
-</table>
-<com:TCheckBox ID="showNumbers" Text="Pokaż numery linii" Checked="true" AutoPostBack="true" />
-</div>
-<div id="sourceView">
-<h3 style="text-align:center"><%= $this->FilePath %></h3>
-<com:TTextHighlighter ID="Highlighter" ShowLineNumbers=<%= $this->showNumbers->Checked %> CssClass="source">
-<com:TLiteral ID="SourceView" />
-</com:TTextHighlighter>
-</div>
-</com:TForm>
-</body>
-</html> \ No newline at end of file
diff --git a/demos/quickstart/themes/PradoSoft/pradologo.gif b/demos/quickstart/themes/PradoSoft/pradologo.gif
index 3b073b80..20ecf815 100755..100644
--- a/demos/quickstart/themes/PradoSoft/pradologo.gif
+++ b/demos/quickstart/themes/PradoSoft/pradologo.gif
Binary files differ
diff --git a/demos/site/.htaccess b/demos/site/.htaccess
new file mode 100644
index 00000000..cd03b45e
--- /dev/null
+++ b/demos/site/.htaccess
@@ -0,0 +1,8 @@
+<IfModule mod_rewrite.c>
+RewriteEngine on
+
+RewriteCond %{REQUEST_FILENAME} !-d
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteRule ^(.*)$ index.php/$1 [L]
+
+</IfModule> \ No newline at end of file
diff --git a/demos/site/assets/.gitignore b/demos/site/assets/.gitignore
new file mode 100755
index 00000000..d6b7ef32
--- /dev/null
+++ b/demos/site/assets/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/demos/site/index.php b/demos/site/index.php
new file mode 100755
index 00000000..0192f1cb
--- /dev/null
+++ b/demos/site/index.php
@@ -0,0 +1,17 @@
+<?php
+
+$basePath=dirname(__FILE__);
+$frameworkPath=$basePath.'/../../framework/prado.php';
+$assetsPath=$basePath.'/assets';
+$runtimePath=$basePath.'/protected/runtime';
+
+if(!is_writable($assetsPath))
+ die("Please make sure that the directory $assetsPath is writable by Web server process.");
+if(!is_writable($runtimePath))
+ die("Please make sure that the directory $runtimePath is writable by Web server process.");
+
+require_once($frameworkPath);
+
+$application=new TApplication;
+$application->run();
+
diff --git a/demos/site/protected/.htaccess b/demos/site/protected/.htaccess
new file mode 100755
index 00000000..8d2f2563
--- /dev/null
+++ b/demos/site/protected/.htaccess
@@ -0,0 +1 @@
+deny from all
diff --git a/demos/site/protected/Common/SimpleMenu.php b/demos/site/protected/Common/SimpleMenu.php
new file mode 100644
index 00000000..bcbc94cf
--- /dev/null
+++ b/demos/site/protected/Common/SimpleMenu.php
@@ -0,0 +1,86 @@
+<?php
+
+class SimpleMenu extends TControl
+{
+ public function addParsedObject($object)
+ {
+ if ($object instanceof SimpleMenuItem)
+ parent::addParsedObject($object);
+ }
+
+ public function render($writer)
+ {
+ $writer->renderBeginTag("ul");
+ parent::renderChildren($writer);
+ $writer->renderEndTag();
+ }
+
+}
+
+class SimpleMenuItem extends TControl
+{
+
+ public function getPath()
+ {
+ return $this->getControlState("Path", null);
+ }
+
+ public function setPath($value)
+ {
+ $this->setControlState("Path", TPropertyValue::ensureString($value));
+ }
+
+ public function getUrl()
+ {
+ return $this->getControlState("Url", null);
+ }
+
+ public function setUrl($value)
+ {
+ $this->setControlState("Url", TPropertyValue::ensureString($value));
+ }
+
+ public function getTarget()
+ {
+ return $this->getControlState("Target", null);
+ }
+
+ public function setTarget($value)
+ {
+ $this->setControlState("Target", TPropertyValue::ensureString($value));
+ }
+
+ public function getText()
+ {
+ return $this->getControlState("Text", $this->getID());
+ }
+
+ public function setText($value) {
+ $this->setControlState("Text", TPropertyValue::ensureString($value));
+ }
+
+ public function render($writer)
+ {
+ $writer->renderBeginTag("li");
+
+ if(null !== $path = $this->getPath())
+ {
+ $writer->addAttribute('href', $this->Service->constructUrl($path));
+
+ if($path == $this->Page->getPagePath())
+ $writer->addAttribute('class', 'active');
+ } elseif(null !== $url = $this->getUrl()) {
+ $writer->addAttribute('href', $url);
+ }
+
+ if($this->getTarget() !== null)
+ $writer->addAttribute('target', $this->getTarget());
+
+ $writer->renderBeginTag("a");
+
+ $writer->write(THttpUtility::htmlEncode($this->getText()));
+
+ $writer->renderEndTag();
+ $writer->renderEndTag();
+ }
+}
diff --git a/demos/site/protected/Layouts/MainLayout.php b/demos/site/protected/Layouts/MainLayout.php
new file mode 100644
index 00000000..15302dfc
--- /dev/null
+++ b/demos/site/protected/Layouts/MainLayout.php
@@ -0,0 +1,5 @@
+<?php
+
+class MainLayout extends TTemplateControl
+{
+}
diff --git a/demos/site/protected/Layouts/MainLayout.tpl b/demos/site/protected/Layouts/MainLayout.tpl
new file mode 100644
index 00000000..8b523aed
--- /dev/null
+++ b/demos/site/protected/Layouts/MainLayout.tpl
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<html>
+<com:THead Title="PRADO PHP Framework" >
+ <com:TMetaTag HttpEquiv="Content-Language" Content="en" />
+ <com:TMetaTag HttpEquiv="Content-Type" Content="text/html; charset=utf-8" />
+ <com:TMetaTag Name="Keywords" Content="PHP framework, PRADO" />
+ <com:TMetaTag Name="Description" Content="PRADO is a component-based and event-driven framework for Web application development in PHP 5." />
+ <com:TMetaTag Name="Author" Content="Qiang Xue, Fabio Bas" />
+ <com:TMetaTag Name="Subject" Content="PHP framework, Web programming" />
+ <com:TMetaTag Name="Language" Content="en" />
+ <link rel="Shortcut Icon" href="<%=$this->Page->Theme->BaseUrl%>/favicon.ico">
+</com:THead>
+<body>
+<com:TForm>
+<div id="page">
+ <div id="header">
+ <div id="logo">
+ <com:THyperLink
+ NavigateUrl="<%= $this->Service->constructUrl($this->Service->DefaultPage) %>"
+ Text="PRADO Component Framework for PHP 5"
+ ImageUrl="<%=$this->Page->Theme->BaseUrl%>/imgs/pradoheader.gif"
+ />
+ </div>
+ <div id="mainmenu">
+ <com:SimpleMenu ID="menu">
+ <com:SimpleMenuItem Path="Home" Text="Home" />
+ <com:SimpleMenuItem Path="About" Text="About" />
+ <!---<com:SimpleMenuItem Path="Testimonials" Text="Testimonials" /> --->
+ <com:SimpleMenuItem Path="Demos" Text="Demos" />
+ <com:SimpleMenuItem Path="Download" Text="Download" />
+ <com:SimpleMenuItem Path="Documentation" Text="Documentation" />
+ <!--- <com:SimpleMenuItem Path="Forum" Text="Forum" /> --->
+ <com:SimpleMenuItem Url="http://github.com/pradosoft/prado" Text="Development" Target="_blank"/>
+ <!--- --->
+ </com:SimpleMenu>
+ </div>
+ </div>
+ <com:TContentPlaceHolder ID="Main" />
+ <div id="footer">
+ <com:THyperLink
+ NavigateUrl="<%= $this->Service->constructUrl('Tos') %>"
+ Text="Terms of Service"
+ /> |
+ <com:THyperLink
+ NavigateUrl="<%= $this->Service->constructUrl('License') %>"
+ Text="License"
+ />
+ <br>
+ Copyright © 2004-<%=date('Y')%> by the PRADO Group.<br>
+ <br>
+ <%= Prado::poweredByPrado(1); %>
+ </div>
+</div>
+</com:TForm>
+</body>
+</html> \ No newline at end of file
diff --git a/demos/site/protected/Pages/About.page b/demos/site/protected/Pages/About.page
new file mode 100644
index 00000000..62cc09d3
--- /dev/null
+++ b/demos/site/protected/Pages/About.page
@@ -0,0 +1,56 @@
+<com:TContent ID="Main">
+
+<div id="main">
+<h2>The PRADO Group</h2>
+<p>
+The PRADO group is a team of PRADO enthusiasts who develop and promote the PRADO framework and the related projects.
+</p>
+<h3>Team Members</h3>
+<ul>
+ <li>Fabio Bas - development, testing</li>
+ <li>Ciro Mattia Gonano - github/packagist maintainer</li>
+ <li>Daniel Sampedro Bello - wsat development</li>
+ <li>David Otto - development, testing</li>
+ <li>Jens Klaer - development, testing</li>
+</ul>
+<p>The following Team Members are currently inactive.</p>
+<ul>
+ <li>Qiang Xue - founder of PRADO framework, core development</li>
+ <li>Xiang Wei Zhuo - core development (javascripts, active controls, DB controls, tests)</li>
+ <li>Jason Ragsdale - site and forum administration</li>
+ <li>Knut Urdalen - test, marketing</li>
+ <li>Eirik Hoem - core development</li>
+ <li>Yves Berkholz - core development</li>
+ <li>Michael Hartl - component development, testing</li>
+ <li>Carl G. Mathisen - design and document comment system</li>
+ <li>Christophe Boulain - component development, testing</li>
+ <li>Robin J. Rogge - site and forum adminitration, core development</li>
+</ul>
+<h4>Past Team Members</h4>
+<p>
+Alex Flint, Brian Luft, John Teague, Todd Patrick, Pim van der Zwet, Tim Evans, Alban Hanry, Marcus Nyeholt
+</p>
+
+<h3>History of PRADO</h3>
+<p>
+The very original inspiration of PRADO came from Apache Tapestry. During the design and implementation, Qiang Xue borrowed many ideas from Borland Delphi and Microsoft ASP.NET. The first version of PRADO came out in June 2004 and was written in PHP 4. Driven by the Zend PHP 5 coding contest, Qiang rewrote PRADO in PHP 5, which proved to be a wise move, thanks to the new object model provided by PHP 5. PRADO won the grand prize in the Zend contest, earning high votes both from the public and from the judges' panel.
+</p>
+<p>
+In August 2004, PRADO was hosted on SourceForge as an open source project. Soon after, the project site <a href="http://www.xisc.com/">xisc.com</a> was announced to public. With the fantastic support of PRADO developer team and PRADO users, PRADO evolved to version 2.0 in mid 2005. In this version, Wei Zhuo contributed to PRADO with the excellent I18 and L10N support.
+</p>
+<p>
+In May 2005, developers decided to completely rewrite the PRADO framework to resolve a few fundamental issues found in version 2.0 and to catch up with some cool features available in Microsoft ASP.NET 2.0. After nearly a year's hard work with over 50,000 lines of new code, version 3.0 was finally made available in April 2006.
+</p>
+<p>
+In October 2008, the original development team released a new framework called <a href="http://www.yiiframework.com/">Yii</a>. Inheriting most of the PRADO code, Yii left the pages/events concept, focusing on a pure MVC design pattern. Since 2009 a lot of people contributed to PRADO fixing issues, developing new features or backporting them from Yii.
+</p>
+<p>
+To promote a model of community-driven development, the project repositories were moved first on <a href="http://code.google.com/p/prado3/">Google Code</a> and then, in September 2013, on <a href="http://github.com/pradosoft/prado">GitHub</a>.
+</p>
+<p>
+Starting from version 3.0, significant efforts are allocated to ensure the quality and stability of PRADO. If we say PRADO v2.x and v1.x are proof-of-concept work, we can say PRADO 3.x has grown up to a project that is suitable for serious business application development.
+</p>
+
+<div style="clear: both;"></div>
+</div>
+</com:TContent> \ No newline at end of file
diff --git a/demos/site/protected/Pages/Demos.page b/demos/site/protected/Pages/Demos.page
new file mode 100644
index 00000000..a27a6147
--- /dev/null
+++ b/demos/site/protected/Pages/Demos.page
@@ -0,0 +1,32 @@
+<com:TContent ID="Main">
+
+<div id="main">
+
+<h2>Online Demos</h2>
+<p>
+The following demos are developed using the PRADO framework. They are also available under the <tt>demos</tt> directory in the PRADO release.
+</p>
+<ul class="demo-list">
+ <li><a href="<%$ DemoUrl %>/helloworld/">Hello World</a>: This is perhaps the smallest interactive PRADO application that you can build. It may serve as a good start for building your own applications based on PRADO.</li>
+ <li><a href="<%$ DemoUrl %>/composer/">Component Composer</a>: This demo is an practical application that can be used to help you quickly write up a PRADO component.</li>
+ <li><a href="<%$ DemoUrl %>/personal/">Personal Website</a>: This demo can be served as the starting point to develop a multi-page Web application. It also shows how to support user login in a PRADO application.</li>
+ <li><a href="<%$ DemoUrl %>/quickstart/"><b>Quickstart tutorial demo</b></a>: This demo is meant to help you learn PRADO. It contains tens of sub-demos showing various Web controls included in the PRADO release.
+<ul>
+<li><a href="<%$ DemoUrl %>/quickstart/?page=Controls.Standard">Standard control demos</a> (nearly 40 demos) </li>
+<li><a href="<%$ DemoUrl %>/quickstart/?page=Controls.Validation">Validation control demos</a> </li>
+<li><a href="<%$ DemoUrl %>/quickstart/?page=Controls.List">List control demos</a> (dropdown list, listbox, etc.) </li>
+<li><a href="<%$ DemoUrl %>/quickstart/?page=Controls.Data">Repeater, datalist, datagrid demos</a> </li>
+<li><a href="<%$ DemoUrl %>/quickstart/?page=ActiveControls.Home">Active control demos</a> (AJAX) </li>
+</ul>
+ </li>
+<!--
+ <li><a href="<%$ DemoUrl %>/blog/"><b>PRADO Blog</b></a>: This is a complete weblog system with user management, post management and configuration management.</li>
+-->
+ <li><a href="<%$ DemoUrl %>/currency-converter/">Currency Converter</a>: A small <a href="<%$ DemoUrl %>/quickstart/?page=Tutorial.CurrencyConverter">tutorial</a> example demonstrating the basic use of validator and AJAX controls.</li>
+ <li><a href="<%$ DemoUrl %>/soap/">SOAP Service</a>: This demo is a quick setup of a SOAP server and client.</li>
+ <li><a href="<%$ DemoUrl %>/chat/">AJAX Chat</a>: A easy to build web chat application using AJAX controls and Active Records for database access (see <a href="<%$ DemoUrl %>/quickstart/?page=Tutorial.AjaxChat">tutorial</a>).</li>
+ <li><a href="<%$ DemoUrl %>/time-tracker/"><b>Time Tracker</b></a>: A complete personal project time tracker application using SQLMap for data access.</li>
+
+<div style="clear: both;"></div>
+</div>
+</com:TContent> \ No newline at end of file
diff --git a/demos/site/protected/Pages/Documentation.page b/demos/site/protected/Pages/Documentation.page
new file mode 100644
index 00000000..4d8fe74b
--- /dev/null
+++ b/demos/site/protected/Pages/Documentation.page
@@ -0,0 +1,36 @@
+<com:TContent ID="Main">
+
+<div id="main">
+
+<!---
+<div style="float:right;">
+<b>Class Finder</b> <input name="ctl0$main$ctl0$classEdit" type="text" id="ctl0_main_ctl0_classEdit" style="width:20em;" /><div id="ctl0_main_ctl0_classEdit_result" class="autocomplete"></div>
+</div>
+--->
+<div id="navbar">
+<ul>
+<li><a href="<%$ DemoUrl %>/quickstart/">QuickStart</a></li>
+<li><a href="<%$ DocsUrl %>/manual/">API Manual</a></li>
+<!--- <li><a href="<%$ DocsUrl %>/tutorials/" class="active">Tutorials</a></li> --->
+<!--- <li><a href="<%$ DocsUrl %>/classdoc/">Class Docs</a></li> --->
+</ul>
+</div>
+
+<h2>API Manual</h2>
+
+The <a href="<%$ DocsUrl %>/manual/">API Manual</a> contains the documentation for all the classes declared in PRADO.
+
+<br/>
+<br/>
+<h2>Tutorials</h2>
+
+<ul>
+ <li><a href="<%$ DemoUrl %>/quickstart/">The QuickStart Tutorial</a> - This tutorial is a definitive guidance showing every aspect of PRADO. It is written in PRADO and contains many demos to show the usage of various PRADO controls. The tutorial is also available as a <a href="<%$ DocsUrl %>/quickstart.pdf">PDF file</a>.</li>
+ <li><a href="<%$ DemoUrl %>/blog-tutorial/">The PRADO Blog Tutorial</a> - This tutorial shows how to use PRADO to build a complete Web application. Prior PRADO knowledge is not required.</li>
+ <li><a href="<%$ DemoUrl %>/sqlmap/">The SQLMap Tutorial</a> - This tutorial is a definitive guidance on how to use SQLMap (available since v3.1.0).</li>
+</ul>
+
+<div style="clear: both;"></div>
+</div>
+
+</com:TContent> \ No newline at end of file
diff --git a/demos/site/protected/Pages/Download.page b/demos/site/protected/Pages/Download.page
new file mode 100644
index 00000000..96dcda6b
--- /dev/null
+++ b/demos/site/protected/Pages/Download.page
@@ -0,0 +1,117 @@
+<com:TContent ID="Main">
+
+<div id="main">
+
+<h1>Download</h1>
+<p>PRADO is an open source project hosted on <a href="http://github.com/pradosoft/prado">GitHub</a>. It is released under the terms of
+<com:THyperLink NavigateUrl="<%= $this->Service->constructUrl('License')%>" Text="the BSD License" />.</p>
+<p>The latest stable version of PRADO is <b><span id="lastVersion"><%= Prado::getVersion() %></span></b><span id="lastVersionDate"></span>.</p>
+<div style="text-align:center"><a id="downloadLink" style="font-size:150%" href="https://github.com/pradosoft/prado/releases/latest">Download</a></div>
+
+<com:TClientScript PradoScripts="jquery" />
+<com:TClientScript>
+
+$(document).ready(function () {
+ $.getJSON("https://api.github.com/repos/pradosoft/prado/releases").done(function (json) {
+ var release = json[0];
+
+ var releaseVer = release.tag_name;
+ var releaseDate = new Date(release.published_at);
+ var downloadURL = release.assets[0].browser_download_url;
+
+ var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
+ var day = releaseDate.getDate();
+ var monthIndex = releaseDate.getMonth();
+ var year = releaseDate.getFullYear();
+
+ $("#lastVersion").text(releaseVer);
+ $("#lastVersionDate").text(' (' + day + ' ' + monthNames[monthIndex] + ' ' + year + ')');
+ $("#downloadLink").attr("href", downloadURL);
+ });
+
+ $.get("https://raw.githubusercontent.com/pradosoft/prado/master/HISTORY", function(data) {
+ $("#changeLog").text(data);
+ });
+});
+</com:TClientScript>
+
+<br/>
+<h2>Latest changelog entries</h2>
+<pre id="changeLog" class="changelog">loading...</pre>
+
+<br/>
+<h2>Previous PRADO v3.x releases</h2>
+
+<table width="100%" cellspacing="1" cellpadding="1" class="download">
+<tr>
+ <th nowrap="nowrap">Version</th>
+ <th nowrap="nowrap">Date </th>
+ <th nowrap="nowrap">Files</th>
+</tr>
+ <tr><td>3.2.4</td><td>Aug 26, 2014</td><td><a href="https://github.com/pradosoft/prado/releases/download/3.2.4/prado-3.2.4.re2e58b8.zip">Source code and documentation</a></td></tr>
+ <tr><td>3.2.3</td><td>Nov 26, 2013</td><td><a href="https://github.com/pradosoft/prado/releases/download/3.2.3/prado-3.2.3.r2b11341.zip">Source code and documentation</a></td></tr>
+ <tr><td>3.2.2</td><td>July 20, 2013</td><td><a href="http://prado3.googlecode.com/files/prado-3.2.2.r3297.zip">Source code</a>, <a href="http://prado3.googlecode.com/files/prado-docs-3.2.2.r3297.zip">documentation</a></td></tr>
+ <tr><td>3.2.1</td><td>January 19, 2013</td><td><a href="http://prado3.googlecode.com/files/prado-3.2.1.r3258.zip">Source code</a>, <a href="http://prado3.googlecode.com/files/prado-docs-3.2.1.r3258.zip">documentation</a></td></tr>
+ <tr><td>3.2.0</td><td>June 25, 2012</td><td><a href="http://prado3.googlecode.com/files/prado-3.2.0.r3169.zip">Source code</a>, <a href="http://prado3.googlecode.com/files/prado-docs-3.2.0.r3169.zip">documentation</a></td></tr>
+ <tr><td>3.1.10</td><td>July 27, 2011</td><td><a href="http://prado3.googlecode.com/files/prado-3.1.10.r3017.zip">Source code</a>, <a href="http://prado3.googlecode.com/files/prado-docs-3.1.10.r3017.zip">documentation</a></td></tr>
+ <tr><td>3.1.9</td><td>June 3, 2011</td><td><a href="http://prado3.googlecode.com/files/prado-3.1.9.r2973.zip">Source code</a>, <a href="http://prado3.googlecode.com/files/prado-docs-3.1.9.r2973.zip">documentation</a></td></tr>
+ <tr><td>3.1.8</td><td>May 29, 2011</td><td><a href="http://prado3.googlecode.com/files/prado-3.1.8.r2934.zip">Source code</a>, <a href="http://prado3.googlecode.com/files/prado-docs-3.1.8.r2934.zip">documentation</a></td></tr>
+ <tr><td>3.1.7</td><td>February 22, 2010</td><td><a href="http://prado3.googlecode.com/files/prado-3.1.7.r2783.zip">Source code</a>, <a href="http://prado3.googlecode.com/files/prado-docs-3.1.7.r2783.zip">documentation</a></td></tr>
+ <tr><td>3.1.6</td><td>July 22, 2009</td><td><a href="http://prado3.googlecode.com/files/prado-3.1.6.r2699.zip">Source code</a>, <a href="http://prado3.googlecode.com/files/prado-docs-3.1.6-r2699.zip">documentation</a></td></tr>
+ <tr><td>3.1.5</td><td>May 24, 2009</td><td><a href="http://prado3.googlecode.com/files/prado-3.1.5.r2662.zip">Source code</a>, <a href="http://prado3.googlecode.com/files/prado-docs-3.1.5.r2662.zip">documentation</a></td></tr>
+ <tr><td>3.1.4</td><td>January 11, 2009</td><td><a href="http://prado3.googlecode.com/files/prado-3.1.4.r2603.zip">Source code</a>, <a href="http://prado3.googlecode.com/files/prado-docs-3.1.4.r2603.zip">documentation</a></td></tr>
+ <tr><td>3.1.3</td><td>November 1, 2008</td><td><a href="http://prado3.googlecode.com/files/prado-3.1.3-src.zip">Source code</a>, <a href="http://prado3.googlecode.com/files/prado-3.1.3-docs.zip">documentation</a></td></tr>
+ <tr><td>3.1.2</td><td>April 21, 2008</td><td><a href="http://prdownloads.sourceforge.net/prado/prado-3.1.2.r2448.zip?download">Source code</a></td></tr>
+ <tr><td>3.1.1</td><td>October 1, 2007</td><td><a href="http://prdownloads.sourceforge.net/prado/prado-3.1.1.r2290.zip?download">Source code</a></td></tr>
+ <tr><td>3.1.0</td><td>July 2, 2007</td><td><a href="http://prdownloads.sourceforge.net/prado/prado-3.1.0.r2045.zip?download">Source code</a></td></tr>
+ <tr><td>3.0.7</td><td>April 2, 2007</td><td><a href="http://prdownloads.sourceforge.net/prado/prado-3.0.7.r1825.zip?download">Source code</a></td></tr>
+ <tr><td>3.0.6</td><td>December 4, 2006</td><td><a href="http://prdownloads.sourceforge.net/prado/prado-3.0.6.r1561.zip?download">Source code</a></td></tr>
+ <tr><td>3.0.5</td><td>October 23, 2006</td><td><a href="http://prdownloads.sourceforge.net/prado/prado-3.0.5.r1478.zip?download">Source code</a></td></tr>
+ <tr><td>3.0.4</td><td>September 4, 2006</td><td><a href="http://prdownloads.sourceforge.net/prado/prado-3.0.4.r1389.zip?download">Source code</a></td></tr>
+ <tr><td>3.0.3</td><td>August 6, 2006</td><td><a href="http://prdownloads.sourceforge.net/prado/prado-3.0.3.r1331.zip?download">Source code</a></td></tr>
+ <tr><td>3.0.2</td><td>July 2, 2006</td><td><a href="http://prdownloads.sourceforge.net/prado/prado-3.0.2.r1226.zip?download">Source code</a></td></tr>
+ <tr><td>3.0.1</td><td>June 4, 2006</td><td><a href="http://prdownloads.sourceforge.net/prado/prado-3.0.1.zip?download">Source code</a></td></tr>
+ <tr><td>3.0.0</td><td>May 1, 2006</td><td><a href="http://prdownloads.sourceforge.net/prado/prado-3.0.0.zip?download">Source code</a></td></tr>
+</table>
+<br/>
+<br/>
+<h2>PRADO Tools</h2>
+<table width="100%" cellspacing="1" cellpadding="5" class="download">
+ <tr>
+ <th nowrap="nowrap">File</th>
+ <th nowrap="nowrap">Description</th>
+ <th nowrap="nowrap">Release date</th>
+ </tr>
+ <tr>
+ <td><a href="http://prado3.googlecode.com/files/prado-dreamweaver-r2764.zip">Dreamweaver Extension</a></td>
+ <td>PRADO Dreamweaver Extension (r2764)</td>
+ <td nowrap="nowrap">February 14, 2010</td>
+ </tr>
+ <tr>
+ <td><a href="http://prado3.googlecode.com/files/prado-intype-bundle-r2854.zip">InType Bundle</a></td>
+ <td>PRADO InType Bundle (r2854)</td>
+ <td nowrap="nowrap">June 23, 2010</td>
+ </tr>
+ <tr>
+ <td><a href="http://prado3.googlecode.com/files/prado-notepadplus-r2793.zip">Notepad++ Plugin</a></td>
+ <td>PRADO Notepad++ Plugin (r2793)</td>
+ <td nowrap="nowrap">April 6, 2010</td>
+ </tr>
+ <tr>
+ <td><a href="http://prado3.googlecode.com/files/prado-textmatebundle-r3193.zip">Textmate Bundle</a></td>
+ <td>PRADO TextMate Bundle, suitable also for Sublime Text 2 (r3193)</td>
+ <td nowrap="nowrap">July 24, 2012</td>
+ </tr>
+</table>
+<br/>
+<br/>
+<h2>Git Access</h2>
+<p>You can obtain the latest development version of PRADO from our <a href="https://github.com/pradosoft/prado">Git repository</a>.</p>
+<blockquote><b>WARNING:</b> Unreleased Source code in Git may contain known bugs and are subject to changes without prior notice.</blockquote>
+<p>The Source code repository can be accessed anonymously using the following command,</p>
+<pre class="instructions">git clone https://github.com/pradosoft/prado.git</pre>
+
+<div style="clear: both;"></div>
+</div>
+
+</com:TContent> \ No newline at end of file
diff --git a/demos/site/protected/Pages/Home.page b/demos/site/protected/Pages/Home.page
new file mode 100755
index 00000000..039050c1
--- /dev/null
+++ b/demos/site/protected/Pages/Home.page
@@ -0,0 +1,56 @@
+<com:TContent ID="Main">
+
+<div class="intro">
+ <div class="whyprado">
+ <ul class="list">
+ <li class="one"><a href="<%= $this->Service->constructUrl('Demos') %>">Try PRADO</a></li>
+ <li class="two"><a href="<%= $this->Service->constructUrl('Documentation') %>">Learn PRADO</a></li>
+ <li class="three"><a href="http://github.com/pradosoft/prado">Develop with PRADO</a></li>
+ </ul>
+ </div>
+</div>
+
+<div class="statements">
+ <div class="whatis">
+ <h3>What is PRADO?</h3>
+ <p>PRADO<sup>TM</sup> is a component-based and event-driven programming framework for developing Web applications in PHP 5. PRADO stands for <b>P</b>HP <b>R</b>apid <b>A</b>pplication <b>D</b>evelopment <b>O</b>bject-oriented.</p>
+ </div>
+ <div class="whatreq">
+ <h3>What does PRADO require?</h3>
+ <p>The sole requirement to run PRADO-based applications is a Web server supporting PHP 5.3.0 or higher. <a href="<%= $this->Service->constructUrl('License') %>">PRADO is free</a>. You can use it to develop either open source or commercial applications.</p>
+ </div>
+ <div class="cani">
+ <h3>Quick facts about PRADO</h3>
+ <p>
+ <b>First release:</b> August 2004<br>
+ <b>License:</b> <a href="<%= $this->Service->constructUrl('License') %>">revised BSD</a><br>
+ <b>Lines of core code:</b> &gt; 150,000 lines<br>
+ <b>Number of classes:</b> &gt; 700<br>
+ <b>Downloads:</b> &gt; 450,000 01/11/2015<br>
+ </p>
+ </div>
+</div>
+
+<div id="main">
+
+ <h2>Latest News</h2>
+ <div id="articles">
+
+ <div class="article">
+ <h3>Site outage</h3>
+ <span class="date">November 5, 2015</span>
+ <p>As you may have noticed, in the last few days the PRADO website has been unavailable. Unfortunately the server hosting the website suddently died, resulting in the website being unaccessible. A new server has been put in place, and we are now recovering the website data from the last backups. The website is planned to be fully working in a few days. In the meanwhile, you can always refer to our <a target="_blank" href="https://github.com/pradosoft/prado" class="bb-url">github project site</a>.<br><br>Thank you for your patience,<br><br>The PRADO Team</p>
+ </div>
+
+ <div class="article">
+ <h3>Prado 3.2.4 is released!</h3>
+ <span class="date">August 26, 2014</span>
+ <p>The PRADO Team is proud to announce the formal release of <span style="font-weight:bold">PRADO 3.2.4</span>.<br><br>This release backports a number of significative bugfixes and changes from the master branch where the new, jQuery-based Prado is been developed.<br>This release officially introduces <a target="_blank" href="http://www.pradoframework.net/demos/quickstart/?page=GettingStarted.Wsat" class="bb-url">Wsat</a>, an useful tool coded by DarthDaniel that can help out generating Active Record classes.<br><br>This release should be an easy plug-in update from previous 3.2.x Prado versions, without any backwards-compatibility issue; anyway, if you find any problem feel free&nbsp; to report it, and we'll take care of sorting it out.<br><br>Finally, some words on the current development.<br>We have some new members helping out the development: welcome in Daniel and David! Many thanks goes to them and also to all the others that have reported issues and fixes on the project's <a target="_blank" href="https://github.com/pradosoft/prado" class="bb-url">github pages</a>.<br><br>Enjoy!<br><br>The PRADO Team</p>
+ </div>
+
+ </div>
+
+<div style="clear: both;"></div>
+</div>
+
+</com:TContent> \ No newline at end of file
diff --git a/demos/site/protected/Pages/License.page b/demos/site/protected/Pages/License.page
new file mode 100644
index 00000000..f074e1ca
--- /dev/null
+++ b/demos/site/protected/Pages/License.page
@@ -0,0 +1,29 @@
+<com:TContent ID="Main">
+
+<div id="main">
+
+<h2>License of PRADO</h2>
+
+<p>
+The PRADO framework and the included demos are free software. They are released under the terms of the following BSD License.
+</p>
+<p>
+Copyright 2004-<%= date('Y') %> by The PRADO Group (https://github.com/pradosoft/prado)<br/>
+All rights reserved.
+</p>
+<p>
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+</p>
+<ul>
+<li>Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. </li>
+<li>Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.</li>
+<li>Neither the name of the PRADO Group nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.</li>
+</ul>
+<p>
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+</p>
+
+<div style="clear: both;"></div>
+</div>
+
+</com:TContent> \ No newline at end of file
diff --git a/demos/site/protected/Pages/Tos.page b/demos/site/protected/Pages/Tos.page
new file mode 100644
index 00000000..65c67470
--- /dev/null
+++ b/demos/site/protected/Pages/Tos.page
@@ -0,0 +1,43 @@
+<com:TContent ID="Main">
+
+<div id="main">
+
+<h2>Terms of Service</h2>
+
+<p>
+This web site is owned and operated by Prado Software Group, (PradoSoft or we). We have created this page to share with you our privacy and legal policies regarding to your personal information and the contents on this site.
+</p>
+
+<h3>Privacy Policy</h3>
+<p>
+We do not collect personal information about you unless you voluntarily provide it to us or authorize us to collect it. We consider the following to be personal information: your name, email address, phone number, date of birth, job, personal interests, your e-mail address. We treat personal information confidentially.
+</p>
+<p>
+We do collect and track certain non-personally information, including but not limited to, user IP numbers and browser type, access times, domain names, usage habits and other information which does not specifically identify any individual.
+</p>
+<p>
+We may use cookies to customize your use of the web site and for other purposes to improve your use of the service, and may also use web beacons, web bugs, action tags and third party cookies. You may stop or restrict the placement of cookies on your computer or flush them from your browser by adjusting your web browser preferences, in which case you may still use our Service, but it may interfere with some of its functionality. We do not use cookies to automatically retrieve personal information from your computer without your knowledge.
+</p>
+
+<h3>Legal Disclaimer</h3>
+<p>
+All the information and contents posted on this web site are the property of PradoSoft, and are protected by U.S. and foreign copyright laws. By accessing this web site, you agree to the following terms and conditions. You shall not use this web site if you do not agree.
+</p>
+<ol>
+<li>This web site and its contents may NOT be copied or distributed in any manner without the prior written consent of PradoSoft.</li>
+<li>PradoSoft MAKES NO REPRESENTATIONS OR WARRANTIES WITH RESPECT TO THIS WEB SITE, ITS CONTENTS OR THE MANUSCRIPT, WHICH ARE PROVIDED FOR USE "AS IS" AND IS WITHOUT WARRANTY OF ANY KIND.</li>
+<li>Portions of this web site may publish readers comments and opinion. PradoSoft does not assume or have any responsibility or any liability for the readers comments or opinions.</li>
+</ol>
+
+<h3>Change of Policies</h3>
+<p>
+The above policies may change from time to time. PradoSoft will post those changes on this page.
+</p>
+<p>
+This page was last updated on May 2, 2006.
+</p>
+
+<div style="clear: both;"></div>
+</div>
+
+</com:TContent> \ No newline at end of file
diff --git a/demos/site/protected/application.xml b/demos/site/protected/application.xml
new file mode 100644
index 00000000..b937e82b
--- /dev/null
+++ b/demos/site/protected/application.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<application id="pradosite" mode="Debug">
+ <paths>
+ <using namespace="Application.Common.*" />
+ <using namespace="System.Web.UI.ActiveControls.*" />
+ </paths>
+ <modules>
+ <module id="parameter" class="System.Util.TParameterModule">
+ <!-- the site lives in the demos directory -->
+ <parameter id="DemoUrl" value=".." />
+ <parameter id="DocsUrl" value="../docs" />
+ </module>
+ <module id="request" class="THttpRequest" UrlFormat="HiddenPath" UrlManager="friendly-url" />
+ <module id="friendly-url" class="System.Web.TUrlMapping" EnableCustomUrl="true">
+ <url ServiceParameter="Home" pattern="/" />
+ <url ServiceParameter="About" pattern="about" />
+ <url ServiceParameter="Demos" pattern="demos" />
+ <url ServiceParameter="Download" pattern="download" />
+ <url ServiceParameter="Documentation" pattern="documentation" />
+ <url ServiceParameter="Tos" pattern="tos" />
+ <url ServiceParameter="License" pattern="license" />
+ <!-- <url ServiceParameter="Forum" pattern="/forum" /> -->
+ </module>
+
+ <!--
+ <module id="log" class="System.Util.TLogRouter">
+ <route class="TFileLogRoute" Categories="OffInfApplication" />
+ </module>
+ <module id="globalization" class="System.I18N.TGlobalization" charset="UTF-8"/>
+
+ <module id="data" class="Application.Common.OffInfDataModule" />
+ <module id="users" class="Application.Common.OffInfUserManager" />
+ -->
+ </modules>
+ <services>
+ <service id="page" class="TPageService" BasePath="Application.Pages" DefaultPage="Home">
+ <pages MasterClass="Application.Layouts.MainLayout" Theme="Prado"/>
+ </service>
+ </services>
+</application> \ No newline at end of file
diff --git a/demos/site/protected/runtime/.gitignore b/demos/site/protected/runtime/.gitignore
new file mode 100755
index 00000000..d6b7ef32
--- /dev/null
+++ b/demos/site/protected/runtime/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/demos/site/themes/Prado/favicon.ico b/demos/site/themes/Prado/favicon.ico
new file mode 100644
index 00000000..28d63172
--- /dev/null
+++ b/demos/site/themes/Prado/favicon.ico
Binary files differ
diff --git a/demos/site/themes/Prado/imgs/bg.gif b/demos/site/themes/Prado/imgs/bg.gif
new file mode 100644
index 00000000..d4ce965e
--- /dev/null
+++ b/demos/site/themes/Prado/imgs/bg.gif
Binary files differ
diff --git a/demos/site/themes/Prado/imgs/bigmantis.jpg b/demos/site/themes/Prado/imgs/bigmantis.jpg
new file mode 100644
index 00000000..7520aab4
--- /dev/null
+++ b/demos/site/themes/Prado/imgs/bigmantis.jpg
Binary files differ
diff --git a/demos/site/themes/Prado/imgs/bigmantis.jpg.1 b/demos/site/themes/Prado/imgs/bigmantis.jpg.1
new file mode 100644
index 00000000..7520aab4
--- /dev/null
+++ b/demos/site/themes/Prado/imgs/bigmantis.jpg.1
Binary files differ
diff --git a/demos/site/themes/Prado/imgs/bottomgradient.gif b/demos/site/themes/Prado/imgs/bottomgradient.gif
new file mode 100644
index 00000000..4309dc30
--- /dev/null
+++ b/demos/site/themes/Prado/imgs/bottomgradient.gif
Binary files differ
diff --git a/demos/site/themes/Prado/imgs/bullet_one.gif b/demos/site/themes/Prado/imgs/bullet_one.gif
new file mode 100644
index 00000000..8d42c689
--- /dev/null
+++ b/demos/site/themes/Prado/imgs/bullet_one.gif
Binary files differ
diff --git a/demos/site/themes/Prado/imgs/bullet_three.gif b/demos/site/themes/Prado/imgs/bullet_three.gif
new file mode 100644
index 00000000..099522c2
--- /dev/null
+++ b/demos/site/themes/Prado/imgs/bullet_three.gif
Binary files differ
diff --git a/demos/site/themes/Prado/imgs/bullet_two.gif b/demos/site/themes/Prado/imgs/bullet_two.gif
new file mode 100644
index 00000000..cd8001a8
--- /dev/null
+++ b/demos/site/themes/Prado/imgs/bullet_two.gif
Binary files differ
diff --git a/demos/site/themes/Prado/imgs/mainmenu_active.gif b/demos/site/themes/Prado/imgs/mainmenu_active.gif
new file mode 100644
index 00000000..47974274
--- /dev/null
+++ b/demos/site/themes/Prado/imgs/mainmenu_active.gif
Binary files differ
diff --git a/demos/site/themes/Prado/imgs/mainmenu_hover.gif b/demos/site/themes/Prado/imgs/mainmenu_hover.gif
new file mode 100644
index 00000000..26355b3c
--- /dev/null
+++ b/demos/site/themes/Prado/imgs/mainmenu_hover.gif
Binary files differ
diff --git a/demos/site/themes/Prado/imgs/pradodownload.gif b/demos/site/themes/Prado/imgs/pradodownload.gif
new file mode 100644
index 00000000..19753f6f
--- /dev/null
+++ b/demos/site/themes/Prado/imgs/pradodownload.gif
Binary files differ
diff --git a/demos/site/themes/Prado/imgs/pradoheader.gif b/demos/site/themes/Prado/imgs/pradoheader.gif
new file mode 100755
index 00000000..40ca5d29
--- /dev/null
+++ b/demos/site/themes/Prado/imgs/pradoheader.gif
Binary files differ
diff --git a/demos/site/themes/Prado/imgs/statementsbg.gif b/demos/site/themes/Prado/imgs/statementsbg.gif
new file mode 100644
index 00000000..85836a2e
--- /dev/null
+++ b/demos/site/themes/Prado/imgs/statementsbg.gif
Binary files differ
diff --git a/demos/site/themes/Prado/style.css b/demos/site/themes/Prado/style.css
new file mode 100755
index 00000000..b2164941
--- /dev/null
+++ b/demos/site/themes/Prado/style.css
@@ -0,0 +1,765 @@
+
+/**
+ * PradoSoft profile by Carl G. Mathisen and Stefan A. Petrov
+ * http://decart.no
+ */
+
+body
+{
+ background-color: #ECEDE5;
+ background-image: url('imgs/bg.gif');
+ background-repeat: repeat-x;
+ background-position: top left;
+ margin: 0px;
+ padding: 0px;
+ text-align: center;
+}
+
+body, div, span, p, input
+{
+ font-family: Verdana, sans-serif, Arial;
+ font-size: 10pt;
+ color: #333333;
+}
+
+h1, h2, h3, h4
+{
+ font-family: Verdana, Helvetica, Arial, Lucida Grande, Trebuchet MS;
+ padding: 0px;
+ margin: 0px;
+ margin-bottom: 10px;
+ color: #821B18;
+ font-weight: normal;
+}
+
+h2
+{
+ font-size: 18px;
+}
+
+h3
+{
+ font-size: 16px;
+}
+
+div
+{
+ text-align: left;
+}
+
+.instructions
+{
+ background-color: #EEEEEE;
+ padding: 5px;
+}
+
+img
+{
+ border: none;
+}
+
+a
+{
+ color: #CD2C27;
+ text-decoration: none;
+}
+
+a:hover
+{
+ color: #821B18;
+ text-decoration: underline;
+}
+
+#page
+{
+ margin: 0 auto;
+ padding: 0;
+ width: 841px;
+ position: relative;
+}
+
+#header
+{
+ position: relative;
+ height: 98px;
+}
+
+#logo
+{
+ height: 99px;
+}
+
+#mainmenu
+{
+ position: absolute;
+ top: 69px;
+}
+
+#mainmenu ul
+{
+ margin-left: 0;
+ padding-left: 0;
+ display: inline;
+}
+
+#mainmenu ul li
+{
+ margin-left: 0px;
+ list-style: none;
+ display: inline;
+}
+
+#mainmenu ul li a
+{
+ display: block;
+ float: left;
+ font-size: 14px;
+ font-weight: bold;
+ padding-left: 7px;
+ padding-right: 7px;
+ padding-top: 5px;
+ color: #FFFFCC;
+ text-decoration: none;
+ height: 29px;
+}
+
+#mainmenu ul li a:hover
+{
+ background-image: url('imgs/mainmenu_hover.gif');
+ background-repeat: repeat-x;
+ background-position: top left;
+ color: #fff;
+}
+
+#mainmenu ul li a.active
+{
+ background-image: url('imgs/mainmenu_active.gif');
+ background-repeat: repeat-x;
+ background-position: top left;
+ color: #91A412;
+}
+
+/* main page */
+
+div.intro
+{
+ height: 190px;
+ background-image: url('imgs/bigmantis.jpg');
+ background-repeat: no-repeat;
+ background-position: top right;
+ background-color: #fff;
+}
+
+div.statements
+{
+ height: 165px;
+ background-image: url('imgs/statementsbg.gif');
+ background-repeat: repeat-x;
+ position: relative;
+ border-bottom : 1px solid #EEE;
+}
+
+div.statements div
+{
+ position: absolute;
+ width: 250px;
+ top: 20px;
+}
+
+div.statements div p
+{
+ font-size: 13px;
+ color: #818181;
+}
+
+div.statements div.whatis
+{
+ left: 20px;
+}
+
+div.statements div.whatreq
+{
+ left: 310px;
+}
+
+div.statements div.cani
+{
+ left: 590px;
+ width: 250px;
+}
+
+/* navbar */
+#navbar
+{
+ border-bottom: 2px solid #E9EEEF;
+ height: 30px;
+ margin-bottom: 20px;
+}
+
+#navbar ul
+{
+ margin-left: 0;
+ padding-left: 0;
+ display: inline;
+}
+
+#navbar ul li
+{
+ margin-left: 0px;
+ list-style: none;
+ display: inline;
+}
+
+#navbar ul li a
+{
+ display: block;
+ float: left;
+ font-size: 14px;
+ font-weight: bold;
+ padding-right: 14px;
+ padding-top: 5px;
+ color: #CD2B26;
+ height: 29px;
+}
+
+#navbar ul li a.active, #navbar ul li a.hover
+{
+ color: #821B18;
+}
+
+#navbar ul li a.hover
+{
+ text-decoration: underline;
+}
+
+/* infobar */
+div#infobar
+{
+ float: right;
+ width: 200px;
+ padding-left: 20px;
+ border-left: 2px solid #E9EEEF;
+}
+
+div#infobar div
+{
+ margin-bottom: 20px;
+}
+
+div#infobar div#featured img
+{
+ margin-top: 10px;
+}
+
+/* articles */
+
+div#articles
+{
+ width: 560px;
+ float: left;
+}
+
+/* article */
+
+div.article
+{
+ margin-bottom: 40px;
+}
+
+div.article .date
+{
+ color: #9F9291;
+}
+
+div.article .more
+{
+ margin-right: 10px;
+ display: block;
+ text-align: right;
+}
+
+.logo
+{
+ position: absolute;
+ margin-left: 15px;
+ margin-top: 0px;
+ z-index: 1;
+}
+
+#main
+{
+ padding: 20px;
+ padding-top: 20px;
+ background-color: #fff;
+}
+
+div.mantis
+{
+ height: 190px;
+ background-color: #fff;
+ background-image: url('imgs/bigmantis.jpg');
+ background-repeat: no-repeat;
+ background-position: top right;
+ border-bottom: 1px solid #DCDCDC;
+}
+
+div.releases
+{
+ float: left;
+ width: 240px;
+ height: 190px;
+ background-image: url('imgs/pradodownload.gif');
+ background-repeat: no-repeat;
+}
+
+div.releases div.official
+{
+ width: 190px;
+ position: relative;
+ left: 52px;
+ top: 128px;
+ font-size: 8pt;
+ color: #6D6D6D;
+}
+
+div.releases div.official a
+{
+ display: block;
+}
+
+div.whyprado
+{
+ display: block;
+ float: left;
+}
+
+div.whyprado ul.list
+{
+ margin-top: 40px;
+ margin-left: 40px;
+}
+
+div.whyprado ul.list li
+{
+ display: block;
+ margin: 5px;
+ padding: 0px;
+ font-size: 18px;
+ background-repeat: no-repeat;
+ background-position: bottom left;
+ padding-left: 30px;
+ list-style: none;
+}
+
+div.whyprado ul.list li.one
+{
+ background-image: url('imgs/bullet_one.gif');
+}
+
+div.whyprado ul.list li.two
+{
+ background-image: url('imgs/bullet_two.gif');
+}
+
+div.whyprado ul.list li.three
+{
+ background-image: url('imgs/bullet_three.gif');
+}
+
+div.whyprado ul.list li a
+{
+ color: #9F9291;
+ text-decoration: none;
+}
+
+#footer
+{
+ border-top: 1px solid #e9eeef;
+ background-color: #fff;
+ clear: both;
+ color: #A7A7A7;
+ font-size: 8pt;
+ text-align: center;
+ padding-top: 10px;
+ padding-bottom: 30px;
+ background-image: url('imgs/bottomgradient.gif');
+ background-repeat: repeat-x;
+ background-position: bottom;
+}
+
+#ads
+{
+ font-size: 8pt;
+ text-align: center;
+}
+#features
+{
+ margin-left: 610px;
+ padding: 10px;
+ padding-left: 10px;
+ padding-right: 10px;
+ background-color: #BEDD75;
+ color: #344A1E;
+ font-size: 9pt;
+}
+
+#features ul
+{
+ margin: 10px;
+ padding: 0px;
+}
+
+#features ul li
+{
+ font-size: 8pt;
+ padding: 0px;
+ margin: 0px;
+ margin-top: 8px;
+}
+
+#features h3
+{
+ margin: 0px;
+ padding: 0px;
+ font-size: 10pt;
+ color: #292E1D;
+ text-align: center;
+ border-bottom: 1px solid silver;
+}
+
+#news
+{
+ float: left;
+ width: 590px;
+}
+
+.newstitle
+{
+ font-size: 12pt;
+ font-weight: bold;
+ color: #555;
+ margin-top: 10px;
+ margin-bottom: 0px;
+ border-bottom: 1px solid silver;
+}
+
+.newscontentmore
+{
+ margin-right: 10px;
+ display: block;
+ color: #50811A;
+ text-align: right;
+}
+
+.newscontentmore:hover
+{
+ color: red;
+}
+
+.newstime
+{
+ margin: 0px;
+ font-size:0.8em;
+ color:#aaa;
+ padding-left:10px;
+ text-align: right;
+}
+
+.newscontent
+{
+ margin-top: 5px;
+}
+
+#leftpanel
+{
+ float: left;
+ width: 550px;
+}
+
+#topics
+{
+ border: 1px solid #804040;
+ margin-left: 610px;
+ padding-bottom: 10px;
+}
+
+#topicsheader
+{
+ text-align:center;
+ font-weight:bold;
+ background-color:#804040;
+ color:#FFFFBC;
+ padding: 3px;
+ margin-bottom:0px;
+}
+
+.topicitem
+{
+ padding: 5px;
+}
+
+.topicitem a:hover
+{
+ text-decoration: underline;
+}
+
+.topicitem p
+{
+ margin: 0px;
+ font-size:0.8em;
+ color:#aaa;
+ padding-left:10px;
+ white-space:nowrap;
+}
+
+.reference
+{
+}
+
+.reference img
+{
+ margin: 10px;
+}
+
+.reference h3
+{
+}
+
+
+.download
+{
+ width: 100%;
+ background-color: #aaa;
+}
+
+.download td
+{
+ background-color: #FFFFFF;
+ padding: 2px 5px;
+ font-size: 9pt;
+}
+
+.download td a
+{
+ font-weight: bold;
+}
+
+.download td.type
+{
+ font-family: "courier new", courier;
+ text-align: right;
+ vertical-align: top;
+}
+
+.download div.declaration
+{
+ font-family: "courier new", courier;
+}
+
+
+.download th
+{
+ background-color: #F0F0F0;
+ font-weight: bold;
+ font-size: 9pt;
+ padding: 5px;
+ text-align: left;
+}
+
+.download th.small
+{
+ font-size: 1.0em;
+}
+
+.download tr.reference td {
+ background-color: #FFEDED;
+}
+
+
+.doc-title
+{
+ font-size: 14pt;
+ font-weight: bold;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.doc-subtitle
+{
+ font-size: 11pt;
+ font-weight: bold;
+ background-color: #EEE;
+ padding: 5px;
+ margin-top: 20px;
+}
+
+.doc-namespace
+{
+ font-size: 8pt;
+}
+
+
+.doc-menu
+{
+}
+
+.doc-classes
+{
+}
+
+.doc-ancestors
+{
+ font-size: 8pt;
+}
+
+.doc-properties
+{
+ font-size: 9pt;
+}
+
+.doc-properties table
+{
+ border-collapse: collapse;
+ background-color: silver;
+ width: 100%;
+}
+
+.doc-properties td, .doc-properties th
+{
+ padding: 3px;
+ vertical-align: top;
+ background-color: white;
+ border: 1px solid silver;
+}
+
+.doc-events
+{
+ font-size: 9pt;
+}
+
+.doc-events table
+{
+ border-collapse: collapse;
+ background-color: silver;
+ width: 100%;
+}
+
+.doc-events td, .doc-events th
+{
+ padding: 3px;
+ vertical-align: top;
+ background-color: white;
+ border: 1px solid silver;
+}
+
+.doc-methods
+{
+ font-size: 9pt;
+}
+
+.doc-methods table
+{
+ border-collapse: collapse;
+ background-color: silver;
+ width: 100%;
+}
+
+.doc-methods td, .doc-methods th
+{
+ padding: 3px;
+ vertical-align: top;
+ background-color: white;
+ border: 1px solid silver;
+}
+
+.doc-derived
+{
+}
+
+.doc-inherited
+{
+}
+
+.doc-native td
+{
+ background-color: lightyellow;
+}
+
+.forum-topic
+{
+ padding: 10px;
+ border:1px solid silver;
+ margin-bottom: 10px;
+}
+
+
+.demo-list li
+{
+ margin-bottom: 1em;
+}
+
+.autocomplete
+{
+ border:1px solid #ccc;
+ background-color:white;
+}
+.autocomplete ul, .autocomplete li
+{
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ font-size: 11px;
+ font-family: Tahoma, Arial, Helvetica, sans-serif;
+ color: #333;
+}
+
+ul.different
+{
+ background-color: pink;
+}
+
+.autocomplete li
+{
+ padding: 5px;
+ background-color: #ffe;
+}
+.autocomplete .selected
+{
+ background-color: #eec;
+}
+
+#ads ul
+{
+ list-style-type: none;
+ margin: 5px;
+ margin-left: 0px;
+ padding: 0;
+ font-size: 10px;
+}
+
+#ads li
+{
+ margin-bottom: 7px;
+}
+
+#ads a
+{
+ color: black;
+ border-bottom: 1px dashed silver;
+}
+
+pre.changelog
+{
+ overflow:scroll;
+ height: 250px;
+ border:1px solid #ccc;
+ white-space: pre-wrap; /* CSS 3 */
+ white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ word-wrap: break-word; /* Internet Explorer 5.5+ */
+ padding: 10px;
+ -webkit-box-shadow: inset 0px -10px 10px -5px rgba(0,0,0,0.75);
+ -moz-box-shadow: inset 0px -10px 10px -5px rgba(0,0,0,0.75);
+ box-shadow: inset 0px -10px 10px -5px rgba(0,0,0,0.75);
+}
diff --git a/demos/sqlmap/protected/pages/Manual/Installing.page b/demos/sqlmap/protected/pages/Manual/Installing.page
index bb083996..65288f22 100755
--- a/demos/sqlmap/protected/pages/Manual/Installing.page
+++ b/demos/sqlmap/protected/pages/Manual/Installing.page
@@ -14,7 +14,7 @@ first time.</p>
<h2>Setup the Distribution</h2>
-<p>The official site for SQLMap PHP DataMapper is <a href="http://www.pradosoft.com">http://www.pradosoft.com</a>.
+<p>The official site for SQLMap PHP DataMapper is <a href="https://github.com/pradosoft/prado">https://github.com/pradosoft/prado</a>.
The DataMapper
is availabe as a source distribution in the form of a ZIP archive. To download
the distributions, follow the link to the Downloads area on the web site, and
@@ -29,20 +29,20 @@ built into newer versions of Windows.</p>
files to your Web application, or library project (and Test project if you
have one). These files are:</p>
-<dl>
+<dl>
<dt>SqlMap.xml</dt>
<dd>-- A Data Map file that contains your SQL queries. Your project will contain one
or more of these files with names such as Account.xml or Product.xml.
- </dd>
+ </dd>
<dt>SqlMap.config</dt>
<dd>--
The DataMapper configuration file that is used to specify the locations of your
SqlMap.xml files. It is also used to define other DataMapper
configuration options such as caching. You will need to include one SqlMap.config
- file for each data source that your project has.
- </dd>
- </dl>
+ file for each data source that your project has.
+ </dd>
+ </dl>
<p>As expected, the <tt>SqlMap.config</tt> file should be (by default) placed where the DataMapper
can find them at runtime.</p>
diff --git a/demos/sqlmap/protected/pages/Manual/Layout.tpl b/demos/sqlmap/protected/pages/Manual/Layout.tpl
index e4cc1b53..1b9611da 100755
--- a/demos/sqlmap/protected/pages/Manual/Layout.tpl
+++ b/demos/sqlmap/protected/pages/Manual/Layout.tpl
@@ -15,7 +15,7 @@
<com:TPanel ID="MainMenu" CssClass="mainmenu">
<a href="?">Home</a> |
-<a href="http://www.pradosoft.com">PradoSoft.com</a> |
+<a href="https://github.com/pradosoft/prado">Prado framework</a> |
<a href="../../docs/quickstart.pdf">PDF Version</a> |
<com:THyperLink ID="PrinterLink" Text="Printer-friendly Version" />
</com:TPanel>
@@ -34,7 +34,7 @@
</table>
<div id="footer">
-Copyright &copy; 2005-2006 <a href="http://www.pradosoft.com">PradoSoft</a>.
+Copyright &copy; 2005-2015 <a href="https://github.com/pradosoft">The PRADO Group</a>.
<br/><br/>
<a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0 Transitional</a>
diff --git a/demos/time-tracker/protected/App_Code/Dao/BaseDao.php b/demos/time-tracker/protected/App_Code/Dao/BaseDao.php
index 571a9d1a..b64139c0 100755
--- a/demos/time-tracker/protected/App_Code/Dao/BaseDao.php
+++ b/demos/time-tracker/protected/App_Code/Dao/BaseDao.php
@@ -3,9 +3,9 @@
* Base DAO class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
+ * @link https://github.com/pradosoft/prado
* @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package Demos
*/
diff --git a/demos/time-tracker/protected/App_Code/Dao/ProjectDao.php b/demos/time-tracker/protected/App_Code/Dao/ProjectDao.php
index 0110ae5e..5e71c3ea 100755
--- a/demos/time-tracker/protected/App_Code/Dao/ProjectDao.php
+++ b/demos/time-tracker/protected/App_Code/Dao/ProjectDao.php
@@ -3,9 +3,9 @@
* Project DAO class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
+ * @link https://github.com/pradosoft/prado
* @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package Demos
*/
diff --git a/demos/time-tracker/protected/App_Code/Dao/ProjectRecord.php b/demos/time-tracker/protected/App_Code/Dao/ProjectRecord.php
index c02a78a5..728946e1 100755
--- a/demos/time-tracker/protected/App_Code/Dao/ProjectRecord.php
+++ b/demos/time-tracker/protected/App_Code/Dao/ProjectRecord.php
@@ -3,9 +3,9 @@
* Project class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
+ * @link https://github.com/pradosoft/prado
* @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package Demos
*/
diff --git a/demos/time-tracker/protected/App_Code/Dao/UserDao.php b/demos/time-tracker/protected/App_Code/Dao/UserDao.php
index 51d04c58..16981d41 100755
--- a/demos/time-tracker/protected/App_Code/Dao/UserDao.php
+++ b/demos/time-tracker/protected/App_Code/Dao/UserDao.php
@@ -3,9 +3,9 @@
* User Dao class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
+ * @link https://github.com/pradosoft/prado
* @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package Demos
*/
diff --git a/demos/time-tracker/protected/App_Code/DaoManager.php b/demos/time-tracker/protected/App_Code/DaoManager.php
index 90655ac8..3505f50e 100755
--- a/demos/time-tracker/protected/App_Code/DaoManager.php
+++ b/demos/time-tracker/protected/App_Code/DaoManager.php
@@ -3,9 +3,9 @@
* DaoManager class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
+ * @link https://github.com/pradosoft/prado
* @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package Demos
*/
diff --git a/demos/time-tracker/protected/App_Code/TimeTrackerException.php b/demos/time-tracker/protected/App_Code/TimeTrackerException.php
index 87398952..3d1d114c 100755
--- a/demos/time-tracker/protected/App_Code/TimeTrackerException.php
+++ b/demos/time-tracker/protected/App_Code/TimeTrackerException.php
@@ -3,9 +3,9 @@
* TimeTrackerException class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
+ * @link https://github.com/pradosoft/prado
* @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package Demos
*/
diff --git a/demos/time-tracker/protected/App_Code/TimeTrackerUser.php b/demos/time-tracker/protected/App_Code/TimeTrackerUser.php
index 5215b31c..2777d4db 100755
--- a/demos/time-tracker/protected/App_Code/TimeTrackerUser.php
+++ b/demos/time-tracker/protected/App_Code/TimeTrackerUser.php
@@ -3,9 +3,9 @@
* TimeTrackerUser class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
+ * @link https://github.com/pradosoft/prado
* @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package Demos
*/
diff --git a/demos/time-tracker/protected/App_Code/UserManager.php b/demos/time-tracker/protected/App_Code/UserManager.php
index eabbe315..5b1f66d5 100755
--- a/demos/time-tracker/protected/App_Code/UserManager.php
+++ b/demos/time-tracker/protected/App_Code/UserManager.php
@@ -3,9 +3,9 @@
* UserManager class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
+ * @link https://github.com/pradosoft/prado
* @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package Demos
*/
diff --git a/demos/time-tracker/protected/App_Data/MySQL4/mysql-reset.sql b/demos/time-tracker/protected/App_Data/MySQL4/mysql-reset.sql
index e9581952..3293c433 100755
--- a/demos/time-tracker/protected/App_Data/MySQL4/mysql-reset.sql
+++ b/demos/time-tracker/protected/App_Data/MySQL4/mysql-reset.sql
@@ -13,9 +13,9 @@ INSERT INTO role_types (RoleType, Description) VALUES
('manager', 'Project manager may additionally edit all projects and view reports.');
INSERT INTO users (Username, Password, EmailAddress, Disabled) VALUES
-('admin', '21232f297a57a5a743894a0e4a801fc3', 'admin@pradosoft.com', 0),
-('manager', '1d0258c2440a8d19e716292b231e3190', 'manager@pradosoft.com', 0),
-('consultant', '7adfa4f2ba9323e6c1e024de375434b0', 'consultant@pradosoft.com', 0);
+('admin', '21232f297a57a5a743894a0e4a801fc3', 'admin@prado.local', 0),
+('manager', '1d0258c2440a8d19e716292b231e3190', 'manager@prado.local', 0),
+('consultant', '7adfa4f2ba9323e6c1e024de375434b0', 'consultant@prado.local', 0);
INSERT INTO user_roles (UserID, RoleType) VALUES
('admin', 'admin'),
diff --git a/demos/time-tracker/protected/App_Data/MySQL4/time-tracker-mysql.sql b/demos/time-tracker/protected/App_Data/MySQL4/time-tracker-mysql.sql
index 91481efe..41e9b211 100755
--- a/demos/time-tracker/protected/App_Data/MySQL4/time-tracker-mysql.sql
+++ b/demos/time-tracker/protected/App_Data/MySQL4/time-tracker-mysql.sql
@@ -177,9 +177,9 @@ CREATE TABLE IF NOT EXISTS `users` (
-- Dumping data for table `users`
--
-INSERT INTO `users` (`Username`, `Password`, `EmailAddress`, `Disabled`) VALUES ('admin', '21232f297a57a5a743894a0e4a801fc3', 'admin@pradosoft.com', 0),
-('consultant', '7adfa4f2ba9323e6c1e024de375434b0', 'consultant@pradosoft.com', 0),
-('manager', '1d0258c2440a8d19e716292b231e3190', 'manager@pradosoft.com', 0);
+INSERT INTO `users` (`Username`, `Password`, `EmailAddress`, `Disabled`) VALUES ('admin', '21232f297a57a5a743894a0e4a801fc3', 'admin@prado.local', 0),
+('consultant', '7adfa4f2ba9323e6c1e024de375434b0', 'consultant@prado.local', 0),
+('manager', '1d0258c2440a8d19e716292b231e3190', 'manager@prado.local', 0);
--
-- Constraints for dumped tables
diff --git a/demos/time-tracker/protected/App_Data/TimeTrackerUserTypeHandler.php b/demos/time-tracker/protected/App_Data/TimeTrackerUserTypeHandler.php
index 12a8a23e..923664a9 100755
--- a/demos/time-tracker/protected/App_Data/TimeTrackerUserTypeHandler.php
+++ b/demos/time-tracker/protected/App_Data/TimeTrackerUserTypeHandler.php
@@ -3,9 +3,9 @@
* TimeTrackerUserTypeHandler class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
+ * @link https://github.com/pradosoft/prado
* @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package Demos
*/
diff --git a/demos/time-tracker/protected/pages/TimeTracker/Login.php b/demos/time-tracker/protected/pages/TimeTracker/Login.php
index 8de63ad8..0eca050c 100755
--- a/demos/time-tracker/protected/pages/TimeTracker/Login.php
+++ b/demos/time-tracker/protected/pages/TimeTracker/Login.php
@@ -3,9 +3,9 @@
* Login Page class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
+ * @link https://github.com/pradosoft/prado
* @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package Demos
*/
diff --git a/demos/time-tracker/protected/pages/TimeTracker/Logout.php b/demos/time-tracker/protected/pages/TimeTracker/Logout.php
index bab924f2..3ca0f96a 100755
--- a/demos/time-tracker/protected/pages/TimeTracker/Logout.php
+++ b/demos/time-tracker/protected/pages/TimeTracker/Logout.php
@@ -3,9 +3,9 @@
* Logout class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
+ * @link https://github.com/pradosoft/prado
* @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package Demos
*/
diff --git a/demos/time-tracker/protected/pages/TimeTracker/MainLayout.tpl b/demos/time-tracker/protected/pages/TimeTracker/MainLayout.tpl
index 44aea22b..c1e23f45 100755
--- a/demos/time-tracker/protected/pages/TimeTracker/MainLayout.tpl
+++ b/demos/time-tracker/protected/pages/TimeTracker/MainLayout.tpl
@@ -36,7 +36,7 @@
</com:TForm>
<div class="copyrights">
-Copyright &copy; 2005-2006 <a href="http://www.pradosoft.com">PradoSoft</a>.
+Copyright &copy; 2005-2015 <a href="https://github.com/pradosoft">The PRADO Group</a>.
<span class="note"><a href="http://www.famfamfam.com/lab/icons/silk/">Silk icons</a> by Mark James.</span>
</div>
diff --git a/demos/time-tracker/protected/pages/TimeTracker/SiteMap.php b/demos/time-tracker/protected/pages/TimeTracker/SiteMap.php
index ab612baf..9f5e111a 100755
--- a/demos/time-tracker/protected/pages/TimeTracker/SiteMap.php
+++ b/demos/time-tracker/protected/pages/TimeTracker/SiteMap.php
@@ -3,9 +3,9 @@
* SiteMap template class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
+ * @link https://github.com/pradosoft/prado
* @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package Demos
*/
diff --git a/demos/time-tracker/protected/pages/TimeTracker/UserCreate.php b/demos/time-tracker/protected/pages/TimeTracker/UserCreate.php
index 34e69713..e58bf4ff 100755
--- a/demos/time-tracker/protected/pages/TimeTracker/UserCreate.php
+++ b/demos/time-tracker/protected/pages/TimeTracker/UserCreate.php
@@ -3,9 +3,9 @@
* UserCreate page class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
+ * @link https://github.com/pradosoft/prado
* @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package Demos
*/
diff --git a/demos/time-tracker/protected/pages/TimeTracker/UserList.php b/demos/time-tracker/protected/pages/TimeTracker/UserList.php
index 71b41add..344d5d2a 100755
--- a/demos/time-tracker/protected/pages/TimeTracker/UserList.php
+++ b/demos/time-tracker/protected/pages/TimeTracker/UserList.php
@@ -3,9 +3,9 @@
* UserList page class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
+ * @link https://github.com/pradosoft/prado
* @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package Demos
*/
diff --git a/demos/time-tracker/tests/unit/UserDaoTestCase.php b/demos/time-tracker/tests/unit/UserDaoTestCase.php
index d288faaf..5cae0f51 100755
--- a/demos/time-tracker/tests/unit/UserDaoTestCase.php
+++ b/demos/time-tracker/tests/unit/UserDaoTestCase.php
@@ -19,7 +19,7 @@ class UserDaoTestCase extends BaseTestCase
if(!$user)
return $this->fail();
$this->assertEqual($user->getName(), 'admin');
- $this->assertEqual($user->getEmailAddress(), 'admin@pradosoft.com');
+ $this->assertEqual($user->getEmailAddress(), 'admin@prado.local');
}
function assertSameUser($user1, $user2)
@@ -99,7 +99,7 @@ class UserDaoTestCase extends BaseTestCase
{
$user = new TimeTrackerUser(new UserManager());
$user->Name = "user1";
- $user->EmailAddress = 'user1@pradosoft.com';
+ $user->EmailAddress = 'user1@prado.local';
$this->userDao->addNewUser($user, 'password');
@@ -155,7 +155,7 @@ class UserDaoTestCase extends BaseTestCase
{
$user = new TimeTrackerUser(new UserManager());
$user->Name = "user1";
- $user->EmailAddress = 'user1@pradosoft.com';
+ $user->EmailAddress = 'user1@prado.local';
$user->Roles = array("manager", "consultant");
$this->userDao->addNewUser($user, 'password');
@@ -169,7 +169,7 @@ class UserDaoTestCase extends BaseTestCase
{
$user = new TimeTrackerUser(new UserManager());
$user->Name = "user1";
- $user->EmailAddress = 'user1@pradosoft.com';
+ $user->EmailAddress = 'user1@prado.local';
$user->Roles = array("manager", "consultant");
try
@@ -189,7 +189,7 @@ class UserDaoTestCase extends BaseTestCase
function testUpdateUser()
{
$user = $this->userDao->getUserByName('admin');
- $user->EmailAddress = 'something@pradosoft.com';
+ $user->EmailAddress = 'something@prado.local';
$user->Roles = array('manager', 'admin');
$this->userDao->updateUser($user);
@@ -203,7 +203,7 @@ class UserDaoTestCase extends BaseTestCase
function testUpdateUserPassword()
{
$user = $this->userDao->getUserByName('admin');
- $user->EmailAddress = 'something@pradosoft.com';
+ $user->EmailAddress = 'something@prado.local';
$user->Roles = array('manager', 'admin');
$pass = 'newpasword';
diff --git a/docs/sqlmap/latex/sqlmap.tex b/docs/sqlmap/latex/sqlmap.tex
index 57faaab3..de5651f7 100644
--- a/docs/sqlmap/latex/sqlmap.tex
+++ b/docs/sqlmap/latex/sqlmap.tex
@@ -93,7 +93,7 @@ Framework Developer Guide.
\chapter*{License}
\addcontentsline{toc}{chapter}{License}
SQLMap for PHP is free software released under the terms of the following BSD license.\\
-Copyright 2004-2006, PradoSoft (http://www.pradosoft.com)\\
+Copyright 2004-2015, The Prado Group (https://github.com/pradosoft/prado)\\
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/docs/sqlmap/latex/sqlmap_tut.tex b/docs/sqlmap/latex/sqlmap_tut.tex
index 728fc91f..cadab159 100644
--- a/docs/sqlmap/latex/sqlmap_tut.tex
+++ b/docs/sqlmap/latex/sqlmap_tut.tex
@@ -77,7 +77,7 @@ Tutorial.
\subsection*{License Information}
SQLMap for PHP is free software released under the terms of the following BSD
-license. Copyright 2004-2006, PradoSoft (http://www.pradosoft.com) All rights
+license. Copyright 2004-2015, PradoSoft (https://github.com/pradosoft/prado) All rights
reserved.
\subsection*{Disclaimer}
diff --git a/editors/Textmate/Prado.tmbundle/Snippets/TActiveHyperLink.tmSnippet b/editors/Textmate/Prado.tmbundle/Snippets/TActiveHyperLink.tmSnippet
index ea93645b..bd316738 100644
--- a/editors/Textmate/Prado.tmbundle/Snippets/TActiveHyperLink.tmSnippet
+++ b/editors/Textmate/Prado.tmbundle/Snippets/TActiveHyperLink.tmSnippet
@@ -3,7 +3,7 @@
<plist version="1.0">
<dict>
<key>content</key>
- <string>&lt;com:TActiveHyperLink NavigateUrl="${1:http://www.pradosoft.com/}" Text="${2:PradoSoft.com}" /&gt;$0</string>
+ <string>&lt;com:TActiveHyperLink NavigateUrl="${1:https://github.com/pradosoft/prado}" Text="${2:Prado framework}" /&gt;$0</string>
<key>name</key>
<string>TActiveHyperLink</string>
<key>scope</key>
diff --git a/editors/Textmate/Prado.tmbundle/Snippets/TCircleHotSpot.tmSnippet b/editors/Textmate/Prado.tmbundle/Snippets/TCircleHotSpot.tmSnippet
index 8881dc8d..44d4e71a 100644
--- a/editors/Textmate/Prado.tmbundle/Snippets/TCircleHotSpot.tmSnippet
+++ b/editors/Textmate/Prado.tmbundle/Snippets/TCircleHotSpot.tmSnippet
@@ -5,8 +5,8 @@
<key>content</key>
<string>&lt;com:TTCircleHotSpot
${1:HotspotMode="${2:Navigate}"
- NavigateUrl="${3:http://www.pradosoft.com}"}
- AlternateText="${4:Navigate to pradosoft.com}"
+ NavigateUrl="${3:https://github.com/pradosoft/prado}"}
+ AlternateText="${4:Navigate to Prado framework}"
X="${5:80}" Y="${6:80}" Radius="${7:55}" /&gt;$0</string>
<key>name</key>
<string>TCircleHotSpot (THotSpot)</string>
diff --git a/editors/Textmate/Prado.tmbundle/Snippets/THyperLink.tmSnippet b/editors/Textmate/Prado.tmbundle/Snippets/THyperLink.tmSnippet
index 0c1991e3..2e5d6874 100644
--- a/editors/Textmate/Prado.tmbundle/Snippets/THyperLink.tmSnippet
+++ b/editors/Textmate/Prado.tmbundle/Snippets/THyperLink.tmSnippet
@@ -3,7 +3,7 @@
<plist version="1.0">
<dict>
<key>content</key>
- <string>&lt;com:THyperLink NavigateUrl="${1:http://www.pradosoft.com/}" Text="${2:PradoSoft.com}" /&gt;$0</string>
+ <string>&lt;com:THyperLink NavigateUrl="${1:https://github.com/pradosoft/prado}" Text="${2:Prado framework}" /&gt;$0</string>
<key>name</key>
<string>THyperLink</string>
<key>scope</key>
diff --git a/editors/Textmate/Prado.tmbundle/Snippets/TImageMap.tmSnippet b/editors/Textmate/Prado.tmbundle/Snippets/TImageMap.tmSnippet
index 8e307925..c4497e2e 100644
--- a/editors/Textmate/Prado.tmbundle/Snippets/TImageMap.tmSnippet
+++ b/editors/Textmate/Prado.tmbundle/Snippets/TImageMap.tmSnippet
@@ -10,8 +10,8 @@
OnClick="${4:${1}_Clicked}"&gt;
${5:&lt;com:TTCircleHotSpot
${6:HotspotMode="${7:Navigate}"
- NavigateUrl="${8:http://www.pradosoft.com}"}
- AlternateText="${9:Navigate to pradosoft.com}"
+ NavigateUrl="${8:https://github.com/pradosoft/prado}"}
+ AlternateText="${9:Navigate to Prado framework}"
X="${10:80}" Y="${11:80}" Radius="${12:55}" /&gt;}$0
&lt;/com:TImageMap&gt;</string>
<key>name</key>
diff --git a/editors/Textmate/Prado.tmbundle/Snippets/TPolygonHotSpot.tmSnippet b/editors/Textmate/Prado.tmbundle/Snippets/TPolygonHotSpot.tmSnippet
index d2dfec33..f36fbec8 100644
--- a/editors/Textmate/Prado.tmbundle/Snippets/TPolygonHotSpot.tmSnippet
+++ b/editors/Textmate/Prado.tmbundle/Snippets/TPolygonHotSpot.tmSnippet
@@ -5,8 +5,8 @@
<key>content</key>
<string>&lt;com:TPolygonHotSpot
${1:HotspotMode="${2:Navigate}"
- NavigateUrl="${3:http://www.pradosoft.com}"}
- AlternateText="${4:Navigate to pradosoft.com}"
+ NavigateUrl="${3:https://github.com/pradosoft/prado}"}
+ AlternateText="${4:Navigate to Prado framework}"
Coordinates="${5:200,137,255}" /&gt;$0</string>
<key>name</key>
<string>TPolygonHotSpot (THotSpot)</string>
diff --git a/editors/Textmate/Prado.tmbundle/Snippets/TRectangleHotSpot.tmSnippet b/editors/Textmate/Prado.tmbundle/Snippets/TRectangleHotSpot.tmSnippet
index f0d8c70e..eb66e8f3 100644
--- a/editors/Textmate/Prado.tmbundle/Snippets/TRectangleHotSpot.tmSnippet
+++ b/editors/Textmate/Prado.tmbundle/Snippets/TRectangleHotSpot.tmSnippet
@@ -5,8 +5,8 @@
<key>content</key>
<string>&lt;com:TRectangleHotSpot
${1:HotspotMode="${2:Navigate}"
- NavigateUrl="${3:http://www.pradosoft.com}"}
- AlternateText="${4:Navigate to pradosoft.com}"
+ NavigateUrl="${3:https://github.com/pradosoft/prado}"}
+ AlternateText="${4:Navigate to Prado framework}"
Top="${5:10}" Left="${6:10}" Bottom="${7:110}" Right="${8:110}" /&gt;$0</string>
<key>name</key>
<string>TRectangleHotSpot (THotSpot)</string>
diff --git a/framework/Caching/TAPCCache.php b/framework/Caching/TAPCCache.php
index ec0aa35c..2274412d 100644
--- a/framework/Caching/TAPCCache.php
+++ b/framework/Caching/TAPCCache.php
@@ -3,9 +3,9 @@
* TAPCCache class file
*
* @author Alban Hanry <compte_messagerie@hotmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Caching
*/
diff --git a/framework/Caching/TCache.php b/framework/Caching/TCache.php
index 99b3f24c..4a66dd0d 100644
--- a/framework/Caching/TCache.php
+++ b/framework/Caching/TCache.php
@@ -3,9 +3,9 @@
* TCache and cache dependency classes.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Caching
*/
diff --git a/framework/Caching/TDbCache.php b/framework/Caching/TDbCache.php
index c26066a2..f0cf9625 100644
--- a/framework/Caching/TDbCache.php
+++ b/framework/Caching/TDbCache.php
@@ -3,9 +3,9 @@
* TDbCache class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Caching
*/
diff --git a/framework/Caching/TEACache.php b/framework/Caching/TEACache.php
index f57011a6..251566b3 100644
--- a/framework/Caching/TEACache.php
+++ b/framework/Caching/TEACache.php
@@ -1 +1 @@
-<?php /** * TEACache class file * * @author Dario rigolin <drigolin@e-portaltech.it> * @link http://www.pradosoft.com/ * @copyright Copyright &copy; 2005-2014 PradoSoft * @license http://www.pradosoft.com/license/ * @package System.Caching */ /** * TEACache class * * TEACache implements a cache application module based on {@link http://eaccelerator.net/ eAccelerator}. * * By definition, cache does not ensure the existence of a value * even if it never expires. Cache is not meant to be an persistent storage. * * To use this module, the eAccelerator PHP extension must be loaded and enabled * * Please note that as of v0.9.6, eAccelerator no longer supports data caching. * This means if you still want to use this component, your eAccelerator should be of 0.9.5.x or lower version. * * Some usage examples of TEACache are as follows, * <code> * $cache=new TEACache; // TEACache may also be loaded as a Prado application module * $cache->init(null); * $cache->add('object',$object); * $object2=$cache->get('object'); * </code> * * If loaded, TEACache will register itself with {@link TApplication} as the * cache module. It can be accessed via {@link TApplication::getCache()}. * * TEACache may be configured in application configuration file as follows * <code> * <module id="cache" class="System.Caching.TEACache" /> * </code> * * @author Dario Rigolin <drigolin@e-portaltech.it> * @package System.Caching * @since 3.2.2 */ class TEACache extends TCache { /** * Initializes this module. * This method is required by the IModule interface. * @param TXmlElement configuration for this module, can be null * @throws TConfigurationException if eaccelerator extension is not installed or not started, check your php.ini */ public function init($config) { if(!function_exists('eaccelerator_get')) throw new TConfigurationException('eacceleratorcache_extension_required'); parent::init($config); } /** * Retrieves a value from cache with a specified key. * This is the implementation of the method declared in the parent class. * @param string 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. */ protected function getValue($key) { $value = eaccelerator_get($key); return ($value === null) ? false : $value; } /** * Stores a value identified by a key in cache. * This is the implementation of the method declared in the parent class. * * @param string the key identifying the value to be cached * @param string the value to be cached * @param integer 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) { return eaccelerator_put($key,$value,$expire); } /** * 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 the key identifying the value to be cached * @param string the value to be cached * @param integer 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) { return (null === eaccelerator_get($key)) ? $this->setValue($key,$value,$expire) : false; } /** * Deletes a value with the specified key from cache * This is the implementation of the method declared in the parent class. * @param string the key of the value to be deleted * @return boolean if no error happens during deletion */ protected function deleteValue($key) { return eaccelerator_rm($key); } /** * Deletes all values from cache. * Be careful of performing this operation if the cache is shared by multiple applications. */ public function flush() { // first, remove expired content from cache eaccelerator_gc(); // now, remove leftover cache-keys $keys = eaccelerator_list_keys(); foreach($keys as $key) $this->deleteValue(substr($key['name'], 1)); return true; } } \ No newline at end of file
+<?php /** * TEACache class file * * @author Dario rigolin <drigolin@e-portaltech.it> * @link https://github.com/pradosoft/prado * @copyright Copyright &copy; 2005-2015 The PRADO Group * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT * @package System.Caching */ /** * TEACache class * * TEACache implements a cache application module based on {@link http://eaccelerator.net/ eAccelerator}. * * By definition, cache does not ensure the existence of a value * even if it never expires. Cache is not meant to be an persistent storage. * * To use this module, the eAccelerator PHP extension must be loaded and enabled * * Please note that as of v0.9.6, eAccelerator no longer supports data caching. * This means if you still want to use this component, your eAccelerator should be of 0.9.5.x or lower version. * * Some usage examples of TEACache are as follows, * <code> * $cache=new TEACache; // TEACache may also be loaded as a Prado application module * $cache->init(null); * $cache->add('object',$object); * $object2=$cache->get('object'); * </code> * * If loaded, TEACache will register itself with {@link TApplication} as the * cache module. It can be accessed via {@link TApplication::getCache()}. * * TEACache may be configured in application configuration file as follows * <code> * <module id="cache" class="System.Caching.TEACache" /> * </code> * * @author Dario Rigolin <drigolin@e-portaltech.it> * @package System.Caching * @since 3.2.2 */ class TEACache extends TCache { /** * Initializes this module. * This method is required by the IModule interface. * @param TXmlElement configuration for this module, can be null * @throws TConfigurationException if eaccelerator extension is not installed or not started, check your php.ini */ public function init($config) { if(!function_exists('eaccelerator_get')) throw new TConfigurationException('eacceleratorcache_extension_required'); parent::init($config); } /** * Retrieves a value from cache with a specified key. * This is the implementation of the method declared in the parent class. * @param string 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. */ protected function getValue($key) { $value = eaccelerator_get($key); return ($value === null) ? false : $value; } /** * Stores a value identified by a key in cache. * This is the implementation of the method declared in the parent class. * * @param string the key identifying the value to be cached * @param string the value to be cached * @param integer 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) { return eaccelerator_put($key,$value,$expire); } /** * 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 the key identifying the value to be cached * @param string the value to be cached * @param integer 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) { return (null === eaccelerator_get($key)) ? $this->setValue($key,$value,$expire) : false; } /** * Deletes a value with the specified key from cache * This is the implementation of the method declared in the parent class. * @param string the key of the value to be deleted * @return boolean if no error happens during deletion */ protected function deleteValue($key) { return eaccelerator_rm($key); } /** * Deletes all values from cache. * Be careful of performing this operation if the cache is shared by multiple applications. */ public function flush() { // first, remove expired content from cache eaccelerator_gc(); // now, remove leftover cache-keys $keys = eaccelerator_list_keys(); foreach($keys as $key) $this->deleteValue(substr($key['name'], 1)); return true; } } \ No newline at end of file
diff --git a/framework/Caching/TMemCache.php b/framework/Caching/TMemCache.php
index c2d4901b..2b200156 100644
--- a/framework/Caching/TMemCache.php
+++ b/framework/Caching/TMemCache.php
@@ -4,9 +4,9 @@
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @author Carl G. Mathisen <carlgmathisen@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Caching
*/
diff --git a/framework/Caching/TSqliteCache.php b/framework/Caching/TSqliteCache.php
index 3c11d45f..8451a9ea 100644
--- a/framework/Caching/TSqliteCache.php
+++ b/framework/Caching/TSqliteCache.php
@@ -3,9 +3,9 @@
* TSqliteCache class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Caching
*/
diff --git a/framework/Caching/TXCache.php b/framework/Caching/TXCache.php
index b29fd38c..19ae42ab 100644
--- a/framework/Caching/TXCache.php
+++ b/framework/Caching/TXCache.php
@@ -3,9 +3,9 @@
* TXCache class file
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Caching
*/
diff --git a/framework/Collections/TAttributeCollection.php b/framework/Collections/TAttributeCollection.php
index 775ad054..a0f14efd 100644
--- a/framework/Collections/TAttributeCollection.php
+++ b/framework/Collections/TAttributeCollection.php
@@ -3,9 +3,9 @@
* TAttributeCollection classes
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Collections
*/
diff --git a/framework/Collections/TDummyDataSource.php b/framework/Collections/TDummyDataSource.php
index 7345982a..6aaaeaa8 100644
--- a/framework/Collections/TDummyDataSource.php
+++ b/framework/Collections/TDummyDataSource.php
@@ -3,9 +3,9 @@
* TDummyDataSource, TDummyDataSourceIterator classes
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Collections
*/
diff --git a/framework/Collections/TList.php b/framework/Collections/TList.php
index 765fa2ce..bba0dae8 100644
--- a/framework/Collections/TList.php
+++ b/framework/Collections/TList.php
@@ -3,9 +3,9 @@
* TList, TListIterator classes
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Collections
*/
diff --git a/framework/Collections/TListItemCollection.php b/framework/Collections/TListItemCollection.php
index 90a1fbf1..ed00146d 100644
--- a/framework/Collections/TListItemCollection.php
+++ b/framework/Collections/TListItemCollection.php
@@ -5,9 +5,9 @@
*
* @author Robin J. Rogge <rojaro@gmail.com>
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Collections
*/
diff --git a/framework/Collections/TMap.php b/framework/Collections/TMap.php
index a0ae8d5b..d610dce6 100644
--- a/framework/Collections/TMap.php
+++ b/framework/Collections/TMap.php
@@ -3,9 +3,9 @@
* TMap, TMapIterator classes
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Collections
*/
diff --git a/framework/Collections/TPagedDataSource.php b/framework/Collections/TPagedDataSource.php
index 745fc052..ec0b8956 100644
--- a/framework/Collections/TPagedDataSource.php
+++ b/framework/Collections/TPagedDataSource.php
@@ -3,9 +3,9 @@
* TPagedDataSource, TPagedListIterator, TPagedMapIterator classes
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Collections
*/
diff --git a/framework/Collections/TPagedList.php b/framework/Collections/TPagedList.php
index 57e567e0..118bba1a 100644
--- a/framework/Collections/TPagedList.php
+++ b/framework/Collections/TPagedList.php
@@ -3,9 +3,9 @@
* TPagedList, TPagedListFetchDataEventParameter, TPagedListPageChangedEventParameter class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Collections
*/
diff --git a/framework/Collections/TPriorityList.php b/framework/Collections/TPriorityList.php
index 6a66b5be..ad548dc4 100644
--- a/framework/Collections/TPriorityList.php
+++ b/framework/Collections/TPriorityList.php
@@ -3,9 +3,9 @@
* TPriorityList, TPriorityListIterator classes
*
* @author Brad Anderson <javalizard@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Collections
*/
diff --git a/framework/Collections/TPriorityMap.php b/framework/Collections/TPriorityMap.php
index 352e56ff..9af10da8 100644
--- a/framework/Collections/TPriorityMap.php
+++ b/framework/Collections/TPriorityMap.php
@@ -3,9 +3,9 @@
* TPriorityMap, TPriorityMapIterator classes
*
* @author Brad Anderson <javalizard@mac.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Collections
*/
diff --git a/framework/Collections/TQueue.php b/framework/Collections/TQueue.php
index ffa81b95..6c989e25 100644
--- a/framework/Collections/TQueue.php
+++ b/framework/Collections/TQueue.php
@@ -3,9 +3,9 @@
* TQueue, TQueueIterator classes
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @package System.Collections
*/
diff --git a/framework/Collections/TStack.php b/framework/Collections/TStack.php
index 91996aaa..de78527e 100644
--- a/framework/Collections/TStack.php
+++ b/framework/Collections/TStack.php
@@ -3,9 +3,9 @@
* TStack, TStackIterator classes
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Collections
*/
diff --git a/framework/Data/ActiveRecord/Exceptions/TActiveRecordException.php b/framework/Data/ActiveRecord/Exceptions/TActiveRecordException.php
index 11fb796b..c4b8adf6 100644
--- a/framework/Data/ActiveRecord/Exceptions/TActiveRecordException.php
+++ b/framework/Data/ActiveRecord/Exceptions/TActiveRecordException.php
@@ -3,9 +3,9 @@
* TActiveRecordException class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.ActiveRecord
*/
diff --git a/framework/Data/ActiveRecord/Relations/TActiveRecordBelongsTo.php b/framework/Data/ActiveRecord/Relations/TActiveRecordBelongsTo.php
index 2197b48c..4b0f89df 100644
--- a/framework/Data/ActiveRecord/Relations/TActiveRecordBelongsTo.php
+++ b/framework/Data/ActiveRecord/Relations/TActiveRecordBelongsTo.php
@@ -3,9 +3,9 @@
* TActiveRecordBelongsTo class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @package System.Data.ActiveRecord.Relations
*/
diff --git a/framework/Data/ActiveRecord/Relations/TActiveRecordHasMany.php b/framework/Data/ActiveRecord/Relations/TActiveRecordHasMany.php
index 92fe495a..cf3a8fcf 100644
--- a/framework/Data/ActiveRecord/Relations/TActiveRecordHasMany.php
+++ b/framework/Data/ActiveRecord/Relations/TActiveRecordHasMany.php
@@ -3,9 +3,9 @@
* TActiveRecordHasMany class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @package System.Data.ActiveRecord.Relations
*/
diff --git a/framework/Data/ActiveRecord/Relations/TActiveRecordHasManyAssociation.php b/framework/Data/ActiveRecord/Relations/TActiveRecordHasManyAssociation.php
index 1b58f112..4c638d05 100644
--- a/framework/Data/ActiveRecord/Relations/TActiveRecordHasManyAssociation.php
+++ b/framework/Data/ActiveRecord/Relations/TActiveRecordHasManyAssociation.php
@@ -3,9 +3,9 @@
* TActiveRecordHasManyAssociation class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @package System.Data.ActiveRecord.Relations
*/
diff --git a/framework/Data/ActiveRecord/Relations/TActiveRecordHasOne.php b/framework/Data/ActiveRecord/Relations/TActiveRecordHasOne.php
index 46c4d9fb..2b9ada2d 100644
--- a/framework/Data/ActiveRecord/Relations/TActiveRecordHasOne.php
+++ b/framework/Data/ActiveRecord/Relations/TActiveRecordHasOne.php
@@ -3,9 +3,9 @@
* TActiveRecordHasOne class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @package System.Data.ActiveRecord.Relations
*/
diff --git a/framework/Data/ActiveRecord/Relations/TActiveRecordRelation.php b/framework/Data/ActiveRecord/Relations/TActiveRecordRelation.php
index 7fe2d468..1b577f0b 100644
--- a/framework/Data/ActiveRecord/Relations/TActiveRecordRelation.php
+++ b/framework/Data/ActiveRecord/Relations/TActiveRecordRelation.php
@@ -3,9 +3,9 @@
* TActiveRecordRelation class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @package System.Data.ActiveRecord.Relations
*/
diff --git a/framework/Data/ActiveRecord/Relations/TActiveRecordRelationContext.php b/framework/Data/ActiveRecord/Relations/TActiveRecordRelationContext.php
index 961dcd91..24fdee57 100644
--- a/framework/Data/ActiveRecord/Relations/TActiveRecordRelationContext.php
+++ b/framework/Data/ActiveRecord/Relations/TActiveRecordRelationContext.php
@@ -3,9 +3,9 @@
* TActiveRecordRelationContext class.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @package System.Data.ActiveRecord.Relations
*/
diff --git a/framework/Data/ActiveRecord/Scaffold/InputBuilder/TIbmScaffoldInput.php b/framework/Data/ActiveRecord/Scaffold/InputBuilder/TIbmScaffoldInput.php
index 0a2c0cd3..47b6797c 100644
--- a/framework/Data/ActiveRecord/Scaffold/InputBuilder/TIbmScaffoldInput.php
+++ b/framework/Data/ActiveRecord/Scaffold/InputBuilder/TIbmScaffoldInput.php
@@ -3,9 +3,9 @@
* TIbmScaffoldInput class file.
*
* @author Cesar Ramos <cramos[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.ActiveRecord.Scaffold.InputBuilder
*/
Prado::using('System.Data.ActiveRecord.Scaffold.InputBuilder.TScaffoldInputCommon');
diff --git a/framework/Data/ActiveRecord/Scaffold/InputBuilder/TMssqlScaffoldInput.php b/framework/Data/ActiveRecord/Scaffold/InputBuilder/TMssqlScaffoldInput.php
index 1cb73438..3ebc0c7b 100644
--- a/framework/Data/ActiveRecord/Scaffold/InputBuilder/TMssqlScaffoldInput.php
+++ b/framework/Data/ActiveRecord/Scaffold/InputBuilder/TMssqlScaffoldInput.php
@@ -2,9 +2,9 @@
/**
* TMssqlScaffoldInput class file.
*
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.ActiveRecord.Scaffold.InputBuilder
*/
Prado::using('System.Data.ActiveRecord.Scaffold.InputBuilder.TScaffoldInputCommon');
diff --git a/framework/Data/ActiveRecord/Scaffold/InputBuilder/TMysqlScaffoldInput.php b/framework/Data/ActiveRecord/Scaffold/InputBuilder/TMysqlScaffoldInput.php
index e2e75318..68854618 100644
--- a/framework/Data/ActiveRecord/Scaffold/InputBuilder/TMysqlScaffoldInput.php
+++ b/framework/Data/ActiveRecord/Scaffold/InputBuilder/TMysqlScaffoldInput.php
@@ -2,9 +2,9 @@
/**
* TMysqlScaffoldInput class file.
*
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.ActiveRecord.Scaffold.InputBuilder
*/
Prado::using('System.Data.ActiveRecord.Scaffold.InputBuilder.TScaffoldInputCommon');
diff --git a/framework/Data/ActiveRecord/Scaffold/InputBuilder/TPgsqlScaffoldInput.php b/framework/Data/ActiveRecord/Scaffold/InputBuilder/TPgsqlScaffoldInput.php
index 6d10874a..312f34d4 100644
--- a/framework/Data/ActiveRecord/Scaffold/InputBuilder/TPgsqlScaffoldInput.php
+++ b/framework/Data/ActiveRecord/Scaffold/InputBuilder/TPgsqlScaffoldInput.php
@@ -2,9 +2,9 @@
/**
* TPgsqlScaffoldInput class file.
*
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.ActiveRecord.Scaffold.InputBuilder
*/
Prado::using('System.Data.ActiveRecord.Scaffold.InputBuilder.TScaffoldInputCommon');
diff --git a/framework/Data/ActiveRecord/Scaffold/InputBuilder/TScaffoldInputBase.php b/framework/Data/ActiveRecord/Scaffold/InputBuilder/TScaffoldInputBase.php
index 14244b4c..bb1715a0 100644
--- a/framework/Data/ActiveRecord/Scaffold/InputBuilder/TScaffoldInputBase.php
+++ b/framework/Data/ActiveRecord/Scaffold/InputBuilder/TScaffoldInputBase.php
@@ -2,9 +2,9 @@
/**
* TScaffoldInputBase class file.
*
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.ActiveRecord.Scaffold.InputBuilder
*/
class TScaffoldInputBase
diff --git a/framework/Data/ActiveRecord/Scaffold/InputBuilder/TScaffoldInputCommon.php b/framework/Data/ActiveRecord/Scaffold/InputBuilder/TScaffoldInputCommon.php
index 3394680e..1805affd 100644
--- a/framework/Data/ActiveRecord/Scaffold/InputBuilder/TScaffoldInputCommon.php
+++ b/framework/Data/ActiveRecord/Scaffold/InputBuilder/TScaffoldInputCommon.php
@@ -2,9 +2,9 @@
/**
* TScaffoldInputCommon class file.
*
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.ActiveRecord.Scaffold.InputBuilder
*/
Prado::using('System.Data.ActiveRecord.Scaffold.InputBuilder.TScaffoldInputBase');
diff --git a/framework/Data/ActiveRecord/Scaffold/InputBuilder/TSqliteScaffoldInput.php b/framework/Data/ActiveRecord/Scaffold/InputBuilder/TSqliteScaffoldInput.php
index 441d2770..95078be4 100644
--- a/framework/Data/ActiveRecord/Scaffold/InputBuilder/TSqliteScaffoldInput.php
+++ b/framework/Data/ActiveRecord/Scaffold/InputBuilder/TSqliteScaffoldInput.php
@@ -2,9 +2,9 @@
/**
* TSqliteScaffoldInput class file.
*
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.ActiveRecord.Scaffold.InputBuilder
*/
Prado::using('System.Data.ActiveRecord.Scaffold.InputBuilder.TScaffoldInputCommon');
diff --git a/framework/Data/ActiveRecord/Scaffold/TScaffoldBase.php b/framework/Data/ActiveRecord/Scaffold/TScaffoldBase.php
index 122dfbd2..15cb2c0f 100644
--- a/framework/Data/ActiveRecord/Scaffold/TScaffoldBase.php
+++ b/framework/Data/ActiveRecord/Scaffold/TScaffoldBase.php
@@ -3,9 +3,9 @@
* TScaffoldBase class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.ActiveRecord.Scaffold
*/
diff --git a/framework/Data/ActiveRecord/Scaffold/TScaffoldEditView.php b/framework/Data/ActiveRecord/Scaffold/TScaffoldEditView.php
index 74e79eaa..1d706d61 100644
--- a/framework/Data/ActiveRecord/Scaffold/TScaffoldEditView.php
+++ b/framework/Data/ActiveRecord/Scaffold/TScaffoldEditView.php
@@ -3,9 +3,9 @@
* TScaffoldEditView class and IScaffoldEditRenderer interface file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.ActiveRecord.Scaffold
*/
diff --git a/framework/Data/ActiveRecord/Scaffold/TScaffoldListView.php b/framework/Data/ActiveRecord/Scaffold/TScaffoldListView.php
index afdb126c..d5367e9e 100644
--- a/framework/Data/ActiveRecord/Scaffold/TScaffoldListView.php
+++ b/framework/Data/ActiveRecord/Scaffold/TScaffoldListView.php
@@ -3,9 +3,9 @@
* TScaffoldListView class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.ActiveRecord.Scaffold
*/
diff --git a/framework/Data/ActiveRecord/Scaffold/TScaffoldSearch.php b/framework/Data/ActiveRecord/Scaffold/TScaffoldSearch.php
index ea2d2c94..e2627e50 100644
--- a/framework/Data/ActiveRecord/Scaffold/TScaffoldSearch.php
+++ b/framework/Data/ActiveRecord/Scaffold/TScaffoldSearch.php
@@ -3,9 +3,9 @@
* TScaffoldSearch class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @package System.Data.ActiveRecord.Scaffold
*/
diff --git a/framework/Data/ActiveRecord/Scaffold/TScaffoldView.php b/framework/Data/ActiveRecord/Scaffold/TScaffoldView.php
index acc78fd2..3d4019ac 100644
--- a/framework/Data/ActiveRecord/Scaffold/TScaffoldView.php
+++ b/framework/Data/ActiveRecord/Scaffold/TScaffoldView.php
@@ -3,9 +3,9 @@
* TScaffoldView class.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.ActiveRecord.Scaffold
*/
diff --git a/framework/Data/ActiveRecord/TActiveRecord.php b/framework/Data/ActiveRecord/TActiveRecord.php
index 735579cd..186af859 100644
--- a/framework/Data/ActiveRecord/TActiveRecord.php
+++ b/framework/Data/ActiveRecord/TActiveRecord.php
@@ -3,9 +3,9 @@
* TActiveRecord, TActiveRecordEventParameter, TActiveRecordInvalidFinderResult class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.ActiveRecord
*/
@@ -612,6 +612,8 @@ abstract class TActiveRecord extends TComponent
*/
public function findByPk($keys)
{
+ if($keys === null)
+ return null;
if(func_num_args() > 1)
$keys = func_get_args();
$data = $this->getRecordGateway()->findRecordByPK($this,$keys);
diff --git a/framework/Data/ActiveRecord/TActiveRecordConfig.php b/framework/Data/ActiveRecord/TActiveRecordConfig.php
index 6e726df0..f2c7e0b6 100644
--- a/framework/Data/ActiveRecord/TActiveRecordConfig.php
+++ b/framework/Data/ActiveRecord/TActiveRecordConfig.php
@@ -3,9 +3,9 @@
* TActiveRecordConfig class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.ActiveRecord
*/
diff --git a/framework/Data/ActiveRecord/TActiveRecordCriteria.php b/framework/Data/ActiveRecord/TActiveRecordCriteria.php
index aec3ce53..612658ec 100644
--- a/framework/Data/ActiveRecord/TActiveRecordCriteria.php
+++ b/framework/Data/ActiveRecord/TActiveRecordCriteria.php
@@ -3,9 +3,9 @@
* TActiveRecordCriteria class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.ActiveRecord
*/
diff --git a/framework/Data/ActiveRecord/TActiveRecordGateway.php b/framework/Data/ActiveRecord/TActiveRecordGateway.php
index 4d4fdac1..e631a734 100644
--- a/framework/Data/ActiveRecord/TActiveRecordGateway.php
+++ b/framework/Data/ActiveRecord/TActiveRecordGateway.php
@@ -3,9 +3,9 @@
* TActiveRecordGateway, TActiveRecordStatementType, TActiveRecordEventParameter classes file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.ActiveRecord
*/
diff --git a/framework/Data/ActiveRecord/TActiveRecordManager.php b/framework/Data/ActiveRecord/TActiveRecordManager.php
index 4aa2cde9..1e836d5b 100644
--- a/framework/Data/ActiveRecord/TActiveRecordManager.php
+++ b/framework/Data/ActiveRecord/TActiveRecordManager.php
@@ -3,9 +3,9 @@
* TActiveRecordManager class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.ActiveRecord
*/
diff --git a/framework/Data/Common/Mssql/TMssqlCommandBuilder.php b/framework/Data/Common/Mssql/TMssqlCommandBuilder.php
index ac718bcb..e3f1f5c6 100644
--- a/framework/Data/Common/Mssql/TMssqlCommandBuilder.php
+++ b/framework/Data/Common/Mssql/TMssqlCommandBuilder.php
@@ -3,9 +3,9 @@
* TMsssqlCommandBuilder class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common
*/
diff --git a/framework/Data/Common/Mssql/TMssqlMetaData.php b/framework/Data/Common/Mssql/TMssqlMetaData.php
index 990639af..d0fc167c 100644
--- a/framework/Data/Common/Mssql/TMssqlMetaData.php
+++ b/framework/Data/Common/Mssql/TMssqlMetaData.php
@@ -3,9 +3,9 @@
* TMssqlMetaData class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common.Mssql
*/
diff --git a/framework/Data/Common/Mssql/TMssqlTableColumn.php b/framework/Data/Common/Mssql/TMssqlTableColumn.php
index e3bd431e..a02ebf0a 100644
--- a/framework/Data/Common/Mssql/TMssqlTableColumn.php
+++ b/framework/Data/Common/Mssql/TMssqlTableColumn.php
@@ -3,9 +3,9 @@
* TMssqlTableColumn class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common.Mssql
*/
diff --git a/framework/Data/Common/Mssql/TMssqlTableInfo.php b/framework/Data/Common/Mssql/TMssqlTableInfo.php
index d003b336..bee4730b 100644
--- a/framework/Data/Common/Mssql/TMssqlTableInfo.php
+++ b/framework/Data/Common/Mssql/TMssqlTableInfo.php
@@ -3,9 +3,9 @@
* TMssqlTableInfo class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common.Mssql
*/
diff --git a/framework/Data/Common/Mysql/TMysqlCommandBuilder.php b/framework/Data/Common/Mysql/TMysqlCommandBuilder.php
index 38e98b4f..b5bdc28a 100644
--- a/framework/Data/Common/Mysql/TMysqlCommandBuilder.php
+++ b/framework/Data/Common/Mysql/TMysqlCommandBuilder.php
@@ -3,9 +3,9 @@
* TMysqlCommandBuilder class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common
*/
diff --git a/framework/Data/Common/Mysql/TMysqlMetaData.php b/framework/Data/Common/Mysql/TMysqlMetaData.php
index 94826e03..e7747b71 100644
--- a/framework/Data/Common/Mysql/TMysqlMetaData.php
+++ b/framework/Data/Common/Mysql/TMysqlMetaData.php
@@ -3,9 +3,9 @@
* TMysqlMetaData class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common.Mysql
*/
diff --git a/framework/Data/Common/Mysql/TMysqlTableColumn.php b/framework/Data/Common/Mysql/TMysqlTableColumn.php
index dd62f0f6..5b84f800 100644
--- a/framework/Data/Common/Mysql/TMysqlTableColumn.php
+++ b/framework/Data/Common/Mysql/TMysqlTableColumn.php
@@ -3,9 +3,9 @@
* TMysqlTableColumn class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common.Mysql
*/
diff --git a/framework/Data/Common/Mysql/TMysqlTableInfo.php b/framework/Data/Common/Mysql/TMysqlTableInfo.php
index 17b32aa9..bc5dc4ee 100644
--- a/framework/Data/Common/Mysql/TMysqlTableInfo.php
+++ b/framework/Data/Common/Mysql/TMysqlTableInfo.php
@@ -3,9 +3,9 @@
* TMysqlTableInfo class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common.Mysql
*/
diff --git a/framework/Data/Common/Oracle/TOracleCommandBuilder.php b/framework/Data/Common/Oracle/TOracleCommandBuilder.php
index 56173c3a..ad4c9f4e 100644
--- a/framework/Data/Common/Oracle/TOracleCommandBuilder.php
+++ b/framework/Data/Common/Oracle/TOracleCommandBuilder.php
@@ -4,9 +4,9 @@
* TOracleCommandBuilder class file.
*
* @author Marcos Nobre <marconobre[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common
*/
diff --git a/framework/Data/Common/Oracle/TOracleMetaData.php b/framework/Data/Common/Oracle/TOracleMetaData.php
index fc1800c5..7fd3d1f3 100644
--- a/framework/Data/Common/Oracle/TOracleMetaData.php
+++ b/framework/Data/Common/Oracle/TOracleMetaData.php
@@ -3,9 +3,9 @@
* TOracleMetaData class file.
*
* @author Marcos Nobre <marconobre[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common.Oracle
*/
diff --git a/framework/Data/Common/Oracle/TOracleTableColumn.php b/framework/Data/Common/Oracle/TOracleTableColumn.php
index bc89d8c5..31a5e6ce 100644
--- a/framework/Data/Common/Oracle/TOracleTableColumn.php
+++ b/framework/Data/Common/Oracle/TOracleTableColumn.php
@@ -3,9 +3,9 @@
* TOracleTableColumn class file.
*
* @author Marcos Nobre <marconobre[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common.Oracle
*/
diff --git a/framework/Data/Common/Oracle/TOracleTableInfo.php b/framework/Data/Common/Oracle/TOracleTableInfo.php
index 4a2e31fd..f2265624 100644
--- a/framework/Data/Common/Oracle/TOracleTableInfo.php
+++ b/framework/Data/Common/Oracle/TOracleTableInfo.php
@@ -4,9 +4,9 @@
* TOracleTableInfo class file.
*
* @author Marcos Nobre <marconobre[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common
*/
diff --git a/framework/Data/Common/Pgsql/TPgsqlCommandBuilder.php b/framework/Data/Common/Pgsql/TPgsqlCommandBuilder.php
index 851dabb5..5e219ad2 100644
--- a/framework/Data/Common/Pgsql/TPgsqlCommandBuilder.php
+++ b/framework/Data/Common/Pgsql/TPgsqlCommandBuilder.php
@@ -3,9 +3,9 @@
* TPgsqlCommandBuilder class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common
*/
diff --git a/framework/Data/Common/Pgsql/TPgsqlMetaData.php b/framework/Data/Common/Pgsql/TPgsqlMetaData.php
index e5d30ed7..3001cf49 100644
--- a/framework/Data/Common/Pgsql/TPgsqlMetaData.php
+++ b/framework/Data/Common/Pgsql/TPgsqlMetaData.php
@@ -3,9 +3,9 @@
* TPgsqlMetaData class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common.Pgsql
*/
diff --git a/framework/Data/Common/Pgsql/TPgsqlTableColumn.php b/framework/Data/Common/Pgsql/TPgsqlTableColumn.php
index fd0fd23c..efe516e4 100644
--- a/framework/Data/Common/Pgsql/TPgsqlTableColumn.php
+++ b/framework/Data/Common/Pgsql/TPgsqlTableColumn.php
@@ -3,9 +3,9 @@
* TPgsqlTableColumn class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common.Pgsql
*/
diff --git a/framework/Data/Common/Pgsql/TPgsqlTableInfo.php b/framework/Data/Common/Pgsql/TPgsqlTableInfo.php
index 43298ffa..aef09fa8 100644
--- a/framework/Data/Common/Pgsql/TPgsqlTableInfo.php
+++ b/framework/Data/Common/Pgsql/TPgsqlTableInfo.php
@@ -3,9 +3,9 @@
* TPgsqlTableInfo class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common.Pgsql
*/
diff --git a/framework/Data/Common/Sqlite/TSqliteCommandBuilder.php b/framework/Data/Common/Sqlite/TSqliteCommandBuilder.php
index b442f7b4..970ede47 100644
--- a/framework/Data/Common/Sqlite/TSqliteCommandBuilder.php
+++ b/framework/Data/Common/Sqlite/TSqliteCommandBuilder.php
@@ -3,9 +3,9 @@
* TSqliteCommandBuilder class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common
*/
diff --git a/framework/Data/Common/Sqlite/TSqliteMetaData.php b/framework/Data/Common/Sqlite/TSqliteMetaData.php
index b6dd24b7..a2fe870a 100644
--- a/framework/Data/Common/Sqlite/TSqliteMetaData.php
+++ b/framework/Data/Common/Sqlite/TSqliteMetaData.php
@@ -3,9 +3,9 @@
* TSqliteMetaData class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common.Sqlite
*/
diff --git a/framework/Data/Common/Sqlite/TSqliteTableColumn.php b/framework/Data/Common/Sqlite/TSqliteTableColumn.php
index f54b6f59..e58ec857 100644
--- a/framework/Data/Common/Sqlite/TSqliteTableColumn.php
+++ b/framework/Data/Common/Sqlite/TSqliteTableColumn.php
@@ -3,9 +3,9 @@
* TSqliteTableColumn class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common.Sqlite
*/
diff --git a/framework/Data/Common/Sqlite/TSqliteTableInfo.php b/framework/Data/Common/Sqlite/TSqliteTableInfo.php
index e15f050a..6c047e41 100644
--- a/framework/Data/Common/Sqlite/TSqliteTableInfo.php
+++ b/framework/Data/Common/Sqlite/TSqliteTableInfo.php
@@ -3,9 +3,9 @@
* TSqliteTableInfo class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common.Sqlite
*/
diff --git a/framework/Data/Common/TDbCommandBuilder.php b/framework/Data/Common/TDbCommandBuilder.php
index 7a7b75d4..e1d476ea 100644
--- a/framework/Data/Common/TDbCommandBuilder.php
+++ b/framework/Data/Common/TDbCommandBuilder.php
@@ -3,9 +3,9 @@
* TDbCommandBuilder class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common
*/
diff --git a/framework/Data/Common/TDbMetaData.php b/framework/Data/Common/TDbMetaData.php
index 1d07c750..0ec9ce4a 100644
--- a/framework/Data/Common/TDbMetaData.php
+++ b/framework/Data/Common/TDbMetaData.php
@@ -3,9 +3,9 @@
* TDbMetaData class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common
*/
diff --git a/framework/Data/Common/TDbTableColumn.php b/framework/Data/Common/TDbTableColumn.php
index fe96e12a..99871974 100644
--- a/framework/Data/Common/TDbTableColumn.php
+++ b/framework/Data/Common/TDbTableColumn.php
@@ -3,9 +3,9 @@
* TDbTableColumn class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common
*/
diff --git a/framework/Data/Common/TDbTableInfo.php b/framework/Data/Common/TDbTableInfo.php
index 5060845b..8e601573 100644
--- a/framework/Data/Common/TDbTableInfo.php
+++ b/framework/Data/Common/TDbTableInfo.php
@@ -3,9 +3,9 @@
* TDbTableInfo class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.Common
*/
diff --git a/framework/Data/DataGateway/TDataGatewayCommand.php b/framework/Data/DataGateway/TDataGatewayCommand.php
index 7ab3fcd2..d314ca05 100644
--- a/framework/Data/DataGateway/TDataGatewayCommand.php
+++ b/framework/Data/DataGateway/TDataGatewayCommand.php
@@ -3,9 +3,9 @@
* TDataGatewayCommand, TDataGatewayEventParameter and TDataGatewayResultEventParameter class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @package System.Data.DataGateway
*/
diff --git a/framework/Data/DataGateway/TSqlCriteria.php b/framework/Data/DataGateway/TSqlCriteria.php
index aa91889e..3325c7f3 100644
--- a/framework/Data/DataGateway/TSqlCriteria.php
+++ b/framework/Data/DataGateway/TSqlCriteria.php
@@ -3,9 +3,9 @@
* TDbSqlCriteria class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.DataGateway
*/
diff --git a/framework/Data/DataGateway/TTableGateway.php b/framework/Data/DataGateway/TTableGateway.php
index b527fbb4..0906d8df 100644
--- a/framework/Data/DataGateway/TTableGateway.php
+++ b/framework/Data/DataGateway/TTableGateway.php
@@ -3,9 +3,9 @@
* TTableGateway class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @package System.Data.DataGateway
*/
diff --git a/framework/Data/SqlMap/Configuration/TDiscriminator.php b/framework/Data/SqlMap/Configuration/TDiscriminator.php
index 1f7347ae..004bccaa 100644
--- a/framework/Data/SqlMap/Configuration/TDiscriminator.php
+++ b/framework/Data/SqlMap/Configuration/TDiscriminator.php
@@ -3,9 +3,9 @@
* TDiscriminator and TSubMap classes file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Configuration
*/
diff --git a/framework/Data/SqlMap/Configuration/TInlineParameterMapParser.php b/framework/Data/SqlMap/Configuration/TInlineParameterMapParser.php
index e8977b0d..dfe14f87 100644
--- a/framework/Data/SqlMap/Configuration/TInlineParameterMapParser.php
+++ b/framework/Data/SqlMap/Configuration/TInlineParameterMapParser.php
@@ -3,9 +3,9 @@
* TInlineParameterMapParser class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Configuration
*/
diff --git a/framework/Data/SqlMap/Configuration/TParameterMap.php b/framework/Data/SqlMap/Configuration/TParameterMap.php
index 2eaad9a3..d6f90b27 100644
--- a/framework/Data/SqlMap/Configuration/TParameterMap.php
+++ b/framework/Data/SqlMap/Configuration/TParameterMap.php
@@ -3,9 +3,9 @@
* TParameterMap class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Configuration
*/
diff --git a/framework/Data/SqlMap/Configuration/TParameterProperty.php b/framework/Data/SqlMap/Configuration/TParameterProperty.php
index 84007a28..f6282e4d 100644
--- a/framework/Data/SqlMap/Configuration/TParameterProperty.php
+++ b/framework/Data/SqlMap/Configuration/TParameterProperty.php
@@ -3,9 +3,9 @@
* TParameterPropert class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Configuration
*/
diff --git a/framework/Data/SqlMap/Configuration/TResultMap.php b/framework/Data/SqlMap/Configuration/TResultMap.php
index e35faf28..95e8d344 100644
--- a/framework/Data/SqlMap/Configuration/TResultMap.php
+++ b/framework/Data/SqlMap/Configuration/TResultMap.php
@@ -3,9 +3,9 @@
* TResultMap class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Configuration
*/
diff --git a/framework/Data/SqlMap/Configuration/TResultProperty.php b/framework/Data/SqlMap/Configuration/TResultProperty.php
index 796060ae..87b06775 100644
--- a/framework/Data/SqlMap/Configuration/TResultProperty.php
+++ b/framework/Data/SqlMap/Configuration/TResultProperty.php
@@ -3,9 +3,9 @@
* TResultProperty class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Configuration
*/
diff --git a/framework/Data/SqlMap/Configuration/TSimpleDynamicParser.php b/framework/Data/SqlMap/Configuration/TSimpleDynamicParser.php
index 29260036..41b706a6 100644
--- a/framework/Data/SqlMap/Configuration/TSimpleDynamicParser.php
+++ b/framework/Data/SqlMap/Configuration/TSimpleDynamicParser.php
@@ -3,9 +3,9 @@
* TSimpleDynamicParser class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Configuration
*/
diff --git a/framework/Data/SqlMap/Configuration/TSqlMapCacheModel.php b/framework/Data/SqlMap/Configuration/TSqlMapCacheModel.php
index 271db675..8a1e3440 100644
--- a/framework/Data/SqlMap/Configuration/TSqlMapCacheModel.php
+++ b/framework/Data/SqlMap/Configuration/TSqlMapCacheModel.php
@@ -3,9 +3,9 @@
* TSqlMapCacheModel, TSqlMapCacheTypes and TSqlMapCacheKey classes file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Configuration
*/
diff --git a/framework/Data/SqlMap/Configuration/TSqlMapStatement.php b/framework/Data/SqlMap/Configuration/TSqlMapStatement.php
index 0efcc5b6..abb21c7f 100644
--- a/framework/Data/SqlMap/Configuration/TSqlMapStatement.php
+++ b/framework/Data/SqlMap/Configuration/TSqlMapStatement.php
@@ -4,9 +4,9 @@
* TSqlMapSelect and TSqlMapSelectKey classes file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Configuration
*/
diff --git a/framework/Data/SqlMap/Configuration/TSqlMapXmlConfiguration.php b/framework/Data/SqlMap/Configuration/TSqlMapXmlConfiguration.php
index db178f70..062b65e5 100644
--- a/framework/Data/SqlMap/Configuration/TSqlMapXmlConfiguration.php
+++ b/framework/Data/SqlMap/Configuration/TSqlMapXmlConfiguration.php
@@ -3,9 +3,9 @@
* TSqlMapXmlConfigBuilder, TSqlMapXmlConfiguration, TSqlMapXmlMappingConfiguration classes file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Configuration
*/
diff --git a/framework/Data/SqlMap/DataMapper/TFastSqlMapApplicationCache.php b/framework/Data/SqlMap/DataMapper/TFastSqlMapApplicationCache.php
index d2e3d014..ec059781 100644
--- a/framework/Data/SqlMap/DataMapper/TFastSqlMapApplicationCache.php
+++ b/framework/Data/SqlMap/DataMapper/TFastSqlMapApplicationCache.php
@@ -3,9 +3,9 @@
* TFastSqlMapApplicationCache class file contains Fast SqlMap cache implementation.
*
* @author Berczi Gabor <gabor.berczi@devworx.hu>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap
*/
diff --git a/framework/Data/SqlMap/DataMapper/TLazyLoadList.php b/framework/Data/SqlMap/DataMapper/TLazyLoadList.php
index d50c1b84..721c0fcc 100644
--- a/framework/Data/SqlMap/DataMapper/TLazyLoadList.php
+++ b/framework/Data/SqlMap/DataMapper/TLazyLoadList.php
@@ -3,9 +3,9 @@
* TLazyLoadList, TObjectProxy classes file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap
*/
diff --git a/framework/Data/SqlMap/DataMapper/TPropertyAccess.php b/framework/Data/SqlMap/DataMapper/TPropertyAccess.php
index c19b77ab..3aadc173 100644
--- a/framework/Data/SqlMap/DataMapper/TPropertyAccess.php
+++ b/framework/Data/SqlMap/DataMapper/TPropertyAccess.php
@@ -3,9 +3,9 @@
* TPropertyAccess class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap
*/
diff --git a/framework/Data/SqlMap/DataMapper/TSqlMapCache.php b/framework/Data/SqlMap/DataMapper/TSqlMapCache.php
index aa853b6c..2df52ebc 100644
--- a/framework/Data/SqlMap/DataMapper/TSqlMapCache.php
+++ b/framework/Data/SqlMap/DataMapper/TSqlMapCache.php
@@ -3,9 +3,9 @@
* TSqlMapCache class file contains FIFO, LRU, and GLOBAL cache implementations.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap
*/
diff --git a/framework/Data/SqlMap/DataMapper/TSqlMapPagedList.php b/framework/Data/SqlMap/DataMapper/TSqlMapPagedList.php
index d789471d..0bf9fdc7 100644
--- a/framework/Data/SqlMap/DataMapper/TSqlMapPagedList.php
+++ b/framework/Data/SqlMap/DataMapper/TSqlMapPagedList.php
@@ -3,9 +3,9 @@
* TSqlMapPagedList class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap
*/
diff --git a/framework/Data/SqlMap/DataMapper/TSqlMapTypeHandlerRegistry.php b/framework/Data/SqlMap/DataMapper/TSqlMapTypeHandlerRegistry.php
index 18b8ef99..7941426f 100644
--- a/framework/Data/SqlMap/DataMapper/TSqlMapTypeHandlerRegistry.php
+++ b/framework/Data/SqlMap/DataMapper/TSqlMapTypeHandlerRegistry.php
@@ -3,9 +3,9 @@
* TSqlMapTypeHandlerRegistry, and abstract TSqlMapTypeHandler classes file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap
*/
diff --git a/framework/Data/SqlMap/Statements/TCachingStatement.php b/framework/Data/SqlMap/Statements/TCachingStatement.php
index ad22b84f..067b7b91 100644
--- a/framework/Data/SqlMap/Statements/TCachingStatement.php
+++ b/framework/Data/SqlMap/Statements/TCachingStatement.php
@@ -3,9 +3,9 @@
* TCachingStatement class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Statements
*/
diff --git a/framework/Data/SqlMap/Statements/TDeleteMappedStatement.php b/framework/Data/SqlMap/Statements/TDeleteMappedStatement.php
index 119beb39..fac34fa8 100644
--- a/framework/Data/SqlMap/Statements/TDeleteMappedStatement.php
+++ b/framework/Data/SqlMap/Statements/TDeleteMappedStatement.php
@@ -3,9 +3,9 @@
* TDeleteMappedStatement class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Statements
*/
diff --git a/framework/Data/SqlMap/Statements/TInsertMappedStatement.php b/framework/Data/SqlMap/Statements/TInsertMappedStatement.php
index de785b94..0673bccd 100644
--- a/framework/Data/SqlMap/Statements/TInsertMappedStatement.php
+++ b/framework/Data/SqlMap/Statements/TInsertMappedStatement.php
@@ -3,9 +3,9 @@
* TInsertMappedStatement class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Statements
*/
diff --git a/framework/Data/SqlMap/Statements/TMappedStatement.php b/framework/Data/SqlMap/Statements/TMappedStatement.php
index 4d3b6355..2887114a 100644
--- a/framework/Data/SqlMap/Statements/TMappedStatement.php
+++ b/framework/Data/SqlMap/Statements/TMappedStatement.php
@@ -3,9 +3,9 @@
* TMappedStatement and related classes.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Statements
*/
diff --git a/framework/Data/SqlMap/Statements/TPreparedCommand.php b/framework/Data/SqlMap/Statements/TPreparedCommand.php
index 8b4bdbcc..1f560b3d 100644
--- a/framework/Data/SqlMap/Statements/TPreparedCommand.php
+++ b/framework/Data/SqlMap/Statements/TPreparedCommand.php
@@ -3,9 +3,9 @@
* TPreparedCommand class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Statements
*/
diff --git a/framework/Data/SqlMap/Statements/TPreparedStatement.php b/framework/Data/SqlMap/Statements/TPreparedStatement.php
index 79f39aea..f536e39f 100644
--- a/framework/Data/SqlMap/Statements/TPreparedStatement.php
+++ b/framework/Data/SqlMap/Statements/TPreparedStatement.php
@@ -3,9 +3,9 @@
* TPreparedStatement class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Statements
*/
diff --git a/framework/Data/SqlMap/Statements/TPreparedStatementFactory.php b/framework/Data/SqlMap/Statements/TPreparedStatementFactory.php
index 6eef27c3..a85cd760 100644
--- a/framework/Data/SqlMap/Statements/TPreparedStatementFactory.php
+++ b/framework/Data/SqlMap/Statements/TPreparedStatementFactory.php
@@ -3,9 +3,9 @@
* TPreparedStatementFactory class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Statements
*/
diff --git a/framework/Data/SqlMap/Statements/TSelectMappedStatement.php b/framework/Data/SqlMap/Statements/TSelectMappedStatement.php
index 8e6ea75e..0231c097 100644
--- a/framework/Data/SqlMap/Statements/TSelectMappedStatement.php
+++ b/framework/Data/SqlMap/Statements/TSelectMappedStatement.php
@@ -3,9 +3,9 @@
* TSelectMappedStatement class.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Statements
*/
diff --git a/framework/Data/SqlMap/Statements/TSimpleDynamicSql.php b/framework/Data/SqlMap/Statements/TSimpleDynamicSql.php
index b2e0356d..11f8a56b 100644
--- a/framework/Data/SqlMap/Statements/TSimpleDynamicSql.php
+++ b/framework/Data/SqlMap/Statements/TSimpleDynamicSql.php
@@ -3,9 +3,9 @@
* TSimpleDynamicSql class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Statements
*/
diff --git a/framework/Data/SqlMap/Statements/TStaticSql.php b/framework/Data/SqlMap/Statements/TStaticSql.php
index f0110332..180d0e4d 100644
--- a/framework/Data/SqlMap/Statements/TStaticSql.php
+++ b/framework/Data/SqlMap/Statements/TStaticSql.php
@@ -3,9 +3,9 @@
* TStaticSql class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Statements
*/
diff --git a/framework/Data/SqlMap/Statements/TUpdateMappedStatement.php b/framework/Data/SqlMap/Statements/TUpdateMappedStatement.php
index 9ba2458d..8a39640d 100644
--- a/framework/Data/SqlMap/Statements/TUpdateMappedStatement.php
+++ b/framework/Data/SqlMap/Statements/TUpdateMappedStatement.php
@@ -3,9 +3,9 @@
* TUpdateMappedStatement class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap.Statements
*/
diff --git a/framework/Data/SqlMap/TSqlMapConfig.php b/framework/Data/SqlMap/TSqlMapConfig.php
index d99b99d5..5fa641a7 100644
--- a/framework/Data/SqlMap/TSqlMapConfig.php
+++ b/framework/Data/SqlMap/TSqlMapConfig.php
@@ -3,9 +3,9 @@
* TSqlMapConfig class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap
*/
diff --git a/framework/Data/SqlMap/TSqlMapGateway.php b/framework/Data/SqlMap/TSqlMapGateway.php
index 8ce09ee4..e1df2e5d 100644
--- a/framework/Data/SqlMap/TSqlMapGateway.php
+++ b/framework/Data/SqlMap/TSqlMapGateway.php
@@ -3,9 +3,9 @@
* TSqlMapGateway class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap
*/
diff --git a/framework/Data/SqlMap/TSqlMapManager.php b/framework/Data/SqlMap/TSqlMapManager.php
index 0fa6fd57..eba42f7e 100644
--- a/framework/Data/SqlMap/TSqlMapManager.php
+++ b/framework/Data/SqlMap/TSqlMapManager.php
@@ -3,9 +3,9 @@
* TSqlMapManager class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data.SqlMap
*/
diff --git a/framework/Data/TDataSourceConfig.php b/framework/Data/TDataSourceConfig.php
index ecece8c4..e9c00da3 100644
--- a/framework/Data/TDataSourceConfig.php
+++ b/framework/Data/TDataSourceConfig.php
@@ -3,9 +3,9 @@
* TDataSourceConfig class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data
*/
diff --git a/framework/Data/TDbCommand.php b/framework/Data/TDbCommand.php
index 43472ea4..93e9e74e 100644
--- a/framework/Data/TDbCommand.php
+++ b/framework/Data/TDbCommand.php
@@ -3,9 +3,9 @@
* TDbCommand class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data
*/
diff --git a/framework/Data/TDbConnection.php b/framework/Data/TDbConnection.php
index b475c059..d9c43f92 100644
--- a/framework/Data/TDbConnection.php
+++ b/framework/Data/TDbConnection.php
@@ -3,9 +3,9 @@
* TDbConnection class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data
*/
diff --git a/framework/Data/TDbDataReader.php b/framework/Data/TDbDataReader.php
index b28cd490..a74952ed 100644
--- a/framework/Data/TDbDataReader.php
+++ b/framework/Data/TDbDataReader.php
@@ -3,9 +3,9 @@
* TDbDataReader class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data
*/
diff --git a/framework/Data/TDbTransaction.php b/framework/Data/TDbTransaction.php
index 8a2a0821..a7484eb0 100644
--- a/framework/Data/TDbTransaction.php
+++ b/framework/Data/TDbTransaction.php
@@ -3,9 +3,9 @@
* TDbTransaction class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Data
*/
diff --git a/framework/Exceptions/TErrorHandler.php b/framework/Exceptions/TErrorHandler.php
index 8337f3be..458632c4 100644
--- a/framework/Exceptions/TErrorHandler.php
+++ b/framework/Exceptions/TErrorHandler.php
@@ -3,9 +3,9 @@
* TErrorHandler class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Exceptions
*/
@@ -185,7 +185,7 @@ class TErrorHandler extends TModule
$errorMessage = $exception->getMessage();
if($isDebug)
- $version=$_SERVER['SERVER_SOFTWARE'].' <a href="http://www.pradosoft.com/">PRADO</a>/'.Prado::getVersion();
+ $version=$_SERVER['SERVER_SOFTWARE'].' <a href="https://github.com/pradosoft/prado">PRADO</a>/'.Prado::getVersion();
else
{
$version='';
@@ -268,7 +268,7 @@ class TErrorHandler extends TModule
}
if($this->getApplication()->getMode()===TApplicationMode::Debug)
- $version=$_SERVER['SERVER_SOFTWARE'].' <a href="http://www.pradosoft.com/">PRADO</a>/'.Prado::getVersion();
+ $version=$_SERVER['SERVER_SOFTWARE'].' <a href="https://github.com/pradosoft/prado">PRADO</a>/'.Prado::getVersion();
else
$version='';
@@ -392,7 +392,7 @@ class TErrorHandler extends TModule
private function addLink($message)
{
- $baseUrl='http://www.pradosoft.com/docs/classdoc';
+ $baseUrl='http://pradosoft.github.io/docs/manual/class-';
return preg_replace('/\b(T[A-Z]\w+)\b/',"<a href=\"$baseUrl/\${1}\" target=\"_blank\">\${1}</a>",$message);
}
}
diff --git a/framework/Exceptions/TException.php b/framework/Exceptions/TException.php
index 24dbdb0f..651adb5a 100644
--- a/framework/Exceptions/TException.php
+++ b/framework/Exceptions/TException.php
@@ -3,9 +3,9 @@
* Exception classes file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Exceptions
*/
diff --git a/framework/I18N/TChoiceFormat.php b/framework/I18N/TChoiceFormat.php
index 4525aaad..28f04877 100644
--- a/framework/I18N/TChoiceFormat.php
+++ b/framework/I18N/TChoiceFormat.php
@@ -3,9 +3,9 @@
* TChoiceFormat, I18N choice format component.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.I18N
*/
diff --git a/framework/I18N/TDateFormat.php b/framework/I18N/TDateFormat.php
index e7846be7..5cb2ee8e 100644
--- a/framework/I18N/TDateFormat.php
+++ b/framework/I18N/TDateFormat.php
@@ -3,9 +3,9 @@
* TDateFromat formatting component.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.I18N
*/
diff --git a/framework/I18N/TGlobalization.php b/framework/I18N/TGlobalization.php
index 3fbaa2b4..79762777 100644
--- a/framework/I18N/TGlobalization.php
+++ b/framework/I18N/TGlobalization.php
@@ -3,9 +3,9 @@
* TGlobalization class file.
*
* @author Wei Zhuo<weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.I18N
*/
diff --git a/framework/I18N/TGlobalizationAutoDetect.php b/framework/I18N/TGlobalizationAutoDetect.php
index a79a128d..24127122 100644
--- a/framework/I18N/TGlobalizationAutoDetect.php
+++ b/framework/I18N/TGlobalizationAutoDetect.php
@@ -3,9 +3,9 @@
* TMultiView and TView class file.
*
* @author Wei Zhuo<weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Revision: 1.66 $ $Date: ${DATE} ${TIME} $
* @package System.I18N
*/
diff --git a/framework/I18N/TI18NControl.php b/framework/I18N/TI18NControl.php
index 96fc8b62..d784dfc3 100644
--- a/framework/I18N/TI18NControl.php
+++ b/framework/I18N/TI18NControl.php
@@ -3,9 +3,9 @@
* Base I18N component.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.I18N
*/
diff --git a/framework/I18N/TNumberFormat.php b/framework/I18N/TNumberFormat.php
index 89eab245..ac7a7366 100644
--- a/framework/I18N/TNumberFormat.php
+++ b/framework/I18N/TNumberFormat.php
@@ -3,9 +3,9 @@
* TNumberFromat component.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.I18N
*/
diff --git a/framework/I18N/TTranslate.php b/framework/I18N/TTranslate.php
index 1365b937..1289a700 100644
--- a/framework/I18N/TTranslate.php
+++ b/framework/I18N/TTranslate.php
@@ -3,9 +3,9 @@
* TTranslate, I18N translation component.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.I18N
*/
diff --git a/framework/I18N/TTranslateParameter.php b/framework/I18N/TTranslateParameter.php
index d5c41230..a12546e9 100644
--- a/framework/I18N/TTranslateParameter.php
+++ b/framework/I18N/TTranslateParameter.php
@@ -3,9 +3,9 @@
* TTranslateParameter component.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.I18N
*/
diff --git a/framework/I18N/Translation.php b/framework/I18N/Translation.php
index 9592ef53..69b3eb4c 100644
--- a/framework/I18N/Translation.php
+++ b/framework/I18N/Translation.php
@@ -3,9 +3,9 @@
* Translation, static.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.I18N
*/
diff --git a/framework/IO/TTextWriter.php b/framework/IO/TTextWriter.php
index f888083d..44dc3bde 100644
--- a/framework/IO/TTextWriter.php
+++ b/framework/IO/TTextWriter.php
@@ -3,9 +3,9 @@
* TTextWriter class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.IO
*/
diff --git a/framework/PradoBase.php b/framework/PradoBase.php
index 3eb4d0d6..de8c4655 100644
--- a/framework/PradoBase.php
+++ b/framework/PradoBase.php
@@ -6,9 +6,9 @@
* and error handling mechanism.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System
*/
@@ -69,7 +69,7 @@ class PradoBase
*/
public static function getVersion()
{
- return '3.2.3';
+ return '3.3.0';
}
/**
@@ -114,8 +114,8 @@ class PradoBase
$url=$am->publishFilePath(self::getPathOfNamespace('System.'.$logoName,'.gif'));
}
else
- $url='http://www.pradosoft.com/images/'.$logoName.'.gif';
- return '<a title="Powered by PRADO" href="http://www.pradosoft.com/" target="_blank"><img src="'.$url.'" style="border-width:0px;" alt="Powered by PRADO" /></a>';
+ $url='http://pradosoft.github.io/docs/'.$logoName.'.gif';
+ return '<a title="Powered by PRADO" href="https://github.com/pradosoft/prado" target="_blank"><img src="'.$url.'" style="border-width:0px;" alt="Powered by PRADO" /></a>';
}
/**
diff --git a/framework/Security/IUserManager.php b/framework/Security/IUserManager.php
index 0ca65929..ee37b64d 100644
--- a/framework/Security/IUserManager.php
+++ b/framework/Security/IUserManager.php
@@ -3,9 +3,9 @@
* IUserManager interface file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Security
*/
diff --git a/framework/Security/TAuthManager.php b/framework/Security/TAuthManager.php
index 2bf6a5b1..52d30d90 100644
--- a/framework/Security/TAuthManager.php
+++ b/framework/Security/TAuthManager.php
@@ -3,9 +3,9 @@
* TAuthManager class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Security
*/
diff --git a/framework/Security/TAuthorizationRule.php b/framework/Security/TAuthorizationRule.php
index aa9bed90..1b864963 100644
--- a/framework/Security/TAuthorizationRule.php
+++ b/framework/Security/TAuthorizationRule.php
@@ -3,9 +3,9 @@
* TAuthorizationRule, TAuthorizationRuleCollection class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Security
*/
/**
diff --git a/framework/Security/TDbUserManager.php b/framework/Security/TDbUserManager.php
index 0832dfe5..4a9f0327 100644
--- a/framework/Security/TDbUserManager.php
+++ b/framework/Security/TDbUserManager.php
@@ -3,9 +3,9 @@
* TDbUserManager class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Security
*/
diff --git a/framework/Security/TSecurityManager.php b/framework/Security/TSecurityManager.php
index bdb85564..c9283bcb 100644
--- a/framework/Security/TSecurityManager.php
+++ b/framework/Security/TSecurityManager.php
@@ -4,9 +4,9 @@
* TSecurityManager class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Security
*/
diff --git a/framework/Security/TUser.php b/framework/Security/TUser.php
index 8a229b1a..8be382c7 100644
--- a/framework/Security/TUser.php
+++ b/framework/Security/TUser.php
@@ -3,9 +3,9 @@
* TUser class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Security
*/
diff --git a/framework/Security/TUserManager.php b/framework/Security/TUserManager.php
index 4ad67a15..6ca8a423 100644
--- a/framework/Security/TUserManager.php
+++ b/framework/Security/TUserManager.php
@@ -3,9 +3,9 @@
* TUserManager class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Security
*/
diff --git a/framework/TApplication.php b/framework/TApplication.php
index e015ead8..1ae868de 100644
--- a/framework/TApplication.php
+++ b/framework/TApplication.php
@@ -3,9 +3,9 @@
* TApplication class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System
*/
diff --git a/framework/TApplicationComponent.php b/framework/TApplicationComponent.php
index a906a232..d58c74cb 100644
--- a/framework/TApplicationComponent.php
+++ b/framework/TApplicationComponent.php
@@ -3,9 +3,9 @@
* TApplicationComponent class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System
*/
diff --git a/framework/TComponent.php b/framework/TComponent.php
index 484a3186..5901f93d 100644
--- a/framework/TComponent.php
+++ b/framework/TComponent.php
@@ -7,9 +7,9 @@
* Global Events, intra-object events, Class behaviors, expanded behaviors
* @author Brad Anderson <javalizard@mac.com>
*
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System
*/
diff --git a/framework/TModule.php b/framework/TModule.php
index 7c149962..ba5686cc 100644
--- a/framework/TModule.php
+++ b/framework/TModule.php
@@ -3,9 +3,9 @@
* TModule class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System
*/
diff --git a/framework/TService.php b/framework/TService.php
index 9c51eb5a..a9d9e5e8 100644
--- a/framework/TService.php
+++ b/framework/TService.php
@@ -3,9 +3,9 @@
* TService class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System
*/
diff --git a/framework/TShellApplication.php b/framework/TShellApplication.php
index e989ed9f..10844cdf 100644
--- a/framework/TShellApplication.php
+++ b/framework/TShellApplication.php
@@ -3,9 +3,9 @@
* TShellApplication class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System
*/
diff --git a/framework/Util/TCallChain.php b/framework/Util/TCallChain.php
index a6d99a61..4e9e23f7 100644
--- a/framework/Util/TCallChain.php
+++ b/framework/Util/TCallChain.php
@@ -3,9 +3,9 @@
* TCallChain class file.
*
* @author Brad Anderson <javalizard@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2008-2014 Pradosoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2008-2015 Pradosoft
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
diff --git a/framework/Util/TClassBehavior.php b/framework/Util/TClassBehavior.php
index 03ea0c57..05f009d2 100644
--- a/framework/Util/TClassBehavior.php
+++ b/framework/Util/TClassBehavior.php
@@ -3,9 +3,9 @@
* TClassBehavior class file.
*
* @author Brad Anderson <javalizard@gmail.com>
- * @link http://www.pradosoft.com/
+ * @link https://github.com/pradosoft/prado
* @copyright Copyright &copy; 2008-2011 Pradosoft
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
*/
/**
diff --git a/framework/Util/TDataFieldAccessor.php b/framework/Util/TDataFieldAccessor.php
index 1bead02e..e86b8c11 100644
--- a/framework/Util/TDataFieldAccessor.php
+++ b/framework/Util/TDataFieldAccessor.php
@@ -3,9 +3,9 @@
* TDataFieldAccessor class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Util
*/
diff --git a/framework/Util/TDateTimeStamp.php b/framework/Util/TDateTimeStamp.php
index fcbd573f..2bc2a9fd 100644
--- a/framework/Util/TDateTimeStamp.php
+++ b/framework/Util/TDateTimeStamp.php
@@ -3,9 +3,9 @@
* TDateTimeStamp class file.
* @author Fabio Bas ctrlaltca[AT]gmail[DOT]com
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Util
*/
diff --git a/framework/Util/TLogRouter.php b/framework/Util/TLogRouter.php
index 4682e9ef..5b40f540 100644
--- a/framework/Util/TLogRouter.php
+++ b/framework/Util/TLogRouter.php
@@ -3,9 +3,9 @@
* TLogRouter, TLogRoute, TFileLogRoute, TEmailLogRoute class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Util
*/
@@ -24,7 +24,7 @@ Prado::using('System.Data.TDbConnection');
* The format is as follows,
* <code>
* <route class="TFileLogRoute" Categories="System.Web.UI" Levels="Warning" />
- * <route class="TEmailLogRoute" Categories="Application" Levels="Fatal" Emails="admin@pradosoft.com" />
+ * <route class="TEmailLogRoute" Categories="Application" Levels="Fatal" Emails="admin@prado.local" />
* </code>
* PHP configuration style:
* <code>
diff --git a/framework/Util/TLogger.php b/framework/Util/TLogger.php
index 6fd12ccf..6f188b0b 100644
--- a/framework/Util/TLogger.php
+++ b/framework/Util/TLogger.php
@@ -3,9 +3,9 @@
* TLogger class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Util
*/
diff --git a/framework/Util/TParameterModule.php b/framework/Util/TParameterModule.php
index 84616c63..4819d309 100644
--- a/framework/Util/TParameterModule.php
+++ b/framework/Util/TParameterModule.php
@@ -3,9 +3,9 @@
* TParameterModule class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Util
*/
diff --git a/framework/Util/TRpcClient.php b/framework/Util/TRpcClient.php
index 91b27b52..c8920a2e 100644
--- a/framework/Util/TRpcClient.php
+++ b/framework/Util/TRpcClient.php
@@ -2,9 +2,9 @@
/**
* @author Robin J. Rogge <rrogge@bigpoint.net>
- * @link http://www.pradosoft.com/
+ * @link https://github.com/pradosoft/prado
* @copyright 2010 Bigpoint GmbH
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @since 3.2
* @package System.Util
*/
diff --git a/framework/Util/TSimpleDateFormatter.php b/framework/Util/TSimpleDateFormatter.php
index 18e71529..7e9fec6c 100644
--- a/framework/Util/TSimpleDateFormatter.php
+++ b/framework/Util/TSimpleDateFormatter.php
@@ -3,9 +3,9 @@
* TSimpleDateFormatter class file
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Util
*/
diff --git a/framework/Util/TVarDumper.php b/framework/Util/TVarDumper.php
index c89b205a..c5318484 100644
--- a/framework/Util/TVarDumper.php
+++ b/framework/Util/TVarDumper.php
@@ -3,9 +3,9 @@
* TVarDumper class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Util
*/
diff --git a/framework/Web/Javascripts/TJavaScript.php b/framework/Web/Javascripts/TJavaScript.php
index 3684132b..b92b0c36 100644
--- a/framework/Web/Javascripts/TJavaScript.php
+++ b/framework/Web/Javascripts/TJavaScript.php
@@ -3,9 +3,9 @@
* TJavaScript class file
*
* @author Wei Zhuo<weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.Javascripts
*/
diff --git a/framework/Web/Javascripts/packages.php b/framework/Web/Javascripts/packages.php
index 61735847..fe16d979 100644
--- a/framework/Web/Javascripts/packages.php
+++ b/framework/Web/Javascripts/packages.php
@@ -92,11 +92,11 @@ $packages = array(
SCRIPTACULOUS_DIR.'/builder.js',
SCRIPTACULOUS_DIR.'/effects.js'
),
-
- //bootstrap
- 'bootstrap' => array(
- BOOTSTRAP_DIR.'/js/bootstrap.js',
- ),
+
+ //bootstrap
+ 'bootstrap' => array(
+ BOOTSTRAP_DIR.'/js/bootstrap.js',
+ ),
'dragdrop'=>array(
SCRIPTACULOUS_DIR.'/dragdrop.js',
@@ -118,28 +118,28 @@ $packages = array(
$dependencies = array(
'jquery' => array('jquery'),
'prado' => array('jquery', 'prado'),
- 'bootstrap' => array('jquery', 'bootstrap'),
+ 'bootstrap' => array('jquery', 'bootstrap'),
'validator' => array('jquery', 'prado', 'validator'),
'tabpanel' => array('jquery', 'prado', 'tabpanel'),
'ajax' => array('jquery', 'prado', 'ajax'),
'logger' => array('jquery', 'prado', 'logger'),
- 'activefileupload' => array('jquery', 'prado', 'ajax', 'activefileupload'),
+ 'activefileupload' => array('jquery', 'prado', 'ajax', 'activefileupload'),
'effects' => array('jquery', 'jqueryui'),
- 'datepicker' => array('jquery', 'prado', 'datepicker'),
- 'activedatepicker' => array('jquery', 'prado', 'datepicker', 'ajax', 'activedatepicker'),
- 'colorpicker' => array('jquery', 'prado', 'colorpicker'),
+ 'datepicker' => array('jquery', 'prado', 'datepicker'),
+ 'activedatepicker' => array('jquery', 'prado', 'datepicker', 'ajax', 'activedatepicker'),
+ 'colorpicker' => array('jquery', 'prado', 'colorpicker'),
'htmlarea' => array('jquery', 'prado', 'htmlarea'),
'htmlarea4' => array('jquery', 'prado', 'htmlarea4'),
'keyboard' => array('jquery', 'prado', 'keyboard'),
'slider' => array('jquery', 'prado', 'slider'),
- 'inlineeditor' => array('jquery', 'prado', 'ajax', 'inlineeditor'),
+ 'inlineeditor' => array('jquery', 'prado', 'ajax', 'inlineeditor'),
'accordion' => array('jquery', 'prado', 'accordion'),
'ratings' => array('jquery', 'prado', 'ajax', 'ratings'),
'jqueryui' => array('jquery', 'jqueryui'),
'prototype' => array('prototype'),
'dragdrop' => array('prototype', 'jquery', 'prado', 'ajax', 'dragdrop'),
- 'dragdropextra' => array('prototype', 'jquery', 'prado', 'ajax', 'dragdrop','dragdropextra'),
- 'autocomplete' => array('prototype', 'jquery', 'prado', 'ajax', 'autocomplete'),
+ 'dragdropextra' => array('prototype', 'jquery', 'prado', 'ajax', 'dragdrop','dragdropextra'),
+ 'autocomplete' => array('prototype', 'jquery', 'prado', 'ajax', 'autocomplete'),
);
return array($packages, $dependencies);
diff --git a/framework/Web/Javascripts/source/prado/prado.js b/framework/Web/Javascripts/source/prado/prado.js
index 01c0d630..e100dc7b 100644
--- a/framework/Web/Javascripts/source/prado/prado.js
+++ b/framework/Web/Javascripts/source/prado/prado.js
@@ -271,7 +271,7 @@ var Prado =
* Version of Prado clientscripts
* @var Version
*/
- Version: '3.2.3',
+ Version: '3.3.0',
/**
* Registry for Prado components
diff --git a/framework/Web/Services/TFeedService.php b/framework/Web/Services/TFeedService.php
index 75775f49..dc9c064d 100644
--- a/framework/Web/Services/TFeedService.php
+++ b/framework/Web/Services/TFeedService.php
@@ -4,9 +4,9 @@
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @author Knut Urdalen <knut.urdalen@gmail.com>
- * @link http://www.pradosoft.com
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @package System.Web.Services
*/
diff --git a/framework/Web/Services/TJsonService.php b/framework/Web/Services/TJsonService.php
index e3b9b1cb..d17b3301 100644
--- a/framework/Web/Services/TJsonService.php
+++ b/framework/Web/Services/TJsonService.php
@@ -3,9 +3,9 @@
* TJsonService and TJsonResponse class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.Services
*/
diff --git a/framework/Web/Services/TPageService.php b/framework/Web/Services/TPageService.php
index 1276d213..4a422c45 100644
--- a/framework/Web/Services/TPageService.php
+++ b/framework/Web/Services/TPageService.php
@@ -3,9 +3,9 @@
* TPageService class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.Services
*/
diff --git a/framework/Web/Services/TRpcService.php b/framework/Web/Services/TRpcService.php
index a4ed3d7c..cf579440 100644
--- a/framework/Web/Services/TRpcService.php
+++ b/framework/Web/Services/TRpcService.php
@@ -2,9 +2,9 @@
/**
* @author Robin J. Rogge <rrogge@bigpoint.net>
- * @link http://www.pradosoft.com/
+ * @link https://github.com/pradosoft/prado
* @copyright 2010 Bigpoint GmbH
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @since 3.2
* @package System.Web.Services
diff --git a/framework/Web/Services/TSoapService.php b/framework/Web/Services/TSoapService.php
index c928dc06..9554af20 100644
--- a/framework/Web/Services/TSoapService.php
+++ b/framework/Web/Services/TSoapService.php
@@ -4,9 +4,9 @@
*
* @author Knut Urdalen <knut.urdalen@gmail.com>
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.Services
*/
diff --git a/framework/Web/TAssetManager.php b/framework/Web/TAssetManager.php
index 272d4400..d84ca566 100644
--- a/framework/Web/TAssetManager.php
+++ b/framework/Web/TAssetManager.php
@@ -3,9 +3,9 @@
* TAssetManager class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web
*/
diff --git a/framework/Web/TCacheHttpSession.php b/framework/Web/TCacheHttpSession.php
index 02e84e22..604eef44 100644
--- a/framework/Web/TCacheHttpSession.php
+++ b/framework/Web/TCacheHttpSession.php
@@ -4,9 +4,9 @@
*
* @author Carl G. Mathisen <carlgmathisen@gmail.com>
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web
* @since 3.1.1
*/
diff --git a/framework/Web/THttpRequest.php b/framework/Web/THttpRequest.php
index 5d77ba60..f89c3546 100644
--- a/framework/Web/THttpRequest.php
+++ b/framework/Web/THttpRequest.php
@@ -3,9 +3,9 @@
* THttpRequest, THttpCookie, THttpCookieCollection, TUri class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web
*/
diff --git a/framework/Web/THttpResponse.php b/framework/Web/THttpResponse.php
index 7e1afcc6..21e64107 100644
--- a/framework/Web/THttpResponse.php
+++ b/framework/Web/THttpResponse.php
@@ -3,9 +3,9 @@
* THttpResponse class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web
*/
diff --git a/framework/Web/THttpResponseAdapter.php b/framework/Web/THttpResponseAdapter.php
index 3411e71c..7f875902 100644
--- a/framework/Web/THttpResponseAdapter.php
+++ b/framework/Web/THttpResponseAdapter.php
@@ -3,9 +3,9 @@
* THttpResponseAdatper class
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @package System.Web
*/
diff --git a/framework/Web/THttpSession.php b/framework/Web/THttpSession.php
index 6a2a3977..50d11b1d 100644
--- a/framework/Web/THttpSession.php
+++ b/framework/Web/THttpSession.php
@@ -3,9 +3,9 @@
* THttpSession class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web
*/
diff --git a/framework/Web/THttpUtility.php b/framework/Web/THttpUtility.php
index f41060f7..2be5fa4b 100644
--- a/framework/Web/THttpUtility.php
+++ b/framework/Web/THttpUtility.php
@@ -3,9 +3,9 @@
* THttpUtility class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web
*/
diff --git a/framework/Web/TUrlManager.php b/framework/Web/TUrlManager.php
index 2d3fa572..0525a7e6 100644
--- a/framework/Web/TUrlManager.php
+++ b/framework/Web/TUrlManager.php
@@ -3,9 +3,9 @@
* TUrlManager class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id $
* @package System.Web
*/
diff --git a/framework/Web/TUrlMapping.php b/framework/Web/TUrlMapping.php
index d8ed75a8..f7fdba65 100644
--- a/framework/Web/TUrlMapping.php
+++ b/framework/Web/TUrlMapping.php
@@ -3,9 +3,9 @@
* TUrlMapping, TUrlMappingPattern and TUrlMappingPatternSecureConnection class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveButton.php b/framework/Web/UI/ActiveControls/TActiveButton.php
index 697e96f1..ae5b7f08 100644
--- a/framework/Web/UI/ActiveControls/TActiveButton.php
+++ b/framework/Web/UI/ActiveControls/TActiveButton.php
@@ -3,9 +3,9 @@
* TActiveButton class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveCheckBox.php b/framework/Web/UI/ActiveControls/TActiveCheckBox.php
index b5d7393c..034666f8 100644
--- a/framework/Web/UI/ActiveControls/TActiveCheckBox.php
+++ b/framework/Web/UI/ActiveControls/TActiveCheckBox.php
@@ -3,9 +3,9 @@
* TActiveCheckBox class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveCheckBoxList.php b/framework/Web/UI/ActiveControls/TActiveCheckBoxList.php
index 1ed76c2e..dfcb72c6 100644
--- a/framework/Web/UI/ActiveControls/TActiveCheckBoxList.php
+++ b/framework/Web/UI/ActiveControls/TActiveCheckBoxList.php
@@ -3,9 +3,9 @@
* TActiveCheckBoxList class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveClientScript.php b/framework/Web/UI/ActiveControls/TActiveClientScript.php
index 4443ea30..4093d8ff 100755
--- a/framework/Web/UI/ActiveControls/TActiveClientScript.php
+++ b/framework/Web/UI/ActiveControls/TActiveClientScript.php
@@ -3,9 +3,9 @@
* TActiveClientScript class file
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveControlAdapter.php b/framework/Web/UI/ActiveControls/TActiveControlAdapter.php
index a74babf7..0cd39c75 100644
--- a/framework/Web/UI/ActiveControls/TActiveControlAdapter.php
+++ b/framework/Web/UI/ActiveControls/TActiveControlAdapter.php
@@ -3,9 +3,9 @@
* TActiveControlAdapter and TCallbackPageStateTracker class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveCustomValidator.php b/framework/Web/UI/ActiveControls/TActiveCustomValidator.php
index f05704fc..18f9f5f3 100644
--- a/framework/Web/UI/ActiveControls/TActiveCustomValidator.php
+++ b/framework/Web/UI/ActiveControls/TActiveCustomValidator.php
@@ -3,9 +3,9 @@
* TActiveCustomValidator class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveDataGrid.php b/framework/Web/UI/ActiveControls/TActiveDataGrid.php
index 2f23c49f..60a9ae35 100644
--- a/framework/Web/UI/ActiveControls/TActiveDataGrid.php
+++ b/framework/Web/UI/ActiveControls/TActiveDataGrid.php
@@ -5,7 +5,7 @@
* @author LANDWEHR Computer und Software GmbH <programmierung@landwehr-software.de>
* @link http://www.landwehr-software.de/
* @copyright Copyright &copy; 2009 LANDWEHR Computer und Software GmbH
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveDataList.php b/framework/Web/UI/ActiveControls/TActiveDataList.php
index 6b749b40..5bbd898e 100644
--- a/framework/Web/UI/ActiveControls/TActiveDataList.php
+++ b/framework/Web/UI/ActiveControls/TActiveDataList.php
@@ -4,7 +4,7 @@
*
* @author Marcos Aurelio Nobre <marconobre@gmail.com>
* @copyright Copyright &copy; 2008, PradoSoft
- * @license http://www.pradosoft.com/license
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveDatePicker.php b/framework/Web/UI/ActiveControls/TActiveDatePicker.php
index ad363d9c..6328bac7 100755
--- a/framework/Web/UI/ActiveControls/TActiveDatePicker.php
+++ b/framework/Web/UI/ActiveControls/TActiveDatePicker.php
@@ -4,9 +4,9 @@
*
* @author Bradley Booms <Bradley.Booms@nsighttel.com>
* @author Christophe Boulain <Christophe.Boulain@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveDropDownList.php b/framework/Web/UI/ActiveControls/TActiveDropDownList.php
index 0de95078..3245ea6b 100644
--- a/framework/Web/UI/ActiveControls/TActiveDropDownList.php
+++ b/framework/Web/UI/ActiveControls/TActiveDropDownList.php
@@ -3,9 +3,9 @@
* TActiveDropDownList class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveFileUpload.php b/framework/Web/UI/ActiveControls/TActiveFileUpload.php
index b478e119..7f11115a 100755
--- a/framework/Web/UI/ActiveControls/TActiveFileUpload.php
+++ b/framework/Web/UI/ActiveControls/TActiveFileUpload.php
@@ -102,12 +102,9 @@ class TActiveFileUpload extends TFileUpload implements IActiveControl, ICallback
$localName = str_replace('\\', '/', tempnam(Prado::getPathOfNamespace($this->getTempPath()),''));
parent::saveAs($localName);
- $filename=addslashes($this->getFileName());
-
-
$params = new TActiveFileUploadCallbackParams;
$params->localName = $localName;
- $params->fileName = $filename;
+ $params->fileName = addslashes($this->getFileName());
$params->fileSize = $this->getFileSize();
$params->fileType = $this->getFileType();
$params->errorCode = $this->getErrorCode();
@@ -198,7 +195,7 @@ EOS;
$params = $this->popParamsByToken($cp->callbackToken);
- $_FILES[$key]['name'] = $params->fileName;
+ $_FILES[$key]['name'] = stripslashes($params->fileName);
$_FILES[$key]['size'] = intval($params->fileSize);
$_FILES[$key]['type'] = $params->fileType;
$_FILES[$key]['error'] = intval($params->errorCode);
diff --git a/framework/Web/UI/ActiveControls/TActiveHiddenField.php b/framework/Web/UI/ActiveControls/TActiveHiddenField.php
index 28be574a..f87ff078 100644
--- a/framework/Web/UI/ActiveControls/TActiveHiddenField.php
+++ b/framework/Web/UI/ActiveControls/TActiveHiddenField.php
@@ -3,9 +3,9 @@
* TActiveHiddenField class file.
*
* @author Carl G. Mathisen <carlgmathisen@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveHyperLink.php b/framework/Web/UI/ActiveControls/TActiveHyperLink.php
index 13161eec..2ffee7e8 100644
--- a/framework/Web/UI/ActiveControls/TActiveHyperLink.php
+++ b/framework/Web/UI/ActiveControls/TActiveHyperLink.php
@@ -3,9 +3,9 @@
* TActiveHyperLink class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveImage.php b/framework/Web/UI/ActiveControls/TActiveImage.php
index 27ec337e..13d53147 100644
--- a/framework/Web/UI/ActiveControls/TActiveImage.php
+++ b/framework/Web/UI/ActiveControls/TActiveImage.php
@@ -3,9 +3,9 @@
* TActiveImage class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveImageButton.php b/framework/Web/UI/ActiveControls/TActiveImageButton.php
index 17068412..351a9965 100644
--- a/framework/Web/UI/ActiveControls/TActiveImageButton.php
+++ b/framework/Web/UI/ActiveControls/TActiveImageButton.php
@@ -3,9 +3,9 @@
* TActiveImageButton class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveLabel.php b/framework/Web/UI/ActiveControls/TActiveLabel.php
index 0a20e2b0..70ff20ed 100644
--- a/framework/Web/UI/ActiveControls/TActiveLabel.php
+++ b/framework/Web/UI/ActiveControls/TActiveLabel.php
@@ -3,9 +3,9 @@
* TActiveLabel class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveLinkButton.php b/framework/Web/UI/ActiveControls/TActiveLinkButton.php
index 304d1cef..aaf2d35d 100644
--- a/framework/Web/UI/ActiveControls/TActiveLinkButton.php
+++ b/framework/Web/UI/ActiveControls/TActiveLinkButton.php
@@ -3,9 +3,9 @@
* TActiveLinkButton class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveListBox.php b/framework/Web/UI/ActiveControls/TActiveListBox.php
index efc9dfcc..e32a8eba 100644
--- a/framework/Web/UI/ActiveControls/TActiveListBox.php
+++ b/framework/Web/UI/ActiveControls/TActiveListBox.php
@@ -3,9 +3,9 @@
* TActiveListBox class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveListControlAdapter.php b/framework/Web/UI/ActiveControls/TActiveListControlAdapter.php
index ca88477d..927912b0 100644
--- a/framework/Web/UI/ActiveControls/TActiveListControlAdapter.php
+++ b/framework/Web/UI/ActiveControls/TActiveListControlAdapter.php
@@ -3,9 +3,9 @@
* TActiveListControlAdapter class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveMultiView.php b/framework/Web/UI/ActiveControls/TActiveMultiView.php
index 5729634b..215706ec 100644
--- a/framework/Web/UI/ActiveControls/TActiveMultiView.php
+++ b/framework/Web/UI/ActiveControls/TActiveMultiView.php
@@ -5,7 +5,7 @@
* @author LANDWEHR Computer und Software GmbH <programmierung@landwehr-software.de>
* @link http://www.landwehr-software.de/
* @copyright Copyright &copy; 2009 LANDWEHR Computer und Software GmbH
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActivePageAdapter.php b/framework/Web/UI/ActiveControls/TActivePageAdapter.php
index 8f5055f6..1803f446 100644
--- a/framework/Web/UI/ActiveControls/TActivePageAdapter.php
+++ b/framework/Web/UI/ActiveControls/TActivePageAdapter.php
@@ -4,9 +4,9 @@
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
* @author Gabor Berczi <gabor.berczi@devworx.hu> (lazyload additions & progressive rendering)
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActivePager.php b/framework/Web/UI/ActiveControls/TActivePager.php
index 078bd5be..e99743f4 100644
--- a/framework/Web/UI/ActiveControls/TActivePager.php
+++ b/framework/Web/UI/ActiveControls/TActivePager.php
@@ -3,9 +3,9 @@
* TActivePager class file.
*
* @author "gevik" (forum contributor) and Christophe Boulain (Christophe.Boulain@gmail.com)
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActivePanel.php b/framework/Web/UI/ActiveControls/TActivePanel.php
index 4b00b013..5192b0d6 100644
--- a/framework/Web/UI/ActiveControls/TActivePanel.php
+++ b/framework/Web/UI/ActiveControls/TActivePanel.php
@@ -3,9 +3,9 @@
* TActivePanel file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveRadioButton.php b/framework/Web/UI/ActiveControls/TActiveRadioButton.php
index 46dbbaf7..90190a12 100644
--- a/framework/Web/UI/ActiveControls/TActiveRadioButton.php
+++ b/framework/Web/UI/ActiveControls/TActiveRadioButton.php
@@ -3,9 +3,9 @@
* TActiveRadioButton class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveRadioButtonList.php b/framework/Web/UI/ActiveControls/TActiveRadioButtonList.php
index 84a71951..9acb6729 100644
--- a/framework/Web/UI/ActiveControls/TActiveRadioButtonList.php
+++ b/framework/Web/UI/ActiveControls/TActiveRadioButtonList.php
@@ -3,9 +3,9 @@
* TActiveRadioButtonList class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveRatingList.php b/framework/Web/UI/ActiveControls/TActiveRatingList.php
index 6f6dd847..a154eb69 100644
--- a/framework/Web/UI/ActiveControls/TActiveRatingList.php
+++ b/framework/Web/UI/ActiveControls/TActiveRatingList.php
@@ -4,9 +4,9 @@
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
* @author Bradley Booms <bradley[dot]booms[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveTableCell.php b/framework/Web/UI/ActiveControls/TActiveTableCell.php
index 73e98967..a581aa46 100644
--- a/framework/Web/UI/ActiveControls/TActiveTableCell.php
+++ b/framework/Web/UI/ActiveControls/TActiveTableCell.php
@@ -5,7 +5,7 @@
* @author LANDWEHR Computer und Software GmbH <programmierung@landwehr-software.de>
* @link http://www.landwehr-software.de/
* @copyright Copyright &copy; 2009 LANDWEHR Computer und Software GmbH
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
* @version $Id$
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveTableRow.php b/framework/Web/UI/ActiveControls/TActiveTableRow.php
index 6beeb27e..0f8abab8 100644
--- a/framework/Web/UI/ActiveControls/TActiveTableRow.php
+++ b/framework/Web/UI/ActiveControls/TActiveTableRow.php
@@ -5,7 +5,7 @@
* @author LANDWEHR Computer und Software GmbH <programmierung@landwehr-software.de>
* @link http://www.landwehr-software.de/
* @copyright Copyright &copy; 2009 LANDWEHR Computer und Software GmbH
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
* @version $Id$
*/
diff --git a/framework/Web/UI/ActiveControls/TActiveTextBox.php b/framework/Web/UI/ActiveControls/TActiveTextBox.php
index 1b8791fd..f80b4986 100644
--- a/framework/Web/UI/ActiveControls/TActiveTextBox.php
+++ b/framework/Web/UI/ActiveControls/TActiveTextBox.php
@@ -3,9 +3,9 @@
* TActiveTextBox class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TAutoComplete.php b/framework/Web/UI/ActiveControls/TAutoComplete.php
index 4ed0d34c..e396e114 100644
--- a/framework/Web/UI/ActiveControls/TAutoComplete.php
+++ b/framework/Web/UI/ActiveControls/TAutoComplete.php
@@ -3,9 +3,9 @@
* TAutoComplete class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TBaseActiveControl.php b/framework/Web/UI/ActiveControls/TBaseActiveControl.php
index c9b6f36e..01583eba 100644
--- a/framework/Web/UI/ActiveControls/TBaseActiveControl.php
+++ b/framework/Web/UI/ActiveControls/TBaseActiveControl.php
@@ -3,9 +3,9 @@
* TBaseActiveControl and TBaseActiveCallbackControl class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TCallback.php b/framework/Web/UI/ActiveControls/TCallback.php
index 557001b2..1aae6ce2 100644
--- a/framework/Web/UI/ActiveControls/TCallback.php
+++ b/framework/Web/UI/ActiveControls/TCallback.php
@@ -3,9 +3,9 @@
* TCallback class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TCallbackClientScript.php b/framework/Web/UI/ActiveControls/TCallbackClientScript.php
index 71f8f63e..1f631f2e 100644
--- a/framework/Web/UI/ActiveControls/TCallbackClientScript.php
+++ b/framework/Web/UI/ActiveControls/TCallbackClientScript.php
@@ -3,9 +3,9 @@
* TCallbackClientScript class file
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TCallbackClientSide.php b/framework/Web/UI/ActiveControls/TCallbackClientSide.php
index 449bea80..874aeb4e 100644
--- a/framework/Web/UI/ActiveControls/TCallbackClientSide.php
+++ b/framework/Web/UI/ActiveControls/TCallbackClientSide.php
@@ -3,9 +3,9 @@
* TCallbackClientSide class file
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TCallbackEventParameter.php b/framework/Web/UI/ActiveControls/TCallbackEventParameter.php
index 2d4451a8..9306aec1 100644
--- a/framework/Web/UI/ActiveControls/TCallbackEventParameter.php
+++ b/framework/Web/UI/ActiveControls/TCallbackEventParameter.php
@@ -3,9 +3,9 @@
* TCallbackEventParameter class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TCallbackOptions.php b/framework/Web/UI/ActiveControls/TCallbackOptions.php
index 0d929ed1..e79561d5 100644
--- a/framework/Web/UI/ActiveControls/TCallbackOptions.php
+++ b/framework/Web/UI/ActiveControls/TCallbackOptions.php
@@ -3,9 +3,9 @@
* TCallbackOptions component class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TCallbackResponseAdapter.php b/framework/Web/UI/ActiveControls/TCallbackResponseAdapter.php
index ad6f2603..4a1c41b3 100755
--- a/framework/Web/UI/ActiveControls/TCallbackResponseAdapter.php
+++ b/framework/Web/UI/ActiveControls/TCallbackResponseAdapter.php
@@ -3,9 +3,9 @@
* TCallbackResponseAdapter and TCallbackResponseWriter class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TDraggable.php b/framework/Web/UI/ActiveControls/TDraggable.php
index fe2ac4cc..3f6008bc 100755
--- a/framework/Web/UI/ActiveControls/TDraggable.php
+++ b/framework/Web/UI/ActiveControls/TDraggable.php
@@ -4,7 +4,7 @@
*
* @author Christophe BOULAIN (Christophe.Boulain@gmail.com)
* @copyright Copyright &copy; 2008, PradoSoft
- * @license http://www.pradosoft.com/license
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
@@ -23,7 +23,7 @@
*
* @author Christophe BOULAIN (Christophe.Boulain@gmail.com)
* @copyright Copyright &copy; 2008, PradoSoft
- * @license http://www.pradosoft.com/license
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
class TDraggable extends TPanel
@@ -209,7 +209,7 @@ class TDraggable extends TPanel
/**
* @author Christophe BOULAIN (Christophe.Boulain@gmail.com)
* @copyright Copyright &copy; 2008, PradoSoft
- * @license http://www.pradosoft.com/license
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
class TDraggableConstraint extends TEnumerable
@@ -222,7 +222,7 @@ class TDraggableConstraint extends TEnumerable
/**
* @author Christophe BOULAIN (Christophe.Boulain@gmail.com)
* @copyright Copyright &copy; 2008, PradoSoft
- * @license http://www.pradosoft.com/license
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
class TDraggableGhostingOptions extends TEnumerable
@@ -235,7 +235,7 @@ class TDraggableGhostingOptions extends TEnumerable
/**
* @author Christophe BOULAIN (Christophe.Boulain@gmail.com)
* @copyright Copyright &copy; 2008, PradoSoft
- * @license http://www.pradosoft.com/license
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
class TDraggableRevertOptions extends TEnumerable
diff --git a/framework/Web/UI/ActiveControls/TDropContainer.php b/framework/Web/UI/ActiveControls/TDropContainer.php
index e0fea5df..49eb0db6 100755
--- a/framework/Web/UI/ActiveControls/TDropContainer.php
+++ b/framework/Web/UI/ActiveControls/TDropContainer.php
@@ -4,8 +4,8 @@
*
* @author Christophe BOULAIN (Christophe.Boulain@gmail.com)
* @copyright Copyright &copy; 2008, PradoSoft
- * @license http://www.pradosoft.com/license
- * @license http://www.pradosoft.com/license
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
@@ -37,7 +37,7 @@ Prado::using('System.Web.UI.ActiveControls.TActivePanel');
*
* @author Christophe BOULAIN (Christophe.Boulain@gmail.com)
* @copyright Copyright &copy; 2008, PradoSoft
- * @license http://www.pradosoft.com/license
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
class TDropContainer extends TPanel implements IActiveControl, ICallbackEventHandler
@@ -254,7 +254,7 @@ class TDropContainer extends TPanel implements IActiveControl, ICallbackEventHan
*
* @author Christophe BOULAIN (Christophe.Boulain@ceram.fr)
* @copyright Copyright &copy; 2008, PradoSoft
- * @license http://www.pradosoft.com/license
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
class TDropContainerEventParameter extends TEventParameter
diff --git a/framework/Web/UI/ActiveControls/TEventTriggeredCallback.php b/framework/Web/UI/ActiveControls/TEventTriggeredCallback.php
index 53d6aead..d990e096 100644
--- a/framework/Web/UI/ActiveControls/TEventTriggeredCallback.php
+++ b/framework/Web/UI/ActiveControls/TEventTriggeredCallback.php
@@ -3,9 +3,9 @@
* TEventTriggeredCallback class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TInPlaceTextBox.php b/framework/Web/UI/ActiveControls/TInPlaceTextBox.php
index 012f2da3..d267729d 100644
--- a/framework/Web/UI/ActiveControls/TInPlaceTextBox.php
+++ b/framework/Web/UI/ActiveControls/TInPlaceTextBox.php
@@ -3,9 +3,9 @@
* TInPlaceTextBox class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TTimeTriggeredCallback.php b/framework/Web/UI/ActiveControls/TTimeTriggeredCallback.php
index bc250521..b643de46 100644
--- a/framework/Web/UI/ActiveControls/TTimeTriggeredCallback.php
+++ b/framework/Web/UI/ActiveControls/TTimeTriggeredCallback.php
@@ -3,9 +3,9 @@
* TTimeTriggeredCallback class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TTriggeredCallback.php b/framework/Web/UI/ActiveControls/TTriggeredCallback.php
index 544707b0..7675bc8c 100644
--- a/framework/Web/UI/ActiveControls/TTriggeredCallback.php
+++ b/framework/Web/UI/ActiveControls/TTriggeredCallback.php
@@ -3,9 +3,9 @@
* TTriggeredCallback class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/ActiveControls/TValueTriggeredCallback.php b/framework/Web/UI/ActiveControls/TValueTriggeredCallback.php
index 0b323066..87a7d603 100644
--- a/framework/Web/UI/ActiveControls/TValueTriggeredCallback.php
+++ b/framework/Web/UI/ActiveControls/TValueTriggeredCallback.php
@@ -3,9 +3,9 @@
* TValueTriggeredCallback class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/JuiControls/TJuiAutoComplete.php b/framework/Web/UI/JuiControls/TJuiAutoComplete.php
index f36b6a51..be6b1b40 100644
--- a/framework/Web/UI/JuiControls/TJuiAutoComplete.php
+++ b/framework/Web/UI/JuiControls/TJuiAutoComplete.php
@@ -3,9 +3,9 @@
* TJuiAutoComplete class file.
*
* @author Wei Zhuo <weizhuo[at]gamil[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
diff --git a/framework/Web/UI/JuiControls/TJuiControlAdapter.php b/framework/Web/UI/JuiControls/TJuiControlAdapter.php
index 638f60f1..0550e3cd 100644
--- a/framework/Web/UI/JuiControls/TJuiControlAdapter.php
+++ b/framework/Web/UI/JuiControls/TJuiControlAdapter.php
@@ -3,9 +3,9 @@
* TJuiControlAdapter class file.
*
* @author Fabio Bas <ctrlaltca@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2013-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2013-2015 PradoSoft
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.JuiControls
*/
@@ -194,6 +194,8 @@ class TJuiControlOptions
} elseif(is_numeric($value)) {
// trick to get float or integer automatically when needed
$this->_options[$option] = $value + 0;
+ } elseif(substr($low,0,8)=='function') {
+ $this->_options[$option] = new TJavaScriptLiteral($value);
} else {
$this->_options[$option] = $value;
}
@@ -292,7 +294,7 @@ class TJuiControlOptions
* </code>
*
* @author Fabio Bas <ctrlaltca[at]gmail[dot]com>
- * @license http://www.pradosoft.com/license
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.JuiControls
*/
class TJuiEventParameter extends TCallbackEventParameter
diff --git a/framework/Web/UI/JuiControls/TJuiDatePicker.php b/framework/Web/UI/JuiControls/TJuiDatePicker.php
index d894e07d..487714d2 100644
--- a/framework/Web/UI/JuiControls/TJuiDatePicker.php
+++ b/framework/Web/UI/JuiControls/TJuiDatePicker.php
@@ -5,7 +5,7 @@
* @author LANDWEHR Computer und Software GmbH <programmierung@landwehr-software.de>
* @link http://www.landwehr-software.de/
* @copyright Copyright &copy; 2015 LANDWEHR Computer und Software GmbH
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.ActiveControls
*/
@@ -93,7 +93,8 @@ class TJuiDatePicker extends TActiveTextBox implements INamingContainer, IJuiOpt
'dayNamesShort', 'defaultDate', 'duration', 'firstDay', 'gotoCurrent', 'hideIfNoPrevNext', 'isRTL', 'maxDate',
'minDate', 'monthNames', 'monthNamesShort', 'navigationAsDateFormat', 'nextText', 'numberOfMonths', 'prevText',
'selectOtherMonths', 'shortYearCutoff', 'showAnim', 'showButtonPanel', 'showCurrentAtPos', 'showMonthAfterYear',
- 'showOn', 'showOptions', 'showOtherMonths', 'showWeek', 'stepMonths', 'weekHeader', 'yearRange', 'yearSuffix');
+ 'showOn', 'showOptions', 'showOtherMonths', 'showWeek', 'stepMonths', 'weekHeader', 'yearRange', 'yearSuffix',
+ 'beforeShow', 'beforeShowDay', 'onChangeMonthYear', 'onClose', 'onSelect');
}
/**
@@ -102,7 +103,7 @@ class TJuiDatePicker extends TActiveTextBox implements INamingContainer, IJuiOpt
*/
public function getValidEvents()
{
- return array('beforeShow', 'beforeShowDay', 'onChangeMonthYear', 'onClose', 'onSelect');
+ return array();
}
/**
diff --git a/framework/Web/UI/JuiControls/TJuiDialog.php b/framework/Web/UI/JuiControls/TJuiDialog.php
index 0e369cc2..e02157d0 100644
--- a/framework/Web/UI/JuiControls/TJuiDialog.php
+++ b/framework/Web/UI/JuiControls/TJuiDialog.php
@@ -3,9 +3,9 @@
* TJuiDialog class file.
*
* @author David Otto <ottodavid[at]gmx[dot]net>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2013-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2013-2015 PradoSoft
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.JuiControls
*/
diff --git a/framework/Web/UI/JuiControls/TJuiDraggable.php b/framework/Web/UI/JuiControls/TJuiDraggable.php
index ed5c3814..f32e257c 100644
--- a/framework/Web/UI/JuiControls/TJuiDraggable.php
+++ b/framework/Web/UI/JuiControls/TJuiDraggable.php
@@ -3,9 +3,9 @@
* TJuiDraggable class file.
*
* @author Fabio Bas <ctrlaltca[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2013-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2013-2015 PradoSoft
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.JuiControls
*/
diff --git a/framework/Web/UI/JuiControls/TJuiDroppable.php b/framework/Web/UI/JuiControls/TJuiDroppable.php
index 77c43940..9a615726 100644
--- a/framework/Web/UI/JuiControls/TJuiDroppable.php
+++ b/framework/Web/UI/JuiControls/TJuiDroppable.php
@@ -3,9 +3,9 @@
* TJuiDroppable class file.
*
* @author Fabio Bas <ctrlaltca[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2013-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2013-2015 PradoSoft
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.JuiControls
*/
diff --git a/framework/Web/UI/JuiControls/TJuiProgressbar.php b/framework/Web/UI/JuiControls/TJuiProgressbar.php
index 604a41e4..61e185e0 100644
--- a/framework/Web/UI/JuiControls/TJuiProgressbar.php
+++ b/framework/Web/UI/JuiControls/TJuiProgressbar.php
@@ -3,9 +3,9 @@
* TJuiProgressbar class file.
*
* @author Fabio Bas <ctrlaltca[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2013-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2013-2015 PradoSoft
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.JuiControls
*/
diff --git a/framework/Web/UI/JuiControls/TJuiResizable.php b/framework/Web/UI/JuiControls/TJuiResizable.php
index ef0cb059..c73305fd 100644
--- a/framework/Web/UI/JuiControls/TJuiResizable.php
+++ b/framework/Web/UI/JuiControls/TJuiResizable.php
@@ -3,9 +3,9 @@
* TJuiResizable class file.
*
* @author Fabio Bas <ctrlaltca[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2013-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2013-2015 PradoSoft
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.JuiControls
*/
diff --git a/framework/Web/UI/JuiControls/TJuiSelectable.php b/framework/Web/UI/JuiControls/TJuiSelectable.php
index 5e9570f8..7fdaaa7b 100644
--- a/framework/Web/UI/JuiControls/TJuiSelectable.php
+++ b/framework/Web/UI/JuiControls/TJuiSelectable.php
@@ -3,9 +3,9 @@
* TJuiSelectable class file.
*
* @author Fabio Bas <ctrlaltca[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2013-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2013-2015 PradoSoft
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.JuiControls
*/
diff --git a/framework/Web/UI/JuiControls/TJuiSortable.php b/framework/Web/UI/JuiControls/TJuiSortable.php
index 1ea5b6d0..3fd62f29 100644
--- a/framework/Web/UI/JuiControls/TJuiSortable.php
+++ b/framework/Web/UI/JuiControls/TJuiSortable.php
@@ -3,9 +3,9 @@
* TJuiSortable class file.
*
* @author Fabio Bas <ctrlaltca[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2013-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2013-2015 PradoSoft
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.JuiControls
*/
diff --git a/framework/Web/UI/TCachePageStatePersister.php b/framework/Web/UI/TCachePageStatePersister.php
index 0914c650..e8419e63 100644
--- a/framework/Web/UI/TCachePageStatePersister.php
+++ b/framework/Web/UI/TCachePageStatePersister.php
@@ -3,9 +3,9 @@
* TCachePageStatePersister class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI
*/
diff --git a/framework/Web/UI/TClientScriptManager.php b/framework/Web/UI/TClientScriptManager.php
index 937bd84e..e35a1ca9 100644
--- a/framework/Web/UI/TClientScriptManager.php
+++ b/framework/Web/UI/TClientScriptManager.php
@@ -4,9 +4,9 @@
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @author Gabor Berczi <gabor.berczi@devworx.hu> (lazyload additions & progressive rendering)
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI
*/
diff --git a/framework/Web/UI/TCompositeControl.php b/framework/Web/UI/TCompositeControl.php
index 5a54271d..e830351f 100644
--- a/framework/Web/UI/TCompositeControl.php
+++ b/framework/Web/UI/TCompositeControl.php
@@ -3,9 +3,9 @@
* TCompositeControl class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI
*/
diff --git a/framework/Web/UI/TControl.php b/framework/Web/UI/TControl.php
index eb5c016e..055b5521 100644
--- a/framework/Web/UI/TControl.php
+++ b/framework/Web/UI/TControl.php
@@ -3,9 +3,9 @@
* TControl, TControlCollection, TEventParameter and INamingContainer class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI
*/
diff --git a/framework/Web/UI/TControlAdapter.php b/framework/Web/UI/TControlAdapter.php
index 2e89e5e7..3abc0049 100644
--- a/framework/Web/UI/TControlAdapter.php
+++ b/framework/Web/UI/TControlAdapter.php
@@ -3,9 +3,9 @@
* TControlAdapter class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI
*/
diff --git a/framework/Web/UI/TForm.php b/framework/Web/UI/TForm.php
index c9280e9a..a6fe3556 100644
--- a/framework/Web/UI/TForm.php
+++ b/framework/Web/UI/TForm.php
@@ -3,9 +3,9 @@
* TForm class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI
*/
diff --git a/framework/Web/UI/THtmlWriter.php b/framework/Web/UI/THtmlWriter.php
index 0339ac83..9c0c5993 100644
--- a/framework/Web/UI/THtmlWriter.php
+++ b/framework/Web/UI/THtmlWriter.php
@@ -3,9 +3,9 @@
* THtmlWriter class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI
*/
diff --git a/framework/Web/UI/TPage.php b/framework/Web/UI/TPage.php
index 41fd4454..e8320bff 100644
--- a/framework/Web/UI/TPage.php
+++ b/framework/Web/UI/TPage.php
@@ -3,9 +3,9 @@
* TPage class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI
*/
diff --git a/framework/Web/UI/TPageStatePersister.php b/framework/Web/UI/TPageStatePersister.php
index bbb20098..161316bc 100644
--- a/framework/Web/UI/TPageStatePersister.php
+++ b/framework/Web/UI/TPageStatePersister.php
@@ -3,9 +3,9 @@
* TPageStatePersister class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI
*/
diff --git a/framework/Web/UI/TSessionPageStatePersister.php b/framework/Web/UI/TSessionPageStatePersister.php
index a1a1f601..a825a7d6 100644
--- a/framework/Web/UI/TSessionPageStatePersister.php
+++ b/framework/Web/UI/TSessionPageStatePersister.php
@@ -3,9 +3,9 @@
* TSessionPageStatePersister class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI
*/
diff --git a/framework/Web/UI/TTemplateControl.php b/framework/Web/UI/TTemplateControl.php
index 3040571e..4917d4bb 100644
--- a/framework/Web/UI/TTemplateControl.php
+++ b/framework/Web/UI/TTemplateControl.php
@@ -3,9 +3,9 @@
* TTemplateControl class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI
*/
diff --git a/framework/Web/UI/TTemplateControlInheritable.php b/framework/Web/UI/TTemplateControlInheritable.php
index f5b03805..d4dbb878 100644
--- a/framework/Web/UI/TTemplateControlInheritable.php
+++ b/framework/Web/UI/TTemplateControlInheritable.php
@@ -6,7 +6,7 @@
* @author Schlaue-Kids.net <info@schlaue-kids.net>
* @link http://www.schlaue-kids.net/
* @copyright Copyright &copy; 2010 Schlaue-Kids.net
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @package System.Web.UI
*/
@@ -23,7 +23,7 @@ Prado::using('System.Web.UI.TTemplateControl');
* inheriting control defines an own.
*
* @author Schlaue-Kids.net <info@schlaue-kids.net>
- * @author Kyle Caine <http://www.pradosoft.com/forum/index.php?action=profile;u=1752>
+ * @author Kyle Caine
* @version $Id$
* @package System.Web.UI
* @since 3.1.8
diff --git a/framework/Web/UI/TTemplateManager.php b/framework/Web/UI/TTemplateManager.php
index 968618bc..b065eb6f 100644
--- a/framework/Web/UI/TTemplateManager.php
+++ b/framework/Web/UI/TTemplateManager.php
@@ -3,9 +3,9 @@
* TTemplateManager and TTemplate class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI
*/
diff --git a/framework/Web/UI/TThemeManager.php b/framework/Web/UI/TThemeManager.php
index f8c86bb7..efc72681 100644
--- a/framework/Web/UI/TThemeManager.php
+++ b/framework/Web/UI/TThemeManager.php
@@ -3,9 +3,9 @@
* TThemeManager class
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI
*/
diff --git a/framework/Web/UI/WebControls/TAccordion.php b/framework/Web/UI/WebControls/TAccordion.php
index 1e9fcd43..d1936135 100644
--- a/framework/Web/UI/WebControls/TAccordion.php
+++ b/framework/Web/UI/WebControls/TAccordion.php
@@ -3,9 +3,9 @@
* TAccordion class file.
*
* @author Gabor Berczi, DevWorx Hungary <gabor.berczi@devworx.hu>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
* @since 3.2
*/
diff --git a/framework/Web/UI/WebControls/TBaseDataList.php b/framework/Web/UI/WebControls/TBaseDataList.php
index 9ebe551e..4501073a 100644
--- a/framework/Web/UI/WebControls/TBaseDataList.php
+++ b/framework/Web/UI/WebControls/TBaseDataList.php
@@ -3,9 +3,9 @@
* TBaseDataList class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TBaseValidator.php b/framework/Web/UI/WebControls/TBaseValidator.php
index a23e2104..a74d4bc7 100644
--- a/framework/Web/UI/WebControls/TBaseValidator.php
+++ b/framework/Web/UI/WebControls/TBaseValidator.php
@@ -3,9 +3,9 @@
* TBaseValidator class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TBoundColumn.php b/framework/Web/UI/WebControls/TBoundColumn.php
index d7ac7750..95697bd0 100644
--- a/framework/Web/UI/WebControls/TBoundColumn.php
+++ b/framework/Web/UI/WebControls/TBoundColumn.php
@@ -3,9 +3,9 @@
* TBoundColumn class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TBulletedList.php b/framework/Web/UI/WebControls/TBulletedList.php
index 9cd3654e..5d4167e2 100644
--- a/framework/Web/UI/WebControls/TBulletedList.php
+++ b/framework/Web/UI/WebControls/TBulletedList.php
@@ -3,9 +3,9 @@
* TBulletedList class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TButton.php b/framework/Web/UI/WebControls/TButton.php
index d9383d1e..aed518af 100644
--- a/framework/Web/UI/WebControls/TButton.php
+++ b/framework/Web/UI/WebControls/TButton.php
@@ -3,9 +3,9 @@
* TButton class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TButtonColumn.php b/framework/Web/UI/WebControls/TButtonColumn.php
index 939fc721..d2d0ec5f 100644
--- a/framework/Web/UI/WebControls/TButtonColumn.php
+++ b/framework/Web/UI/WebControls/TButtonColumn.php
@@ -3,9 +3,9 @@
* TButtonColumn class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TCaptcha.php b/framework/Web/UI/WebControls/TCaptcha.php
index 4523ea40..cf9cc8e4 100644
--- a/framework/Web/UI/WebControls/TCaptcha.php
+++ b/framework/Web/UI/WebControls/TCaptcha.php
@@ -3,9 +3,9 @@
* TCaptcha class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TCaptchaValidator.php b/framework/Web/UI/WebControls/TCaptchaValidator.php
index 2758cac7..1a08430e 100644
--- a/framework/Web/UI/WebControls/TCaptchaValidator.php
+++ b/framework/Web/UI/WebControls/TCaptchaValidator.php
@@ -3,9 +3,9 @@
* TCaptchaValidator class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TCheckBox.php b/framework/Web/UI/WebControls/TCheckBox.php
index 672aa9b2..bfbfbf5d 100644
--- a/framework/Web/UI/WebControls/TCheckBox.php
+++ b/framework/Web/UI/WebControls/TCheckBox.php
@@ -3,9 +3,9 @@
* TCheckBox class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TCheckBoxColumn.php b/framework/Web/UI/WebControls/TCheckBoxColumn.php
index 8f67df55..5cf02651 100644
--- a/framework/Web/UI/WebControls/TCheckBoxColumn.php
+++ b/framework/Web/UI/WebControls/TCheckBoxColumn.php
@@ -3,9 +3,9 @@
* TCheckBoxColumn class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TCheckBoxList.php b/framework/Web/UI/WebControls/TCheckBoxList.php
index 029b6c89..9225e171 100644
--- a/framework/Web/UI/WebControls/TCheckBoxList.php
+++ b/framework/Web/UI/WebControls/TCheckBoxList.php
@@ -3,9 +3,9 @@
* TCheckBoxList class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TClientScript.php b/framework/Web/UI/WebControls/TClientScript.php
index 6fca14d3..c931bcbd 100644
--- a/framework/Web/UI/WebControls/TClientScript.php
+++ b/framework/Web/UI/WebControls/TClientScript.php
@@ -3,9 +3,9 @@
* TClientScript class file
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TColorPicker.php b/framework/Web/UI/WebControls/TColorPicker.php
index 7b20318c..fbe71c00 100644
--- a/framework/Web/UI/WebControls/TColorPicker.php
+++ b/framework/Web/UI/WebControls/TColorPicker.php
@@ -3,9 +3,9 @@
* TColorPicker class file
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TCompareValidator.php b/framework/Web/UI/WebControls/TCompareValidator.php
index b902b67b..30488956 100644
--- a/framework/Web/UI/WebControls/TCompareValidator.php
+++ b/framework/Web/UI/WebControls/TCompareValidator.php
@@ -3,9 +3,9 @@
* TCompareValidator class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TConditional.php b/framework/Web/UI/WebControls/TConditional.php
index 61cc3988..d9bc168d 100644
--- a/framework/Web/UI/WebControls/TConditional.php
+++ b/framework/Web/UI/WebControls/TConditional.php
@@ -3,9 +3,9 @@
* TConditional class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TContent.php b/framework/Web/UI/WebControls/TContent.php
index a2f15e3d..1a0fd371 100644
--- a/framework/Web/UI/WebControls/TContent.php
+++ b/framework/Web/UI/WebControls/TContent.php
@@ -3,9 +3,9 @@
* TContent class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TContentPlaceHolder.php b/framework/Web/UI/WebControls/TContentPlaceHolder.php
index 8a4d7284..03554671 100644
--- a/framework/Web/UI/WebControls/TContentPlaceHolder.php
+++ b/framework/Web/UI/WebControls/TContentPlaceHolder.php
@@ -3,9 +3,9 @@
* TContentPlaceHolder class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TCustomValidator.php b/framework/Web/UI/WebControls/TCustomValidator.php
index 6966a075..ca31a2a7 100644
--- a/framework/Web/UI/WebControls/TCustomValidator.php
+++ b/framework/Web/UI/WebControls/TCustomValidator.php
@@ -3,9 +3,9 @@
* TCustomValidator class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TDataBoundControl.php b/framework/Web/UI/WebControls/TDataBoundControl.php
index 2a287aac..8078b6f0 100644
--- a/framework/Web/UI/WebControls/TDataBoundControl.php
+++ b/framework/Web/UI/WebControls/TDataBoundControl.php
@@ -3,9 +3,9 @@
* TDataBoundControl class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TDataGrid.php b/framework/Web/UI/WebControls/TDataGrid.php
index 96e799aa..109252a3 100644
--- a/framework/Web/UI/WebControls/TDataGrid.php
+++ b/framework/Web/UI/WebControls/TDataGrid.php
@@ -8,9 +8,9 @@
* TDataGridPageChangedEventParameter
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TDataGridColumn.php b/framework/Web/UI/WebControls/TDataGridColumn.php
index 1c8831d2..2f547ffd 100644
--- a/framework/Web/UI/WebControls/TDataGridColumn.php
+++ b/framework/Web/UI/WebControls/TDataGridColumn.php
@@ -3,9 +3,9 @@
* TDataGridColumn class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TDataGridItemRenderer.php b/framework/Web/UI/WebControls/TDataGridItemRenderer.php
index 376eea17..23cf5150 100644
--- a/framework/Web/UI/WebControls/TDataGridItemRenderer.php
+++ b/framework/Web/UI/WebControls/TDataGridItemRenderer.php
@@ -3,9 +3,9 @@
* TDataGridItemRenderer class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TDataGridPagerStyle.php b/framework/Web/UI/WebControls/TDataGridPagerStyle.php
index 4e143e05..b96d0cd2 100644
--- a/framework/Web/UI/WebControls/TDataGridPagerStyle.php
+++ b/framework/Web/UI/WebControls/TDataGridPagerStyle.php
@@ -3,9 +3,9 @@
* TDataGridPagerStyle class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TDataList.php b/framework/Web/UI/WebControls/TDataList.php
index 021fdf6d..a3cf8b6c 100644
--- a/framework/Web/UI/WebControls/TDataList.php
+++ b/framework/Web/UI/WebControls/TDataList.php
@@ -3,9 +3,9 @@
* TDataList class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TDataListItemRenderer.php b/framework/Web/UI/WebControls/TDataListItemRenderer.php
index cf42c9a4..d7cb59c6 100644
--- a/framework/Web/UI/WebControls/TDataListItemRenderer.php
+++ b/framework/Web/UI/WebControls/TDataListItemRenderer.php
@@ -3,9 +3,9 @@
* TDataListItemRenderer class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TDataRenderer.php b/framework/Web/UI/WebControls/TDataRenderer.php
index 0e98a1b4..6e760130 100644
--- a/framework/Web/UI/WebControls/TDataRenderer.php
+++ b/framework/Web/UI/WebControls/TDataRenderer.php
@@ -3,9 +3,9 @@
* TDataRenderer class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
* @since 3.1.2
*/
diff --git a/framework/Web/UI/WebControls/TDataSourceControl.php b/framework/Web/UI/WebControls/TDataSourceControl.php
index afe4de2d..ff47a788 100644
--- a/framework/Web/UI/WebControls/TDataSourceControl.php
+++ b/framework/Web/UI/WebControls/TDataSourceControl.php
@@ -3,9 +3,9 @@
* IDataSource, TDataSourceControl, TReadOnlyDataSource class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TDataSourceView.php b/framework/Web/UI/WebControls/TDataSourceView.php
index b9a76a32..ed6d8688 100644
--- a/framework/Web/UI/WebControls/TDataSourceView.php
+++ b/framework/Web/UI/WebControls/TDataSourceView.php
@@ -3,9 +3,9 @@
* TDataSourceSelectParameters, TDataSourceView, TReadOnlyDataSourceView class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TDataTypeValidator.php b/framework/Web/UI/WebControls/TDataTypeValidator.php
index 3881bb84..b78a9624 100644
--- a/framework/Web/UI/WebControls/TDataTypeValidator.php
+++ b/framework/Web/UI/WebControls/TDataTypeValidator.php
@@ -3,9 +3,9 @@
* TDataTypeValidator class.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TDatePicker.php b/framework/Web/UI/WebControls/TDatePicker.php
index f910f06e..3f9e4458 100644
--- a/framework/Web/UI/WebControls/TDatePicker.php
+++ b/framework/Web/UI/WebControls/TDatePicker.php
@@ -3,9 +3,9 @@
* TDatePicker class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TDropDownList.php b/framework/Web/UI/WebControls/TDropDownList.php
index ab56bc7a..0598d245 100644
--- a/framework/Web/UI/WebControls/TDropDownList.php
+++ b/framework/Web/UI/WebControls/TDropDownList.php
@@ -3,9 +3,9 @@
* TDropDownList class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TDropDownListColumn.php b/framework/Web/UI/WebControls/TDropDownListColumn.php
index 13a47aa7..507dafdb 100644
--- a/framework/Web/UI/WebControls/TDropDownListColumn.php
+++ b/framework/Web/UI/WebControls/TDropDownListColumn.php
@@ -3,9 +3,9 @@
* TDropDownListColumn class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TEditCommandColumn.php b/framework/Web/UI/WebControls/TEditCommandColumn.php
index d8db8059..36e188f5 100644
--- a/framework/Web/UI/WebControls/TEditCommandColumn.php
+++ b/framework/Web/UI/WebControls/TEditCommandColumn.php
@@ -3,9 +3,9 @@
* TEditCommandColumn class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TEmailAddressValidator.php b/framework/Web/UI/WebControls/TEmailAddressValidator.php
index b5ed78c6..bb953722 100644
--- a/framework/Web/UI/WebControls/TEmailAddressValidator.php
+++ b/framework/Web/UI/WebControls/TEmailAddressValidator.php
@@ -3,9 +3,9 @@
* TEmailAddressValidator class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TExpression.php b/framework/Web/UI/WebControls/TExpression.php
index f1fea77b..57bbb593 100644
--- a/framework/Web/UI/WebControls/TExpression.php
+++ b/framework/Web/UI/WebControls/TExpression.php
@@ -3,9 +3,9 @@
* TExpression class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TFileUpload.php b/framework/Web/UI/WebControls/TFileUpload.php
index af2ad3f2..c8853c55 100644
--- a/framework/Web/UI/WebControls/TFileUpload.php
+++ b/framework/Web/UI/WebControls/TFileUpload.php
@@ -3,9 +3,9 @@
* TFileUpload class file
*
* @author Marcus Nyeholt <tanus@users.sourceforge.net>, Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TFlushOutput.php b/framework/Web/UI/WebControls/TFlushOutput.php
index 0dbe0692..a88b91fc 100644
--- a/framework/Web/UI/WebControls/TFlushOutput.php
+++ b/framework/Web/UI/WebControls/TFlushOutput.php
@@ -3,8 +3,8 @@
* TFlushOutput class file
*
* @author Berczi Gabor <gabor.berczi@devworx.hu>
- * @link http://www.pradosoft.com/
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TFont.php b/framework/Web/UI/WebControls/TFont.php
index a07b8621..52a5db71 100644
--- a/framework/Web/UI/WebControls/TFont.php
+++ b/framework/Web/UI/WebControls/TFont.php
@@ -3,9 +3,9 @@
* TFont class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/THead.php b/framework/Web/UI/WebControls/THead.php
index 707bbfcc..c7c9b57f 100644
--- a/framework/Web/UI/WebControls/THead.php
+++ b/framework/Web/UI/WebControls/THead.php
@@ -3,9 +3,9 @@
* THead class file
*
* @author Marcus Nyeholt <tanus@users.sourceforge.net> and Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI
*/
diff --git a/framework/Web/UI/WebControls/THeader1.php b/framework/Web/UI/WebControls/THeader1.php
index 8aa635b5..5eee4998 100644
--- a/framework/Web/UI/WebControls/THeader1.php
+++ b/framework/Web/UI/WebControls/THeader1.php
@@ -3,9 +3,9 @@
* THeader1 class file
*
* @author Brad Anderson <javalizard@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/THeader2.php b/framework/Web/UI/WebControls/THeader2.php
index 16631312..c54b52f0 100644
--- a/framework/Web/UI/WebControls/THeader2.php
+++ b/framework/Web/UI/WebControls/THeader2.php
@@ -3,9 +3,9 @@
* THeader2 class file
*
* @author Brad Anderson <javalizard@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/THeader3.php b/framework/Web/UI/WebControls/THeader3.php
index 64e48366..ef89e024 100644
--- a/framework/Web/UI/WebControls/THeader3.php
+++ b/framework/Web/UI/WebControls/THeader3.php
@@ -3,9 +3,9 @@
* THeader3 class file
*
* @author Brad Anderson <javalizard@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/THeader4.php b/framework/Web/UI/WebControls/THeader4.php
index 6622dd34..d2dada4f 100644
--- a/framework/Web/UI/WebControls/THeader4.php
+++ b/framework/Web/UI/WebControls/THeader4.php
@@ -3,9 +3,9 @@
* THeader4 class file
*
* @author Brad Anderson <javalizard@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/THeader5.php b/framework/Web/UI/WebControls/THeader5.php
index 4d061943..582567dd 100644
--- a/framework/Web/UI/WebControls/THeader5.php
+++ b/framework/Web/UI/WebControls/THeader5.php
@@ -3,9 +3,9 @@
* THeader5 class file
*
* @author Brad Anderson <javalizard@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/THeader6.php b/framework/Web/UI/WebControls/THeader6.php
index 164c391c..ae876f8d 100644
--- a/framework/Web/UI/WebControls/THeader6.php
+++ b/framework/Web/UI/WebControls/THeader6.php
@@ -3,9 +3,9 @@
* THeader6 class file
*
* @author Brad Anderson <javalizard@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/THiddenField.php b/framework/Web/UI/WebControls/THiddenField.php
index d887a5e6..8ea1c5b9 100644
--- a/framework/Web/UI/WebControls/THiddenField.php
+++ b/framework/Web/UI/WebControls/THiddenField.php
@@ -4,7 +4,7 @@
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.xisc.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/THtmlArea.php b/framework/Web/UI/WebControls/THtmlArea.php
index 6c2985f8..7fc59691 100644
--- a/framework/Web/UI/WebControls/THtmlArea.php
+++ b/framework/Web/UI/WebControls/THtmlArea.php
@@ -3,9 +3,9 @@
* THtmlArea class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
@@ -405,7 +405,7 @@ class THtmlArea extends TTextBox
$options['CompressionOptions'] = $this->getCompressionOptions();
$options = TJavaScript::encode($options,true,true);
- $script = "new Prado.WebUI.THtmlArea($options)";
+ $script = "new {$this->getClientClassName()}($options)";
$scripts->registerEndScript('prado:THtmlArea'.$this->ClientID,$script);
}
diff --git a/framework/Web/UI/WebControls/THtmlArea4.php b/framework/Web/UI/WebControls/THtmlArea4.php
index d5410eae..94851501 100644
--- a/framework/Web/UI/WebControls/THtmlArea4.php
+++ b/framework/Web/UI/WebControls/THtmlArea4.php
@@ -3,9 +3,9 @@
* THtmlArea4 class file.
*
* @author Fabio Bas <ctrlaltca[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
@@ -355,7 +355,7 @@ class THtmlArea4 extends TTextBox
);
$options = TJavaScript::encode($options,true,true);
- $script = "new Prado.WebUI.THtmlArea4($options)";
+ $script = "new {$this->getClientClassName()}($options)";
$scripts->registerEndScript('prado:THtmlArea4'.$this->ClientID,$script);
}
diff --git a/framework/Web/UI/WebControls/THtmlElement.php b/framework/Web/UI/WebControls/THtmlElement.php
index f5bee915..6efd608c 100644
--- a/framework/Web/UI/WebControls/THtmlElement.php
+++ b/framework/Web/UI/WebControls/THtmlElement.php
@@ -3,9 +3,9 @@
* THtmlElement class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/THyperLink.php b/framework/Web/UI/WebControls/THyperLink.php
index 3cda0c48..8e8d3f5e 100644
--- a/framework/Web/UI/WebControls/THyperLink.php
+++ b/framework/Web/UI/WebControls/THyperLink.php
@@ -4,7 +4,7 @@
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.xisc.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/THyperLinkColumn.php b/framework/Web/UI/WebControls/THyperLinkColumn.php
index 05060ea6..d24616a9 100644
--- a/framework/Web/UI/WebControls/THyperLinkColumn.php
+++ b/framework/Web/UI/WebControls/THyperLinkColumn.php
@@ -3,9 +3,9 @@
* THyperLinkColumn class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TImage.php b/framework/Web/UI/WebControls/TImage.php
index 6ebbca5d..85385454 100644
--- a/framework/Web/UI/WebControls/TImage.php
+++ b/framework/Web/UI/WebControls/TImage.php
@@ -3,9 +3,9 @@
* TImage class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TImageButton.php b/framework/Web/UI/WebControls/TImageButton.php
index ff876b07..288def3e 100644
--- a/framework/Web/UI/WebControls/TImageButton.php
+++ b/framework/Web/UI/WebControls/TImageButton.php
@@ -3,9 +3,9 @@
* TImageButton class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TImageMap.php b/framework/Web/UI/WebControls/TImageMap.php
index 23409b1c..8775496e 100644
--- a/framework/Web/UI/WebControls/TImageMap.php
+++ b/framework/Web/UI/WebControls/TImageMap.php
@@ -3,9 +3,9 @@
* TImageMap and related class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TInlineFrame.php b/framework/Web/UI/WebControls/TInlineFrame.php
index 67ff5830..3d182355 100644
--- a/framework/Web/UI/WebControls/TInlineFrame.php
+++ b/framework/Web/UI/WebControls/TInlineFrame.php
@@ -4,9 +4,9 @@
*
* @author Jason Ragsdale <jrags@jasrags.net>
* @author Harry Pottash <hpottash@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TItemDataRenderer.php b/framework/Web/UI/WebControls/TItemDataRenderer.php
index eb6fabef..1800fa7d 100644
--- a/framework/Web/UI/WebControls/TItemDataRenderer.php
+++ b/framework/Web/UI/WebControls/TItemDataRenderer.php
@@ -3,9 +3,9 @@
* TItemDataRenderer class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
* @since 3.1.2
*/
diff --git a/framework/Web/UI/WebControls/TJavascriptLogger.php b/framework/Web/UI/WebControls/TJavascriptLogger.php
index 2434237b..83f9fcb5 100644
--- a/framework/Web/UI/WebControls/TJavascriptLogger.php
+++ b/framework/Web/UI/WebControls/TJavascriptLogger.php
@@ -3,9 +3,9 @@
* TJavascriptLogger class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TKeyboard.php b/framework/Web/UI/WebControls/TKeyboard.php
index d423107a..15a4aa35 100644
--- a/framework/Web/UI/WebControls/TKeyboard.php
+++ b/framework/Web/UI/WebControls/TKeyboard.php
@@ -3,9 +3,9 @@
* TKeyboard class file.
*
* @author Sergey Morkovkin <sergeymorkovkin@mail.ru> and Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
* @since 3.1.1
*/
diff --git a/framework/Web/UI/WebControls/TLabel.php b/framework/Web/UI/WebControls/TLabel.php
index 6ffd025b..bf43b4d2 100644
--- a/framework/Web/UI/WebControls/TLabel.php
+++ b/framework/Web/UI/WebControls/TLabel.php
@@ -3,9 +3,9 @@
* TLabel class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TLinkButton.php b/framework/Web/UI/WebControls/TLinkButton.php
index fe1ae33b..dadea1d8 100644
--- a/framework/Web/UI/WebControls/TLinkButton.php
+++ b/framework/Web/UI/WebControls/TLinkButton.php
@@ -3,9 +3,9 @@
* TLinkButton class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TListBox.php b/framework/Web/UI/WebControls/TListBox.php
index 1d72f0c2..520fc5e6 100644
--- a/framework/Web/UI/WebControls/TListBox.php
+++ b/framework/Web/UI/WebControls/TListBox.php
@@ -3,9 +3,9 @@
* TListBox class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TListControl.php b/framework/Web/UI/WebControls/TListControl.php
index f8655761..ff89a74d 100644
--- a/framework/Web/UI/WebControls/TListControl.php
+++ b/framework/Web/UI/WebControls/TListControl.php
@@ -5,9 +5,9 @@
*
* @author Robin J. Rogge <rojaro@gmail.com>
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TListControlValidator.php b/framework/Web/UI/WebControls/TListControlValidator.php
index 04cc6ef6..76096efa 100644
--- a/framework/Web/UI/WebControls/TListControlValidator.php
+++ b/framework/Web/UI/WebControls/TListControlValidator.php
@@ -3,9 +3,9 @@
* TListControlValidator class file
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TListItem.php b/framework/Web/UI/WebControls/TListItem.php
index cf5e487a..aec006db 100644
--- a/framework/Web/UI/WebControls/TListItem.php
+++ b/framework/Web/UI/WebControls/TListItem.php
@@ -3,9 +3,9 @@
* TListItem class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TLiteral.php b/framework/Web/UI/WebControls/TLiteral.php
index 35d35e02..f2306b4b 100644
--- a/framework/Web/UI/WebControls/TLiteral.php
+++ b/framework/Web/UI/WebControls/TLiteral.php
@@ -3,9 +3,9 @@
* TLiteral class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TLiteralColumn.php b/framework/Web/UI/WebControls/TLiteralColumn.php
index 4b2c39fc..3cf3c3a1 100644
--- a/framework/Web/UI/WebControls/TLiteralColumn.php
+++ b/framework/Web/UI/WebControls/TLiteralColumn.php
@@ -3,9 +3,9 @@
* TLiteralColumn class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TMarkdown.php b/framework/Web/UI/WebControls/TMarkdown.php
index 75c8ec1b..7a99b1f8 100644
--- a/framework/Web/UI/WebControls/TMarkdown.php
+++ b/framework/Web/UI/WebControls/TMarkdown.php
@@ -3,9 +3,9 @@
* TMarkdown class file
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TMultiView.php b/framework/Web/UI/WebControls/TMultiView.php
index 05725ff7..5f338d7a 100644
--- a/framework/Web/UI/WebControls/TMultiView.php
+++ b/framework/Web/UI/WebControls/TMultiView.php
@@ -3,9 +3,9 @@
* TMultiView and TView class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TOutputCache.php b/framework/Web/UI/WebControls/TOutputCache.php
index 2a5ce734..56154180 100644
--- a/framework/Web/UI/WebControls/TOutputCache.php
+++ b/framework/Web/UI/WebControls/TOutputCache.php
@@ -3,9 +3,9 @@
* TOutputCache class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TPager.php b/framework/Web/UI/WebControls/TPager.php
index b4b9c2b0..467c0f70 100644
--- a/framework/Web/UI/WebControls/TPager.php
+++ b/framework/Web/UI/WebControls/TPager.php
@@ -3,9 +3,9 @@
* TPager class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TPanel.php b/framework/Web/UI/WebControls/TPanel.php
index 2bf1b40d..22d44a53 100644
--- a/framework/Web/UI/WebControls/TPanel.php
+++ b/framework/Web/UI/WebControls/TPanel.php
@@ -3,9 +3,9 @@
* TPanel class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TPanelStyle.php b/framework/Web/UI/WebControls/TPanelStyle.php
index d1dfe62e..2e0f1a2a 100644
--- a/framework/Web/UI/WebControls/TPanelStyle.php
+++ b/framework/Web/UI/WebControls/TPanelStyle.php
@@ -3,9 +3,9 @@
* TPanelStyle class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TPlaceHolder.php b/framework/Web/UI/WebControls/TPlaceHolder.php
index 6809a402..65f5ba2e 100644
--- a/framework/Web/UI/WebControls/TPlaceHolder.php
+++ b/framework/Web/UI/WebControls/TPlaceHolder.php
@@ -3,9 +3,9 @@
* TPlaceHolder class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TRadioButton.php b/framework/Web/UI/WebControls/TRadioButton.php
index cd3d8480..cfdb795c 100644
--- a/framework/Web/UI/WebControls/TRadioButton.php
+++ b/framework/Web/UI/WebControls/TRadioButton.php
@@ -3,9 +3,9 @@
* TRadioButton class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TRadioButtonList.php b/framework/Web/UI/WebControls/TRadioButtonList.php
index 3afe3ec2..dc9e2dab 100644
--- a/framework/Web/UI/WebControls/TRadioButtonList.php
+++ b/framework/Web/UI/WebControls/TRadioButtonList.php
@@ -3,9 +3,9 @@
* TRadioButtonList class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TRangeValidator.php b/framework/Web/UI/WebControls/TRangeValidator.php
index 8a3c0e35..a6668f4c 100644
--- a/framework/Web/UI/WebControls/TRangeValidator.php
+++ b/framework/Web/UI/WebControls/TRangeValidator.php
@@ -3,9 +3,9 @@
* TRangeValidator class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TRatingList.php b/framework/Web/UI/WebControls/TRatingList.php
index b1673ac0..0f1f364e 100644
--- a/framework/Web/UI/WebControls/TRatingList.php
+++ b/framework/Web/UI/WebControls/TRatingList.php
@@ -3,9 +3,9 @@
* TRatingList class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TReCaptcha.php b/framework/Web/UI/WebControls/TReCaptcha.php
index 429f194f..89053d10 100644
--- a/framework/Web/UI/WebControls/TReCaptcha.php
+++ b/framework/Web/UI/WebControls/TReCaptcha.php
@@ -6,7 +6,7 @@
* @author Bérczi Gábor <gabor.berczi@devworx.hu>
* @link http://www.devworx.hu/
* @copyright Copyright &copy; 2011 DevWorx
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TReCaptchaValidator.php b/framework/Web/UI/WebControls/TReCaptchaValidator.php
index 83bee07b..de3b42a5 100644
--- a/framework/Web/UI/WebControls/TReCaptchaValidator.php
+++ b/framework/Web/UI/WebControls/TReCaptchaValidator.php
@@ -6,7 +6,7 @@
* @author Bérczi Gábor <gabor.berczi@devworx.hu>
* @link http://www.devworx.hu/
* @copyright Copyright &copy; 2011 DevWorx
- * @license http://www.pradosoft.com/license/
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TRegularExpressionValidator.php b/framework/Web/UI/WebControls/TRegularExpressionValidator.php
index 2c155e28..1cdff8b7 100644
--- a/framework/Web/UI/WebControls/TRegularExpressionValidator.php
+++ b/framework/Web/UI/WebControls/TRegularExpressionValidator.php
@@ -3,9 +3,9 @@
* TRequiredFieldValidator class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TRepeatInfo.php b/framework/Web/UI/WebControls/TRepeatInfo.php
index 7b65b3b3..f5823d7d 100644
--- a/framework/Web/UI/WebControls/TRepeatInfo.php
+++ b/framework/Web/UI/WebControls/TRepeatInfo.php
@@ -3,9 +3,9 @@
* IRepeatInfoUser, TRepeatInfo class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TRepeater.php b/framework/Web/UI/WebControls/TRepeater.php
index a563a12d..3d295a2b 100644
--- a/framework/Web/UI/WebControls/TRepeater.php
+++ b/framework/Web/UI/WebControls/TRepeater.php
@@ -3,9 +3,9 @@
* TRepeater class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TRepeaterItemRenderer.php b/framework/Web/UI/WebControls/TRepeaterItemRenderer.php
index 1c41e65f..1ea799cf 100644
--- a/framework/Web/UI/WebControls/TRepeaterItemRenderer.php
+++ b/framework/Web/UI/WebControls/TRepeaterItemRenderer.php
@@ -3,9 +3,9 @@
* TRepeaterItemRenderer class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TRequiredFieldValidator.php b/framework/Web/UI/WebControls/TRequiredFieldValidator.php
index 3db2457d..4587db83 100644
--- a/framework/Web/UI/WebControls/TRequiredFieldValidator.php
+++ b/framework/Web/UI/WebControls/TRequiredFieldValidator.php
@@ -3,9 +3,9 @@
* TRequiredFieldValidator class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TSafeHtml.php b/framework/Web/UI/WebControls/TSafeHtml.php
index b7b14f79..16743f96 100644
--- a/framework/Web/UI/WebControls/TSafeHtml.php
+++ b/framework/Web/UI/WebControls/TSafeHtml.php
@@ -3,9 +3,9 @@
* TSafeHtml class file
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TSlider.php b/framework/Web/UI/WebControls/TSlider.php
index e9573ea9..593cd2ce 100644
--- a/framework/Web/UI/WebControls/TSlider.php
+++ b/framework/Web/UI/WebControls/TSlider.php
@@ -3,9 +3,9 @@
* TSlider class file.
*
* @author Christophe Boulain <Christophe.Boulain@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
* @since 3.1.1
*/
diff --git a/framework/Web/UI/WebControls/TStatements.php b/framework/Web/UI/WebControls/TStatements.php
index 0602732b..e9cbeb32 100644
--- a/framework/Web/UI/WebControls/TStatements.php
+++ b/framework/Web/UI/WebControls/TStatements.php
@@ -3,9 +3,9 @@
* TStatements class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TStyle.php b/framework/Web/UI/WebControls/TStyle.php
index f30b3461..eb47f2f7 100644
--- a/framework/Web/UI/WebControls/TStyle.php
+++ b/framework/Web/UI/WebControls/TStyle.php
@@ -3,9 +3,9 @@
* TStyle class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TStyleSheet.php b/framework/Web/UI/WebControls/TStyleSheet.php
index 32c0faf1..ae5692d4 100644
--- a/framework/Web/UI/WebControls/TStyleSheet.php
+++ b/framework/Web/UI/WebControls/TStyleSheet.php
@@ -3,9 +3,9 @@
* TStyleSheet class file.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TTabPanel.php b/framework/Web/UI/WebControls/TTabPanel.php
index 8f1564db..29baefde 100644
--- a/framework/Web/UI/WebControls/TTabPanel.php
+++ b/framework/Web/UI/WebControls/TTabPanel.php
@@ -3,9 +3,9 @@
* TTabPanel class file.
*
* @author Tomasz Wolny <tomasz.wolny@polecam.to.pl> and Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
* @since 3.1.1
*/
diff --git a/framework/Web/UI/WebControls/TTable.php b/framework/Web/UI/WebControls/TTable.php
index 4102cd4b..98dc74e7 100644
--- a/framework/Web/UI/WebControls/TTable.php
+++ b/framework/Web/UI/WebControls/TTable.php
@@ -3,9 +3,9 @@
* TTable and TTableRowCollection class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TTableCell.php b/framework/Web/UI/WebControls/TTableCell.php
index d78aebbd..b0398d27 100644
--- a/framework/Web/UI/WebControls/TTableCell.php
+++ b/framework/Web/UI/WebControls/TTableCell.php
@@ -3,9 +3,9 @@
* TTableCell class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TTableFooterRow.php b/framework/Web/UI/WebControls/TTableFooterRow.php
index 32be1e12..c3e8fe97 100644
--- a/framework/Web/UI/WebControls/TTableFooterRow.php
+++ b/framework/Web/UI/WebControls/TTableFooterRow.php
@@ -3,9 +3,9 @@
* TTableFooterRow class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TTableHeaderCell.php b/framework/Web/UI/WebControls/TTableHeaderCell.php
index 43b21b45..bb2953b6 100644
--- a/framework/Web/UI/WebControls/TTableHeaderCell.php
+++ b/framework/Web/UI/WebControls/TTableHeaderCell.php
@@ -3,9 +3,9 @@
* TTableHeaderCell class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TTableHeaderRow.php b/framework/Web/UI/WebControls/TTableHeaderRow.php
index 0e42a416..7eaedc3c 100644
--- a/framework/Web/UI/WebControls/TTableHeaderRow.php
+++ b/framework/Web/UI/WebControls/TTableHeaderRow.php
@@ -3,9 +3,9 @@
* TTableHeaderRow class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TTableRow.php b/framework/Web/UI/WebControls/TTableRow.php
index d0bc6bfb..ebbe9df2 100644
--- a/framework/Web/UI/WebControls/TTableRow.php
+++ b/framework/Web/UI/WebControls/TTableRow.php
@@ -3,9 +3,9 @@
* TTableRow and TTableCellCollection class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TTemplateColumn.php b/framework/Web/UI/WebControls/TTemplateColumn.php
index 947f0c47..b97b61f9 100644
--- a/framework/Web/UI/WebControls/TTemplateColumn.php
+++ b/framework/Web/UI/WebControls/TTemplateColumn.php
@@ -3,9 +3,9 @@
* TTemplateColumn class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TTextBox.php b/framework/Web/UI/WebControls/TTextBox.php
index 0d14dd7c..f3a0c166 100644
--- a/framework/Web/UI/WebControls/TTextBox.php
+++ b/framework/Web/UI/WebControls/TTextBox.php
@@ -3,9 +3,9 @@
* TTextBox class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TTextHighlighter.php b/framework/Web/UI/WebControls/TTextHighlighter.php
index a10171db..61838512 100644
--- a/framework/Web/UI/WebControls/TTextHighlighter.php
+++ b/framework/Web/UI/WebControls/TTextHighlighter.php
@@ -3,9 +3,9 @@
* TTextHighlighter class file
*
* @author Wei Zhuo<weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TTextProcessor.php b/framework/Web/UI/WebControls/TTextProcessor.php
index daba9b46..c213a961 100644
--- a/framework/Web/UI/WebControls/TTextProcessor.php
+++ b/framework/Web/UI/WebControls/TTextProcessor.php
@@ -3,9 +3,9 @@
* TTextProcessor class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TValidationSummary.php b/framework/Web/UI/WebControls/TValidationSummary.php
index 3d5b61ca..2fbdba74 100644
--- a/framework/Web/UI/WebControls/TValidationSummary.php
+++ b/framework/Web/UI/WebControls/TValidationSummary.php
@@ -3,9 +3,9 @@
* TValidationSummary class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TWebControl.php b/framework/Web/UI/WebControls/TWebControl.php
index e0bd6194..619cdd91 100644
--- a/framework/Web/UI/WebControls/TWebControl.php
+++ b/framework/Web/UI/WebControls/TWebControl.php
@@ -3,9 +3,9 @@
* TWebControl class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TWebControlAdapter.php b/framework/Web/UI/WebControls/TWebControlAdapter.php
index 6b969456..50da857b 100644
--- a/framework/Web/UI/WebControls/TWebControlAdapter.php
+++ b/framework/Web/UI/WebControls/TWebControlAdapter.php
@@ -3,9 +3,9 @@
* TWebControlAdapter class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TWebControlDecorator.php b/framework/Web/UI/WebControls/TWebControlDecorator.php
index d08d9c82..07c7836f 100644
--- a/framework/Web/UI/WebControls/TWebControlDecorator.php
+++ b/framework/Web/UI/WebControls/TWebControlDecorator.php
@@ -3,9 +3,9 @@
* TWebControlDecorator class file.
*
* @author Brad Anderson <javalizard@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TWizard.php b/framework/Web/UI/WebControls/TWizard.php
index 6b82a691..bacb637c 100644
--- a/framework/Web/UI/WebControls/TWizard.php
+++ b/framework/Web/UI/WebControls/TWizard.php
@@ -3,9 +3,9 @@
* TWizard and the relevant class definitions.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TWizardNavigationButtonStyle.php b/framework/Web/UI/WebControls/TWizardNavigationButtonStyle.php
index c84f28a1..de94fc55 100644
--- a/framework/Web/UI/WebControls/TWizardNavigationButtonStyle.php
+++ b/framework/Web/UI/WebControls/TWizardNavigationButtonStyle.php
@@ -3,9 +3,9 @@
* TWizardNavigationButtonStyle class file.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id $
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/TXmlTransform.php b/framework/Web/UI/WebControls/TXmlTransform.php
index c32ab440..e3c206ff 100644
--- a/framework/Web/UI/WebControls/TXmlTransform.php
+++ b/framework/Web/UI/WebControls/TXmlTransform.php
@@ -4,9 +4,9 @@
*
* @author Knut Urdalen <knut.urdalen@gmail.com>
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls
*/
diff --git a/framework/Web/UI/WebControls/assets/captcha.php b/framework/Web/UI/WebControls/assets/captcha.php
index 1c35e6eb..bc20a570 100644
--- a/framework/Web/UI/WebControls/assets/captcha.php
+++ b/framework/Web/UI/WebControls/assets/captcha.php
@@ -3,9 +3,9 @@
* CAPTCHA generator script.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Web.UI.WebControls.assets
*/
diff --git a/framework/Wsat/TWsatARGenerator.php b/framework/Wsat/TWsatARGenerator.php
index da004b1f..a576b21a 100644
--- a/framework/Wsat/TWsatARGenerator.php
+++ b/framework/Wsat/TWsatARGenerator.php
@@ -2,12 +2,12 @@
/**
* @author Daniel Sampedro Bello <darthdaniel85@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @since 3.3
- * @package Wsat
+ * @package System.Wsat
*/
Prado::using("System.Wsat.TWsatBaseGenerator");
diff --git a/framework/Wsat/TWsatBaseGenerator.php b/framework/Wsat/TWsatBaseGenerator.php
index 763836a3..a87ea37d 100644
--- a/framework/Wsat/TWsatBaseGenerator.php
+++ b/framework/Wsat/TWsatBaseGenerator.php
@@ -2,12 +2,12 @@
/**
* @author Daniel Sampedro Bello <darthdaniel85@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @since 3.3
- * @package Wsat
+ * @package System.Wsat
*/
Prado::using('System.Data.Common.TDbMetaData');
diff --git a/framework/Wsat/TWsatScaffoldingGenerator.php b/framework/Wsat/TWsatScaffoldingGenerator.php
index 9e1e17ad..1490f23e 100644
--- a/framework/Wsat/TWsatScaffoldingGenerator.php
+++ b/framework/Wsat/TWsatScaffoldingGenerator.php
@@ -2,12 +2,12 @@
/**
* @author Daniel Sampedro Bello <darthdaniel85@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @since 4.0
- * @package Wsat
+ * @package System.Wsat
*/
Prado::using("System.Wsat.TWsatBaseGenerator");
diff --git a/framework/Wsat/TWsatService.php b/framework/Wsat/TWsatService.php
index 3796bd48..0c33a499 100644
--- a/framework/Wsat/TWsatService.php
+++ b/framework/Wsat/TWsatService.php
@@ -2,12 +2,12 @@
/**
* @author Daniel Sampedro Bello <darthdaniel85@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @since 3.3
- * @package Wsat
+ * @package System.Wsat
*/
/**
diff --git a/framework/Wsat/pages/TWsatGenerateAR.php b/framework/Wsat/pages/TWsatGenerateAR.php
index 2e7bab06..1677a8ea 100644
--- a/framework/Wsat/pages/TWsatGenerateAR.php
+++ b/framework/Wsat/pages/TWsatGenerateAR.php
@@ -2,9 +2,9 @@
/**
* @author Daniel Sampedro Bello <darthdaniel85@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @since 3.3
* @package Wsat.pages
diff --git a/framework/Wsat/pages/TWsatHome.page b/framework/Wsat/pages/TWsatHome.page
index 2f65a541..3083a39c 100644
--- a/framework/Wsat/pages/TWsatHome.page
+++ b/framework/Wsat/pages/TWsatHome.page
@@ -13,6 +13,7 @@
Enables you to generate all Active Record Classes with relations included.
</td>
</tr>
+ <!---
<tr style="background-color: #cccccc">
<td style="padding: 5px; width: 100px">
<com:THyperLink NavigateUrl="<%= $this->Service->constructUrl('TWsatScaffolding') %>" Text="Scaffolding" />
@@ -21,5 +22,6 @@
Enables you to generate a completed CRUD based in DB tables. It allow to choose bootstrap for the view generation.
</td>
</tr>
+ --->
</table>
</com:TContent>
diff --git a/framework/Wsat/pages/TWsatHome.php b/framework/Wsat/pages/TWsatHome.php
index b4beb07c..6e1b72d9 100644
--- a/framework/Wsat/pages/TWsatHome.php
+++ b/framework/Wsat/pages/TWsatHome.php
@@ -2,9 +2,9 @@
/**
* @author Daniel Sampedro Bello <darthdaniel85@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @since 3.3
* @package Wsat.pages
diff --git a/framework/Wsat/pages/TWsatLogin.page b/framework/Wsat/pages/TWsatLogin.page
index 79578f59..6b9d8456 100644
--- a/framework/Wsat/pages/TWsatLogin.page
+++ b/framework/Wsat/pages/TWsatLogin.page
@@ -20,9 +20,8 @@
</div>
<div class="mainmenu">
- <div style="float: right"><com:THyperLink NavigateUrl="http://www.pradosoft.com/" Text="PradoSoft.com" Target="_blank" />&nbsp;|&nbsp;</div>
+ <div style="float: right"><com:THyperLink NavigateUrl="https://github.com/pradosoft/prado" Text="Prado framework" Target="_blank" />&nbsp;|&nbsp;</div>
<div style="float: right"><com:THyperLink NavigateUrl="<%= $this->Service->DefaultPageUrl %>" Text="Web App" Target="_blank" />&nbsp;|&nbsp;</div>
- <div style="float: right"><com:THyperLink NavigateUrl="http://www.pradosoft.com/forum/" Text="Help" Target="_blank" />&nbsp;|&nbsp;</div>
<div style="clear: both"></div>
</div>
@@ -36,7 +35,7 @@
</div>
<div id="footer">
- Copyright &copy; 2005-<%= date('Y') %> <a href="http://www.pradosoft.com">PradoSoft</a>.
+ Copyright &copy; 2005-<%= date('Y') %> <a href="https://github.com/pradosoft">The PRADO Group</a>.
<br/><br/>
<%= Prado::poweredByPrado() %>
</div>
diff --git a/framework/Wsat/pages/TWsatLogin.php b/framework/Wsat/pages/TWsatLogin.php
index 7aa90740..cfd4d560 100644
--- a/framework/Wsat/pages/TWsatLogin.php
+++ b/framework/Wsat/pages/TWsatLogin.php
@@ -2,9 +2,9 @@
/**
* @author Daniel Sampedro Bello <darthdaniel85@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @since 3.3
* @package Wsat.pages
diff --git a/framework/Wsat/pages/TWsatScaffolding.php b/framework/Wsat/pages/TWsatScaffolding.php
index aa7599ca..b4801745 100644
--- a/framework/Wsat/pages/TWsatScaffolding.php
+++ b/framework/Wsat/pages/TWsatScaffolding.php
@@ -2,9 +2,9 @@
/**
* @author Daniel Sampedro Bello <darthdaniel85@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @version $Id$
* @since 3.3
* @package Wsat.pages
@@ -47,7 +47,16 @@ class TWsatScaffolding extends TPage
{
$scf_generator = new TWsatScaffoldingGenerator();
$scf_generator->setOpFile($this->output_folder->Text);
- $scf_generator->generateCRUD("estudiante");
+ foreach ($scf_generator->getAllTableNames() as $tableName)
+ {
+ $id = "cb_$tableName";
+ $obj = $this->tableNames->findControl($id);
+ if($obj!==null && $obj->Checked)
+ {
+ $scf_generator->generateCRUD($tableName);
+ }
+ }
+
$this->feedback_panel->CssClass = "green_panel";
$this->generation_msg->Text = "The code has been generated successfully.";
} catch (Exception $ex)
diff --git a/framework/Wsat/pages/layout/TWsatLayout.tpl b/framework/Wsat/pages/layout/TWsatLayout.tpl
index d91ff333..36ec5bae 100644
--- a/framework/Wsat/pages/layout/TWsatLayout.tpl
+++ b/framework/Wsat/pages/layout/TWsatLayout.tpl
@@ -19,9 +19,8 @@
<div class="mainmenu">
<div style="float: right"><com:TLinkButton Text="Logout" OnClick="logout" /></div>
- <div style="float: right"><com:THyperLink NavigateUrl="http://www.pradosoft.com/" Text="PradoSoft.com" Target="_blank" />&nbsp;|&nbsp;</div>
+ <div style="float: right"><com:THyperLink NavigateUrl="https://github.com/pradosoft/prado" Text="Prado framework" Target="_blank" />&nbsp;|&nbsp;</div>
<div style="float: right"><com:THyperLink NavigateUrl="<%= $this->Service->DefaultPageUrl %>" Text="Web App" Target="_blank" />&nbsp;|&nbsp;</div>
- <div style="float: right"><com:THyperLink NavigateUrl="http://www.pradosoft.com/forum/" Text="Help" Target="_blank" />&nbsp;|&nbsp;</div>
<div style="clear: both"></div>
</div>
@@ -31,7 +30,9 @@
<div>Code Generation</div>
<ul>
<li><com:THyperLink NavigateUrl="<%= $this->Service->constructUrl('TWsatGenerateAR') %>" Text="AR Classes" /></li>
+ <!---
<li><com:THyperLink NavigateUrl="<%= $this->Service->constructUrl('TWsatScaffolding') %>" Text="Scaffolding" /></li>
+ --->
</ul>
</div>
</div>
@@ -44,7 +45,7 @@
</div>
<div id="footer">
- Copyright &copy; 2005-<%= date('Y') %> <a href="http://www.pradosoft.com">PradoSoft</a>.
+ Copyright &copy; 2005-<%= date('Y') %> <a href="https://github.com/pradosoft">The PRADO Group</a>.
<br/><br/>
<%= Prado::poweredByPrado() %>
</div>
diff --git a/framework/Wsat/themes/PradoSoft/imgs/pradologo.gif b/framework/Wsat/themes/PradoSoft/imgs/pradologo.gif
index 3b073b80..20ecf815 100644
--- a/framework/Wsat/themes/PradoSoft/imgs/pradologo.gif
+++ b/framework/Wsat/themes/PradoSoft/imgs/pradologo.gif
Binary files differ
diff --git a/framework/Xml/TXmlDocument.php b/framework/Xml/TXmlDocument.php
index 69017660..12f480d3 100644
--- a/framework/Xml/TXmlDocument.php
+++ b/framework/Xml/TXmlDocument.php
@@ -3,9 +3,9 @@
* TXmlElement, TXmlDocument, TXmlElementList class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System.Xml
*/
diff --git a/framework/interfaces.php b/framework/interfaces.php
index 1c2bbc19..0f0257dd 100644
--- a/framework/interfaces.php
+++ b/framework/interfaces.php
@@ -3,9 +3,9 @@
* Core interfaces essential for TApplication class.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System
*/
diff --git a/framework/prado.php b/framework/prado.php
index 1dd4bb47..e91b26cc 100644
--- a/framework/prado.php
+++ b/framework/prado.php
@@ -11,9 +11,9 @@
* loads a class file if the class is not defined.
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2014 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package System
*/
diff --git a/framework/pradolite.php b/framework/pradolite.php
index fcf73364..bdbf1137 100644
--- a/framework/pradolite.php
+++ b/framework/pradolite.php
@@ -1,7 +1,7 @@
<?php
/**
* File Name: pradolite.php
- * Last Update: 2014/02/02 21:38:53
+ * Last Update: 2015/12/07 15:35:09
* Generated By: buildscripts/phpbuilder/build.php
*
* This file is used in lieu of prado.php to boost PRADO application performance.
@@ -25,7 +25,7 @@ class PradoBase
protected static $classExists = array();
public static function getVersion()
{
- return '3.2.3';
+ return '3.3.0';
}
public static function initErrorHandlers()
{
@@ -47,8 +47,8 @@ class PradoBase
$url=$am->publishFilePath(self::getPathOfNamespace('System.'.$logoName,'.gif'));
}
else
- $url='http://www.pradosoft.com/images/'.$logoName.'.gif';
- return '<a title="Powered by PRADO" href="http://www.pradosoft.com/" target="_blank"><img src="'.$url.'" style="border-width:0px;" alt="Powered by PRADO" /></a>';
+ $url='http://pradosoft.github.io/docs/'.$logoName.'.gif';
+ return '<a title="Powered by PRADO" href="https://github.com/pradosoft/prado" target="_blank"><img src="'.$url.'" style="border-width:0px;" alt="Powered by PRADO" /></a>';
}
public static function phpErrorHandler($errno,$errstr,$errfile,$errline)
{
@@ -587,7 +587,7 @@ class TErrorHandler extends TModule
$isDebug = $this->getApplication()->getMode()===TApplicationMode::Debug;
$errorMessage = $exception->getMessage();
if($isDebug)
- $version=$_SERVER['SERVER_SOFTWARE'].' <a href="http://www.pradosoft.com/">PRADO</a>/'.Prado::getVersion();
+ $version=$_SERVER['SERVER_SOFTWARE'].' <a href="https://github.com/pradosoft/prado">PRADO</a>/'.Prado::getVersion();
else
{
$version='';
@@ -600,18 +600,7 @@ class TErrorHandler extends TModule
'%%Version%%' => $version,
'%%Time%%' => @strftime('%Y-%m-%d %H:%M',time())
);
- $CGI=substr(php_sapi_name(), 0, 3) == 'cgi'; if($isDebug)
- {
- if ($CGI)
- header("Status: $statusCode ".$exception->getMessage(), true, TPropertyValue::ensureInteger($statusCode));
- else
- header("HTTP/1.0 $statusCode ".$exception->getMessage(), true, TPropertyValue::ensureInteger($statusCode));
- } else {
- if ($CGI)
- header("Status: $statusCode", true, TPropertyValue::ensureInteger($statusCode));
- else
- header("HTTP/1.0 $statusCode", true, TPropertyValue::ensureInteger($statusCode));
- }
+ $this->getApplication()->getResponse()->setStatusCode($statusCode, $isDebug ? $exception->getMessage() : null);
echo strtr($content,$tokens);
}
protected function handleRecursiveError($exception)
@@ -661,7 +650,7 @@ class TErrorHandler extends TModule
$source=$this->getSourceCode(@file($fileName),$errorLine);
}
if($this->getApplication()->getMode()===TApplicationMode::Debug)
- $version=$_SERVER['SERVER_SOFTWARE'].' <a href="http://www.pradosoft.com/">PRADO</a>/'.Prado::getVersion();
+ $version=$_SERVER['SERVER_SOFTWARE'].' <a href="https://github.com/pradosoft/prado">PRADO</a>/'.Prado::getVersion();
else
$version='';
$tokens=array(
@@ -748,7 +737,7 @@ class TErrorHandler extends TModule
}
private function addLink($message)
{
- $baseUrl='http://www.pradosoft.com/docs/classdoc';
+ $baseUrl='http://pradosoft.github.io/docs/manual/class-';
return preg_replace('/\b(T[A-Z]\w+)\b/',"<a href=\"$baseUrl/\${1}\" target=\"_blank\">\${1}</a>",$message);
}
}
@@ -2385,7 +2374,7 @@ class TXmlDocument extends TXmlElement
{
return $this->saveToString();
}
- private function buildElement($node)
+ protected function buildElement($node)
{
$element=new TXmlElement($node->tagName);
$element->setValue($node->nodeValue);
@@ -2894,14 +2883,23 @@ class TJavaScript
}
public static function jsonEncode($value, $options = 0)
{
- if (is_string($value) &&
- ($g=Prado::getApplication()->getGlobalization(false))!==null &&
- strtoupper($enc=$g->getCharset())!='UTF-8')
- $value=iconv($enc, 'UTF-8', $value);
+ if (($g=Prado::getApplication()->getGlobalization(false))!==null &&
+ strtoupper($enc=$g->getCharset())!='UTF-8') {
+ self::convertToUtf8($value, $enc);
+ }
$s = @json_encode($value,$options);
self::checkJsonError();
return $s;
}
+ private static function convertToUtf8(&$value, $sourceEncoding) {
+ if(is_string($value))
+ $value=iconv($sourceEncoding, 'UTF-8', $value);
+ else if (is_array($value))
+ {
+ foreach($value as &$element)
+ self::convertToUtf8($element, $sourceEncoding);
+ }
+ }
public static function jsonDecode($value, $assoc = false, $depth = 512)
{
$s= @json_decode($value, $assoc, $depth);
@@ -3951,10 +3949,12 @@ class THttpResponse extends TModule implements ITextWriter
}
protected function sendHttpHeader()
{
- if (($version=$this->getRequest()->getHttpProtocolVersion())==='')
- header (' ', true, $this->_status);
- else
- header($version.' '.$this->_status.' '.$this->_reason, true, $this->_status);
+ $protocol=$this->getRequest()->getHttpProtocolVersion();
+ if($this->getRequest()->getHttpProtocolVersion() === null)
+ $protocol='HTTP/1.1';
+ $phpSapiName = substr(php_sapi_name(), 0, 3);
+ $cgi = $phpSapiName == 'cgi' || $phpSapiName == 'fpm';
+ header(($cgi ? 'Status:' : $protocol).' '.$this->_status.' '.$this->_reason, true, TPropertyValue::ensureInteger($this->_status));
$this->_httpHeaderSent = true;
}
protected function ensureContentTypeHeaderSent()
@@ -4103,7 +4103,7 @@ class THttpSession extends TApplicationComponent implements IteratorAggregate,Ar
if($this->_customStorage)
session_set_save_handler(array($this,'_open'),array($this,'_close'),array($this,'_read'),array($this,'_write'),array($this,'_destroy'),array($this,'_gc'));
if($this->_cookie!==null)
- session_set_cookie_params($this->_cookie->getExpire(),$this->_cookie->getPath(),$this->_cookie->getDomain(),$this->_cookie->getSecure());
+ session_set_cookie_params($this->_cookie->getExpire(),$this->_cookie->getPath(),$this->_cookie->getDomain(),$this->_cookie->getSecure(),$this->_cookie->getHttpOnly());
if(ini_get('session.auto_start')!=='1')
session_start();
$this->_started=true;
@@ -4202,8 +4202,11 @@ class THttpSession extends TApplicationComponent implements IteratorAggregate,Ar
else
{
$value=TPropertyValue::ensureEnum($value,'THttpSessionCookieMode');
- if($value===THttpSessionCookieMode::None)
+ if($value===THttpSessionCookieMode::None)
+ {
ini_set('session.use_cookies','0');
+ ini_set('session.use_only_cookies','0');
+ }
else if($value===THttpSessionCookieMode::Allow)
{
ini_set('session.use_cookies','1');
@@ -4536,9 +4539,6 @@ class TControl extends TApplicationComponent implements IRenderable, IBindable
private $_stage=0;
private $_flags=0;
private $_rf=array();
- public function __construct()
- {
- }
public function __get($name)
{
if(isset($this->_rf[self::RF_NAMED_OBJECTS][$name]))
@@ -5536,6 +5536,7 @@ interface IButtonControl
}
interface ISurroundable
{
+ public function getSurroundingTag();
public function getSurroundingTagID();
}
class TBroadcastEventParameter extends TEventParameter
@@ -6804,6 +6805,77 @@ class TTemplateControl extends TCompositeControl
throw new TConfigurationException('templatecontrol_mastercontrol_required',get_class($this));
parent::initRecursive($namingContainer);
}
+ public function tryToUpdateView($arObj, $throwExceptions = false)
+ {
+ $objAttrs = get_class_vars(get_class($arObj));
+ foreach (array_keys($objAttrs) as $key)
+ {
+ try
+ {
+ if ($key != "RELATIONS")
+ {
+ $control = $this->{$key};
+ if ($control instanceof TTextBox)
+ $control->Text = $arObj->{$key};
+ elseif ($control instanceof TCheckBox)
+ $control->Checked = (boolean) $arObj->{$key};
+ elseif ($control instanceof TDatePicker)
+ $control->Date = $arObj->{$key};
+ }
+ else
+ {
+ foreach ($objAttrs["RELATIONS"] as $relKey => $relValues)
+ {
+ $relControl = $this->{$relKey};
+ switch ($relValues[0])
+ {
+ case TActiveRecord::BELONGS_TO:
+ case TActiveRecord::HAS_ONE:
+ $relControl->Text = $arObj->{$relKey};
+ break;
+ case TActiveRecord::HAS_MANY:
+ if ($relControl instanceof TListControl)
+ {
+ $relControl->DataSource = $arObj->{$relKey};
+ $relControl->dataBind();
+ }
+ break;
+ }
+ }
+ break;
+ }
+ }
+ catch (Exception $ex)
+ {
+ if ($throwExceptions)
+ throw $ex;
+ }
+ }
+ }
+ public function tryToUpdateAR($arObj, $throwExceptions = false)
+ {
+ $objAttrs = get_class_vars(get_class($arObj));
+ foreach (array_keys($objAttrs) as $key)
+ {
+ try
+ {
+ if ($key == "RELATIONS")
+ break;
+ $control = $this->{$key};
+ if ($control instanceof TTextBox)
+ $arObj->{$key} = $control->Text;
+ elseif ($control instanceof TCheckBox)
+ $arObj->{$key} = $control->Checked;
+ elseif ($control instanceof TDatePicker)
+ $arObj->{$key} = $control->Date;
+ }
+ catch (Exception $ex)
+ {
+ if ($throwExceptions)
+ throw $ex;
+ }
+ }
+ }
}
class TForm extends TControl
{
@@ -7078,7 +7150,7 @@ class TClientScriptManager extends TApplicationComponent
$this->registerPradoScriptInternal('jquery');
if($target instanceof TControl)
$target=$target->getClientID();
- $this->_endScripts['prado:focus'] = 'new Prado.Element.scrollTo(\''.$target.'\'); jQuery(\'#'.$target.'\').focus();';
+ $this->_endScripts['prado:focus'] = 'jQuery(\'#'.$target.'\').focus();';
$params=func_get_args();
$this->_page->registerCachingAction('Page.ClientScript','registerFocusControl',$params);
}
@@ -8944,7 +9016,7 @@ class TTemplate extends TApplicationComponent implements ITemplate
}
else
{
- if (! ($class->hasMethod('set'.$name) || $class->hasMethod('setjs'.$name)) )
+ if (! ($class->hasMethod('set'.$name) || $class->hasMethod('setjs'.$name) || $this->isClassBehaviorMethod($class,'set'.$name)) )
{
if ($class->hasMethod('get'.$name) || $class->hasMethod('getjs'.$name))
throw new TConfigurationException('template_property_readonly',$type,$name);
@@ -8977,7 +9049,7 @@ class TTemplate extends TApplicationComponent implements ITemplate
throw new TConfigurationException('template_event_forbidden',$type,$name);
else
{
- if(strcasecmp($name,'id')!==0 && !$class->hasMethod('set'.$name))
+ if(strcasecmp($name,'id')!==0 && !($class->hasMethod('set'.$name) || $this->isClassBehaviorMethod($class,'set'.$name)))
{
if($class->hasMethod('get'.$name))
throw new TConfigurationException('template_property_readonly',$type,$name);
@@ -9050,6 +9122,23 @@ class TTemplate extends TApplicationComponent implements ITemplate
}
return $input;
}
+ protected function isClassBehaviorMethod(ReflectionClass $class,$method)
+ {
+ $component=new ReflectionClass('TComponent');
+ $behaviors=$component->getStaticProperties();
+ if(!isset($behaviors['_um']))
+ return false;
+ foreach($behaviors['_um'] as $name=>$list)
+ {
+ if(strtolower($class->getShortName())!==$name && !$class->isSubclassOf($name)) continue;
+ foreach($list as $param)
+ {
+ if(method_exists($param->getBehavior(),$method))
+ return true;
+ }
+ }
+ return false;
+ }
}
class TThemeManager extends TModule
{
@@ -9589,7 +9678,7 @@ class TPageService extends TService
}
if(!class_exists($className,false) || ($className!=='TPage' && !is_subclass_of($className,'TPage')))
throw new THttpException(404,'pageservice_page_unknown',$pagePath);
- $page=new $className;
+ $page=Prado::createComponent($className);
$page->setPagePath($pagePath);
if($hasTemplateFile)
$page->setTemplate($this->getTemplateManager()->getTemplateByFileName($path.self::PAGE_FILE_EXT));
diff --git a/index.html b/index.html
index 4fb55fcf..a6dc9c7c 100644
--- a/index.html
+++ b/index.html
@@ -8,8 +8,8 @@
<body>
<h1>PRADO Framework for PHP 5 </h1>
-<p>Version 3.2.3<br>
-Copyright&copy; 2004-2014 by <a href="http://www.pradosoft.com/">Prado Software</a><br>
+<p>Version 3.3.0<br>
+Copyright&copy; 2004-2015 by <a href="https://github.com/pradosoft">The PRADO Group</a><br>
All Rights Reserved.
</p>
@@ -31,7 +31,7 @@ Developers who have sufficient OOP experience will find PRADO is easy to learn a
The sole requirement for PRADO is PHP 5.3.3 or higher. Please run <a href="requirements/index.php">requirement checker</a> to obtain more detailed requirement information.
</p>
<p>
-PRADO has been tested with Apache 2.2 on both Windows XP, various Linux flavours and Mac OSX.
+PRADO has been tested with Apache on both Windows XP, various Linux flavours and Mac OSX.
</p>
<h2>Installation</h2>
@@ -86,10 +86,11 @@ A Textmate extension can be found under <b>editors/Textmate</b>.
<h3>Prado v3 Developer Team</h3>
<ul>
-<li><a href="mailto:Christophe.Boulain@gmail.com">Christophe Boulain</a></li>
-<li><a href="mailto:ctrlaltca@gmail.com">Fabio Bas</a></li>
-<li><a href="mailto:rojaro@gmail.com">Robin J. Rogge</a></li>
<li><a href="mailto:ciromattia@gmail.com">Ciro Mattia Gonano</a></li>
+<li><a href="mailto:darthdaniel85@gmail.com">Daniel Sampedro</a></li>
+<li>David Otto</li>
+<li><a href="mailto:ctrlaltca@gmail.com">Fabio Bas</a></li>
+<li>Jens Klaer</li>
</ul>
<h4>The following Team Members are currently inactive</h4>
@@ -103,6 +104,8 @@ A Textmate extension can be found under <b>editors/Textmate</b>.
<li><a href="mailto:eirikhm@gmail.com">Eirik Hoem</a></li>
<li><a href="mailto:godzilla80@gmx.net">Yves Berkholz</a></li>
<li><a href="mailto:kamikazeole@gmail.com">Ole Helgesen</a></li>
+<li><a href="mailto:rojaro@gmail.com">Robin J. Rogge</a></li>
+<li><a href="mailto:Christophe.Boulain@gmail.com">Christophe Boulain</a></li>
</ul>
<h3>Translations</h3>
@@ -152,7 +155,7 @@ The PRADO framework and the included demos are free software. They are released
the terms of the following BSD License.
</p>
<p>
-Copyright 2004-2014 by The PRADO Group (http://www.pradosoft.com)<br/>
+Copyright 2004-2015 by The PRADO Group (https://github.com/pradosoft)<br/>
All rights reserved.
</p>
<p>
diff --git a/jQuery-WIP.txt b/jQuery-WIP.txt
deleted file mode 100644
index 7e7a5056..00000000
--- a/jQuery-WIP.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-Targets:
-
- * Import jQuery as a prado js package (done)
- * Basic class/inheritance support to replace prototype's Class.create (done, using lowpro)
- * Glue prado PostBack/PostbackControl/Registry to jQuery (done)
- * port standard controls (done)
- * port features (defaultbutton, validators) (done)
- * port Prado.Element's functions (replace, setStyle, ..) (done)
- * port Effects (done)
- * port basic active controls (done)
- * create substitutes for exotic standard controls (date picker, accordion, colorpicker, slider, ..) (done)
- * port exotic active controls (done)
- * get tests running (wip)
- * ensure jQuery's compatibility mode with prototype (support old third party components from users? (done)
- * fix debug components (TJavascriptLogger) (done, but maybe dropping it is a good idea)
- * implement some Jui components (deprecate old scriptculous, create substituted based on jquery-ui) (wip)
- * port demos using javascript
- * add demos for new controls (wip)
- * document everything (wip)
-
-DONE
-Basic postback controls (TButton, TCheckBox, TLinkButton, TRadioButton, TTextBox, ..)
-Js-based controls (TTabPanel, TDatePicker, TColorPicker, TSlider, THtmlArea, TAccordion, TRatingList)
-List, Data controls
-*Validators
-Ajax queue
-Basic callback controls (TActive*, TInPlaceTextBox)
-jQuery-UI interactions
-
-WIP
-TJuiAutoComplete
-Add JQuery-ui-Effects: clip, explode, transfer, switchclass
-Add JQuery-ui-Methods: show, hide, toggle?
-Add JQuery-ui-controls
diff --git a/requirements/index.php b/requirements/index.php
index 2fd392ba..85bb1604 100644
--- a/requirements/index.php
+++ b/requirements/index.php
@@ -3,9 +3,9 @@
* PRADO Requirements Checker script
*
* @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005 PradoSoft
- * @license http://www.pradosoft.com/license/
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
* @package prado
*/
@@ -190,7 +190,7 @@ else
$tokens = array(
'%%Conclusion%%' => $conclusion,
'%%Details%%' => $results,
- '%%Version%%' => $_SERVER['SERVER_SOFTWARE'].' <a href="http://www.pradosoft.com/">PRADO</a>/'.getPradoVersion(),
+ '%%Version%%' => $_SERVER['SERVER_SOFTWARE'].' <a href="https://github.com/pradosoft/prado">PRADO</a>/'.getPradoVersion(),
'%%Time%%' => @strftime('%Y-%m-%d %H:%m',time()),
);
diff --git a/requirements/messages-bg.txt b/requirements/messages-bg.txt
deleted file mode 100644
index 62de0eed..00000000
--- a/requirements/messages-bg.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-all passed = Поздравления! Конфигурацията на вашия сървър удовлетворява всички изисквания на PRADO.
-passed with warnings = Конфигурацията на вашия сървър удовлетворява минималните изисквания на PRADO. Моля, обърнете внимание на предупрежденията по-долу.
-failed = За съжаление, вашият сървър не удовлетворява изискванията на PRADO.
-PHP version check = Проверка за версията на PHP
-PHP 5.2.0 or higher required = Изисква се PHP 5.2.0 или по-висока версия.
-SQLite extension check = Проверка за SQLite
-SQLite extension optional = SQLite разширението е незадължително. Ако не е заредено, няма да можете да ползвате TSqliteCache.
-Memcache extension check = Проверка за Memcache
-Memcache extension optional = Memcache разширението е незадължително. Ако не е заредено, няма да можете да ползвате TMemCache.
-APC extension check = Проверка за APC cache
-APC extension optional = APC разширението е незадължително. Ако не е заредено, няма да можете да ползвате TAPCCache.
-Zlib extension check = Проверка за Zlib
-Zlib extension optional = Zlib разширението е незадължително. Ако не е заредено, състоянието на страницата няма да бъде компресирано и размера на страницата може да се увеличи.
-Reflection extension check = Проверка за Reflection разширението
-Reflection extension required = Reflection разширението е задължително за PRADO.
-DOM extension check = Проверка за DOM разширението
-DOM extension required = DOM разширението е задължително за PRADO. Използва се в TXmlDocument за анализ на XML-базирани конфигурации.
-ICONV extension check = Проверка за ICONV разширението
-ICONV extension optional = ICONV разширението е незадължително. Ако не е заредено, е възможно някои компоненти свързани с интернационализацията да не работят коректно.
-Mcrypt extension check = Проверка за Mcrypt
-Mcrypt extension optional = Mcrypt разширението е незадължително. Ако не е заредено, чувствителни данни като viewstate, няма да могат да бъдат криптирани.
-$_SERVER["HTTP_ACCEPT"] check = Проверка за $_SERVER["HTTP_ACCEPT"]
-HTTP_ACCEPT required = $_SERVER["HTTP_ACCEPT"] е задължително за многоезиковата поддръжка.
-$_SERVER["SCRIPT_FILENAME"] check = Проверка за $_SERVER["SCRIPT_FILENAME"]
-SCRIPT_FILENAME required = $_SERVER["SCRIPT_FILENAME"] трябва да указва файловия път до този проверовъчен скрипт.
-$_SERVER["REQUEST_URI"] check = Проверка за $_SERVER["REQUEST_URI"]
-REQUEST_URI required = $_SERVER["REQUEST_URI"] или $_SERVER["QUERY_STRING"] трябва да е достъпен за да е възможно анализирането на потребителските заявки.
-$_SERVER["PATH_INFO"] check = Проверка за $_SERVER["PATH_INFO"]
-PATH_INFO required = $_SERVER["PATH_INFO"] или $_SERVER["PHP_SELF"] и $_SERVER["SCRIPT_NAME"] се изискват за да се определи URL информацията за пътя.
-SPL extension check = Проверка за SPL разширението
-SPL extension required = DOM разширението е задължително за PRADO.
-CType extension check = Проверка за CType разширението
-CType extension required = CType разширението е задължително за PRADO.
-PCRE extension check = Проверка за PCRE разширението
-PCRE extension required = PCRE разширението е задължително за PRADO.
diff --git a/requirements/messages-id.txt b/requirements/messages-id.txt
deleted file mode 100644
index 96a74a60..00000000
--- a/requirements/messages-id.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-all passed = Selamat! konfigurasi server anda memenuhi semua persyaratan PRADO.
-passed with warnings = Konfigurasi server anda memenuhi persyaratan minimum PRADO. Silahkan perhatikan peringatan yang didaftarkan di bawah.
-failed = Maaf, konfigurasi server anda tidak memenuhi persyaratan PRADO.
-PHP version check = pemeriksaan versi PHP
-PHP 5.2.0 or higher required = PHP versi 5.2.0 atau lebih tinggi diperlukan oleh PRADO.
-SQLite extension check = Pemeriksaan ekstensi SQLite
-SQLite extension optional = Ekstensi SQLite adalah opsional. Jika tidak ada, anda tidak akan bisa menggunakan TSqliteCache.
-Memcache extension check = Pemeriksaan ekstensi Memcache
-Memcache extension optional = Ekstensi Memcache adalah opsional. Jika tidak ada, anda tidak akan bisa menggunakan TMemCache.
-APC extension check = Pemeriksaan ekstensi APC
-APC extension optional = Ekstensi APC adalah opsional. Jika tidak ada, anda tidak akan bisa menggunakan TAPCCache.
-Zlib extension check = Pemeriksaan ekstensi Zlib
-Zlib extension optional = Ekstensi Zlib adalah opsional. Jika tidak ada, halaman tidak akan dikompresi dan besar halaman anda bisa bertambah.
-Reflection extension check = Pemeriksaan ekstensi Reflection
-Reflection extension required = Ekstensi Reflection diperlukan oleh PRADO. Ia dipakai oleh PRADO untuk memeriksa validitas template halaman.
-DOM extension check = Pemeriksaan ekstensi DOM
-DOM extension required = Ekstensi DOM diperlukan oleh PRADO. Ia dipakai dalam TXmlDocument untuk mengurai semua konfigurasi berbasis-XML.
-ICONV extension check = Pemeriksaan ekstensi ICONV
-ICONV extension optional = Ekstensi ICONV adalah opsional. Jika tidak ada, beberapa komponen internasionalisasi mungkin tidak bekerja.
-Mcrypt extension check = Pemeriksaan ekstensi Mcrypt
-Mcrypt extension optional = Ekstensi Mcrypt adalah opsional. Jika tidak ada, data sensitif, seperti viewstate, tidak bisa dienkripsi.
-XSL extension check = Pemeriksaan ekstensi XSL
-XSL extension optional = Ekstensi XSL adalah opsional. Jika tidak ada, anda tidak akan bisa menggunakan TXmlTransform.
-$_SERVER["HTTP_ACCEPT"] check = Pemeriksaan $_SERVER["HTTP_ACCEPT"]
-HTTP_ACCEPT required = $_SERVER["HTTP_ACCEPT"] diperlukan oleh dukungan multi bahasa.
-$_SERVER["SCRIPT_FILENAME"] check = Pemeriksaan $_SERVER["SCRIPT_FILENAME"]
-SCRIPT_FILENAME required = $_SERVER["SCRIPT_FILENAME"] harus merujuk ke path file dari naskah pemeriksa ini.
-$_SERVER["REQUEST_URI"] check = Pemeriksaan $_SERVER["REQUEST_URI"]
-REQUEST_URI required = Baik $_SERVER["REQUEST_URI"] ataupun $_SERVER["QUERY_STRING"] harus tersedia untuk menetapkan permintaan pengguna.
-$_SERVER["PATH_INFO"] check = Pemeriksaan $_SERVER["PATH_INFO"]
-PATH_INFO required = $_SERVER["PATH_INFO"] atau $_SERVER["PHP_SELF"] dan $_SERVER["SCRIPT_NAME"] diperlukan untuk menentukan info path URL.
-SPL extension check = Pemeriksaan ekstensi SPL
-SPL extension required = Ekstensi SPL diperlukan oleh PRADO.
-CType extension check = Pemeriksaan ekstensi CType
-CType extension required = Ekstensi CType diperlukan oleh PRADO.
-PCRE extension check = Pemeriksaan ekstensi PCRE
-PCRE extension required = Ekstensi PCRE diperlukan oleh PRADO.
-PDO extension check = Pemeriksaan ekstensi PDO
-PDO extension optional = Ekstensi PDO adalah opsional. Jika tidak ada, anda tidak akan bisa menggunakan komponen System.Data.*.
-SOAP extension check = Pemeriksaan ekstensi SOAP
-SOAP extension optional = Ekstensi SOAP adalah opsional. Jika tidak ada, anda tidak akan bisa menggunakan TSoapService. \ No newline at end of file
diff --git a/requirements/messages-zh.txt b/requirements/messages-zh.txt
deleted file mode 100644
index 6151da17..00000000
--- a/requirements/messages-zh.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-all passed = 恭喜!您的服务器配置完全符合PRADO的要求。
-passed with warnings = 您的服务器配置符合PRADO的最低要求。请关注以下的警告信息。
-failed = 对不起,您的服务器配置不符合PRADO的要求。
-PHP version check = PHP版本检查
-PHP 5.2.0 or higher required = PRADO需要PHP 5.2.0或更高版本。
-SQLite extension check = SQLite模块检查
-SQLite extension optional = SQLite模块是可选的。如果它不存在,您将无法使用TSQLiteCache。
-Memcache extension check = Memcache模块检查
-Memcache extension optional = Memcache模块是可选的。如果它不存在,您将无法使用TMemCache。
-APC extension check = APC缓存模块检查
-APC extension optional = APC模块是可选的。如果它不存在,您将无法使用TAPCCache。
-Zlib extension check = Zlib模块检查
-Zlib extension optional = Zlib模块是可选的。如果它不存在,页面的状态信息将无法压缩,由此可能导致您的页面传送数据量增大。
-Reflection extension check = Reflection模块检查
-Reflection extension required = Reflection模块是必须的。如果它不存在,PRADO将无法验证控件模板的正确性。
-DOM extension check = DOM模块检查
-DOM extension required = DOM模块是必须的。如果它不存在,基于XML的各种配置文件将无法解析。
-ICONV extension check = ICONV模块检查
-ICONV extension optional = ICONV模块是可选的。如果它不存在,某些国际化控件将无法正常工作。
-Mcrypt extension check = Mcrypt模块检查
-Mcrypt extension optional = Mcrypt模块是可选的。如果它不存在,某些敏感数据,例如viewstate,将无法被加密。
-XSL extension check = XSL模块检查
-XSL extension optional = XSL模块是可选的。如果它不存在,您将无法使用TXmlTransform。
-$_SERVER["HTTP_ACCEPT"] check = $_SERVER["HTTP_ACCEPT"]检查
-HTTP_ACCEPT required = $_SERVER["HTTP_ACCEPT"]是必须的。如果它不存在,一些多语言功能可能出错。
-$_SERVER["SCRIPT_FILENAME"] check = $_SERVER["SCRIPT_FILENAME"]检查
-SCRIPT_FILENAME required = $_SERVER["SCRIPT_FILENAME"]必须指向本程序文件路径。
-$_SERVER["REQUEST_URI"] check = $_SERVER["REQUEST_URI"]检查
-REQUEST_URI required = $_SERVER["REQUEST_URI"]或$_SERVER["QUERY_STRING"]是必须的。如果它们都不存在,用户请求将无法被正确解析。
-$_SERVER["PATH_INFO"] check = $_SERVER["PATH_INFO"]检查
-PATH_INFO required = $_SERVER["PATH_INFO"]或$_SERVER["PHP_SELF"]和$_SERVER["SCRIPT_NAME"]是必须的。如果它们都不存在,URL的pathinfo将无法被正确解析。
-SPL extension check = SPL模块检查
-SPL extension required = SPL模块是必须的。
-CType extension check = CType模块检查
-CType extension required = CType模块是必须的。
-PCRE extension check = PCRE模块检查
-PCRE extension required = PCRE模块是必须的。
-PDO extension check = PDO模块检查
-PDO extension optional = PDO模块是可选的。如果它不存在,您将无法使用System.Data.*里的组件。
-SOAP extension check = SOAP模块检查
-SOAP extension optional = SOAP模块是可选的。如果它不存在,您将无法使用TSoapService。
diff --git a/requirements/template-bg.html b/requirements/template-bg.html
deleted file mode 100644
index a12934b3..00000000
--- a/requirements/template-bg.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<meta http-equiv="content-language" content="bg"/>
-<title>Проверка за изискванията на PRADO</title>
-<style>
-body {font-family:"Verdana";font-weight:normal;color:black;}
-h1 { font-family:"Verdana";font-weight:normal;font-size:18pt; }
-h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
-p, td {font-family:"Verdana";font-weight:normal;font-size:10pt;}
-table.result {border-collapse: collapse; width: 100%; font-size: 10pt; font-family:"Verdana";}
-td.passed {background-color: #60BF60;border: 1px solid silver; padding: 2px;}
-td.warning {background-color: #FFFFBF;border: 1px solid silver; padding: 2px;}
-td.error {background-color: #FF8080;border: 1px solid silver; padding: 2px;}
-.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
-</style>
-</head>
-
-<body bgcolor="white">
-<h1>Проверка за изискванията на PRADO</h1>
-<h3>Описание</h3>
-<p>
-Този скрипт проверява дали конфигурацията на вашият сървър отговаря на изискванията
-за приложения базирани на <a href="http://www.pradosoft.com/">PRADO</a>.
-Проверява дали на сървъра е инсталирана подходяща версия на PHP,
-дали са заредени нужните разширения на PHP и дали има направени необходимите
-настройки в php.ini.
-</p>
-<h3>Заключение</h3>
-<p>
-%%Conclusion%%
-</p>
-<h3>Детайли</h3>
-</p>
-%%Details%%
-</p>
-<p>
-<table>
-<tr>
-<td class="passed">&nbsp;</td><td>успешна</td>
-<td class="error">&nbsp;</td><td>неуспешна</td>
-<td class="warning">&nbsp;</td><td>предупреждение</td>
-</tr>
-</table>
-</p>
-<div class="version">
-%%Time%% %%Version%%
-</div>
-</body>
-</html> \ No newline at end of file
diff --git a/requirements/template-id.html b/requirements/template-id.html
deleted file mode 100644
index e61406f8..00000000
--- a/requirements/template-id.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<meta http-equiv="content-language" content="en"/>
-<title>Pemeriksa Persyaratan PRADO</title>
-<style>
-body {font-family:"Verdana";font-weight:normal;color:black;}
-h1 { font-family:"Verdana";font-weight:normal;font-size:18pt; }
-h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
-p, td {font-family:"Verdana";font-weight:normal;font-size:10pt;}
-table.result {border-collapse: collapse; width: 100%; font-size: 10pt; font-family:"Verdana";}
-td.passed {background-color: #60BF60;border: 1px solid silver; padding: 2px;}
-td.warning {background-color: #FFFFBF;border: 1px solid silver; padding: 2px;}
-td.error {background-color: #FF8080;border: 1px solid silver; padding: 2px;}
-.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
-</style>
-</head>
-
-<body bgcolor="white">
-<h1>Pemeriksa Persyaratan PRADO</h1>
-<h3>Deskripsi</h3>
-<p>
-Naskah ini memeriksa apakah konfigurasi server anda memenuhi persyaratan untuk
-menjalankan aplikasi <a href="http://www.pradosoft.com/">PRADO</a>-powered.
-Ia memeriksa apakah server menjalankan versi PHP yang sudah benar,
-apakah ekstensi PHP yang sesuai sudah diaktifkan, dan apakah setelan file php.ini sudah benar.
-</p>
-<h3>Kesimpulan</h3>
-<p>
-%%Conclusion%%
-</p>
-<h3>Perincian</h3>
-</p>
-%%Details%%
-</p>
-<p>
-<table>
-<tr>
-<td class="passed">&nbsp;</td><td>lulus</td>
-<td class="error">&nbsp;</td><td>gagal</td>
-<td class="warning">&nbsp;</td><td>peringatan</td>
-</tr>
-</table>
-</p>
-<div class="version">
-%%Time%% %%Version%%
-</div>
-</body>
-</html> \ No newline at end of file
diff --git a/requirements/template-zh.html b/requirements/template-zh.html
deleted file mode 100644
index cbd80a60..00000000
--- a/requirements/template-zh.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<meta http-equiv="content-language" content="en"/>
-<title>PRADO配置需求检查</title>
-<style>
-body {font-family:"Verdana";font-weight:normal;color:black;}
-h1 { font-family:"Verdana";font-weight:normal;font-size:18pt; }
-h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
-p, td {font-family:"Verdana";font-weight:normal;font-size:10pt;}
-table.result {border-collapse: collapse; width: 100%; font-size: 10pt; font-family:"Verdana";}
-td.passed {background-color: #60BF60;border: 1px solid silver; padding: 2px;}
-td.warning {background-color: #FFFFBF;border: 1px solid silver; padding: 2px;}
-td.error {background-color: #FF8080;border: 1px solid silver; padding: 2px;}
-.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
-</style>
-</head>
-
-<body bgcolor="white">
-<h1>PRADO配置需求检查</h1>
-<h3>检查说明</h3>
-<p>
-本页面用于检查您的服务器配置是否达到运行<a href="http://www.pradosoft.com/">PRADO</a>应用程序所需的标准。
-它将检查服务器运行的PHP版本,PHP加载的模块,以及php.ini文件中的一些设置。
-</p>
-<h3>检查结果</h3>
-<p>
-%%Conclusion%%
-</p>
-<h3>具体情况</h3>
-</p>
-%%Details%%
-</p>
-<p>
-<table>
-<tr>
-<td class="passed">&nbsp;</td><td>通过</td>
-<td class="error">&nbsp;</td><td>失败</td>
-<td class="warning">&nbsp;</td><td>警告</td>
-</tr>
-</table>
-</p>
-<div class="version">
-%%Time%% %%Version%%
-
-</div>
-</body>
-</html> \ No newline at end of file
diff --git a/requirements/template.html b/requirements/template.html
index 9de211f2..a7cb9c05 100644
--- a/requirements/template.html
+++ b/requirements/template.html
@@ -21,7 +21,7 @@ td.error {background-color: #FF8080;border: 1px solid silver; padding: 2px;}
<h3>Description</h3>
<p>
This script checks if your server configuration meets the requirements
-for running <a href="http://www.pradosoft.com/">PRADO</a>-powered applications.
+for running <a href="https://github.com/pradosoft/prado">PRADO</a>-powered applications.
It checks if the server is running the right version of PHP,
if appropriate PHP extensions have been loaded, and if php.ini file settings are correct.
</p>
diff --git a/tests/FunctionalTests/active-controls/protected/pages/ActiveHyperLinkTest.page b/tests/FunctionalTests/active-controls/protected/pages/ActiveHyperLinkTest.page
index 9b149b45..b2aefc3b 100755
--- a/tests/FunctionalTests/active-controls/protected/pages/ActiveHyperLinkTest.page
+++ b/tests/FunctionalTests/active-controls/protected/pages/ActiveHyperLinkTest.page
@@ -2,7 +2,7 @@
<h1>Active HyperLink Test Case</h1>
<div style="margin:1em; padding:1em; border:1px solid #ccc; text-align:center;">
- <com:TActiveHyperLink ID="link1" Text="Link 1" NavigateUrl="http://www.pradosoft.com" />
+ <com:TActiveHyperLink ID="link1" Text="Link 1" NavigateUrl="https://github.com/pradosoft/prado" />
</div>
<com:TActiveButton ID="button1" Text="Change Text" OnClick="change_text" />
<com:TActiveButton ID="button2" Text="Change Image" OnClick="change_image" />
diff --git a/tests/FunctionalTests/active-controls/protected/pages/ActiveHyperLinkTest.php b/tests/FunctionalTests/active-controls/protected/pages/ActiveHyperLinkTest.php
index ef3f597e..5ccf2e70 100755
--- a/tests/FunctionalTests/active-controls/protected/pages/ActiveHyperLinkTest.php
+++ b/tests/FunctionalTests/active-controls/protected/pages/ActiveHyperLinkTest.php
@@ -4,7 +4,7 @@ class ActiveHyperLinkTest extends TPage
{
function change_text()
{
- $this->link1->Text = "Pradosoft.com";
+ $this->link1->Text = "Prado framework";
}
function change_image()
@@ -19,6 +19,6 @@ class ActiveHyperLinkTest extends TPage
function change_url()
{
- $this->link1->NavigateUrl = "http://www.xlab6.com";
+ $this->link1->NavigateUrl = "http://www.google.com";
}
}
diff --git a/tests/FunctionalTests/active-controls/tests/ActiveHyperLinkTestCase.php b/tests/FunctionalTests/active-controls/tests/ActiveHyperLinkTestCase.php
index f6117b9d..4f8d5730 100755
--- a/tests/FunctionalTests/active-controls/tests/ActiveHyperLinkTestCase.php
+++ b/tests/FunctionalTests/active-controls/tests/ActiveHyperLinkTestCase.php
@@ -12,6 +12,6 @@ class ActiveHyperLinkTestCase extends PradoGenericSelenium2Test
$this->byId("{$base}button1")->click();
$this->pause(800);
- $this->assertText("{$base}link1", "Pradosoft.com");
+ $this->assertText("{$base}link1", "Prado framework");
}
}
diff --git a/tests/FunctionalTests/issues/protected/pages/Issue516.page b/tests/FunctionalTests/issues/protected/pages/Issue516.page
index c922c6e1..c922c6e1 100644..100755
--- a/tests/FunctionalTests/issues/protected/pages/Issue516.page
+++ b/tests/FunctionalTests/issues/protected/pages/Issue516.page
diff --git a/tests/FunctionalTests/issues/protected/pages/Issue516.php b/tests/FunctionalTests/issues/protected/pages/Issue516.php
index bd3e7a72..bd3e7a72 100644..100755
--- a/tests/FunctionalTests/issues/protected/pages/Issue516.php
+++ b/tests/FunctionalTests/issues/protected/pages/Issue516.php
diff --git a/tests/FunctionalTests/issues/tests/Issue516TestCase.php b/tests/FunctionalTests/issues/tests/Issue516TestCase.php
index 2b221081..2b221081 100644..100755
--- a/tests/FunctionalTests/issues/tests/Issue516TestCase.php
+++ b/tests/FunctionalTests/issues/tests/Issue516TestCase.php
diff --git a/tests/FunctionalTests/quickstart/Controls/HyperLinkTestCase.php b/tests/FunctionalTests/quickstart/Controls/HyperLinkTestCase.php
index 9fdb78bf..1fcb2744 100755
--- a/tests/FunctionalTests/quickstart/Controls/HyperLinkTestCase.php
+++ b/tests/FunctionalTests/quickstart/Controls/HyperLinkTestCase.php
@@ -6,7 +6,7 @@ class QuickstartHyperLinkTestCase extends PradoGenericSelenium2Test
{
$this->url("../../demos/quickstart/index.php?page=Controls.Samples.THyperLink.Home&amp;notheme=true&amp;lang=en");
$this->assertEquals("PRADO QuickStart Sample", $this->title());
- $this->assertElementPresent("//a[@href=\"http://www.pradosoft.com/\" and @target=\"_blank\"]");
+ $this->assertElementPresent("//a[@href=\"https://github.com/pradosoft/prado/\" and @target=\"_blank\"]");
$this->assertSourceContains("Welcome to");
$this->assertSourceContains("Body contents");
$this->assertElementPresent("//a[img/@alt='Hello World']");
diff --git a/tests/FunctionalTests/tickets/protected/pages/Layout.php b/tests/FunctionalTests/tickets/protected/pages/Layout.php
index c92cd9c0..7f3ee506 100755
--- a/tests/FunctionalTests/tickets/protected/pages/Layout.php
+++ b/tests/FunctionalTests/tickets/protected/pages/Layout.php
@@ -10,13 +10,6 @@ class Layout extends TTemplateControl
$this->getPage()->setTitle("Verifying $type $num");
$this->ticketlink->setText("Verifying $type $num");
- //TODO New issues will link to https://github.com/pradosoft/prado/issues/{$num}
- if(strToLower($type) === 'issue') {
- $this->ticketlink->setNavigateUrl("http://code.google.com/p/prado3/issues/detail?id={$num}");
- }
- else {
- $this->ticketlink->setNavigateUrl("http://trac.pradosoft.com/prado/ticket/{$num}");
- }
-
+ $this->ticketlink->setNavigateUrl("https://github.com/pradosoft/prado/issues/{$num}");
}
}
diff --git a/tests/FunctionalTests/tickets/protected/pages/Ticket121.page b/tests/FunctionalTests/tickets/protected/pages/Ticket121.page
index 9c9633d3..ce17726d 100755
--- a/tests/FunctionalTests/tickets/protected/pages/Ticket121.page
+++ b/tests/FunctionalTests/tickets/protected/pages/Ticket121.page
@@ -1,7 +1,7 @@
<com:TContent ID="Content">
<com:TImageButton
- ImageUrl="http://www.pradosoft.com/images/powered.gif"
+ ImageUrl="http://pradosoft.github.io/docs/powered.gif"
Text="Foo"
ValidationGroup="Foo"
OnClick="buttonClicked" />
diff --git a/tests/FunctionalTests/tickets/protected/pages/Ticket653/Layout.php b/tests/FunctionalTests/tickets/protected/pages/Ticket653/Layout.php
index 9af5b134..051c39db 100755
--- a/tests/FunctionalTests/tickets/protected/pages/Ticket653/Layout.php
+++ b/tests/FunctionalTests/tickets/protected/pages/Ticket653/Layout.php
@@ -6,6 +6,6 @@ class Layout extends TTemplateControl
{
$this->getPage()->setTitle("Verifying Ticket 653");
$this->ticketlink->setText("Verifying Ticket 653");
- $this->ticketlink->setNavigateUrl("http://trac.pradosoft.com/prado/ticket/653");
+ $this->ticketlink->setNavigateUrl("#");
}
}
diff --git a/tests/FunctionalTests/tickets/tests/Ticket595TestCase.php b/tests/FunctionalTests/tickets/tests/Ticket595TestCase.php
index 27d57a91..381f0d6e 100755
--- a/tests/FunctionalTests/tickets/tests/Ticket595TestCase.php
+++ b/tests/FunctionalTests/tickets/tests/Ticket595TestCase.php
@@ -15,7 +15,7 @@ class Ticket595TestCase extends PradoGenericSelenium2Test
$this->byId($base.'ctl2')->click();
$this->assertAttribute($base.'A@class','errorclassA');
- $this->type($base.'A', 'test@pradosoft.com');
+ $this->type($base.'A', 'test@prado.local');
$this->byId($base.'ctl2')->click();
$this->pause(800);
$this->assertAttribute($base.'A@class','');
@@ -29,7 +29,7 @@ class Ticket595TestCase extends PradoGenericSelenium2Test
$this->pause(800);
$this->assertAttribute($base.'B@class',' errorclassB');
- $this->type($base.'B', 'test@pradosoft.com');
+ $this->type($base.'B', 'test@prado.local');
$this->byId($base.'ctl5')->click();
$this->pause(800);
$this->assertAttribute($base.'B@class','');
diff --git a/tests/FunctionalTests/validators/protected/pages/ImageButton.page b/tests/FunctionalTests/validators/protected/pages/ImageButton.page
index d1fae361..9aa6a375 100755
--- a/tests/FunctionalTests/validators/protected/pages/ImageButton.page
+++ b/tests/FunctionalTests/validators/protected/pages/ImageButton.page
@@ -6,7 +6,7 @@
Text="Textbox1 required"
ControlToValidate="TextBox1"
ValidationGroup="Group1" />
-<com:TImageButton ImageUrl="http://www.pradosoft.com/images/powered.gif"
+<com:TImageButton ImageUrl="http://pradosoft.github.io/docs/powered.gif"
ValidationGroup="Group1"
OnClick="button1Clicked" />
<com:TLabel ID="Result1" />
@@ -17,7 +17,7 @@
<com:TRequiredFieldValidator
Text="Textbox2 required"
ControlToValidate="TextBox2" />
-<com:TImageButton ImageUrl="http://www.pradosoft.com/images/powered.gif"
+<com:TImageButton ImageUrl="http://pradosoft.github.io/docs/powered.gif"
OnClick="button2Clicked" />
<com:TLabel ID="Result2" />
@@ -29,7 +29,7 @@
EnableClientScript="false"
ControlToValidate="TextBox3"
ValidationGroup="Group3" />
-<com:TImageButton ImageUrl="http://www.pradosoft.com/images/powered.gif"
+<com:TImageButton ImageUrl="http://pradosoft.github.io/docs/powered.gif"
ValidationGroup="Group3"
OnClick="button3Clicked" />
<com:TLabel ID="Result3" />
diff --git a/tests/unit/Web/TAssetManagerTest.php b/tests/unit/Web/TAssetManagerTest.php
index 13d2d6c1..2480830a 100644
--- a/tests/unit/Web/TAssetManagerTest.php
+++ b/tests/unit/Web/TAssetManagerTest.php
@@ -22,7 +22,7 @@ class TAssetManagerTest extends PHPUnit_Framework_TestCase {
$_SERVER['QUERY_STRING'] = 'page=Links';
$_SERVER['SCRIPT_FILENAME'] = __FILE__;
$_SERVER['PATH_INFO'] = __FILE__;
- $_SERVER['HTTP_REFERER'] = 'http://www.pradosoft.com';
+ $_SERVER['HTTP_REFERER'] = 'https://github.com/pradosoft/prado';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3';
$_SERVER['REMOTE_HOST'] = 'localhost';
diff --git a/tests/unit/Web/THttpCookieTest.php b/tests/unit/Web/THttpCookieTest.php
index 206ef105..c94282f1 100644
--- a/tests/unit/Web/THttpCookieTest.php
+++ b/tests/unit/Web/THttpCookieTest.php
@@ -15,8 +15,8 @@ class THttpCookieTest extends PHPUnit_Framework_TestCase {
public function testSetDomain() {
$cookie=new THttpCookie('name','value');
- $cookie->setDomain('pradosoft.com');
- self::assertEquals('pradosoft.com',$cookie->getdomain());
+ $cookie->setDomain('pradoframework.net');
+ self::assertEquals('pradoframework.net',$cookie->getdomain());
}
public function testSetExpire() {
diff --git a/tests/unit/Web/THttpRequestTest.php b/tests/unit/Web/THttpRequestTest.php
index 7f5da17d..314cce0a 100644
--- a/tests/unit/Web/THttpRequestTest.php
+++ b/tests/unit/Web/THttpRequestTest.php
@@ -23,7 +23,7 @@ class THttpRequestTest extends PHPUnit_Framework_TestCase {
$_SERVER['QUERY_STRING'] = 'page=Links';
$_SERVER['SCRIPT_FILENAME'] = __FILE__;
$_SERVER['PATH_INFO'] = __FILE__;
- $_SERVER['HTTP_REFERER'] = 'http://www.pradosoft.com';
+ $_SERVER['HTTP_REFERER'] = 'https://github.com/pradosoft/prado';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3';
$_SERVER['REMOTE_HOST'] = 'localhost';
@@ -194,7 +194,7 @@ class THttpRequestTest extends PHPUnit_Framework_TestCase {
public function testGetUrlReferrer() {
$request = new THttpRequest();
$request->init(null);
- self::assertEquals('http://www.pradosoft.com', $request->getUrlReferrer());
+ self::assertEquals('https://github.com/pradosoft/prado', $request->getUrlReferrer());
}
public function testGetBrowser() {
diff --git a/tests/unit/Web/TUriTest.php b/tests/unit/Web/TUriTest.php
index b610cd1b..351a2cce 100644
--- a/tests/unit/Web/TUriTest.php
+++ b/tests/unit/Web/TUriTest.php
@@ -7,7 +7,7 @@ Prado::using('System.Web.THttpRequest');
*/
class TUriTest extends PHPUnit_Framework_TestCase {
- const URISTR='http://login:p@ssw0rd:compl3x@www.pradosoft.com:80/demos/quickstart/index.php?page=test&param1=test2#anchor';
+ const URISTR='http://login:p@ssw0rd:compl3x@www.pradoframework.net:80/demos/quickstart/index.php?page=test&param1=test2#anchor';
public function setUp () {
$this->uri=new TUri(self::URISTR);
@@ -18,11 +18,11 @@ class TUriTest extends PHPUnit_Framework_TestCase {
}
public function testConstruct() {
- $url="http://www.pradosoft.com/";
+ $url="http://www.pradoframework.net/";
$uri=new TUri ($url);
self::assertEquals($url, $uri->getUri() );
// Bad uri test
- $url="http://www.pradosoft.com:badport/test";
+ $url="http://www.pradoframework.net:badport/test";
try {
$url=new TUri($url);
self::fail ('exception not raised with an invalid URL');
@@ -40,7 +40,7 @@ class TUriTest extends PHPUnit_Framework_TestCase {
}
public function testGetHost() {
- self::assertEquals('www.pradosoft.com', $this->uri->getHost());
+ self::assertEquals('www.pradoframework.net', $this->uri->getHost());
}
public function testGetPort() {