summaryrefslogtreecommitdiff
path: root/demos
diff options
context:
space:
mode:
Diffstat (limited to 'demos')
-rw-r--r--demos/address-book/index.php52
-rw-r--r--demos/address-book/protected/pages/AddressProvider.php96
-rw-r--r--demos/address-book/protected/pages/AddressRecord.php68
-rw-r--r--demos/address-book/protected/pages/FlexApp.php226
-rw-r--r--demos/address-book/protected/pages/flex/bin/AC_OETags.js538
-rw-r--r--demos/address-book/protected/pages/flex/bin/history.js96
-rw-r--r--demos/address-book/protected/pages/flex/html-template/AC_OETags.js538
-rw-r--r--demos/address-book/protected/pages/flex/html-template/history.js96
-rw-r--r--demos/blog-tutorial/index.php34
-rw-r--r--demos/blog-tutorial/protected/common/InfoBox.php24
-rw-r--r--demos/blog-tutorial/protected/common/NoteBox.php24
-rw-r--r--demos/blog-tutorial/protected/common/TipBox.php24
-rw-r--r--demos/blog-tutorial/protected/common/TopicList.php14
-rw-r--r--demos/blog-tutorial/protected/layout/MainLayout.php12
-rw-r--r--demos/blog-tutorial/samples/day1/blog/index.php42
-rw-r--r--demos/blog-tutorial/samples/day1/blog/protected/layouts/MainLayout.php12
-rw-r--r--demos/blog-tutorial/samples/day1/blog/protected/pages/Contact.php58
-rw-r--r--demos/blog-tutorial/samples/day2/blog/index.php42
-rw-r--r--demos/blog-tutorial/samples/day2/blog/protected/database/PostRecord.php54
-rw-r--r--demos/blog-tutorial/samples/day2/blog/protected/database/UserRecord.php54
-rw-r--r--demos/blog-tutorial/samples/day2/blog/protected/layouts/MainLayout.php12
-rw-r--r--demos/blog-tutorial/samples/day2/blog/protected/pages/Contact.php58
-rw-r--r--demos/blog-tutorial/samples/day3/blog/index.php42
-rw-r--r--demos/blog-tutorial/samples/day3/blog/protected/BlogUser.php116
-rw-r--r--demos/blog-tutorial/samples/day3/blog/protected/database/PostRecord.php54
-rw-r--r--demos/blog-tutorial/samples/day3/blog/protected/database/UserRecord.php54
-rw-r--r--demos/blog-tutorial/samples/day3/blog/protected/layouts/MainLayout.php36
-rw-r--r--demos/blog-tutorial/samples/day3/blog/protected/pages/Contact.php58
-rw-r--r--demos/blog-tutorial/samples/day3/blog/protected/pages/users/AdminUser.php70
-rw-r--r--demos/blog-tutorial/samples/day3/blog/protected/pages/users/EditUser.php164
-rw-r--r--demos/blog-tutorial/samples/day3/blog/protected/pages/users/LoginUser.php72
-rw-r--r--demos/blog-tutorial/samples/day3/blog/protected/pages/users/NewUser.php88
-rw-r--r--demos/blog-tutorial/samples/day4/blog/index.php42
-rw-r--r--demos/blog-tutorial/samples/day4/blog/protected/BlogUser.php116
-rw-r--r--demos/blog-tutorial/samples/day4/blog/protected/database/PostRecord.php54
-rw-r--r--demos/blog-tutorial/samples/day4/blog/protected/database/UserRecord.php54
-rw-r--r--demos/blog-tutorial/samples/day4/blog/protected/layouts/MainLayout.php36
-rw-r--r--demos/blog-tutorial/samples/day4/blog/protected/pages/Contact.php58
-rw-r--r--demos/blog-tutorial/samples/day4/blog/protected/pages/posts/EditPost.php142
-rw-r--r--demos/blog-tutorial/samples/day4/blog/protected/pages/posts/ListPost.php126
-rw-r--r--demos/blog-tutorial/samples/day4/blog/protected/pages/posts/NewPost.php66
-rw-r--r--demos/blog-tutorial/samples/day4/blog/protected/pages/posts/PostRenderer.php12
-rw-r--r--demos/blog-tutorial/samples/day4/blog/protected/pages/posts/ReadPost.php112
-rw-r--r--demos/blog-tutorial/samples/day4/blog/protected/pages/users/AdminUser.php70
-rw-r--r--demos/blog-tutorial/samples/day4/blog/protected/pages/users/EditUser.php164
-rw-r--r--demos/blog-tutorial/samples/day4/blog/protected/pages/users/LoginUser.php72
-rw-r--r--demos/blog-tutorial/samples/day4/blog/protected/pages/users/NewUser.php88
-rw-r--r--demos/blog-tutorial/samples/day5/blog/index.php42
-rw-r--r--demos/blog-tutorial/samples/day5/blog/protected/BlogErrorHandler.php78
-rw-r--r--demos/blog-tutorial/samples/day5/blog/protected/BlogException.php12
-rw-r--r--demos/blog-tutorial/samples/day5/blog/protected/BlogUser.php116
-rw-r--r--demos/blog-tutorial/samples/day5/blog/protected/database/PostRecord.php54
-rw-r--r--demos/blog-tutorial/samples/day5/blog/protected/database/UserRecord.php54
-rw-r--r--demos/blog-tutorial/samples/day5/blog/protected/layouts/MainLayout.php36
-rw-r--r--demos/blog-tutorial/samples/day5/blog/protected/pages/Contact.php58
-rw-r--r--demos/blog-tutorial/samples/day5/blog/protected/pages/posts/EditPost.php142
-rw-r--r--demos/blog-tutorial/samples/day5/blog/protected/pages/posts/ListPost.php126
-rw-r--r--demos/blog-tutorial/samples/day5/blog/protected/pages/posts/NewPost.php66
-rw-r--r--demos/blog-tutorial/samples/day5/blog/protected/pages/posts/PostRenderer.php12
-rw-r--r--demos/blog-tutorial/samples/day5/blog/protected/pages/posts/ReadPost.php116
-rw-r--r--demos/blog-tutorial/samples/day5/blog/protected/pages/users/AdminUser.php70
-rw-r--r--demos/blog-tutorial/samples/day5/blog/protected/pages/users/EditUser.php164
-rw-r--r--demos/blog-tutorial/samples/day5/blog/protected/pages/users/LoginUser.php72
-rw-r--r--demos/blog-tutorial/samples/day5/blog/protected/pages/users/NewUser.php88
-rw-r--r--demos/blog/index.php40
-rw-r--r--demos/blog/protected/Common/BlogDataModule.php1414
-rw-r--r--demos/blog/protected/Common/BlogErrorHandler.php90
-rw-r--r--demos/blog/protected/Common/BlogException.php60
-rw-r--r--demos/blog/protected/Common/BlogPage.php96
-rw-r--r--demos/blog/protected/Common/BlogUser.php118
-rw-r--r--demos/blog/protected/Common/BlogUserManager.php188
-rw-r--r--demos/blog/protected/Common/XListMenu.php252
-rw-r--r--demos/blog/protected/Layouts/MainLayout.php46
-rw-r--r--demos/blog/protected/Pages/Admin/AdminMenu.php46
-rw-r--r--demos/blog/protected/Pages/Admin/ConfigMan.php152
-rw-r--r--demos/blog/protected/Pages/Admin/PostMan.php144
-rw-r--r--demos/blog/protected/Pages/Admin/UserMan.php148
-rw-r--r--demos/blog/protected/Pages/ErrorReport.php56
-rw-r--r--demos/blog/protected/Pages/Posts/EditCategory.php120
-rw-r--r--demos/blog/protected/Pages/Posts/EditPost.php154
-rw-r--r--demos/blog/protected/Pages/Posts/ListPost.php282
-rw-r--r--demos/blog/protected/Pages/Posts/MyPost.php100
-rw-r--r--demos/blog/protected/Pages/Posts/NewCategory.php80
-rw-r--r--demos/blog/protected/Pages/Posts/NewPost.php112
-rw-r--r--demos/blog/protected/Pages/Posts/ViewPost.php178
-rw-r--r--demos/blog/protected/Pages/SearchPost.php134
-rw-r--r--demos/blog/protected/Pages/Users/EditUser.php136
-rw-r--r--demos/blog/protected/Pages/Users/NewUser.php114
-rw-r--r--demos/blog/protected/Pages/Users/ViewUser.php82
-rw-r--r--demos/blog/protected/Portlets/AccountPortlet.php60
-rw-r--r--demos/blog/protected/Portlets/ArchivePortlet.php122
-rw-r--r--demos/blog/protected/Portlets/CategoryPortlet.php74
-rw-r--r--demos/blog/protected/Portlets/CommentPortlet.php78
-rw-r--r--demos/blog/protected/Portlets/LoginPortlet.php76
-rw-r--r--demos/blog/protected/Portlets/Portlet.php46
-rw-r--r--demos/blog/protected/Portlets/SearchPortlet.php76
-rw-r--r--demos/chat/index.php56
-rw-r--r--demos/chat/protected/App_Code/ChatBufferRecord.php126
-rw-r--r--demos/chat/protected/App_Code/ChatUserManager.php168
-rw-r--r--demos/chat/protected/App_Code/ChatUserRecord.php80
-rw-r--r--demos/chat/protected/pages/Home.php110
-rw-r--r--demos/chat/protected/pages/Login.php78
-rw-r--r--demos/composer/index.php34
-rw-r--r--demos/composer/index2.php34
-rw-r--r--demos/composer/protected/pages/ClassDefinition.php740
-rw-r--r--demos/composer/protected/pages/Home.php234
-rw-r--r--demos/composer/protected/pages/Layout.php28
-rw-r--r--demos/helloworld/index.php34
-rw-r--r--demos/helloworld/protected/pages/Home.php20
-rw-r--r--demos/northwind-db/index.php54
-rw-r--r--demos/northwind-db/protected/database/Category.php50
-rw-r--r--demos/northwind-db/protected/database/Customer.php64
-rw-r--r--demos/northwind-db/protected/database/Employee.php94
-rw-r--r--demos/northwind-db/protected/database/Order.php82
-rw-r--r--demos/northwind-db/protected/database/OrderDetail.php52
-rw-r--r--demos/northwind-db/protected/database/Product.php70
-rw-r--r--demos/northwind-db/protected/database/Region.php48
-rw-r--r--demos/northwind-db/protected/database/Shipper.php48
-rw-r--r--demos/northwind-db/protected/database/Supplier.php66
-rw-r--r--demos/northwind-db/protected/database/Territory.php118
-rw-r--r--demos/northwind-db/protected/pages/NorthwindCrud.php54
-rw-r--r--demos/personal/index.php28
-rw-r--r--demos/personal/protected/Common/LoginPortlet.php36
-rw-r--r--demos/personal/protected/Common/MainMenu.php22
-rw-r--r--demos/personal/protected/Pages/Layout.php12
-rw-r--r--demos/personal/protected/Pages/Register.php36
-rw-r--r--demos/quickstart/index.php34
-rw-r--r--demos/quickstart/index2.php34
-rw-r--r--demos/quickstart/protected/QuickStartGlobalization.php60
-rw-r--r--demos/quickstart/protected/controls/Comments/CommentBlock.php212
-rw-r--r--demos/quickstart/protected/controls/Comments/comments.js412
-rw-r--r--demos/quickstart/protected/controls/DocLink.php60
-rw-r--r--demos/quickstart/protected/controls/Layout.php94
-rw-r--r--demos/quickstart/protected/controls/RequiresVersion.php30
-rw-r--r--demos/quickstart/protected/controls/RunBar.php44
-rw-r--r--demos/quickstart/protected/controls/SampleLayout.php24
-rw-r--r--demos/quickstart/protected/controls/SearchBox.php80
-rw-r--r--demos/quickstart/protected/controls/SinceVersion.php30
-rw-r--r--demos/quickstart/protected/controls/TopicList.php14
-rw-r--r--demos/quickstart/protected/index/ZendSearch.php108
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveButton/Home.php38
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveCheckBox/Home.php30
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveCheckBoxList/Home.php50
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveCustomValidator/Home.php20
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample1.php72
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample2.php170
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample3.php378
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample4.php40
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample5.php156
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataList/Home.php262
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDropDownList/Home.php118
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveFileUpload/Home.php40
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveHyperLink/Home.php50
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveImage/Home.php32
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveImageButton/Home.php34
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveLinkButton/Home.php26
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveListBox/Home.php128
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveMultiView/Home.php28
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActivePanel/Home.php40
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRadioButton/Home.php52
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRadioButtonList/Home.php50
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRepeater/Home.php156
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TActiveTableRow/Home.php42
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TAutoComplete/Home.php68
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TCallbackClientScript/Home.php56
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TCallbackClientSide/Home.php22
-rw-r--r--demos/quickstart/protected/pages/ActiveControls/Samples/TCallbackOptions/Home.php22
-rw-r--r--demos/quickstart/protected/pages/Advanced/Samples/I18N/Home.php88
-rw-r--r--demos/quickstart/protected/pages/Advanced/Samples/I18N/LanguageList.php36
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox1/Home.php24
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox1/LabeledTextBox.php34
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox2/Home.php24
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox2/LabeledTextBox.php64
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/ResetValidation/Home.php14
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TAccordion/Home.php32
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TBulletedList/Home.php22
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TButton/Home.php26
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TCaptcha/Home.php52
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TCheckBox/Home.php20
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TCheckBoxList/Home.php138
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.php32
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TCompareValidator/Home.php14
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TConditional/Home.php12
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TCustomValidator/Home.php34
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample1.php80
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample2.php170
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample3.php378
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample4.php40
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample5.php134
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample6.php110
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample1.php80
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample2.php262
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TDataTypeValidator/Home.php14
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TDropDownList/Home.php136
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TEmailAddressValidator/Home.php14
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TFileUpload/Home.php40
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/THtmlArea/Home.php40
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TImageButton/Home.php34
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TImageMap/Home.php20
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TKeyboard/Home.php20
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TLinkButton/Home.php26
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TListBox/Home.php156
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TMultiView/Home.php28
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TPager/Sample1.php162
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TPanel/Home.php20
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TPlaceHolder/Home.php30
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TRadioButton/Home.php52
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TRadioButtonList/Home.php136
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TRangeValidator/Home.php14
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TRegularExpressionValidator/Home.php14
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TRepeater/RegionDisplay.php54
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample1.php80
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample2.php156
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample3.php156
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample4.php72
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample5.php102
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TRequiredFieldValidator/Home.php14
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TSlider/Home.php8
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TTabPanel/Home.php12
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TTable/Home.php64
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TTextBox/Home.php42
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TValidationSummary/Home.php14
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample1.php20
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample2.php20
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample3.php48
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample4.php20
-rw-r--r--demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample5.php22
-rw-r--r--demos/quickstart/protected/pages/Database/Samples/Scaffold/Home.php64
-rw-r--r--demos/quickstart/protected/pages/Fundamentals/Samples/Hangman/Home.php240
-rw-r--r--demos/quickstart/protected/pages/Search.php110
-rw-r--r--demos/quickstart/protected/pages/ViewSource.php222
-rw-r--r--demos/sqlmap/index.php38
-rw-r--r--demos/sqlmap/protected/APP_CODE/Person.php50
-rw-r--r--demos/sqlmap/protected/pages/Manual/Layout.php12
-rw-r--r--demos/sqlmap/protected/pages/Manual/TopicList.php14
-rw-r--r--demos/sqlmap/protected/pages/Sample/crud1.php40
-rw-r--r--demos/sqlmap/protected/pages/Sample/crud2.php154
-rw-r--r--demos/time-tracker/index.php68
-rw-r--r--demos/time-tracker/protected/App_Code/Dao/BaseDao.php88
-rw-r--r--demos/time-tracker/protected/App_Code/Dao/CategoryDao.php104
-rw-r--r--demos/time-tracker/protected/App_Code/Dao/CategoryRecord.php24
-rw-r--r--demos/time-tracker/protected/App_Code/Dao/ProjectDao.php208
-rw-r--r--demos/time-tracker/protected/App_Code/Dao/ProjectRecord.php68
-rw-r--r--demos/time-tracker/protected/App_Code/Dao/ReportsDao.php172
-rw-r--r--demos/time-tracker/protected/App_Code/Dao/TimeEntryDao.php74
-rw-r--r--demos/time-tracker/protected/App_Code/Dao/TimeEntryRecord.php30
-rw-r--r--demos/time-tracker/protected/App_Code/Dao/UserDao.php328
-rw-r--r--demos/time-tracker/protected/App_Code/DaoManager.php156
-rw-r--r--demos/time-tracker/protected/App_Code/TimeTrackerException.php64
-rw-r--r--demos/time-tracker/protected/App_Code/TimeTrackerUser.php94
-rw-r--r--demos/time-tracker/protected/App_Code/TrackerAuthManager.php168
-rw-r--r--demos/time-tracker/protected/App_Code/UserManager.php178
-rw-r--r--demos/time-tracker/protected/App_Data/DateTimeTypeHandler.php68
-rw-r--r--demos/time-tracker/protected/App_Data/TimeTrackerUserTypeHandler.php106
-rw-r--r--demos/time-tracker/protected/pages/TimeTracker/CategoryDataList.php186
-rw-r--r--demos/time-tracker/protected/pages/TimeTracker/LogTimeEntry.php222
-rw-r--r--demos/time-tracker/protected/pages/TimeTracker/Login.php108
-rw-r--r--demos/time-tracker/protected/pages/TimeTracker/Logout.php66
-rw-r--r--demos/time-tracker/protected/pages/TimeTracker/MainLayout.php12
-rw-r--r--demos/time-tracker/protected/pages/TimeTracker/ProjectDetails.php380
-rw-r--r--demos/time-tracker/protected/pages/TimeTracker/ProjectList.php66
-rw-r--r--demos/time-tracker/protected/pages/TimeTracker/ReportProject.php104
-rw-r--r--demos/time-tracker/protected/pages/TimeTracker/ReportResource.php140
-rw-r--r--demos/time-tracker/protected/pages/TimeTracker/SiteMap.php112
-rw-r--r--demos/time-tracker/protected/pages/TimeTracker/TimeEntryList.php176
-rw-r--r--demos/time-tracker/protected/pages/TimeTracker/UserCreate.php222
-rw-r--r--demos/time-tracker/protected/pages/TimeTracker/UserList.php66
-rw-r--r--demos/time-tracker/tests/functional.php18
-rw-r--r--demos/time-tracker/tests/functional/HelloPradoTestCase.php26
-rw-r--r--demos/time-tracker/tests/unit.php20
-rw-r--r--demos/time-tracker/tests/unit/BaseTestCase.php126
-rw-r--r--demos/time-tracker/tests/unit/CategoryDaoTestCase.php400
-rw-r--r--demos/time-tracker/tests/unit/ProjectDaoTestCase.php398
-rw-r--r--demos/time-tracker/tests/unit/TimeEntryDaoTestCase.php426
-rw-r--r--demos/time-tracker/tests/unit/UserDaoTestCase.php540
275 files changed, 13474 insertions, 13474 deletions
diff --git a/demos/address-book/index.php b/demos/address-book/index.php
index 90149c02..65ace715 100644
--- a/demos/address-book/index.php
+++ b/demos/address-book/index.php
@@ -1,27 +1,27 @@
-<?php
-$frameworkPath='../../framework/prado.php';
-
-/** The directory checks may be removed if performance is required **/
-$basePath=dirname(__FILE__);
-$assetsPath=$basePath."/assets";
-$runtimePath=$basePath."/protected/runtime";
-$sqliteDbDir=$basePath."/protected/pages/";
-$sqliteDb=$sqliteDbDir.'sqlite.db';
-
-if(!is_file($frameworkPath))
- die("Unable to find prado framework path $frameworkPath.");
-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.");
-if(!is_writable($sqliteDbDir))
- die("Please make sure that the directory $sqliteDbDir is writable by Web server process.");
-if(!is_writable($sqliteDb))
- die("Please make sure that the file $sqliteDbDir is writable by Web server process.");
-
-require_once($frameworkPath);
-
-$application=new TApplication;
-$application->run();
-
+<?php
+$frameworkPath='../../framework/prado.php';
+
+/** The directory checks may be removed if performance is required **/
+$basePath=dirname(__FILE__);
+$assetsPath=$basePath."/assets";
+$runtimePath=$basePath."/protected/runtime";
+$sqliteDbDir=$basePath."/protected/pages/";
+$sqliteDb=$sqliteDbDir.'sqlite.db';
+
+if(!is_file($frameworkPath))
+ die("Unable to find prado framework path $frameworkPath.");
+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.");
+if(!is_writable($sqliteDbDir))
+ die("Please make sure that the directory $sqliteDbDir is writable by Web server process.");
+if(!is_writable($sqliteDb))
+ die("Please make sure that the file $sqliteDbDir is writable by Web server process.");
+
+require_once($frameworkPath);
+
+$application=new TApplication;
+$application->run();
+
?> \ No newline at end of file
diff --git a/demos/address-book/protected/pages/AddressProvider.php b/demos/address-book/protected/pages/AddressProvider.php
index 94b71e11..e903f540 100644
--- a/demos/address-book/protected/pages/AddressProvider.php
+++ b/demos/address-book/protected/pages/AddressProvider.php
@@ -1,50 +1,50 @@
-<?php
-Prado::using('Application.pages.AddressRecord');
-/**
- * @author Wei Zhuo <weizho[at]gmail[dot]com>
- * @version $Id$
- * @since 3.1
- */
-class AddressProvider
-{
- /**
- * @return AddressRecord[]
- * @soapmethod
- */
- public function getAllAddress()
- {
- return AddressRecord::finder()->findAll();
- }
-
- /**
- * Update address if $data->id > 0, otherwise add new address.
- * @param AddressRecord $data
- * @return boolean
- * @soapmethod
- */
- public function saveAddress($data)
- {
- $finder = AddressRecord::finder();
- if($data->id > 0 && $address=$finder->findByPk($data->id))
- {
- return $address->copyFrom($data)->save();
- }
- else
- {
- $data->id = null; //nullify the id
- return $data->save();
- }
- }
-
- /**
- * @param integer $id
- * @return integer number of records deleted
- * @soapmethod
- */
- public function deleteAddress($id)
- {
- return AddressRecord::finder()->deleteByPk($id);
- }
-}
+<?php
+Prado::using('Application.pages.AddressRecord');
+/**
+ * @author Wei Zhuo <weizho[at]gmail[dot]com>
+ * @version $Id$
+ * @since 3.1
+ */
+class AddressProvider
+{
+ /**
+ * @return AddressRecord[]
+ * @soapmethod
+ */
+ public function getAllAddress()
+ {
+ return AddressRecord::finder()->findAll();
+ }
+
+ /**
+ * Update address if $data->id > 0, otherwise add new address.
+ * @param AddressRecord $data
+ * @return boolean
+ * @soapmethod
+ */
+ public function saveAddress($data)
+ {
+ $finder = AddressRecord::finder();
+ if($data->id > 0 && $address=$finder->findByPk($data->id))
+ {
+ return $address->copyFrom($data)->save();
+ }
+ else
+ {
+ $data->id = null; //nullify the id
+ return $data->save();
+ }
+ }
+
+ /**
+ * @param integer $id
+ * @return integer number of records deleted
+ * @soapmethod
+ */
+ public function deleteAddress($id)
+ {
+ return AddressRecord::finder()->deleteByPk($id);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/address-book/protected/pages/AddressRecord.php b/demos/address-book/protected/pages/AddressRecord.php
index aaf8db7c..58bb53e6 100644
--- a/demos/address-book/protected/pages/AddressRecord.php
+++ b/demos/address-book/protected/pages/AddressRecord.php
@@ -1,35 +1,35 @@
-<?php
-/**
- * Auto generated by prado-cli.php on 2007-01-16 06:44:16.
- */
-class AddressRecord extends TActiveRecord
-{
- const TABLE='addresses';
-
- /**
- * @var integer $id
- * @soapproperty
- */
- public $id;
-
- /**
- * @var string $username
- * @soapproperty
- */
- public $username;
-
- /**
- * @var string $phone
- * @soapproperty
- */
- public $phone;
-
- /**
- * @return AddressRecord
- */
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+/**
+ * Auto generated by prado-cli.php on 2007-01-16 06:44:16.
+ */
+class AddressRecord extends TActiveRecord
+{
+ const TABLE='addresses';
+
+ /**
+ * @var integer $id
+ * @soapproperty
+ */
+ public $id;
+
+ /**
+ * @var string $username
+ * @soapproperty
+ */
+ public $username;
+
+ /**
+ * @var string $phone
+ * @soapproperty
+ */
+ public $phone;
+
+ /**
+ * @return AddressRecord
+ */
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/address-book/protected/pages/FlexApp.php b/demos/address-book/protected/pages/FlexApp.php
index e7a5bf2a..d9b20ab7 100644
--- a/demos/address-book/protected/pages/FlexApp.php
+++ b/demos/address-book/protected/pages/FlexApp.php
@@ -1,114 +1,114 @@
-<?php
-/**
- * @author Wei Zhuo <weizho[at]gmail[dot]com>
- * @version $Id$
- * @since 3.1
- */
-class FlexApp extends TTemplateControl
-{
- private $_parameters;
-
- /**
- * FlashVar parameter name value pairs.
- *
- * NOTE: parameter names must be accessed in lowercase in Flex Applications!
- *
- * @return TAttributeCollection
- */
- public function getParameters()
- {
- if($this->_parameters===null)
- $this->_parameters = new TAttributeCollection();
- return $this->_parameters;
- }
-
- public function getFlashVars()
- {
- $params = array();
- foreach($this->getParameters() as $name=>$value)
- $params[] = $name.'='.$value;
- return implode('&', $params);
- }
-
- public function getWidth()
- {
- return $this->getViewState('Width', '450');
- }
-
- public function setWidth($value)
- {
- $this->setViewState('Width', $value, '450');
- }
-
- public function getHeight()
- {
- return $this->getViewState('Height', '300');
- }
-
- public function setHeight($value)
- {
- $this->setViewState('Height', $value, '300');
- }
-
- public function getBinDirectory()
- {
- return $this->getViewState('Bin');
- }
-
- public function setBinDirectory($value)
- {
- $this->setViewState('Bin', $value);
- }
-
- public function getAppName()
- {
- return $this->getViewState('AppName');
- }
-
- public function setAppName($value)
- {
- $this->setViewState('AppName', $value);
- }
-
- public function getQuality()
- {
- return $this->getViewState('Quality', 'high');
- }
-
- public function setQuality($value)
- {
- $this->setViewState('Quality', $value, 'high');
- }
-
- public function getBgcolor()
- {
- return $this->getViewState('bgcolor', '#ffffff');
- }
-
- public function setBgColor($value)
- {
- $this->setViewState('bgcolor', $value, '#ffffff');
- }
-
- public function getAlign()
- {
- return $this->getViewState('align', 'middle');
- }
-
- public function setAlign($value)
- {
- $this->setViewState('align', $value, 'middle');
- }
-
- public function getAllowScriptAccess()
- {
- return $this->getViewState('allowScriptAccess', 'sameDomain');
- }
-
- public function setAllowScriptAccess($value)
- {
- $this->setViewState('allowScriptAccess', $value, 'sameDomain');
- }
-}
-
+<?php
+/**
+ * @author Wei Zhuo <weizho[at]gmail[dot]com>
+ * @version $Id$
+ * @since 3.1
+ */
+class FlexApp extends TTemplateControl
+{
+ private $_parameters;
+
+ /**
+ * FlashVar parameter name value pairs.
+ *
+ * NOTE: parameter names must be accessed in lowercase in Flex Applications!
+ *
+ * @return TAttributeCollection
+ */
+ public function getParameters()
+ {
+ if($this->_parameters===null)
+ $this->_parameters = new TAttributeCollection();
+ return $this->_parameters;
+ }
+
+ public function getFlashVars()
+ {
+ $params = array();
+ foreach($this->getParameters() as $name=>$value)
+ $params[] = $name.'='.$value;
+ return implode('&', $params);
+ }
+
+ public function getWidth()
+ {
+ return $this->getViewState('Width', '450');
+ }
+
+ public function setWidth($value)
+ {
+ $this->setViewState('Width', $value, '450');
+ }
+
+ public function getHeight()
+ {
+ return $this->getViewState('Height', '300');
+ }
+
+ public function setHeight($value)
+ {
+ $this->setViewState('Height', $value, '300');
+ }
+
+ public function getBinDirectory()
+ {
+ return $this->getViewState('Bin');
+ }
+
+ public function setBinDirectory($value)
+ {
+ $this->setViewState('Bin', $value);
+ }
+
+ public function getAppName()
+ {
+ return $this->getViewState('AppName');
+ }
+
+ public function setAppName($value)
+ {
+ $this->setViewState('AppName', $value);
+ }
+
+ public function getQuality()
+ {
+ return $this->getViewState('Quality', 'high');
+ }
+
+ public function setQuality($value)
+ {
+ $this->setViewState('Quality', $value, 'high');
+ }
+
+ public function getBgcolor()
+ {
+ return $this->getViewState('bgcolor', '#ffffff');
+ }
+
+ public function setBgColor($value)
+ {
+ $this->setViewState('bgcolor', $value, '#ffffff');
+ }
+
+ public function getAlign()
+ {
+ return $this->getViewState('align', 'middle');
+ }
+
+ public function setAlign($value)
+ {
+ $this->setViewState('align', $value, 'middle');
+ }
+
+ public function getAllowScriptAccess()
+ {
+ return $this->getViewState('allowScriptAccess', 'sameDomain');
+ }
+
+ public function setAllowScriptAccess($value)
+ {
+ $this->setViewState('allowScriptAccess', $value, 'sameDomain');
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/address-book/protected/pages/flex/bin/AC_OETags.js b/demos/address-book/protected/pages/flex/bin/AC_OETags.js
index 157eb218..f72d7e29 100644
--- a/demos/address-book/protected/pages/flex/bin/AC_OETags.js
+++ b/demos/address-book/protected/pages/flex/bin/AC_OETags.js
@@ -1,269 +1,269 @@
-// Flash Player Version Detection - Rev 1.5
-// Detect Client Browser type
-// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
-var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
-var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
-var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
-
-function ControlVersion()
-{
- var version;
- var axo;
- var e;
-
- // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
-
- try {
- // version will be set for 7.X or greater players
- axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
- version = axo.GetVariable("$version");
- } catch (e) {
- }
-
- if (!version)
- {
- try {
- // version will be set for 6.X players only
- axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
-
- // installed player is some revision of 6.0
- // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
- // so we have to be careful.
-
- // default to the first public version
- version = "WIN 6,0,21,0";
-
- // throws if AllowScripAccess does not exist (introduced in 6.0r47)
- axo.AllowScriptAccess = "always";
-
- // safe to call for 6.0r47 or greater
- version = axo.GetVariable("$version");
-
- } catch (e) {
- }
- }
-
- if (!version)
- {
- try {
- // version will be set for 4.X or 5.X player
- axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
- version = axo.GetVariable("$version");
- } catch (e) {
- }
- }
-
- if (!version)
- {
- try {
- // version will be set for 3.X player
- axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
- version = "WIN 3,0,18,0";
- } catch (e) {
- }
- }
-
- if (!version)
- {
- try {
- // version will be set for 2.X player
- axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
- version = "WIN 2,0,0,11";
- } catch (e) {
- version = -1;
- }
- }
-
- return version;
-}
-
-// JavaScript helper required to detect Flash Player PlugIn version information
-function GetSwfVer(){
- // NS/Opera version >= 3 check for Flash plugin in plugin array
- var flashVer = -1;
-
- if (navigator.plugins != null && navigator.plugins.length > 0) {
- if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
- var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
- var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
- var descArray = flashDescription.split(" ");
- var tempArrayMajor = descArray[2].split(".");
- var versionMajor = tempArrayMajor[0];
- var versionMinor = tempArrayMajor[1];
- if ( descArray[3] != "" ) {
- tempArrayMinor = descArray[3].split("r");
- } else {
- tempArrayMinor = descArray[4].split("r");
- }
- var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
- var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
- }
- }
- // MSN/WebTV 2.6 supports Flash 4
- else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
- // WebTV 2.5 supports Flash 3
- else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
- // older WebTV supports Flash 2
- else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
- else if ( isIE && isWin && !isOpera ) {
- flashVer = ControlVersion();
- }
- return flashVer;
-}
-
-// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
-function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
-{
- versionStr = GetSwfVer();
- if (versionStr == -1 ) {
- return false;
- } else if (versionStr != 0) {
- if(isIE && isWin && !isOpera) {
- // Given "WIN 2,0,0,11"
- tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"]
- tempString = tempArray[1]; // "2,0,0,11"
- versionArray = tempString.split(","); // ['2', '0', '0', '11']
- } else {
- versionArray = versionStr.split(".");
- }
- var versionMajor = versionArray[0];
- var versionMinor = versionArray[1];
- var versionRevision = versionArray[2];
-
- // is the major.revision >= requested major.revision AND the minor version >= requested minor
- if (versionMajor > parseFloat(reqMajorVer)) {
- return true;
- } else if (versionMajor == parseFloat(reqMajorVer)) {
- if (versionMinor > parseFloat(reqMinorVer))
- return true;
- else if (versionMinor == parseFloat(reqMinorVer)) {
- if (versionRevision >= parseFloat(reqRevision))
- return true;
- }
- }
- return false;
- }
-}
-
-function AC_AddExtension(src, ext)
-{
- if (src.indexOf('?') != -1)
- return src.replace(/\?/, ext+'?');
- else
- return src + ext;
-}
-
-function AC_Generateobj(objAttrs, params, embedAttrs)
-{
- var str = '';
- if (isIE && isWin && !isOpera)
- {
- str += '<object ';
- for (var i in objAttrs)
- str += i + '="' + objAttrs[i] + '" ';
- for (var i in params)
- str += '><param name="' + i + '" value="' + params[i] + '" /> ';
- str += '></object>';
- } else {
- str += '<embed ';
- for (var i in embedAttrs)
- str += i + '="' + embedAttrs[i] + '" ';
- str += '> </embed>';
- }
-
- document.write(str);
-}
-
-function AC_FL_RunContent(){
- var ret =
- AC_GetArgs
- ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
- , "application/x-shockwave-flash"
- );
- AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
-}
-
-function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
- var ret = new Object();
- ret.embedAttrs = new Object();
- ret.params = new Object();
- ret.objAttrs = new Object();
- for (var i=0; i < args.length; i=i+2){
- var currArg = args[i].toLowerCase();
-
- switch (currArg){
- case "classid":
- break;
- case "pluginspage":
- ret.embedAttrs[args[i]] = args[i+1];
- break;
- case "src":
- case "movie":
- args[i+1] = AC_AddExtension(args[i+1], ext);
- ret.embedAttrs["src"] = args[i+1];
- ret.params[srcParamName] = args[i+1];
- break;
- case "onafterupdate":
- case "onbeforeupdate":
- case "onblur":
- case "oncellchange":
- case "onclick":
- case "ondblClick":
- case "ondrag":
- case "ondragend":
- case "ondragenter":
- case "ondragleave":
- case "ondragover":
- case "ondrop":
- case "onfinish":
- case "onfocus":
- case "onhelp":
- case "onmousedown":
- case "onmouseup":
- case "onmouseover":
- case "onmousemove":
- case "onmouseout":
- case "onkeypress":
- case "onkeydown":
- case "onkeyup":
- case "onload":
- case "onlosecapture":
- case "onpropertychange":
- case "onreadystatechange":
- case "onrowsdelete":
- case "onrowenter":
- case "onrowexit":
- case "onrowsinserted":
- case "onstart":
- case "onscroll":
- case "onbeforeeditfocus":
- case "onactivate":
- case "onbeforedeactivate":
- case "ondeactivate":
- case "type":
- case "codebase":
- case "id":
- ret.objAttrs[args[i]] = args[i+1];
- break;
- case "width":
- case "height":
- case "align":
- case "vspace":
- case "hspace":
- case "class":
- case "title":
- case "accesskey":
- case "name":
- case "tabindex":
- ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
- break;
- default:
- ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
- }
- }
- ret.objAttrs["classid"] = classid;
- if (mimeType) ret.embedAttrs["type"] = mimeType;
- return ret;
-}
-
-
+// Flash Player Version Detection - Rev 1.5
+// Detect Client Browser type
+// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
+var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
+var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
+var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
+
+function ControlVersion()
+{
+ var version;
+ var axo;
+ var e;
+
+ // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
+
+ try {
+ // version will be set for 7.X or greater players
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
+ version = axo.GetVariable("$version");
+ } catch (e) {
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 6.X players only
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
+
+ // installed player is some revision of 6.0
+ // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
+ // so we have to be careful.
+
+ // default to the first public version
+ version = "WIN 6,0,21,0";
+
+ // throws if AllowScripAccess does not exist (introduced in 6.0r47)
+ axo.AllowScriptAccess = "always";
+
+ // safe to call for 6.0r47 or greater
+ version = axo.GetVariable("$version");
+
+ } catch (e) {
+ }
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 4.X or 5.X player
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
+ version = axo.GetVariable("$version");
+ } catch (e) {
+ }
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 3.X player
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
+ version = "WIN 3,0,18,0";
+ } catch (e) {
+ }
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 2.X player
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+ version = "WIN 2,0,0,11";
+ } catch (e) {
+ version = -1;
+ }
+ }
+
+ return version;
+}
+
+// JavaScript helper required to detect Flash Player PlugIn version information
+function GetSwfVer(){
+ // NS/Opera version >= 3 check for Flash plugin in plugin array
+ var flashVer = -1;
+
+ if (navigator.plugins != null && navigator.plugins.length > 0) {
+ if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
+ var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
+ var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
+ var descArray = flashDescription.split(" ");
+ var tempArrayMajor = descArray[2].split(".");
+ var versionMajor = tempArrayMajor[0];
+ var versionMinor = tempArrayMajor[1];
+ if ( descArray[3] != "" ) {
+ tempArrayMinor = descArray[3].split("r");
+ } else {
+ tempArrayMinor = descArray[4].split("r");
+ }
+ var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
+ var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
+ }
+ }
+ // MSN/WebTV 2.6 supports Flash 4
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
+ // WebTV 2.5 supports Flash 3
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
+ // older WebTV supports Flash 2
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
+ else if ( isIE && isWin && !isOpera ) {
+ flashVer = ControlVersion();
+ }
+ return flashVer;
+}
+
+// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
+function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
+{
+ versionStr = GetSwfVer();
+ if (versionStr == -1 ) {
+ return false;
+ } else if (versionStr != 0) {
+ if(isIE && isWin && !isOpera) {
+ // Given "WIN 2,0,0,11"
+ tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"]
+ tempString = tempArray[1]; // "2,0,0,11"
+ versionArray = tempString.split(","); // ['2', '0', '0', '11']
+ } else {
+ versionArray = versionStr.split(".");
+ }
+ var versionMajor = versionArray[0];
+ var versionMinor = versionArray[1];
+ var versionRevision = versionArray[2];
+
+ // is the major.revision >= requested major.revision AND the minor version >= requested minor
+ if (versionMajor > parseFloat(reqMajorVer)) {
+ return true;
+ } else if (versionMajor == parseFloat(reqMajorVer)) {
+ if (versionMinor > parseFloat(reqMinorVer))
+ return true;
+ else if (versionMinor == parseFloat(reqMinorVer)) {
+ if (versionRevision >= parseFloat(reqRevision))
+ return true;
+ }
+ }
+ return false;
+ }
+}
+
+function AC_AddExtension(src, ext)
+{
+ if (src.indexOf('?') != -1)
+ return src.replace(/\?/, ext+'?');
+ else
+ return src + ext;
+}
+
+function AC_Generateobj(objAttrs, params, embedAttrs)
+{
+ var str = '';
+ if (isIE && isWin && !isOpera)
+ {
+ str += '<object ';
+ for (var i in objAttrs)
+ str += i + '="' + objAttrs[i] + '" ';
+ for (var i in params)
+ str += '><param name="' + i + '" value="' + params[i] + '" /> ';
+ str += '></object>';
+ } else {
+ str += '<embed ';
+ for (var i in embedAttrs)
+ str += i + '="' + embedAttrs[i] + '" ';
+ str += '> </embed>';
+ }
+
+ document.write(str);
+}
+
+function AC_FL_RunContent(){
+ var ret =
+ AC_GetArgs
+ ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
+ , "application/x-shockwave-flash"
+ );
+ AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
+}
+
+function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
+ var ret = new Object();
+ ret.embedAttrs = new Object();
+ ret.params = new Object();
+ ret.objAttrs = new Object();
+ for (var i=0; i < args.length; i=i+2){
+ var currArg = args[i].toLowerCase();
+
+ switch (currArg){
+ case "classid":
+ break;
+ case "pluginspage":
+ ret.embedAttrs[args[i]] = args[i+1];
+ break;
+ case "src":
+ case "movie":
+ args[i+1] = AC_AddExtension(args[i+1], ext);
+ ret.embedAttrs["src"] = args[i+1];
+ ret.params[srcParamName] = args[i+1];
+ break;
+ case "onafterupdate":
+ case "onbeforeupdate":
+ case "onblur":
+ case "oncellchange":
+ case "onclick":
+ case "ondblClick":
+ case "ondrag":
+ case "ondragend":
+ case "ondragenter":
+ case "ondragleave":
+ case "ondragover":
+ case "ondrop":
+ case "onfinish":
+ case "onfocus":
+ case "onhelp":
+ case "onmousedown":
+ case "onmouseup":
+ case "onmouseover":
+ case "onmousemove":
+ case "onmouseout":
+ case "onkeypress":
+ case "onkeydown":
+ case "onkeyup":
+ case "onload":
+ case "onlosecapture":
+ case "onpropertychange":
+ case "onreadystatechange":
+ case "onrowsdelete":
+ case "onrowenter":
+ case "onrowexit":
+ case "onrowsinserted":
+ case "onstart":
+ case "onscroll":
+ case "onbeforeeditfocus":
+ case "onactivate":
+ case "onbeforedeactivate":
+ case "ondeactivate":
+ case "type":
+ case "codebase":
+ case "id":
+ ret.objAttrs[args[i]] = args[i+1];
+ break;
+ case "width":
+ case "height":
+ case "align":
+ case "vspace":
+ case "hspace":
+ case "class":
+ case "title":
+ case "accesskey":
+ case "name":
+ case "tabindex":
+ ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
+ break;
+ default:
+ ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
+ }
+ }
+ ret.objAttrs["classid"] = classid;
+ if (mimeType) ret.embedAttrs["type"] = mimeType;
+ return ret;
+}
+
+
diff --git a/demos/address-book/protected/pages/flex/bin/history.js b/demos/address-book/protected/pages/flex/bin/history.js
index b0537ef1..7d37ea62 100644
--- a/demos/address-book/protected/pages/flex/bin/history.js
+++ b/demos/address-book/protected/pages/flex/bin/history.js
@@ -1,48 +1,48 @@
-// $Revision: 1.49 $
-// Vars
-Vars = function(qStr) {
- this.numVars = 0;
- if(qStr != null) {
- var nameValue, name;
- var pairs = qStr.split('&');
- var pairLen = pairs.length;
- for(var i = 0; i < pairLen; i++) {
- var pair = pairs[i];
- if( (pair.indexOf('=')!= -1) && (pair.length > 3) ) {
- var nameValue = pair.split('=');
- var name = nameValue[0];
- var value = nameValue[1];
- if(this[name] == null && name.length > 0 && value.length > 0) {
- this[name] = value;
- this.numVars++;
- }
- }
- }
- }
-}
-Vars.prototype.toString = function(pre) {
- var result = '';
- if(pre == null) { pre = ''; }
- for(var i in this) {
- if(this[i] != null && typeof(this[i]) != 'object' && typeof(this[i]) != 'function' && i != 'numVars') {
- result += pre + i + '=' + this[i] + '&';
- }
- }
- if(result.length > 0) result = result.substr(0, result.length-1);
- return result;
-}
-function getSearch(wRef) {
- var searchStr = '';
- if(wRef.location.search.length > 1) {
- searchStr = new String(wRef.location.search);
- searchStr = searchStr.substring(1, searchStr.length);
- }
- return searchStr;
-}
-var lc_id = Math.floor(Math.random() * 100000).toString(16);
-if (this != top)
-{
- top.Vars = Vars;
- top.getSearch = getSearch;
- top.lc_id = lc_id;
-}
+// $Revision: 1.49 $
+// Vars
+Vars = function(qStr) {
+ this.numVars = 0;
+ if(qStr != null) {
+ var nameValue, name;
+ var pairs = qStr.split('&');
+ var pairLen = pairs.length;
+ for(var i = 0; i < pairLen; i++) {
+ var pair = pairs[i];
+ if( (pair.indexOf('=')!= -1) && (pair.length > 3) ) {
+ var nameValue = pair.split('=');
+ var name = nameValue[0];
+ var value = nameValue[1];
+ if(this[name] == null && name.length > 0 && value.length > 0) {
+ this[name] = value;
+ this.numVars++;
+ }
+ }
+ }
+ }
+}
+Vars.prototype.toString = function(pre) {
+ var result = '';
+ if(pre == null) { pre = ''; }
+ for(var i in this) {
+ if(this[i] != null && typeof(this[i]) != 'object' && typeof(this[i]) != 'function' && i != 'numVars') {
+ result += pre + i + '=' + this[i] + '&';
+ }
+ }
+ if(result.length > 0) result = result.substr(0, result.length-1);
+ return result;
+}
+function getSearch(wRef) {
+ var searchStr = '';
+ if(wRef.location.search.length > 1) {
+ searchStr = new String(wRef.location.search);
+ searchStr = searchStr.substring(1, searchStr.length);
+ }
+ return searchStr;
+}
+var lc_id = Math.floor(Math.random() * 100000).toString(16);
+if (this != top)
+{
+ top.Vars = Vars;
+ top.getSearch = getSearch;
+ top.lc_id = lc_id;
+}
diff --git a/demos/address-book/protected/pages/flex/html-template/AC_OETags.js b/demos/address-book/protected/pages/flex/html-template/AC_OETags.js
index 157eb218..f72d7e29 100644
--- a/demos/address-book/protected/pages/flex/html-template/AC_OETags.js
+++ b/demos/address-book/protected/pages/flex/html-template/AC_OETags.js
@@ -1,269 +1,269 @@
-// Flash Player Version Detection - Rev 1.5
-// Detect Client Browser type
-// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
-var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
-var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
-var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
-
-function ControlVersion()
-{
- var version;
- var axo;
- var e;
-
- // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
-
- try {
- // version will be set for 7.X or greater players
- axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
- version = axo.GetVariable("$version");
- } catch (e) {
- }
-
- if (!version)
- {
- try {
- // version will be set for 6.X players only
- axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
-
- // installed player is some revision of 6.0
- // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
- // so we have to be careful.
-
- // default to the first public version
- version = "WIN 6,0,21,0";
-
- // throws if AllowScripAccess does not exist (introduced in 6.0r47)
- axo.AllowScriptAccess = "always";
-
- // safe to call for 6.0r47 or greater
- version = axo.GetVariable("$version");
-
- } catch (e) {
- }
- }
-
- if (!version)
- {
- try {
- // version will be set for 4.X or 5.X player
- axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
- version = axo.GetVariable("$version");
- } catch (e) {
- }
- }
-
- if (!version)
- {
- try {
- // version will be set for 3.X player
- axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
- version = "WIN 3,0,18,0";
- } catch (e) {
- }
- }
-
- if (!version)
- {
- try {
- // version will be set for 2.X player
- axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
- version = "WIN 2,0,0,11";
- } catch (e) {
- version = -1;
- }
- }
-
- return version;
-}
-
-// JavaScript helper required to detect Flash Player PlugIn version information
-function GetSwfVer(){
- // NS/Opera version >= 3 check for Flash plugin in plugin array
- var flashVer = -1;
-
- if (navigator.plugins != null && navigator.plugins.length > 0) {
- if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
- var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
- var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
- var descArray = flashDescription.split(" ");
- var tempArrayMajor = descArray[2].split(".");
- var versionMajor = tempArrayMajor[0];
- var versionMinor = tempArrayMajor[1];
- if ( descArray[3] != "" ) {
- tempArrayMinor = descArray[3].split("r");
- } else {
- tempArrayMinor = descArray[4].split("r");
- }
- var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
- var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
- }
- }
- // MSN/WebTV 2.6 supports Flash 4
- else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
- // WebTV 2.5 supports Flash 3
- else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
- // older WebTV supports Flash 2
- else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
- else if ( isIE && isWin && !isOpera ) {
- flashVer = ControlVersion();
- }
- return flashVer;
-}
-
-// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
-function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
-{
- versionStr = GetSwfVer();
- if (versionStr == -1 ) {
- return false;
- } else if (versionStr != 0) {
- if(isIE && isWin && !isOpera) {
- // Given "WIN 2,0,0,11"
- tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"]
- tempString = tempArray[1]; // "2,0,0,11"
- versionArray = tempString.split(","); // ['2', '0', '0', '11']
- } else {
- versionArray = versionStr.split(".");
- }
- var versionMajor = versionArray[0];
- var versionMinor = versionArray[1];
- var versionRevision = versionArray[2];
-
- // is the major.revision >= requested major.revision AND the minor version >= requested minor
- if (versionMajor > parseFloat(reqMajorVer)) {
- return true;
- } else if (versionMajor == parseFloat(reqMajorVer)) {
- if (versionMinor > parseFloat(reqMinorVer))
- return true;
- else if (versionMinor == parseFloat(reqMinorVer)) {
- if (versionRevision >= parseFloat(reqRevision))
- return true;
- }
- }
- return false;
- }
-}
-
-function AC_AddExtension(src, ext)
-{
- if (src.indexOf('?') != -1)
- return src.replace(/\?/, ext+'?');
- else
- return src + ext;
-}
-
-function AC_Generateobj(objAttrs, params, embedAttrs)
-{
- var str = '';
- if (isIE && isWin && !isOpera)
- {
- str += '<object ';
- for (var i in objAttrs)
- str += i + '="' + objAttrs[i] + '" ';
- for (var i in params)
- str += '><param name="' + i + '" value="' + params[i] + '" /> ';
- str += '></object>';
- } else {
- str += '<embed ';
- for (var i in embedAttrs)
- str += i + '="' + embedAttrs[i] + '" ';
- str += '> </embed>';
- }
-
- document.write(str);
-}
-
-function AC_FL_RunContent(){
- var ret =
- AC_GetArgs
- ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
- , "application/x-shockwave-flash"
- );
- AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
-}
-
-function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
- var ret = new Object();
- ret.embedAttrs = new Object();
- ret.params = new Object();
- ret.objAttrs = new Object();
- for (var i=0; i < args.length; i=i+2){
- var currArg = args[i].toLowerCase();
-
- switch (currArg){
- case "classid":
- break;
- case "pluginspage":
- ret.embedAttrs[args[i]] = args[i+1];
- break;
- case "src":
- case "movie":
- args[i+1] = AC_AddExtension(args[i+1], ext);
- ret.embedAttrs["src"] = args[i+1];
- ret.params[srcParamName] = args[i+1];
- break;
- case "onafterupdate":
- case "onbeforeupdate":
- case "onblur":
- case "oncellchange":
- case "onclick":
- case "ondblClick":
- case "ondrag":
- case "ondragend":
- case "ondragenter":
- case "ondragleave":
- case "ondragover":
- case "ondrop":
- case "onfinish":
- case "onfocus":
- case "onhelp":
- case "onmousedown":
- case "onmouseup":
- case "onmouseover":
- case "onmousemove":
- case "onmouseout":
- case "onkeypress":
- case "onkeydown":
- case "onkeyup":
- case "onload":
- case "onlosecapture":
- case "onpropertychange":
- case "onreadystatechange":
- case "onrowsdelete":
- case "onrowenter":
- case "onrowexit":
- case "onrowsinserted":
- case "onstart":
- case "onscroll":
- case "onbeforeeditfocus":
- case "onactivate":
- case "onbeforedeactivate":
- case "ondeactivate":
- case "type":
- case "codebase":
- case "id":
- ret.objAttrs[args[i]] = args[i+1];
- break;
- case "width":
- case "height":
- case "align":
- case "vspace":
- case "hspace":
- case "class":
- case "title":
- case "accesskey":
- case "name":
- case "tabindex":
- ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
- break;
- default:
- ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
- }
- }
- ret.objAttrs["classid"] = classid;
- if (mimeType) ret.embedAttrs["type"] = mimeType;
- return ret;
-}
-
-
+// Flash Player Version Detection - Rev 1.5
+// Detect Client Browser type
+// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
+var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
+var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
+var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
+
+function ControlVersion()
+{
+ var version;
+ var axo;
+ var e;
+
+ // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
+
+ try {
+ // version will be set for 7.X or greater players
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
+ version = axo.GetVariable("$version");
+ } catch (e) {
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 6.X players only
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
+
+ // installed player is some revision of 6.0
+ // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
+ // so we have to be careful.
+
+ // default to the first public version
+ version = "WIN 6,0,21,0";
+
+ // throws if AllowScripAccess does not exist (introduced in 6.0r47)
+ axo.AllowScriptAccess = "always";
+
+ // safe to call for 6.0r47 or greater
+ version = axo.GetVariable("$version");
+
+ } catch (e) {
+ }
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 4.X or 5.X player
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
+ version = axo.GetVariable("$version");
+ } catch (e) {
+ }
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 3.X player
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
+ version = "WIN 3,0,18,0";
+ } catch (e) {
+ }
+ }
+
+ if (!version)
+ {
+ try {
+ // version will be set for 2.X player
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+ version = "WIN 2,0,0,11";
+ } catch (e) {
+ version = -1;
+ }
+ }
+
+ return version;
+}
+
+// JavaScript helper required to detect Flash Player PlugIn version information
+function GetSwfVer(){
+ // NS/Opera version >= 3 check for Flash plugin in plugin array
+ var flashVer = -1;
+
+ if (navigator.plugins != null && navigator.plugins.length > 0) {
+ if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
+ var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
+ var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
+ var descArray = flashDescription.split(" ");
+ var tempArrayMajor = descArray[2].split(".");
+ var versionMajor = tempArrayMajor[0];
+ var versionMinor = tempArrayMajor[1];
+ if ( descArray[3] != "" ) {
+ tempArrayMinor = descArray[3].split("r");
+ } else {
+ tempArrayMinor = descArray[4].split("r");
+ }
+ var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
+ var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
+ }
+ }
+ // MSN/WebTV 2.6 supports Flash 4
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
+ // WebTV 2.5 supports Flash 3
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
+ // older WebTV supports Flash 2
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
+ else if ( isIE && isWin && !isOpera ) {
+ flashVer = ControlVersion();
+ }
+ return flashVer;
+}
+
+// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
+function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
+{
+ versionStr = GetSwfVer();
+ if (versionStr == -1 ) {
+ return false;
+ } else if (versionStr != 0) {
+ if(isIE && isWin && !isOpera) {
+ // Given "WIN 2,0,0,11"
+ tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"]
+ tempString = tempArray[1]; // "2,0,0,11"
+ versionArray = tempString.split(","); // ['2', '0', '0', '11']
+ } else {
+ versionArray = versionStr.split(".");
+ }
+ var versionMajor = versionArray[0];
+ var versionMinor = versionArray[1];
+ var versionRevision = versionArray[2];
+
+ // is the major.revision >= requested major.revision AND the minor version >= requested minor
+ if (versionMajor > parseFloat(reqMajorVer)) {
+ return true;
+ } else if (versionMajor == parseFloat(reqMajorVer)) {
+ if (versionMinor > parseFloat(reqMinorVer))
+ return true;
+ else if (versionMinor == parseFloat(reqMinorVer)) {
+ if (versionRevision >= parseFloat(reqRevision))
+ return true;
+ }
+ }
+ return false;
+ }
+}
+
+function AC_AddExtension(src, ext)
+{
+ if (src.indexOf('?') != -1)
+ return src.replace(/\?/, ext+'?');
+ else
+ return src + ext;
+}
+
+function AC_Generateobj(objAttrs, params, embedAttrs)
+{
+ var str = '';
+ if (isIE && isWin && !isOpera)
+ {
+ str += '<object ';
+ for (var i in objAttrs)
+ str += i + '="' + objAttrs[i] + '" ';
+ for (var i in params)
+ str += '><param name="' + i + '" value="' + params[i] + '" /> ';
+ str += '></object>';
+ } else {
+ str += '<embed ';
+ for (var i in embedAttrs)
+ str += i + '="' + embedAttrs[i] + '" ';
+ str += '> </embed>';
+ }
+
+ document.write(str);
+}
+
+function AC_FL_RunContent(){
+ var ret =
+ AC_GetArgs
+ ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
+ , "application/x-shockwave-flash"
+ );
+ AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
+}
+
+function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
+ var ret = new Object();
+ ret.embedAttrs = new Object();
+ ret.params = new Object();
+ ret.objAttrs = new Object();
+ for (var i=0; i < args.length; i=i+2){
+ var currArg = args[i].toLowerCase();
+
+ switch (currArg){
+ case "classid":
+ break;
+ case "pluginspage":
+ ret.embedAttrs[args[i]] = args[i+1];
+ break;
+ case "src":
+ case "movie":
+ args[i+1] = AC_AddExtension(args[i+1], ext);
+ ret.embedAttrs["src"] = args[i+1];
+ ret.params[srcParamName] = args[i+1];
+ break;
+ case "onafterupdate":
+ case "onbeforeupdate":
+ case "onblur":
+ case "oncellchange":
+ case "onclick":
+ case "ondblClick":
+ case "ondrag":
+ case "ondragend":
+ case "ondragenter":
+ case "ondragleave":
+ case "ondragover":
+ case "ondrop":
+ case "onfinish":
+ case "onfocus":
+ case "onhelp":
+ case "onmousedown":
+ case "onmouseup":
+ case "onmouseover":
+ case "onmousemove":
+ case "onmouseout":
+ case "onkeypress":
+ case "onkeydown":
+ case "onkeyup":
+ case "onload":
+ case "onlosecapture":
+ case "onpropertychange":
+ case "onreadystatechange":
+ case "onrowsdelete":
+ case "onrowenter":
+ case "onrowexit":
+ case "onrowsinserted":
+ case "onstart":
+ case "onscroll":
+ case "onbeforeeditfocus":
+ case "onactivate":
+ case "onbeforedeactivate":
+ case "ondeactivate":
+ case "type":
+ case "codebase":
+ case "id":
+ ret.objAttrs[args[i]] = args[i+1];
+ break;
+ case "width":
+ case "height":
+ case "align":
+ case "vspace":
+ case "hspace":
+ case "class":
+ case "title":
+ case "accesskey":
+ case "name":
+ case "tabindex":
+ ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
+ break;
+ default:
+ ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
+ }
+ }
+ ret.objAttrs["classid"] = classid;
+ if (mimeType) ret.embedAttrs["type"] = mimeType;
+ return ret;
+}
+
+
diff --git a/demos/address-book/protected/pages/flex/html-template/history.js b/demos/address-book/protected/pages/flex/html-template/history.js
index b0537ef1..7d37ea62 100644
--- a/demos/address-book/protected/pages/flex/html-template/history.js
+++ b/demos/address-book/protected/pages/flex/html-template/history.js
@@ -1,48 +1,48 @@
-// $Revision: 1.49 $
-// Vars
-Vars = function(qStr) {
- this.numVars = 0;
- if(qStr != null) {
- var nameValue, name;
- var pairs = qStr.split('&');
- var pairLen = pairs.length;
- for(var i = 0; i < pairLen; i++) {
- var pair = pairs[i];
- if( (pair.indexOf('=')!= -1) && (pair.length > 3) ) {
- var nameValue = pair.split('=');
- var name = nameValue[0];
- var value = nameValue[1];
- if(this[name] == null && name.length > 0 && value.length > 0) {
- this[name] = value;
- this.numVars++;
- }
- }
- }
- }
-}
-Vars.prototype.toString = function(pre) {
- var result = '';
- if(pre == null) { pre = ''; }
- for(var i in this) {
- if(this[i] != null && typeof(this[i]) != 'object' && typeof(this[i]) != 'function' && i != 'numVars') {
- result += pre + i + '=' + this[i] + '&';
- }
- }
- if(result.length > 0) result = result.substr(0, result.length-1);
- return result;
-}
-function getSearch(wRef) {
- var searchStr = '';
- if(wRef.location.search.length > 1) {
- searchStr = new String(wRef.location.search);
- searchStr = searchStr.substring(1, searchStr.length);
- }
- return searchStr;
-}
-var lc_id = Math.floor(Math.random() * 100000).toString(16);
-if (this != top)
-{
- top.Vars = Vars;
- top.getSearch = getSearch;
- top.lc_id = lc_id;
-}
+// $Revision: 1.49 $
+// Vars
+Vars = function(qStr) {
+ this.numVars = 0;
+ if(qStr != null) {
+ var nameValue, name;
+ var pairs = qStr.split('&');
+ var pairLen = pairs.length;
+ for(var i = 0; i < pairLen; i++) {
+ var pair = pairs[i];
+ if( (pair.indexOf('=')!= -1) && (pair.length > 3) ) {
+ var nameValue = pair.split('=');
+ var name = nameValue[0];
+ var value = nameValue[1];
+ if(this[name] == null && name.length > 0 && value.length > 0) {
+ this[name] = value;
+ this.numVars++;
+ }
+ }
+ }
+ }
+}
+Vars.prototype.toString = function(pre) {
+ var result = '';
+ if(pre == null) { pre = ''; }
+ for(var i in this) {
+ if(this[i] != null && typeof(this[i]) != 'object' && typeof(this[i]) != 'function' && i != 'numVars') {
+ result += pre + i + '=' + this[i] + '&';
+ }
+ }
+ if(result.length > 0) result = result.substr(0, result.length-1);
+ return result;
+}
+function getSearch(wRef) {
+ var searchStr = '';
+ if(wRef.location.search.length > 1) {
+ searchStr = new String(wRef.location.search);
+ searchStr = searchStr.substring(1, searchStr.length);
+ }
+ return searchStr;
+}
+var lc_id = Math.floor(Math.random() * 100000).toString(16);
+if (this != top)
+{
+ top.Vars = Vars;
+ top.getSearch = getSearch;
+ top.lc_id = lc_id;
+}
diff --git a/demos/blog-tutorial/index.php b/demos/blog-tutorial/index.php
index 43c0b436..6efff1af 100644
--- a/demos/blog-tutorial/index.php
+++ b/demos/blog-tutorial/index.php
@@ -1,18 +1,18 @@
-<?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();
-
+<?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();
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/common/InfoBox.php b/demos/blog-tutorial/protected/common/InfoBox.php
index 271ce1e7..97b66067 100644
--- a/demos/blog-tutorial/protected/common/InfoBox.php
+++ b/demos/blog-tutorial/protected/common/InfoBox.php
@@ -1,13 +1,13 @@
-<?php
-
-class InfoBox extends TControl
-{
- public function render($writer)
- {
- $writer->write("<div class=\"info\"><b class=\"tip\">Info:</b>\n");
- $body=$this->renderChildren($writer);
- $writer->write("</div>");
- }
-}
-
+<?php
+
+class InfoBox extends TControl
+{
+ public function render($writer)
+ {
+ $writer->write("<div class=\"info\"><b class=\"tip\">Info:</b>\n");
+ $body=$this->renderChildren($writer);
+ $writer->write("</div>");
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/common/NoteBox.php b/demos/blog-tutorial/protected/common/NoteBox.php
index f5123380..90d5faab 100644
--- a/demos/blog-tutorial/protected/common/NoteBox.php
+++ b/demos/blog-tutorial/protected/common/NoteBox.php
@@ -1,13 +1,13 @@
-<?php
-
-class NoteBox extends TControl
-{
- public function render($writer)
- {
- $writer->write("<div class=\"note\"><b class=\"tip\">Note:</b>\n");
- $body=$this->renderChildren($writer);
- $writer->write("</div>");
- }
-}
-
+<?php
+
+class NoteBox extends TControl
+{
+ public function render($writer)
+ {
+ $writer->write("<div class=\"note\"><b class=\"tip\">Note:</b>\n");
+ $body=$this->renderChildren($writer);
+ $writer->write("</div>");
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/common/TipBox.php b/demos/blog-tutorial/protected/common/TipBox.php
index 2464a61a..58f79db8 100644
--- a/demos/blog-tutorial/protected/common/TipBox.php
+++ b/demos/blog-tutorial/protected/common/TipBox.php
@@ -1,13 +1,13 @@
-<?php
-
-class TipBox extends TControl
-{
- public function render($writer)
- {
- $writer->write("<div class=\"tip\"><b class=\"tip\">Tip:</b>\n");
- $body=$this->renderChildren($writer);
- $writer->write("</div>");
- }
-}
-
+<?php
+
+class TipBox extends TControl
+{
+ public function render($writer)
+ {
+ $writer->write("<div class=\"tip\"><b class=\"tip\">Tip:</b>\n");
+ $body=$this->renderChildren($writer);
+ $writer->write("</div>");
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/protected/common/TopicList.php b/demos/blog-tutorial/protected/common/TopicList.php
index ce827cc0..eb5976a9 100644
--- a/demos/blog-tutorial/protected/common/TopicList.php
+++ b/demos/blog-tutorial/protected/common/TopicList.php
@@ -1,8 +1,8 @@
-<?php
-
-class TopicList extends TTemplateControl
-{
-
-}
-
+<?php
+
+class TopicList extends TTemplateControl
+{
+
+}
+
?> \ 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 4b5890de..d6ea146d 100644
--- a/demos/blog-tutorial/protected/layout/MainLayout.php
+++ b/demos/blog-tutorial/protected/layout/MainLayout.php
@@ -1,6 +1,6 @@
-<?php
-
-class MainLayout extends TTemplateControl
+<?php
+
+class MainLayout extends TTemplateControl
{
public function onLoad($param)
@@ -24,7 +24,7 @@ class MainLayout extends TTemplateControl
if($this->Application->Globalization->Culture == $params['lang'])
$item->link->CssClass="active";
}
- }
-}
-
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day1/blog/index.php b/demos/blog-tutorial/samples/day1/blog/index.php
index 7ccffe49..bffafde2 100644
--- a/demos/blog-tutorial/samples/day1/blog/index.php
+++ b/demos/blog-tutorial/samples/day1/blog/index.php
@@ -1,22 +1,22 @@
-<?php
-
-// The following directory checks may be removed if performance is required
-$basePath=dirname(__FILE__);
-$frameworkPath=$basePath.'/../../../../../framework/prado.php';
-$assetsPath=$basePath.'/assets';
-$runtimePath=$basePath.'/protected/runtime';
-
-if(!is_file($frameworkPath))
- die("Unable to find prado framework path $frameworkPath.");
-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();
-
+<?php
+
+// The following directory checks may be removed if performance is required
+$basePath=dirname(__FILE__);
+$frameworkPath=$basePath.'/../../../../../framework/prado.php';
+$assetsPath=$basePath.'/assets';
+$runtimePath=$basePath.'/protected/runtime';
+
+if(!is_file($frameworkPath))
+ die("Unable to find prado framework path $frameworkPath.");
+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();
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day1/blog/protected/layouts/MainLayout.php b/demos/blog-tutorial/samples/day1/blog/protected/layouts/MainLayout.php
index 253d6c03..c966ba85 100644
--- a/demos/blog-tutorial/samples/day1/blog/protected/layouts/MainLayout.php
+++ b/demos/blog-tutorial/samples/day1/blog/protected/layouts/MainLayout.php
@@ -1,7 +1,7 @@
-<?php
-
-class MainLayout extends TTemplateControl
-{
-}
-
+<?php
+
+class MainLayout extends TTemplateControl
+{
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day1/blog/protected/pages/Contact.php b/demos/blog-tutorial/samples/day1/blog/protected/pages/Contact.php
index b6ce575e..77d7374a 100644
--- a/demos/blog-tutorial/samples/day1/blog/protected/pages/Contact.php
+++ b/demos/blog-tutorial/samples/day1/blog/protected/pages/Contact.php
@@ -1,30 +1,30 @@
-<?php
-
-class Contact extends TPage
-{
- /**
- * Event handler for the OnClick event of the submit button.
- * @param TButton the button triggering the event
- * @param TEventParameter event parameter (null here)
- */
- public function submitButtonClicked($sender, $param)
- {
- if ($this->IsValid) // check if input validation is successful
- {
- // obtain the user name, email, feedback from the textboxes
- $name = $this->Name->Text;
- $email = $this->Email->Text;
- $feedback = $this->Feedback->Text;
-
- // send an email to administrator with the above information
- $this->mailFeedback($name, $email, $feedback);
- }
- }
-
- protected function mailFeedback($name, $email, $feedback)
- {
- // implementation of sending the feedback email
- }
-}
-
+<?php
+
+class Contact extends TPage
+{
+ /**
+ * Event handler for the OnClick event of the submit button.
+ * @param TButton the button triggering the event
+ * @param TEventParameter event parameter (null here)
+ */
+ public function submitButtonClicked($sender, $param)
+ {
+ if ($this->IsValid) // check if input validation is successful
+ {
+ // obtain the user name, email, feedback from the textboxes
+ $name = $this->Name->Text;
+ $email = $this->Email->Text;
+ $feedback = $this->Feedback->Text;
+
+ // send an email to administrator with the above information
+ $this->mailFeedback($name, $email, $feedback);
+ }
+ }
+
+ protected function mailFeedback($name, $email, $feedback)
+ {
+ // implementation of sending the feedback email
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day2/blog/index.php b/demos/blog-tutorial/samples/day2/blog/index.php
index 7ccffe49..bffafde2 100644
--- a/demos/blog-tutorial/samples/day2/blog/index.php
+++ b/demos/blog-tutorial/samples/day2/blog/index.php
@@ -1,22 +1,22 @@
-<?php
-
-// The following directory checks may be removed if performance is required
-$basePath=dirname(__FILE__);
-$frameworkPath=$basePath.'/../../../../../framework/prado.php';
-$assetsPath=$basePath.'/assets';
-$runtimePath=$basePath.'/protected/runtime';
-
-if(!is_file($frameworkPath))
- die("Unable to find prado framework path $frameworkPath.");
-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();
-
+<?php
+
+// The following directory checks may be removed if performance is required
+$basePath=dirname(__FILE__);
+$frameworkPath=$basePath.'/../../../../../framework/prado.php';
+$assetsPath=$basePath.'/assets';
+$runtimePath=$basePath.'/protected/runtime';
+
+if(!is_file($frameworkPath))
+ die("Unable to find prado framework path $frameworkPath.");
+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();
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day2/blog/protected/database/PostRecord.php b/demos/blog-tutorial/samples/day2/blog/protected/database/PostRecord.php
index 25702727..3407c09b 100644
--- a/demos/blog-tutorial/samples/day2/blog/protected/database/PostRecord.php
+++ b/demos/blog-tutorial/samples/day2/blog/protected/database/PostRecord.php
@@ -1,28 +1,28 @@
-<?php
-/**
- * Auto generated by prado-cli.php on 2007-04-07 10:44:20.
- */
-class PostRecord extends TActiveRecord
-{
- const TABLE='posts';
-
- public $post_id;
- public $author_id;
- public $create_time;
- public $title;
- public $content;
- public $status;
-
- public $author;
-
- public static $RELATIONS=array
- (
- 'author' => array(self::BELONGS_TO, 'UserRecord'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+/**
+ * Auto generated by prado-cli.php on 2007-04-07 10:44:20.
+ */
+class PostRecord extends TActiveRecord
+{
+ const TABLE='posts';
+
+ public $post_id;
+ public $author_id;
+ public $create_time;
+ public $title;
+ public $content;
+ public $status;
+
+ public $author;
+
+ public static $RELATIONS=array
+ (
+ 'author' => array(self::BELONGS_TO, 'UserRecord'),
+ );
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day2/blog/protected/database/UserRecord.php b/demos/blog-tutorial/samples/day2/blog/protected/database/UserRecord.php
index 2051e5de..021f8b09 100644
--- a/demos/blog-tutorial/samples/day2/blog/protected/database/UserRecord.php
+++ b/demos/blog-tutorial/samples/day2/blog/protected/database/UserRecord.php
@@ -1,28 +1,28 @@
-<?php
-/**
- * Auto generated by prado-cli.php on 2007-04-07 10:44:25.
- */
-class UserRecord extends TActiveRecord
-{
- const TABLE='users';
-
- public $username;
- public $email;
- public $password;
- public $role;
- public $first_name;
- public $last_name;
-
- public $posts=array();
-
- public static $RELATIONS=array
- (
- 'posts' => array(self::HAS_MANY, 'PostRecord'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+/**
+ * Auto generated by prado-cli.php on 2007-04-07 10:44:25.
+ */
+class UserRecord extends TActiveRecord
+{
+ const TABLE='users';
+
+ public $username;
+ public $email;
+ public $password;
+ public $role;
+ public $first_name;
+ public $last_name;
+
+ public $posts=array();
+
+ public static $RELATIONS=array
+ (
+ 'posts' => array(self::HAS_MANY, 'PostRecord'),
+ );
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day2/blog/protected/layouts/MainLayout.php b/demos/blog-tutorial/samples/day2/blog/protected/layouts/MainLayout.php
index 253d6c03..c966ba85 100644
--- a/demos/blog-tutorial/samples/day2/blog/protected/layouts/MainLayout.php
+++ b/demos/blog-tutorial/samples/day2/blog/protected/layouts/MainLayout.php
@@ -1,7 +1,7 @@
-<?php
-
-class MainLayout extends TTemplateControl
-{
-}
-
+<?php
+
+class MainLayout extends TTemplateControl
+{
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day2/blog/protected/pages/Contact.php b/demos/blog-tutorial/samples/day2/blog/protected/pages/Contact.php
index b6ce575e..77d7374a 100644
--- a/demos/blog-tutorial/samples/day2/blog/protected/pages/Contact.php
+++ b/demos/blog-tutorial/samples/day2/blog/protected/pages/Contact.php
@@ -1,30 +1,30 @@
-<?php
-
-class Contact extends TPage
-{
- /**
- * Event handler for the OnClick event of the submit button.
- * @param TButton the button triggering the event
- * @param TEventParameter event parameter (null here)
- */
- public function submitButtonClicked($sender, $param)
- {
- if ($this->IsValid) // check if input validation is successful
- {
- // obtain the user name, email, feedback from the textboxes
- $name = $this->Name->Text;
- $email = $this->Email->Text;
- $feedback = $this->Feedback->Text;
-
- // send an email to administrator with the above information
- $this->mailFeedback($name, $email, $feedback);
- }
- }
-
- protected function mailFeedback($name, $email, $feedback)
- {
- // implementation of sending the feedback email
- }
-}
-
+<?php
+
+class Contact extends TPage
+{
+ /**
+ * Event handler for the OnClick event of the submit button.
+ * @param TButton the button triggering the event
+ * @param TEventParameter event parameter (null here)
+ */
+ public function submitButtonClicked($sender, $param)
+ {
+ if ($this->IsValid) // check if input validation is successful
+ {
+ // obtain the user name, email, feedback from the textboxes
+ $name = $this->Name->Text;
+ $email = $this->Email->Text;
+ $feedback = $this->Feedback->Text;
+
+ // send an email to administrator with the above information
+ $this->mailFeedback($name, $email, $feedback);
+ }
+ }
+
+ protected function mailFeedback($name, $email, $feedback)
+ {
+ // implementation of sending the feedback email
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day3/blog/index.php b/demos/blog-tutorial/samples/day3/blog/index.php
index 7ccffe49..bffafde2 100644
--- a/demos/blog-tutorial/samples/day3/blog/index.php
+++ b/demos/blog-tutorial/samples/day3/blog/index.php
@@ -1,22 +1,22 @@
-<?php
-
-// The following directory checks may be removed if performance is required
-$basePath=dirname(__FILE__);
-$frameworkPath=$basePath.'/../../../../../framework/prado.php';
-$assetsPath=$basePath.'/assets';
-$runtimePath=$basePath.'/protected/runtime';
-
-if(!is_file($frameworkPath))
- die("Unable to find prado framework path $frameworkPath.");
-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();
-
+<?php
+
+// The following directory checks may be removed if performance is required
+$basePath=dirname(__FILE__);
+$frameworkPath=$basePath.'/../../../../../framework/prado.php';
+$assetsPath=$basePath.'/assets';
+$runtimePath=$basePath.'/protected/runtime';
+
+if(!is_file($frameworkPath))
+ die("Unable to find prado framework path $frameworkPath.");
+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();
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day3/blog/protected/BlogUser.php b/demos/blog-tutorial/samples/day3/blog/protected/BlogUser.php
index 6b9e0a23..4f094a0c 100644
--- a/demos/blog-tutorial/samples/day3/blog/protected/BlogUser.php
+++ b/demos/blog-tutorial/samples/day3/blog/protected/BlogUser.php
@@ -1,59 +1,59 @@
-<?php
-
-// Include TDbUserManager.php file which defines TDbUser
-Prado::using('System.Security.TDbUserManager');
-
-/**
- * BlogUser Class.
- * BlogUser represents the user data that needs to be kept in session.
- * Default implementation keeps username and role information.
- */
-class BlogUser extends TDbUser
-{
- /**
- * Creates a BlogUser object based on the specified username.
- * This method is required by TDbUser. It checks the database
- * to see if the specified username is there. If so, a BlogUser
- * object is created and initialized.
- * @param string the specified username
- * @return BlogUser the user object, null if username is invalid.
- */
- public function createUser($username)
- {
- // use UserRecord Active Record to look for the specified username
- $userRecord=UserRecord::finder()->findByPk($username);
- if($userRecord instanceof UserRecord) // if found
- {
- $user=new BlogUser($this->Manager);
- $user->Name=$username; // set username
- $user->Roles=($userRecord->role==1?'admin':'user'); // set role
- $user->IsGuest=false; // the user is not a guest
- return $user;
- }
- else
- return null;
- }
-
- /**
- * Checks if the specified (username, password) is valid.
- * This method is required by TDbUser.
- * @param string username
- * @param string password
- * @return boolean whether the username and password are valid.
- */
- public function validateUser($username,$password)
- {
- // use UserRecord Active Record to look for the (username, password) pair.
- return UserRecord::finder()->findBy_username_AND_password($username,$password)!==null;
- }
-
- /**
- * @return boolean whether this user is an administrator.
- */
- public function getIsAdmin()
- {
- return $this->isInRole('admin');
- }
-}
-
+<?php
+
+// Include TDbUserManager.php file which defines TDbUser
+Prado::using('System.Security.TDbUserManager');
+
+/**
+ * BlogUser Class.
+ * BlogUser represents the user data that needs to be kept in session.
+ * Default implementation keeps username and role information.
+ */
+class BlogUser extends TDbUser
+{
+ /**
+ * Creates a BlogUser object based on the specified username.
+ * This method is required by TDbUser. It checks the database
+ * to see if the specified username is there. If so, a BlogUser
+ * object is created and initialized.
+ * @param string the specified username
+ * @return BlogUser the user object, null if username is invalid.
+ */
+ public function createUser($username)
+ {
+ // use UserRecord Active Record to look for the specified username
+ $userRecord=UserRecord::finder()->findByPk($username);
+ if($userRecord instanceof UserRecord) // if found
+ {
+ $user=new BlogUser($this->Manager);
+ $user->Name=$username; // set username
+ $user->Roles=($userRecord->role==1?'admin':'user'); // set role
+ $user->IsGuest=false; // the user is not a guest
+ return $user;
+ }
+ else
+ return null;
+ }
+
+ /**
+ * Checks if the specified (username, password) is valid.
+ * This method is required by TDbUser.
+ * @param string username
+ * @param string password
+ * @return boolean whether the username and password are valid.
+ */
+ public function validateUser($username,$password)
+ {
+ // use UserRecord Active Record to look for the (username, password) pair.
+ return UserRecord::finder()->findBy_username_AND_password($username,$password)!==null;
+ }
+
+ /**
+ * @return boolean whether this user is an administrator.
+ */
+ public function getIsAdmin()
+ {
+ return $this->isInRole('admin');
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day3/blog/protected/database/PostRecord.php b/demos/blog-tutorial/samples/day3/blog/protected/database/PostRecord.php
index 25702727..3407c09b 100644
--- a/demos/blog-tutorial/samples/day3/blog/protected/database/PostRecord.php
+++ b/demos/blog-tutorial/samples/day3/blog/protected/database/PostRecord.php
@@ -1,28 +1,28 @@
-<?php
-/**
- * Auto generated by prado-cli.php on 2007-04-07 10:44:20.
- */
-class PostRecord extends TActiveRecord
-{
- const TABLE='posts';
-
- public $post_id;
- public $author_id;
- public $create_time;
- public $title;
- public $content;
- public $status;
-
- public $author;
-
- public static $RELATIONS=array
- (
- 'author' => array(self::BELONGS_TO, 'UserRecord'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+/**
+ * Auto generated by prado-cli.php on 2007-04-07 10:44:20.
+ */
+class PostRecord extends TActiveRecord
+{
+ const TABLE='posts';
+
+ public $post_id;
+ public $author_id;
+ public $create_time;
+ public $title;
+ public $content;
+ public $status;
+
+ public $author;
+
+ public static $RELATIONS=array
+ (
+ 'author' => array(self::BELONGS_TO, 'UserRecord'),
+ );
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day3/blog/protected/database/UserRecord.php b/demos/blog-tutorial/samples/day3/blog/protected/database/UserRecord.php
index 2051e5de..021f8b09 100644
--- a/demos/blog-tutorial/samples/day3/blog/protected/database/UserRecord.php
+++ b/demos/blog-tutorial/samples/day3/blog/protected/database/UserRecord.php
@@ -1,28 +1,28 @@
-<?php
-/**
- * Auto generated by prado-cli.php on 2007-04-07 10:44:25.
- */
-class UserRecord extends TActiveRecord
-{
- const TABLE='users';
-
- public $username;
- public $email;
- public $password;
- public $role;
- public $first_name;
- public $last_name;
-
- public $posts=array();
-
- public static $RELATIONS=array
- (
- 'posts' => array(self::HAS_MANY, 'PostRecord'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+/**
+ * Auto generated by prado-cli.php on 2007-04-07 10:44:25.
+ */
+class UserRecord extends TActiveRecord
+{
+ const TABLE='users';
+
+ public $username;
+ public $email;
+ public $password;
+ public $role;
+ public $first_name;
+ public $last_name;
+
+ public $posts=array();
+
+ public static $RELATIONS=array
+ (
+ 'posts' => array(self::HAS_MANY, 'PostRecord'),
+ );
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day3/blog/protected/layouts/MainLayout.php b/demos/blog-tutorial/samples/day3/blog/protected/layouts/MainLayout.php
index 46c1483d..f605f75c 100644
--- a/demos/blog-tutorial/samples/day3/blog/protected/layouts/MainLayout.php
+++ b/demos/blog-tutorial/samples/day3/blog/protected/layouts/MainLayout.php
@@ -1,19 +1,19 @@
-<?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);
- }
-}
-
+<?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);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day3/blog/protected/pages/Contact.php b/demos/blog-tutorial/samples/day3/blog/protected/pages/Contact.php
index b6ce575e..77d7374a 100644
--- a/demos/blog-tutorial/samples/day3/blog/protected/pages/Contact.php
+++ b/demos/blog-tutorial/samples/day3/blog/protected/pages/Contact.php
@@ -1,30 +1,30 @@
-<?php
-
-class Contact extends TPage
-{
- /**
- * Event handler for the OnClick event of the submit button.
- * @param TButton the button triggering the event
- * @param TEventParameter event parameter (null here)
- */
- public function submitButtonClicked($sender, $param)
- {
- if ($this->IsValid) // check if input validation is successful
- {
- // obtain the user name, email, feedback from the textboxes
- $name = $this->Name->Text;
- $email = $this->Email->Text;
- $feedback = $this->Feedback->Text;
-
- // send an email to administrator with the above information
- $this->mailFeedback($name, $email, $feedback);
- }
- }
-
- protected function mailFeedback($name, $email, $feedback)
- {
- // implementation of sending the feedback email
- }
-}
-
+<?php
+
+class Contact extends TPage
+{
+ /**
+ * Event handler for the OnClick event of the submit button.
+ * @param TButton the button triggering the event
+ * @param TEventParameter event parameter (null here)
+ */
+ public function submitButtonClicked($sender, $param)
+ {
+ if ($this->IsValid) // check if input validation is successful
+ {
+ // obtain the user name, email, feedback from the textboxes
+ $name = $this->Name->Text;
+ $email = $this->Email->Text;
+ $feedback = $this->Feedback->Text;
+
+ // send an email to administrator with the above information
+ $this->mailFeedback($name, $email, $feedback);
+ }
+ }
+
+ protected function mailFeedback($name, $email, $feedback)
+ {
+ // implementation of sending the feedback email
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day3/blog/protected/pages/users/AdminUser.php b/demos/blog-tutorial/samples/day3/blog/protected/pages/users/AdminUser.php
index ad8f6e3d..ad668e1a 100644
--- a/demos/blog-tutorial/samples/day3/blog/protected/pages/users/AdminUser.php
+++ b/demos/blog-tutorial/samples/day3/blog/protected/pages/users/AdminUser.php
@@ -1,36 +1,36 @@
-<?php
-
-class AdminUser extends TPage
-{
- /**
- * Populates the datagrid with user lists.
- * This method is invoked by the framework when initializing the page
- * @param mixed event parameter
- */
- public function onInit($param)
- {
- parent::onInit($param);
- // fetches all data account information
- $this->UserGrid->DataSource=UserRecord::finder()->findAll();
- // binds the data to interface components
- $this->UserGrid->dataBind();
- }
-
- /**
- * Deletes a specified user record.
- * This method responds to the datagrid's OnDeleteCommand event.
- * @param TDataGrid the event sender
- * @param TDataGridCommandEventParameter the event parameter
- */
- public function deleteButtonClicked($sender,$param)
- {
- // obtains the datagrid item that contains the clicked delete button
- $item=$param->Item;
- // obtains the primary key corresponding to the datagrid item
- $username=$this->UserGrid->DataKeys[$item->ItemIndex];
- // deletes the user record with the specified username primary key
- UserRecord::finder()->deleteByPk($username);
- }
-}
-
+<?php
+
+class AdminUser extends TPage
+{
+ /**
+ * Populates the datagrid with user lists.
+ * This method is invoked by the framework when initializing the page
+ * @param mixed event parameter
+ */
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ // fetches all data account information
+ $this->UserGrid->DataSource=UserRecord::finder()->findAll();
+ // binds the data to interface components
+ $this->UserGrid->dataBind();
+ }
+
+ /**
+ * Deletes a specified user record.
+ * This method responds to the datagrid's OnDeleteCommand event.
+ * @param TDataGrid the event sender
+ * @param TDataGridCommandEventParameter the event parameter
+ */
+ public function deleteButtonClicked($sender,$param)
+ {
+ // obtains the datagrid item that contains the clicked delete button
+ $item=$param->Item;
+ // obtains the primary key corresponding to the datagrid item
+ $username=$this->UserGrid->DataKeys[$item->ItemIndex];
+ // deletes the user record with the specified username primary key
+ UserRecord::finder()->deleteByPk($username);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day3/blog/protected/pages/users/EditUser.php b/demos/blog-tutorial/samples/day3/blog/protected/pages/users/EditUser.php
index 81538c33..f8c61463 100644
--- a/demos/blog-tutorial/samples/day3/blog/protected/pages/users/EditUser.php
+++ b/demos/blog-tutorial/samples/day3/blog/protected/pages/users/EditUser.php
@@ -1,83 +1,83 @@
-<?php
-
-class EditUser extends TPage
-{
- /**
- * Initializes the inputs with existing user data.
- * This method is invoked by the framework when the page is being initialized.
- * @param mixed event parameter
- */
- public function onInit($param)
- {
- parent::onInit($param);
- if(!$this->IsPostBack) // if the page is initially requested
- {
- // Retrieves the existing user data. This is equivalent to:
- // $userRecord=$this->getUserRecord();
- $userRecord=$this->UserRecord;
-
- // Populates the input controls with the existing user data
- $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;
- }
- }
-
- /**
- * Saves the user account if all inputs are valid.
- * This method responds to the OnClick event of the "save" button.
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function saveButtonClicked($sender,$param)
- {
- if($this->IsValid) // when all validations succeed
- {
- // Retrieves the existing user data. This is equivalent to:
- $userRecord=$this->UserRecord;
-
- // Fetches the input data
- $userRecord->username=$this->Username->Text;
- // update password when the input is not empty
- if(!empty($this->Password->Text))
- $userRecord->password=$this->Password->Text;
- $userRecord->email=$this->Email->Text;
- // update the role if the current user is an administrator
- if($this->User->IsAdmin)
- $userRecord->role=(int)$this->Role->SelectedValue;
- $userRecord->first_name=$this->FirstName->Text;
- $userRecord->last_name=$this->LastName->Text;
-
- // saves to the database via Active Record mechanism
- $userRecord->save();
-
- // redirects the browser to the homepage
- $this->Response->redirect($this->Service->DefaultPageUrl);
- }
- }
-
- /**
- * Returns the user data to be editted.
- * @return UserRecord the user data to be editted.
- * @throws THttpException if the user data is not found.
- */
- protected function getUserRecord()
- {
- // the user to be editted is the currently logged-in user
- $username=$this->User->Name;
- // if the 'username' GET var is not empty and the current user
- // is an administrator, we use the GET var value instead.
- if($this->User->IsAdmin && $this->Request['username']!==null)
- $username=$this->Request['username'];
-
- // use Active Record to look for the specified username
- $userRecord=UserRecord::finder()->findByPk($username);
- if(!($userRecord instanceof UserRecord))
- throw new THttpException(500,'Username is invalid.');
- return $userRecord;
- }
-}
-
+<?php
+
+class EditUser extends TPage
+{
+ /**
+ * Initializes the inputs with existing user data.
+ * This method is invoked by the framework when the page is being initialized.
+ * @param mixed event parameter
+ */
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ if(!$this->IsPostBack) // if the page is initially requested
+ {
+ // Retrieves the existing user data. This is equivalent to:
+ // $userRecord=$this->getUserRecord();
+ $userRecord=$this->UserRecord;
+
+ // Populates the input controls with the existing user data
+ $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;
+ }
+ }
+
+ /**
+ * Saves the user account if all inputs are valid.
+ * This method responds to the OnClick event of the "save" button.
+ * @param mixed event sender
+ * @param mixed event parameter
+ */
+ public function saveButtonClicked($sender,$param)
+ {
+ if($this->IsValid) // when all validations succeed
+ {
+ // Retrieves the existing user data. This is equivalent to:
+ $userRecord=$this->UserRecord;
+
+ // Fetches the input data
+ $userRecord->username=$this->Username->Text;
+ // update password when the input is not empty
+ if(!empty($this->Password->Text))
+ $userRecord->password=$this->Password->Text;
+ $userRecord->email=$this->Email->Text;
+ // update the role if the current user is an administrator
+ if($this->User->IsAdmin)
+ $userRecord->role=(int)$this->Role->SelectedValue;
+ $userRecord->first_name=$this->FirstName->Text;
+ $userRecord->last_name=$this->LastName->Text;
+
+ // saves to the database via Active Record mechanism
+ $userRecord->save();
+
+ // redirects the browser to the homepage
+ $this->Response->redirect($this->Service->DefaultPageUrl);
+ }
+ }
+
+ /**
+ * Returns the user data to be editted.
+ * @return UserRecord the user data to be editted.
+ * @throws THttpException if the user data is not found.
+ */
+ protected function getUserRecord()
+ {
+ // the user to be editted is the currently logged-in user
+ $username=$this->User->Name;
+ // if the 'username' GET var is not empty and the current user
+ // is an administrator, we use the GET var value instead.
+ if($this->User->IsAdmin && $this->Request['username']!==null)
+ $username=$this->Request['username'];
+
+ // use Active Record to look for the specified username
+ $userRecord=UserRecord::finder()->findByPk($username);
+ if(!($userRecord instanceof UserRecord))
+ throw new THttpException(500,'Username is invalid.');
+ return $userRecord;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day3/blog/protected/pages/users/LoginUser.php b/demos/blog-tutorial/samples/day3/blog/protected/pages/users/LoginUser.php
index a0955490..407906ae 100644
--- a/demos/blog-tutorial/samples/day3/blog/protected/pages/users/LoginUser.php
+++ b/demos/blog-tutorial/samples/day3/blog/protected/pages/users/LoginUser.php
@@ -1,37 +1,37 @@
-<?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; // tell the validator that validation fails
- }
-
- /**
- * 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) // all validations succeed
- {
- // obtain the URL of the privileged page that the user wanted to visit originally
- $url=$this->Application->getModule('auth')->ReturnUrl;
- if(empty($url)) // the user accesses the login page directly
- $url=$this->Service->DefaultPageUrl;
- $this->Response->redirect($url);
- }
- }
-}
-
+<?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; // tell the validator that validation fails
+ }
+
+ /**
+ * 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) // all validations succeed
+ {
+ // obtain the URL of the privileged page that the user wanted to visit originally
+ $url=$this->Application->getModule('auth')->ReturnUrl;
+ if(empty($url)) // the user accesses the login page directly
+ $url=$this->Service->DefaultPageUrl;
+ $this->Response->redirect($url);
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day3/blog/protected/pages/users/NewUser.php b/demos/blog-tutorial/samples/day3/blog/protected/pages/users/NewUser.php
index 76e8cb88..3bf6768a 100644
--- a/demos/blog-tutorial/samples/day3/blog/protected/pages/users/NewUser.php
+++ b/demos/blog-tutorial/samples/day3/blog/protected/pages/users/NewUser.php
@@ -1,45 +1,45 @@
-<?php
-
-class NewUser extends TPage
-{
- /**
- * Checks whether the username exists in the database.
- * This method responds to the OnServerValidate event of username's custom validator.
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function checkUsername($sender,$param)
- {
- // valid if the username is not found in the database
- $param->IsValid=UserRecord::finder()->findByPk($this->Username->Text)===null;
- }
-
- /**
- * Creates a new user account if all inputs are valid.
- * This method responds to the OnClick event of the "create" button.
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function createButtonClicked($sender,$param)
- {
- if($this->IsValid) // when all validations succeed
- {
- // populates a UserRecord object with user inputs
- $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;
-
- // saves to the database via Active Record mechanism
- $userRecord->save();
-
- // redirects the browser to the homepage
- $this->Response->redirect($this->Service->DefaultPageUrl);
- }
- }
-}
-
+<?php
+
+class NewUser extends TPage
+{
+ /**
+ * Checks whether the username exists in the database.
+ * This method responds to the OnServerValidate event of username's custom validator.
+ * @param mixed event sender
+ * @param mixed event parameter
+ */
+ public function checkUsername($sender,$param)
+ {
+ // valid if the username is not found in the database
+ $param->IsValid=UserRecord::finder()->findByPk($this->Username->Text)===null;
+ }
+
+ /**
+ * Creates a new user account if all inputs are valid.
+ * This method responds to the OnClick event of the "create" button.
+ * @param mixed event sender
+ * @param mixed event parameter
+ */
+ public function createButtonClicked($sender,$param)
+ {
+ if($this->IsValid) // when all validations succeed
+ {
+ // populates a UserRecord object with user inputs
+ $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;
+
+ // saves to the database via Active Record mechanism
+ $userRecord->save();
+
+ // redirects the browser to the homepage
+ $this->Response->redirect($this->Service->DefaultPageUrl);
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day4/blog/index.php b/demos/blog-tutorial/samples/day4/blog/index.php
index 7ccffe49..bffafde2 100644
--- a/demos/blog-tutorial/samples/day4/blog/index.php
+++ b/demos/blog-tutorial/samples/day4/blog/index.php
@@ -1,22 +1,22 @@
-<?php
-
-// The following directory checks may be removed if performance is required
-$basePath=dirname(__FILE__);
-$frameworkPath=$basePath.'/../../../../../framework/prado.php';
-$assetsPath=$basePath.'/assets';
-$runtimePath=$basePath.'/protected/runtime';
-
-if(!is_file($frameworkPath))
- die("Unable to find prado framework path $frameworkPath.");
-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();
-
+<?php
+
+// The following directory checks may be removed if performance is required
+$basePath=dirname(__FILE__);
+$frameworkPath=$basePath.'/../../../../../framework/prado.php';
+$assetsPath=$basePath.'/assets';
+$runtimePath=$basePath.'/protected/runtime';
+
+if(!is_file($frameworkPath))
+ die("Unable to find prado framework path $frameworkPath.");
+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();
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day4/blog/protected/BlogUser.php b/demos/blog-tutorial/samples/day4/blog/protected/BlogUser.php
index 6b9e0a23..4f094a0c 100644
--- a/demos/blog-tutorial/samples/day4/blog/protected/BlogUser.php
+++ b/demos/blog-tutorial/samples/day4/blog/protected/BlogUser.php
@@ -1,59 +1,59 @@
-<?php
-
-// Include TDbUserManager.php file which defines TDbUser
-Prado::using('System.Security.TDbUserManager');
-
-/**
- * BlogUser Class.
- * BlogUser represents the user data that needs to be kept in session.
- * Default implementation keeps username and role information.
- */
-class BlogUser extends TDbUser
-{
- /**
- * Creates a BlogUser object based on the specified username.
- * This method is required by TDbUser. It checks the database
- * to see if the specified username is there. If so, a BlogUser
- * object is created and initialized.
- * @param string the specified username
- * @return BlogUser the user object, null if username is invalid.
- */
- public function createUser($username)
- {
- // use UserRecord Active Record to look for the specified username
- $userRecord=UserRecord::finder()->findByPk($username);
- if($userRecord instanceof UserRecord) // if found
- {
- $user=new BlogUser($this->Manager);
- $user->Name=$username; // set username
- $user->Roles=($userRecord->role==1?'admin':'user'); // set role
- $user->IsGuest=false; // the user is not a guest
- return $user;
- }
- else
- return null;
- }
-
- /**
- * Checks if the specified (username, password) is valid.
- * This method is required by TDbUser.
- * @param string username
- * @param string password
- * @return boolean whether the username and password are valid.
- */
- public function validateUser($username,$password)
- {
- // use UserRecord Active Record to look for the (username, password) pair.
- return UserRecord::finder()->findBy_username_AND_password($username,$password)!==null;
- }
-
- /**
- * @return boolean whether this user is an administrator.
- */
- public function getIsAdmin()
- {
- return $this->isInRole('admin');
- }
-}
-
+<?php
+
+// Include TDbUserManager.php file which defines TDbUser
+Prado::using('System.Security.TDbUserManager');
+
+/**
+ * BlogUser Class.
+ * BlogUser represents the user data that needs to be kept in session.
+ * Default implementation keeps username and role information.
+ */
+class BlogUser extends TDbUser
+{
+ /**
+ * Creates a BlogUser object based on the specified username.
+ * This method is required by TDbUser. It checks the database
+ * to see if the specified username is there. If so, a BlogUser
+ * object is created and initialized.
+ * @param string the specified username
+ * @return BlogUser the user object, null if username is invalid.
+ */
+ public function createUser($username)
+ {
+ // use UserRecord Active Record to look for the specified username
+ $userRecord=UserRecord::finder()->findByPk($username);
+ if($userRecord instanceof UserRecord) // if found
+ {
+ $user=new BlogUser($this->Manager);
+ $user->Name=$username; // set username
+ $user->Roles=($userRecord->role==1?'admin':'user'); // set role
+ $user->IsGuest=false; // the user is not a guest
+ return $user;
+ }
+ else
+ return null;
+ }
+
+ /**
+ * Checks if the specified (username, password) is valid.
+ * This method is required by TDbUser.
+ * @param string username
+ * @param string password
+ * @return boolean whether the username and password are valid.
+ */
+ public function validateUser($username,$password)
+ {
+ // use UserRecord Active Record to look for the (username, password) pair.
+ return UserRecord::finder()->findBy_username_AND_password($username,$password)!==null;
+ }
+
+ /**
+ * @return boolean whether this user is an administrator.
+ */
+ public function getIsAdmin()
+ {
+ return $this->isInRole('admin');
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day4/blog/protected/database/PostRecord.php b/demos/blog-tutorial/samples/day4/blog/protected/database/PostRecord.php
index 25702727..3407c09b 100644
--- a/demos/blog-tutorial/samples/day4/blog/protected/database/PostRecord.php
+++ b/demos/blog-tutorial/samples/day4/blog/protected/database/PostRecord.php
@@ -1,28 +1,28 @@
-<?php
-/**
- * Auto generated by prado-cli.php on 2007-04-07 10:44:20.
- */
-class PostRecord extends TActiveRecord
-{
- const TABLE='posts';
-
- public $post_id;
- public $author_id;
- public $create_time;
- public $title;
- public $content;
- public $status;
-
- public $author;
-
- public static $RELATIONS=array
- (
- 'author' => array(self::BELONGS_TO, 'UserRecord'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+/**
+ * Auto generated by prado-cli.php on 2007-04-07 10:44:20.
+ */
+class PostRecord extends TActiveRecord
+{
+ const TABLE='posts';
+
+ public $post_id;
+ public $author_id;
+ public $create_time;
+ public $title;
+ public $content;
+ public $status;
+
+ public $author;
+
+ public static $RELATIONS=array
+ (
+ 'author' => array(self::BELONGS_TO, 'UserRecord'),
+ );
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day4/blog/protected/database/UserRecord.php b/demos/blog-tutorial/samples/day4/blog/protected/database/UserRecord.php
index 2051e5de..021f8b09 100644
--- a/demos/blog-tutorial/samples/day4/blog/protected/database/UserRecord.php
+++ b/demos/blog-tutorial/samples/day4/blog/protected/database/UserRecord.php
@@ -1,28 +1,28 @@
-<?php
-/**
- * Auto generated by prado-cli.php on 2007-04-07 10:44:25.
- */
-class UserRecord extends TActiveRecord
-{
- const TABLE='users';
-
- public $username;
- public $email;
- public $password;
- public $role;
- public $first_name;
- public $last_name;
-
- public $posts=array();
-
- public static $RELATIONS=array
- (
- 'posts' => array(self::HAS_MANY, 'PostRecord'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+/**
+ * Auto generated by prado-cli.php on 2007-04-07 10:44:25.
+ */
+class UserRecord extends TActiveRecord
+{
+ const TABLE='users';
+
+ public $username;
+ public $email;
+ public $password;
+ public $role;
+ public $first_name;
+ public $last_name;
+
+ public $posts=array();
+
+ public static $RELATIONS=array
+ (
+ 'posts' => array(self::HAS_MANY, 'PostRecord'),
+ );
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day4/blog/protected/layouts/MainLayout.php b/demos/blog-tutorial/samples/day4/blog/protected/layouts/MainLayout.php
index 46c1483d..f605f75c 100644
--- a/demos/blog-tutorial/samples/day4/blog/protected/layouts/MainLayout.php
+++ b/demos/blog-tutorial/samples/day4/blog/protected/layouts/MainLayout.php
@@ -1,19 +1,19 @@
-<?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);
- }
-}
-
+<?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);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day4/blog/protected/pages/Contact.php b/demos/blog-tutorial/samples/day4/blog/protected/pages/Contact.php
index b6ce575e..77d7374a 100644
--- a/demos/blog-tutorial/samples/day4/blog/protected/pages/Contact.php
+++ b/demos/blog-tutorial/samples/day4/blog/protected/pages/Contact.php
@@ -1,30 +1,30 @@
-<?php
-
-class Contact extends TPage
-{
- /**
- * Event handler for the OnClick event of the submit button.
- * @param TButton the button triggering the event
- * @param TEventParameter event parameter (null here)
- */
- public function submitButtonClicked($sender, $param)
- {
- if ($this->IsValid) // check if input validation is successful
- {
- // obtain the user name, email, feedback from the textboxes
- $name = $this->Name->Text;
- $email = $this->Email->Text;
- $feedback = $this->Feedback->Text;
-
- // send an email to administrator with the above information
- $this->mailFeedback($name, $email, $feedback);
- }
- }
-
- protected function mailFeedback($name, $email, $feedback)
- {
- // implementation of sending the feedback email
- }
-}
-
+<?php
+
+class Contact extends TPage
+{
+ /**
+ * Event handler for the OnClick event of the submit button.
+ * @param TButton the button triggering the event
+ * @param TEventParameter event parameter (null here)
+ */
+ public function submitButtonClicked($sender, $param)
+ {
+ if ($this->IsValid) // check if input validation is successful
+ {
+ // obtain the user name, email, feedback from the textboxes
+ $name = $this->Name->Text;
+ $email = $this->Email->Text;
+ $feedback = $this->Feedback->Text;
+
+ // send an email to administrator with the above information
+ $this->mailFeedback($name, $email, $feedback);
+ }
+ }
+
+ protected function mailFeedback($name, $email, $feedback)
+ {
+ // implementation of sending the feedback email
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/EditPost.php b/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/EditPost.php
index e137b85e..1b0f82b6 100644
--- a/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/EditPost.php
+++ b/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/EditPost.php
@@ -1,72 +1,72 @@
-<?php
-
-class EditPost extends TPage
-{
- /**
- * Initializes the inputs with existing post data.
- * This method is invoked by the framework when the page is being initialized.
- * @param mixed event parameter
- */
- public function onInit($param)
- {
- parent::onInit($param);
- // Retrieves the existing user data. This is equivalent to:
- // $postRecord=$this->getPost();
- $postRecord=$this->Post;
- // Authorization check: only the author or the administrator can edit the post
- 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) // if the page is initially requested
- {
- // Populates the input controls with the existing post data
- $this->TitleEdit->Text=$postRecord->title;
- $this->ContentEdit->Text=$postRecord->content;
- }
- }
-
- /**
- * Saves the post if all inputs are valid.
- * This method responds to the OnClick event of the "Save" button.
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function saveButtonClicked($sender,$param)
- {
- if($this->IsValid) // when all validations succeed
- {
- // Retrieves the existing user data. This is equivalent to:
- // $postRecord=$this->getPost();
- $postRecord=$this->Post;
-
- // Fetches the input data
- $postRecord->title=$this->TitleEdit->SafeText;
- $postRecord->content=$this->ContentEdit->SafeText;
-
- // saves to the database via Active Record mechanism
- $postRecord->save();
-
- // redirects the browser to the ReadPost page
- $url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id));
- $this->Response->redirect($url);
- }
- }
-
- /**
- * Returns the post data to be editted.
- * @return PostRecord the post data to be editted.
- * @throws THttpException if the post data is not found.
- */
- protected function getPost()
- {
- // the ID of the post to be editted is passed via GET parameter 'id'
- $postID=(int)$this->Request['id'];
- // use Active Record to look for the specified post ID
- $postRecord=PostRecord::finder()->findByPk($postID);
- if($postRecord===null)
- throw new THttpException(500,'Post is not found.');
- return $postRecord;
- }
-}
-
+<?php
+
+class EditPost extends TPage
+{
+ /**
+ * Initializes the inputs with existing post data.
+ * This method is invoked by the framework when the page is being initialized.
+ * @param mixed event parameter
+ */
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ // Retrieves the existing user data. This is equivalent to:
+ // $postRecord=$this->getPost();
+ $postRecord=$this->Post;
+ // Authorization check: only the author or the administrator can edit the post
+ 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) // if the page is initially requested
+ {
+ // Populates the input controls with the existing post data
+ $this->TitleEdit->Text=$postRecord->title;
+ $this->ContentEdit->Text=$postRecord->content;
+ }
+ }
+
+ /**
+ * Saves the post if all inputs are valid.
+ * This method responds to the OnClick event of the "Save" button.
+ * @param mixed event sender
+ * @param mixed event parameter
+ */
+ public function saveButtonClicked($sender,$param)
+ {
+ if($this->IsValid) // when all validations succeed
+ {
+ // Retrieves the existing user data. This is equivalent to:
+ // $postRecord=$this->getPost();
+ $postRecord=$this->Post;
+
+ // Fetches the input data
+ $postRecord->title=$this->TitleEdit->SafeText;
+ $postRecord->content=$this->ContentEdit->SafeText;
+
+ // saves to the database via Active Record mechanism
+ $postRecord->save();
+
+ // redirects the browser to the ReadPost page
+ $url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id));
+ $this->Response->redirect($url);
+ }
+ }
+
+ /**
+ * Returns the post data to be editted.
+ * @return PostRecord the post data to be editted.
+ * @throws THttpException if the post data is not found.
+ */
+ protected function getPost()
+ {
+ // the ID of the post to be editted is passed via GET parameter 'id'
+ $postID=(int)$this->Request['id'];
+ // use Active Record to look for the specified post ID
+ $postRecord=PostRecord::finder()->findByPk($postID);
+ if($postRecord===null)
+ throw new THttpException(500,'Post is not found.');
+ return $postRecord;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/ListPost.php b/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/ListPost.php
index 7402dace..ae5a7eeb 100644
--- a/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/ListPost.php
+++ b/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/ListPost.php
@@ -1,64 +1,64 @@
-<?php
-
-class ListPost extends TPage
-{
- /**
- * Initializes the repeater.
- * This method is invoked by the framework when initializing the page
- * @param mixed event parameter
- */
- public function onInit($param)
- {
- parent::onInit($param);
- if(!$this->IsPostBack) // if the page is requested the first time
- {
- // get the total number of posts available
- $this->Repeater->VirtualItemCount=PostRecord::finder()->count();
- // populates post data into the repeater
- $this->populateData();
- }
- }
-
- /**
- * Event handler to the OnPageIndexChanged event of the pager.
- * This method is invoked when the user clicks on a page button
- * and thus changes the page of posts to display.
- */
- public function pageChanged($sender,$param)
- {
- // change the current page index to the new one
- $this->Repeater->CurrentPageIndex=$param->NewPageIndex;
- // re-populate data into the repeater
- $this->populateData();
- }
-
- /**
- * Determines which page of posts to be displayed and
- * populates the repeater with the fetched data.
- */
- 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();
- }
-
- /**
- * Fetches posts from database with offset and limit.
- */
- protected function getPosts($offset, $limit)
- {
- // Construts a query criteria
- $criteria=new TActiveRecordCriteria;
- $criteria->OrdersBy['create_time']='desc';
- $criteria->Limit=$limit;
- $criteria->Offset=$offset;
- // query for the posts with the above criteria and with author information
- return PostRecord::finder()->withAuthor()->findAll($criteria);
- }
-}
-
+<?php
+
+class ListPost extends TPage
+{
+ /**
+ * Initializes the repeater.
+ * This method is invoked by the framework when initializing the page
+ * @param mixed event parameter
+ */
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ if(!$this->IsPostBack) // if the page is requested the first time
+ {
+ // get the total number of posts available
+ $this->Repeater->VirtualItemCount=PostRecord::finder()->count();
+ // populates post data into the repeater
+ $this->populateData();
+ }
+ }
+
+ /**
+ * Event handler to the OnPageIndexChanged event of the pager.
+ * This method is invoked when the user clicks on a page button
+ * and thus changes the page of posts to display.
+ */
+ public function pageChanged($sender,$param)
+ {
+ // change the current page index to the new one
+ $this->Repeater->CurrentPageIndex=$param->NewPageIndex;
+ // re-populate data into the repeater
+ $this->populateData();
+ }
+
+ /**
+ * Determines which page of posts to be displayed and
+ * populates the repeater with the fetched data.
+ */
+ 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();
+ }
+
+ /**
+ * Fetches posts from database with offset and limit.
+ */
+ protected function getPosts($offset, $limit)
+ {
+ // Construts a query criteria
+ $criteria=new TActiveRecordCriteria;
+ $criteria->OrdersBy['create_time']='desc';
+ $criteria->Limit=$limit;
+ $criteria->Offset=$offset;
+ // query for the posts with the above criteria and with author information
+ return PostRecord::finder()->withAuthor()->findAll($criteria);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/NewPost.php b/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/NewPost.php
index a5e3ea4d..d3a36133 100644
--- a/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/NewPost.php
+++ b/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/NewPost.php
@@ -1,34 +1,34 @@
-<?php
-
-class NewPost extends TPage
-{
- /**
- * Creates a new post if all inputs are valid.
- * This method responds to the OnClick event of the "create" button.
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function createButtonClicked($sender,$param)
- {
- if($this->IsValid) // when all validations succeed
- {
- // populates a PostRecord object with user inputs
- $postRecord=new PostRecord;
- // using SafeText instead of Text avoids Cross Site Scripting attack
- $postRecord->title=$this->TitleEdit->SafeText;
- $postRecord->content=$this->ContentEdit->SafeText;
- $postRecord->author_id=$this->User->Name;
- $postRecord->create_time=time();
- $postRecord->status=0;
-
- // saves to the database via Active Record mechanism
- $postRecord->save();
-
- // redirects the browser to the newly created post page
- $url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id));
- $this->Response->redirect($url);
- }
- }
-}
-
+<?php
+
+class NewPost extends TPage
+{
+ /**
+ * Creates a new post if all inputs are valid.
+ * This method responds to the OnClick event of the "create" button.
+ * @param mixed event sender
+ * @param mixed event parameter
+ */
+ public function createButtonClicked($sender,$param)
+ {
+ if($this->IsValid) // when all validations succeed
+ {
+ // populates a PostRecord object with user inputs
+ $postRecord=new PostRecord;
+ // using SafeText instead of Text avoids Cross Site Scripting attack
+ $postRecord->title=$this->TitleEdit->SafeText;
+ $postRecord->content=$this->ContentEdit->SafeText;
+ $postRecord->author_id=$this->User->Name;
+ $postRecord->create_time=time();
+ $postRecord->status=0;
+
+ // saves to the database via Active Record mechanism
+ $postRecord->save();
+
+ // redirects the browser to the newly created post page
+ $url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id));
+ $this->Response->redirect($url);
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/PostRenderer.php b/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/PostRenderer.php
index cf0539a1..ed80f10c 100644
--- a/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/PostRenderer.php
+++ b/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/PostRenderer.php
@@ -1,7 +1,7 @@
-<?php
-
-class PostRenderer extends TRepeaterItemRenderer
-{
-}
-
+<?php
+
+class PostRenderer extends TRepeaterItemRenderer
+{
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/ReadPost.php b/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/ReadPost.php
index 2aeaa4d3..4c2035e6 100644
--- a/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/ReadPost.php
+++ b/demos/blog-tutorial/samples/day4/blog/protected/pages/posts/ReadPost.php
@@ -1,57 +1,57 @@
-<?php
-
-class ReadPost extends TPage
-{
- private $_post;
- /**
- * Fetches the post data.
- * This method is invoked by the framework when initializing the page
- * @param mixed event parameter
- */
- public function onInit($param)
- {
- parent::onInit($param);
- // post id is passed via the 'id' GET parameter
- $postID=(int)$this->Request['id'];
- // retrieves PostRecord with author information filled in
- $this->_post=PostRecord::finder()->withAuthor()->findByPk($postID);
- if($this->_post===null) // if post id is invalid
- throw new THttpException(500,'Unable to find the specified post.');
- // set the page title as the post title
- $this->Title=$this->_post->title;
- }
-
- /**
- * @return PostRecord the PostRecord currently being viewed
- */
- public function getPost()
- {
- return $this->_post;
- }
-
- /**
- * Deletes the post currently being viewed
- * This method is invoked when the user clicks on the "Delete" button
- */
- public function deletePost($sender,$param)
- {
- // only the author or the administrator can delete a post
- if(!$this->canEdit())
- throw new THttpException('You are not allowed to perform this action.');
- // delete it from DB
- $this->_post->delete();
- // redirect the browser to the homepage
- $this->Response->redirect($this->Service->DefaultPageUrl);
- }
-
- /**
- * @return boolean whether the current user can edit/delete the post being viewed
- */
- public function canEdit()
- {
- // only the author or the administrator can edit/delete a post
- return $this->User->Name===$this->Post->author_id || $this->User->IsAdmin;
- }
-}
-
+<?php
+
+class ReadPost extends TPage
+{
+ private $_post;
+ /**
+ * Fetches the post data.
+ * This method is invoked by the framework when initializing the page
+ * @param mixed event parameter
+ */
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ // post id is passed via the 'id' GET parameter
+ $postID=(int)$this->Request['id'];
+ // retrieves PostRecord with author information filled in
+ $this->_post=PostRecord::finder()->withAuthor()->findByPk($postID);
+ if($this->_post===null) // if post id is invalid
+ throw new THttpException(500,'Unable to find the specified post.');
+ // set the page title as the post title
+ $this->Title=$this->_post->title;
+ }
+
+ /**
+ * @return PostRecord the PostRecord currently being viewed
+ */
+ public function getPost()
+ {
+ return $this->_post;
+ }
+
+ /**
+ * Deletes the post currently being viewed
+ * This method is invoked when the user clicks on the "Delete" button
+ */
+ public function deletePost($sender,$param)
+ {
+ // only the author or the administrator can delete a post
+ if(!$this->canEdit())
+ throw new THttpException('You are not allowed to perform this action.');
+ // delete it from DB
+ $this->_post->delete();
+ // redirect the browser to the homepage
+ $this->Response->redirect($this->Service->DefaultPageUrl);
+ }
+
+ /**
+ * @return boolean whether the current user can edit/delete the post being viewed
+ */
+ public function canEdit()
+ {
+ // only the author or the administrator can edit/delete a post
+ return $this->User->Name===$this->Post->author_id || $this->User->IsAdmin;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day4/blog/protected/pages/users/AdminUser.php b/demos/blog-tutorial/samples/day4/blog/protected/pages/users/AdminUser.php
index ad8f6e3d..ad668e1a 100644
--- a/demos/blog-tutorial/samples/day4/blog/protected/pages/users/AdminUser.php
+++ b/demos/blog-tutorial/samples/day4/blog/protected/pages/users/AdminUser.php
@@ -1,36 +1,36 @@
-<?php
-
-class AdminUser extends TPage
-{
- /**
- * Populates the datagrid with user lists.
- * This method is invoked by the framework when initializing the page
- * @param mixed event parameter
- */
- public function onInit($param)
- {
- parent::onInit($param);
- // fetches all data account information
- $this->UserGrid->DataSource=UserRecord::finder()->findAll();
- // binds the data to interface components
- $this->UserGrid->dataBind();
- }
-
- /**
- * Deletes a specified user record.
- * This method responds to the datagrid's OnDeleteCommand event.
- * @param TDataGrid the event sender
- * @param TDataGridCommandEventParameter the event parameter
- */
- public function deleteButtonClicked($sender,$param)
- {
- // obtains the datagrid item that contains the clicked delete button
- $item=$param->Item;
- // obtains the primary key corresponding to the datagrid item
- $username=$this->UserGrid->DataKeys[$item->ItemIndex];
- // deletes the user record with the specified username primary key
- UserRecord::finder()->deleteByPk($username);
- }
-}
-
+<?php
+
+class AdminUser extends TPage
+{
+ /**
+ * Populates the datagrid with user lists.
+ * This method is invoked by the framework when initializing the page
+ * @param mixed event parameter
+ */
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ // fetches all data account information
+ $this->UserGrid->DataSource=UserRecord::finder()->findAll();
+ // binds the data to interface components
+ $this->UserGrid->dataBind();
+ }
+
+ /**
+ * Deletes a specified user record.
+ * This method responds to the datagrid's OnDeleteCommand event.
+ * @param TDataGrid the event sender
+ * @param TDataGridCommandEventParameter the event parameter
+ */
+ public function deleteButtonClicked($sender,$param)
+ {
+ // obtains the datagrid item that contains the clicked delete button
+ $item=$param->Item;
+ // obtains the primary key corresponding to the datagrid item
+ $username=$this->UserGrid->DataKeys[$item->ItemIndex];
+ // deletes the user record with the specified username primary key
+ UserRecord::finder()->deleteByPk($username);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day4/blog/protected/pages/users/EditUser.php b/demos/blog-tutorial/samples/day4/blog/protected/pages/users/EditUser.php
index 81538c33..f8c61463 100644
--- a/demos/blog-tutorial/samples/day4/blog/protected/pages/users/EditUser.php
+++ b/demos/blog-tutorial/samples/day4/blog/protected/pages/users/EditUser.php
@@ -1,83 +1,83 @@
-<?php
-
-class EditUser extends TPage
-{
- /**
- * Initializes the inputs with existing user data.
- * This method is invoked by the framework when the page is being initialized.
- * @param mixed event parameter
- */
- public function onInit($param)
- {
- parent::onInit($param);
- if(!$this->IsPostBack) // if the page is initially requested
- {
- // Retrieves the existing user data. This is equivalent to:
- // $userRecord=$this->getUserRecord();
- $userRecord=$this->UserRecord;
-
- // Populates the input controls with the existing user data
- $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;
- }
- }
-
- /**
- * Saves the user account if all inputs are valid.
- * This method responds to the OnClick event of the "save" button.
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function saveButtonClicked($sender,$param)
- {
- if($this->IsValid) // when all validations succeed
- {
- // Retrieves the existing user data. This is equivalent to:
- $userRecord=$this->UserRecord;
-
- // Fetches the input data
- $userRecord->username=$this->Username->Text;
- // update password when the input is not empty
- if(!empty($this->Password->Text))
- $userRecord->password=$this->Password->Text;
- $userRecord->email=$this->Email->Text;
- // update the role if the current user is an administrator
- if($this->User->IsAdmin)
- $userRecord->role=(int)$this->Role->SelectedValue;
- $userRecord->first_name=$this->FirstName->Text;
- $userRecord->last_name=$this->LastName->Text;
-
- // saves to the database via Active Record mechanism
- $userRecord->save();
-
- // redirects the browser to the homepage
- $this->Response->redirect($this->Service->DefaultPageUrl);
- }
- }
-
- /**
- * Returns the user data to be editted.
- * @return UserRecord the user data to be editted.
- * @throws THttpException if the user data is not found.
- */
- protected function getUserRecord()
- {
- // the user to be editted is the currently logged-in user
- $username=$this->User->Name;
- // if the 'username' GET var is not empty and the current user
- // is an administrator, we use the GET var value instead.
- if($this->User->IsAdmin && $this->Request['username']!==null)
- $username=$this->Request['username'];
-
- // use Active Record to look for the specified username
- $userRecord=UserRecord::finder()->findByPk($username);
- if(!($userRecord instanceof UserRecord))
- throw new THttpException(500,'Username is invalid.');
- return $userRecord;
- }
-}
-
+<?php
+
+class EditUser extends TPage
+{
+ /**
+ * Initializes the inputs with existing user data.
+ * This method is invoked by the framework when the page is being initialized.
+ * @param mixed event parameter
+ */
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ if(!$this->IsPostBack) // if the page is initially requested
+ {
+ // Retrieves the existing user data. This is equivalent to:
+ // $userRecord=$this->getUserRecord();
+ $userRecord=$this->UserRecord;
+
+ // Populates the input controls with the existing user data
+ $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;
+ }
+ }
+
+ /**
+ * Saves the user account if all inputs are valid.
+ * This method responds to the OnClick event of the "save" button.
+ * @param mixed event sender
+ * @param mixed event parameter
+ */
+ public function saveButtonClicked($sender,$param)
+ {
+ if($this->IsValid) // when all validations succeed
+ {
+ // Retrieves the existing user data. This is equivalent to:
+ $userRecord=$this->UserRecord;
+
+ // Fetches the input data
+ $userRecord->username=$this->Username->Text;
+ // update password when the input is not empty
+ if(!empty($this->Password->Text))
+ $userRecord->password=$this->Password->Text;
+ $userRecord->email=$this->Email->Text;
+ // update the role if the current user is an administrator
+ if($this->User->IsAdmin)
+ $userRecord->role=(int)$this->Role->SelectedValue;
+ $userRecord->first_name=$this->FirstName->Text;
+ $userRecord->last_name=$this->LastName->Text;
+
+ // saves to the database via Active Record mechanism
+ $userRecord->save();
+
+ // redirects the browser to the homepage
+ $this->Response->redirect($this->Service->DefaultPageUrl);
+ }
+ }
+
+ /**
+ * Returns the user data to be editted.
+ * @return UserRecord the user data to be editted.
+ * @throws THttpException if the user data is not found.
+ */
+ protected function getUserRecord()
+ {
+ // the user to be editted is the currently logged-in user
+ $username=$this->User->Name;
+ // if the 'username' GET var is not empty and the current user
+ // is an administrator, we use the GET var value instead.
+ if($this->User->IsAdmin && $this->Request['username']!==null)
+ $username=$this->Request['username'];
+
+ // use Active Record to look for the specified username
+ $userRecord=UserRecord::finder()->findByPk($username);
+ if(!($userRecord instanceof UserRecord))
+ throw new THttpException(500,'Username is invalid.');
+ return $userRecord;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day4/blog/protected/pages/users/LoginUser.php b/demos/blog-tutorial/samples/day4/blog/protected/pages/users/LoginUser.php
index a0955490..407906ae 100644
--- a/demos/blog-tutorial/samples/day4/blog/protected/pages/users/LoginUser.php
+++ b/demos/blog-tutorial/samples/day4/blog/protected/pages/users/LoginUser.php
@@ -1,37 +1,37 @@
-<?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; // tell the validator that validation fails
- }
-
- /**
- * 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) // all validations succeed
- {
- // obtain the URL of the privileged page that the user wanted to visit originally
- $url=$this->Application->getModule('auth')->ReturnUrl;
- if(empty($url)) // the user accesses the login page directly
- $url=$this->Service->DefaultPageUrl;
- $this->Response->redirect($url);
- }
- }
-}
-
+<?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; // tell the validator that validation fails
+ }
+
+ /**
+ * 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) // all validations succeed
+ {
+ // obtain the URL of the privileged page that the user wanted to visit originally
+ $url=$this->Application->getModule('auth')->ReturnUrl;
+ if(empty($url)) // the user accesses the login page directly
+ $url=$this->Service->DefaultPageUrl;
+ $this->Response->redirect($url);
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day4/blog/protected/pages/users/NewUser.php b/demos/blog-tutorial/samples/day4/blog/protected/pages/users/NewUser.php
index 76e8cb88..3bf6768a 100644
--- a/demos/blog-tutorial/samples/day4/blog/protected/pages/users/NewUser.php
+++ b/demos/blog-tutorial/samples/day4/blog/protected/pages/users/NewUser.php
@@ -1,45 +1,45 @@
-<?php
-
-class NewUser extends TPage
-{
- /**
- * Checks whether the username exists in the database.
- * This method responds to the OnServerValidate event of username's custom validator.
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function checkUsername($sender,$param)
- {
- // valid if the username is not found in the database
- $param->IsValid=UserRecord::finder()->findByPk($this->Username->Text)===null;
- }
-
- /**
- * Creates a new user account if all inputs are valid.
- * This method responds to the OnClick event of the "create" button.
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function createButtonClicked($sender,$param)
- {
- if($this->IsValid) // when all validations succeed
- {
- // populates a UserRecord object with user inputs
- $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;
-
- // saves to the database via Active Record mechanism
- $userRecord->save();
-
- // redirects the browser to the homepage
- $this->Response->redirect($this->Service->DefaultPageUrl);
- }
- }
-}
-
+<?php
+
+class NewUser extends TPage
+{
+ /**
+ * Checks whether the username exists in the database.
+ * This method responds to the OnServerValidate event of username's custom validator.
+ * @param mixed event sender
+ * @param mixed event parameter
+ */
+ public function checkUsername($sender,$param)
+ {
+ // valid if the username is not found in the database
+ $param->IsValid=UserRecord::finder()->findByPk($this->Username->Text)===null;
+ }
+
+ /**
+ * Creates a new user account if all inputs are valid.
+ * This method responds to the OnClick event of the "create" button.
+ * @param mixed event sender
+ * @param mixed event parameter
+ */
+ public function createButtonClicked($sender,$param)
+ {
+ if($this->IsValid) // when all validations succeed
+ {
+ // populates a UserRecord object with user inputs
+ $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;
+
+ // saves to the database via Active Record mechanism
+ $userRecord->save();
+
+ // redirects the browser to the homepage
+ $this->Response->redirect($this->Service->DefaultPageUrl);
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day5/blog/index.php b/demos/blog-tutorial/samples/day5/blog/index.php
index 7ccffe49..bffafde2 100644
--- a/demos/blog-tutorial/samples/day5/blog/index.php
+++ b/demos/blog-tutorial/samples/day5/blog/index.php
@@ -1,22 +1,22 @@
-<?php
-
-// The following directory checks may be removed if performance is required
-$basePath=dirname(__FILE__);
-$frameworkPath=$basePath.'/../../../../../framework/prado.php';
-$assetsPath=$basePath.'/assets';
-$runtimePath=$basePath.'/protected/runtime';
-
-if(!is_file($frameworkPath))
- die("Unable to find prado framework path $frameworkPath.");
-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();
-
+<?php
+
+// The following directory checks may be removed if performance is required
+$basePath=dirname(__FILE__);
+$frameworkPath=$basePath.'/../../../../../framework/prado.php';
+$assetsPath=$basePath.'/assets';
+$runtimePath=$basePath.'/protected/runtime';
+
+if(!is_file($frameworkPath))
+ die("Unable to find prado framework path $frameworkPath.");
+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();
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day5/blog/protected/BlogErrorHandler.php b/demos/blog-tutorial/samples/day5/blog/protected/BlogErrorHandler.php
index 56b71f8a..e8908ba7 100644
--- a/demos/blog-tutorial/samples/day5/blog/protected/BlogErrorHandler.php
+++ b/demos/blog-tutorial/samples/day5/blog/protected/BlogErrorHandler.php
@@ -1,40 +1,40 @@
-<?php
-
-Prado::using('System.Exceptions.TErrorHandler');
-Prado::using('Application.BlogException');
-
-class BlogErrorHandler extends TErrorHandler
-{
- /**
- * Retrieves the template used for displaying external exceptions.
- * This method overrides the parent implementation.
- */
- protected function getErrorTemplate($statusCode,$exception)
- {
- // use our own template for BlogException
- if($exception instanceof BlogException)
- {
- // get the path of the error template file: protected/error.html
- $templateFile=Prado::getPathOfNamespace('Application.error','.html');
- return file_get_contents($templateFile);
- }
- else // otherwise use the template defined by PRADO
- return parent::getErrorTemplate($statusCode,$exception);
- }
-
- /**
- * Handles external error caused by end-users.
- * This method overrides the parent implementation.
- * It is invoked by PRADO when an external exception is thrown.
- */
- protected function handleExternalError($statusCode,$exception)
- {
- // log the error (only for BlogException)
- if($exception instanceof BlogException)
- Prado::log($exception->getErrorMessage(),TLogger::ERROR,'BlogApplication');
- // call parent implementation to display the error
- parent::handleExternalError($statusCode,$exception);
- }
-}
-
+<?php
+
+Prado::using('System.Exceptions.TErrorHandler');
+Prado::using('Application.BlogException');
+
+class BlogErrorHandler extends TErrorHandler
+{
+ /**
+ * Retrieves the template used for displaying external exceptions.
+ * This method overrides the parent implementation.
+ */
+ protected function getErrorTemplate($statusCode,$exception)
+ {
+ // use our own template for BlogException
+ if($exception instanceof BlogException)
+ {
+ // get the path of the error template file: protected/error.html
+ $templateFile=Prado::getPathOfNamespace('Application.error','.html');
+ return file_get_contents($templateFile);
+ }
+ else // otherwise use the template defined by PRADO
+ return parent::getErrorTemplate($statusCode,$exception);
+ }
+
+ /**
+ * Handles external error caused by end-users.
+ * This method overrides the parent implementation.
+ * It is invoked by PRADO when an external exception is thrown.
+ */
+ protected function handleExternalError($statusCode,$exception)
+ {
+ // log the error (only for BlogException)
+ if($exception instanceof BlogException)
+ Prado::log($exception->getErrorMessage(),TLogger::ERROR,'BlogApplication');
+ // call parent implementation to display the error
+ parent::handleExternalError($statusCode,$exception);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day5/blog/protected/BlogException.php b/demos/blog-tutorial/samples/day5/blog/protected/BlogException.php
index fd17fc84..946a1bfe 100644
--- a/demos/blog-tutorial/samples/day5/blog/protected/BlogException.php
+++ b/demos/blog-tutorial/samples/day5/blog/protected/BlogException.php
@@ -1,7 +1,7 @@
-<?php
-
-class BlogException extends THttpException
-{
-}
-
+<?php
+
+class BlogException extends THttpException
+{
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day5/blog/protected/BlogUser.php b/demos/blog-tutorial/samples/day5/blog/protected/BlogUser.php
index 6b9e0a23..4f094a0c 100644
--- a/demos/blog-tutorial/samples/day5/blog/protected/BlogUser.php
+++ b/demos/blog-tutorial/samples/day5/blog/protected/BlogUser.php
@@ -1,59 +1,59 @@
-<?php
-
-// Include TDbUserManager.php file which defines TDbUser
-Prado::using('System.Security.TDbUserManager');
-
-/**
- * BlogUser Class.
- * BlogUser represents the user data that needs to be kept in session.
- * Default implementation keeps username and role information.
- */
-class BlogUser extends TDbUser
-{
- /**
- * Creates a BlogUser object based on the specified username.
- * This method is required by TDbUser. It checks the database
- * to see if the specified username is there. If so, a BlogUser
- * object is created and initialized.
- * @param string the specified username
- * @return BlogUser the user object, null if username is invalid.
- */
- public function createUser($username)
- {
- // use UserRecord Active Record to look for the specified username
- $userRecord=UserRecord::finder()->findByPk($username);
- if($userRecord instanceof UserRecord) // if found
- {
- $user=new BlogUser($this->Manager);
- $user->Name=$username; // set username
- $user->Roles=($userRecord->role==1?'admin':'user'); // set role
- $user->IsGuest=false; // the user is not a guest
- return $user;
- }
- else
- return null;
- }
-
- /**
- * Checks if the specified (username, password) is valid.
- * This method is required by TDbUser.
- * @param string username
- * @param string password
- * @return boolean whether the username and password are valid.
- */
- public function validateUser($username,$password)
- {
- // use UserRecord Active Record to look for the (username, password) pair.
- return UserRecord::finder()->findBy_username_AND_password($username,$password)!==null;
- }
-
- /**
- * @return boolean whether this user is an administrator.
- */
- public function getIsAdmin()
- {
- return $this->isInRole('admin');
- }
-}
-
+<?php
+
+// Include TDbUserManager.php file which defines TDbUser
+Prado::using('System.Security.TDbUserManager');
+
+/**
+ * BlogUser Class.
+ * BlogUser represents the user data that needs to be kept in session.
+ * Default implementation keeps username and role information.
+ */
+class BlogUser extends TDbUser
+{
+ /**
+ * Creates a BlogUser object based on the specified username.
+ * This method is required by TDbUser. It checks the database
+ * to see if the specified username is there. If so, a BlogUser
+ * object is created and initialized.
+ * @param string the specified username
+ * @return BlogUser the user object, null if username is invalid.
+ */
+ public function createUser($username)
+ {
+ // use UserRecord Active Record to look for the specified username
+ $userRecord=UserRecord::finder()->findByPk($username);
+ if($userRecord instanceof UserRecord) // if found
+ {
+ $user=new BlogUser($this->Manager);
+ $user->Name=$username; // set username
+ $user->Roles=($userRecord->role==1?'admin':'user'); // set role
+ $user->IsGuest=false; // the user is not a guest
+ return $user;
+ }
+ else
+ return null;
+ }
+
+ /**
+ * Checks if the specified (username, password) is valid.
+ * This method is required by TDbUser.
+ * @param string username
+ * @param string password
+ * @return boolean whether the username and password are valid.
+ */
+ public function validateUser($username,$password)
+ {
+ // use UserRecord Active Record to look for the (username, password) pair.
+ return UserRecord::finder()->findBy_username_AND_password($username,$password)!==null;
+ }
+
+ /**
+ * @return boolean whether this user is an administrator.
+ */
+ public function getIsAdmin()
+ {
+ return $this->isInRole('admin');
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day5/blog/protected/database/PostRecord.php b/demos/blog-tutorial/samples/day5/blog/protected/database/PostRecord.php
index 25702727..3407c09b 100644
--- a/demos/blog-tutorial/samples/day5/blog/protected/database/PostRecord.php
+++ b/demos/blog-tutorial/samples/day5/blog/protected/database/PostRecord.php
@@ -1,28 +1,28 @@
-<?php
-/**
- * Auto generated by prado-cli.php on 2007-04-07 10:44:20.
- */
-class PostRecord extends TActiveRecord
-{
- const TABLE='posts';
-
- public $post_id;
- public $author_id;
- public $create_time;
- public $title;
- public $content;
- public $status;
-
- public $author;
-
- public static $RELATIONS=array
- (
- 'author' => array(self::BELONGS_TO, 'UserRecord'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+/**
+ * Auto generated by prado-cli.php on 2007-04-07 10:44:20.
+ */
+class PostRecord extends TActiveRecord
+{
+ const TABLE='posts';
+
+ public $post_id;
+ public $author_id;
+ public $create_time;
+ public $title;
+ public $content;
+ public $status;
+
+ public $author;
+
+ public static $RELATIONS=array
+ (
+ 'author' => array(self::BELONGS_TO, 'UserRecord'),
+ );
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day5/blog/protected/database/UserRecord.php b/demos/blog-tutorial/samples/day5/blog/protected/database/UserRecord.php
index 2051e5de..021f8b09 100644
--- a/demos/blog-tutorial/samples/day5/blog/protected/database/UserRecord.php
+++ b/demos/blog-tutorial/samples/day5/blog/protected/database/UserRecord.php
@@ -1,28 +1,28 @@
-<?php
-/**
- * Auto generated by prado-cli.php on 2007-04-07 10:44:25.
- */
-class UserRecord extends TActiveRecord
-{
- const TABLE='users';
-
- public $username;
- public $email;
- public $password;
- public $role;
- public $first_name;
- public $last_name;
-
- public $posts=array();
-
- public static $RELATIONS=array
- (
- 'posts' => array(self::HAS_MANY, 'PostRecord'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+/**
+ * Auto generated by prado-cli.php on 2007-04-07 10:44:25.
+ */
+class UserRecord extends TActiveRecord
+{
+ const TABLE='users';
+
+ public $username;
+ public $email;
+ public $password;
+ public $role;
+ public $first_name;
+ public $last_name;
+
+ public $posts=array();
+
+ public static $RELATIONS=array
+ (
+ 'posts' => array(self::HAS_MANY, 'PostRecord'),
+ );
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day5/blog/protected/layouts/MainLayout.php b/demos/blog-tutorial/samples/day5/blog/protected/layouts/MainLayout.php
index 46c1483d..f605f75c 100644
--- a/demos/blog-tutorial/samples/day5/blog/protected/layouts/MainLayout.php
+++ b/demos/blog-tutorial/samples/day5/blog/protected/layouts/MainLayout.php
@@ -1,19 +1,19 @@
-<?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);
- }
-}
-
+<?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);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day5/blog/protected/pages/Contact.php b/demos/blog-tutorial/samples/day5/blog/protected/pages/Contact.php
index b6ce575e..77d7374a 100644
--- a/demos/blog-tutorial/samples/day5/blog/protected/pages/Contact.php
+++ b/demos/blog-tutorial/samples/day5/blog/protected/pages/Contact.php
@@ -1,30 +1,30 @@
-<?php
-
-class Contact extends TPage
-{
- /**
- * Event handler for the OnClick event of the submit button.
- * @param TButton the button triggering the event
- * @param TEventParameter event parameter (null here)
- */
- public function submitButtonClicked($sender, $param)
- {
- if ($this->IsValid) // check if input validation is successful
- {
- // obtain the user name, email, feedback from the textboxes
- $name = $this->Name->Text;
- $email = $this->Email->Text;
- $feedback = $this->Feedback->Text;
-
- // send an email to administrator with the above information
- $this->mailFeedback($name, $email, $feedback);
- }
- }
-
- protected function mailFeedback($name, $email, $feedback)
- {
- // implementation of sending the feedback email
- }
-}
-
+<?php
+
+class Contact extends TPage
+{
+ /**
+ * Event handler for the OnClick event of the submit button.
+ * @param TButton the button triggering the event
+ * @param TEventParameter event parameter (null here)
+ */
+ public function submitButtonClicked($sender, $param)
+ {
+ if ($this->IsValid) // check if input validation is successful
+ {
+ // obtain the user name, email, feedback from the textboxes
+ $name = $this->Name->Text;
+ $email = $this->Email->Text;
+ $feedback = $this->Feedback->Text;
+
+ // send an email to administrator with the above information
+ $this->mailFeedback($name, $email, $feedback);
+ }
+ }
+
+ protected function mailFeedback($name, $email, $feedback)
+ {
+ // implementation of sending the feedback email
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/EditPost.php b/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/EditPost.php
index e137b85e..1b0f82b6 100644
--- a/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/EditPost.php
+++ b/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/EditPost.php
@@ -1,72 +1,72 @@
-<?php
-
-class EditPost extends TPage
-{
- /**
- * Initializes the inputs with existing post data.
- * This method is invoked by the framework when the page is being initialized.
- * @param mixed event parameter
- */
- public function onInit($param)
- {
- parent::onInit($param);
- // Retrieves the existing user data. This is equivalent to:
- // $postRecord=$this->getPost();
- $postRecord=$this->Post;
- // Authorization check: only the author or the administrator can edit the post
- 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) // if the page is initially requested
- {
- // Populates the input controls with the existing post data
- $this->TitleEdit->Text=$postRecord->title;
- $this->ContentEdit->Text=$postRecord->content;
- }
- }
-
- /**
- * Saves the post if all inputs are valid.
- * This method responds to the OnClick event of the "Save" button.
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function saveButtonClicked($sender,$param)
- {
- if($this->IsValid) // when all validations succeed
- {
- // Retrieves the existing user data. This is equivalent to:
- // $postRecord=$this->getPost();
- $postRecord=$this->Post;
-
- // Fetches the input data
- $postRecord->title=$this->TitleEdit->SafeText;
- $postRecord->content=$this->ContentEdit->SafeText;
-
- // saves to the database via Active Record mechanism
- $postRecord->save();
-
- // redirects the browser to the ReadPost page
- $url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id));
- $this->Response->redirect($url);
- }
- }
-
- /**
- * Returns the post data to be editted.
- * @return PostRecord the post data to be editted.
- * @throws THttpException if the post data is not found.
- */
- protected function getPost()
- {
- // the ID of the post to be editted is passed via GET parameter 'id'
- $postID=(int)$this->Request['id'];
- // use Active Record to look for the specified post ID
- $postRecord=PostRecord::finder()->findByPk($postID);
- if($postRecord===null)
- throw new THttpException(500,'Post is not found.');
- return $postRecord;
- }
-}
-
+<?php
+
+class EditPost extends TPage
+{
+ /**
+ * Initializes the inputs with existing post data.
+ * This method is invoked by the framework when the page is being initialized.
+ * @param mixed event parameter
+ */
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ // Retrieves the existing user data. This is equivalent to:
+ // $postRecord=$this->getPost();
+ $postRecord=$this->Post;
+ // Authorization check: only the author or the administrator can edit the post
+ 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) // if the page is initially requested
+ {
+ // Populates the input controls with the existing post data
+ $this->TitleEdit->Text=$postRecord->title;
+ $this->ContentEdit->Text=$postRecord->content;
+ }
+ }
+
+ /**
+ * Saves the post if all inputs are valid.
+ * This method responds to the OnClick event of the "Save" button.
+ * @param mixed event sender
+ * @param mixed event parameter
+ */
+ public function saveButtonClicked($sender,$param)
+ {
+ if($this->IsValid) // when all validations succeed
+ {
+ // Retrieves the existing user data. This is equivalent to:
+ // $postRecord=$this->getPost();
+ $postRecord=$this->Post;
+
+ // Fetches the input data
+ $postRecord->title=$this->TitleEdit->SafeText;
+ $postRecord->content=$this->ContentEdit->SafeText;
+
+ // saves to the database via Active Record mechanism
+ $postRecord->save();
+
+ // redirects the browser to the ReadPost page
+ $url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id));
+ $this->Response->redirect($url);
+ }
+ }
+
+ /**
+ * Returns the post data to be editted.
+ * @return PostRecord the post data to be editted.
+ * @throws THttpException if the post data is not found.
+ */
+ protected function getPost()
+ {
+ // the ID of the post to be editted is passed via GET parameter 'id'
+ $postID=(int)$this->Request['id'];
+ // use Active Record to look for the specified post ID
+ $postRecord=PostRecord::finder()->findByPk($postID);
+ if($postRecord===null)
+ throw new THttpException(500,'Post is not found.');
+ return $postRecord;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/ListPost.php b/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/ListPost.php
index 7402dace..ae5a7eeb 100644
--- a/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/ListPost.php
+++ b/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/ListPost.php
@@ -1,64 +1,64 @@
-<?php
-
-class ListPost extends TPage
-{
- /**
- * Initializes the repeater.
- * This method is invoked by the framework when initializing the page
- * @param mixed event parameter
- */
- public function onInit($param)
- {
- parent::onInit($param);
- if(!$this->IsPostBack) // if the page is requested the first time
- {
- // get the total number of posts available
- $this->Repeater->VirtualItemCount=PostRecord::finder()->count();
- // populates post data into the repeater
- $this->populateData();
- }
- }
-
- /**
- * Event handler to the OnPageIndexChanged event of the pager.
- * This method is invoked when the user clicks on a page button
- * and thus changes the page of posts to display.
- */
- public function pageChanged($sender,$param)
- {
- // change the current page index to the new one
- $this->Repeater->CurrentPageIndex=$param->NewPageIndex;
- // re-populate data into the repeater
- $this->populateData();
- }
-
- /**
- * Determines which page of posts to be displayed and
- * populates the repeater with the fetched data.
- */
- 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();
- }
-
- /**
- * Fetches posts from database with offset and limit.
- */
- protected function getPosts($offset, $limit)
- {
- // Construts a query criteria
- $criteria=new TActiveRecordCriteria;
- $criteria->OrdersBy['create_time']='desc';
- $criteria->Limit=$limit;
- $criteria->Offset=$offset;
- // query for the posts with the above criteria and with author information
- return PostRecord::finder()->withAuthor()->findAll($criteria);
- }
-}
-
+<?php
+
+class ListPost extends TPage
+{
+ /**
+ * Initializes the repeater.
+ * This method is invoked by the framework when initializing the page
+ * @param mixed event parameter
+ */
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ if(!$this->IsPostBack) // if the page is requested the first time
+ {
+ // get the total number of posts available
+ $this->Repeater->VirtualItemCount=PostRecord::finder()->count();
+ // populates post data into the repeater
+ $this->populateData();
+ }
+ }
+
+ /**
+ * Event handler to the OnPageIndexChanged event of the pager.
+ * This method is invoked when the user clicks on a page button
+ * and thus changes the page of posts to display.
+ */
+ public function pageChanged($sender,$param)
+ {
+ // change the current page index to the new one
+ $this->Repeater->CurrentPageIndex=$param->NewPageIndex;
+ // re-populate data into the repeater
+ $this->populateData();
+ }
+
+ /**
+ * Determines which page of posts to be displayed and
+ * populates the repeater with the fetched data.
+ */
+ 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();
+ }
+
+ /**
+ * Fetches posts from database with offset and limit.
+ */
+ protected function getPosts($offset, $limit)
+ {
+ // Construts a query criteria
+ $criteria=new TActiveRecordCriteria;
+ $criteria->OrdersBy['create_time']='desc';
+ $criteria->Limit=$limit;
+ $criteria->Offset=$offset;
+ // query for the posts with the above criteria and with author information
+ return PostRecord::finder()->withAuthor()->findAll($criteria);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/NewPost.php b/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/NewPost.php
index a5e3ea4d..d3a36133 100644
--- a/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/NewPost.php
+++ b/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/NewPost.php
@@ -1,34 +1,34 @@
-<?php
-
-class NewPost extends TPage
-{
- /**
- * Creates a new post if all inputs are valid.
- * This method responds to the OnClick event of the "create" button.
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function createButtonClicked($sender,$param)
- {
- if($this->IsValid) // when all validations succeed
- {
- // populates a PostRecord object with user inputs
- $postRecord=new PostRecord;
- // using SafeText instead of Text avoids Cross Site Scripting attack
- $postRecord->title=$this->TitleEdit->SafeText;
- $postRecord->content=$this->ContentEdit->SafeText;
- $postRecord->author_id=$this->User->Name;
- $postRecord->create_time=time();
- $postRecord->status=0;
-
- // saves to the database via Active Record mechanism
- $postRecord->save();
-
- // redirects the browser to the newly created post page
- $url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id));
- $this->Response->redirect($url);
- }
- }
-}
-
+<?php
+
+class NewPost extends TPage
+{
+ /**
+ * Creates a new post if all inputs are valid.
+ * This method responds to the OnClick event of the "create" button.
+ * @param mixed event sender
+ * @param mixed event parameter
+ */
+ public function createButtonClicked($sender,$param)
+ {
+ if($this->IsValid) // when all validations succeed
+ {
+ // populates a PostRecord object with user inputs
+ $postRecord=new PostRecord;
+ // using SafeText instead of Text avoids Cross Site Scripting attack
+ $postRecord->title=$this->TitleEdit->SafeText;
+ $postRecord->content=$this->ContentEdit->SafeText;
+ $postRecord->author_id=$this->User->Name;
+ $postRecord->create_time=time();
+ $postRecord->status=0;
+
+ // saves to the database via Active Record mechanism
+ $postRecord->save();
+
+ // redirects the browser to the newly created post page
+ $url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id));
+ $this->Response->redirect($url);
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/PostRenderer.php b/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/PostRenderer.php
index cf0539a1..ed80f10c 100644
--- a/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/PostRenderer.php
+++ b/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/PostRenderer.php
@@ -1,7 +1,7 @@
-<?php
-
-class PostRenderer extends TRepeaterItemRenderer
-{
-}
-
+<?php
+
+class PostRenderer extends TRepeaterItemRenderer
+{
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/ReadPost.php b/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/ReadPost.php
index 0c120824..ab7429c3 100644
--- a/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/ReadPost.php
+++ b/demos/blog-tutorial/samples/day5/blog/protected/pages/posts/ReadPost.php
@@ -1,59 +1,59 @@
-<?php
-
-Prado::using('Application.BlogException');
-
-class ReadPost extends TPage
-{
- private $_post;
- /**
- * Fetches the post data.
- * This method is invoked by the framework when initializing the page
- * @param mixed event parameter
- */
- public function onInit($param)
- {
- parent::onInit($param);
- // post id is passed via the 'id' GET parameter
- $postID=(int)$this->Request['id'];
- // retrieves PostRecord with author information filled in
- $this->_post=PostRecord::finder()->withAuthor()->findByPk($postID);
- if($this->_post===null) // if post id is invalid
- throw new BlogException(500,'Unable to find the specified post.');
- // set the page title as the post title
- $this->Title=$this->_post->title;
- }
-
- /**
- * @return PostRecord the PostRecord currently being viewed
- */
- public function getPost()
- {
- return $this->_post;
- }
-
- /**
- * Deletes the post currently being viewed
- * This method is invoked when the user clicks on the "Delete" button
- */
- public function deletePost($sender,$param)
- {
- // only the author or the administrator can delete a post
- if(!$this->canEdit())
- throw new THttpException('You are not allowed to perform this action.');
- // delete it from DB
- $this->_post->delete();
- // redirect the browser to the homepage
- $this->Response->redirect($this->Service->DefaultPageUrl);
- }
-
- /**
- * @return boolean whether the current user can edit/delete the post being viewed
- */
- public function canEdit()
- {
- // only the author or the administrator can edit/delete a post
- return $this->User->Name===$this->Post->author_id || $this->User->IsAdmin;
- }
-}
-
+<?php
+
+Prado::using('Application.BlogException');
+
+class ReadPost extends TPage
+{
+ private $_post;
+ /**
+ * Fetches the post data.
+ * This method is invoked by the framework when initializing the page
+ * @param mixed event parameter
+ */
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ // post id is passed via the 'id' GET parameter
+ $postID=(int)$this->Request['id'];
+ // retrieves PostRecord with author information filled in
+ $this->_post=PostRecord::finder()->withAuthor()->findByPk($postID);
+ if($this->_post===null) // if post id is invalid
+ throw new BlogException(500,'Unable to find the specified post.');
+ // set the page title as the post title
+ $this->Title=$this->_post->title;
+ }
+
+ /**
+ * @return PostRecord the PostRecord currently being viewed
+ */
+ public function getPost()
+ {
+ return $this->_post;
+ }
+
+ /**
+ * Deletes the post currently being viewed
+ * This method is invoked when the user clicks on the "Delete" button
+ */
+ public function deletePost($sender,$param)
+ {
+ // only the author or the administrator can delete a post
+ if(!$this->canEdit())
+ throw new THttpException('You are not allowed to perform this action.');
+ // delete it from DB
+ $this->_post->delete();
+ // redirect the browser to the homepage
+ $this->Response->redirect($this->Service->DefaultPageUrl);
+ }
+
+ /**
+ * @return boolean whether the current user can edit/delete the post being viewed
+ */
+ public function canEdit()
+ {
+ // only the author or the administrator can edit/delete a post
+ return $this->User->Name===$this->Post->author_id || $this->User->IsAdmin;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day5/blog/protected/pages/users/AdminUser.php b/demos/blog-tutorial/samples/day5/blog/protected/pages/users/AdminUser.php
index ad8f6e3d..ad668e1a 100644
--- a/demos/blog-tutorial/samples/day5/blog/protected/pages/users/AdminUser.php
+++ b/demos/blog-tutorial/samples/day5/blog/protected/pages/users/AdminUser.php
@@ -1,36 +1,36 @@
-<?php
-
-class AdminUser extends TPage
-{
- /**
- * Populates the datagrid with user lists.
- * This method is invoked by the framework when initializing the page
- * @param mixed event parameter
- */
- public function onInit($param)
- {
- parent::onInit($param);
- // fetches all data account information
- $this->UserGrid->DataSource=UserRecord::finder()->findAll();
- // binds the data to interface components
- $this->UserGrid->dataBind();
- }
-
- /**
- * Deletes a specified user record.
- * This method responds to the datagrid's OnDeleteCommand event.
- * @param TDataGrid the event sender
- * @param TDataGridCommandEventParameter the event parameter
- */
- public function deleteButtonClicked($sender,$param)
- {
- // obtains the datagrid item that contains the clicked delete button
- $item=$param->Item;
- // obtains the primary key corresponding to the datagrid item
- $username=$this->UserGrid->DataKeys[$item->ItemIndex];
- // deletes the user record with the specified username primary key
- UserRecord::finder()->deleteByPk($username);
- }
-}
-
+<?php
+
+class AdminUser extends TPage
+{
+ /**
+ * Populates the datagrid with user lists.
+ * This method is invoked by the framework when initializing the page
+ * @param mixed event parameter
+ */
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ // fetches all data account information
+ $this->UserGrid->DataSource=UserRecord::finder()->findAll();
+ // binds the data to interface components
+ $this->UserGrid->dataBind();
+ }
+
+ /**
+ * Deletes a specified user record.
+ * This method responds to the datagrid's OnDeleteCommand event.
+ * @param TDataGrid the event sender
+ * @param TDataGridCommandEventParameter the event parameter
+ */
+ public function deleteButtonClicked($sender,$param)
+ {
+ // obtains the datagrid item that contains the clicked delete button
+ $item=$param->Item;
+ // obtains the primary key corresponding to the datagrid item
+ $username=$this->UserGrid->DataKeys[$item->ItemIndex];
+ // deletes the user record with the specified username primary key
+ UserRecord::finder()->deleteByPk($username);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day5/blog/protected/pages/users/EditUser.php b/demos/blog-tutorial/samples/day5/blog/protected/pages/users/EditUser.php
index 81538c33..f8c61463 100644
--- a/demos/blog-tutorial/samples/day5/blog/protected/pages/users/EditUser.php
+++ b/demos/blog-tutorial/samples/day5/blog/protected/pages/users/EditUser.php
@@ -1,83 +1,83 @@
-<?php
-
-class EditUser extends TPage
-{
- /**
- * Initializes the inputs with existing user data.
- * This method is invoked by the framework when the page is being initialized.
- * @param mixed event parameter
- */
- public function onInit($param)
- {
- parent::onInit($param);
- if(!$this->IsPostBack) // if the page is initially requested
- {
- // Retrieves the existing user data. This is equivalent to:
- // $userRecord=$this->getUserRecord();
- $userRecord=$this->UserRecord;
-
- // Populates the input controls with the existing user data
- $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;
- }
- }
-
- /**
- * Saves the user account if all inputs are valid.
- * This method responds to the OnClick event of the "save" button.
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function saveButtonClicked($sender,$param)
- {
- if($this->IsValid) // when all validations succeed
- {
- // Retrieves the existing user data. This is equivalent to:
- $userRecord=$this->UserRecord;
-
- // Fetches the input data
- $userRecord->username=$this->Username->Text;
- // update password when the input is not empty
- if(!empty($this->Password->Text))
- $userRecord->password=$this->Password->Text;
- $userRecord->email=$this->Email->Text;
- // update the role if the current user is an administrator
- if($this->User->IsAdmin)
- $userRecord->role=(int)$this->Role->SelectedValue;
- $userRecord->first_name=$this->FirstName->Text;
- $userRecord->last_name=$this->LastName->Text;
-
- // saves to the database via Active Record mechanism
- $userRecord->save();
-
- // redirects the browser to the homepage
- $this->Response->redirect($this->Service->DefaultPageUrl);
- }
- }
-
- /**
- * Returns the user data to be editted.
- * @return UserRecord the user data to be editted.
- * @throws THttpException if the user data is not found.
- */
- protected function getUserRecord()
- {
- // the user to be editted is the currently logged-in user
- $username=$this->User->Name;
- // if the 'username' GET var is not empty and the current user
- // is an administrator, we use the GET var value instead.
- if($this->User->IsAdmin && $this->Request['username']!==null)
- $username=$this->Request['username'];
-
- // use Active Record to look for the specified username
- $userRecord=UserRecord::finder()->findByPk($username);
- if(!($userRecord instanceof UserRecord))
- throw new THttpException(500,'Username is invalid.');
- return $userRecord;
- }
-}
-
+<?php
+
+class EditUser extends TPage
+{
+ /**
+ * Initializes the inputs with existing user data.
+ * This method is invoked by the framework when the page is being initialized.
+ * @param mixed event parameter
+ */
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ if(!$this->IsPostBack) // if the page is initially requested
+ {
+ // Retrieves the existing user data. This is equivalent to:
+ // $userRecord=$this->getUserRecord();
+ $userRecord=$this->UserRecord;
+
+ // Populates the input controls with the existing user data
+ $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;
+ }
+ }
+
+ /**
+ * Saves the user account if all inputs are valid.
+ * This method responds to the OnClick event of the "save" button.
+ * @param mixed event sender
+ * @param mixed event parameter
+ */
+ public function saveButtonClicked($sender,$param)
+ {
+ if($this->IsValid) // when all validations succeed
+ {
+ // Retrieves the existing user data. This is equivalent to:
+ $userRecord=$this->UserRecord;
+
+ // Fetches the input data
+ $userRecord->username=$this->Username->Text;
+ // update password when the input is not empty
+ if(!empty($this->Password->Text))
+ $userRecord->password=$this->Password->Text;
+ $userRecord->email=$this->Email->Text;
+ // update the role if the current user is an administrator
+ if($this->User->IsAdmin)
+ $userRecord->role=(int)$this->Role->SelectedValue;
+ $userRecord->first_name=$this->FirstName->Text;
+ $userRecord->last_name=$this->LastName->Text;
+
+ // saves to the database via Active Record mechanism
+ $userRecord->save();
+
+ // redirects the browser to the homepage
+ $this->Response->redirect($this->Service->DefaultPageUrl);
+ }
+ }
+
+ /**
+ * Returns the user data to be editted.
+ * @return UserRecord the user data to be editted.
+ * @throws THttpException if the user data is not found.
+ */
+ protected function getUserRecord()
+ {
+ // the user to be editted is the currently logged-in user
+ $username=$this->User->Name;
+ // if the 'username' GET var is not empty and the current user
+ // is an administrator, we use the GET var value instead.
+ if($this->User->IsAdmin && $this->Request['username']!==null)
+ $username=$this->Request['username'];
+
+ // use Active Record to look for the specified username
+ $userRecord=UserRecord::finder()->findByPk($username);
+ if(!($userRecord instanceof UserRecord))
+ throw new THttpException(500,'Username is invalid.');
+ return $userRecord;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day5/blog/protected/pages/users/LoginUser.php b/demos/blog-tutorial/samples/day5/blog/protected/pages/users/LoginUser.php
index a0955490..407906ae 100644
--- a/demos/blog-tutorial/samples/day5/blog/protected/pages/users/LoginUser.php
+++ b/demos/blog-tutorial/samples/day5/blog/protected/pages/users/LoginUser.php
@@ -1,37 +1,37 @@
-<?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; // tell the validator that validation fails
- }
-
- /**
- * 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) // all validations succeed
- {
- // obtain the URL of the privileged page that the user wanted to visit originally
- $url=$this->Application->getModule('auth')->ReturnUrl;
- if(empty($url)) // the user accesses the login page directly
- $url=$this->Service->DefaultPageUrl;
- $this->Response->redirect($url);
- }
- }
-}
-
+<?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; // tell the validator that validation fails
+ }
+
+ /**
+ * 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) // all validations succeed
+ {
+ // obtain the URL of the privileged page that the user wanted to visit originally
+ $url=$this->Application->getModule('auth')->ReturnUrl;
+ if(empty($url)) // the user accesses the login page directly
+ $url=$this->Service->DefaultPageUrl;
+ $this->Response->redirect($url);
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog-tutorial/samples/day5/blog/protected/pages/users/NewUser.php b/demos/blog-tutorial/samples/day5/blog/protected/pages/users/NewUser.php
index 76e8cb88..3bf6768a 100644
--- a/demos/blog-tutorial/samples/day5/blog/protected/pages/users/NewUser.php
+++ b/demos/blog-tutorial/samples/day5/blog/protected/pages/users/NewUser.php
@@ -1,45 +1,45 @@
-<?php
-
-class NewUser extends TPage
-{
- /**
- * Checks whether the username exists in the database.
- * This method responds to the OnServerValidate event of username's custom validator.
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function checkUsername($sender,$param)
- {
- // valid if the username is not found in the database
- $param->IsValid=UserRecord::finder()->findByPk($this->Username->Text)===null;
- }
-
- /**
- * Creates a new user account if all inputs are valid.
- * This method responds to the OnClick event of the "create" button.
- * @param mixed event sender
- * @param mixed event parameter
- */
- public function createButtonClicked($sender,$param)
- {
- if($this->IsValid) // when all validations succeed
- {
- // populates a UserRecord object with user inputs
- $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;
-
- // saves to the database via Active Record mechanism
- $userRecord->save();
-
- // redirects the browser to the homepage
- $this->Response->redirect($this->Service->DefaultPageUrl);
- }
- }
-}
-
+<?php
+
+class NewUser extends TPage
+{
+ /**
+ * Checks whether the username exists in the database.
+ * This method responds to the OnServerValidate event of username's custom validator.
+ * @param mixed event sender
+ * @param mixed event parameter
+ */
+ public function checkUsername($sender,$param)
+ {
+ // valid if the username is not found in the database
+ $param->IsValid=UserRecord::finder()->findByPk($this->Username->Text)===null;
+ }
+
+ /**
+ * Creates a new user account if all inputs are valid.
+ * This method responds to the OnClick event of the "create" button.
+ * @param mixed event sender
+ * @param mixed event parameter
+ */
+ public function createButtonClicked($sender,$param)
+ {
+ if($this->IsValid) // when all validations succeed
+ {
+ // populates a UserRecord object with user inputs
+ $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;
+
+ // saves to the database via Active Record mechanism
+ $userRecord->save();
+
+ // redirects the browser to the homepage
+ $this->Response->redirect($this->Service->DefaultPageUrl);
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/index.php b/demos/blog/index.php
index 6bec1512..269b67ed 100644
--- a/demos/blog/index.php
+++ b/demos/blog/index.php
@@ -1,21 +1,21 @@
-<?php
-
-$basePath=dirname(__FILE__);
-$frameworkPath=$basePath.'/../../framework/prado.php';
-$assetsPath=$basePath.'/assets';
-$runtimePath=$basePath.'/protected/runtime';
-$dataPath=$basePath.'/protected/Data';
-
-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.");
-if(!is_writable($dataPath))
- die("Please make sure that the directory $dataPath is writable by Web server process.");
-
-require_once($frameworkPath);
-
-$application=new TApplication;
-$application->run();
-
+<?php
+
+$basePath=dirname(__FILE__);
+$frameworkPath=$basePath.'/../../framework/prado.php';
+$assetsPath=$basePath.'/assets';
+$runtimePath=$basePath.'/protected/runtime';
+$dataPath=$basePath.'/protected/Data';
+
+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.");
+if(!is_writable($dataPath))
+ die("Please make sure that the directory $dataPath is writable by Web server process.");
+
+require_once($frameworkPath);
+
+$application=new TApplication;
+$application->run();
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Common/BlogDataModule.php b/demos/blog/protected/Common/BlogDataModule.php
index 26dfc5cf..a071ba9a 100644
--- a/demos/blog/protected/Common/BlogDataModule.php
+++ b/demos/blog/protected/Common/BlogDataModule.php
@@ -1,708 +1,708 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class BlogDataModule extends TModule
-{
- const DB_FILE_EXT='.db';
- const DEFAULT_DB_FILE='Application.Data.Blog';
- private $_db=null;
- private $_dbFile=null;
-
- public function init($config)
- {
- $this->connectDatabase();
- }
-
- public function getDbFile()
- {
- if($this->_dbFile===null)
- $this->_dbFile=Prado::getPathOfNamespace(self::DEFAULT_DB_FILE,self::DB_FILE_EXT);
- return $this->_dbFile;
- }
-
- public function setDbFile($value)
- {
- if(($this->_dbFile=Prado::getPathOfNamespace($value,self::DB_FILE_EXT))===null)
- throw new BlogException(500,'blogdatamodule_dbfile_invalid',$value);
- }
-
- protected function createDatabase()
- {
- $schemaFile=dirname(__FILE__).'/schema.sql';
- $statements=explode(';',file_get_contents($schemaFile));
- foreach($statements as $statement)
- {
- if(trim($statement)!=='')
- {
- try {
- $command=$this->_db->createCommand($statement);
- $command->execute();
- }
- catch(TDbException $e)
- {
- throw new BlogException(500,'blogdatamodule_createdatabase_failed',$e->getErrorMessage(),$statement);
- }
- }
- }
- }
-
- protected function connectDatabase()
- {
- $dbFile=$this->getDbFile();
- $newDb=!is_file($dbFile);
-
- try {
- $this->_db=new TDbConnection("sqlite:".$dbFile);
- $this->_db->Active=true;
- }
- catch(TDbException $e)
- {
- throw new BlogException(500,'blogdatamodule_dbconnect_failed',$e->getErrorMessage());
- }
-
- if($newDb)
- $this->createDatabase();
- }
-
- protected function generateModifier($filter,$orderBy,$limit)
- {
- $modifier='';
- if($filter!=='')
- $modifier=' WHERE '.$filter;
- if($orderBy!=='')
- $modifier.=' ORDER BY '.$orderBy;
- if($limit!=='')
- $modifier.=' LIMIT '.$limit;
- return $modifier;
- }
-
- public function query($sql)
- {
- try {
- $command=$this->_db->createCommand($sql);
- return $command->query();
- }
- catch(TDbException $e)
- {
- throw new BlogException(500,'blogdatamodule_query_failed',$e->getErrorMessage(),$sql);
- }
- }
-
- protected function populateUserRecord($row)
- {
- $userRecord=new UserRecord;
- $userRecord->ID=(integer)$row['id'];
- $userRecord->Name=$row['name'];
- $userRecord->FullName=$row['full_name'];
- $userRecord->Role=(integer)$row['role'];
- $userRecord->Password=$row['passwd'];
- $userRecord->VerifyCode=$row['vcode'];
- $userRecord->Email=$row['email'];
- $userRecord->CreateTime=(integer)$row['reg_time'];
- $userRecord->Status=(integer)$row['status'];
- $userRecord->Website=$row['website'];
- return $userRecord;
- }
-
- public function queryUsers($filter='',$orderBy='',$limit='')
- {
- if($filter!=='')
- $filter='WHERE '.$filter;
- $sql="SELECT * FROM tblUsers $filter $orderBy $limit";
- $rows=$this->query($sql);
- $users=array();
- foreach($rows as $row)
- $users[]=$this->populateUserRecord($row);
- return $users;
- }
-
- public function queryUserCount($filter)
- {
- if($filter!=='')
- $filter='WHERE '.$filter;
- $sql="SELECT COUNT(id) AS user_count FROM tblUsers $filter";
- $result=$this->query($sql);
- if(($row=$result->read())!==false)
- return $row['user_count'];
- else
- return 0;
- }
-
- public function queryUserByID($id)
- {
- $sql="SELECT * FROM tblUsers WHERE id=$id";
- $result=$this->query($sql);
- if(($row=$result->read())!==false)
- return $this->populateUserRecord($row);
- else
- return null;
- }
-
- public function queryUserByName($name)
- {
- $command=$this->_db->createCommand("SELECT * FROM tblUsers WHERE name=?");
- $command->bindValue(1, $name);
-
- $result=$command->query();
-
- if(($row=$result->read())!==false)
- return $this->populateUserRecord($row);
- else
- return null;
- }
-
- public function insertUser($user)
- {
- $command=$this->_db->createCommand("INSERT INTO tblUsers ".
- "(name,full_name,role,passwd,email,reg_time,status,website) ".
- "VALUES (?,?,?,?,?,?,?,?)");
- $command->bindValue(1, $user->Name);
- $command->bindValue(2, $user->FullName);
- $command->bindValue(3, $user->Role);
- $command->bindValue(4, $user->Password);
- $command->bindValue(5, $user->Email);
- $command->bindValue(6, time());
- $command->bindValue(7, $user->Status);
- $command->bindValue(8, $user->Website);
- $command->execute();
-
- $user->ID=$this->_db->getLastInsertID();
- }
-
- public function updateUser($user)
- {
- $command=$this->_db->createCommand("UPDATE tblUsers SET
- name=?,
- full_name=?,
- role=?,
- passwd=?,
- vcode=?,
- email=?,
- status=?,
- website=?
- WHERE id=?");
- $command->bindValue(1, $user->Name);
- $command->bindValue(2, $user->FullName);
- $command->bindValue(3, $user->Role);
- $command->bindValue(4, $user->Password);
- $command->bindValue(5, $user->VerifyCode);
- $command->bindValue(6, $user->Email);
- $command->bindValue(7, $user->Status);
- $command->bindValue(8, $user->Website);
- $command->bindValue(9, $user->ID);
- $command->execute();
- }
-
- public function deleteUser($id)
- {
- $command=$this->_db->createCommand("DELETE FROM tblUsers WHERE id=?");
- $command->bindValue(1, $id);
- $command->execute();
- }
-
- protected function populatePostRecord($row)
- {
- $postRecord=new PostRecord;
- $postRecord->ID=(integer)$row['id'];
- $postRecord->AuthorID=(integer)$row['author_id'];
- if($row['author_full_name']!=='')
- $postRecord->AuthorName=$row['author_full_name'];
- else
- $postRecord->AuthorName=$row['author_name'];
- $postRecord->CreateTime=(integer)$row['create_time'];
- $postRecord->ModifyTime=(integer)$row['modify_time'];
- $postRecord->Title=$row['title'];
- $postRecord->Content=$row['content'];
- $postRecord->Status=(integer)$row['status'];
- $postRecord->CommentCount=(integer)$row['comment_count'];
- return $postRecord;
- }
-
- public function queryPosts($postFilter,$categoryFilter,$orderBy,$limit)
- {
- //FIXME this is insecure by design since it misses proper escaping
- $filter='';
- if($postFilter!=='')
- $filter.=" AND $postFilter";
- if($categoryFilter!=='')
- $filter.=" AND a.id IN (SELECT post_id AS id FROM tblPost2Category WHERE $categoryFilter)";
- $sql="SELECT a.id AS id,
- a.author_id AS author_id,
- b.name AS author_name,
- b.full_name AS author_full_name,
- a.create_time AS create_time,
- a.modify_time AS modify_time,
- a.title AS title,
- a.content AS content,
- a.status AS status,
- a.comment_count AS comment_count
- FROM tblPosts a, tblUsers b
- WHERE a.author_id=b.id $filter $orderBy $limit";
- $rows=$this->query($sql);
- $posts=array();
- foreach($rows as $row)
- $posts[]=$this->populatePostRecord($row);
- return $posts;
- }
-
- public function queryPostsSearch($keywords,$orderBy,$limit)
- {
- $sql="SELECT a.id AS id,
- a.author_id AS author_id,
- b.name AS author_name,
- b.full_name AS author_full_name,
- a.create_time AS create_time,
- a.modify_time AS modify_time,
- a.title AS title,
- a.content AS content,
- a.status AS status,
- a.comment_count AS comment_count
- FROM tblPosts a, tblUsers b
- WHERE a.author_id=b.id AND a.status=0";
-
- foreach($keywords as $keyword)
- $sql.=" AND (content LIKE ? OR title LIKE ?)";
-
- $sql.=" $orderBy $limit";
-
- $command=$this->_db->createCommand($sql);
-
- $i=1;
- foreach($keywords as $keyword)
- {
- $command->bindValue($i, "%".$keyword."%");
- $i++;
- }
-
- $rows=$command->query();
-
- $posts=array();
- foreach($rows as $row)
- $posts[]=$this->populatePostRecord($row);
- return $posts;
-
- }
-
- public function queryPostCount($postFilter,$categoryFilter)
- {
- //FIXME this is insecure by design since it misses proper escaping
- $filter='';
- if($postFilter!=='')
- $filter.=" AND $postFilter";
- if($categoryFilter!=='')
- $filter.=" AND a.id IN (SELECT post_id AS id FROM tblPost2Category WHERE $categoryFilter)";
- $sql="SELECT COUNT(a.id) AS post_count
- FROM tblPosts a, tblUsers b
- WHERE a.author_id=b.id $filter";
- $result=$this->query($sql);
- if(($row=$result->read())!==false)
- return $row['post_count'];
- else
- return 0;
- }
-
- public function queryPostByID($id)
- {
- $sql="SELECT a.id AS id,
- a.author_id AS author_id,
- b.name AS author_name,
- b.full_name AS author_full_name,
- a.create_time AS create_time,
- a.modify_time AS modify_time,
- a.title AS title,
- a.content AS content,
- a.status AS status,
- a.comment_count AS comment_count
- FROM tblPosts a, tblUsers b
- WHERE a.id=? AND a.author_id=b.id";
-
- $command=$this->_db->createCommand($sql);
- $command->bindValue(1, $id);
-
- $result=$command->query();
-
- if(($row=$result->read())!==false)
- return $this->populatePostRecord($row);
- else
- return null;
- }
-
- public function insertPost($post,$catIDs)
- {
- $command=$this->_db->createCommand("INSERT INTO tblPosts
- (author_id,create_time,modify_time,title,content,status)
- VALUES (?,?,?,?,?,?)");
- $command->bindValue(1, $post->AuthorID);
- $command->bindValue(2, $post->CreateTime);
- $command->bindValue(3, $post->ModifyTime);
- $command->bindValue(4, $post->Title);
- $command->bindValue(5, $post->Content);
- $command->bindValue(6, $post->Status);
-
- $command->execute();
- $post->ID=$this->_db->getLastInsertID();
- foreach($catIDs as $catID)
- $this->insertPostCategory($post->ID,$catID);
- }
-
- public function updatePost($post,$newCatIDs=null)
- {
- if($newCatIDs!==null)
- {
- $cats=$this->queryCategoriesByPostID($post->ID);
- $catIDs=array();
- foreach($cats as $cat)
- $catIDs[]=$cat->ID;
- $deleteIDs=array_diff($catIDs,$newCatIDs);
- foreach($deleteIDs as $id)
- $this->deletePostCategory($post->ID,$id);
- $insertIDs=array_diff($newCatIDs,$catIDs);
- foreach($insertIDs as $id)
- $this->insertPostCategory($post->ID,$id);
- }
-
- $command=$this->_db->createCommand("UPDATE tblPosts SET
- modify_time=?,
- title=?,
- content=?,
- status=?
- WHERE id=?");
- $command->bindValue(1, $post->ModifyTime);
- $command->bindValue(2, $post->Title);
- $command->bindValue(3, $post->Content);
- $command->bindValue(4, $post->Status);
- $command->bindValue(5, $post->ID);
-
- $command->execute();
- }
-
- public function deletePost($id)
- {
- $cats=$this->queryCategoriesByPostID($id);
- foreach($cats as $cat)
- $this->deletePostCategory($id,$cat->ID);
-
- $command=$this->_db->createCommand("DELETE FROM tblComments WHERE post_id=?");
- $command->bindValue(1, $id);
- $command->execute();
-
- $command=$this->_db->createCommand("DELETE FROM tblPosts WHERE id=?");
- $command->bindValue(1, $id);
- $command->execute();
- }
-
- protected function populateCommentRecord($row)
- {
- $commentRecord=new CommentRecord;
- $commentRecord->ID=(integer)$row['id'];
- $commentRecord->PostID=(integer)$row['post_id'];
- $commentRecord->AuthorName=$row['author_name'];
- $commentRecord->AuthorEmail=$row['author_email'];
- $commentRecord->AuthorWebsite=$row['author_website'];
- $commentRecord->AuthorIP=$row['author_ip'];
- $commentRecord->CreateTime=(integer)$row['create_time'];
- $commentRecord->Content=$row['content'];
- $commentRecord->Status=(integer)$row['status'];
- return $commentRecord;
- }
-
- public function queryComments($filter,$orderBy,$limit)
- {
- //FIXME this is insecure by design since it misses proper escaping
- if($filter!=='')
- $filter='WHERE '.$filter;
- $sql="SELECT * FROM tblComments $filter $orderBy $limit";
- $rows=$this->query($sql);
- $comments=array();
- foreach($rows as $row)
- $comments[]=$this->populateCommentRecord($row);
- return $comments;
- }
-
- public function queryCommentsByPostID($id)
- {
- $sql="SELECT * FROM tblComments WHERE post_id=? ORDER BY create_time DESC";
- $command=$this->_db->createCommand($sql);
- $command->bindValue(1, $id);
-
- $rows=$command->query();
-
- $comments=array();
- foreach($rows as $row)
- $comments[]=$this->populateCommentRecord($row);
- return $comments;
- }
-
- public function insertComment($comment)
- {
- $sql="INSERT INTO tblComments
- (post_id,author_name,author_email,author_website,author_ip,create_time,status,content)
- VALUES (?,?,?,?,?,?,?,?)";
- $command=$this->_db->createCommand($sql);
- $command->bindValue(1, $comment->PostID);
- $command->bindValue(2, $comment->AuthorName);
- $command->bindValue(3, $comment->AuthorEmail);
- $command->bindValue(4, $comment->AuthorWebsite);
- $command->bindValue(5, $comment->AuthorIP);
- $command->bindValue(6, $comment->CreateTime);
- $command->bindValue(7, $comment->Status);
- $command->bindValue(8, $comment->Content);
-
- $command->execute();
- $comment->ID=$this->_db->getLastInsertID();
- $this->query("UPDATE tblPosts SET comment_count=comment_count+1 WHERE id={$comment->PostID}");
- }
-
- public function updateComment($comment)
- {
- $sql="UPDATE tblComments SET status=? WHERE id=?";
- $command=$this->_db->createCommand($sql);
- $command->bindValue(1, $comment->Status);
- $command->bindValue(2, $comment->ID);
-
- $command->execute();
- }
-
- public function deleteComment($id)
- {
- $sql="SELECT post_id FROM tblComments WHERE id=?";
- $command=$this->_db->createCommand($sql);
- $command->bindValue(1, $id);
- $result=$command->query();
-
- if(($row=$result->read())!==false)
- {
- $command=$this->_db->createCommand("DELETE FROM tblComments WHERE id=?");
- $command->bindValue(1, $id);
- $command->execute();
-
- $command=$this->_db->createCommand("UPDATE tblPosts SET comment_count=comment_count-1 WHERE id=?");
- $command->bindValue(1, $row['post_id']);
- $command->execute();
- }
- }
-
- protected function populateCategoryRecord($row)
- {
- $catRecord=new CategoryRecord;
- $catRecord->ID=(integer)$row['id'];
- $catRecord->Name=$row['name'];
- $catRecord->Description=$row['description'];
- $catRecord->PostCount=$row['post_count'];
- return $catRecord;
- }
-
- public function queryCategories()
- {
- $sql="SELECT * FROM tblCategories ORDER BY name ASC";
- $rows=$this->query($sql);
- $cats=array();
- foreach($rows as $row)
- $cats[]=$this->populateCategoryRecord($row);
- return $cats;
- }
-
- public function queryCategoriesByPostID($postID)
- {
- $sql="SELECT a.id AS id,
- a.name AS name,
- a.description AS description,
- a.post_count AS post_count
- FROM tblCategories a, tblPost2Category b
- WHERE a.id=b.category_id AND b.post_id=? ORDER BY a.name";
-
- $command=$this->_db->createCommand($sql);
- $command->bindValue(1, $postID);
- $rows=$command->query();
-
- $cats=array();
- foreach($rows as $row)
- $cats[]=$this->populateCategoryRecord($row);
- return $cats;
- }
-
- public function queryCategoryByID($id)
- {
- $sql="SELECT * FROM tblCategories WHERE id=?";
-
- $command=$this->_db->createCommand($sql);
- $command->bindValue(1, $id);
- $result=$command->query();
-
- if(($row=$result->read())!==false)
- return $this->populateCategoryRecord($row);
- else
- return null;
- }
-
- public function queryCategoryByName($name)
- {
- $sql="SELECT * FROM tblCategories WHERE name=?";
-
- $command=$this->_db->createCommand($sql);
- $command->bindValue(1, $name);
- $result=$command->query();
-
- if(($row=$result->read())!==false)
- return $this->populateCategoryRecord($row);
- else
- return null;
- }
-
- public function insertCategory($category)
- {
- $sql="INSERT INTO tblCategories
- (name,description)
- VALUES (?,?)";
-
- $command=$this->_db->createCommand($sql);
- $command->bindValue(1, $category->Name);
- $command->bindValue(2, $category->Description);
- $command->execute();
-
- $category->ID=$this->_db->getLastInsertID();
- }
-
- public function updateCategory($category)
- {
- $sql="UPDATE tblCategories SET name=?, description=?, post_count=? WHERE id=?";
-
- $command=$this->_db->createCommand($sql);
- $command->bindValue(1, $category->Name);
- $command->bindValue(2, $category->Description);
- $command->bindValue(3, $category->PostCount);
- $command->bindValue(4, $category->ID);
-
- $command->execute();
- }
-
- public function deleteCategory($id)
- {
- $sql="DELETE FROM tblPost2Category WHERE category_id=?";
- $command=$this->_db->createCommand($sql);
- $command->bindValue(1, $id);
- $command->execute();
-
- $sql="DELETE FROM tblCategories WHERE id=?";
- $command=$this->_db->createCommand($sql);
- $command->bindValue(1, $id);
- $command->execute();
- }
-
- public function insertPostCategory($postID,$categoryID)
- {
- $sql="INSERT INTO tblPost2Category (post_id, category_id) VALUES (?, ?)";
- $command=$this->_db->createCommand($sql);
- $command->bindValue(1, $postID);
- $command->bindValue(2, $categoryID);
- $command->execute();
-
- $sql="UPDATE tblCategories SET post_count=post_count+1 WHERE id=?";
- $command=$this->_db->createCommand($sql);
- $command->bindValue(1, $categoryID);
- $command->execute();
-
- }
-
- public function deletePostCategory($postID,$categoryID)
- {
- $sql="DELETE FROM tblPost2Category WHERE post_id=? AND category_id=?";
- $command=$this->_db->createCommand($sql);
- $command->bindValue(1, $postID);
- $command->bindValue(2, $categoryID);
- $result=$command->query();
-
- if($result->getRowCount()>0)
- {
- $sql="UPDATE tblCategories SET post_count=post_count-1 WHERE id=?";
- $command=$this->_db->createCommand($sql);
- $command->bindValue(1, $categoryID);
- $command->execute();
- }
- }
-
- public function queryEarliestPostTime()
- {
- $sql="SELECT MIN(create_time) AS create_time FROM tblPosts";
- $result=$this->query($sql);
- if(($row=$result->read())!==false)
- return $row['create_time'];
- else
- return time();
- }
-}
-
-class UserRecord
-{
- const ROLE_USER=0;
- const ROLE_ADMIN=1;
- const STATUS_NORMAL=0;
- const STATUS_DISABLED=1;
- const STATUS_PENDING=2;
- public $ID;
- public $Name;
- public $FullName;
- public $Role;
- public $Password;
- public $VerifyCode;
- public $Email;
- public $CreateTime;
- public $Status;
- public $Website;
-}
-
-class PostRecord
-{
- const STATUS_PUBLISHED=0;
- const STATUS_DRAFT=1;
- const STATUS_PENDING=2;
- const STATUS_STICKY=3;
- public $ID;
- public $AuthorID;
- public $AuthorName;
- public $CreateTime;
- public $ModifyTime;
- public $Title;
- public $Content;
- public $Status;
- public $CommentCount;
-}
-
-class CommentRecord
-{
- public $ID;
- public $PostID;
- public $AuthorName;
- public $AuthorEmail;
- public $AuthorWebsite;
- public $AuthorIP;
- public $CreateTime;
- public $Status;
- public $Content;
-}
-
-class CategoryRecord
-{
- public $ID;
- public $Name;
- public $Description;
- public $PostCount;
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class BlogDataModule extends TModule
+{
+ const DB_FILE_EXT='.db';
+ const DEFAULT_DB_FILE='Application.Data.Blog';
+ private $_db=null;
+ private $_dbFile=null;
+
+ public function init($config)
+ {
+ $this->connectDatabase();
+ }
+
+ public function getDbFile()
+ {
+ if($this->_dbFile===null)
+ $this->_dbFile=Prado::getPathOfNamespace(self::DEFAULT_DB_FILE,self::DB_FILE_EXT);
+ return $this->_dbFile;
+ }
+
+ public function setDbFile($value)
+ {
+ if(($this->_dbFile=Prado::getPathOfNamespace($value,self::DB_FILE_EXT))===null)
+ throw new BlogException(500,'blogdatamodule_dbfile_invalid',$value);
+ }
+
+ protected function createDatabase()
+ {
+ $schemaFile=dirname(__FILE__).'/schema.sql';
+ $statements=explode(';',file_get_contents($schemaFile));
+ foreach($statements as $statement)
+ {
+ if(trim($statement)!=='')
+ {
+ try {
+ $command=$this->_db->createCommand($statement);
+ $command->execute();
+ }
+ catch(TDbException $e)
+ {
+ throw new BlogException(500,'blogdatamodule_createdatabase_failed',$e->getErrorMessage(),$statement);
+ }
+ }
+ }
+ }
+
+ protected function connectDatabase()
+ {
+ $dbFile=$this->getDbFile();
+ $newDb=!is_file($dbFile);
+
+ try {
+ $this->_db=new TDbConnection("sqlite:".$dbFile);
+ $this->_db->Active=true;
+ }
+ catch(TDbException $e)
+ {
+ throw new BlogException(500,'blogdatamodule_dbconnect_failed',$e->getErrorMessage());
+ }
+
+ if($newDb)
+ $this->createDatabase();
+ }
+
+ protected function generateModifier($filter,$orderBy,$limit)
+ {
+ $modifier='';
+ if($filter!=='')
+ $modifier=' WHERE '.$filter;
+ if($orderBy!=='')
+ $modifier.=' ORDER BY '.$orderBy;
+ if($limit!=='')
+ $modifier.=' LIMIT '.$limit;
+ return $modifier;
+ }
+
+ public function query($sql)
+ {
+ try {
+ $command=$this->_db->createCommand($sql);
+ return $command->query();
+ }
+ catch(TDbException $e)
+ {
+ throw new BlogException(500,'blogdatamodule_query_failed',$e->getErrorMessage(),$sql);
+ }
+ }
+
+ protected function populateUserRecord($row)
+ {
+ $userRecord=new UserRecord;
+ $userRecord->ID=(integer)$row['id'];
+ $userRecord->Name=$row['name'];
+ $userRecord->FullName=$row['full_name'];
+ $userRecord->Role=(integer)$row['role'];
+ $userRecord->Password=$row['passwd'];
+ $userRecord->VerifyCode=$row['vcode'];
+ $userRecord->Email=$row['email'];
+ $userRecord->CreateTime=(integer)$row['reg_time'];
+ $userRecord->Status=(integer)$row['status'];
+ $userRecord->Website=$row['website'];
+ return $userRecord;
+ }
+
+ public function queryUsers($filter='',$orderBy='',$limit='')
+ {
+ if($filter!=='')
+ $filter='WHERE '.$filter;
+ $sql="SELECT * FROM tblUsers $filter $orderBy $limit";
+ $rows=$this->query($sql);
+ $users=array();
+ foreach($rows as $row)
+ $users[]=$this->populateUserRecord($row);
+ return $users;
+ }
+
+ public function queryUserCount($filter)
+ {
+ if($filter!=='')
+ $filter='WHERE '.$filter;
+ $sql="SELECT COUNT(id) AS user_count FROM tblUsers $filter";
+ $result=$this->query($sql);
+ if(($row=$result->read())!==false)
+ return $row['user_count'];
+ else
+ return 0;
+ }
+
+ public function queryUserByID($id)
+ {
+ $sql="SELECT * FROM tblUsers WHERE id=$id";
+ $result=$this->query($sql);
+ if(($row=$result->read())!==false)
+ return $this->populateUserRecord($row);
+ else
+ return null;
+ }
+
+ public function queryUserByName($name)
+ {
+ $command=$this->_db->createCommand("SELECT * FROM tblUsers WHERE name=?");
+ $command->bindValue(1, $name);
+
+ $result=$command->query();
+
+ if(($row=$result->read())!==false)
+ return $this->populateUserRecord($row);
+ else
+ return null;
+ }
+
+ public function insertUser($user)
+ {
+ $command=$this->_db->createCommand("INSERT INTO tblUsers ".
+ "(name,full_name,role,passwd,email,reg_time,status,website) ".
+ "VALUES (?,?,?,?,?,?,?,?)");
+ $command->bindValue(1, $user->Name);
+ $command->bindValue(2, $user->FullName);
+ $command->bindValue(3, $user->Role);
+ $command->bindValue(4, $user->Password);
+ $command->bindValue(5, $user->Email);
+ $command->bindValue(6, time());
+ $command->bindValue(7, $user->Status);
+ $command->bindValue(8, $user->Website);
+ $command->execute();
+
+ $user->ID=$this->_db->getLastInsertID();
+ }
+
+ public function updateUser($user)
+ {
+ $command=$this->_db->createCommand("UPDATE tblUsers SET
+ name=?,
+ full_name=?,
+ role=?,
+ passwd=?,
+ vcode=?,
+ email=?,
+ status=?,
+ website=?
+ WHERE id=?");
+ $command->bindValue(1, $user->Name);
+ $command->bindValue(2, $user->FullName);
+ $command->bindValue(3, $user->Role);
+ $command->bindValue(4, $user->Password);
+ $command->bindValue(5, $user->VerifyCode);
+ $command->bindValue(6, $user->Email);
+ $command->bindValue(7, $user->Status);
+ $command->bindValue(8, $user->Website);
+ $command->bindValue(9, $user->ID);
+ $command->execute();
+ }
+
+ public function deleteUser($id)
+ {
+ $command=$this->_db->createCommand("DELETE FROM tblUsers WHERE id=?");
+ $command->bindValue(1, $id);
+ $command->execute();
+ }
+
+ protected function populatePostRecord($row)
+ {
+ $postRecord=new PostRecord;
+ $postRecord->ID=(integer)$row['id'];
+ $postRecord->AuthorID=(integer)$row['author_id'];
+ if($row['author_full_name']!=='')
+ $postRecord->AuthorName=$row['author_full_name'];
+ else
+ $postRecord->AuthorName=$row['author_name'];
+ $postRecord->CreateTime=(integer)$row['create_time'];
+ $postRecord->ModifyTime=(integer)$row['modify_time'];
+ $postRecord->Title=$row['title'];
+ $postRecord->Content=$row['content'];
+ $postRecord->Status=(integer)$row['status'];
+ $postRecord->CommentCount=(integer)$row['comment_count'];
+ return $postRecord;
+ }
+
+ public function queryPosts($postFilter,$categoryFilter,$orderBy,$limit)
+ {
+ //FIXME this is insecure by design since it misses proper escaping
+ $filter='';
+ if($postFilter!=='')
+ $filter.=" AND $postFilter";
+ if($categoryFilter!=='')
+ $filter.=" AND a.id IN (SELECT post_id AS id FROM tblPost2Category WHERE $categoryFilter)";
+ $sql="SELECT a.id AS id,
+ a.author_id AS author_id,
+ b.name AS author_name,
+ b.full_name AS author_full_name,
+ a.create_time AS create_time,
+ a.modify_time AS modify_time,
+ a.title AS title,
+ a.content AS content,
+ a.status AS status,
+ a.comment_count AS comment_count
+ FROM tblPosts a, tblUsers b
+ WHERE a.author_id=b.id $filter $orderBy $limit";
+ $rows=$this->query($sql);
+ $posts=array();
+ foreach($rows as $row)
+ $posts[]=$this->populatePostRecord($row);
+ return $posts;
+ }
+
+ public function queryPostsSearch($keywords,$orderBy,$limit)
+ {
+ $sql="SELECT a.id AS id,
+ a.author_id AS author_id,
+ b.name AS author_name,
+ b.full_name AS author_full_name,
+ a.create_time AS create_time,
+ a.modify_time AS modify_time,
+ a.title AS title,
+ a.content AS content,
+ a.status AS status,
+ a.comment_count AS comment_count
+ FROM tblPosts a, tblUsers b
+ WHERE a.author_id=b.id AND a.status=0";
+
+ foreach($keywords as $keyword)
+ $sql.=" AND (content LIKE ? OR title LIKE ?)";
+
+ $sql.=" $orderBy $limit";
+
+ $command=$this->_db->createCommand($sql);
+
+ $i=1;
+ foreach($keywords as $keyword)
+ {
+ $command->bindValue($i, "%".$keyword."%");
+ $i++;
+ }
+
+ $rows=$command->query();
+
+ $posts=array();
+ foreach($rows as $row)
+ $posts[]=$this->populatePostRecord($row);
+ return $posts;
+
+ }
+
+ public function queryPostCount($postFilter,$categoryFilter)
+ {
+ //FIXME this is insecure by design since it misses proper escaping
+ $filter='';
+ if($postFilter!=='')
+ $filter.=" AND $postFilter";
+ if($categoryFilter!=='')
+ $filter.=" AND a.id IN (SELECT post_id AS id FROM tblPost2Category WHERE $categoryFilter)";
+ $sql="SELECT COUNT(a.id) AS post_count
+ FROM tblPosts a, tblUsers b
+ WHERE a.author_id=b.id $filter";
+ $result=$this->query($sql);
+ if(($row=$result->read())!==false)
+ return $row['post_count'];
+ else
+ return 0;
+ }
+
+ public function queryPostByID($id)
+ {
+ $sql="SELECT a.id AS id,
+ a.author_id AS author_id,
+ b.name AS author_name,
+ b.full_name AS author_full_name,
+ a.create_time AS create_time,
+ a.modify_time AS modify_time,
+ a.title AS title,
+ a.content AS content,
+ a.status AS status,
+ a.comment_count AS comment_count
+ FROM tblPosts a, tblUsers b
+ WHERE a.id=? AND a.author_id=b.id";
+
+ $command=$this->_db->createCommand($sql);
+ $command->bindValue(1, $id);
+
+ $result=$command->query();
+
+ if(($row=$result->read())!==false)
+ return $this->populatePostRecord($row);
+ else
+ return null;
+ }
+
+ public function insertPost($post,$catIDs)
+ {
+ $command=$this->_db->createCommand("INSERT INTO tblPosts
+ (author_id,create_time,modify_time,title,content,status)
+ VALUES (?,?,?,?,?,?)");
+ $command->bindValue(1, $post->AuthorID);
+ $command->bindValue(2, $post->CreateTime);
+ $command->bindValue(3, $post->ModifyTime);
+ $command->bindValue(4, $post->Title);
+ $command->bindValue(5, $post->Content);
+ $command->bindValue(6, $post->Status);
+
+ $command->execute();
+ $post->ID=$this->_db->getLastInsertID();
+ foreach($catIDs as $catID)
+ $this->insertPostCategory($post->ID,$catID);
+ }
+
+ public function updatePost($post,$newCatIDs=null)
+ {
+ if($newCatIDs!==null)
+ {
+ $cats=$this->queryCategoriesByPostID($post->ID);
+ $catIDs=array();
+ foreach($cats as $cat)
+ $catIDs[]=$cat->ID;
+ $deleteIDs=array_diff($catIDs,$newCatIDs);
+ foreach($deleteIDs as $id)
+ $this->deletePostCategory($post->ID,$id);
+ $insertIDs=array_diff($newCatIDs,$catIDs);
+ foreach($insertIDs as $id)
+ $this->insertPostCategory($post->ID,$id);
+ }
+
+ $command=$this->_db->createCommand("UPDATE tblPosts SET
+ modify_time=?,
+ title=?,
+ content=?,
+ status=?
+ WHERE id=?");
+ $command->bindValue(1, $post->ModifyTime);
+ $command->bindValue(2, $post->Title);
+ $command->bindValue(3, $post->Content);
+ $command->bindValue(4, $post->Status);
+ $command->bindValue(5, $post->ID);
+
+ $command->execute();
+ }
+
+ public function deletePost($id)
+ {
+ $cats=$this->queryCategoriesByPostID($id);
+ foreach($cats as $cat)
+ $this->deletePostCategory($id,$cat->ID);
+
+ $command=$this->_db->createCommand("DELETE FROM tblComments WHERE post_id=?");
+ $command->bindValue(1, $id);
+ $command->execute();
+
+ $command=$this->_db->createCommand("DELETE FROM tblPosts WHERE id=?");
+ $command->bindValue(1, $id);
+ $command->execute();
+ }
+
+ protected function populateCommentRecord($row)
+ {
+ $commentRecord=new CommentRecord;
+ $commentRecord->ID=(integer)$row['id'];
+ $commentRecord->PostID=(integer)$row['post_id'];
+ $commentRecord->AuthorName=$row['author_name'];
+ $commentRecord->AuthorEmail=$row['author_email'];
+ $commentRecord->AuthorWebsite=$row['author_website'];
+ $commentRecord->AuthorIP=$row['author_ip'];
+ $commentRecord->CreateTime=(integer)$row['create_time'];
+ $commentRecord->Content=$row['content'];
+ $commentRecord->Status=(integer)$row['status'];
+ return $commentRecord;
+ }
+
+ public function queryComments($filter,$orderBy,$limit)
+ {
+ //FIXME this is insecure by design since it misses proper escaping
+ if($filter!=='')
+ $filter='WHERE '.$filter;
+ $sql="SELECT * FROM tblComments $filter $orderBy $limit";
+ $rows=$this->query($sql);
+ $comments=array();
+ foreach($rows as $row)
+ $comments[]=$this->populateCommentRecord($row);
+ return $comments;
+ }
+
+ public function queryCommentsByPostID($id)
+ {
+ $sql="SELECT * FROM tblComments WHERE post_id=? ORDER BY create_time DESC";
+ $command=$this->_db->createCommand($sql);
+ $command->bindValue(1, $id);
+
+ $rows=$command->query();
+
+ $comments=array();
+ foreach($rows as $row)
+ $comments[]=$this->populateCommentRecord($row);
+ return $comments;
+ }
+
+ public function insertComment($comment)
+ {
+ $sql="INSERT INTO tblComments
+ (post_id,author_name,author_email,author_website,author_ip,create_time,status,content)
+ VALUES (?,?,?,?,?,?,?,?)";
+ $command=$this->_db->createCommand($sql);
+ $command->bindValue(1, $comment->PostID);
+ $command->bindValue(2, $comment->AuthorName);
+ $command->bindValue(3, $comment->AuthorEmail);
+ $command->bindValue(4, $comment->AuthorWebsite);
+ $command->bindValue(5, $comment->AuthorIP);
+ $command->bindValue(6, $comment->CreateTime);
+ $command->bindValue(7, $comment->Status);
+ $command->bindValue(8, $comment->Content);
+
+ $command->execute();
+ $comment->ID=$this->_db->getLastInsertID();
+ $this->query("UPDATE tblPosts SET comment_count=comment_count+1 WHERE id={$comment->PostID}");
+ }
+
+ public function updateComment($comment)
+ {
+ $sql="UPDATE tblComments SET status=? WHERE id=?";
+ $command=$this->_db->createCommand($sql);
+ $command->bindValue(1, $comment->Status);
+ $command->bindValue(2, $comment->ID);
+
+ $command->execute();
+ }
+
+ public function deleteComment($id)
+ {
+ $sql="SELECT post_id FROM tblComments WHERE id=?";
+ $command=$this->_db->createCommand($sql);
+ $command->bindValue(1, $id);
+ $result=$command->query();
+
+ if(($row=$result->read())!==false)
+ {
+ $command=$this->_db->createCommand("DELETE FROM tblComments WHERE id=?");
+ $command->bindValue(1, $id);
+ $command->execute();
+
+ $command=$this->_db->createCommand("UPDATE tblPosts SET comment_count=comment_count-1 WHERE id=?");
+ $command->bindValue(1, $row['post_id']);
+ $command->execute();
+ }
+ }
+
+ protected function populateCategoryRecord($row)
+ {
+ $catRecord=new CategoryRecord;
+ $catRecord->ID=(integer)$row['id'];
+ $catRecord->Name=$row['name'];
+ $catRecord->Description=$row['description'];
+ $catRecord->PostCount=$row['post_count'];
+ return $catRecord;
+ }
+
+ public function queryCategories()
+ {
+ $sql="SELECT * FROM tblCategories ORDER BY name ASC";
+ $rows=$this->query($sql);
+ $cats=array();
+ foreach($rows as $row)
+ $cats[]=$this->populateCategoryRecord($row);
+ return $cats;
+ }
+
+ public function queryCategoriesByPostID($postID)
+ {
+ $sql="SELECT a.id AS id,
+ a.name AS name,
+ a.description AS description,
+ a.post_count AS post_count
+ FROM tblCategories a, tblPost2Category b
+ WHERE a.id=b.category_id AND b.post_id=? ORDER BY a.name";
+
+ $command=$this->_db->createCommand($sql);
+ $command->bindValue(1, $postID);
+ $rows=$command->query();
+
+ $cats=array();
+ foreach($rows as $row)
+ $cats[]=$this->populateCategoryRecord($row);
+ return $cats;
+ }
+
+ public function queryCategoryByID($id)
+ {
+ $sql="SELECT * FROM tblCategories WHERE id=?";
+
+ $command=$this->_db->createCommand($sql);
+ $command->bindValue(1, $id);
+ $result=$command->query();
+
+ if(($row=$result->read())!==false)
+ return $this->populateCategoryRecord($row);
+ else
+ return null;
+ }
+
+ public function queryCategoryByName($name)
+ {
+ $sql="SELECT * FROM tblCategories WHERE name=?";
+
+ $command=$this->_db->createCommand($sql);
+ $command->bindValue(1, $name);
+ $result=$command->query();
+
+ if(($row=$result->read())!==false)
+ return $this->populateCategoryRecord($row);
+ else
+ return null;
+ }
+
+ public function insertCategory($category)
+ {
+ $sql="INSERT INTO tblCategories
+ (name,description)
+ VALUES (?,?)";
+
+ $command=$this->_db->createCommand($sql);
+ $command->bindValue(1, $category->Name);
+ $command->bindValue(2, $category->Description);
+ $command->execute();
+
+ $category->ID=$this->_db->getLastInsertID();
+ }
+
+ public function updateCategory($category)
+ {
+ $sql="UPDATE tblCategories SET name=?, description=?, post_count=? WHERE id=?";
+
+ $command=$this->_db->createCommand($sql);
+ $command->bindValue(1, $category->Name);
+ $command->bindValue(2, $category->Description);
+ $command->bindValue(3, $category->PostCount);
+ $command->bindValue(4, $category->ID);
+
+ $command->execute();
+ }
+
+ public function deleteCategory($id)
+ {
+ $sql="DELETE FROM tblPost2Category WHERE category_id=?";
+ $command=$this->_db->createCommand($sql);
+ $command->bindValue(1, $id);
+ $command->execute();
+
+ $sql="DELETE FROM tblCategories WHERE id=?";
+ $command=$this->_db->createCommand($sql);
+ $command->bindValue(1, $id);
+ $command->execute();
+ }
+
+ public function insertPostCategory($postID,$categoryID)
+ {
+ $sql="INSERT INTO tblPost2Category (post_id, category_id) VALUES (?, ?)";
+ $command=$this->_db->createCommand($sql);
+ $command->bindValue(1, $postID);
+ $command->bindValue(2, $categoryID);
+ $command->execute();
+
+ $sql="UPDATE tblCategories SET post_count=post_count+1 WHERE id=?";
+ $command=$this->_db->createCommand($sql);
+ $command->bindValue(1, $categoryID);
+ $command->execute();
+
+ }
+
+ public function deletePostCategory($postID,$categoryID)
+ {
+ $sql="DELETE FROM tblPost2Category WHERE post_id=? AND category_id=?";
+ $command=$this->_db->createCommand($sql);
+ $command->bindValue(1, $postID);
+ $command->bindValue(2, $categoryID);
+ $result=$command->query();
+
+ if($result->getRowCount()>0)
+ {
+ $sql="UPDATE tblCategories SET post_count=post_count-1 WHERE id=?";
+ $command=$this->_db->createCommand($sql);
+ $command->bindValue(1, $categoryID);
+ $command->execute();
+ }
+ }
+
+ public function queryEarliestPostTime()
+ {
+ $sql="SELECT MIN(create_time) AS create_time FROM tblPosts";
+ $result=$this->query($sql);
+ if(($row=$result->read())!==false)
+ return $row['create_time'];
+ else
+ return time();
+ }
+}
+
+class UserRecord
+{
+ const ROLE_USER=0;
+ const ROLE_ADMIN=1;
+ const STATUS_NORMAL=0;
+ const STATUS_DISABLED=1;
+ const STATUS_PENDING=2;
+ public $ID;
+ public $Name;
+ public $FullName;
+ public $Role;
+ public $Password;
+ public $VerifyCode;
+ public $Email;
+ public $CreateTime;
+ public $Status;
+ public $Website;
+}
+
+class PostRecord
+{
+ const STATUS_PUBLISHED=0;
+ const STATUS_DRAFT=1;
+ const STATUS_PENDING=2;
+ const STATUS_STICKY=3;
+ public $ID;
+ public $AuthorID;
+ public $AuthorName;
+ public $CreateTime;
+ public $ModifyTime;
+ public $Title;
+ public $Content;
+ public $Status;
+ public $CommentCount;
+}
+
+class CommentRecord
+{
+ public $ID;
+ public $PostID;
+ public $AuthorName;
+ public $AuthorEmail;
+ public $AuthorWebsite;
+ public $AuthorIP;
+ public $CreateTime;
+ public $Status;
+ public $Content;
+}
+
+class CategoryRecord
+{
+ public $ID;
+ public $Name;
+ public $Description;
+ public $PostCount;
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Common/BlogErrorHandler.php b/demos/blog/protected/Common/BlogErrorHandler.php
index 06042be1..f5144fff 100644
--- a/demos/blog/protected/Common/BlogErrorHandler.php
+++ b/demos/blog/protected/Common/BlogErrorHandler.php
@@ -1,46 +1,46 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-Prado::using('System.Exceptions.TErrorHandler');
-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/
- */
-class BlogErrorHandler extends TErrorHandler
-{
- /**
- * Displays error to the client user.
- * THttpException and errors happened when the application is in <b>Debug</b>
- * mode will be displayed to the client user.
- * @param integer response status code
- * @param Exception exception instance
- */
- protected function handleExternalError($statusCode,$exception)
- {
- if($exception instanceof BlogException)
- {
- $message=$exception->getMessage();
- Prado::log($message,TLogger::ERROR,'BlogApplication');
- $message=urldecode($this->getApplication()->getSecurityManager()->hashData($message));
- $this->Response->redirect($this->Service->constructUrl('ErrorReport',array('msg'=>$message),false));
- }
- else
- parent::handleExternalError($statusCode,$exception);
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+Prado::using('System.Exceptions.TErrorHandler');
+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/
+ */
+class BlogErrorHandler extends TErrorHandler
+{
+ /**
+ * Displays error to the client user.
+ * THttpException and errors happened when the application is in <b>Debug</b>
+ * mode will be displayed to the client user.
+ * @param integer response status code
+ * @param Exception exception instance
+ */
+ protected function handleExternalError($statusCode,$exception)
+ {
+ if($exception instanceof BlogException)
+ {
+ $message=$exception->getMessage();
+ Prado::log($message,TLogger::ERROR,'BlogApplication');
+ $message=urldecode($this->getApplication()->getSecurityManager()->hashData($message));
+ $this->Response->redirect($this->Service->constructUrl('ErrorReport',array('msg'=>$message),false));
+ }
+ else
+ parent::handleExternalError($statusCode,$exception);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Common/BlogException.php b/demos/blog/protected/Common/BlogException.php
index 17ae526f..e5ade8a3 100644
--- a/demos/blog/protected/Common/BlogException.php
+++ b/demos/blog/protected/Common/BlogException.php
@@ -1,31 +1,31 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class BlogException extends THttpException
-{
- /**
- * @return string path to the error message file
- */
- protected function getErrorMessageFile()
- {
- return dirname(__FILE__).'/messages.txt';
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class BlogException extends THttpException
+{
+ /**
+ * @return string path to the error message file
+ */
+ protected function getErrorMessageFile()
+ {
+ return dirname(__FILE__).'/messages.txt';
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Common/BlogPage.php b/demos/blog/protected/Common/BlogPage.php
index aaf0c7e1..a5ac514e 100644
--- a/demos/blog/protected/Common/BlogPage.php
+++ b/demos/blog/protected/Common/BlogPage.php
@@ -1,49 +1,49 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class BlogPage extends TPage
-{
- public function onPreInit($param)
- {
- parent::onPreInit($param);
- $this->Theme=$this->Application->Parameters['ThemeName'];
- }
-
- public function getDataAccess()
- {
- return $this->getApplication()->getModule('data');
- }
-
- public function gotoDefaultPage()
- {
- $this->gotoPage($this->Service->DefaultPage);
- }
-
- public function gotoPage($pagePath,$getParameters=null)
- {
- $this->Response->redirect($this->Service->constructUrl($pagePath,$getParameters,false));
- }
-
- public function reportError($errorCode)
- {
- $this->gotoPage('ErrorReport',array('id'=>$errorCode));
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class BlogPage extends TPage
+{
+ public function onPreInit($param)
+ {
+ parent::onPreInit($param);
+ $this->Theme=$this->Application->Parameters['ThemeName'];
+ }
+
+ public function getDataAccess()
+ {
+ return $this->getApplication()->getModule('data');
+ }
+
+ public function gotoDefaultPage()
+ {
+ $this->gotoPage($this->Service->DefaultPage);
+ }
+
+ public function gotoPage($pagePath,$getParameters=null)
+ {
+ $this->Response->redirect($this->Service->constructUrl($pagePath,$getParameters,false));
+ }
+
+ public function reportError($errorCode)
+ {
+ $this->gotoPage('ErrorReport',array('id'=>$errorCode));
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Common/BlogUser.php b/demos/blog/protected/Common/BlogUser.php
index 865d7659..08418965 100644
--- a/demos/blog/protected/Common/BlogUser.php
+++ b/demos/blog/protected/Common/BlogUser.php
@@ -1,60 +1,60 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-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/
- */
-class BlogUser extends TUser
-{
- private $_id;
-
- public function getID()
- {
- return $this->_id;
- }
-
- public function setID($value)
- {
- $this->_id=$value;
- }
-
- public function getIsAdmin()
- {
- return $this->isInRole('admin');
- }
-
- public function saveToString()
- {
- $a=array($this->_id,parent::saveToString());
- return serialize($a);
- }
-
- public function loadFromString($data)
- {
- if(!empty($data))
- {
- list($id,$str)=unserialize($data);
- $this->_id=$id;
- return parent::loadFromString($str);
- }
- else
- return $this;
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+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/
+ */
+class BlogUser extends TUser
+{
+ private $_id;
+
+ public function getID()
+ {
+ return $this->_id;
+ }
+
+ public function setID($value)
+ {
+ $this->_id=$value;
+ }
+
+ public function getIsAdmin()
+ {
+ return $this->isInRole('admin');
+ }
+
+ public function saveToString()
+ {
+ $a=array($this->_id,parent::saveToString());
+ return serialize($a);
+ }
+
+ public function loadFromString($data)
+ {
+ if(!empty($data))
+ {
+ list($id,$str)=unserialize($data);
+ $this->_id=$id;
+ return parent::loadFromString($str);
+ }
+ else
+ return $this;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Common/BlogUserManager.php b/demos/blog/protected/Common/BlogUserManager.php
index efaa7f1f..26a4427a 100644
--- a/demos/blog/protected/Common/BlogUserManager.php
+++ b/demos/blog/protected/Common/BlogUserManager.php
@@ -1,95 +1,95 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-Prado::using('System.Security.IUserManager');
-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/
- */
-class BlogUserManager extends TModule implements IUserManager
-{
- public function getGuestName()
- {
- return 'Guest';
- }
-
- /**
- * Returns a user instance given the user name.
- * @param string user name, null if it is a guest.
- * @return TUser the user instance, null if the specified username is not in the user database.
- */
- public function getUser($username=null)
- {
- if($username===null)
- return new BlogUser($this);
- else
- {
- $username=strtolower($username);
- $db=$this->Application->getModule('data');
- if(($userRecord=$db->queryUserByName($username))!==null)
- {
- $user=new BlogUser($this);
- $user->setID($userRecord->ID);
- $user->setName($username);
- $user->setIsGuest(false);
- $user->setRoles($userRecord->Role===UserRecord::ROLE_USER?'user':'admin');
- return $user;
- }
- else
- return null;
- }
- }
-
- /**
- * Validates if the username and password are correct.
- * @param string user name
- * @param string password
- * @return boolean true if validation is successful, false otherwise.
- */
- public function validateUser($username,$password)
- {
- $db=$this->Application->getModule('data');
- if(($userRecord=$db->queryUserByName($username))!==null)
- return $userRecord->Password===md5($password) && $userRecord->Status===UserRecord::STATUS_NORMAL;
- else
- return false;
- }
-
- /**
- * Saves user auth data into a cookie.
- * @param THttpCookie the cookie to receive the user auth data.
- * @since 3.1.1
- */
- public function saveUserToCookie($cookie)
- {
- // do nothing since we don't support cookie-based auth in this example
- }
-
- /**
- * Returns a user instance according to auth data stored in a cookie.
- * @param THttpCookie the cookie storing user authentication information
- * @return TUser the user instance generated based on the cookie auth data, null if the cookie does not have valid auth data.
- * @since 3.1.1
- */
- public function getUserFromCookie($cookie)
- {
- // do nothing since we don't support cookie-based auth in this example
- return null;
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+Prado::using('System.Security.IUserManager');
+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/
+ */
+class BlogUserManager extends TModule implements IUserManager
+{
+ public function getGuestName()
+ {
+ return 'Guest';
+ }
+
+ /**
+ * Returns a user instance given the user name.
+ * @param string user name, null if it is a guest.
+ * @return TUser the user instance, null if the specified username is not in the user database.
+ */
+ public function getUser($username=null)
+ {
+ if($username===null)
+ return new BlogUser($this);
+ else
+ {
+ $username=strtolower($username);
+ $db=$this->Application->getModule('data');
+ if(($userRecord=$db->queryUserByName($username))!==null)
+ {
+ $user=new BlogUser($this);
+ $user->setID($userRecord->ID);
+ $user->setName($username);
+ $user->setIsGuest(false);
+ $user->setRoles($userRecord->Role===UserRecord::ROLE_USER?'user':'admin');
+ return $user;
+ }
+ else
+ return null;
+ }
+ }
+
+ /**
+ * Validates if the username and password are correct.
+ * @param string user name
+ * @param string password
+ * @return boolean true if validation is successful, false otherwise.
+ */
+ public function validateUser($username,$password)
+ {
+ $db=$this->Application->getModule('data');
+ if(($userRecord=$db->queryUserByName($username))!==null)
+ return $userRecord->Password===md5($password) && $userRecord->Status===UserRecord::STATUS_NORMAL;
+ else
+ return false;
+ }
+
+ /**
+ * Saves user auth data into a cookie.
+ * @param THttpCookie the cookie to receive the user auth data.
+ * @since 3.1.1
+ */
+ public function saveUserToCookie($cookie)
+ {
+ // do nothing since we don't support cookie-based auth in this example
+ }
+
+ /**
+ * Returns a user instance according to auth data stored in a cookie.
+ * @param THttpCookie the cookie storing user authentication information
+ * @return TUser the user instance generated based on the cookie auth data, null if the cookie does not have valid auth data.
+ * @since 3.1.1
+ */
+ public function getUserFromCookie($cookie)
+ {
+ // do nothing since we don't support cookie-based auth in this example
+ return null;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Common/XListMenu.php b/demos/blog/protected/Common/XListMenu.php
index 7dadfbe4..92ab2984 100644
--- a/demos/blog/protected/Common/XListMenu.php
+++ b/demos/blog/protected/Common/XListMenu.php
@@ -1,127 +1,127 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-Prado::using('System.Web.UI.WebControls.TListControl');
-
-/**
- * XListMenu class
- *
- * XListMenu displays a list of hyperlinks that can be used for page menus.
- * Menu items adjust their css class automatically according to the current
- * page displayed. In particular, a menu item is considered as active if
- * the URL it represents is for the page currently displayed.
- *
- * Usage of XListMenu is similar to PRADO list controls. Each list item has
- * two extra properties: {@link XListMenuItem::setPagePath PagePath} and
- * {@link XListMenuItem::setNavigateUrl NavigateUrl}. The former is used to
- * determine if the item is active or not, while the latter specifies the
- * URL for the item. If the latter is not specified, a URL to the page is
- * generated automatically.
- *
- * In template, you may use the following tags to specify a menu:
- * <code>
- * <com:XListMenu ActiveCssClass="class1" InactiveCssClass="class2">
- * <com:XListMenuItem Text="Menu 1" PagePath="Page1" />
- * <com:XListMenuItem Text="Menu 2" PagePath="Page2" NavigateUrl="/page2" />
- * </com:XListMenu>
- * </code>
- *
- * @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2006 PradoSoft
- * @license http://www.pradosoft.com/license/
- */
-class XListMenu extends TListControl
-{
- public function addParsedObject($object)
- {
- if($object instanceof XListMenuItem)
- parent::addParsedObject($object);
- }
-
- public function getActiveCssClass()
- {
- return $this->getViewState('ActiveCssClass','');
- }
-
- public function setActiveCssClass($value)
- {
- $this->setViewState('ActiveCssClass',$value,'');
- }
-
- public function getInactiveCssClass()
- {
- return $this->getViewState('InactiveCssClass','');
- }
-
- public function setInactiveCssClass($value)
- {
- $this->setViewState('InactiveCssClass',$value,'');
- }
-
- public function render($writer)
- {
- if(($activeClass=$this->getActiveCssClass())!=='')
- $activeClass=' class="'.$activeClass.'"';
- if(($inactiveClass=$this->getInactiveCssClass())!=='')
- $inactiveClass=' class="'.$inactiveClass.'"';
- $currentPagePath=$this->getPage()->getPagePath();
- $writer->write("<ul>\n");
- foreach($this->getItems() as $item)
- {
- $pagePath=$item->getPagePath();
- //if(strpos($currentPagePath.'.',$pagePath.'.')===0)
- if($pagePath[strlen($pagePath)-1]==='*')
- {
- if(strpos($currentPagePath.'.',rtrim($pagePath,'*'))===0)
- $cssClass=$activeClass;
- else
- $cssClass=$inactiveClass;
- }
- else
- {
- if($pagePath===$currentPagePath)
- $cssClass=$activeClass;
- else
- $cssClass=$inactiveClass;
- }
- if(($url=$item->getNavigateUrl())==='')
- $url=$this->getService()->constructUrl($pagePath);
- $writer->write("<li><a href=\"$url\"$cssClass>".$item->getText()."</a></li>\n");
- }
- $writer->write("</ul>");
- }
-}
-
-class XListMenuItem extends TListItem
-{
- public function getPagePath()
- {
- return $this->getValue();
- }
-
- public function setPagePath($value)
- {
- $this->setValue($value);
- }
-
- public function getNavigateUrl()
- {
- return $this->hasAttribute('NavigateUrl')?$this->getAttribute('NavigateUrl'):'';
- }
-
- public function setNavigateUrl($value)
- {
- $this->setAttribute('NavigateUrl',$value);
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+Prado::using('System.Web.UI.WebControls.TListControl');
+
+/**
+ * XListMenu class
+ *
+ * XListMenu displays a list of hyperlinks that can be used for page menus.
+ * Menu items adjust their css class automatically according to the current
+ * page displayed. In particular, a menu item is considered as active if
+ * the URL it represents is for the page currently displayed.
+ *
+ * Usage of XListMenu is similar to PRADO list controls. Each list item has
+ * two extra properties: {@link XListMenuItem::setPagePath PagePath} and
+ * {@link XListMenuItem::setNavigateUrl NavigateUrl}. The former is used to
+ * determine if the item is active or not, while the latter specifies the
+ * URL for the item. If the latter is not specified, a URL to the page is
+ * generated automatically.
+ *
+ * In template, you may use the following tags to specify a menu:
+ * <code>
+ * <com:XListMenu ActiveCssClass="class1" InactiveCssClass="class2">
+ * <com:XListMenuItem Text="Menu 1" PagePath="Page1" />
+ * <com:XListMenuItem Text="Menu 2" PagePath="Page2" NavigateUrl="/page2" />
+ * </com:XListMenu>
+ * </code>
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 2006 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ */
+class XListMenu extends TListControl
+{
+ public function addParsedObject($object)
+ {
+ if($object instanceof XListMenuItem)
+ parent::addParsedObject($object);
+ }
+
+ public function getActiveCssClass()
+ {
+ return $this->getViewState('ActiveCssClass','');
+ }
+
+ public function setActiveCssClass($value)
+ {
+ $this->setViewState('ActiveCssClass',$value,'');
+ }
+
+ public function getInactiveCssClass()
+ {
+ return $this->getViewState('InactiveCssClass','');
+ }
+
+ public function setInactiveCssClass($value)
+ {
+ $this->setViewState('InactiveCssClass',$value,'');
+ }
+
+ public function render($writer)
+ {
+ if(($activeClass=$this->getActiveCssClass())!=='')
+ $activeClass=' class="'.$activeClass.'"';
+ if(($inactiveClass=$this->getInactiveCssClass())!=='')
+ $inactiveClass=' class="'.$inactiveClass.'"';
+ $currentPagePath=$this->getPage()->getPagePath();
+ $writer->write("<ul>\n");
+ foreach($this->getItems() as $item)
+ {
+ $pagePath=$item->getPagePath();
+ //if(strpos($currentPagePath.'.',$pagePath.'.')===0)
+ if($pagePath[strlen($pagePath)-1]==='*')
+ {
+ if(strpos($currentPagePath.'.',rtrim($pagePath,'*'))===0)
+ $cssClass=$activeClass;
+ else
+ $cssClass=$inactiveClass;
+ }
+ else
+ {
+ if($pagePath===$currentPagePath)
+ $cssClass=$activeClass;
+ else
+ $cssClass=$inactiveClass;
+ }
+ if(($url=$item->getNavigateUrl())==='')
+ $url=$this->getService()->constructUrl($pagePath);
+ $writer->write("<li><a href=\"$url\"$cssClass>".$item->getText()."</a></li>\n");
+ }
+ $writer->write("</ul>");
+ }
+}
+
+class XListMenuItem extends TListItem
+{
+ public function getPagePath()
+ {
+ return $this->getValue();
+ }
+
+ public function setPagePath($value)
+ {
+ $this->setValue($value);
+ }
+
+ public function getNavigateUrl()
+ {
+ return $this->hasAttribute('NavigateUrl')?$this->getAttribute('NavigateUrl'):'';
+ }
+
+ public function setNavigateUrl($value)
+ {
+ $this->setAttribute('NavigateUrl',$value);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Layouts/MainLayout.php b/demos/blog/protected/Layouts/MainLayout.php
index cfc42d50..b7956d75 100644
--- a/demos/blog/protected/Layouts/MainLayout.php
+++ b/demos/blog/protected/Layouts/MainLayout.php
@@ -1,24 +1,24 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class MainLayout extends TTemplateControl
-{
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class MainLayout extends TTemplateControl
+{
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Pages/Admin/AdminMenu.php b/demos/blog/protected/Pages/Admin/AdminMenu.php
index a631d5b5..4687a5ce 100644
--- a/demos/blog/protected/Pages/Admin/AdminMenu.php
+++ b/demos/blog/protected/Pages/Admin/AdminMenu.php
@@ -1,24 +1,24 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class AdminMenu extends TTemplateControl
-{
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class AdminMenu extends TTemplateControl
+{
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Pages/Admin/ConfigMan.php b/demos/blog/protected/Pages/Admin/ConfigMan.php
index 61516c27..c60a04e8 100644
--- a/demos/blog/protected/Pages/Admin/ConfigMan.php
+++ b/demos/blog/protected/Pages/Admin/ConfigMan.php
@@ -1,77 +1,77 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class ConfigMan extends BlogPage
-{
- const CONFIG_FILE='Application.Data.Settings';
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $parameters=$this->Application->Parameters;
- $this->SiteTitle->Text=$parameters['SiteTitle'];
- $this->SiteSubtitle->Text=$parameters['SiteSubtitle'];
- $this->SiteOwner->Text=$parameters['SiteOwner'];
- $this->AdminEmail->Text=$parameters['AdminEmail'];
- $this->MultipleUser->Checked=TPropertyValue::ensureBoolean($parameters['MultipleUser']);
- $this->AccountApproval->Checked=TPropertyValue::ensureBoolean($parameters['AccountApproval']);
- $this->PostPerPage->Text=$parameters['PostPerPage'];
- $this->RecentComments->Text=$parameters['RecentComments'];
- $this->PostApproval->Checked=TPropertyValue::ensureBoolean($parameters['PostApproval']);
- $themes=$this->Service->ThemeManager->AvailableThemes;
- $this->ThemeName->DataSource=$themes;
- $this->ThemeName->dataBind();
- $this->ThemeName->SelectedValue=array_search($parameters['ThemeName'],$themes);
- }
- }
-
- public function saveButtonClicked($sender,$param)
- {
- $dom=new TXmlDocument;
- $dom->Encoding='utf-8';
- $dom->TagName='parameters';
- $elements=$dom->Elements;
- $elements[]=$this->createParameter('SiteTitle',$this->SiteTitle->Text);
- $elements[]=$this->createParameter('SiteSubtitle',$this->SiteSubtitle->Text);
- $elements[]=$this->createParameter('SiteOwner',$this->SiteOwner->Text);
- $elements[]=$this->createParameter('AdminEmail',$this->AdminEmail->Text);
- $elements[]=$this->createParameter('MultipleUser',$this->MultipleUser->Checked);
- $elements[]=$this->createParameter('AccountApproval',$this->AccountApproval->Checked);
- $elements[]=$this->createParameter('PostPerPage',$this->PostPerPage->Text);
- $elements[]=$this->createParameter('RecentComments',$this->RecentComments->Text);
- $elements[]=$this->createParameter('PostApproval',$this->PostApproval->Checked);
- $themeName=$this->ThemeName->SelectedItem->Text;
- $elements[]=$this->createParameter('ThemeName',$themeName);
- $dom->saveToFile(Prado::getPathOfNamespace(self::CONFIG_FILE,'.xml'));
- if($themeName!==$this->Theme->Name)
- $this->Response->reload();
- }
-
- private function createParameter($id,$value)
- {
- $element=new TXmlElement('parameter');
- $element->Attributes['id']=$id;
- $element->Attributes['value']=TPropertyValue::ensureString($value);
- return $element;
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class ConfigMan extends BlogPage
+{
+ const CONFIG_FILE='Application.Data.Settings';
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $parameters=$this->Application->Parameters;
+ $this->SiteTitle->Text=$parameters['SiteTitle'];
+ $this->SiteSubtitle->Text=$parameters['SiteSubtitle'];
+ $this->SiteOwner->Text=$parameters['SiteOwner'];
+ $this->AdminEmail->Text=$parameters['AdminEmail'];
+ $this->MultipleUser->Checked=TPropertyValue::ensureBoolean($parameters['MultipleUser']);
+ $this->AccountApproval->Checked=TPropertyValue::ensureBoolean($parameters['AccountApproval']);
+ $this->PostPerPage->Text=$parameters['PostPerPage'];
+ $this->RecentComments->Text=$parameters['RecentComments'];
+ $this->PostApproval->Checked=TPropertyValue::ensureBoolean($parameters['PostApproval']);
+ $themes=$this->Service->ThemeManager->AvailableThemes;
+ $this->ThemeName->DataSource=$themes;
+ $this->ThemeName->dataBind();
+ $this->ThemeName->SelectedValue=array_search($parameters['ThemeName'],$themes);
+ }
+ }
+
+ public function saveButtonClicked($sender,$param)
+ {
+ $dom=new TXmlDocument;
+ $dom->Encoding='utf-8';
+ $dom->TagName='parameters';
+ $elements=$dom->Elements;
+ $elements[]=$this->createParameter('SiteTitle',$this->SiteTitle->Text);
+ $elements[]=$this->createParameter('SiteSubtitle',$this->SiteSubtitle->Text);
+ $elements[]=$this->createParameter('SiteOwner',$this->SiteOwner->Text);
+ $elements[]=$this->createParameter('AdminEmail',$this->AdminEmail->Text);
+ $elements[]=$this->createParameter('MultipleUser',$this->MultipleUser->Checked);
+ $elements[]=$this->createParameter('AccountApproval',$this->AccountApproval->Checked);
+ $elements[]=$this->createParameter('PostPerPage',$this->PostPerPage->Text);
+ $elements[]=$this->createParameter('RecentComments',$this->RecentComments->Text);
+ $elements[]=$this->createParameter('PostApproval',$this->PostApproval->Checked);
+ $themeName=$this->ThemeName->SelectedItem->Text;
+ $elements[]=$this->createParameter('ThemeName',$themeName);
+ $dom->saveToFile(Prado::getPathOfNamespace(self::CONFIG_FILE,'.xml'));
+ if($themeName!==$this->Theme->Name)
+ $this->Response->reload();
+ }
+
+ private function createParameter($id,$value)
+ {
+ $element=new TXmlElement('parameter');
+ $element->Attributes['id']=$id;
+ $element->Attributes['value']=TPropertyValue::ensureString($value);
+ return $element;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Pages/Admin/PostMan.php b/demos/blog/protected/Pages/Admin/PostMan.php
index bf6597b1..c2ceb73f 100644
--- a/demos/blog/protected/Pages/Admin/PostMan.php
+++ b/demos/blog/protected/Pages/Admin/PostMan.php
@@ -1,73 +1,73 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class PostMan extends BlogPage
-{
- protected function bindData()
- {
- $offset=$this->PostGrid->CurrentPageIndex*$this->PostGrid->PageSize;
- $limit=$this->PostGrid->PageSize;
- $this->PostGrid->DataSource=$this->DataAccess->queryPosts('','','ORDER BY a.status DESC, modify_time DESC',"LIMIT $offset,$limit");
- $this->PostGrid->VirtualItemCount=$this->DataAccess->queryPostCount('','');
- $this->PostGrid->dataBind();
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- $this->bindData();
- }
-
- public function changePage($sender,$param)
- {
- $this->PostGrid->CurrentPageIndex=$param->NewPageIndex;
- $this->bindData();
- }
-
- public function pagerCreated($sender,$param)
- {
- $param->Pager->Controls->insertAt(0,'Page: ');
- }
-
- public function editItem($sender,$param)
- {
- $this->PostGrid->EditItemIndex=$param->Item->ItemIndex;
- $this->bindData();
- }
-
- public function saveItem($sender,$param)
- {
- $item=$param->Item;
- $postID=$this->PostGrid->DataKeys[$item->ItemIndex];
- $postRecord=$this->DataAccess->queryPostByID($postID);
- $postRecord->Status=TPropertyValue::ensureInteger($item->Cells[2]->PostStatus->SelectedValue);
- $this->DataAccess->updatePost($postRecord);
- $this->PostGrid->EditItemIndex=-1;
- $this->bindData();
- }
-
- public function cancelItem($sender,$param)
- {
- $this->PostGrid->EditItemIndex=-1;
- $this->bindData();
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class PostMan extends BlogPage
+{
+ protected function bindData()
+ {
+ $offset=$this->PostGrid->CurrentPageIndex*$this->PostGrid->PageSize;
+ $limit=$this->PostGrid->PageSize;
+ $this->PostGrid->DataSource=$this->DataAccess->queryPosts('','','ORDER BY a.status DESC, modify_time DESC',"LIMIT $offset,$limit");
+ $this->PostGrid->VirtualItemCount=$this->DataAccess->queryPostCount('','');
+ $this->PostGrid->dataBind();
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ $this->bindData();
+ }
+
+ public function changePage($sender,$param)
+ {
+ $this->PostGrid->CurrentPageIndex=$param->NewPageIndex;
+ $this->bindData();
+ }
+
+ public function pagerCreated($sender,$param)
+ {
+ $param->Pager->Controls->insertAt(0,'Page: ');
+ }
+
+ public function editItem($sender,$param)
+ {
+ $this->PostGrid->EditItemIndex=$param->Item->ItemIndex;
+ $this->bindData();
+ }
+
+ public function saveItem($sender,$param)
+ {
+ $item=$param->Item;
+ $postID=$this->PostGrid->DataKeys[$item->ItemIndex];
+ $postRecord=$this->DataAccess->queryPostByID($postID);
+ $postRecord->Status=TPropertyValue::ensureInteger($item->Cells[2]->PostStatus->SelectedValue);
+ $this->DataAccess->updatePost($postRecord);
+ $this->PostGrid->EditItemIndex=-1;
+ $this->bindData();
+ }
+
+ public function cancelItem($sender,$param)
+ {
+ $this->PostGrid->EditItemIndex=-1;
+ $this->bindData();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Pages/Admin/UserMan.php b/demos/blog/protected/Pages/Admin/UserMan.php
index 5901c334..231f6c84 100644
--- a/demos/blog/protected/Pages/Admin/UserMan.php
+++ b/demos/blog/protected/Pages/Admin/UserMan.php
@@ -1,75 +1,75 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class UserMan extends BlogPage
-{
- protected function bindData()
- {
- $author=$this->User->ID;
- $offset=$this->UserGrid->CurrentPageIndex*$this->UserGrid->PageSize;
- $limit=$this->UserGrid->PageSize;
- $this->UserGrid->DataSource=$this->DataAccess->queryUsers('','ORDER BY status DESC, name ASC',"LIMIT $offset,$limit");
- $this->UserGrid->VirtualItemCount=$this->DataAccess->queryUserCount('');
- $this->UserGrid->dataBind();
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- $this->bindData();
- }
-
- public function changePage($sender,$param)
- {
- $this->UserGrid->CurrentPageIndex=$param->NewPageIndex;
- $this->bindData();
- }
-
- public function pagerCreated($sender,$param)
- {
- $param->Pager->Controls->insertAt(0,'Page: ');
- }
-
- public function editItem($sender,$param)
- {
- $this->UserGrid->EditItemIndex=$param->Item->ItemIndex;
- $this->bindData();
- }
-
- public function saveItem($sender,$param)
- {
- $item=$param->Item;
- $userID=$this->UserGrid->DataKeys[$item->ItemIndex];
- $userRecord=$this->DataAccess->queryUserByID($userID);
- $userRecord->Role=TPropertyValue::ensureInteger($item->Cells[1]->UserRole->SelectedValue);
- $userRecord->Status=TPropertyValue::ensureInteger($item->Cells[2]->UserStatus->SelectedValue);
- $this->DataAccess->updateUser($userRecord);
- $this->UserGrid->EditItemIndex=-1;
- $this->bindData();
- }
-
- public function cancelItem($sender,$param)
- {
- $this->UserGrid->EditItemIndex=-1;
- $this->bindData();
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class UserMan extends BlogPage
+{
+ protected function bindData()
+ {
+ $author=$this->User->ID;
+ $offset=$this->UserGrid->CurrentPageIndex*$this->UserGrid->PageSize;
+ $limit=$this->UserGrid->PageSize;
+ $this->UserGrid->DataSource=$this->DataAccess->queryUsers('','ORDER BY status DESC, name ASC',"LIMIT $offset,$limit");
+ $this->UserGrid->VirtualItemCount=$this->DataAccess->queryUserCount('');
+ $this->UserGrid->dataBind();
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ $this->bindData();
+ }
+
+ public function changePage($sender,$param)
+ {
+ $this->UserGrid->CurrentPageIndex=$param->NewPageIndex;
+ $this->bindData();
+ }
+
+ public function pagerCreated($sender,$param)
+ {
+ $param->Pager->Controls->insertAt(0,'Page: ');
+ }
+
+ public function editItem($sender,$param)
+ {
+ $this->UserGrid->EditItemIndex=$param->Item->ItemIndex;
+ $this->bindData();
+ }
+
+ public function saveItem($sender,$param)
+ {
+ $item=$param->Item;
+ $userID=$this->UserGrid->DataKeys[$item->ItemIndex];
+ $userRecord=$this->DataAccess->queryUserByID($userID);
+ $userRecord->Role=TPropertyValue::ensureInteger($item->Cells[1]->UserRole->SelectedValue);
+ $userRecord->Status=TPropertyValue::ensureInteger($item->Cells[2]->UserStatus->SelectedValue);
+ $this->DataAccess->updateUser($userRecord);
+ $this->UserGrid->EditItemIndex=-1;
+ $this->bindData();
+ }
+
+ public function cancelItem($sender,$param)
+ {
+ $this->UserGrid->EditItemIndex=-1;
+ $this->bindData();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Pages/ErrorReport.php b/demos/blog/protected/Pages/ErrorReport.php
index 50d4a047..2b086f5f 100644
--- a/demos/blog/protected/Pages/ErrorReport.php
+++ b/demos/blog/protected/Pages/ErrorReport.php
@@ -1,29 +1,29 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class ErrorReport extends BlogPage
-{
- public function onLoad($param)
- {
- parent::onLoad($param);
- $this->ErrorMessage->Text=$this->Application->SecurityManager->validateData(urldecode($this->Request['msg']));
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class ErrorReport extends BlogPage
+{
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ $this->ErrorMessage->Text=$this->Application->SecurityManager->validateData(urldecode($this->Request['msg']));
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Pages/Posts/EditCategory.php b/demos/blog/protected/Pages/Posts/EditCategory.php
index 76013264..d60418be 100644
--- a/demos/blog/protected/Pages/Posts/EditCategory.php
+++ b/demos/blog/protected/Pages/Posts/EditCategory.php
@@ -1,61 +1,61 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class EditCategory extends BlogPage
-{
- private $_category;
-
- public function onInit($param)
- {
- parent::onInit($param);
- $id=TPropertyValue::ensureInteger($this->Request['id']);
- $this->_category=$this->DataAccess->queryCategoryByID($id);
- if($this->_category===null)
- throw new BlogException(500,'category_id_invalid',$id);
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $this->CategoryName->Text=$this->_category->Name;
- $this->CategoryDescription->Text=$this->_category->Description;
- }
- }
-
- public function saveButtonClicked($sender,$param)
- {
- if($this->IsValid)
- {
- $this->_category->Name=$this->CategoryName->Text;
- $this->_category->Description=$this->CategoryDescription->Text;
- $this->DataAccess->updateCategory($this->_category);
- $this->gotoPage('Posts.ListPost',array('cat'=>$this->_category->ID));
- }
- }
-
- public function checkCategoryName($sender,$param)
- {
- $name=$this->CategoryName->Text;
- $param->IsValid=$this->DataAccess->queryCategoryByName($name)===null;
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class EditCategory extends BlogPage
+{
+ private $_category;
+
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ $id=TPropertyValue::ensureInteger($this->Request['id']);
+ $this->_category=$this->DataAccess->queryCategoryByID($id);
+ if($this->_category===null)
+ throw new BlogException(500,'category_id_invalid',$id);
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $this->CategoryName->Text=$this->_category->Name;
+ $this->CategoryDescription->Text=$this->_category->Description;
+ }
+ }
+
+ public function saveButtonClicked($sender,$param)
+ {
+ if($this->IsValid)
+ {
+ $this->_category->Name=$this->CategoryName->Text;
+ $this->_category->Description=$this->CategoryDescription->Text;
+ $this->DataAccess->updateCategory($this->_category);
+ $this->gotoPage('Posts.ListPost',array('cat'=>$this->_category->ID));
+ }
+ }
+
+ public function checkCategoryName($sender,$param)
+ {
+ $name=$this->CategoryName->Text;
+ $param->IsValid=$this->DataAccess->queryCategoryByName($name)===null;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Pages/Posts/EditPost.php b/demos/blog/protected/Pages/Posts/EditPost.php
index 8d754b30..3ba6f069 100644
--- a/demos/blog/protected/Pages/Posts/EditPost.php
+++ b/demos/blog/protected/Pages/Posts/EditPost.php
@@ -1,78 +1,78 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class EditPost extends BlogPage
-{
- private $_postRecord=null;
-
- public function onInit($param)
- {
- parent::onInit($param);
- $id=TPropertyValue::ensureInteger($this->Request['id']);
- $this->_postRecord=$this->DataAccess->queryPostByID($id);
- if($this->_postRecord===null)
- throw new BlogException(500,'post_id_invalid',$id);
- // only the author and admin can edit the post
- if(!$this->User->IsAdmin && $this->User->ID!==$this->_postRecord->AuthorID)
- throw new BlogException(500,'post_edit_disallowed',$id);
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $postRecord=$this->_postRecord;
- $this->Title->Text=$postRecord->Title;
- $this->Content->Text=$postRecord->Content;
- $this->DraftMode->Checked=$postRecord->Status===PostRecord::STATUS_DRAFT;
- $this->Categories->DataSource=$this->DataAccess->queryCategories();
- $this->Categories->dataBind();
- $cats=$this->DataAccess->queryCategoriesByPostID($postRecord->ID);
- $catIDs=array();
- foreach($cats as $cat)
- $catIDs[]=$cat->ID;
- $this->Categories->SelectedValues=$catIDs;
- }
- }
-
- public function saveButtonClicked($sender,$param)
- {
- if($this->IsValid)
- {
- $postRecord=$this->_postRecord;
- $postRecord->Title=$this->Title->SafeText;
- $postRecord->Content=$this->Content->SafeText;
- if($this->DraftMode->Checked)
- $postRecord->Status=PostRecord::STATUS_DRAFT;
- else if(!$this->User->IsAdmin && TPropertyValue::ensureBoolean($this->Application->Parameters['PostApproval']))
- $postRecord->Status=PostRecord::STATUS_PENDING;
- else
- $postRecord->Status=PostRecord::STATUS_PUBLISHED;
- $postRecord->ModifyTime=time();
- $cats=array();
- foreach($this->Categories->SelectedValues as $value)
- $cats[]=TPropertyValue::ensureInteger($value);
- $this->DataAccess->updatePost($postRecord,$cats);
- $this->gotoPage('Posts.ViewPost',array('id'=>$postRecord->ID));
- }
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class EditPost extends BlogPage
+{
+ private $_postRecord=null;
+
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ $id=TPropertyValue::ensureInteger($this->Request['id']);
+ $this->_postRecord=$this->DataAccess->queryPostByID($id);
+ if($this->_postRecord===null)
+ throw new BlogException(500,'post_id_invalid',$id);
+ // only the author and admin can edit the post
+ if(!$this->User->IsAdmin && $this->User->ID!==$this->_postRecord->AuthorID)
+ throw new BlogException(500,'post_edit_disallowed',$id);
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $postRecord=$this->_postRecord;
+ $this->Title->Text=$postRecord->Title;
+ $this->Content->Text=$postRecord->Content;
+ $this->DraftMode->Checked=$postRecord->Status===PostRecord::STATUS_DRAFT;
+ $this->Categories->DataSource=$this->DataAccess->queryCategories();
+ $this->Categories->dataBind();
+ $cats=$this->DataAccess->queryCategoriesByPostID($postRecord->ID);
+ $catIDs=array();
+ foreach($cats as $cat)
+ $catIDs[]=$cat->ID;
+ $this->Categories->SelectedValues=$catIDs;
+ }
+ }
+
+ public function saveButtonClicked($sender,$param)
+ {
+ if($this->IsValid)
+ {
+ $postRecord=$this->_postRecord;
+ $postRecord->Title=$this->Title->SafeText;
+ $postRecord->Content=$this->Content->SafeText;
+ if($this->DraftMode->Checked)
+ $postRecord->Status=PostRecord::STATUS_DRAFT;
+ else if(!$this->User->IsAdmin && TPropertyValue::ensureBoolean($this->Application->Parameters['PostApproval']))
+ $postRecord->Status=PostRecord::STATUS_PENDING;
+ else
+ $postRecord->Status=PostRecord::STATUS_PUBLISHED;
+ $postRecord->ModifyTime=time();
+ $cats=array();
+ foreach($this->Categories->SelectedValues as $value)
+ $cats[]=TPropertyValue::ensureInteger($value);
+ $this->DataAccess->updatePost($postRecord,$cats);
+ $this->gotoPage('Posts.ViewPost',array('id'=>$postRecord->ID));
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Pages/Posts/ListPost.php b/demos/blog/protected/Pages/Posts/ListPost.php
index 0e0a044c..7ff9dac9 100644
--- a/demos/blog/protected/Pages/Posts/ListPost.php
+++ b/demos/blog/protected/Pages/Posts/ListPost.php
@@ -1,142 +1,142 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class ListPost extends BlogPage
-{
- private $_posts;
- private $_category;
-
- public function onInit($param)
- {
- parent::onInit($param);
- $this->_posts=$this->DataAccess->queryPosts(
- $this->getPostFilter(),
- $this->getCategoryFilter(),
- 'ORDER BY a.status DESC, create_time DESC',
- 'LIMIT '.$this->getPageOffset().','.$this->getPageSize());
- if($this->Request['cat']!==null)
- {
- $catID=TPropertyValue::ensureInteger($this->Request['cat']);
- $this->_category=$this->DataAccess->queryCategoryByID($catID);
- $this->CategoryPanel->Visible=true;
- }
- $this->Title=$this->Application->Parameters['SiteTitle'];
- }
-
- private function getPageOffset()
- {
- if(($offset=TPropertyValue::ensureInteger($this->Request['offset']))<=0)
- $offset=0;
- return $offset;
- }
-
- private function getPageSize()
- {
- if(($limit=TPropertyValue::ensureInteger($this->Request['limit']))<=0)
- $limit=TPropertyValue::ensureInteger($this->Application->Parameters['PostPerPage']);
- return $limit;
- }
-
- private function getTimeFilter()
- {
- if(($time=TPropertyValue::ensureInteger($this->Request['time']))>0)
- {
- $year=(integer)($time/100);
- $month=$time%100;
- $startTime=mktime(0,0,0,$month,1,$year);
- if(++$month>12)
- {
- $month=1;
- $year++;
- }
- $endTime=mktime(0,0,0,$month,1,$year);
- return "create_time>=$startTime AND create_time<$endTime";
- }
- else
- return '';
- }
-
- private function getPostFilter()
- {
- $filter='(a.status=0 OR a.status=3)';
- if(($timeFilter=$this->getTimeFilter())!=='')
- return "$filter AND $timeFilter";
- else
- return $filter;
- }
-
- private function getCategoryFilter()
- {
- if(($catID=$this->Request['cat'])!==null)
- {
- $catID=TPropertyValue::ensureInteger($catID);
- return "category_id=$catID";
- }
- else
- return '';
- }
-
- private function formUrl($newOffset)
- {
- $gets=array();
- $gets['offset']=$newOffset;
- if($this->Request['limit']!==null)
- $gets['limit']=$this->Request['limit'];
- if($this->Request['time']!==null)
- $gets['time']=$this->Request['time'];
- if($this->Request['cat']!==null)
- $gets['cat']=$this->Request['cat'];
- return $this->Service->constructUrl('Posts.ListPost',$gets);
- }
-
- public function getCategory()
- {
- return $this->_category;
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- $this->PostList->DataSource=$this->_posts;
- $this->PostList->dataBind();
- if($this->getPageOffset()>0)
- {
- if(($offset=$this->getPageOffset()-$this->getPageSize())<0)
- $offset=0;
- $this->PrevPage->NavigateUrl=$this->formUrl($offset);
- $this->PrevPage->Visible=true;
- }
- if(count($this->_posts)===$this->getPageSize())
- {
- $this->NextPage->NavigateUrl=$this->formUrl($this->getPageOffset()+$this->getPageSize());
- $this->NextPage->Visible=true;
- }
- }
-
- public function deleteButtonClicked($sender,$param)
- {
- if($this->User->IsAdmin)
- {
- $this->DataAccess->deleteCategory($this->Category->ID);
- $this->gotoDefaultPage();
- }
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class ListPost extends BlogPage
+{
+ private $_posts;
+ private $_category;
+
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ $this->_posts=$this->DataAccess->queryPosts(
+ $this->getPostFilter(),
+ $this->getCategoryFilter(),
+ 'ORDER BY a.status DESC, create_time DESC',
+ 'LIMIT '.$this->getPageOffset().','.$this->getPageSize());
+ if($this->Request['cat']!==null)
+ {
+ $catID=TPropertyValue::ensureInteger($this->Request['cat']);
+ $this->_category=$this->DataAccess->queryCategoryByID($catID);
+ $this->CategoryPanel->Visible=true;
+ }
+ $this->Title=$this->Application->Parameters['SiteTitle'];
+ }
+
+ private function getPageOffset()
+ {
+ if(($offset=TPropertyValue::ensureInteger($this->Request['offset']))<=0)
+ $offset=0;
+ return $offset;
+ }
+
+ private function getPageSize()
+ {
+ if(($limit=TPropertyValue::ensureInteger($this->Request['limit']))<=0)
+ $limit=TPropertyValue::ensureInteger($this->Application->Parameters['PostPerPage']);
+ return $limit;
+ }
+
+ private function getTimeFilter()
+ {
+ if(($time=TPropertyValue::ensureInteger($this->Request['time']))>0)
+ {
+ $year=(integer)($time/100);
+ $month=$time%100;
+ $startTime=mktime(0,0,0,$month,1,$year);
+ if(++$month>12)
+ {
+ $month=1;
+ $year++;
+ }
+ $endTime=mktime(0,0,0,$month,1,$year);
+ return "create_time>=$startTime AND create_time<$endTime";
+ }
+ else
+ return '';
+ }
+
+ private function getPostFilter()
+ {
+ $filter='(a.status=0 OR a.status=3)';
+ if(($timeFilter=$this->getTimeFilter())!=='')
+ return "$filter AND $timeFilter";
+ else
+ return $filter;
+ }
+
+ private function getCategoryFilter()
+ {
+ if(($catID=$this->Request['cat'])!==null)
+ {
+ $catID=TPropertyValue::ensureInteger($catID);
+ return "category_id=$catID";
+ }
+ else
+ return '';
+ }
+
+ private function formUrl($newOffset)
+ {
+ $gets=array();
+ $gets['offset']=$newOffset;
+ if($this->Request['limit']!==null)
+ $gets['limit']=$this->Request['limit'];
+ if($this->Request['time']!==null)
+ $gets['time']=$this->Request['time'];
+ if($this->Request['cat']!==null)
+ $gets['cat']=$this->Request['cat'];
+ return $this->Service->constructUrl('Posts.ListPost',$gets);
+ }
+
+ public function getCategory()
+ {
+ return $this->_category;
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ $this->PostList->DataSource=$this->_posts;
+ $this->PostList->dataBind();
+ if($this->getPageOffset()>0)
+ {
+ if(($offset=$this->getPageOffset()-$this->getPageSize())<0)
+ $offset=0;
+ $this->PrevPage->NavigateUrl=$this->formUrl($offset);
+ $this->PrevPage->Visible=true;
+ }
+ if(count($this->_posts)===$this->getPageSize())
+ {
+ $this->NextPage->NavigateUrl=$this->formUrl($this->getPageOffset()+$this->getPageSize());
+ $this->NextPage->Visible=true;
+ }
+ }
+
+ public function deleteButtonClicked($sender,$param)
+ {
+ if($this->User->IsAdmin)
+ {
+ $this->DataAccess->deleteCategory($this->Category->ID);
+ $this->gotoDefaultPage();
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Pages/Posts/MyPost.php b/demos/blog/protected/Pages/Posts/MyPost.php
index fd65cc57..7d0be020 100644
--- a/demos/blog/protected/Pages/Posts/MyPost.php
+++ b/demos/blog/protected/Pages/Posts/MyPost.php
@@ -1,51 +1,51 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class MyPost extends BlogPage
-{
- protected function bindData()
- {
- $author=$this->User->ID;
- $offset=$this->PostGrid->CurrentPageIndex*$this->PostGrid->PageSize;
- $limit=$this->PostGrid->PageSize;
- $this->PostGrid->DataSource=$this->DataAccess->queryPosts("author_id=$author",'','ORDER BY a.status DESC, create_time DESC',"LIMIT $offset,$limit");
- $this->PostGrid->VirtualItemCount=$this->DataAccess->queryPostCount("author_id=$author",'');
- $this->PostGrid->dataBind();
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- $this->bindData();
- }
-
- public function changePage($sender,$param)
- {
- $this->PostGrid->CurrentPageIndex=$param->NewPageIndex;
- $this->bindData();
- }
-
- public function pagerCreated($sender,$param)
- {
- $param->Pager->Controls->insertAt(0,'Page: ');
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class MyPost extends BlogPage
+{
+ protected function bindData()
+ {
+ $author=$this->User->ID;
+ $offset=$this->PostGrid->CurrentPageIndex*$this->PostGrid->PageSize;
+ $limit=$this->PostGrid->PageSize;
+ $this->PostGrid->DataSource=$this->DataAccess->queryPosts("author_id=$author",'','ORDER BY a.status DESC, create_time DESC',"LIMIT $offset,$limit");
+ $this->PostGrid->VirtualItemCount=$this->DataAccess->queryPostCount("author_id=$author",'');
+ $this->PostGrid->dataBind();
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ $this->bindData();
+ }
+
+ public function changePage($sender,$param)
+ {
+ $this->PostGrid->CurrentPageIndex=$param->NewPageIndex;
+ $this->bindData();
+ }
+
+ public function pagerCreated($sender,$param)
+ {
+ $param->Pager->Controls->insertAt(0,'Page: ');
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Pages/Posts/NewCategory.php b/demos/blog/protected/Pages/Posts/NewCategory.php
index 5df0c85b..b5bf26e9 100644
--- a/demos/blog/protected/Pages/Posts/NewCategory.php
+++ b/demos/blog/protected/Pages/Posts/NewCategory.php
@@ -1,41 +1,41 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class NewCategory extends BlogPage
-{
- public function saveButtonClicked($sender,$param)
- {
- if($this->IsValid)
- {
- $categoryRecord=new CategoryRecord;
- $categoryRecord->Name=$this->CategoryName->Text;
- $categoryRecord->Description=$this->CategoryDescription->Text;
- $this->DataAccess->insertCategory($categoryRecord);
- $this->gotoPage('Posts.ListPost',array('cat'=>$categoryRecord->ID));
- }
- }
-
- public function checkCategoryName($sender,$param)
- {
- $name=$this->CategoryName->Text;
- $param->IsValid=$this->DataAccess->queryCategoryByName($name)===null;
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class NewCategory extends BlogPage
+{
+ public function saveButtonClicked($sender,$param)
+ {
+ if($this->IsValid)
+ {
+ $categoryRecord=new CategoryRecord;
+ $categoryRecord->Name=$this->CategoryName->Text;
+ $categoryRecord->Description=$this->CategoryDescription->Text;
+ $this->DataAccess->insertCategory($categoryRecord);
+ $this->gotoPage('Posts.ListPost',array('cat'=>$categoryRecord->ID));
+ }
+ }
+
+ public function checkCategoryName($sender,$param)
+ {
+ $name=$this->CategoryName->Text;
+ $param->IsValid=$this->DataAccess->queryCategoryByName($name)===null;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Pages/Posts/NewPost.php b/demos/blog/protected/Pages/Posts/NewPost.php
index 2f894cd5..45b1a794 100644
--- a/demos/blog/protected/Pages/Posts/NewPost.php
+++ b/demos/blog/protected/Pages/Posts/NewPost.php
@@ -1,57 +1,57 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class NewPost extends BlogPage
-{
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $this->Categories->DataSource=$this->DataAccess->queryCategories();
- $this->Categories->dataBind();
- }
- }
-
- public function saveButtonClicked($sender,$param)
- {
- if($this->IsValid)
- {
- $postRecord=new PostRecord;
- $postRecord->Title=$this->Title->SafeText;
- $postRecord->Content=$this->Content->SafeText;
- if($this->DraftMode->Checked)
- $postRecord->Status=PostRecord::STATUS_DRAFT;
- else if(!$this->User->IsAdmin && TPropertyValue::ensureBoolean($this->Application->Parameters['PostApproval']))
- $postRecord->Status=PostRecord::STATUS_PENDING;
- else
- $postRecord->Status=PostRecord::STATUS_PUBLISHED;
- $postRecord->CreateTime=time();
- $postRecord->ModifyTime=$postRecord->CreateTime;
- $postRecord->AuthorID=$this->User->ID;
- $cats=array();
- foreach($this->Categories->SelectedValues as $value)
- $cats[]=TPropertyValue::ensureInteger($value);
- $this->DataAccess->insertPost($postRecord,$cats);
- $this->gotoPage('Posts.ViewPost',array('id'=>$postRecord->ID));
- }
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class NewPost extends BlogPage
+{
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $this->Categories->DataSource=$this->DataAccess->queryCategories();
+ $this->Categories->dataBind();
+ }
+ }
+
+ public function saveButtonClicked($sender,$param)
+ {
+ if($this->IsValid)
+ {
+ $postRecord=new PostRecord;
+ $postRecord->Title=$this->Title->SafeText;
+ $postRecord->Content=$this->Content->SafeText;
+ if($this->DraftMode->Checked)
+ $postRecord->Status=PostRecord::STATUS_DRAFT;
+ else if(!$this->User->IsAdmin && TPropertyValue::ensureBoolean($this->Application->Parameters['PostApproval']))
+ $postRecord->Status=PostRecord::STATUS_PENDING;
+ else
+ $postRecord->Status=PostRecord::STATUS_PUBLISHED;
+ $postRecord->CreateTime=time();
+ $postRecord->ModifyTime=$postRecord->CreateTime;
+ $postRecord->AuthorID=$this->User->ID;
+ $cats=array();
+ foreach($this->Categories->SelectedValues as $value)
+ $cats[]=TPropertyValue::ensureInteger($value);
+ $this->DataAccess->insertPost($postRecord,$cats);
+ $this->gotoPage('Posts.ViewPost',array('id'=>$postRecord->ID));
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Pages/Posts/ViewPost.php b/demos/blog/protected/Pages/Posts/ViewPost.php
index 662dc659..5831ba93 100644
--- a/demos/blog/protected/Pages/Posts/ViewPost.php
+++ b/demos/blog/protected/Pages/Posts/ViewPost.php
@@ -1,90 +1,90 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class ViewPost extends BlogPage
-{
- private $_post=null;
-
- public function onInit($param)
- {
- parent::onInit($param);
- $id=TPropertyValue::ensureInteger($this->Request['id']);
- $this->_post=$this->DataAccess->queryPostByID($id);
- if($this->_post===null)
- throw new BlogException(500,'post_id_invalid',$id);
- // if post is not published, only the author and admin can view it
- if($this->_post->Status!==PostRecord::STATUS_PUBLISHED && $this->_post->Status!==PostRecord::STATUS_STICKY && !$this->User->IsAdmin && $this->User->ID!==$this->_post->AuthorID)
- throw new BlogException(500,'post_view_disallowed',$id);
- $this->Title=htmlentities($this->_post->Title,ENT_QUOTES,'UTF-8');
- }
-
- public function getCanEditPost()
- {
- $user=$this->getUser();
- return $user->getIsAdmin() || $user->getID()===$this->_post->AuthorID;
- }
-
- public function getCurrentPost()
- {
- return $this->_post;
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- $this->Status->Visible=$this->_post->Status!==PostRecord::STATUS_PUBLISHED && $this->_post->Status!==PostRecord::STATUS_STICKY;
- $this->CategoryList->DataSource=$this->DataAccess->queryCategoriesByPostID($this->_post->ID);
- $this->CategoryList->dataBind();
- $this->CommentList->DataSource=$this->DataAccess->queryCommentsByPostID($this->_post->ID);
- $this->CommentList->dataBind();
- }
-
- public function submitCommentButtonClicked($sender,$param)
- {
- if($this->IsValid)
- {
- $commentRecord=new CommentRecord;
- $commentRecord->PostID=$this->CurrentPost->ID;
- $commentRecord->AuthorName=$this->CommentAuthor->SafeText;
- $commentRecord->AuthorEmail=$this->CommentEmail->Text;
- $commentRecord->AuthorWebsite=$this->CommentWebsite->SafeText;
- $commentRecord->AuthorIP=$this->Request->UserHostAddress;
- $commentRecord->Content=$this->CommentContent->SafeText;
- $commentRecord->CreateTime=time();
- $commentRecord->Status=0;
- $this->DataAccess->insertComment($commentRecord);
- $this->Response->reload();
- }
- }
-
- public function deleteButtonClicked($sender,$param)
- {
- $this->DataAccess->deletePost($this->CurrentPost->ID);
- $this->gotoDefaultPage();
- }
-
- public function repeaterItemCommand($sender,$param)
- {
- $id=TPropertyValue::ensureInteger($param->CommandParameter);
- $this->DataAccess->deleteComment($id);
- $this->Response->reload();
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class ViewPost extends BlogPage
+{
+ private $_post=null;
+
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ $id=TPropertyValue::ensureInteger($this->Request['id']);
+ $this->_post=$this->DataAccess->queryPostByID($id);
+ if($this->_post===null)
+ throw new BlogException(500,'post_id_invalid',$id);
+ // if post is not published, only the author and admin can view it
+ if($this->_post->Status!==PostRecord::STATUS_PUBLISHED && $this->_post->Status!==PostRecord::STATUS_STICKY && !$this->User->IsAdmin && $this->User->ID!==$this->_post->AuthorID)
+ throw new BlogException(500,'post_view_disallowed',$id);
+ $this->Title=htmlentities($this->_post->Title,ENT_QUOTES,'UTF-8');
+ }
+
+ public function getCanEditPost()
+ {
+ $user=$this->getUser();
+ return $user->getIsAdmin() || $user->getID()===$this->_post->AuthorID;
+ }
+
+ public function getCurrentPost()
+ {
+ return $this->_post;
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ $this->Status->Visible=$this->_post->Status!==PostRecord::STATUS_PUBLISHED && $this->_post->Status!==PostRecord::STATUS_STICKY;
+ $this->CategoryList->DataSource=$this->DataAccess->queryCategoriesByPostID($this->_post->ID);
+ $this->CategoryList->dataBind();
+ $this->CommentList->DataSource=$this->DataAccess->queryCommentsByPostID($this->_post->ID);
+ $this->CommentList->dataBind();
+ }
+
+ public function submitCommentButtonClicked($sender,$param)
+ {
+ if($this->IsValid)
+ {
+ $commentRecord=new CommentRecord;
+ $commentRecord->PostID=$this->CurrentPost->ID;
+ $commentRecord->AuthorName=$this->CommentAuthor->SafeText;
+ $commentRecord->AuthorEmail=$this->CommentEmail->Text;
+ $commentRecord->AuthorWebsite=$this->CommentWebsite->SafeText;
+ $commentRecord->AuthorIP=$this->Request->UserHostAddress;
+ $commentRecord->Content=$this->CommentContent->SafeText;
+ $commentRecord->CreateTime=time();
+ $commentRecord->Status=0;
+ $this->DataAccess->insertComment($commentRecord);
+ $this->Response->reload();
+ }
+ }
+
+ public function deleteButtonClicked($sender,$param)
+ {
+ $this->DataAccess->deletePost($this->CurrentPost->ID);
+ $this->gotoDefaultPage();
+ }
+
+ public function repeaterItemCommand($sender,$param)
+ {
+ $id=TPropertyValue::ensureInteger($param->CommandParameter);
+ $this->DataAccess->deleteComment($id);
+ $this->Response->reload();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Pages/SearchPost.php b/demos/blog/protected/Pages/SearchPost.php
index dc483f9a..437435f9 100644
--- a/demos/blog/protected/Pages/SearchPost.php
+++ b/demos/blog/protected/Pages/SearchPost.php
@@ -1,68 +1,68 @@
-<?php
-
-class SearchPost extends BlogPage
-{
- private $_posts;
-
- public function onInit($param)
- {
- parent::onInit($param);
- $this->_posts=$this->DataAccess->queryPostsSearch(
- $this->getPostKeywords(),
- 'ORDER BY create_time DESC',
- 'LIMIT '.$this->getPageOffset().','.$this->getPageSize());
- }
-
- private function getPostKeywords()
- {
- return explode(' ',$this->Request['keyword']);
- }
-
- private function getPageOffset()
- {
- if(($offset=TPropertyValue::ensureInteger($this->Request['offset']))<=0)
- $offset=0;
- return $offset;
- }
-
- private function getPageSize()
- {
- if(($limit=TPropertyValue::ensureInteger($this->Request['limit']))<=0)
- $limit=TPropertyValue::ensureInteger($this->Application->Parameters['PostPerPage']);
- return $limit;
- }
-
- private function formUrl($newOffset)
- {
- $gets=array();
- $gets['offset']=$newOffset;
- if($this->Request['limit']!==null)
- $gets['limit']=$this->Request['limit'];
- if($this->Request['time']!==null)
- $gets['time']=$this->Request['time'];
- if($this->Request['cat']!==null)
- $gets['cat']=$this->Request['cat'];
- return $this->Service->constructUrl('Posts.ListPost',$gets);
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- $this->PostList->DataSource=$this->_posts;
- $this->PostList->dataBind();
- if($this->getPageOffset()>0)
- {
- if(($offset=$this->getPageOffset()-$this->getPageSize())<0)
- $offset=0;
- $this->PrevPage->NavigateUrl=$this->formUrl($offset);
- $this->PrevPage->Visible=true;
- }
- if(count($this->_posts)===$this->getPageSize())
- {
- $this->NextPage->NavigateUrl=$this->formUrl($this->getPageOffset()+$this->getPageSize());
- $this->NextPage->Visible=true;
- }
- }
-}
-
+<?php
+
+class SearchPost extends BlogPage
+{
+ private $_posts;
+
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ $this->_posts=$this->DataAccess->queryPostsSearch(
+ $this->getPostKeywords(),
+ 'ORDER BY create_time DESC',
+ 'LIMIT '.$this->getPageOffset().','.$this->getPageSize());
+ }
+
+ private function getPostKeywords()
+ {
+ return explode(' ',$this->Request['keyword']);
+ }
+
+ private function getPageOffset()
+ {
+ if(($offset=TPropertyValue::ensureInteger($this->Request['offset']))<=0)
+ $offset=0;
+ return $offset;
+ }
+
+ private function getPageSize()
+ {
+ if(($limit=TPropertyValue::ensureInteger($this->Request['limit']))<=0)
+ $limit=TPropertyValue::ensureInteger($this->Application->Parameters['PostPerPage']);
+ return $limit;
+ }
+
+ private function formUrl($newOffset)
+ {
+ $gets=array();
+ $gets['offset']=$newOffset;
+ if($this->Request['limit']!==null)
+ $gets['limit']=$this->Request['limit'];
+ if($this->Request['time']!==null)
+ $gets['time']=$this->Request['time'];
+ if($this->Request['cat']!==null)
+ $gets['cat']=$this->Request['cat'];
+ return $this->Service->constructUrl('Posts.ListPost',$gets);
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ $this->PostList->DataSource=$this->_posts;
+ $this->PostList->dataBind();
+ if($this->getPageOffset()>0)
+ {
+ if(($offset=$this->getPageOffset()-$this->getPageSize())<0)
+ $offset=0;
+ $this->PrevPage->NavigateUrl=$this->formUrl($offset);
+ $this->PrevPage->Visible=true;
+ }
+ if(count($this->_posts)===$this->getPageSize())
+ {
+ $this->NextPage->NavigateUrl=$this->formUrl($this->getPageOffset()+$this->getPageSize());
+ $this->NextPage->Visible=true;
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Pages/Users/EditUser.php b/demos/blog/protected/Pages/Users/EditUser.php
index c574ca6b..8d5cb090 100644
--- a/demos/blog/protected/Pages/Users/EditUser.php
+++ b/demos/blog/protected/Pages/Users/EditUser.php
@@ -1,69 +1,69 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class EditUser extends BlogPage
-{
- private $_userRecord=null;
-
- public function onInit($param)
- {
- parent::onInit($param);
- if(($id=$this->Request['id'])!==null)
- {
- $id=TPropertyValue::ensureInteger($id);
- if(!$this->User->IsAdmin && $this->User->ID!==$id)
- throw new BlogException(500,'profile_edit_disallowed',$id);
- }
- else
- $id=$this->User->ID;
- if(($this->_userRecord=$this->DataAccess->queryUserByID($id))===null)
- throw new BlogException(500,'profile_id_invalid',$id);
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $userRecord=$this->_userRecord;
- $this->Username->Text=$userRecord->Name;
- $this->FullName->Text=$userRecord->FullName;
- $this->Email->Text=$userRecord->Email;
- $this->Website->Text=$userRecord->Website;
- }
- }
-
- public function saveButtonClicked($sender,$param)
- {
- if($this->IsValid)
- {
- $userRecord=$this->_userRecord;
- if($this->Password->Text!=='')
- $userRecord->Password=md5($this->Password->Text);
- $userRecord->FullName=$this->FullName->Text;
- $userRecord->Email=$this->Email->Text;
- $userRecord->Website=$this->Website->Text;
- $this->DataAccess->updateUser($userRecord);
- $authManager=$this->Application->getModule('auth');
- $this->gotoPage('Users.ViewUser',array('id'=>$userRecord->ID));
- }
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class EditUser extends BlogPage
+{
+ private $_userRecord=null;
+
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ if(($id=$this->Request['id'])!==null)
+ {
+ $id=TPropertyValue::ensureInteger($id);
+ if(!$this->User->IsAdmin && $this->User->ID!==$id)
+ throw new BlogException(500,'profile_edit_disallowed',$id);
+ }
+ else
+ $id=$this->User->ID;
+ if(($this->_userRecord=$this->DataAccess->queryUserByID($id))===null)
+ throw new BlogException(500,'profile_id_invalid',$id);
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $userRecord=$this->_userRecord;
+ $this->Username->Text=$userRecord->Name;
+ $this->FullName->Text=$userRecord->FullName;
+ $this->Email->Text=$userRecord->Email;
+ $this->Website->Text=$userRecord->Website;
+ }
+ }
+
+ public function saveButtonClicked($sender,$param)
+ {
+ if($this->IsValid)
+ {
+ $userRecord=$this->_userRecord;
+ if($this->Password->Text!=='')
+ $userRecord->Password=md5($this->Password->Text);
+ $userRecord->FullName=$this->FullName->Text;
+ $userRecord->Email=$this->Email->Text;
+ $userRecord->Website=$this->Website->Text;
+ $this->DataAccess->updateUser($userRecord);
+ $authManager=$this->Application->getModule('auth');
+ $this->gotoPage('Users.ViewUser',array('id'=>$userRecord->ID));
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Pages/Users/NewUser.php b/demos/blog/protected/Pages/Users/NewUser.php
index 40e79910..50f9f123 100644
--- a/demos/blog/protected/Pages/Users/NewUser.php
+++ b/demos/blog/protected/Pages/Users/NewUser.php
@@ -1,58 +1,58 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class NewUser extends BlogPage
-{
- public function onInit($param)
- {
- if(!$this->User->IsAdmin && !TPropertyValue::ensureBoolean($this->Application->Parameters['MultipleUser']))
- throw new BlogException(500,'newuser_registration_disallowed');
- }
-
- public function checkUsername($sender,$param)
- {
- $username=strtolower($this->Username->Text);
- $param->IsValid=$this->DataAccess->queryUserByName($username)===null;
- }
-
- public function createUser($sender,$param)
- {
- if($this->IsValid)
- {
- $userRecord=new UserRecord;
- $userRecord->Name=strtolower($this->Username->Text);
- $userRecord->FullName=$this->FullName->Text;
- $userRecord->Role=0;
- $userRecord->Password=md5($this->Password->Text);
- $userRecord->Email=$this->Email->Text;
- $userRecord->CreateTime=time();
- $userRecord->Website=$this->Website->Text;
- if(TPropertyValue::ensureBoolean($this->Application->Parameters['AccountApproval']))
- $userRecord->Status=UserRecord::STATUS_PENDING;
- else
- $userRecord->Status=UserRecord::STATUS_NORMAL;
- $this->DataAccess->insertUser($userRecord);
- $authManager=$this->Application->getModule('auth');
- $authManager->login($this->Username->Text,$this->Password->Text);
- $this->gotoDefaultPage();
- }
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class NewUser extends BlogPage
+{
+ public function onInit($param)
+ {
+ if(!$this->User->IsAdmin && !TPropertyValue::ensureBoolean($this->Application->Parameters['MultipleUser']))
+ throw new BlogException(500,'newuser_registration_disallowed');
+ }
+
+ public function checkUsername($sender,$param)
+ {
+ $username=strtolower($this->Username->Text);
+ $param->IsValid=$this->DataAccess->queryUserByName($username)===null;
+ }
+
+ public function createUser($sender,$param)
+ {
+ if($this->IsValid)
+ {
+ $userRecord=new UserRecord;
+ $userRecord->Name=strtolower($this->Username->Text);
+ $userRecord->FullName=$this->FullName->Text;
+ $userRecord->Role=0;
+ $userRecord->Password=md5($this->Password->Text);
+ $userRecord->Email=$this->Email->Text;
+ $userRecord->CreateTime=time();
+ $userRecord->Website=$this->Website->Text;
+ if(TPropertyValue::ensureBoolean($this->Application->Parameters['AccountApproval']))
+ $userRecord->Status=UserRecord::STATUS_PENDING;
+ else
+ $userRecord->Status=UserRecord::STATUS_NORMAL;
+ $this->DataAccess->insertUser($userRecord);
+ $authManager=$this->Application->getModule('auth');
+ $authManager->login($this->Username->Text,$this->Password->Text);
+ $this->gotoDefaultPage();
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Pages/Users/ViewUser.php b/demos/blog/protected/Pages/Users/ViewUser.php
index 75bd711a..86c27592 100644
--- a/demos/blog/protected/Pages/Users/ViewUser.php
+++ b/demos/blog/protected/Pages/Users/ViewUser.php
@@ -1,42 +1,42 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class ViewUser extends BlogPage
-{
- private $_userRecord=null;
-
- public function onInit($param)
- {
- parent::onInit($param);
- if(($id=$this->Request['id'])!==null)
- $id=TPropertyValue::ensureInteger($id);
- else
- $id=$this->User->ID;
- if(($this->_userRecord=$this->DataAccess->queryUserByID($id))===null)
- throw new BlogException(500,'profile_id_invalid',$id);
- $this->_userRecord->Email=strtr(strtoupper($this->_userRecord->Email),array('@'=>' at ','.'=>' dot '));
- }
-
- public function getProfile()
- {
- return $this->_userRecord;
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class ViewUser extends BlogPage
+{
+ private $_userRecord=null;
+
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ if(($id=$this->Request['id'])!==null)
+ $id=TPropertyValue::ensureInteger($id);
+ else
+ $id=$this->User->ID;
+ if(($this->_userRecord=$this->DataAccess->queryUserByID($id))===null)
+ throw new BlogException(500,'profile_id_invalid',$id);
+ $this->_userRecord->Email=strtr(strtoupper($this->_userRecord->Email),array('@'=>' at ','.'=>' dot '));
+ }
+
+ public function getProfile()
+ {
+ return $this->_userRecord;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Portlets/AccountPortlet.php b/demos/blog/protected/Portlets/AccountPortlet.php
index 2bbe55d3..40be36ae 100644
--- a/demos/blog/protected/Portlets/AccountPortlet.php
+++ b/demos/blog/protected/Portlets/AccountPortlet.php
@@ -1,31 +1,31 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-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/
- */
-class AccountPortlet extends Portlet
-{
- public function logout($sender,$param)
- {
- $this->Application->getModule('auth')->logout();
- $this->Response->reload();
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+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/
+ */
+class AccountPortlet extends Portlet
+{
+ public function logout($sender,$param)
+ {
+ $this->Application->getModule('auth')->logout();
+ $this->Response->reload();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Portlets/ArchivePortlet.php b/demos/blog/protected/Portlets/ArchivePortlet.php
index 003eb0cc..f8bd488e 100644
--- a/demos/blog/protected/Portlets/ArchivePortlet.php
+++ b/demos/blog/protected/Portlets/ArchivePortlet.php
@@ -1,62 +1,62 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-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/
- */
-class ArchivePortlet extends Portlet
-{
- private function makeMonthTime($timestamp)
- {
- $date=getdate($timestamp);
- return mktime(0,0,0,$date['mon'],1,$date['year']);
- }
-
- public function onLoad($param)
- {
- $currentTime=time();
- $startTime=$this->Application->getModule('data')->queryEarliestPostTime();
- if(empty($startTime)) // if no posts
- $startTime=$currentTime;
-
- // obtain the timestamp for the initial month
- $date=getdate($startTime);
- $startTime=mktime(0,0,0,$date['mon'],1,$date['year']);
-
- $date=getdate($currentTime);
- $month=$date['mon'];
- $year=$date['year'];
-
- $timestamps=array();
- while(true)
- {
- if(($timestamp=mktime(0,0,0,$month,1,$year))<$startTime)
- break;
- $timestamps[]=$timestamp;
- if(--$month===0)
- {
- $month=12;
- $year--;
- }
- }
- $this->MonthList->DataSource=$timestamps;
- $this->MonthList->dataBind();
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+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/
+ */
+class ArchivePortlet extends Portlet
+{
+ private function makeMonthTime($timestamp)
+ {
+ $date=getdate($timestamp);
+ return mktime(0,0,0,$date['mon'],1,$date['year']);
+ }
+
+ public function onLoad($param)
+ {
+ $currentTime=time();
+ $startTime=$this->Application->getModule('data')->queryEarliestPostTime();
+ if(empty($startTime)) // if no posts
+ $startTime=$currentTime;
+
+ // obtain the timestamp for the initial month
+ $date=getdate($startTime);
+ $startTime=mktime(0,0,0,$date['mon'],1,$date['year']);
+
+ $date=getdate($currentTime);
+ $month=$date['mon'];
+ $year=$date['year'];
+
+ $timestamps=array();
+ while(true)
+ {
+ if(($timestamp=mktime(0,0,0,$month,1,$year))<$startTime)
+ break;
+ $timestamps[]=$timestamp;
+ if(--$month===0)
+ {
+ $month=12;
+ $year--;
+ }
+ }
+ $this->MonthList->DataSource=$timestamps;
+ $this->MonthList->dataBind();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Portlets/CategoryPortlet.php b/demos/blog/protected/Portlets/CategoryPortlet.php
index d95b0661..0b451db8 100644
--- a/demos/blog/protected/Portlets/CategoryPortlet.php
+++ b/demos/blog/protected/Portlets/CategoryPortlet.php
@@ -1,38 +1,38 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-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/
- */
-class CategoryPortlet extends Portlet
-{
- public function onLoad($param)
- {
- parent::onLoad($param);
- $cats=$this->Application->getModule('data')->queryCategories();
- foreach($cats as $cat)
- {
- $cat->ID=$this->Service->constructUrl('Posts.ListPost',array('cat'=>$cat->ID));
- $cat->Name.=' (' . $cat->PostCount .')';
- }
- $this->CategoryList->DataSource=$cats;
- $this->CategoryList->dataBind();
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+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/
+ */
+class CategoryPortlet extends Portlet
+{
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ $cats=$this->Application->getModule('data')->queryCategories();
+ foreach($cats as $cat)
+ {
+ $cat->ID=$this->Service->constructUrl('Posts.ListPost',array('cat'=>$cat->ID));
+ $cat->Name.=' (' . $cat->PostCount .')';
+ }
+ $this->CategoryList->DataSource=$cats;
+ $this->CategoryList->dataBind();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Portlets/CommentPortlet.php b/demos/blog/protected/Portlets/CommentPortlet.php
index c3549928..ff8d075a 100644
--- a/demos/blog/protected/Portlets/CommentPortlet.php
+++ b/demos/blog/protected/Portlets/CommentPortlet.php
@@ -1,40 +1,40 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-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/
- */
-class CommentPortlet extends Portlet
-{
- public function onLoad($param)
- {
- parent::onLoad($param);
- $commentLimit=TPropertyValue::ensureInteger($this->Application->Parameters['RecentComments']);
- $comments=$this->Application->getModule('data')->queryComments('','ORDER BY create_time DESC',"LIMIT $commentLimit");
- foreach($comments as $comment)
- {
- $comment->ID=$this->Service->constructUrl('Posts.ViewPost',array('id'=>$comment->PostID)).'#c'.$comment->ID;
- if(strlen($comment->Content)>40)
- $comment->Content=substr($comment->Content,0,40).' ...';
- }
- $this->CommentList->DataSource=$comments;
- $this->CommentList->dataBind();
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+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/
+ */
+class CommentPortlet extends Portlet
+{
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ $commentLimit=TPropertyValue::ensureInteger($this->Application->Parameters['RecentComments']);
+ $comments=$this->Application->getModule('data')->queryComments('','ORDER BY create_time DESC',"LIMIT $commentLimit");
+ foreach($comments as $comment)
+ {
+ $comment->ID=$this->Service->constructUrl('Posts.ViewPost',array('id'=>$comment->PostID)).'#c'.$comment->ID;
+ if(strlen($comment->Content)>40)
+ $comment->Content=substr($comment->Content,0,40).' ...';
+ }
+ $this->CommentList->DataSource=$comments;
+ $this->CommentList->dataBind();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Portlets/LoginPortlet.php b/demos/blog/protected/Portlets/LoginPortlet.php
index 6f400f0a..58c056b3 100644
--- a/demos/blog/protected/Portlets/LoginPortlet.php
+++ b/demos/blog/protected/Portlets/LoginPortlet.php
@@ -1,39 +1,39 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-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/
- */
-class LoginPortlet extends Portlet
-{
- public function validateUser($sender,$param)
- {
- $authManager=$this->Application->getModule('auth');
- if(!$authManager->login(strtolower($this->Username->Text),$this->Password->Text))
- $param->IsValid=false;
- }
-
- public function loginButtonClicked($sender,$param)
- {
- if($this->Page->IsValid)
- $this->Response->reload();
- //$this->Response->redirect($this->Application->getModule('auth')->getReturnUrl());
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+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/
+ */
+class LoginPortlet extends Portlet
+{
+ public function validateUser($sender,$param)
+ {
+ $authManager=$this->Application->getModule('auth');
+ if(!$authManager->login(strtolower($this->Username->Text),$this->Password->Text))
+ $param->IsValid=false;
+ }
+
+ public function loginButtonClicked($sender,$param)
+ {
+ if($this->Page->IsValid)
+ $this->Response->reload();
+ //$this->Response->redirect($this->Application->getModule('auth')->getReturnUrl());
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Portlets/Portlet.php b/demos/blog/protected/Portlets/Portlet.php
index 50cb634d..6a7cee70 100644
--- a/demos/blog/protected/Portlets/Portlet.php
+++ b/demos/blog/protected/Portlets/Portlet.php
@@ -1,24 +1,24 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-/**
- * 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/
- */
-class Portlet extends TTemplateControl
-{
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+/**
+ * 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/
+ */
+class Portlet extends TTemplateControl
+{
+}
+
?> \ No newline at end of file
diff --git a/demos/blog/protected/Portlets/SearchPortlet.php b/demos/blog/protected/Portlets/SearchPortlet.php
index 10ef0499..4f7d6ebf 100644
--- a/demos/blog/protected/Portlets/SearchPortlet.php
+++ b/demos/blog/protected/Portlets/SearchPortlet.php
@@ -1,39 +1,39 @@
-<?php
-/**
- * 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/
- * @version $Id$
- */
-
-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/
- */
-class SearchPortlet extends Portlet
-{
- public function onInit($param)
- {
- parent::onInit($param);
- if(!$this->Page->IsPostBack && ($keyword=$this->Request['keyword'])!==null)
- $this->Keyword->Text=$keyword;
- }
-
- public function search($sender,$param)
- {
- $keyword=$this->Keyword->Text;
- $url=$this->Service->constructUrl('SearchPost',array('keyword'=>$keyword),false);
- $this->Response->redirect($url);
- }
-}
-
+<?php
+/**
+ * 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/
+ * @version $Id$
+ */
+
+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/
+ */
+class SearchPortlet extends Portlet
+{
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ if(!$this->Page->IsPostBack && ($keyword=$this->Request['keyword'])!==null)
+ $this->Keyword->Text=$keyword;
+ }
+
+ public function search($sender,$param)
+ {
+ $keyword=$this->Keyword->Text;
+ $url=$this->Service->constructUrl('SearchPost',array('keyword'=>$keyword),false);
+ $this->Response->redirect($url);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/chat/index.php b/demos/chat/index.php
index 17ed21d0..7a9eaf42 100644
--- a/demos/chat/index.php
+++ b/demos/chat/index.php
@@ -1,29 +1,29 @@
-<?php
-
-$frameworkPath='../../framework/prado.php';
-
-/** The directory checks may be removed if performance is required **/
-$basePath=dirname(__FILE__);
-$assetsPath=$basePath."/assets";
-$runtimePath=$basePath."/protected/runtime";
-
-$sqliteDbDir = $basePath."/protected/App_Code";
-$sqliteDb = $sqliteDbDir."/chat.db";
-
-if(!is_file($frameworkPath))
- die("Unable to find prado framework path $frameworkPath.");
-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.");
-if(!is_writable($sqliteDbDir))
- die("Please make sure that the directory $sqliteDbDir is writable by Web server process.");
-if(!is_writable($sqliteDb))
- die("Please make sure that the sqlite file $sqliteDb is writable by Web server process.");
-
-require_once($frameworkPath);
-
-$application=new TApplication;
-$application->run();
-
+<?php
+
+$frameworkPath='../../framework/prado.php';
+
+/** The directory checks may be removed if performance is required **/
+$basePath=dirname(__FILE__);
+$assetsPath=$basePath."/assets";
+$runtimePath=$basePath."/protected/runtime";
+
+$sqliteDbDir = $basePath."/protected/App_Code";
+$sqliteDb = $sqliteDbDir."/chat.db";
+
+if(!is_file($frameworkPath))
+ die("Unable to find prado framework path $frameworkPath.");
+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.");
+if(!is_writable($sqliteDbDir))
+ die("Please make sure that the directory $sqliteDbDir is writable by Web server process.");
+if(!is_writable($sqliteDb))
+ die("Please make sure that the sqlite file $sqliteDb is writable by Web server process.");
+
+require_once($frameworkPath);
+
+$application=new TApplication;
+$application->run();
+
?> \ No newline at end of file
diff --git a/demos/chat/protected/App_Code/ChatBufferRecord.php b/demos/chat/protected/App_Code/ChatBufferRecord.php
index f4d53db0..5a714de2 100644
--- a/demos/chat/protected/App_Code/ChatBufferRecord.php
+++ b/demos/chat/protected/App_Code/ChatBufferRecord.php
@@ -1,64 +1,64 @@
-<?php
-
-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);
- }
-
- 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();
- }
- }
- }
-
- 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>";
- }
-}
-
+<?php
+
+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);
+ }
+
+ 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();
+ }
+ }
+ }
+
+ 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>";
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/chat/protected/App_Code/ChatUserManager.php b/demos/chat/protected/App_Code/ChatUserManager.php
index f28ee362..d0f242fd 100644
--- a/demos/chat/protected/App_Code/ChatUserManager.php
+++ b/demos/chat/protected/App_Code/ChatUserManager.php
@@ -1,85 +1,85 @@
-<?php
-
-class ChatUserManager extends TModule implements IUserManager
-{
- /**
- * @return string name for a guest user.
- */
- public function getGuestName()
- {
- return 'Guest';
- }
-
- /**
- * Returns a user instance given the user name.
- * @param string user name, null if it is a guest.
- * @return TUser the user instance
- */
- public function getUser($username=null)
- {
- $user=new TUser($this);
- $user->setIsGuest(true);
- if($username !== null)
- {
- $user->setIsGuest(false);
- $user->setName($username);
- $user->setRoles(array('normal'));
- }
- return $user;
- }
-
- /**
- * Add a new user to the database.
- * @param string username.
- */
- public function addNewUser($username)
- {
- $user = new ChatUserRecord();
- $user->username = $username;
- $user->save();
- }
-
- /**
- * @return boolean true if username already exists, false otherwise.
- */
- public function usernameExists($username)
- {
- return ChatUserRecord::finder()->findByUsername($username) instanceof ChatUserRecord;
- }
-
- /**
- * Validates if the username exists.
- * @param string user name
- * @param string password
- * @return boolean true if validation is successful, false otherwise.
- */
- public function validateUser($username,$password)
- {
- return $this->usernameExists($username);
- }
-
- /**
- * Saves user auth data into a cookie.
- * @param THttpCookie the cookie to receive the user auth data.
- * @since 3.1.1
- */
- public function saveUserToCookie($cookie)
- {
- // do nothing since we don't support cookie-based auth in this example
- }
-
- /**
- * Returns a user instance according to auth data stored in a cookie.
- * @param THttpCookie the cookie storing user authentication information
- * @return TUser the user instance generated based on the cookie auth data, null if the cookie does not have valid auth data.
- * @since 3.1.1
- */
- public function getUserFromCookie($cookie)
- {
- // do nothing since we don't support cookie-based auth in this example
- return null;
- }
-}
-
-
+<?php
+
+class ChatUserManager extends TModule implements IUserManager
+{
+ /**
+ * @return string name for a guest user.
+ */
+ public function getGuestName()
+ {
+ return 'Guest';
+ }
+
+ /**
+ * Returns a user instance given the user name.
+ * @param string user name, null if it is a guest.
+ * @return TUser the user instance
+ */
+ public function getUser($username=null)
+ {
+ $user=new TUser($this);
+ $user->setIsGuest(true);
+ if($username !== null)
+ {
+ $user->setIsGuest(false);
+ $user->setName($username);
+ $user->setRoles(array('normal'));
+ }
+ return $user;
+ }
+
+ /**
+ * Add a new user to the database.
+ * @param string username.
+ */
+ public function addNewUser($username)
+ {
+ $user = new ChatUserRecord();
+ $user->username = $username;
+ $user->save();
+ }
+
+ /**
+ * @return boolean true if username already exists, false otherwise.
+ */
+ public function usernameExists($username)
+ {
+ return ChatUserRecord::finder()->findByUsername($username) instanceof ChatUserRecord;
+ }
+
+ /**
+ * Validates if the username exists.
+ * @param string user name
+ * @param string password
+ * @return boolean true if validation is successful, false otherwise.
+ */
+ public function validateUser($username,$password)
+ {
+ return $this->usernameExists($username);
+ }
+
+ /**
+ * Saves user auth data into a cookie.
+ * @param THttpCookie the cookie to receive the user auth data.
+ * @since 3.1.1
+ */
+ public function saveUserToCookie($cookie)
+ {
+ // do nothing since we don't support cookie-based auth in this example
+ }
+
+ /**
+ * Returns a user instance according to auth data stored in a cookie.
+ * @param THttpCookie the cookie storing user authentication information
+ * @return TUser the user instance generated based on the cookie auth data, null if the cookie does not have valid auth data.
+ * @since 3.1.1
+ */
+ public function getUserFromCookie($cookie)
+ {
+ // do nothing since we don't support cookie-based auth in this example
+ return null;
+ }
+}
+
+
?> \ No newline at end of file
diff --git a/demos/chat/protected/App_Code/ChatUserRecord.php b/demos/chat/protected/App_Code/ChatUserRecord.php
index b68fbd4d..ee45cf84 100644
--- a/demos/chat/protected/App_Code/ChatUserRecord.php
+++ b/demos/chat/protected/App_Code/ChatUserRecord.php
@@ -1,41 +1,41 @@
-<?php
-
-class ChatUserRecord extends TActiveRecord
-{
- const TABLE='chat_users';
-
- public $username;
- 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;
- }
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-
- 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;
- }
-}
-
+<?php
+
+class ChatUserRecord extends TActiveRecord
+{
+ const TABLE='chat_users';
+
+ public $username;
+ 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;
+ }
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+
+ 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;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/chat/protected/pages/Home.php b/demos/chat/protected/pages/Home.php
index 65cb22dc..bdcb2d3b 100644
--- a/demos/chat/protected/pages/Home.php
+++ b/demos/chat/protected/pages/Home.php
@@ -1,56 +1,56 @@
-<?php
-
-class Home extends TPage
-{
- 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));
- }
- }
-
- 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 = '';
- $this->refresh($sender, $param);
- $this->CallbackClient->focus($this->userinput);
- }
- }
-
- function refresh($sender, $param)
- {
- //refresh the message list
- $content = ChatBufferRecord::finder()->getUserMessages($this->Application->User->Name);
- if(strlen($content) > 0)
- {
- $client = $this->Page->CallbackClient;
- $anchor = (string)time();
- $content .= "<a href=\"#\" id=\"{$anchor}\"> </a>";
- $client->appendContent("messages", $content);
- $client->focus($anchor);
- }
-
- //refresh the user list
- $lastUpdate = $this->getViewState('userList','');
- $users = ChatUserRecord::finder()->getUserList();
- if($lastUpdate != $users)
- {
- $this->Page->CallbackClient->update('users', $users);
- $this->setViewstate('userList', $users);
- }
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ 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));
+ }
+ }
+
+ 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 = '';
+ $this->refresh($sender, $param);
+ $this->CallbackClient->focus($this->userinput);
+ }
+ }
+
+ function refresh($sender, $param)
+ {
+ //refresh the message list
+ $content = ChatBufferRecord::finder()->getUserMessages($this->Application->User->Name);
+ if(strlen($content) > 0)
+ {
+ $client = $this->Page->CallbackClient;
+ $anchor = (string)time();
+ $content .= "<a href=\"#\" id=\"{$anchor}\"> </a>";
+ $client->appendContent("messages", $content);
+ $client->focus($anchor);
+ }
+
+ //refresh the user list
+ $lastUpdate = $this->getViewState('userList','');
+ $users = ChatUserRecord::finder()->getUserList();
+ if($lastUpdate != $users)
+ {
+ $this->Page->CallbackClient->update('users', $users);
+ $this->setViewstate('userList', $users);
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/chat/protected/pages/Login.php b/demos/chat/protected/pages/Login.php
index 831ab925..ec39f1f0 100644
--- a/demos/chat/protected/pages/Login.php
+++ b/demos/chat/protected/pages/Login.php
@@ -1,40 +1,40 @@
-<?php
-
-class Login extends TPage
-{
- /**
- * Check that the username is not already taken.
- * @param TControl custom validator that created the event.
- * @param TServerValidateEventParameter validation parameters.
- */
- function checkUsername($sender, $param)
- {
- $manager = $this->Application->Modules['users'];
- if($manager->usernameExists($this->username->Text))
- $param->IsValid = false;
- }
-
- /**
- * Create and login a new user, then redirect to the requested page.
- * @param TControl button control that created the event.
- * @param TEventParameter event parameters.
- */
- 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;
-
- $this->Response->redirect($auth->ReturnUrl);
- }
- }
-}
-
+<?php
+
+class Login extends TPage
+{
+ /**
+ * Check that the username is not already taken.
+ * @param TControl custom validator that created the event.
+ * @param TServerValidateEventParameter validation parameters.
+ */
+ function checkUsername($sender, $param)
+ {
+ $manager = $this->Application->Modules['users'];
+ if($manager->usernameExists($this->username->Text))
+ $param->IsValid = false;
+ }
+
+ /**
+ * Create and login a new user, then redirect to the requested page.
+ * @param TControl button control that created the event.
+ * @param TEventParameter event parameters.
+ */
+ 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;
+
+ $this->Response->redirect($auth->ReturnUrl);
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/composer/index.php b/demos/composer/index.php
index 43c0b436..6efff1af 100644
--- a/demos/composer/index.php
+++ b/demos/composer/index.php
@@ -1,18 +1,18 @@
-<?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();
-
+<?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();
+
?> \ No newline at end of file
diff --git a/demos/composer/index2.php b/demos/composer/index2.php
index f3d8dd90..30df9480 100644
--- a/demos/composer/index2.php
+++ b/demos/composer/index2.php
@@ -1,18 +1,18 @@
-<?php
-
-$basePath=dirname(__FILE__);
-$frameworkPath=$basePath.'/../../framework/pradolite.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();
-
+<?php
+
+$basePath=dirname(__FILE__);
+$frameworkPath=$basePath.'/../../framework/pradolite.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();
+
?> \ No newline at end of file
diff --git a/demos/composer/protected/pages/ClassDefinition.php b/demos/composer/protected/pages/ClassDefinition.php
index cb657e85..aee5fe6f 100644
--- a/demos/composer/protected/pages/ClassDefinition.php
+++ b/demos/composer/protected/pages/ClassDefinition.php
@@ -1,371 +1,371 @@
-<?php
-
-class ClassDefinition extends TComponent
-{
- private $_className='ClassName';
- private $_parentClass='TWebControl';
- private $_interfaces='';
- private $_properties=null;
- private $_events=null;
- private $_email='';
- private $_author='';
- private $_comments='';
-
- public function reset()
- {
- $this->_className='ClassName';
- $this->_parentClass='TWebControl';
- $this->_interfaces='';
- $this->_properties=new TList;
- $this->_events=new TList;
- $this->_email='';
- $this->_author='';
- $this->_comments='';
- }
-
- public function render($writer)
- {
- $this->renderComments($writer);
- $this->renderClass($writer);
- }
-
- protected function renderComments($writer)
- {
- $str ="/**\n";
- $str.=" * Class {$this->ClassName}.\n";
- if($this->Comments!=='')
- {
- $str.=" *\n";
- $str.=" * ".implode("\n * ",explode("\n",wordwrap($this->Comments)));
- $str.="\n *\n";
- }
- if($this->Author!=='')
- {
- $str.=" * @author {$this->Author}";
- if($this->Email!=='')
- $str.=" <{$this->Email}>";
- $str.="\n";
- }
- $str.=" * @version \$Revision: \$ \$Date: \$\n";
- $str.=" */\n";
- $writer->write($str);
- }
-
- protected function renderClass($writer)
- {
- $writer->write("class {$this->ClassName}");
- if($this->ParentClass!=='')
- $writer->write(" extends {$this->ParentClass}");
- if($this->Interfaces!=='')
- $writer->write(" implements {$this->Interfaces}");
- $writer->write("\n{\n");
- $this->renderVariables($writer);
- $this->renderProperties($writer);
- $this->renderEvents($writer);
- $writer->write("}\n");
- }
-
- private function getVariableName($propertyName)
- {
- return '_'.strtolower($propertyName[0]).substr($propertyName,1);
- }
-
- protected function renderVariables($writer)
- {
- foreach($this->Properties as $property)
- {
- if($property->Storage==='Memory')
- {
- $name=$this->getVariableName($property->Name);
- $value=$this->getValueAsString($property->DefaultValue,$property->Type);
- $writer->write("\t/**\n\t * @var {$property->Type} {$property->Comments}\n\t */\n");
- $writer->write("\tprivate \$$name=$value;\n");
- }
- }
- }
-
- private function getValueAsString($value,$type)
- {
- switch($type)
- {
- case 'integer':
- $value=TPropertyValue::ensureInteger($value);
- break;
- case 'float':
- $value=TPropertyValue::ensureFloat($value);
- break;
- case 'boolean':
- if(TPropertyValue::ensureBoolean($value))
- $value='true';
- else
- $value='false';
- break;
- case 'enumerable':
- $value="'$value'";
- break;
- case 'mixed':
- $value='null';
- break;
- case 'string':
- $value="'$value'";
- break;
- }
- return "$value";
- }
-
- private function getValueConversionString($type)
- {
- switch($type)
- {
- case 'integer': return 'TPropertyValue::ensureInteger($value)';
- case 'float': return 'TPropertyValue::ensureFloat($value)';
- case 'boolean': return 'TPropertyValue::ensureBoolean($value)';
- case 'enumerable': return 'TPropertyValue::ensureEnum($value)';
- case 'mixed': return '$value';
- case 'string': return 'TPropertyValue::ensureString($value)';
- }
- }
-
- protected function renderProperties($writer)
- {
- foreach($this->Properties as $property)
- {
- $name=$property->Name;
- if($name==='')
- continue;
- $comments=implode("\n\t * ",explode("\n",wordwrap($property->Comments)));
- $access=$property->IsProtected?'protected':'public';
- $setter='set'.$property->Name.'($value)';
- $getter='get'.$property->Name.'()';
- $value=$this->getValueAsString($property->DefaultValue,$property->Type);
- if($property->Storage==='ViewState')
- {
- $readStatement="return \$this->getViewState('$name',$value);";
- $writeStatement="\$this->setViewState('$name',".$this->getValueConversionString($property->Type).",$value);";
- }
- else if($property->Storage==='ControlState')
- {
- $readStatement="return \$this->getControlState('$name',$value);";
- $writeStatement="\$this->setControlState('$name',".$this->getValueConversionString($property->Type).",$value);";
- }
- else
- {
- $varname=$this->getVariableName($property->Name);
- $readStatement="return \$this->$varname;";
- $writeStatement="\$this->$varname=".$this->getValueConversionString($property->Type).";";
- }
- $writer->write("\n\t/**\n\t * @return {$property->Type} $comments Defaults to $value.\n\t */\n");
- $writer->write("\t$access function $getter\n\t{\n\t\t$readStatement\n\t}\n");
- if(!$property->ReadOnly)
- {
- $writer->write("\n\t/**\n\t * @param {$property->Type} $comments\n\t */\n");
- $writer->write("\t$access function $setter\n\t{\n\t\t$writeStatement\n\t}\n");
- }
- }
- }
-
- protected function renderEvents($writer)
- {
- foreach($this->Events as $event)
- {
- $name=$event->Name;
- if($name==='')
- continue;
- if(strncasecmp($name,'on',2)!==0)
- $name='On'.$name;
- else
- {
- $name[0]='O';
- $name[1]='n';
- }
- $methodName=$name;
- $methodName[0]='o';
- $comments=implode("\n\t * ",explode("\n",wordwrap($event->Comments)));
- $writer->write("\n\t/**\n\t * Raises <b>$name</b> event.\n\t * $comments\n\t * @param TEventParameter event parameter\n\t */\n");
- $writer->write("\tpublic function $methodName(\$param)\n\t{\n\t\t\$this->raiseEvent('$name',\$this,\$param);\n\t}\n");
- }
- }
-
- public function getClassName()
- {
- return $this->_className;
- }
-
- public function setClassName($value)
- {
- $this->_className=trim($value);
- }
-
- public function getParentClass()
- {
- return $this->_parentClass;
- }
-
- public function setParentClass($value)
- {
- $this->_parentClass=trim($value);
- }
-
- public function getInterfaces()
- {
- return $this->_interfaces;
- }
-
- public function setInterfaces($value)
- {
- $this->_interfaces=$value;
- }
-
- public function getProperties()
- {
- if(!$this->_properties)
- $this->_properties=new TList;
- return $this->_properties;
- }
-
- public function getEvents()
- {
- if(!$this->_events)
- $this->_events=new TList;
- return $this->_events;
- }
-
- public function getComments()
- {
- return $this->_comments;
- }
-
- public function setComments($value)
- {
- $this->_comments=$value;
- }
-
- public function getAuthor()
- {
- return $this->_author;
- }
-
- public function setAuthor($value)
- {
- $this->_author=trim($value);
- }
-
- public function getEmail()
- {
- return $this->_email;
- }
-
- public function setEmail($value)
- {
- $this->_email=trim($value);
- }
-}
-
-class EventDefinition extends TComponent
-{
- private $_name='';
- private $_comments='';
-
- public function getName()
- {
- return $this->_name;
- }
-
- public function setName($value)
- {
- $this->_name=ucfirst(trim($value));
- }
-
- public function getComments()
- {
- return $this->_comments;
- }
-
- public function setComments($value)
- {
- $this->_comments=$value;
- }
-}
-
-class PropertyDefinition extends TComponent
-{
- private $_name='';
- private $_type='string';
- private $_default='';
- private $_readOnly=false;
- private $_protected=false;
- private $_storage='ViewState';
- private $_comments='';
-
- public function getName()
- {
- return $this->_name;
- }
-
- public function setName($value)
- {
- $this->_name=ucfirst(trim($value));
- }
-
- public function getType()
- {
- return $this->_type;
- }
-
- public function setType($value)
- {
- $this->_type=trim($value);
- }
-
- public function getDefaultValue()
- {
- return $this->_default;
- }
-
- public function setDefaultValue($value)
- {
- $this->_default=trim($value);
- }
-
- public function getReadOnly()
- {
- return $this->_readOnly;
- }
-
- public function setReadOnly($value)
- {
- $this->_readOnly=TPropertyValue::ensureBoolean($value);
- }
-
- public function getIsProtected()
- {
- return $this->_protected;
- }
-
- public function setIsProtected($value)
- {
- $this->_protected=TPropertyValue::ensureBoolean($value);
- }
-
- public function getStorage()
- {
- return $this->_storage;
- }
-
- public function setStorage($value)
- {
- $this->_storage=trim($value);
- }
-
- public function getComments()
- {
- return $this->_comments;
- }
-
- public function setComments($value)
- {
- $this->_comments=$value;
- }
-}
-
+<?php
+
+class ClassDefinition extends TComponent
+{
+ private $_className='ClassName';
+ private $_parentClass='TWebControl';
+ private $_interfaces='';
+ private $_properties=null;
+ private $_events=null;
+ private $_email='';
+ private $_author='';
+ private $_comments='';
+
+ public function reset()
+ {
+ $this->_className='ClassName';
+ $this->_parentClass='TWebControl';
+ $this->_interfaces='';
+ $this->_properties=new TList;
+ $this->_events=new TList;
+ $this->_email='';
+ $this->_author='';
+ $this->_comments='';
+ }
+
+ public function render($writer)
+ {
+ $this->renderComments($writer);
+ $this->renderClass($writer);
+ }
+
+ protected function renderComments($writer)
+ {
+ $str ="/**\n";
+ $str.=" * Class {$this->ClassName}.\n";
+ if($this->Comments!=='')
+ {
+ $str.=" *\n";
+ $str.=" * ".implode("\n * ",explode("\n",wordwrap($this->Comments)));
+ $str.="\n *\n";
+ }
+ if($this->Author!=='')
+ {
+ $str.=" * @author {$this->Author}";
+ if($this->Email!=='')
+ $str.=" <{$this->Email}>";
+ $str.="\n";
+ }
+ $str.=" * @version \$Revision: \$ \$Date: \$\n";
+ $str.=" */\n";
+ $writer->write($str);
+ }
+
+ protected function renderClass($writer)
+ {
+ $writer->write("class {$this->ClassName}");
+ if($this->ParentClass!=='')
+ $writer->write(" extends {$this->ParentClass}");
+ if($this->Interfaces!=='')
+ $writer->write(" implements {$this->Interfaces}");
+ $writer->write("\n{\n");
+ $this->renderVariables($writer);
+ $this->renderProperties($writer);
+ $this->renderEvents($writer);
+ $writer->write("}\n");
+ }
+
+ private function getVariableName($propertyName)
+ {
+ return '_'.strtolower($propertyName[0]).substr($propertyName,1);
+ }
+
+ protected function renderVariables($writer)
+ {
+ foreach($this->Properties as $property)
+ {
+ if($property->Storage==='Memory')
+ {
+ $name=$this->getVariableName($property->Name);
+ $value=$this->getValueAsString($property->DefaultValue,$property->Type);
+ $writer->write("\t/**\n\t * @var {$property->Type} {$property->Comments}\n\t */\n");
+ $writer->write("\tprivate \$$name=$value;\n");
+ }
+ }
+ }
+
+ private function getValueAsString($value,$type)
+ {
+ switch($type)
+ {
+ case 'integer':
+ $value=TPropertyValue::ensureInteger($value);
+ break;
+ case 'float':
+ $value=TPropertyValue::ensureFloat($value);
+ break;
+ case 'boolean':
+ if(TPropertyValue::ensureBoolean($value))
+ $value='true';
+ else
+ $value='false';
+ break;
+ case 'enumerable':
+ $value="'$value'";
+ break;
+ case 'mixed':
+ $value='null';
+ break;
+ case 'string':
+ $value="'$value'";
+ break;
+ }
+ return "$value";
+ }
+
+ private function getValueConversionString($type)
+ {
+ switch($type)
+ {
+ case 'integer': return 'TPropertyValue::ensureInteger($value)';
+ case 'float': return 'TPropertyValue::ensureFloat($value)';
+ case 'boolean': return 'TPropertyValue::ensureBoolean($value)';
+ case 'enumerable': return 'TPropertyValue::ensureEnum($value)';
+ case 'mixed': return '$value';
+ case 'string': return 'TPropertyValue::ensureString($value)';
+ }
+ }
+
+ protected function renderProperties($writer)
+ {
+ foreach($this->Properties as $property)
+ {
+ $name=$property->Name;
+ if($name==='')
+ continue;
+ $comments=implode("\n\t * ",explode("\n",wordwrap($property->Comments)));
+ $access=$property->IsProtected?'protected':'public';
+ $setter='set'.$property->Name.'($value)';
+ $getter='get'.$property->Name.'()';
+ $value=$this->getValueAsString($property->DefaultValue,$property->Type);
+ if($property->Storage==='ViewState')
+ {
+ $readStatement="return \$this->getViewState('$name',$value);";
+ $writeStatement="\$this->setViewState('$name',".$this->getValueConversionString($property->Type).",$value);";
+ }
+ else if($property->Storage==='ControlState')
+ {
+ $readStatement="return \$this->getControlState('$name',$value);";
+ $writeStatement="\$this->setControlState('$name',".$this->getValueConversionString($property->Type).",$value);";
+ }
+ else
+ {
+ $varname=$this->getVariableName($property->Name);
+ $readStatement="return \$this->$varname;";
+ $writeStatement="\$this->$varname=".$this->getValueConversionString($property->Type).";";
+ }
+ $writer->write("\n\t/**\n\t * @return {$property->Type} $comments Defaults to $value.\n\t */\n");
+ $writer->write("\t$access function $getter\n\t{\n\t\t$readStatement\n\t}\n");
+ if(!$property->ReadOnly)
+ {
+ $writer->write("\n\t/**\n\t * @param {$property->Type} $comments\n\t */\n");
+ $writer->write("\t$access function $setter\n\t{\n\t\t$writeStatement\n\t}\n");
+ }
+ }
+ }
+
+ protected function renderEvents($writer)
+ {
+ foreach($this->Events as $event)
+ {
+ $name=$event->Name;
+ if($name==='')
+ continue;
+ if(strncasecmp($name,'on',2)!==0)
+ $name='On'.$name;
+ else
+ {
+ $name[0]='O';
+ $name[1]='n';
+ }
+ $methodName=$name;
+ $methodName[0]='o';
+ $comments=implode("\n\t * ",explode("\n",wordwrap($event->Comments)));
+ $writer->write("\n\t/**\n\t * Raises <b>$name</b> event.\n\t * $comments\n\t * @param TEventParameter event parameter\n\t */\n");
+ $writer->write("\tpublic function $methodName(\$param)\n\t{\n\t\t\$this->raiseEvent('$name',\$this,\$param);\n\t}\n");
+ }
+ }
+
+ public function getClassName()
+ {
+ return $this->_className;
+ }
+
+ public function setClassName($value)
+ {
+ $this->_className=trim($value);
+ }
+
+ public function getParentClass()
+ {
+ return $this->_parentClass;
+ }
+
+ public function setParentClass($value)
+ {
+ $this->_parentClass=trim($value);
+ }
+
+ public function getInterfaces()
+ {
+ return $this->_interfaces;
+ }
+
+ public function setInterfaces($value)
+ {
+ $this->_interfaces=$value;
+ }
+
+ public function getProperties()
+ {
+ if(!$this->_properties)
+ $this->_properties=new TList;
+ return $this->_properties;
+ }
+
+ public function getEvents()
+ {
+ if(!$this->_events)
+ $this->_events=new TList;
+ return $this->_events;
+ }
+
+ public function getComments()
+ {
+ return $this->_comments;
+ }
+
+ public function setComments($value)
+ {
+ $this->_comments=$value;
+ }
+
+ public function getAuthor()
+ {
+ return $this->_author;
+ }
+
+ public function setAuthor($value)
+ {
+ $this->_author=trim($value);
+ }
+
+ public function getEmail()
+ {
+ return $this->_email;
+ }
+
+ public function setEmail($value)
+ {
+ $this->_email=trim($value);
+ }
+}
+
+class EventDefinition extends TComponent
+{
+ private $_name='';
+ private $_comments='';
+
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ public function setName($value)
+ {
+ $this->_name=ucfirst(trim($value));
+ }
+
+ public function getComments()
+ {
+ return $this->_comments;
+ }
+
+ public function setComments($value)
+ {
+ $this->_comments=$value;
+ }
+}
+
+class PropertyDefinition extends TComponent
+{
+ private $_name='';
+ private $_type='string';
+ private $_default='';
+ private $_readOnly=false;
+ private $_protected=false;
+ private $_storage='ViewState';
+ private $_comments='';
+
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ public function setName($value)
+ {
+ $this->_name=ucfirst(trim($value));
+ }
+
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ public function setType($value)
+ {
+ $this->_type=trim($value);
+ }
+
+ public function getDefaultValue()
+ {
+ return $this->_default;
+ }
+
+ public function setDefaultValue($value)
+ {
+ $this->_default=trim($value);
+ }
+
+ public function getReadOnly()
+ {
+ return $this->_readOnly;
+ }
+
+ public function setReadOnly($value)
+ {
+ $this->_readOnly=TPropertyValue::ensureBoolean($value);
+ }
+
+ public function getIsProtected()
+ {
+ return $this->_protected;
+ }
+
+ public function setIsProtected($value)
+ {
+ $this->_protected=TPropertyValue::ensureBoolean($value);
+ }
+
+ public function getStorage()
+ {
+ return $this->_storage;
+ }
+
+ public function setStorage($value)
+ {
+ $this->_storage=trim($value);
+ }
+
+ public function getComments()
+ {
+ return $this->_comments;
+ }
+
+ public function setComments($value)
+ {
+ $this->_comments=$value;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/composer/protected/pages/Home.php b/demos/composer/protected/pages/Home.php
index d3d02b66..07f02e7e 100644
--- a/demos/composer/protected/pages/Home.php
+++ b/demos/composer/protected/pages/Home.php
@@ -1,118 +1,118 @@
-<?php
-
-Prado::using('Application.pages.ClassDefinition');
-
-class Home extends TPage
-{
- private $_classDefinition=null;
-
- public function getClassDefinition()
- {
- if(!$this->_classDefinition)
- $this->_classDefinition=new ClassDefinition;
- return $this->_classDefinition;
- }
-
- public function onInit($param)
- {
- parent::onInit($param);
- if(!$this->IsPostBack)
- {
- $properties=$this->ClassDefinition->Properties;
- $properties[]=new PropertyDefinition;
- $properties[]=new PropertyDefinition;
- $properties[]=new PropertyDefinition;
- $this->PropertyList->DataSource=$properties;
- $this->dataBind();
- }
- }
-
- public function propertyAction($sender,$param)
- {
- if($param->CommandName==='add')
- $this->ClassDefinition->Properties->add(new PropertyDefinition);
- if($param->CommandName==='remove')
- $this->ClassDefinition->Properties->removeAt($param->CommandParameter);
- else if($param->CommandName==='up')
- {
- $property=$this->ClassDefinition->Properties->itemAt($param->CommandParameter);
- $this->ClassDefinition->Properties->removeAt($param->CommandParameter);
- $this->ClassDefinition->Properties->insertAt($param->CommandParameter-1,$property);
- }
- else if($param->CommandName==='down')
- {
- $property=$this->ClassDefinition->Properties->itemAt($param->CommandParameter);
- $this->ClassDefinition->Properties->removeAt($param->CommandParameter);
- $this->ClassDefinition->Properties->insertAt($param->CommandParameter+1,$property);
- }
- $this->PropertyList->DataSource=$this->ClassDefinition->Properties;
- $this->PropertyList->dataBind();
- }
-
- public function eventAction($sender,$param)
- {
- if($param->CommandName==='add')
- $this->ClassDefinition->Events->add(new EventDefinition);
- else if($param->CommandName==='remove')
- $this->ClassDefinition->Events->removeAt($param->CommandParameter);
- else if($param->CommandName==='up')
- {
- $property=$this->ClassDefinition->Events->itemAt($param->CommandParameter);
- $this->ClassDefinition->Events->removeAt($param->CommandParameter);
- $this->ClassDefinition->Events->insertAt($param->CommandParameter-1,$property);
- }
- else if($param->CommandName==='down')
- {
- $property=$this->ClassDefinition->Events->itemAt($param->CommandParameter);
- $this->ClassDefinition->Events->removeAt($param->CommandParameter);
- $this->ClassDefinition->Events->insertAt($param->CommandParameter+1,$property);
- }
- $this->EventList->DataSource=$this->ClassDefinition->Events;
- $this->EventList->dataBind();
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- //if($this->IsPostBack && $this->IsValid)
- if($this->IsPostBack)
- {
- $def=$this->ClassDefinition;
- $def->reset();
- $def->ClassName=$this->ClassName->Text;
- $def->ParentClass=$this->ParentClass->Text;
- $def->Interfaces=$this->Interfaces->Text;
- $def->Comments=$this->Comments->Text;
- $def->Author=$this->AuthorName->Text;
- $def->Email=$this->AuthorEmail->Text;
- foreach($this->PropertyList->Items as $item)
- {
- $property=new PropertyDefinition;
- $property->Name=$item->PropertyName->Text;
- $property->Type=$item->PropertyType->Text;
- $property->DefaultValue=$item->DefaultValue->Text;
- $property->ReadOnly=$item->ReadOnly->Checked;
- $property->IsProtected=$item->IsProtected->Checked;
- $property->Comments=$item->Comments->Text;
- $property->Storage=$item->Storage->Text;
- $def->Properties[]=$property;
- }
- foreach($this->EventList->Items as $item)
- {
- $event=new EventDefinition;
- $event->Name=$item->EventName->Text;
- $event->Comments=$item->Comments->Text;
- $def->Events[]=$event;
- }
- }
- }
-
- public function generateCode($sender,$param)
- {
- $writer=Prado::createComponent('TTextWriter');
- $this->ClassDefinition->render($writer);
- $this->SourceCode->Text=$writer->flush();
- }
-}
-
+<?php
+
+Prado::using('Application.pages.ClassDefinition');
+
+class Home extends TPage
+{
+ private $_classDefinition=null;
+
+ public function getClassDefinition()
+ {
+ if(!$this->_classDefinition)
+ $this->_classDefinition=new ClassDefinition;
+ return $this->_classDefinition;
+ }
+
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ if(!$this->IsPostBack)
+ {
+ $properties=$this->ClassDefinition->Properties;
+ $properties[]=new PropertyDefinition;
+ $properties[]=new PropertyDefinition;
+ $properties[]=new PropertyDefinition;
+ $this->PropertyList->DataSource=$properties;
+ $this->dataBind();
+ }
+ }
+
+ public function propertyAction($sender,$param)
+ {
+ if($param->CommandName==='add')
+ $this->ClassDefinition->Properties->add(new PropertyDefinition);
+ if($param->CommandName==='remove')
+ $this->ClassDefinition->Properties->removeAt($param->CommandParameter);
+ else if($param->CommandName==='up')
+ {
+ $property=$this->ClassDefinition->Properties->itemAt($param->CommandParameter);
+ $this->ClassDefinition->Properties->removeAt($param->CommandParameter);
+ $this->ClassDefinition->Properties->insertAt($param->CommandParameter-1,$property);
+ }
+ else if($param->CommandName==='down')
+ {
+ $property=$this->ClassDefinition->Properties->itemAt($param->CommandParameter);
+ $this->ClassDefinition->Properties->removeAt($param->CommandParameter);
+ $this->ClassDefinition->Properties->insertAt($param->CommandParameter+1,$property);
+ }
+ $this->PropertyList->DataSource=$this->ClassDefinition->Properties;
+ $this->PropertyList->dataBind();
+ }
+
+ public function eventAction($sender,$param)
+ {
+ if($param->CommandName==='add')
+ $this->ClassDefinition->Events->add(new EventDefinition);
+ else if($param->CommandName==='remove')
+ $this->ClassDefinition->Events->removeAt($param->CommandParameter);
+ else if($param->CommandName==='up')
+ {
+ $property=$this->ClassDefinition->Events->itemAt($param->CommandParameter);
+ $this->ClassDefinition->Events->removeAt($param->CommandParameter);
+ $this->ClassDefinition->Events->insertAt($param->CommandParameter-1,$property);
+ }
+ else if($param->CommandName==='down')
+ {
+ $property=$this->ClassDefinition->Events->itemAt($param->CommandParameter);
+ $this->ClassDefinition->Events->removeAt($param->CommandParameter);
+ $this->ClassDefinition->Events->insertAt($param->CommandParameter+1,$property);
+ }
+ $this->EventList->DataSource=$this->ClassDefinition->Events;
+ $this->EventList->dataBind();
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ //if($this->IsPostBack && $this->IsValid)
+ if($this->IsPostBack)
+ {
+ $def=$this->ClassDefinition;
+ $def->reset();
+ $def->ClassName=$this->ClassName->Text;
+ $def->ParentClass=$this->ParentClass->Text;
+ $def->Interfaces=$this->Interfaces->Text;
+ $def->Comments=$this->Comments->Text;
+ $def->Author=$this->AuthorName->Text;
+ $def->Email=$this->AuthorEmail->Text;
+ foreach($this->PropertyList->Items as $item)
+ {
+ $property=new PropertyDefinition;
+ $property->Name=$item->PropertyName->Text;
+ $property->Type=$item->PropertyType->Text;
+ $property->DefaultValue=$item->DefaultValue->Text;
+ $property->ReadOnly=$item->ReadOnly->Checked;
+ $property->IsProtected=$item->IsProtected->Checked;
+ $property->Comments=$item->Comments->Text;
+ $property->Storage=$item->Storage->Text;
+ $def->Properties[]=$property;
+ }
+ foreach($this->EventList->Items as $item)
+ {
+ $event=new EventDefinition;
+ $event->Name=$item->EventName->Text;
+ $event->Comments=$item->Comments->Text;
+ $def->Events[]=$event;
+ }
+ }
+ }
+
+ public function generateCode($sender,$param)
+ {
+ $writer=Prado::createComponent('TTextWriter');
+ $this->ClassDefinition->render($writer);
+ $this->SourceCode->Text=$writer->flush();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/composer/protected/pages/Layout.php b/demos/composer/protected/pages/Layout.php
index a82d2fff..3d9b5714 100644
--- a/demos/composer/protected/pages/Layout.php
+++ b/demos/composer/protected/pages/Layout.php
@@ -1,15 +1,15 @@
-<?php
-
-class Layout extends TTemplateControl
-{
- public function toggleTopicPanel($sender,$param)
- {
- $this->TopicPanel->Visible=!$this->TopicPanel->Visible;
- if($this->TopicPanel->Visible)
- $sender->Text="Hide TOC";
- else
- $sender->Text="Show TOC";
- }
-}
-
+<?php
+
+class Layout extends TTemplateControl
+{
+ public function toggleTopicPanel($sender,$param)
+ {
+ $this->TopicPanel->Visible=!$this->TopicPanel->Visible;
+ if($this->TopicPanel->Visible)
+ $sender->Text="Hide TOC";
+ else
+ $sender->Text="Show TOC";
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/helloworld/index.php b/demos/helloworld/index.php
index 43c0b436..6efff1af 100644
--- a/demos/helloworld/index.php
+++ b/demos/helloworld/index.php
@@ -1,18 +1,18 @@
-<?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();
-
+<?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();
+
?> \ No newline at end of file
diff --git a/demos/helloworld/protected/pages/Home.php b/demos/helloworld/protected/pages/Home.php
index 16174b2e..36eb2032 100644
--- a/demos/helloworld/protected/pages/Home.php
+++ b/demos/helloworld/protected/pages/Home.php
@@ -1,11 +1,11 @@
-<?php
-
-class Home extends TPage
-{
- public function buttonClicked($sender,$param)
- {
- $sender->Text='Hello world!';
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function buttonClicked($sender,$param)
+ {
+ $sender->Text='Hello world!';
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/northwind-db/index.php b/demos/northwind-db/index.php
index 94e60d49..ef243159 100644
--- a/demos/northwind-db/index.php
+++ b/demos/northwind-db/index.php
@@ -1,28 +1,28 @@
-<?php
-
-$basePath=dirname(__FILE__);
-$frameworkPath=$basePath.'/../../framework/prado.php';
-$assetsPath=$basePath.'/assets';
-$runtimePath=$basePath.'/protected/runtime';
-
-if(!is_file($frameworkPath))
- die("Unable to find prado framework path $frameworkPath.");
-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.");
-
-/** SQLite Northwind database file **/
-$sqlite_dir = $basePath.'/protected/data';
-$sqlite_db = $sqlite_dir.'/Northwind.db';
-if(!is_writable($sqlite_dir))
- die("Please make sure that the directory $sqlite_dir is writable by Web server process.");
-if(!is_writable($sqlite_db))
- die("Please make sure that the sqlite database file $sqlite_db is writable by Web server process.");
-
-require_once($frameworkPath);
-
-$application=new TApplication;
-$application->run();
-
+<?php
+
+$basePath=dirname(__FILE__);
+$frameworkPath=$basePath.'/../../framework/prado.php';
+$assetsPath=$basePath.'/assets';
+$runtimePath=$basePath.'/protected/runtime';
+
+if(!is_file($frameworkPath))
+ die("Unable to find prado framework path $frameworkPath.");
+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.");
+
+/** SQLite Northwind database file **/
+$sqlite_dir = $basePath.'/protected/data';
+$sqlite_db = $sqlite_dir.'/Northwind.db';
+if(!is_writable($sqlite_dir))
+ die("Please make sure that the directory $sqlite_dir is writable by Web server process.");
+if(!is_writable($sqlite_db))
+ die("Please make sure that the sqlite database file $sqlite_db is writable by Web server process.");
+
+require_once($frameworkPath);
+
+$application=new TApplication;
+$application->run();
+
?> \ No newline at end of file
diff --git a/demos/northwind-db/protected/database/Category.php b/demos/northwind-db/protected/database/Category.php
index 06fc979f..d708ee96 100644
--- a/demos/northwind-db/protected/database/Category.php
+++ b/demos/northwind-db/protected/database/Category.php
@@ -1,26 +1,26 @@
-<?php
-/**
- * Auto generated by prado-cli.php on 2007-05-01 05:24:53.
- */
-class Category extends TActiveRecord
-{
- const TABLE='Categories';
-
- public $CategoryID;
- public $CategoryName;
- public $Description;
- public $Picture;
-
- public $Products=array();
-
- public static $RELATIONS=array
- (
- 'Products' => array(self::HAS_MANY, 'Product'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+/**
+ * Auto generated by prado-cli.php on 2007-05-01 05:24:53.
+ */
+class Category extends TActiveRecord
+{
+ const TABLE='Categories';
+
+ public $CategoryID;
+ public $CategoryName;
+ public $Description;
+ public $Picture;
+
+ public $Products=array();
+
+ public static $RELATIONS=array
+ (
+ 'Products' => array(self::HAS_MANY, 'Product'),
+ );
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/northwind-db/protected/database/Customer.php b/demos/northwind-db/protected/database/Customer.php
index 810f2a6a..464b384d 100644
--- a/demos/northwind-db/protected/database/Customer.php
+++ b/demos/northwind-db/protected/database/Customer.php
@@ -1,33 +1,33 @@
-<?php
-/**
- * Auto generated by prado-cli.php on 2007-05-01 05:28:47.
- */
-class Customer extends TActiveRecord
-{
- const TABLE='Customers';
-
- public $CustomerID;
- public $CompanyName;
- public $ContactName;
- public $ContactTitle;
- public $Address;
- public $City;
- public $Region;
- public $PostalCode;
- public $Country;
- public $Phone;
- public $Fax;
-
- public $Orders=array();
-
- public static $RELATIONS = array
- (
- 'Orders' => array(self::HAS_MANY, 'Order'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+/**
+ * Auto generated by prado-cli.php on 2007-05-01 05:28:47.
+ */
+class Customer extends TActiveRecord
+{
+ const TABLE='Customers';
+
+ public $CustomerID;
+ public $CompanyName;
+ public $ContactName;
+ public $ContactTitle;
+ public $Address;
+ public $City;
+ public $Region;
+ public $PostalCode;
+ public $Country;
+ public $Phone;
+ public $Fax;
+
+ public $Orders=array();
+
+ public static $RELATIONS = array
+ (
+ 'Orders' => array(self::HAS_MANY, 'Order'),
+ );
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/northwind-db/protected/database/Employee.php b/demos/northwind-db/protected/database/Employee.php
index 1e0f090e..573b887d 100644
--- a/demos/northwind-db/protected/database/Employee.php
+++ b/demos/northwind-db/protected/database/Employee.php
@@ -1,48 +1,48 @@
-<?php
-/**
- * Auto generated by prado-cli.php on 2007-05-01 05:29:32.
- */
-class Employee extends TActiveRecord
-{
- const TABLE='Employees';
-
- public $EmployeeID;
- public $LastName;
- public $FirstName;
- public $Title;
- public $TitleOfCourtesy;
- public $BirthDate;
- public $HireDate;
- public $Address;
- public $City;
- public $Region;
- public $PostalCode;
- public $Country;
- public $HomePhone;
- public $Extension;
- public $Photo;
- public $Notes;
- public $ReportsTo;
- public $PhotoPath;
-
- public $Territories=array();
- public $Orders=array();
- public $Subordinates=array();
- public $Superior;
-
- public static $RELATIONS = array
- (
- 'Territories' => array(self::MANY_TO_MANY, 'Territory', 'EmployeeTerritories'),
- 'Orders' => array(self::HAS_MANY, 'Order'),
-
- //parent children relationship
- 'Subordinates' => array(self::HAS_MANY, 'Employee'),
- 'Superior' => array(self::BELONGS_TO, 'Employee')
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+/**
+ * Auto generated by prado-cli.php on 2007-05-01 05:29:32.
+ */
+class Employee extends TActiveRecord
+{
+ const TABLE='Employees';
+
+ public $EmployeeID;
+ public $LastName;
+ public $FirstName;
+ public $Title;
+ public $TitleOfCourtesy;
+ public $BirthDate;
+ public $HireDate;
+ public $Address;
+ public $City;
+ public $Region;
+ public $PostalCode;
+ public $Country;
+ public $HomePhone;
+ public $Extension;
+ public $Photo;
+ public $Notes;
+ public $ReportsTo;
+ public $PhotoPath;
+
+ public $Territories=array();
+ public $Orders=array();
+ public $Subordinates=array();
+ public $Superior;
+
+ public static $RELATIONS = array
+ (
+ 'Territories' => array(self::MANY_TO_MANY, 'Territory', 'EmployeeTerritories'),
+ 'Orders' => array(self::HAS_MANY, 'Order'),
+
+ //parent children relationship
+ 'Subordinates' => array(self::HAS_MANY, 'Employee'),
+ 'Superior' => array(self::BELONGS_TO, 'Employee')
+ );
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/northwind-db/protected/database/Order.php b/demos/northwind-db/protected/database/Order.php
index 228fb2b5..2a425102 100644
--- a/demos/northwind-db/protected/database/Order.php
+++ b/demos/northwind-db/protected/database/Order.php
@@ -1,42 +1,42 @@
-<?php
-/**
- * Auto generated by prado-cli.php on 2007-05-01 05:29:47.
- */
-class Order extends TActiveRecord
-{
- const TABLE='Orders';
-
- public $OrderID;
- public $CustomerID;
- public $EmployeeID;
- public $OrderDate;
- public $RequiredDate;
- public $ShippedDate;
- public $ShipVia;
- public $Freight;
- public $ShipName;
- public $ShipAddress;
- public $ShipCity;
- public $ShipRegion;
- public $ShipPostalCode;
- public $ShipCountry;
-
- public $OrderDetails=array();
- public $Customer;
- public $Shipper;
- public $Employee;
-
- public static $RELATIONS = array
- (
- 'OrderDetails' => array(self::HAS_MANY, 'OrderDetail'),
- 'Customer' => array(self::BELONGS_TO, 'Customer'),
- 'Shipper' => array(self::BELONGS_TO, 'Shipper'),
- 'Employee' => array(self::BELONGS_TO, 'Employee'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+/**
+ * Auto generated by prado-cli.php on 2007-05-01 05:29:47.
+ */
+class Order extends TActiveRecord
+{
+ const TABLE='Orders';
+
+ public $OrderID;
+ public $CustomerID;
+ public $EmployeeID;
+ public $OrderDate;
+ public $RequiredDate;
+ public $ShippedDate;
+ public $ShipVia;
+ public $Freight;
+ public $ShipName;
+ public $ShipAddress;
+ public $ShipCity;
+ public $ShipRegion;
+ public $ShipPostalCode;
+ public $ShipCountry;
+
+ public $OrderDetails=array();
+ public $Customer;
+ public $Shipper;
+ public $Employee;
+
+ public static $RELATIONS = array
+ (
+ 'OrderDetails' => array(self::HAS_MANY, 'OrderDetail'),
+ 'Customer' => array(self::BELONGS_TO, 'Customer'),
+ 'Shipper' => array(self::BELONGS_TO, 'Shipper'),
+ 'Employee' => array(self::BELONGS_TO, 'Employee'),
+ );
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/northwind-db/protected/database/OrderDetail.php b/demos/northwind-db/protected/database/OrderDetail.php
index 1732b0d9..47f77351 100644
--- a/demos/northwind-db/protected/database/OrderDetail.php
+++ b/demos/northwind-db/protected/database/OrderDetail.php
@@ -1,27 +1,27 @@
-<?php
-
-class OrderDetail extends TActiveRecord
-{
- const TABLE='Order Details';
-
- public $OrderID;
- public $ProductID;
- public $UnitPrice;
- public $Quantity;
- public $Discount;
-
- public $Product;
- public $Order;
-
- public static $RELATIONS = array
- (
- 'Product' => array(self::BELONGS_TO, 'Product'),
- 'Order' => array(self::BELONGS_TO, 'Order'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+
+class OrderDetail extends TActiveRecord
+{
+ const TABLE='Order Details';
+
+ public $OrderID;
+ public $ProductID;
+ public $UnitPrice;
+ public $Quantity;
+ public $Discount;
+
+ public $Product;
+ public $Order;
+
+ public static $RELATIONS = array
+ (
+ 'Product' => array(self::BELONGS_TO, 'Product'),
+ 'Order' => array(self::BELONGS_TO, 'Order'),
+ );
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/northwind-db/protected/database/Product.php b/demos/northwind-db/protected/database/Product.php
index 93736ab8..088fbbd2 100644
--- a/demos/northwind-db/protected/database/Product.php
+++ b/demos/northwind-db/protected/database/Product.php
@@ -1,36 +1,36 @@
-<?php
-/**
- * Auto generated by prado-cli.php on 2007-05-01 05:31:51.
- */
-class Product extends TActiveRecord
-{
- const TABLE='Products';
-
- public $ProductID;
- public $ProductName;
- public $SupplierID;
- public $CategoryID;
- public $QuantityPerUnit;
- public $UnitPrice;
- public $UnitsInStock;
- public $UnitsOnOrder;
- public $ReorderLevel;
- public $Discontinued;
-
- public $Supplier;
- public $Category;
- public $OrderDetails=array();
-
- public static $RELATIONS = array
- (
- 'Supplier' => array(self::BELONGS_TO, 'Supplier'),
- 'Category' => array(self::BELONGS_TO, 'Category'),
- 'OrderDetails' => array(self::HAS_MANY, 'OrderDetail'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+/**
+ * Auto generated by prado-cli.php on 2007-05-01 05:31:51.
+ */
+class Product extends TActiveRecord
+{
+ const TABLE='Products';
+
+ public $ProductID;
+ public $ProductName;
+ public $SupplierID;
+ public $CategoryID;
+ public $QuantityPerUnit;
+ public $UnitPrice;
+ public $UnitsInStock;
+ public $UnitsOnOrder;
+ public $ReorderLevel;
+ public $Discontinued;
+
+ public $Supplier;
+ public $Category;
+ public $OrderDetails=array();
+
+ public static $RELATIONS = array
+ (
+ 'Supplier' => array(self::BELONGS_TO, 'Supplier'),
+ 'Category' => array(self::BELONGS_TO, 'Category'),
+ 'OrderDetails' => array(self::HAS_MANY, 'OrderDetail'),
+ );
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/northwind-db/protected/database/Region.php b/demos/northwind-db/protected/database/Region.php
index 3d1c2a84..6473e682 100644
--- a/demos/northwind-db/protected/database/Region.php
+++ b/demos/northwind-db/protected/database/Region.php
@@ -1,25 +1,25 @@
-<?php
-/**
- * Auto generated by prado-cli.php on 2007-05-01 05:32:34.
- */
-class Region extends TActiveRecord
-{
- const TABLE='Region';
-
- public $RegionID;
- public $RegionDescription;
-
- //comment out the following line to use lazy loading
- //public $Territories=array();
-
- public static $RELATIONS = array
- (
- 'Territories' => array(self::HAS_MANY, 'Territory')
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+/**
+ * Auto generated by prado-cli.php on 2007-05-01 05:32:34.
+ */
+class Region extends TActiveRecord
+{
+ const TABLE='Region';
+
+ public $RegionID;
+ public $RegionDescription;
+
+ //comment out the following line to use lazy loading
+ //public $Territories=array();
+
+ public static $RELATIONS = array
+ (
+ 'Territories' => array(self::HAS_MANY, 'Territory')
+ );
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/northwind-db/protected/database/Shipper.php b/demos/northwind-db/protected/database/Shipper.php
index a3f0aeb3..f90548ea 100644
--- a/demos/northwind-db/protected/database/Shipper.php
+++ b/demos/northwind-db/protected/database/Shipper.php
@@ -1,25 +1,25 @@
-<?php
-/**
- * Auto generated by prado-cli.php on 2007-05-01 05:32:57.
- */
-class Shipper extends TActiveRecord
-{
- const TABLE='Shippers';
-
- public $ShipperID;
- public $CompanyName;
- public $Phone;
-
- public $Orders = array();
-
- public static $RELATIONS = array
- (
- 'Orders' => array(self::HAS_MANY, 'Order'),
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+/**
+ * Auto generated by prado-cli.php on 2007-05-01 05:32:57.
+ */
+class Shipper extends TActiveRecord
+{
+ const TABLE='Shippers';
+
+ public $ShipperID;
+ public $CompanyName;
+ public $Phone;
+
+ public $Orders = array();
+
+ public static $RELATIONS = array
+ (
+ 'Orders' => array(self::HAS_MANY, 'Order'),
+ );
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/northwind-db/protected/database/Supplier.php b/demos/northwind-db/protected/database/Supplier.php
index 7cabdde5..bc3b44e0 100644
--- a/demos/northwind-db/protected/database/Supplier.php
+++ b/demos/northwind-db/protected/database/Supplier.php
@@ -1,34 +1,34 @@
-<?php
-/**
- * Auto generated by prado-cli.php on 2007-05-01 05:33:08.
- */
-class Supplier extends TActiveRecord
-{
- const TABLE='Suppliers';
-
- public $SupplierID;
- public $CompanyName;
- public $ContactName;
- public $ContactTitle;
- public $Address;
- public $City;
- public $Region;
- public $PostalCode;
- public $Country;
- public $Phone;
- public $Fax;
- public $HomePage;
-
- public $Products=array();
-
- public static $RELATIONS=array
- (
- 'Products' => array(self::HAS_MANY, 'Product')
- );
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+/**
+ * Auto generated by prado-cli.php on 2007-05-01 05:33:08.
+ */
+class Supplier extends TActiveRecord
+{
+ const TABLE='Suppliers';
+
+ public $SupplierID;
+ public $CompanyName;
+ public $ContactName;
+ public $ContactTitle;
+ public $Address;
+ public $City;
+ public $Region;
+ public $PostalCode;
+ public $Country;
+ public $Phone;
+ public $Fax;
+ public $HomePage;
+
+ public $Products=array();
+
+ public static $RELATIONS=array
+ (
+ 'Products' => array(self::HAS_MANY, 'Product')
+ );
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/northwind-db/protected/database/Territory.php b/demos/northwind-db/protected/database/Territory.php
index 16f33dea..96006bb1 100644
--- a/demos/northwind-db/protected/database/Territory.php
+++ b/demos/northwind-db/protected/database/Territory.php
@@ -1,60 +1,60 @@
-<?php
-/**
- * Auto generated by prado-cli.php on 2007-05-01 05:33:28.
- */
-class Territory extends TActiveRecord
-{
- const TABLE='Territories';
-
- public $TerritoryID;
- public $TerritoryDescription;
- public $RegionID;
-
- private $_region;
- private $_employees;
-
- public static $RELATIONS = array
- (
- 'Region' => array(self::BELONGS_TO, 'Region'),
- 'Employees' => array(self::HAS_MANY, 'Employee', 'EmployeeTerritories')
- );
-
- /**
- * @return Region
- */
- public function getRegion()
- {
- //lazy load the region
- if($this->_region===null)
- $this->_region = Region::finder()->findByPk($this->RegionID);
- return $this->_region;
- }
-
- public function setRegion($value)
- {
- $this->_region=$value;
- }
-
- /**
- * @return Employee[]
- */
- public function getEmployees()
- {
- //lazy load
- if($this->_employees==null)
- $this->setEmployees($this->withEmployees()->findByPk($this->TerritoryID)->getEmployees());
- return $this->_employees;
- }
-
- public function setEmployees($value)
- {
- //ensure TList
- $this->_employees = $value instanceof TList ? $value : new TList($value);
- }
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
+<?php
+/**
+ * Auto generated by prado-cli.php on 2007-05-01 05:33:28.
+ */
+class Territory extends TActiveRecord
+{
+ const TABLE='Territories';
+
+ public $TerritoryID;
+ public $TerritoryDescription;
+ public $RegionID;
+
+ private $_region;
+ private $_employees;
+
+ public static $RELATIONS = array
+ (
+ 'Region' => array(self::BELONGS_TO, 'Region'),
+ 'Employees' => array(self::HAS_MANY, 'Employee', 'EmployeeTerritories')
+ );
+
+ /**
+ * @return Region
+ */
+ public function getRegion()
+ {
+ //lazy load the region
+ if($this->_region===null)
+ $this->_region = Region::finder()->findByPk($this->RegionID);
+ return $this->_region;
+ }
+
+ public function setRegion($value)
+ {
+ $this->_region=$value;
+ }
+
+ /**
+ * @return Employee[]
+ */
+ public function getEmployees()
+ {
+ //lazy load
+ if($this->_employees==null)
+ $this->setEmployees($this->withEmployees()->findByPk($this->TerritoryID)->getEmployees());
+ return $this->_employees;
+ }
+
+ public function setEmployees($value)
+ {
+ //ensure TList
+ $this->_employees = $value instanceof TList ? $value : new TList($value);
+ }
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/northwind-db/protected/pages/NorthwindCrud.php b/demos/northwind-db/protected/pages/NorthwindCrud.php
index 57694caa..72297ac8 100644
--- a/demos/northwind-db/protected/pages/NorthwindCrud.php
+++ b/demos/northwind-db/protected/pages/NorthwindCrud.php
@@ -1,28 +1,28 @@
-<?php
-
-class NorthwindCrud extends TPage
-{
- function onInit($param)
- {
- $classes = $this->getRecordClassList(Prado::getPathOfNamespace('Application.database.*'));
- $this->class_list->dataSource = $classes;
- $this->class_list->dataBind();
- }
-
- protected function getRecordClassList($directory)
- {
- $list=array();
- $folder=@opendir($directory);
- while($entry=@readdir($folder))
- {
- if($entry[0]==='.')
- continue;
- else if(is_file($directory.'/'.$entry) && strpos($entry,'.php'))
- $list[] = str_replace('.php', '', $entry);
- }
- closedir($folder);
- return $list;
- }
-}
-
+<?php
+
+class NorthwindCrud extends TPage
+{
+ function onInit($param)
+ {
+ $classes = $this->getRecordClassList(Prado::getPathOfNamespace('Application.database.*'));
+ $this->class_list->dataSource = $classes;
+ $this->class_list->dataBind();
+ }
+
+ protected function getRecordClassList($directory)
+ {
+ $list=array();
+ $folder=@opendir($directory);
+ while($entry=@readdir($folder))
+ {
+ if($entry[0]==='.')
+ continue;
+ else if(is_file($directory.'/'.$entry) && strpos($entry,'.php'))
+ $list[] = str_replace('.php', '', $entry);
+ }
+ closedir($folder);
+ return $list;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/personal/index.php b/demos/personal/index.php
index 04695b16..1722244d 100644
--- a/demos/personal/index.php
+++ b/demos/personal/index.php
@@ -1,15 +1,15 @@
-<?php
-
-$basePath=dirname(__FILE__);
-$frameworkPath=$basePath.'/../../framework/prado.php';
-$assetsPath=$basePath.'/assets';
-
-if(!is_writable($assetsPath))
- die("Please make sure that the directory $assetsPath is writable by Web server process.");
-
-require_once($frameworkPath);
-
-$application=new TApplication;
-$application->run();
-
+<?php
+
+$basePath=dirname(__FILE__);
+$frameworkPath=$basePath.'/../../framework/prado.php';
+$assetsPath=$basePath.'/assets';
+
+if(!is_writable($assetsPath))
+ die("Please make sure that the directory $assetsPath is writable by Web server process.");
+
+require_once($frameworkPath);
+
+$application=new TApplication;
+$application->run();
+
?> \ No newline at end of file
diff --git a/demos/personal/protected/Common/LoginPortlet.php b/demos/personal/protected/Common/LoginPortlet.php
index 1f5cd4f5..1b93912b 100644
--- a/demos/personal/protected/Common/LoginPortlet.php
+++ b/demos/personal/protected/Common/LoginPortlet.php
@@ -1,19 +1,19 @@
-<?php
-
-class LoginPortlet extends TTemplateControl
-{
- public function validateUser($sender,$param)
- {
- $authManager=$this->Application->getModule('auth');
- if(!$authManager->login($this->Username->Text,$this->Password->Text))
- $param->IsValid=false;
- }
-
- public function loginButtonClicked($sender,$param)
- {
- if($this->Page->IsValid)
- $this->Response->redirect($this->Application->getModule('auth')->getReturnUrl());
- }
-}
-
+<?php
+
+class LoginPortlet extends TTemplateControl
+{
+ public function validateUser($sender,$param)
+ {
+ $authManager=$this->Application->getModule('auth');
+ if(!$authManager->login($this->Username->Text,$this->Password->Text))
+ $param->IsValid=false;
+ }
+
+ public function loginButtonClicked($sender,$param)
+ {
+ if($this->Page->IsValid)
+ $this->Response->redirect($this->Application->getModule('auth')->getReturnUrl());
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/personal/protected/Common/MainMenu.php b/demos/personal/protected/Common/MainMenu.php
index a2334c03..5e1e95c0 100644
--- a/demos/personal/protected/Common/MainMenu.php
+++ b/demos/personal/protected/Common/MainMenu.php
@@ -1,12 +1,12 @@
-<?php
-
-class MainMenu extends TTemplateControl
-{
- public function logout($sender,$param)
- {
- $this->Application->getModule('auth')->logout();
- $this->Response->redirect($this->Service->constructUrl('Home'));
- }
-}
-
+<?php
+
+class MainMenu extends TTemplateControl
+{
+ public function logout($sender,$param)
+ {
+ $this->Application->getModule('auth')->logout();
+ $this->Response->redirect($this->Service->constructUrl('Home'));
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/personal/protected/Pages/Layout.php b/demos/personal/protected/Pages/Layout.php
index ba96038b..7f5e5802 100644
--- a/demos/personal/protected/Pages/Layout.php
+++ b/demos/personal/protected/Pages/Layout.php
@@ -1,7 +1,7 @@
-<?php
-
-class Layout extends TTemplateControl
-{
-}
-
+<?php
+
+class Layout extends TTemplateControl
+{
+}
+
?> \ No newline at end of file
diff --git a/demos/personal/protected/Pages/Register.php b/demos/personal/protected/Pages/Register.php
index b699d859..26f9aa50 100644
--- a/demos/personal/protected/Pages/Register.php
+++ b/demos/personal/protected/Pages/Register.php
@@ -1,19 +1,19 @@
-<?php
-
-class Register extends TPage
-{
- public function checkUsername($sender,$param)
- {
- // set $param->IsValid to false if the username is already taken
- }
-
- public function createUser($sender,$param)
- {
- if($this->IsValid)
- {
- // create new user account
- }
- }
-}
-
+<?php
+
+class Register extends TPage
+{
+ public function checkUsername($sender,$param)
+ {
+ // set $param->IsValid to false if the username is already taken
+ }
+
+ public function createUser($sender,$param)
+ {
+ if($this->IsValid)
+ {
+ // create new user account
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/index.php b/demos/quickstart/index.php
index 43c0b436..6efff1af 100644
--- a/demos/quickstart/index.php
+++ b/demos/quickstart/index.php
@@ -1,18 +1,18 @@
-<?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();
-
+<?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();
+
?> \ No newline at end of file
diff --git a/demos/quickstart/index2.php b/demos/quickstart/index2.php
index f3d8dd90..30df9480 100644
--- a/demos/quickstart/index2.php
+++ b/demos/quickstart/index2.php
@@ -1,18 +1,18 @@
-<?php
-
-$basePath=dirname(__FILE__);
-$frameworkPath=$basePath.'/../../framework/pradolite.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();
-
+<?php
+
+$basePath=dirname(__FILE__);
+$frameworkPath=$basePath.'/../../framework/pradolite.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();
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/QuickStartGlobalization.php b/demos/quickstart/protected/QuickStartGlobalization.php
index 6a0b0fb2..8fc42e8d 100644
--- a/demos/quickstart/protected/QuickStartGlobalization.php
+++ b/demos/quickstart/protected/QuickStartGlobalization.php
@@ -1,31 +1,31 @@
-<?php
-
-class QuickStartGlobalization extends TGlobalizationAutoDetect
-{
- public function init($xml)
- {
- parent::init($xml);
- $this->Application->OnBeginRequest[] = array($this, 'beginRequest');
- }
-
- public function beginRequest($sender, $param)
- {
- if(null == ($culture=$this->Request['lang']))
- {
- if(null !== ($cookie=$this->Request->Cookies['lang']))
- $culture = $cookie->getValue();
- }
-
- if(is_string($culture))
- {
- $info = new CultureInfo();
- if($info->validCulture($culture))
- {
- $this->setCulture($culture);
- $this->Response->Cookies[] = new THttpCookie('lang',$culture);
- }
- }
- }
-}
-
+<?php
+
+class QuickStartGlobalization extends TGlobalizationAutoDetect
+{
+ public function init($xml)
+ {
+ parent::init($xml);
+ $this->Application->OnBeginRequest[] = array($this, 'beginRequest');
+ }
+
+ public function beginRequest($sender, $param)
+ {
+ if(null == ($culture=$this->Request['lang']))
+ {
+ if(null !== ($cookie=$this->Request->Cookies['lang']))
+ $culture = $cookie->getValue();
+ }
+
+ if(is_string($culture))
+ {
+ $info = new CultureInfo();
+ if($info->validCulture($culture))
+ {
+ $this->setCulture($culture);
+ $this->Response->Cookies[] = new THttpCookie('lang',$culture);
+ }
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/Comments/CommentBlock.php b/demos/quickstart/protected/controls/Comments/CommentBlock.php
index 9c008491..ebb82a0f 100644
--- a/demos/quickstart/protected/controls/Comments/CommentBlock.php
+++ b/demos/quickstart/protected/controls/Comments/CommentBlock.php
@@ -1,107 +1,107 @@
-<?php
-
-Prado::using('System.Data.*');
-Prado::using('System.Web.UI.ActiveControls.*');
-Prado::using('System.Data.ActiveRecord.TActiveRecordManager');
-
-$db = new TDbConnection('mysql:host=localhost;dbname=xxxx', 'yyyy', 'zzzz');
-$manager = TActiveRecordManager::getInstance();
-$manager->setDbConnection($db);
-
-class CommentRecord extends TActiveRecord
-{
- const TABLE='qs_comments';
-
- public $id;
- public $username;
- public $date_added;
- public $page;
- public $block_id;
- public $content;
-
- public static function finder($className=__CLASS__)
- {
- return parent::finder($className);
- }
-}
-
-class CommentBlock extends TTemplateControl
-{
- private $_page;
-
- function onLoad($param)
- {
- if(!$this->Page->IsCallBack)
- {
- $count = array();
- $data = $this->getCommentData();
- foreach($data as $r)
- {
- if(!isset($count[$r->block_id]))
- $count[$r->block_id]=0;
- $count[$r->block_id]++;
- }
- $js = "var comment_count = ".TJavascript::encode($count).";\n";
- $this->Page->ClientScript->registerBeginScript('count',$js);
- $this->comments->dataSource = $data;
- $this->comments->dataBind();
- }
- }
-
- function getCommentData()
- {
- return CommentRecord::finder()->findAllByPage($this->getCurrentPagePath());
- }
-
- function add_comment($sender, $param)
- {
- if(!$this->Page->IsValid)
- return;
- $record = new CommentRecord;
- $record->username = $this->username->Text;
- $record->date_added = date('Y-m-d h:i:s');
- $record->page = $this->getCurrentPagePath();
- $record->block_id = $this->block_id->Value;
- $record->content = $this->content->Text;
- $record->save();
-
- $this->content->Text = '';
- $this->password->Text = '';
- $cc = $this->Page->CallbackClient;
- $cc->appendContent('comment-list', $this->format_message($record));
- $cc->callClientFunction('hide_add_comment');
- $cc->callClientFunction('increment_count_tag', $record->block_id);
- if(!$this->Page->IsCallBack)
- {
- $this->comments->dataSource = $this->getCommentData();
- $this->comments->dataBind();
- }
- }
-
- protected function getCurrentPagePath()
- {
- if(is_null($this->_page))
- {
- $page = str_replace($this->Service->BasePath, '', $this->Page->Template->TemplateFile);
- $this->_page = str_replace('\\', '/', $page);
- }
- return $this->_page;
- }
-
- function validate_credential($sender, $param)
- {
- $param->IsValid = $this->password->Text == 'Prado';
- }
-
- protected function format_message($record)
- {
- $username=htmlspecialchars($record->username);
- $content=nl2br(htmlspecialchars($record->content));
- return <<<EOD
- <div class="comment c-{$record->block_id}">
- <span><strong>{$username}</strong> on {$record->date_added}.</span>
- <div>{$content}</div>
- </div>
-EOD;
- }
+<?php
+
+Prado::using('System.Data.*');
+Prado::using('System.Web.UI.ActiveControls.*');
+Prado::using('System.Data.ActiveRecord.TActiveRecordManager');
+
+$db = new TDbConnection('mysql:host=localhost;dbname=xxxx', 'yyyy', 'zzzz');
+$manager = TActiveRecordManager::getInstance();
+$manager->setDbConnection($db);
+
+class CommentRecord extends TActiveRecord
+{
+ const TABLE='qs_comments';
+
+ public $id;
+ public $username;
+ public $date_added;
+ public $page;
+ public $block_id;
+ public $content;
+
+ public static function finder($className=__CLASS__)
+ {
+ return parent::finder($className);
+ }
+}
+
+class CommentBlock extends TTemplateControl
+{
+ private $_page;
+
+ function onLoad($param)
+ {
+ if(!$this->Page->IsCallBack)
+ {
+ $count = array();
+ $data = $this->getCommentData();
+ foreach($data as $r)
+ {
+ if(!isset($count[$r->block_id]))
+ $count[$r->block_id]=0;
+ $count[$r->block_id]++;
+ }
+ $js = "var comment_count = ".TJavascript::encode($count).";\n";
+ $this->Page->ClientScript->registerBeginScript('count',$js);
+ $this->comments->dataSource = $data;
+ $this->comments->dataBind();
+ }
+ }
+
+ function getCommentData()
+ {
+ return CommentRecord::finder()->findAllByPage($this->getCurrentPagePath());
+ }
+
+ function add_comment($sender, $param)
+ {
+ if(!$this->Page->IsValid)
+ return;
+ $record = new CommentRecord;
+ $record->username = $this->username->Text;
+ $record->date_added = date('Y-m-d h:i:s');
+ $record->page = $this->getCurrentPagePath();
+ $record->block_id = $this->block_id->Value;
+ $record->content = $this->content->Text;
+ $record->save();
+
+ $this->content->Text = '';
+ $this->password->Text = '';
+ $cc = $this->Page->CallbackClient;
+ $cc->appendContent('comment-list', $this->format_message($record));
+ $cc->callClientFunction('hide_add_comment');
+ $cc->callClientFunction('increment_count_tag', $record->block_id);
+ if(!$this->Page->IsCallBack)
+ {
+ $this->comments->dataSource = $this->getCommentData();
+ $this->comments->dataBind();
+ }
+ }
+
+ protected function getCurrentPagePath()
+ {
+ if(is_null($this->_page))
+ {
+ $page = str_replace($this->Service->BasePath, '', $this->Page->Template->TemplateFile);
+ $this->_page = str_replace('\\', '/', $page);
+ }
+ return $this->_page;
+ }
+
+ function validate_credential($sender, $param)
+ {
+ $param->IsValid = $this->password->Text == 'Prado';
+ }
+
+ protected function format_message($record)
+ {
+ $username=htmlspecialchars($record->username);
+ $content=nl2br(htmlspecialchars($record->content));
+ return <<<EOD
+ <div class="comment c-{$record->block_id}">
+ <span><strong>{$username}</strong> on {$record->date_added}.</span>
+ <div>{$content}</div>
+ </div>
+EOD;
+ }
} \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/Comments/comments.js b/demos/quickstart/protected/controls/Comments/comments.js
index ca3f54fb..44464689 100644
--- a/demos/quickstart/protected/controls/Comments/comments.js
+++ b/demos/quickstart/protected/controls/Comments/comments.js
@@ -1,207 +1,207 @@
-var currentCommentID;
-
-function show_comment_list()
-{
- $('comment-list').show();
- $('add-comment').hide();
- $('show-comment-link').addClassName("active");
- $('add-comment-link').removeClassName("active");
- $('all-comments-link').removeClassName("active");
- show_comments_in_list(currentCommentID);
-}
-
-function show_all_comments()
-{
- $('comment-list').show();
- $('add-comment').hide();
- $('show-comment-link').removeClassName("active");
- $('add-comment-link').removeClassName("active");
- $('all-comments-link').addClassName("active");
- show_comments_in_list();
-}
-
-
-function show_add_comment()
-{
- $('comment-list').hide();
- $('add-comment').show();
- $('show-comment-link').removeClassName("active");
- $('add-comment-link').addClassName("active");
- $('all-comments-link').removeClassName("active");
-}
-
-function hide_add_comment()
-{
- $('user-comments').hide();
- $('modal-background').hide();
- $(content_textare_id).value = '';
- $(currentCommentID).style.zIndex = 0;
-}
-
-function show_comments_in_list(id)
-{
- var list = $('comment-list');
- var count=0;
- for(var i=0, k=list.childNodes.length; i < k; i++)
- {
- var node = list.childNodes[i];
- if(node.nodeType == 1) //an element node
- {
- if(typeof(id) == "undefined" || node.className.indexOf(id) >= 0)
- {
- node.style.display="block"
- count++;
- }
- else
- node.style.display="none";
- }
- }
- return count;
-}
-
-function show_comments(block)
-{
- var id = block.id
- currentCommentID = id;
- $(hidden_block_id).value = id;
- var commentBlock = $('user-comments');
- var pos = Position.cumulativeOffset(block);
- var top = pos[1] + block.offsetHeight;
- commentBlock.style.top = top+"px";
- commentBlock.style.width = (block.offsetWidth-22)+"px";
-
- commentBlock.show();
-
- var count = show_comments_in_list(id);
-
- $('comment-list').show();
- if(count > 0)
- show_comment_list();
- else
- show_add_comment();
-
- var background = $('modal-background');
- background.style.top="0px";
- background.style.left="0px";
- background.style.opacity="0.5";
- background.style.width = document.body.offsetWidth+"px";
- background.style.height = document.body.offsetHeight+"px";
- background.show();
- block.style.zIndex = 100;
- block.style.paddingRight="9px";
- block.style.marginRight="-9px";
-
-}
-
-function show_block(block)
-{
- while(block && (!block.className || block.className.indexOf("block-content") < 0))
- block = block.parentNode;
- if(block && block.className.indexOf("block-content") >= 0)
- {
- block.addClassName('block-hover');
- var tag = $('tag-'+block.id);
-// if(tag.className.indexOf("tag-shown")<=0)
- tag.firstChild.style.visibility="visible"
- }
-}
-
-function hide_block(block)
-{
- while(block && (!block.className || block.className.indexOf("block-content") < 0))
- block = block.parentNode;
- if(block && block.className.indexOf("block-hover") >= 0)
- {
- block.removeClassName('block-hover');
- var tag = $('tag-'+block.id);
- if(tag.className.indexOf("tag-shown")<=0)
- tag.firstChild.style.visibility="hidden"
- }
-}
-
-function add_comment_tag(el)
-{
- var dim = Element.getDimensions(el);
- var comments = get_comment_count(el.id);
- var style = "height:"+(dim.height > 35 ? dim.height : 35)+"px;";
- var cssClass = dim.height ? "block-comment-tag" : "block-comment-tag-ie";
- var title = "View "+comments+" comments"
- var innerStyle="";
- if(comments <= 0)
- {
- innerStyle = " visibility:hidden;";
- comments = "add";
- title = "Add new comment";
- }
- else
- cssClass += " tag-shown";
- var id = "tag-"+el.id;
- var tag = "<div id='"+id+"' class='"+cssClass+"' style='"+style+"'><div style='"+innerStyle+"' title='"+title+"'>"+comments+"</div>&nbsp;</div>";
- new Insertion.Before(el, tag);
- var tag_div = $(id);
- Event.observe(tag_div, "mouseover", function(e){ if(typeof(show_block)!="undefined") show_block(el); });
- Event.observe(tag_div, "mouseout", function(e){ if(typeof(hide_block) !="undefined") hide_block(el); });
- Event.observe(tag_div, "click", function(e) { if(typeof(show_comments) !="undefined") show_comments(el); Event.stop(e); });
-}
-
-function increment_count_tag(id)
-{
- var tag = $('tag-'+id);
- if(tag && tag.firstChild)
- {
- if(tag.className.indexOf("tag-shown") >= 0)
- {
- var count = Number(tag.firstChild.innerHTML);
- tag.firstChild.innerHTML = (++count)+"";
- tag.firstChild.style.visibility="visible";
- }
- else
- {
- tag.firstChild.innerHTML = "1";
- tag.addClassName("tag-shown");
- tag.firstChild.style.visibility="visible";
- }
- }
-}
-
-function get_comment_count(id)
-{
- return comment_count[id] ? comment_count[id] : 0;
-}
-
-//initialize the comment js
-
-if(!Prado.Browser.ie) //not IE 4,5,6
-{
- (function()
- {
- var userComments = $('user-comments');
- userComments.style.position="absolute";
- userComments.style.marginRight="80px";
- var commentList = $('comment-list');
- commentList.style.height="320px";
- $('add-comment').style.height="320px";
- commentList.style.overflow="auto";
- $('show-comment-link').style.display="";
- $('to-top').hide();
- $('close-comments').show();
- $('all-comments-link').show();
- userComments.hide();
- $('comments-header').hide();
-
- $$('#comment-list .source-link').each(function(el){ el.hide(); });
-
- $$('#content .block-content').each(function(el)
- {
- Event.observe(el, 'mouseover', function(e){ if(typeof(show_block)!="undefined") show_block(Event.element(e)); });
- Event.observe(el, 'mouseout', function(e){ if(typeof(hide_block)!="undefined") hide_block(Event.element(e)); });
- add_comment_tag(el);
- });
-
- Event.observe($('show-comment-link'), "click", function(e) { show_comment_list(); Event.stop(e); });
- Event.observe($('add-comment-link'), "click", function(e) { show_add_comment(); Event.stop(e); });
- Event.observe($('all-comments-link'), "click", function(e) { show_all_comments(); Event.stop(e); });
- Event.observe($('close-comments'), "click", function(e) { hide_add_comment(); Event.stop(e); });
-
- })();
+var currentCommentID;
+
+function show_comment_list()
+{
+ $('comment-list').show();
+ $('add-comment').hide();
+ $('show-comment-link').addClassName("active");
+ $('add-comment-link').removeClassName("active");
+ $('all-comments-link').removeClassName("active");
+ show_comments_in_list(currentCommentID);
+}
+
+function show_all_comments()
+{
+ $('comment-list').show();
+ $('add-comment').hide();
+ $('show-comment-link').removeClassName("active");
+ $('add-comment-link').removeClassName("active");
+ $('all-comments-link').addClassName("active");
+ show_comments_in_list();
+}
+
+
+function show_add_comment()
+{
+ $('comment-list').hide();
+ $('add-comment').show();
+ $('show-comment-link').removeClassName("active");
+ $('add-comment-link').addClassName("active");
+ $('all-comments-link').removeClassName("active");
+}
+
+function hide_add_comment()
+{
+ $('user-comments').hide();
+ $('modal-background').hide();
+ $(content_textare_id).value = '';
+ $(currentCommentID).style.zIndex = 0;
+}
+
+function show_comments_in_list(id)
+{
+ var list = $('comment-list');
+ var count=0;
+ for(var i=0, k=list.childNodes.length; i < k; i++)
+ {
+ var node = list.childNodes[i];
+ if(node.nodeType == 1) //an element node
+ {
+ if(typeof(id) == "undefined" || node.className.indexOf(id) >= 0)
+ {
+ node.style.display="block"
+ count++;
+ }
+ else
+ node.style.display="none";
+ }
+ }
+ return count;
+}
+
+function show_comments(block)
+{
+ var id = block.id
+ currentCommentID = id;
+ $(hidden_block_id).value = id;
+ var commentBlock = $('user-comments');
+ var pos = Position.cumulativeOffset(block);
+ var top = pos[1] + block.offsetHeight;
+ commentBlock.style.top = top+"px";
+ commentBlock.style.width = (block.offsetWidth-22)+"px";
+
+ commentBlock.show();
+
+ var count = show_comments_in_list(id);
+
+ $('comment-list').show();
+ if(count > 0)
+ show_comment_list();
+ else
+ show_add_comment();
+
+ var background = $('modal-background');
+ background.style.top="0px";
+ background.style.left="0px";
+ background.style.opacity="0.5";
+ background.style.width = document.body.offsetWidth+"px";
+ background.style.height = document.body.offsetHeight+"px";
+ background.show();
+ block.style.zIndex = 100;
+ block.style.paddingRight="9px";
+ block.style.marginRight="-9px";
+
+}
+
+function show_block(block)
+{
+ while(block && (!block.className || block.className.indexOf("block-content") < 0))
+ block = block.parentNode;
+ if(block && block.className.indexOf("block-content") >= 0)
+ {
+ block.addClassName('block-hover');
+ var tag = $('tag-'+block.id);
+// if(tag.className.indexOf("tag-shown")<=0)
+ tag.firstChild.style.visibility="visible"
+ }
+}
+
+function hide_block(block)
+{
+ while(block && (!block.className || block.className.indexOf("block-content") < 0))
+ block = block.parentNode;
+ if(block && block.className.indexOf("block-hover") >= 0)
+ {
+ block.removeClassName('block-hover');
+ var tag = $('tag-'+block.id);
+ if(tag.className.indexOf("tag-shown")<=0)
+ tag.firstChild.style.visibility="hidden"
+ }
+}
+
+function add_comment_tag(el)
+{
+ var dim = Element.getDimensions(el);
+ var comments = get_comment_count(el.id);
+ var style = "height:"+(dim.height > 35 ? dim.height : 35)+"px;";
+ var cssClass = dim.height ? "block-comment-tag" : "block-comment-tag-ie";
+ var title = "View "+comments+" comments"
+ var innerStyle="";
+ if(comments <= 0)
+ {
+ innerStyle = " visibility:hidden;";
+ comments = "add";
+ title = "Add new comment";
+ }
+ else
+ cssClass += " tag-shown";
+ var id = "tag-"+el.id;
+ var tag = "<div id='"+id+"' class='"+cssClass+"' style='"+style+"'><div style='"+innerStyle+"' title='"+title+"'>"+comments+"</div>&nbsp;</div>";
+ new Insertion.Before(el, tag);
+ var tag_div = $(id);
+ Event.observe(tag_div, "mouseover", function(e){ if(typeof(show_block)!="undefined") show_block(el); });
+ Event.observe(tag_div, "mouseout", function(e){ if(typeof(hide_block) !="undefined") hide_block(el); });
+ Event.observe(tag_div, "click", function(e) { if(typeof(show_comments) !="undefined") show_comments(el); Event.stop(e); });
+}
+
+function increment_count_tag(id)
+{
+ var tag = $('tag-'+id);
+ if(tag && tag.firstChild)
+ {
+ if(tag.className.indexOf("tag-shown") >= 0)
+ {
+ var count = Number(tag.firstChild.innerHTML);
+ tag.firstChild.innerHTML = (++count)+"";
+ tag.firstChild.style.visibility="visible";
+ }
+ else
+ {
+ tag.firstChild.innerHTML = "1";
+ tag.addClassName("tag-shown");
+ tag.firstChild.style.visibility="visible";
+ }
+ }
+}
+
+function get_comment_count(id)
+{
+ return comment_count[id] ? comment_count[id] : 0;
+}
+
+//initialize the comment js
+
+if(!Prado.Browser.ie) //not IE 4,5,6
+{
+ (function()
+ {
+ var userComments = $('user-comments');
+ userComments.style.position="absolute";
+ userComments.style.marginRight="80px";
+ var commentList = $('comment-list');
+ commentList.style.height="320px";
+ $('add-comment').style.height="320px";
+ commentList.style.overflow="auto";
+ $('show-comment-link').style.display="";
+ $('to-top').hide();
+ $('close-comments').show();
+ $('all-comments-link').show();
+ userComments.hide();
+ $('comments-header').hide();
+
+ $$('#comment-list .source-link').each(function(el){ el.hide(); });
+
+ $$('#content .block-content').each(function(el)
+ {
+ Event.observe(el, 'mouseover', function(e){ if(typeof(show_block)!="undefined") show_block(Event.element(e)); });
+ Event.observe(el, 'mouseout', function(e){ if(typeof(hide_block)!="undefined") hide_block(Event.element(e)); });
+ add_comment_tag(el);
+ });
+
+ Event.observe($('show-comment-link'), "click", function(e) { show_comment_list(); Event.stop(e); });
+ Event.observe($('add-comment-link'), "click", function(e) { show_add_comment(); Event.stop(e); });
+ Event.observe($('all-comments-link'), "click", function(e) { show_all_comments(); Event.stop(e); });
+ Event.observe($('close-comments'), "click", function(e) { hide_add_comment(); Event.stop(e); });
+
+ })();
} \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/DocLink.php b/demos/quickstart/protected/controls/DocLink.php
index e8ca7dfa..12b8e898 100644
--- a/demos/quickstart/protected/controls/DocLink.php
+++ b/demos/quickstart/protected/controls/DocLink.php
@@ -1,31 +1,31 @@
-<?php
-
-class DocLink extends THyperLink
-{
- const BASE_URL='http://www.pradosoft.com/docs/manual';
-
- public function getClassPath()
- {
- return $this->getViewState('ClassPath','');
- }
-
- public function setClassPath($value)
- {
- $this->setViewState('ClassPath',$value,'');
- }
-
- public function onPreRender($param)
- {
- parent::onPreRender($param);
- $paths=explode('.',$this->getClassPath());
- if(count($paths)>1)
- {
- $classFile=array_pop($paths).'.html';
- $this->setNavigateUrl(self::BASE_URL . '/' . implode('.',$paths) . '/' . $classFile);
- if($this->getText() === '')
- $this->setText('API Manual');
- }
- }
-}
-
+<?php
+
+class DocLink extends THyperLink
+{
+ const BASE_URL='http://www.pradosoft.com/docs/manual';
+
+ public function getClassPath()
+ {
+ return $this->getViewState('ClassPath','');
+ }
+
+ public function setClassPath($value)
+ {
+ $this->setViewState('ClassPath',$value,'');
+ }
+
+ public function onPreRender($param)
+ {
+ parent::onPreRender($param);
+ $paths=explode('.',$this->getClassPath());
+ if(count($paths)>1)
+ {
+ $classFile=array_pop($paths).'.html';
+ $this->setNavigateUrl(self::BASE_URL . '/' . implode('.',$paths) . '/' . $classFile);
+ if($this->getText() === '')
+ $this->setText('API Manual');
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/Layout.php b/demos/quickstart/protected/controls/Layout.php
index 3973db8f..5106a72b 100644
--- a/demos/quickstart/protected/controls/Layout.php
+++ b/demos/quickstart/protected/controls/Layout.php
@@ -1,48 +1,48 @@
-<?php
-
-class Layout extends TTemplateControl
-{
- public function __construct()
- {
- if(isset($this->Request['notheme']))
- $this->Service->RequestedPage->EnableTheming=false;
- parent::__construct();
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- $url=$this->Request->RequestUri;
- if(strpos($url,'?')===false)
- $url.='?notheme=true';
- else
- $url.='&amp;notheme=true';
- $this->PrinterLink->NavigateUrl=$url;
-
- if(isset($this->Request['notheme']))
- {
- $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)
- {
- $item = $param->Item;
- if($item->ItemType == TListItemType::Item || $item->ItemType == TListItemType::AlternatingItem)
- {
- $params = $this->Request->toArray();
- $params['lang'] = $sender->DataKeys[$item->ItemIndex];
- unset($params[$this->Request->ServiceID]);
- $url = $this->Service->ConstructUrl($this->Service->RequestedPagePath, $params);
- $item->link->NavigateUrl = $url;
- if($this->Application->Globalization->Culture == $params['lang'])
- $item->link->CssClass="active";
- }
- }
-}
-
+<?php
+
+class Layout extends TTemplateControl
+{
+ public function __construct()
+ {
+ if(isset($this->Request['notheme']))
+ $this->Service->RequestedPage->EnableTheming=false;
+ parent::__construct();
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ $url=$this->Request->RequestUri;
+ if(strpos($url,'?')===false)
+ $url.='?notheme=true';
+ else
+ $url.='&amp;notheme=true';
+ $this->PrinterLink->NavigateUrl=$url;
+
+ if(isset($this->Request['notheme']))
+ {
+ $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)
+ {
+ $item = $param->Item;
+ if($item->ItemType == TListItemType::Item || $item->ItemType == TListItemType::AlternatingItem)
+ {
+ $params = $this->Request->toArray();
+ $params['lang'] = $sender->DataKeys[$item->ItemIndex];
+ unset($params[$this->Request->ServiceID]);
+ $url = $this->Service->ConstructUrl($this->Service->RequestedPagePath, $params);
+ $item->link->NavigateUrl = $url;
+ if($this->Application->Globalization->Culture == $params['lang'])
+ $item->link->CssClass="active";
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/RequiresVersion.php b/demos/quickstart/protected/controls/RequiresVersion.php
index 9e598d3a..c5dc37ec 100644
--- a/demos/quickstart/protected/controls/RequiresVersion.php
+++ b/demos/quickstart/protected/controls/RequiresVersion.php
@@ -1,16 +1,16 @@
-<?php
-
-class RequiresVersion extends TTemplateControl
-{
- public function setVersion($value)
- {
- $this->setViewState('Version',$value);
- }
-
- public function getVersion()
- {
- return $this->getViewState('Version');
- }
-}
-
+<?php
+
+class RequiresVersion extends TTemplateControl
+{
+ public function setVersion($value)
+ {
+ $this->setViewState('Version',$value);
+ }
+
+ public function getVersion()
+ {
+ return $this->getViewState('Version');
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/RunBar.php b/demos/quickstart/protected/controls/RunBar.php
index 8990c4c3..4db016be 100644
--- a/demos/quickstart/protected/controls/RunBar.php
+++ b/demos/quickstart/protected/controls/RunBar.php
@@ -1,23 +1,23 @@
-<?php
-
-class RunBar extends TTemplateControl
-{
- public function getPagePath()
- {
- return $this->getViewState('PagePath','');
- }
-
- public function setPagePath($value)
- {
- $this->setViewState('PagePath',$value,'');
- }
-
- public function onPreRender($param)
- {
- $pagePath=$this->getPagePath();
- $this->RunButton->NavigateUrl="?page=$pagePath";
- $this->ViewSourceButton->NavigateUrl="?page=ViewSource&path=/".strtr($pagePath,'.','/').'.page';
- }
-}
-
+<?php
+
+class RunBar extends TTemplateControl
+{
+ public function getPagePath()
+ {
+ return $this->getViewState('PagePath','');
+ }
+
+ public function setPagePath($value)
+ {
+ $this->setViewState('PagePath',$value,'');
+ }
+
+ public function onPreRender($param)
+ {
+ $pagePath=$this->getPagePath();
+ $this->RunButton->NavigateUrl="?page=$pagePath";
+ $this->ViewSourceButton->NavigateUrl="?page=ViewSource&path=/".strtr($pagePath,'.','/').'.page';
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/SampleLayout.php b/demos/quickstart/protected/controls/SampleLayout.php
index a89b905d..a2d6f658 100644
--- a/demos/quickstart/protected/controls/SampleLayout.php
+++ b/demos/quickstart/protected/controls/SampleLayout.php
@@ -1,13 +1,13 @@
-<?php
-
-class SampleLayout extends TTemplateControl
-{
- public function __construct()
- {
- if(isset($this->Request['notheme']))
- $this->Service->RequestedPage->EnableTheming=false;
- parent::__construct();
- }
-}
-
+<?php
+
+class SampleLayout extends TTemplateControl
+{
+ public function __construct()
+ {
+ if(isset($this->Request['notheme']))
+ $this->Service->RequestedPage->EnableTheming=false;
+ parent::__construct();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/SearchBox.php b/demos/quickstart/protected/controls/SearchBox.php
index 2e74ae31..e13d5e46 100644
--- a/demos/quickstart/protected/controls/SearchBox.php
+++ b/demos/quickstart/protected/controls/SearchBox.php
@@ -1,41 +1,41 @@
-<?php
-
-class SearchBox extends TTemplateControl
-{
- public function getText()
- {
- $this->ensureChildControls();
- return $this->getRegisteredObject('search')->getText();
- }
-
- public function getTextBox()
- {
- $this->ensureChildControls();
- return $this->getRegisteredObject('search');
- }
-
- public function getButton()
- {
- $this->ensureChildControls();
- return $this->getRegisteredObject('find');
- }
-
- public function onInit($param)
- {
- parent::onInit($param);
- if(strlen($q = $this->Page->Request['q']) > 0)
- $this->search->setText($q);
- }
-
- public function doSearch($sender, $param)
- {
- if(strlen($query = $this->search->getText()) >0)
- {
- $ps = $this->getApplication()->getService();
- $page = $ps->constructUrl('Search', array('q' => $query), false);
- $this->getApplication()->getResponse()->redirect($page);
- }
- }
-}
-
+<?php
+
+class SearchBox extends TTemplateControl
+{
+ public function getText()
+ {
+ $this->ensureChildControls();
+ return $this->getRegisteredObject('search')->getText();
+ }
+
+ public function getTextBox()
+ {
+ $this->ensureChildControls();
+ return $this->getRegisteredObject('search');
+ }
+
+ public function getButton()
+ {
+ $this->ensureChildControls();
+ return $this->getRegisteredObject('find');
+ }
+
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ if(strlen($q = $this->Page->Request['q']) > 0)
+ $this->search->setText($q);
+ }
+
+ public function doSearch($sender, $param)
+ {
+ if(strlen($query = $this->search->getText()) >0)
+ {
+ $ps = $this->getApplication()->getService();
+ $page = $ps->constructUrl('Search', array('q' => $query), false);
+ $this->getApplication()->getResponse()->redirect($page);
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/SinceVersion.php b/demos/quickstart/protected/controls/SinceVersion.php
index cfeeffbb..db73275b 100644
--- a/demos/quickstart/protected/controls/SinceVersion.php
+++ b/demos/quickstart/protected/controls/SinceVersion.php
@@ -1,16 +1,16 @@
-<?php
-
-class SinceVersion extends TTemplateControl
-{
- public function setVersion($value)
- {
- $this->setViewState('Version',$value);
- }
-
- public function getVersion()
- {
- return $this->getViewState('Version');
- }
-}
-
+<?php
+
+class SinceVersion extends TTemplateControl
+{
+ public function setVersion($value)
+ {
+ $this->setViewState('Version',$value);
+ }
+
+ public function getVersion()
+ {
+ return $this->getViewState('Version');
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/controls/TopicList.php b/demos/quickstart/protected/controls/TopicList.php
index ce827cc0..eb5976a9 100644
--- a/demos/quickstart/protected/controls/TopicList.php
+++ b/demos/quickstart/protected/controls/TopicList.php
@@ -1,8 +1,8 @@
-<?php
-
-class TopicList extends TTemplateControl
-{
-
-}
-
+<?php
+
+class TopicList extends TTemplateControl
+{
+
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/index/ZendSearch.php b/demos/quickstart/protected/index/ZendSearch.php
index ec15729c..70aef414 100644
--- a/demos/quickstart/protected/index/ZendSearch.php
+++ b/demos/quickstart/protected/index/ZendSearch.php
@@ -1,55 +1,55 @@
-<?php
-/*
- * Created on 7/05/2006
- */
-
-class ZendSearch extends TModule
-{
- private $_data;
- private $_ZF;
- private $_search;
-
- public function setIndexDataDirectory($path)
- {
- $this->_data = Prado::getPathOfNamespace($path);
- }
-
- public function getIndexDataDirectory()
- {
- return $this->_data;
- }
-
- public function setZendFramework($path)
- {
- $this->_ZF = Prado::getPathOfNamespace($path);
- }
-
- protected function importZendNamespace()
- {
- if(is_null(Prado::getPathOfAlias('Zend')))
- {
- $zendBase = !is_null($this->_ZF) ? $this->_ZF.'.*' : 'Application.index.*';
- $path = !is_null($this->_ZF) ? $this->_ZF.'.Zend.*' : 'Application.index.Zend.*';
- Prado::using($zendBase);
- Prado::setPathOfAlias('Zend', Prado::getPathOfNamespace($path));
- }
- }
-
- protected function getZendSearch()
- {
- if(is_null($this->_search))
- {
- $this->importZendNamespace();
- Prado::using('Zend.Search.Lucene');
- $this->_search = new Zend_Search_Lucene($this->_data);
- }
- return $this->_search;
- }
-
- public function find($query)
- {
- return $this->getZendSearch()->find(strtolower($query));
- }
-}
-
+<?php
+/*
+ * Created on 7/05/2006
+ */
+
+class ZendSearch extends TModule
+{
+ private $_data;
+ private $_ZF;
+ private $_search;
+
+ public function setIndexDataDirectory($path)
+ {
+ $this->_data = Prado::getPathOfNamespace($path);
+ }
+
+ public function getIndexDataDirectory()
+ {
+ return $this->_data;
+ }
+
+ public function setZendFramework($path)
+ {
+ $this->_ZF = Prado::getPathOfNamespace($path);
+ }
+
+ protected function importZendNamespace()
+ {
+ if(is_null(Prado::getPathOfAlias('Zend')))
+ {
+ $zendBase = !is_null($this->_ZF) ? $this->_ZF.'.*' : 'Application.index.*';
+ $path = !is_null($this->_ZF) ? $this->_ZF.'.Zend.*' : 'Application.index.Zend.*';
+ Prado::using($zendBase);
+ Prado::setPathOfAlias('Zend', Prado::getPathOfNamespace($path));
+ }
+ }
+
+ protected function getZendSearch()
+ {
+ if(is_null($this->_search))
+ {
+ $this->importZendNamespace();
+ Prado::using('Zend.Search.Lucene');
+ $this->_search = new Zend_Search_Lucene($this->_data);
+ }
+ return $this->_search;
+ }
+
+ public function find($query)
+ {
+ return $this->getZendSearch()->find(strtolower($query));
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveButton/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveButton/Home.php
index 4a4e23ca..e3afdaae 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveButton/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveButton/Home.php
@@ -1,20 +1,20 @@
-<?php
-
-// $Id$
-class Home extends TPage
-{
- public function buttonClicked($sender, $param)
- {
- if($param instanceof TCommandEventParameter)
- $sender->Text="Name: {$param->CommandName}, Param: {$param->CommandParameter}";
- else
- $sender->Text="I'm clicked";
- }
-
- public function buttonCallback($sender, $param)
- {
- $sender->Text .= ' using callback';
- }
-}
-
+<?php
+
+// $Id$
+class Home extends TPage
+{
+ public function buttonClicked($sender, $param)
+ {
+ if($param instanceof TCommandEventParameter)
+ $sender->Text="Name: {$param->CommandName}, Param: {$param->CommandParameter}";
+ else
+ $sender->Text="I'm clicked";
+ }
+
+ public function buttonCallback($sender, $param)
+ {
+ $sender->Text .= ' using callback';
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveCheckBox/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveCheckBox/Home.php
index f0543695..5a73a6f4 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveCheckBox/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveCheckBox/Home.php
@@ -1,16 +1,16 @@
-<?php
-// $Id$
-class Home extends TPage
-{
- public function checkboxClicked($sender,$param)
- {
- $sender->Text= $sender->ClientID . " clicked";
- }
-
- public function checkboxCallback($sender, $param)
- {
- $sender->Text .= ' using callback';
- }
-}
-
+<?php
+// $Id$
+class Home extends TPage
+{
+ public function checkboxClicked($sender,$param)
+ {
+ $sender->Text= $sender->ClientID . " clicked";
+ }
+
+ public function checkboxCallback($sender, $param)
+ {
+ $sender->Text .= ' using callback';
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveCheckBoxList/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveCheckBoxList/Home.php
index 3644721e..b9060163 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveCheckBoxList/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveCheckBoxList/Home.php
@@ -1,26 +1,26 @@
-<?php
-
-class Home extends TPage
-{
- protected function collectSelectionResult($input,$output)
- {
- $indices=$input->SelectedIndices;
- $result='';
- foreach($indices as $index)
- {
- $item=$input->Items[$index];
- $result.="(Index: $index, Value: $item->Value, Text: $item->Text)";
- }
- if($result==='')
- $output->Text='Your selection is empty.';
- else
- $output->Text='Your selection is: '.$result;
- }
-
- public function selectionChanged($sender,$param)
- {
- $this->collectSelectionResult($this->CheckBoxList,$this->SelectionResult);
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ protected function collectSelectionResult($input,$output)
+ {
+ $indices=$input->SelectedIndices;
+ $result='';
+ foreach($indices as $index)
+ {
+ $item=$input->Items[$index];
+ $result.="(Index: $index, Value: $item->Value, Text: $item->Text)";
+ }
+ if($result==='')
+ $output->Text='Your selection is empty.';
+ else
+ $output->Text='Your selection is: '.$result;
+ }
+
+ public function selectionChanged($sender,$param)
+ {
+ $this->collectSelectionResult($this->CheckBoxList,$this->SelectionResult);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveCustomValidator/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveCustomValidator/Home.php
index 102afcb0..c668c86d 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveCustomValidator/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveCustomValidator/Home.php
@@ -1,11 +1,11 @@
-<?php
-
-class Home extends TPage
-{
- public function validator1_onvalidate($sender, $param)
- {
- $param->IsValid = $this->textbox1->Text == 'Prado';
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function validator1_onvalidate($sender, $param)
+ {
+ $param->IsValid = $this->textbox1->Text == 'Prado';
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample1.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample1.php
index ada1ee6e..43d645ab 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample1.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample1.php
@@ -1,37 +1,37 @@
-<?php
-
-class Sample1 extends TPage
-{
- protected function getData()
- {
- return array(
- array('id'=>'ITN001','name'=>'Motherboard','quantity'=>1,'price'=>100.00,'imported'=>true),
- array('id'=>'ITN002','name'=>'CPU','quantity'=>1,'price'=>150.00,'imported'=>true),
- array('id'=>'ITN003','name'=>'Harddrive','quantity'=>2,'price'=>80.00,'imported'=>true),
- array('id'=>'ITN004','name'=>'Sound card','quantity'=>1,'price'=>40.00,'imported'=>false),
- array('id'=>'ITN005','name'=>'Video card','quantity'=>1,'price'=>150.00,'imported'=>true),
- array('id'=>'ITN006','name'=>'Keyboard','quantity'=>1,'price'=>20.00,'imported'=>false),
- array('id'=>'ITN007','name'=>'Monitor','quantity'=>2,'price'=>300.00,'imported'=>true),
- array('id'=>'ITN008','name'=>'CDRW drive','quantity'=>1,'price'=>40.00,'imported'=>true),
- array('id'=>'ITN009','name'=>'Cooling fan','quantity'=>2,'price'=>10.00,'imported'=>false),
- array('id'=>'ITN010','name'=>'Video camera','quantity'=>20,'price'=>30.00,'imported'=>true),
- array('id'=>'ITN011','name'=>'Card reader','quantity'=>10,'price'=>24.00,'imported'=>true),
- array('id'=>'ITN012','name'=>'Floppy drive','quantity'=>50,'price'=>12.00,'imported'=>false),
- array('id'=>'ITN013','name'=>'CD drive','quantity'=>25,'price'=>20.00,'imported'=>true),
- array('id'=>'ITN014','name'=>'DVD drive','quantity'=>15,'price'=>80.00,'imported'=>true),
- array('id'=>'ITN015','name'=>'Mouse pad','quantity'=>50,'price'=>5.00,'imported'=>false),
- array('id'=>'ITN016','name'=>'Network cable','quantity'=>40,'price'=>8.00,'imported'=>true),
- array('id'=>'ITN017','name'=>'Case','quantity'=>8,'price'=>65.00,'imported'=>false),
- array('id'=>'ITN018','name'=>'Surge protector','quantity'=>45,'price'=>15.00,'imported'=>false),
- array('id'=>'ITN019','name'=>'Speaker','quantity'=>35,'price'=>65.00,'imported'=>false),
- );
- }
-
- public function buttonClicked($sender, $param)
- {
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-}
-
+<?php
+
+class Sample1 extends TPage
+{
+ protected function getData()
+ {
+ return array(
+ array('id'=>'ITN001','name'=>'Motherboard','quantity'=>1,'price'=>100.00,'imported'=>true),
+ array('id'=>'ITN002','name'=>'CPU','quantity'=>1,'price'=>150.00,'imported'=>true),
+ array('id'=>'ITN003','name'=>'Harddrive','quantity'=>2,'price'=>80.00,'imported'=>true),
+ array('id'=>'ITN004','name'=>'Sound card','quantity'=>1,'price'=>40.00,'imported'=>false),
+ array('id'=>'ITN005','name'=>'Video card','quantity'=>1,'price'=>150.00,'imported'=>true),
+ array('id'=>'ITN006','name'=>'Keyboard','quantity'=>1,'price'=>20.00,'imported'=>false),
+ array('id'=>'ITN007','name'=>'Monitor','quantity'=>2,'price'=>300.00,'imported'=>true),
+ array('id'=>'ITN008','name'=>'CDRW drive','quantity'=>1,'price'=>40.00,'imported'=>true),
+ array('id'=>'ITN009','name'=>'Cooling fan','quantity'=>2,'price'=>10.00,'imported'=>false),
+ array('id'=>'ITN010','name'=>'Video camera','quantity'=>20,'price'=>30.00,'imported'=>true),
+ array('id'=>'ITN011','name'=>'Card reader','quantity'=>10,'price'=>24.00,'imported'=>true),
+ array('id'=>'ITN012','name'=>'Floppy drive','quantity'=>50,'price'=>12.00,'imported'=>false),
+ array('id'=>'ITN013','name'=>'CD drive','quantity'=>25,'price'=>20.00,'imported'=>true),
+ array('id'=>'ITN014','name'=>'DVD drive','quantity'=>15,'price'=>80.00,'imported'=>true),
+ array('id'=>'ITN015','name'=>'Mouse pad','quantity'=>50,'price'=>5.00,'imported'=>false),
+ array('id'=>'ITN016','name'=>'Network cable','quantity'=>40,'price'=>8.00,'imported'=>true),
+ array('id'=>'ITN017','name'=>'Case','quantity'=>8,'price'=>65.00,'imported'=>false),
+ array('id'=>'ITN018','name'=>'Surge protector','quantity'=>45,'price'=>15.00,'imported'=>false),
+ array('id'=>'ITN019','name'=>'Speaker','quantity'=>35,'price'=>65.00,'imported'=>false),
+ );
+ }
+
+ public function buttonClicked($sender, $param)
+ {
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample2.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample2.php
index 3831582d..10a37e0a 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample2.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample2.php
@@ -1,86 +1,86 @@
-<?php
-
-class Sample2 extends TPage
-{
- protected function getData()
- {
- return array(
- array(
- 'ISBN'=>'0596007124',
- 'title'=>'Head First Design Patterns',
- 'publisher'=>'O\'Reilly Media, Inc.',
- 'price'=>29.67,
- 'instock'=>true,
- 'rating'=>4,
- ),
- array(
- 'ISBN'=>'0201633612',
- 'title'=>'Design Patterns: Elements of Reusable Object-Oriented Software',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>47.04,
- 'instock'=>true,
- 'rating'=>5,
- ),
- array(
- 'ISBN'=>'0321247140',
- 'title'=>'Design Patterns Explained : A New Perspective on Object-Oriented Design',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>37.49,
- 'instock'=>true,
- 'rating'=>4,
- ),
- array(
- 'ISBN'=>'0201485672',
- 'title'=>'Refactoring: Improving the Design of Existing Code',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>47.14,
- 'instock'=>true,
- 'rating'=>3,
- ),
- array(
- 'ISBN'=>'0321213351',
- 'title'=>'Refactoring to Patterns',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>38.49,
- 'instock'=>true,
- 'rating'=>2,
- ),
- array(
- 'ISBN'=>'0735619670',
- 'title'=>'Code Complete',
- 'publisher'=>'Microsoft Press',
- 'price'=>32.99,
- 'instock'=>false,
- 'rating'=>4,
- ),
- array(
- 'ISBN'=>'0321278658',
- 'title'=>'Extreme Programming Explained : Embrace Change',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>34.99,
- 'instock'=>true,
- 'rating'=>3,
- ),
- );
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack && !$this->IsCallBack)
- {
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
- }
-
- public function toggleColumnVisibility($sender,$param)
- {
- foreach($this->DataGrid->Columns as $index=>$column)
- $column->Visible=$sender->Items[$index]->Selected;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-}
-
+<?php
+
+class Sample2 extends TPage
+{
+ protected function getData()
+ {
+ return array(
+ array(
+ 'ISBN'=>'0596007124',
+ 'title'=>'Head First Design Patterns',
+ 'publisher'=>'O\'Reilly Media, Inc.',
+ 'price'=>29.67,
+ 'instock'=>true,
+ 'rating'=>4,
+ ),
+ array(
+ 'ISBN'=>'0201633612',
+ 'title'=>'Design Patterns: Elements of Reusable Object-Oriented Software',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>47.04,
+ 'instock'=>true,
+ 'rating'=>5,
+ ),
+ array(
+ 'ISBN'=>'0321247140',
+ 'title'=>'Design Patterns Explained : A New Perspective on Object-Oriented Design',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>37.49,
+ 'instock'=>true,
+ 'rating'=>4,
+ ),
+ array(
+ 'ISBN'=>'0201485672',
+ 'title'=>'Refactoring: Improving the Design of Existing Code',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>47.14,
+ 'instock'=>true,
+ 'rating'=>3,
+ ),
+ array(
+ 'ISBN'=>'0321213351',
+ 'title'=>'Refactoring to Patterns',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>38.49,
+ 'instock'=>true,
+ 'rating'=>2,
+ ),
+ array(
+ 'ISBN'=>'0735619670',
+ 'title'=>'Code Complete',
+ 'publisher'=>'Microsoft Press',
+ 'price'=>32.99,
+ 'instock'=>false,
+ 'rating'=>4,
+ ),
+ array(
+ 'ISBN'=>'0321278658',
+ 'title'=>'Extreme Programming Explained : Embrace Change',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>34.99,
+ 'instock'=>true,
+ 'rating'=>3,
+ ),
+ );
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack && !$this->IsCallBack)
+ {
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+ }
+
+ public function toggleColumnVisibility($sender,$param)
+ {
+ foreach($this->DataGrid->Columns as $index=>$column)
+ $column->Visible=$sender->Items[$index]->Selected;
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample3.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample3.php
index 9768ca31..5e2fb355 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample3.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample3.php
@@ -1,190 +1,190 @@
-<?php
-
-class Sample3 extends TPage
-{
- private $_data=null;
-
- protected function getData()
- {
- if($this->_data===null)
- $this->loadData();
- return $this->_data;
- }
-
- protected function loadData()
- {
- // We use viewstate keep track of data.
- // In real applications, data should come from database using an SQL SELECT statement.
- // In the following tabular data, field 'ISBN' is the primary key.
- // All update and delete operations should come with an 'id' value in order to go through.
- if(($this->_data=$this->getViewState('Data',null))===null)
- {
- $this->_data=array(
- array(
- 'ISBN'=>'0596007124',
- 'title'=>'Head First Design Patterns',
- 'publisher'=>'O\'Reilly Media, Inc.',
- 'price'=>29.67,
- 'instock'=>true,
- 'rating'=>4,
- ),
- array(
- 'ISBN'=>'0201633612',
- 'title'=>'Design Patterns: Elements of Reusable Object-Oriented Software',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>47.04,
- 'instock'=>true,
- 'rating'=>5,
- ),
- array(
- 'ISBN'=>'0321247140',
- 'title'=>'Design Patterns Explained : A New Perspective on Object-Oriented Design',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>37.49,
- 'instock'=>true,
- 'rating'=>4,
- ),
- array(
- 'ISBN'=>'0201485672',
- 'title'=>'Refactoring: Improving the Design of Existing Code',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>47.14,
- 'instock'=>true,
- 'rating'=>3,
- ),
- array(
- 'ISBN'=>'0321213351',
- 'title'=>'Refactoring to Patterns',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>38.49,
- 'instock'=>true,
- 'rating'=>2,
- ),
- array(
- 'ISBN'=>'0735619670',
- 'title'=>'Code Complete',
- 'publisher'=>'Microsoft Press',
- 'price'=>32.99,
- 'instock'=>false,
- 'rating'=>4,
- ),
- array(
- 'ISBN'=>'0321278658 ',
- 'title'=>'Extreme Programming Explained : Embrace Change',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>34.99,
- 'instock'=>true,
- 'rating'=>3,
- ),
- );
- $this->saveData();
- }
- }
-
- protected function saveData()
- {
- $this->setViewState('Data',$this->_data);
- }
-
- protected function updateBook($isbn,$title,$publisher,$price,$instock,$rating)
- {
- // In real applications, data should be saved to database using an SQL UPDATE statement
- if($this->_data===null)
- $this->loadData();
- $updateRow=null;
- foreach($this->_data as $index=>$row)
- if($row['ISBN']===$isbn)
- $updateRow=&$this->_data[$index];
- if($updateRow!==null)
- {
- $updateRow['title']=$title;
- $updateRow['publisher']=$publisher;
- $updateRow['price']=TPropertyValue::ensureFloat(ltrim($price,'$'));
- $updateRow['instock']=TPropertyValue::ensureBoolean($instock);
- $updateRow['rating']=TPropertyValue::ensureInteger($rating);
- $this->saveData();
- }
- }
-
- protected function deleteBook($isbn)
- {
- // In real applications, data should be saved to database using an SQL DELETE statement
- if($this->_data===null)
- $this->loadData();
- $deleteIndex=-1;
- foreach($this->_data as $index=>$row)
- if($row['ISBN']===$isbn)
- $deleteIndex=$index;
- if($deleteIndex>=0)
- {
- unset($this->_data[$deleteIndex]);
- $this->saveData();
- }
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack && !$this->IsCallBack)
- {
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
- }
-
- public function itemCreated($sender,$param)
- {
- $item=$param->Item;
- if($item->ItemType==='EditItem')
- {
- // set column width of textboxes
- $item->BookTitleColumn->TextBox->Columns=40;
- $item->PriceColumn->TextBox->Columns=5;
- }
- if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem' || $item->ItemType==='EditItem')
- {
- // add an aleart dialog to delete buttons
- $item->DeleteColumn->Button->Attributes->onclick='if(!confirm(\'Are you sure?\')) return false;';
- }
- }
-
- public function editItem($sender,$param)
- {
- $this->DataGrid->EditItemIndex=$param->Item->ItemIndex;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-
- public function saveItem($sender,$param)
- {
- $item=$param->Item;
- $this->updateBook(
- $this->DataGrid->DataKeys[$item->ItemIndex], // ISBN
- $item->BookTitleColumn->TextBox->Text, // title
- $item->PublisherColumn->TextBox->Text, // publisher
- $item->PriceColumn->TextBox->Text, // price
- $item->InStockColumn->CheckBox->Checked, // instock
- $item->RatingColumn->DropDownList->SelectedValue // rating
- );
- $this->DataGrid->EditItemIndex=-1;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-
- public function cancelItem($sender,$param)
- {
- $this->DataGrid->EditItemIndex=-1;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-
- public function deleteItem($sender,$param)
- {
- $this->deleteBook($this->DataGrid->DataKeys[$param->Item->ItemIndex]);
- $this->DataGrid->EditItemIndex=-1;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-}
-
+<?php
+
+class Sample3 extends TPage
+{
+ private $_data=null;
+
+ protected function getData()
+ {
+ if($this->_data===null)
+ $this->loadData();
+ return $this->_data;
+ }
+
+ protected function loadData()
+ {
+ // We use viewstate keep track of data.
+ // In real applications, data should come from database using an SQL SELECT statement.
+ // In the following tabular data, field 'ISBN' is the primary key.
+ // All update and delete operations should come with an 'id' value in order to go through.
+ if(($this->_data=$this->getViewState('Data',null))===null)
+ {
+ $this->_data=array(
+ array(
+ 'ISBN'=>'0596007124',
+ 'title'=>'Head First Design Patterns',
+ 'publisher'=>'O\'Reilly Media, Inc.',
+ 'price'=>29.67,
+ 'instock'=>true,
+ 'rating'=>4,
+ ),
+ array(
+ 'ISBN'=>'0201633612',
+ 'title'=>'Design Patterns: Elements of Reusable Object-Oriented Software',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>47.04,
+ 'instock'=>true,
+ 'rating'=>5,
+ ),
+ array(
+ 'ISBN'=>'0321247140',
+ 'title'=>'Design Patterns Explained : A New Perspective on Object-Oriented Design',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>37.49,
+ 'instock'=>true,
+ 'rating'=>4,
+ ),
+ array(
+ 'ISBN'=>'0201485672',
+ 'title'=>'Refactoring: Improving the Design of Existing Code',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>47.14,
+ 'instock'=>true,
+ 'rating'=>3,
+ ),
+ array(
+ 'ISBN'=>'0321213351',
+ 'title'=>'Refactoring to Patterns',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>38.49,
+ 'instock'=>true,
+ 'rating'=>2,
+ ),
+ array(
+ 'ISBN'=>'0735619670',
+ 'title'=>'Code Complete',
+ 'publisher'=>'Microsoft Press',
+ 'price'=>32.99,
+ 'instock'=>false,
+ 'rating'=>4,
+ ),
+ array(
+ 'ISBN'=>'0321278658 ',
+ 'title'=>'Extreme Programming Explained : Embrace Change',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>34.99,
+ 'instock'=>true,
+ 'rating'=>3,
+ ),
+ );
+ $this->saveData();
+ }
+ }
+
+ protected function saveData()
+ {
+ $this->setViewState('Data',$this->_data);
+ }
+
+ protected function updateBook($isbn,$title,$publisher,$price,$instock,$rating)
+ {
+ // In real applications, data should be saved to database using an SQL UPDATE statement
+ if($this->_data===null)
+ $this->loadData();
+ $updateRow=null;
+ foreach($this->_data as $index=>$row)
+ if($row['ISBN']===$isbn)
+ $updateRow=&$this->_data[$index];
+ if($updateRow!==null)
+ {
+ $updateRow['title']=$title;
+ $updateRow['publisher']=$publisher;
+ $updateRow['price']=TPropertyValue::ensureFloat(ltrim($price,'$'));
+ $updateRow['instock']=TPropertyValue::ensureBoolean($instock);
+ $updateRow['rating']=TPropertyValue::ensureInteger($rating);
+ $this->saveData();
+ }
+ }
+
+ protected function deleteBook($isbn)
+ {
+ // In real applications, data should be saved to database using an SQL DELETE statement
+ if($this->_data===null)
+ $this->loadData();
+ $deleteIndex=-1;
+ foreach($this->_data as $index=>$row)
+ if($row['ISBN']===$isbn)
+ $deleteIndex=$index;
+ if($deleteIndex>=0)
+ {
+ unset($this->_data[$deleteIndex]);
+ $this->saveData();
+ }
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack && !$this->IsCallBack)
+ {
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+ }
+
+ public function itemCreated($sender,$param)
+ {
+ $item=$param->Item;
+ if($item->ItemType==='EditItem')
+ {
+ // set column width of textboxes
+ $item->BookTitleColumn->TextBox->Columns=40;
+ $item->PriceColumn->TextBox->Columns=5;
+ }
+ if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem' || $item->ItemType==='EditItem')
+ {
+ // add an aleart dialog to delete buttons
+ $item->DeleteColumn->Button->Attributes->onclick='if(!confirm(\'Are you sure?\')) return false;';
+ }
+ }
+
+ public function editItem($sender,$param)
+ {
+ $this->DataGrid->EditItemIndex=$param->Item->ItemIndex;
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+
+ public function saveItem($sender,$param)
+ {
+ $item=$param->Item;
+ $this->updateBook(
+ $this->DataGrid->DataKeys[$item->ItemIndex], // ISBN
+ $item->BookTitleColumn->TextBox->Text, // title
+ $item->PublisherColumn->TextBox->Text, // publisher
+ $item->PriceColumn->TextBox->Text, // price
+ $item->InStockColumn->CheckBox->Checked, // instock
+ $item->RatingColumn->DropDownList->SelectedValue // rating
+ );
+ $this->DataGrid->EditItemIndex=-1;
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+
+ public function cancelItem($sender,$param)
+ {
+ $this->DataGrid->EditItemIndex=-1;
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+
+ public function deleteItem($sender,$param)
+ {
+ $this->deleteBook($this->DataGrid->DataKeys[$param->Item->ItemIndex]);
+ $this->DataGrid->EditItemIndex=-1;
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample4.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample4.php
index eb1a0e5b..46c7dc81 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample4.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample4.php
@@ -1,21 +1,21 @@
-<?php
-
-Prado::using('Application.pages.ActiveControls.Samples.TActiveDataGrid.Sample2');
-
-class Sample4 extends Sample2
-{
- protected function sortData($data,$key)
- {
- $compare = create_function('$a,$b','if ($a["'.$key.'"] == $b["'.$key.'"]) {return 0;}else {return ($a["'.$key.'"] > $b["'.$key.'"]) ? 1 : -1;}');
- usort($data,$compare) ;
- return $data ;
- }
-
- public function sortDataGrid($sender,$param)
- {
- $this->DataGrid->DataSource=$this->sortData($this->Data,$param->SortExpression);
- $this->DataGrid->dataBind();
- }
-}
-
+<?php
+
+Prado::using('Application.pages.ActiveControls.Samples.TActiveDataGrid.Sample2');
+
+class Sample4 extends Sample2
+{
+ protected function sortData($data,$key)
+ {
+ $compare = create_function('$a,$b','if ($a["'.$key.'"] == $b["'.$key.'"]) {return 0;}else {return ($a["'.$key.'"] > $b["'.$key.'"]) ? 1 : -1;}');
+ usort($data,$compare) ;
+ return $data ;
+ }
+
+ public function sortDataGrid($sender,$param)
+ {
+ $this->DataGrid->DataSource=$this->sortData($this->Data,$param->SortExpression);
+ $this->DataGrid->dataBind();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample5.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample5.php
index 95bf9a0e..dc4a4dd6 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample5.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataGrid/Sample5.php
@@ -1,79 +1,79 @@
-<?php
-
-Prado::using('Application.pages.ActiveControls.Samples.TActiveDataGrid.Sample1');
-
-class Sample5 extends Sample1
-{
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostback && ! $this->IsCallback)
- {
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
- }
-
- public function changePage($sender,$param)
- {
- $this->DataGrid->CurrentPageIndex=$param->NewPageIndex;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-
- public function pagerCreated($sender,$param)
- {
- $param->Pager->Controls->insertAt(0,'Page: ');
- }
-
- public function changePagerPosition($sender,$param)
- {
- $top=$sender->Items[0]->Selected;
- $bottom=$sender->Items[1]->Selected;
- if($top && $bottom)
- $position='TopAndBottom';
- else if($top)
- $position='Top';
- else if($bottom)
- $position='Bottom';
- else
- $position='';
- if($position==='')
- $this->DataGrid->PagerStyle->Visible=false;
- else
- {
- $this->DataGrid->PagerStyle->Position=$position;
- $this->DataGrid->PagerStyle->Visible=true;
- }
- }
-
- public function useNumericPager($sender,$param)
- {
- $this->DataGrid->PagerStyle->Mode='Numeric';
- $this->DataGrid->PagerStyle->NextPageText=$this->NextPageText->Text;
- $this->DataGrid->PagerStyle->PrevPageText=$this->PrevPageText->Text;
- $this->DataGrid->PagerStyle->PageButtonCount=$this->PageButtonCount->Text;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-
- public function useNextPrevPager($sender,$param)
- {
- $this->DataGrid->PagerStyle->Mode='NextPrev';
- $this->DataGrid->PagerStyle->NextPageText=$this->NextPageText->Text;
- $this->DataGrid->PagerStyle->PrevPageText=$this->PrevPageText->Text;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-
- public function changePageSize($sender,$param)
- {
- $this->DataGrid->PageSize=TPropertyValue::ensureInteger($this->PageSize->Text);
- $this->DataGrid->CurrentPageIndex=0;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-}
-
+<?php
+
+Prado::using('Application.pages.ActiveControls.Samples.TActiveDataGrid.Sample1');
+
+class Sample5 extends Sample1
+{
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostback && ! $this->IsCallback)
+ {
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+ }
+
+ public function changePage($sender,$param)
+ {
+ $this->DataGrid->CurrentPageIndex=$param->NewPageIndex;
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+
+ public function pagerCreated($sender,$param)
+ {
+ $param->Pager->Controls->insertAt(0,'Page: ');
+ }
+
+ public function changePagerPosition($sender,$param)
+ {
+ $top=$sender->Items[0]->Selected;
+ $bottom=$sender->Items[1]->Selected;
+ if($top && $bottom)
+ $position='TopAndBottom';
+ else if($top)
+ $position='Top';
+ else if($bottom)
+ $position='Bottom';
+ else
+ $position='';
+ if($position==='')
+ $this->DataGrid->PagerStyle->Visible=false;
+ else
+ {
+ $this->DataGrid->PagerStyle->Position=$position;
+ $this->DataGrid->PagerStyle->Visible=true;
+ }
+ }
+
+ public function useNumericPager($sender,$param)
+ {
+ $this->DataGrid->PagerStyle->Mode='Numeric';
+ $this->DataGrid->PagerStyle->NextPageText=$this->NextPageText->Text;
+ $this->DataGrid->PagerStyle->PrevPageText=$this->PrevPageText->Text;
+ $this->DataGrid->PagerStyle->PageButtonCount=$this->PageButtonCount->Text;
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+
+ public function useNextPrevPager($sender,$param)
+ {
+ $this->DataGrid->PagerStyle->Mode='NextPrev';
+ $this->DataGrid->PagerStyle->NextPageText=$this->NextPageText->Text;
+ $this->DataGrid->PagerStyle->PrevPageText=$this->PrevPageText->Text;
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+
+ public function changePageSize($sender,$param)
+ {
+ $this->DataGrid->PageSize=TPropertyValue::ensureInteger($this->PageSize->Text);
+ $this->DataGrid->CurrentPageIndex=0;
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataList/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataList/Home.php
index c62a239d..b77fe63c 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataList/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDataList/Home.php
@@ -1,132 +1,132 @@
-<?php
-
-class Home extends TPage
-{
- private $_data=null;
-
- protected function getData()
- {
- if($this->_data===null)
- $this->loadData();
- return $this->_data;
- }
-
- protected function loadData()
- {
- // We use viewstate keep track of data.
- // In real applications, data should come from database using an SQL SELECT statement.
- // In the following tabular data, field 'id' is the primary key.
- // All update and delete operations should come with an 'id' value in order to go through.
- if(($this->_data=$this->getViewState('Data',null))===null)
- {
- $this->_data=array(
- array('id'=>'ITN001','name'=>'Motherboard','quantity'=>1,'price'=>100.00,'imported'=>true),
- array('id'=>'ITN002','name'=>'CPU','quantity'=>1,'price'=>150.00,'imported'=>true),
- array('id'=>'ITN003','name'=>'Harddrive','quantity'=>2,'price'=>80.00,'imported'=>false),
- array('id'=>'ITN004','name'=>'Sound card','quantity'=>1,'price'=>40.00,'imported'=>false),
- array('id'=>'ITN005','name'=>'Video card','quantity'=>1,'price'=>150.00,'imported'=>true),
- array('id'=>'ITN006','name'=>'Keyboard','quantity'=>1,'price'=>20.00,'imported'=>true),
- array('id'=>'ITN007','name'=>'Monitor','quantity'=>2,'price'=>300.00,'imported'=>false),
- );
- $this->saveData();
- }
- }
-
- protected function saveData()
- {
- $this->setViewState('Data',$this->_data);
- }
-
- protected function updateProduct($id,$name,$quantity,$price,$imported)
- {
- // In real applications, data should be saved to database using an SQL UPDATE statement
- if($this->_data===null)
- $this->loadData();
- $updateRow=null;
- foreach($this->_data as $index=>$row)
- if($row['id']===$id)
- $updateRow=&$this->_data[$index];
- if($updateRow!==null)
- {
- $updateRow['name']=$name;
- $updateRow['quantity']=TPropertyValue::ensureInteger($quantity);
- $updateRow['price']=TPropertyValue::ensureFloat($price);
- $updateRow['imported']=TPropertyValue::ensureBoolean($imported);
- $this->saveData();
- }
- }
-
- protected function deleteProduct($id)
- {
- // In real applications, data should be saved to database using an SQL DELETE statement
- if($this->_data===null)
- $this->loadData();
- $deleteIndex=-1;
- foreach($this->_data as $index=>$row)
- if($row['id']===$id)
- $deleteIndex=$index;
- if($deleteIndex>=0)
- {
- unset($this->_data[$deleteIndex]);
- $this->saveData();
- }
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $this->DataList->DataSource=$this->Data;
- $this->DataList->dataBind();
- }
- }
-
- public function editItem($sender,$param)
- {
- $this->DataList->SelectedItemIndex=-1;
- $this->DataList->EditItemIndex=$param->Item->ItemIndex;
- $this->DataList->DataSource=$this->Data;
- $this->DataList->dataBind();
- }
-
- public function cancelItem($sender,$param)
- {
- $this->DataList->SelectedItemIndex=-1;
- $this->DataList->EditItemIndex=-1;
- $this->DataList->DataSource=$this->Data;
- $this->DataList->dataBind();
- }
-
- public function updateItem($sender,$param)
- {
- $item=$param->Item;
- $this->updateProduct(
- $this->DataList->DataKeys[$item->ItemIndex],
- $item->ProductName->Text,
- $item->ProductQuantity->Text,
- $item->ProductPrice->Text,
- $item->ProductImported->Checked);
- $this->DataList->EditItemIndex=-1;
- $this->DataList->DataSource=$this->Data;
- $this->DataList->dataBind();
- }
-
- public function deleteItem($sender,$param)
- {
- $this->deleteProduct($this->DataList->DataKeys[$param->Item->ItemIndex]);
- $this->DataList->SelectedItemIndex=-1;
- $this->DataList->EditItemIndex=-1;
- $this->DataList->DataSource=$this->Data;
- $this->DataList->dataBind();
- }
-
- public function selectItem($sender,$param)
- {
- $this->DataList->EditItemIndex=-1;
- $this->DataList->DataSource=$this->Data;
- $this->DataList->dataBind();
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ private $_data=null;
+
+ protected function getData()
+ {
+ if($this->_data===null)
+ $this->loadData();
+ return $this->_data;
+ }
+
+ protected function loadData()
+ {
+ // We use viewstate keep track of data.
+ // In real applications, data should come from database using an SQL SELECT statement.
+ // In the following tabular data, field 'id' is the primary key.
+ // All update and delete operations should come with an 'id' value in order to go through.
+ if(($this->_data=$this->getViewState('Data',null))===null)
+ {
+ $this->_data=array(
+ array('id'=>'ITN001','name'=>'Motherboard','quantity'=>1,'price'=>100.00,'imported'=>true),
+ array('id'=>'ITN002','name'=>'CPU','quantity'=>1,'price'=>150.00,'imported'=>true),
+ array('id'=>'ITN003','name'=>'Harddrive','quantity'=>2,'price'=>80.00,'imported'=>false),
+ array('id'=>'ITN004','name'=>'Sound card','quantity'=>1,'price'=>40.00,'imported'=>false),
+ array('id'=>'ITN005','name'=>'Video card','quantity'=>1,'price'=>150.00,'imported'=>true),
+ array('id'=>'ITN006','name'=>'Keyboard','quantity'=>1,'price'=>20.00,'imported'=>true),
+ array('id'=>'ITN007','name'=>'Monitor','quantity'=>2,'price'=>300.00,'imported'=>false),
+ );
+ $this->saveData();
+ }
+ }
+
+ protected function saveData()
+ {
+ $this->setViewState('Data',$this->_data);
+ }
+
+ protected function updateProduct($id,$name,$quantity,$price,$imported)
+ {
+ // In real applications, data should be saved to database using an SQL UPDATE statement
+ if($this->_data===null)
+ $this->loadData();
+ $updateRow=null;
+ foreach($this->_data as $index=>$row)
+ if($row['id']===$id)
+ $updateRow=&$this->_data[$index];
+ if($updateRow!==null)
+ {
+ $updateRow['name']=$name;
+ $updateRow['quantity']=TPropertyValue::ensureInteger($quantity);
+ $updateRow['price']=TPropertyValue::ensureFloat($price);
+ $updateRow['imported']=TPropertyValue::ensureBoolean($imported);
+ $this->saveData();
+ }
+ }
+
+ protected function deleteProduct($id)
+ {
+ // In real applications, data should be saved to database using an SQL DELETE statement
+ if($this->_data===null)
+ $this->loadData();
+ $deleteIndex=-1;
+ foreach($this->_data as $index=>$row)
+ if($row['id']===$id)
+ $deleteIndex=$index;
+ if($deleteIndex>=0)
+ {
+ unset($this->_data[$deleteIndex]);
+ $this->saveData();
+ }
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $this->DataList->DataSource=$this->Data;
+ $this->DataList->dataBind();
+ }
+ }
+
+ public function editItem($sender,$param)
+ {
+ $this->DataList->SelectedItemIndex=-1;
+ $this->DataList->EditItemIndex=$param->Item->ItemIndex;
+ $this->DataList->DataSource=$this->Data;
+ $this->DataList->dataBind();
+ }
+
+ public function cancelItem($sender,$param)
+ {
+ $this->DataList->SelectedItemIndex=-1;
+ $this->DataList->EditItemIndex=-1;
+ $this->DataList->DataSource=$this->Data;
+ $this->DataList->dataBind();
+ }
+
+ public function updateItem($sender,$param)
+ {
+ $item=$param->Item;
+ $this->updateProduct(
+ $this->DataList->DataKeys[$item->ItemIndex],
+ $item->ProductName->Text,
+ $item->ProductQuantity->Text,
+ $item->ProductPrice->Text,
+ $item->ProductImported->Checked);
+ $this->DataList->EditItemIndex=-1;
+ $this->DataList->DataSource=$this->Data;
+ $this->DataList->dataBind();
+ }
+
+ public function deleteItem($sender,$param)
+ {
+ $this->deleteProduct($this->DataList->DataKeys[$param->Item->ItemIndex]);
+ $this->DataList->SelectedItemIndex=-1;
+ $this->DataList->EditItemIndex=-1;
+ $this->DataList->DataSource=$this->Data;
+ $this->DataList->dataBind();
+ }
+
+ public function selectItem($sender,$param)
+ {
+ $this->DataList->EditItemIndex=-1;
+ $this->DataList->DataSource=$this->Data;
+ $this->DataList->dataBind();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDropDownList/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDropDownList/Home.php
index 0ba728c6..5b16af2c 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDropDownList/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveDropDownList/Home.php
@@ -1,60 +1,60 @@
-<?php
-
-class Home extends TPage
-{
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack && !$this->IsCallback)
- {
- $this->resetClicked(null,null);
- }
- }
-
- protected function collectSelectionResult($input,$output)
- {
- $indices=$input->SelectedIndices;
- $result='';
- foreach($indices as $index)
- {
- $item=$input->Items[$index];
- $result.="(Index: $index, Value: $item->Value, Text: $item->Text)";
- }
- if($result==='')
- $output->Text='Your selection is empty.';
- else
- $output->Text='Your selection is: '.$result;
- }
-
- public function selectionChanged($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->SelectionResult);
- }
-
- public function buttonClicked($sender, $param)
- {
- $data=array();
- for($i = 0; $i <= $this->ddl1->Items->Count; $i++)
- $data[$i]="Item number #".$i;
- $this->ddl1->DataSource=$data;
- $this->ddl1->dataBind();
- $this->label1->Text="Total ".count($data)." items";
- }
-
- public function resetClicked($sender, $param)
- {
- $data=array('item 1','item 2','item 3','item 4');
- $this->ddl2->DataSource=$data;
- $this->ddl2->dataBind();
- $this->label2->Text="DropDownList has been reset";
- }
-
- public function clearClicked($sender, $param)
- {
- $this->ddl2->DataSource=array();
- $this->ddl2->dataBind();
- $this->label2->Text="DropDownList cleared";
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack && !$this->IsCallback)
+ {
+ $this->resetClicked(null,null);
+ }
+ }
+
+ protected function collectSelectionResult($input,$output)
+ {
+ $indices=$input->SelectedIndices;
+ $result='';
+ foreach($indices as $index)
+ {
+ $item=$input->Items[$index];
+ $result.="(Index: $index, Value: $item->Value, Text: $item->Text)";
+ }
+ if($result==='')
+ $output->Text='Your selection is empty.';
+ else
+ $output->Text='Your selection is: '.$result;
+ }
+
+ public function selectionChanged($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->SelectionResult);
+ }
+
+ public function buttonClicked($sender, $param)
+ {
+ $data=array();
+ for($i = 0; $i <= $this->ddl1->Items->Count; $i++)
+ $data[$i]="Item number #".$i;
+ $this->ddl1->DataSource=$data;
+ $this->ddl1->dataBind();
+ $this->label1->Text="Total ".count($data)." items";
+ }
+
+ public function resetClicked($sender, $param)
+ {
+ $data=array('item 1','item 2','item 3','item 4');
+ $this->ddl2->DataSource=$data;
+ $this->ddl2->dataBind();
+ $this->label2->Text="DropDownList has been reset";
+ }
+
+ public function clearClicked($sender, $param)
+ {
+ $this->ddl2->DataSource=array();
+ $this->ddl2->dataBind();
+ $this->label2->Text="DropDownList cleared";
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveFileUpload/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveFileUpload/Home.php
index d5cf990a..29d05a1c 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveFileUpload/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveFileUpload/Home.php
@@ -1,21 +1,21 @@
-<?php
-
-class Home extends TPage
-{
- public function fileUploaded($sender,$param)
- {
- if($sender->HasFile)
- {
- $this->Result->Text="
- You just uploaded a file:
- <br/>
- Name: {$sender->FileName}
- <br/>
- Size: {$sender->FileSize}
- <br/>
- Type: {$sender->FileType}";
- }
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function fileUploaded($sender,$param)
+ {
+ if($sender->HasFile)
+ {
+ $this->Result->Text="
+ You just uploaded a file:
+ <br/>
+ Name: {$sender->FileName}
+ <br/>
+ Size: {$sender->FileSize}
+ <br/>
+ Type: {$sender->FileType}";
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveHyperLink/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveHyperLink/Home.php
index c125d902..45ea1584 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveHyperLink/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveHyperLink/Home.php
@@ -1,26 +1,26 @@
-<?php
-
-class Home extends TPage
-{
- function button1_clicked($sender, $param)
- {
- $this->link1->NavigateUrl = 'http://www.google.com';
- }
-
- function button2_clicked($sender, $param)
- {
- $this->link2->Target = '_self';
- }
-
- function button3_clicked($sender, $param)
- {
- $this->link3->Text = 'PradoSoft.com';
- }
-
- function button4_clicked($sender, $param)
- {
- $img = $this->publishFilePath(dirname(__FILE__).'/hello_world.gif');
- $this->link4->ImageUrl = $img;
- }
-}
+<?php
+
+class Home extends TPage
+{
+ function button1_clicked($sender, $param)
+ {
+ $this->link1->NavigateUrl = 'http://www.google.com';
+ }
+
+ function button2_clicked($sender, $param)
+ {
+ $this->link2->Target = '_self';
+ }
+
+ function button3_clicked($sender, $param)
+ {
+ $this->link3->Text = 'PradoSoft.com';
+ }
+
+ function button4_clicked($sender, $param)
+ {
+ $img = $this->publishFilePath(dirname(__FILE__).'/hello_world.gif');
+ $this->link4->ImageUrl = $img;
+ }
+}
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveImage/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveImage/Home.php
index 3628ad0a..6850fb40 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveImage/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveImage/Home.php
@@ -1,17 +1,17 @@
-<?php
-
-// $Id: Home.php 1405 2006-09-10 01:03:56Z wei $
-class Home extends TPage
-{
- public function buttonClicked($sender, $param)
- {
- $this->imageTest->ImageUrl=$this->publishAsset("hello_world.gif");
- }
-
- public function buttonClicked2($sender, $param)
- {
- $this->imageTest->ImageUrl=$this->publishAsset("hello_world2.gif");
- }
-}
-
+<?php
+
+// $Id: Home.php 1405 2006-09-10 01:03:56Z wei $
+class Home extends TPage
+{
+ public function buttonClicked($sender, $param)
+ {
+ $this->imageTest->ImageUrl=$this->publishAsset("hello_world.gif");
+ }
+
+ public function buttonClicked2($sender, $param)
+ {
+ $this->imageTest->ImageUrl=$this->publishAsset("hello_world2.gif");
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveImageButton/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveImageButton/Home.php
index b1f2c53b..28be10f9 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveImageButton/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveImageButton/Home.php
@@ -1,18 +1,18 @@
-<?php
-
-class Home extends TPage
-{
- public function buttonClicked($sender,$param)
- {
- if($param instanceof TCallbackEventParameter)
- {
- $this->Result2->Text="Callback parameter: $param->CallbackParameter";
- }
- else
- {
- $this->Result->Text="You clicked at ($param->X,$param->Y)";
- }
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function buttonClicked($sender,$param)
+ {
+ if($param instanceof TCallbackEventParameter)
+ {
+ $this->Result2->Text="Callback parameter: $param->CallbackParameter";
+ }
+ else
+ {
+ $this->Result->Text="You clicked at ($param->X,$param->Y)";
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveLinkButton/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveLinkButton/Home.php
index 64e2dede..e929c07b 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveLinkButton/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveLinkButton/Home.php
@@ -1,14 +1,14 @@
-<?php
-
-class Home extends TPage
-{
- public function buttonClicked($sender,$param)
- {
- if($param instanceof TCallbackEventParameter)
- $sender->Text="Callback Parameter: {$param->CallbackParameter}";
- else
- $sender->Text="I'm clicked";
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function buttonClicked($sender,$param)
+ {
+ if($param instanceof TCallbackEventParameter)
+ $sender->Text="Callback Parameter: {$param->CallbackParameter}";
+ else
+ $sender->Text="I'm clicked";
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveListBox/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveListBox/Home.php
index 795e3eca..509e32ab 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveListBox/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveListBox/Home.php
@@ -1,65 +1,65 @@
-<?php
-
-class Home extends TPage
-{
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack && !$this->IsCallback)
- {
- $this->resetClicked(null,null);
- }
- }
-
- protected function collectSelectionResult($input,$output)
- {
- $indices=$input->SelectedIndices;
- $result='';
- foreach($indices as $index)
- {
- $item=$input->Items[$index];
- $result.="(Index: $index, Value: $item->Value, Text: $item->Text)";
- }
- if($result==='')
- $output->Text='Your selection is empty.';
- else
- $output->Text='Your selection is: '.$result;
- }
-
- public function selectionChanged($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->SelectionResult);
- }
-
- public function multiSelectionChanged($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->MSelectionResult);
- }
-
- public function buttonClicked($sender, $param)
- {
- $data=array();
- for($i = 0; $i <= $this->box1->Items->Count; $i++)
- $data[$i]="Item number #".$i;
- $this->box1->DataSource=$data;
- $this->box1->dataBind();
- $this->label1->Text="Total ".count($data)." items";
- }
-
- public function resetClicked($sender, $param)
- {
- $data=array('item 1','item 2','item 3','item 4');
- $this->box2->DataSource=$data;
- $this->box2->dataBind();
- $this->label2->Text="ListBox has been reset";
- }
-
- public function clearClicked($sender, $param)
- {
- $this->box2->DataSource=array();
- $this->box2->dataBind();
- $this->label2->Text="ListBox cleared";
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack && !$this->IsCallback)
+ {
+ $this->resetClicked(null,null);
+ }
+ }
+
+ protected function collectSelectionResult($input,$output)
+ {
+ $indices=$input->SelectedIndices;
+ $result='';
+ foreach($indices as $index)
+ {
+ $item=$input->Items[$index];
+ $result.="(Index: $index, Value: $item->Value, Text: $item->Text)";
+ }
+ if($result==='')
+ $output->Text='Your selection is empty.';
+ else
+ $output->Text='Your selection is: '.$result;
+ }
+
+ public function selectionChanged($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->SelectionResult);
+ }
+
+ public function multiSelectionChanged($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->MSelectionResult);
+ }
+
+ public function buttonClicked($sender, $param)
+ {
+ $data=array();
+ for($i = 0; $i <= $this->box1->Items->Count; $i++)
+ $data[$i]="Item number #".$i;
+ $this->box1->DataSource=$data;
+ $this->box1->dataBind();
+ $this->label1->Text="Total ".count($data)." items";
+ }
+
+ public function resetClicked($sender, $param)
+ {
+ $data=array('item 1','item 2','item 3','item 4');
+ $this->box2->DataSource=$data;
+ $this->box2->dataBind();
+ $this->label2->Text="ListBox has been reset";
+ }
+
+ public function clearClicked($sender, $param)
+ {
+ $this->box2->DataSource=array();
+ $this->box2->dataBind();
+ $this->label2->Text="ListBox cleared";
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveMultiView/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveMultiView/Home.php
index 1a5dbed3..24a240ca 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveMultiView/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveMultiView/Home.php
@@ -1,15 +1,15 @@
-<?php
-
-class Home extends TPage
-{
- public function viewChanged($sender,$param)
- {
- if($this->MultiView->ActiveViewIndex===2)
- {
- $this->Result1->Text="Your text input is: ".$this->Memo->Text;
- $this->Result2->Text="Your color choice is: ".$this->DropDownList->SelectedValue;
- }
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function viewChanged($sender,$param)
+ {
+ if($this->MultiView->ActiveViewIndex===2)
+ {
+ $this->Result1->Text="Your text input is: ".$this->Memo->Text;
+ $this->Result2->Text="Your color choice is: ".$this->DropDownList->SelectedValue;
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActivePanel/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActivePanel/Home.php
index ae174f59..362fdebe 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActivePanel/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActivePanel/Home.php
@@ -1,21 +1,21 @@
-<?php
-
-class Home extends TPage
-{
- public function buttonClicked($sender,$param)
- {
- $this->check1->Checked = !$this->check1->Checked;
- if($this->txt1->Text=="")
- $this->txt1->Text="changes happens";
- else
- $this->txt1->Text="";
- if($this->label1->Text=="")
- $this->label1->Text="label has changed, too";
- else
- $this->label1->Text="";
-
- $this->panel1->render($param->NewWriter);
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function buttonClicked($sender,$param)
+ {
+ $this->check1->Checked = !$this->check1->Checked;
+ if($this->txt1->Text=="")
+ $this->txt1->Text="changes happens";
+ else
+ $this->txt1->Text="";
+ if($this->label1->Text=="")
+ $this->label1->Text="label has changed, too";
+ else
+ $this->label1->Text="";
+
+ $this->panel1->render($param->NewWriter);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRadioButton/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRadioButton/Home.php
index 034d2fcc..a0c2af32 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRadioButton/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRadioButton/Home.php
@@ -1,27 +1,27 @@
-<?php
-
-class Home extends TPage
-{
- public function radiobuttonClicked($sender,$param)
- {
- $sender->Text="I'm clicked";
- }
-
- public function selectRadioButton($sender,$param)
- {
- $selection='';
- if($this->Radio1->Checked)
- $selection.='1';
- if($this->Radio2->Checked)
- $selection.='2';
- if($this->Radio3->Checked)
- $selection.='3';
- if($this->Radio4->Checked)
- $selection.='4';
- if($selection==='')
- $selection='empty';
- $this->Result->Text='Your selection is '.$selection;
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function radiobuttonClicked($sender,$param)
+ {
+ $sender->Text="I'm clicked";
+ }
+
+ public function selectRadioButton($sender,$param)
+ {
+ $selection='';
+ if($this->Radio1->Checked)
+ $selection.='1';
+ if($this->Radio2->Checked)
+ $selection.='2';
+ if($this->Radio3->Checked)
+ $selection.='3';
+ if($this->Radio4->Checked)
+ $selection.='4';
+ if($selection==='')
+ $selection='empty';
+ $this->Result->Text='Your selection is '.$selection;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRadioButtonList/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRadioButtonList/Home.php
index dfa52ce4..1033837c 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRadioButtonList/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRadioButtonList/Home.php
@@ -1,26 +1,26 @@
-<?php
-
-class Home extends TPage
-{
- protected function collectSelectionResult($input,$output)
- {
- $indices=$input->SelectedIndices;
- $result='';
- foreach($indices as $index)
- {
- $item=$input->Items[$index];
- $result.="(Index: $index, Value: $item->Value, Text: $item->Text)";
- }
- if($result==='')
- $output->Text='Your selection is empty.';
- else
- $output->Text='Your selection is: '.$result;
- }
-
- public function selectionChanged($sender,$param)
- {
- $this->collectSelectionResult($this->RadioButtonList,$this->SelectionResult);
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ protected function collectSelectionResult($input,$output)
+ {
+ $indices=$input->SelectedIndices;
+ $result='';
+ foreach($indices as $index)
+ {
+ $item=$input->Items[$index];
+ $result.="(Index: $index, Value: $item->Value, Text: $item->Text)";
+ }
+ if($result==='')
+ $output->Text='Your selection is empty.';
+ else
+ $output->Text='Your selection is: '.$result;
+ }
+
+ public function selectionChanged($sender,$param)
+ {
+ $this->collectSelectionResult($this->RadioButtonList,$this->SelectionResult);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRepeater/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRepeater/Home.php
index f7c8d61c..ae765ee1 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRepeater/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRepeater/Home.php
@@ -1,79 +1,79 @@
-<?php
-
-class Home extends TPage
-{
- protected function getProducts()
- {
- return array(
- array('id'=>'ITN001','name'=>'Motherboard','category'=>'CAT004','price'=>100.00,'imported'=>true),
- array('id'=>'ITN002','name'=>'CPU','category'=>'CAT004','price'=>150.00,'imported'=>true),
- array('id'=>'ITN003','name'=>'Harddrive','category'=>'CAT003','price'=>80.00,'imported'=>true),
- array('id'=>'ITN006','name'=>'Keyboard','category'=>'CAT002','price'=>20.00,'imported'=>false),
- array('id'=>'ITN008','name'=>'CDRW drive','category'=>'CAT003','price'=>40.00,'imported'=>true),
- array('id'=>'ITN009','name'=>'Cooling fan','category'=>'CAT001','price'=>10.00,'imported'=>false),
- array('id'=>'ITN012','name'=>'Floppy drive','category'=>'CAT003','price'=>12.00,'imported'=>false),
- array('id'=>'ITN013','name'=>'CD drive','category'=>'CAT003','price'=>20.00,'imported'=>true),
- array('id'=>'ITN014','name'=>'DVD drive','category'=>'CAT003','price'=>80.00,'imported'=>true),
- array('id'=>'ITN015','name'=>'Mouse pad','category'=>'CAT001','price'=>5.00,'imported'=>false),
- );
- }
-
- protected function getCategories()
- {
- return array(
- array('id'=>'CAT001','name'=>'Accessories'),
- array('id'=>'CAT002','name'=>'Input Devices'),
- array('id'=>'CAT003','name'=>'Drives'),
- array('id'=>'CAT004','name'=>'Barebone'),
- );
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $this->Repeater->DataSource=$this->Products;
- $this->Repeater->dataBind();
- }
- }
-
- public function repeaterDataBound($sender,$param)
- {
- $item=$param->Item;
- if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
- {
- $item->ProductCategory->DataSource=$this->Categories;
- $item->ProductCategory->DataTextField='name';
- $item->ProductCategory->DataValueField='id';
- $item->ProductCategory->dataBind();
- $item->ProductCategory->SelectedValue=$item->DataItem['category'];
- }
- }
-
- public function saveInput($sender,$param)
- {
- if($this->IsValid)
- {
- $index=0;
- $products=$this->Products;
- $data=array();
- foreach($this->Repeater->Items as $item)
- {
- $item=array(
- 'id'=>$products[$index]['id'],
- 'name'=>$item->ProductName->Text,
- 'category'=>$item->ProductCategory->SelectedItem->Text,
- 'price'=>TPropertyValue::ensureFloat($item->ProductPrice->Text),
- 'imported'=>$item->ProductImported->Checked,
- );
- $data[]=$item;
- $index++;
- }
- $this->Repeater2->DataSource=$data;
- $this->Repeater2->dataBind();
- }
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ protected function getProducts()
+ {
+ return array(
+ array('id'=>'ITN001','name'=>'Motherboard','category'=>'CAT004','price'=>100.00,'imported'=>true),
+ array('id'=>'ITN002','name'=>'CPU','category'=>'CAT004','price'=>150.00,'imported'=>true),
+ array('id'=>'ITN003','name'=>'Harddrive','category'=>'CAT003','price'=>80.00,'imported'=>true),
+ array('id'=>'ITN006','name'=>'Keyboard','category'=>'CAT002','price'=>20.00,'imported'=>false),
+ array('id'=>'ITN008','name'=>'CDRW drive','category'=>'CAT003','price'=>40.00,'imported'=>true),
+ array('id'=>'ITN009','name'=>'Cooling fan','category'=>'CAT001','price'=>10.00,'imported'=>false),
+ array('id'=>'ITN012','name'=>'Floppy drive','category'=>'CAT003','price'=>12.00,'imported'=>false),
+ array('id'=>'ITN013','name'=>'CD drive','category'=>'CAT003','price'=>20.00,'imported'=>true),
+ array('id'=>'ITN014','name'=>'DVD drive','category'=>'CAT003','price'=>80.00,'imported'=>true),
+ array('id'=>'ITN015','name'=>'Mouse pad','category'=>'CAT001','price'=>5.00,'imported'=>false),
+ );
+ }
+
+ protected function getCategories()
+ {
+ return array(
+ array('id'=>'CAT001','name'=>'Accessories'),
+ array('id'=>'CAT002','name'=>'Input Devices'),
+ array('id'=>'CAT003','name'=>'Drives'),
+ array('id'=>'CAT004','name'=>'Barebone'),
+ );
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $this->Repeater->DataSource=$this->Products;
+ $this->Repeater->dataBind();
+ }
+ }
+
+ public function repeaterDataBound($sender,$param)
+ {
+ $item=$param->Item;
+ if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
+ {
+ $item->ProductCategory->DataSource=$this->Categories;
+ $item->ProductCategory->DataTextField='name';
+ $item->ProductCategory->DataValueField='id';
+ $item->ProductCategory->dataBind();
+ $item->ProductCategory->SelectedValue=$item->DataItem['category'];
+ }
+ }
+
+ public function saveInput($sender,$param)
+ {
+ if($this->IsValid)
+ {
+ $index=0;
+ $products=$this->Products;
+ $data=array();
+ foreach($this->Repeater->Items as $item)
+ {
+ $item=array(
+ 'id'=>$products[$index]['id'],
+ 'name'=>$item->ProductName->Text,
+ 'category'=>$item->ProductCategory->SelectedItem->Text,
+ 'price'=>TPropertyValue::ensureFloat($item->ProductPrice->Text),
+ 'imported'=>$item->ProductImported->Checked,
+ );
+ $data[]=$item;
+ $index++;
+ }
+ $this->Repeater2->DataSource=$data;
+ $this->Repeater2->dataBind();
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveTableRow/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveTableRow/Home.php
index b056eba8..d74160bb 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveTableRow/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveTableRow/Home.php
@@ -1,22 +1,22 @@
-<?php
-
-// $Id: Home.php 1405 2006-09-10 01:03:56Z wei $
-class Home extends TPage
-{
-
- public function clickCell ($sender, $param)
- {
- $sender->Text .= "<br/>Clicked";
- $this->lblResult->Text='You clicked on cell #'.$param->SelectedCellIndex.' with id='.$sender->id;
- $sender->render($param->NewWriter);
- }
-
- public function clickRow ($sender, $param)
- {
- $sender->BackColor="yellow";
- $this->lblResult->Text='You clicked on row #'.$param->SelectedRowIndex.' with id='.$sender->id;
- $sender->render($param->NewWriter);
- }
-}
-
+<?php
+
+// $Id: Home.php 1405 2006-09-10 01:03:56Z wei $
+class Home extends TPage
+{
+
+ public function clickCell ($sender, $param)
+ {
+ $sender->Text .= "<br/>Clicked";
+ $this->lblResult->Text='You clicked on cell #'.$param->SelectedCellIndex.' with id='.$sender->id;
+ $sender->render($param->NewWriter);
+ }
+
+ public function clickRow ($sender, $param)
+ {
+ $sender->BackColor="yellow";
+ $this->lblResult->Text='You clicked on row #'.$param->SelectedRowIndex.' with id='.$sender->id;
+ $sender->render($param->NewWriter);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TAutoComplete/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TAutoComplete/Home.php
index ca8a9e59..290995c7 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TAutoComplete/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TAutoComplete/Home.php
@@ -1,34 +1,34 @@
-<?php
-// $Id$
-class Home extends TPage
-{
- public function suggestNames($sender,$param) {
- // Get the token
- $token=$param->getToken();
- // Sender is the Suggestions repeater
- $sender->DataSource=$this->getDummyData($token);
- $sender->dataBind();
- }
-
- public function suggestionSelected1($sender,$param) {
- $id=$sender->Suggestions->DataKeys[ $param->selectedIndex ];
- $this->Selection1->Text='Selected ID: '.$id;
- }
-
- public function suggestionSelected2($sender,$param) {
- $id=$sender->Suggestions->DataKeys[ $param->selectedIndex ];
- $this->Selection2->Text='Selected ID: '.$id;
- }
-
- public function getDummyData($token) {
- // You would look for matches to the given token here
- return array(
- array('id'=>1, 'name'=>'John'),
- array('id'=>2, 'name'=>'Paul'),
- array('id'=>3, 'name'=>'George'),
- array('id'=>4, 'name'=>'Ringo')
- );
- }
-}
-
-?>
+<?php
+// $Id$
+class Home extends TPage
+{
+ public function suggestNames($sender,$param) {
+ // Get the token
+ $token=$param->getToken();
+ // Sender is the Suggestions repeater
+ $sender->DataSource=$this->getDummyData($token);
+ $sender->dataBind();
+ }
+
+ public function suggestionSelected1($sender,$param) {
+ $id=$sender->Suggestions->DataKeys[ $param->selectedIndex ];
+ $this->Selection1->Text='Selected ID: '.$id;
+ }
+
+ public function suggestionSelected2($sender,$param) {
+ $id=$sender->Suggestions->DataKeys[ $param->selectedIndex ];
+ $this->Selection2->Text='Selected ID: '.$id;
+ }
+
+ public function getDummyData($token) {
+ // You would look for matches to the given token here
+ return array(
+ array('id'=>1, 'name'=>'John'),
+ array('id'=>2, 'name'=>'Paul'),
+ array('id'=>3, 'name'=>'George'),
+ array('id'=>4, 'name'=>'Ringo')
+ );
+ }
+}
+
+?>
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TCallbackClientScript/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TCallbackClientScript/Home.php
index 500d7987..a8cef26c 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TCallbackClientScript/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TCallbackClientScript/Home.php
@@ -1,29 +1,29 @@
-<?php
-
-// $Id: Home.php -1 $
-class Home extends TPage
-{
- public function buttonCallback ($sender, $param)
- {
- switch($this->radio1->SelectedValue)
- {
- case 1:
- $this->getCallbackClient()->evaluateScript("<script> alert('something'); </script>");
- break;
- case 2:
- $this->getCallbackClient()->check($this->check1, !$this->check1->Checked);
- break;
- case 3:
- $this->getCallbackClient()->hide($this->label1);
- break;
- case 4:
- $this->getCallbackClient()->show($this->label1);
- break;
- case 5:
- $this->getCallbackClient()->focus($this->txt1);
- break;
- }
- }
-}
-
+<?php
+
+// $Id: Home.php -1 $
+class Home extends TPage
+{
+ public function buttonCallback ($sender, $param)
+ {
+ switch($this->radio1->SelectedValue)
+ {
+ case 1:
+ $this->getCallbackClient()->evaluateScript("<script> alert('something'); </script>");
+ break;
+ case 2:
+ $this->getCallbackClient()->check($this->check1, !$this->check1->Checked);
+ break;
+ case 3:
+ $this->getCallbackClient()->hide($this->label1);
+ break;
+ case 4:
+ $this->getCallbackClient()->show($this->label1);
+ break;
+ case 5:
+ $this->getCallbackClient()->focus($this->txt1);
+ break;
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TCallbackClientSide/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TCallbackClientSide/Home.php
index 8dd794fe..f642ccbb 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TCallbackClientSide/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TCallbackClientSide/Home.php
@@ -1,12 +1,12 @@
-<?php
-
-// $Id: Home.php -1 $
-class Home extends TPage
-{
- public function buttonCallback ($sender, $param)
- {
- sleep(5);
- }
-}
-
+<?php
+
+// $Id: Home.php -1 $
+class Home extends TPage
+{
+ public function buttonCallback ($sender, $param)
+ {
+ sleep(5);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TCallbackOptions/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TCallbackOptions/Home.php
index 6f101107..caff7360 100644
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TCallbackOptions/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TCallbackOptions/Home.php
@@ -1,12 +1,12 @@
-<?php
-
-// $Id$
-class Home extends TPage
-{
- public function buttonCallback ($sender, $param)
- {
- sleep(5);
- }
-}
-
+<?php
+
+// $Id$
+class Home extends TPage
+{
+ public function buttonCallback ($sender, $param)
+ {
+ sleep(5);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Advanced/Samples/I18N/Home.php b/demos/quickstart/protected/pages/Advanced/Samples/I18N/Home.php
index cce1ed4e..634c1773 100644
--- a/demos/quickstart/protected/pages/Advanced/Samples/I18N/Home.php
+++ b/demos/quickstart/protected/pages/Advanced/Samples/I18N/Home.php
@@ -1,45 +1,45 @@
-<?php
-
-class Home extends TPage
-{
- /**
- * Change the globalization culture using value from request "lang" parameter.
- */
- public function __construct()
- {
- parent::__construct();
- $lang = $this->Request['lang'];
- $info = new CultureInfo();
- if($info->validCulture($lang)) //only valid lang is permitted
- $this->getApplication()->getGlobalization()->setCulture($lang);
- }
-
- /**
- * Initialize the page with some arbituary data.
- * @param TEventParameter event parameter.
- */
- public function onLoad($param)
- {
- parent::onLoad($param);
- $time1 = $this->Time1;
- $time1->Value = time();
-
- $number2 = $this->Number2;
- $number2->Value = 46412.416;
-
- $this->dataBind();
- }
-
- /**
- * Get the localized current culture name.
- * @return string localized curreny culture name.
- */
- public function getCurrentCulture()
- {
- $culture = $this->getApplication()->getGlobalization()->getCulture();
- $cultureInfo = new CultureInfo($culture);
- return $cultureInfo->getNativeName();
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ /**
+ * Change the globalization culture using value from request "lang" parameter.
+ */
+ public function __construct()
+ {
+ parent::__construct();
+ $lang = $this->Request['lang'];
+ $info = new CultureInfo();
+ if($info->validCulture($lang)) //only valid lang is permitted
+ $this->getApplication()->getGlobalization()->setCulture($lang);
+ }
+
+ /**
+ * Initialize the page with some arbituary data.
+ * @param TEventParameter event parameter.
+ */
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ $time1 = $this->Time1;
+ $time1->Value = time();
+
+ $number2 = $this->Number2;
+ $number2->Value = 46412.416;
+
+ $this->dataBind();
+ }
+
+ /**
+ * Get the localized current culture name.
+ * @return string localized curreny culture name.
+ */
+ public function getCurrentCulture()
+ {
+ $culture = $this->getApplication()->getGlobalization()->getCulture();
+ $cultureInfo = new CultureInfo($culture);
+ return $cultureInfo->getNativeName();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Advanced/Samples/I18N/LanguageList.php b/demos/quickstart/protected/pages/Advanced/Samples/I18N/LanguageList.php
index d3db187d..bdeb5039 100644
--- a/demos/quickstart/protected/pages/Advanced/Samples/I18N/LanguageList.php
+++ b/demos/quickstart/protected/pages/Advanced/Samples/I18N/LanguageList.php
@@ -1,19 +1,19 @@
-<?php
-/**
- * Language List
- * @author $Author: weizhuo $
- * @version $Id$
- * @package prado.examples
- */
-
-/**
- *
- * @author $Author: weizhuo $
- * @version $Id$
- */
-class LanguageList extends TTemplateControl
-{
-
-}
-
+<?php
+/**
+ * Language List
+ * @author $Author: weizhuo $
+ * @version $Id$
+ * @package prado.examples
+ */
+
+/**
+ *
+ * @author $Author: weizhuo $
+ * @version $Id$
+ */
+class LanguageList extends TTemplateControl
+{
+
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox1/Home.php b/demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox1/Home.php
index 2309bd88..cfc01a31 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox1/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox1/Home.php
@@ -1,13 +1,13 @@
-<?php
-
-Prado::using('Application.pages.Controls.Samples.LabeledTextBox1.LabeledTextBox');
-
-class Home extends TPage
-{
- public function buttonClicked($sender,$param)
- {
- $sender->Text=$this->Input->TextBox->Text;
- }
-}
-
+<?php
+
+Prado::using('Application.pages.Controls.Samples.LabeledTextBox1.LabeledTextBox');
+
+class Home extends TPage
+{
+ public function buttonClicked($sender,$param)
+ {
+ $sender->Text=$this->Input->TextBox->Text;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox1/LabeledTextBox.php b/demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox1/LabeledTextBox.php
index 999639d7..0c374b72 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox1/LabeledTextBox.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox1/LabeledTextBox.php
@@ -1,18 +1,18 @@
-<?php
-
-class LabeledTextBox extends TTemplateControl
-{
- public function getLabel()
- {
- $this->ensureChildControls();
- return $this->getRegisteredObject('Label');
- }
-
- public function getTextBox()
- {
- $this->ensureChildControls();
- return $this->getRegisteredObject('TextBox');
- }
-}
-
+<?php
+
+class LabeledTextBox extends TTemplateControl
+{
+ public function getLabel()
+ {
+ $this->ensureChildControls();
+ return $this->getRegisteredObject('Label');
+ }
+
+ public function getTextBox()
+ {
+ $this->ensureChildControls();
+ return $this->getRegisteredObject('TextBox');
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox2/Home.php b/demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox2/Home.php
index 2b18972d..ae3f9e8b 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox2/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox2/Home.php
@@ -1,13 +1,13 @@
-<?php
-
-Prado::using('Application.pages.Controls.Samples.LabeledTextBox2.LabeledTextBox');
-
-class Home extends TPage
-{
- public function buttonClicked($sender,$param)
- {
- $sender->Text=$this->Input->TextBox->Text;
- }
-}
-
+<?php
+
+Prado::using('Application.pages.Controls.Samples.LabeledTextBox2.LabeledTextBox');
+
+class Home extends TPage
+{
+ public function buttonClicked($sender,$param)
+ {
+ $sender->Text=$this->Input->TextBox->Text;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox2/LabeledTextBox.php b/demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox2/LabeledTextBox.php
index fc912003..601cebc6 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox2/LabeledTextBox.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/LabeledTextBox2/LabeledTextBox.php
@@ -1,33 +1,33 @@
-<?php
-
-class LabeledTextBox extends TCompositeControl
-{
- private $_label;
- private $_textbox;
-
- public function createChildControls()
- {
- $this->_label=new TLabel;
- $this->_label->setID('Label');
- $this->getControls()->add($this->_label);
- $this->getControls()->add('&nbsp;');
- $this->_textbox=new TTextBox;
- $this->_textbox->setID('TextBox');
- $this->_label->setForControl('TextBox');
- $this->getControls()->add($this->_textbox);
- }
-
- public function getLabel()
- {
- $this->ensureChildControls();
- return $this->_label;
- }
-
- public function getTextBox()
- {
- $this->ensureChildControls();
- return $this->_textbox;
- }
-}
-
+<?php
+
+class LabeledTextBox extends TCompositeControl
+{
+ private $_label;
+ private $_textbox;
+
+ public function createChildControls()
+ {
+ $this->_label=new TLabel;
+ $this->_label->setID('Label');
+ $this->getControls()->add($this->_label);
+ $this->getControls()->add('&nbsp;');
+ $this->_textbox=new TTextBox;
+ $this->_textbox->setID('TextBox');
+ $this->_label->setForControl('TextBox');
+ $this->getControls()->add($this->_textbox);
+ }
+
+ public function getLabel()
+ {
+ $this->ensureChildControls();
+ return $this->_label;
+ }
+
+ public function getTextBox()
+ {
+ $this->ensureChildControls();
+ return $this->_textbox;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/ResetValidation/Home.php b/demos/quickstart/protected/pages/Controls/Samples/ResetValidation/Home.php
index 88d2dbf2..1c5efbcf 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/ResetValidation/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/ResetValidation/Home.php
@@ -1,8 +1,8 @@
-<?php
-
-class Home extends TPage
-{
-
-}
-
+<?php
+
+class Home extends TPage
+{
+
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TAccordion/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TAccordion/Home.php
index 3da69927..4faaef1c 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TAccordion/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TAccordion/Home.php
@@ -1,17 +1,17 @@
-<?php
-
-class Home extends TPage
-{
- public function onLoad($param)
- {
- parent::onLoad($param);
- $this->lab1->Text="";
- }
-
- public function executeTransaction($sender, $param)
- {
- $this->lab1->Text="executeTransaction ok";
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ $this->lab1->Text="";
+ }
+
+ public function executeTransaction($sender, $param)
+ {
+ $this->lab1->Text="executeTransaction ok";
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TBulletedList/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TBulletedList/Home.php
index d3e04787..93c947fe 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TBulletedList/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TBulletedList/Home.php
@@ -1,12 +1,12 @@
-<?php
-
-class Home extends TPage
-{
- public function buttonClicked($sender,$param)
- {
- $item=$sender->Items[$param->Index];
- $this->Result->Text="You clicked $item->Text : $item->Value.";
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function buttonClicked($sender,$param)
+ {
+ $item=$sender->Items[$param->Index];
+ $this->Result->Text="You clicked $item->Text : $item->Value.";
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TButton/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TButton/Home.php
index f18072f2..3711ca46 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TButton/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TButton/Home.php
@@ -1,14 +1,14 @@
-<?php
-
-class Home extends TPage
-{
- public function buttonClicked($sender,$param)
- {
- if($param instanceof TCommandEventParameter)
- $sender->Text="Name: {$param->CommandName}, Param: {$param->CommandParameter}";
- else
- $sender->Text="I'm clicked";
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function buttonClicked($sender,$param)
+ {
+ if($param instanceof TCommandEventParameter)
+ $sender->Text="Name: {$param->CommandName}, Param: {$param->CommandParameter}";
+ else
+ $sender->Text="I'm clicked";
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TCaptcha/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TCaptcha/Home.php
index 6965bbbd..c88b9378 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TCaptcha/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TCaptcha/Home.php
@@ -1,27 +1,27 @@
-<?php
-
-class Home extends TPage
-{
- public function onInit($param)
- {
- if(!$this->IsPostBack)
- {
- $this->CaptchaList->DataSource=range(0,63);
- $this->CaptchaList->dataBind();
- }
- }
-
- public function regenerateToken($sender,$param)
- {
- $this->Captcha->regenerateToken();
- $this->SubmitButton->Text="Submit";
- }
-
- public function buttonClicked($sender,$param)
- {
- if($this->IsValid)
- $sender->Text="You passed!";
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function onInit($param)
+ {
+ if(!$this->IsPostBack)
+ {
+ $this->CaptchaList->DataSource=range(0,63);
+ $this->CaptchaList->dataBind();
+ }
+ }
+
+ public function regenerateToken($sender,$param)
+ {
+ $this->Captcha->regenerateToken();
+ $this->SubmitButton->Text="Submit";
+ }
+
+ public function buttonClicked($sender,$param)
+ {
+ if($this->IsValid)
+ $sender->Text="You passed!";
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TCheckBox/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TCheckBox/Home.php
index 37eae19b..89fb6852 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TCheckBox/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TCheckBox/Home.php
@@ -1,11 +1,11 @@
-<?php
-
-class Home extends TPage
-{
- public function checkboxClicked($sender,$param)
- {
- $sender->Text="I'm clicked";
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function checkboxClicked($sender,$param)
+ {
+ $sender->Text="I'm clicked";
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TCheckBoxList/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TCheckBoxList/Home.php
index 08c6f3ca..ac7ca8bc 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TCheckBoxList/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TCheckBoxList/Home.php
@@ -1,70 +1,70 @@
-<?php
-
-class Home extends TPage
-{
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $data=array('item 1','item 2','item 3','item 4');
- $this->DBCheckBoxList1->DataSource=$data;
- $this->DBCheckBoxList1->dataBind();
-
- $data=array('key 1'=>'item 1','key 2'=>'item 2',
- 'key 3'=>'item 3','key 4'=>'item 4');
- $this->DBCheckBoxList2->DataSource=$data;
- $this->DBCheckBoxList2->dataBind();
-
- $data=array(
- array('id'=>'001','name'=>'John','age'=>31),
- array('id'=>'002','name'=>'Mary','age'=>30),
- array('id'=>'003','name'=>'Cary','age'=>20));
- $this->DBCheckBoxList3->DataSource=$data;
- $this->DBCheckBoxList3->dataBind();
- }
- }
-
- protected function collectSelectionResult($input,$output)
- {
- $indices=$input->SelectedIndices;
- $result='';
- foreach($indices as $index)
- {
- $item=$input->Items[$index];
- $result.="(Index: $index, Value: $item->Value, Text: $item->Text)";
- }
- if($result==='')
- $output->Text='Your selection is empty.';
- else
- $output->Text='Your selection is: '.$result;
- }
-
- public function buttonClicked($sender,$param)
- {
- $this->collectSelectionResult($this->CheckBoxList,$this->SelectionResult);
- }
-
- public function selectionChanged($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->SelectionResult2);
- }
-
- public function DBCheckBoxList1Changed($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->DBCheckBoxList1Result);
- }
-
- public function DBCheckBoxList2Changed($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->DBCheckBoxList2Result);
- }
-
- public function DBCheckBoxList3Changed($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->DBCheckBoxList3Result);
- }
-
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $data=array('item 1','item 2','item 3','item 4');
+ $this->DBCheckBoxList1->DataSource=$data;
+ $this->DBCheckBoxList1->dataBind();
+
+ $data=array('key 1'=>'item 1','key 2'=>'item 2',
+ 'key 3'=>'item 3','key 4'=>'item 4');
+ $this->DBCheckBoxList2->DataSource=$data;
+ $this->DBCheckBoxList2->dataBind();
+
+ $data=array(
+ array('id'=>'001','name'=>'John','age'=>31),
+ array('id'=>'002','name'=>'Mary','age'=>30),
+ array('id'=>'003','name'=>'Cary','age'=>20));
+ $this->DBCheckBoxList3->DataSource=$data;
+ $this->DBCheckBoxList3->dataBind();
+ }
+ }
+
+ protected function collectSelectionResult($input,$output)
+ {
+ $indices=$input->SelectedIndices;
+ $result='';
+ foreach($indices as $index)
+ {
+ $item=$input->Items[$index];
+ $result.="(Index: $index, Value: $item->Value, Text: $item->Text)";
+ }
+ if($result==='')
+ $output->Text='Your selection is empty.';
+ else
+ $output->Text='Your selection is: '.$result;
+ }
+
+ public function buttonClicked($sender,$param)
+ {
+ $this->collectSelectionResult($this->CheckBoxList,$this->SelectionResult);
+ }
+
+ public function selectionChanged($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->SelectionResult2);
+ }
+
+ public function DBCheckBoxList1Changed($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->DBCheckBoxList1Result);
+ }
+
+ public function DBCheckBoxList2Changed($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->DBCheckBoxList2Result);
+ }
+
+ public function DBCheckBoxList3Changed($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->DBCheckBoxList3Result);
+ }
+
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.php
index d6dded08..cccbf845 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.php
@@ -1,17 +1,17 @@
-<?php
-
-class Home extends TPage
-{
- function check_validate($sender, $params)
- {
- $sender->enabled = $this->check1->checked;
- }
-
- function onPreRender($param)
- {
- //always re-enable the validator2 so as to display the client-side validator
- $this->validator2->enabled=true;
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ function check_validate($sender, $params)
+ {
+ $sender->enabled = $this->check1->checked;
+ }
+
+ function onPreRender($param)
+ {
+ //always re-enable the validator2 so as to display the client-side validator
+ $this->validator2->enabled=true;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TCompareValidator/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TCompareValidator/Home.php
index 88d2dbf2..1c5efbcf 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TCompareValidator/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TCompareValidator/Home.php
@@ -1,8 +1,8 @@
-<?php
-
-class Home extends TPage
-{
-
-}
-
+<?php
+
+class Home extends TPage
+{
+
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TConditional/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TConditional/Home.php
index badbca73..b03361b8 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TConditional/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TConditional/Home.php
@@ -1,7 +1,7 @@
-<?php
-
-class Home extends TPage
-{
-}
-
+<?php
+
+class Home extends TPage
+{
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TCustomValidator/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TCustomValidator/Home.php
index da0d15b2..a3b83ff5 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TCustomValidator/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TCustomValidator/Home.php
@@ -1,18 +1,18 @@
-<?php
-
-class Home extends TPage
-{
- public function serverValidate($sender,$param)
- {
- if($param->Value!=='test')
- $param->IsValid=false;
- }
-
- public function serverValidateNoControl($sender,$param)
- {
- if($this->TextBox4->Text!=='test')
- $param->IsValid=false;
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function serverValidate($sender,$param)
+ {
+ if($param->Value!=='test')
+ $param->IsValid=false;
+ }
+
+ public function serverValidateNoControl($sender,$param)
+ {
+ if($this->TextBox4->Text!=='test')
+ $param->IsValid=false;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample1.php b/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample1.php
index ec78006b..628d0740 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample1.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample1.php
@@ -1,41 +1,41 @@
-<?php
-
-class Sample1 extends TPage
-{
- protected function getData()
- {
- return array(
- array('id'=>'ITN001','name'=>'Motherboard','quantity'=>1,'price'=>100.00,'imported'=>true),
- array('id'=>'ITN002','name'=>'CPU','quantity'=>1,'price'=>150.00,'imported'=>true),
- array('id'=>'ITN003','name'=>'Harddrive','quantity'=>2,'price'=>80.00,'imported'=>true),
- array('id'=>'ITN004','name'=>'Sound card','quantity'=>1,'price'=>40.00,'imported'=>false),
- array('id'=>'ITN005','name'=>'Video card','quantity'=>1,'price'=>150.00,'imported'=>true),
- array('id'=>'ITN006','name'=>'Keyboard','quantity'=>1,'price'=>20.00,'imported'=>false),
- array('id'=>'ITN007','name'=>'Monitor','quantity'=>2,'price'=>300.00,'imported'=>true),
- array('id'=>'ITN008','name'=>'CDRW drive','quantity'=>1,'price'=>40.00,'imported'=>true),
- array('id'=>'ITN009','name'=>'Cooling fan','quantity'=>2,'price'=>10.00,'imported'=>false),
- array('id'=>'ITN010','name'=>'Video camera','quantity'=>20,'price'=>30.00,'imported'=>true),
- array('id'=>'ITN011','name'=>'Card reader','quantity'=>10,'price'=>24.00,'imported'=>true),
- array('id'=>'ITN012','name'=>'Floppy drive','quantity'=>50,'price'=>12.00,'imported'=>false),
- array('id'=>'ITN013','name'=>'CD drive','quantity'=>25,'price'=>20.00,'imported'=>true),
- array('id'=>'ITN014','name'=>'DVD drive','quantity'=>15,'price'=>80.00,'imported'=>true),
- array('id'=>'ITN015','name'=>'Mouse pad','quantity'=>50,'price'=>5.00,'imported'=>false),
- array('id'=>'ITN016','name'=>'Network cable','quantity'=>40,'price'=>8.00,'imported'=>true),
- array('id'=>'ITN017','name'=>'Case','quantity'=>8,'price'=>65.00,'imported'=>false),
- array('id'=>'ITN018','name'=>'Surge protector','quantity'=>45,'price'=>15.00,'imported'=>false),
- array('id'=>'ITN019','name'=>'Speaker','quantity'=>35,'price'=>65.00,'imported'=>false),
- );
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
- }
-}
-
+<?php
+
+class Sample1 extends TPage
+{
+ protected function getData()
+ {
+ return array(
+ array('id'=>'ITN001','name'=>'Motherboard','quantity'=>1,'price'=>100.00,'imported'=>true),
+ array('id'=>'ITN002','name'=>'CPU','quantity'=>1,'price'=>150.00,'imported'=>true),
+ array('id'=>'ITN003','name'=>'Harddrive','quantity'=>2,'price'=>80.00,'imported'=>true),
+ array('id'=>'ITN004','name'=>'Sound card','quantity'=>1,'price'=>40.00,'imported'=>false),
+ array('id'=>'ITN005','name'=>'Video card','quantity'=>1,'price'=>150.00,'imported'=>true),
+ array('id'=>'ITN006','name'=>'Keyboard','quantity'=>1,'price'=>20.00,'imported'=>false),
+ array('id'=>'ITN007','name'=>'Monitor','quantity'=>2,'price'=>300.00,'imported'=>true),
+ array('id'=>'ITN008','name'=>'CDRW drive','quantity'=>1,'price'=>40.00,'imported'=>true),
+ array('id'=>'ITN009','name'=>'Cooling fan','quantity'=>2,'price'=>10.00,'imported'=>false),
+ array('id'=>'ITN010','name'=>'Video camera','quantity'=>20,'price'=>30.00,'imported'=>true),
+ array('id'=>'ITN011','name'=>'Card reader','quantity'=>10,'price'=>24.00,'imported'=>true),
+ array('id'=>'ITN012','name'=>'Floppy drive','quantity'=>50,'price'=>12.00,'imported'=>false),
+ array('id'=>'ITN013','name'=>'CD drive','quantity'=>25,'price'=>20.00,'imported'=>true),
+ array('id'=>'ITN014','name'=>'DVD drive','quantity'=>15,'price'=>80.00,'imported'=>true),
+ array('id'=>'ITN015','name'=>'Mouse pad','quantity'=>50,'price'=>5.00,'imported'=>false),
+ array('id'=>'ITN016','name'=>'Network cable','quantity'=>40,'price'=>8.00,'imported'=>true),
+ array('id'=>'ITN017','name'=>'Case','quantity'=>8,'price'=>65.00,'imported'=>false),
+ array('id'=>'ITN018','name'=>'Surge protector','quantity'=>45,'price'=>15.00,'imported'=>false),
+ array('id'=>'ITN019','name'=>'Speaker','quantity'=>35,'price'=>65.00,'imported'=>false),
+ );
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample2.php b/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample2.php
index a49077b5..026d1a5a 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample2.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample2.php
@@ -1,86 +1,86 @@
-<?php
-
-class Sample2 extends TPage
-{
- protected function getData()
- {
- return array(
- array(
- 'ISBN'=>'0596007124',
- 'title'=>'Head First Design Patterns',
- 'publisher'=>'O\'Reilly Media, Inc.',
- 'price'=>29.67,
- 'instock'=>true,
- 'rating'=>4,
- ),
- array(
- 'ISBN'=>'0201633612',
- 'title'=>'Design Patterns: Elements of Reusable Object-Oriented Software',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>47.04,
- 'instock'=>true,
- 'rating'=>5,
- ),
- array(
- 'ISBN'=>'0321247140',
- 'title'=>'Design Patterns Explained : A New Perspective on Object-Oriented Design',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>37.49,
- 'instock'=>true,
- 'rating'=>4,
- ),
- array(
- 'ISBN'=>'0201485672',
- 'title'=>'Refactoring: Improving the Design of Existing Code',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>47.14,
- 'instock'=>true,
- 'rating'=>3,
- ),
- array(
- 'ISBN'=>'0321213351',
- 'title'=>'Refactoring to Patterns',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>38.49,
- 'instock'=>true,
- 'rating'=>2,
- ),
- array(
- 'ISBN'=>'0735619670',
- 'title'=>'Code Complete',
- 'publisher'=>'Microsoft Press',
- 'price'=>32.99,
- 'instock'=>false,
- 'rating'=>4,
- ),
- array(
- 'ISBN'=>'0321278658',
- 'title'=>'Extreme Programming Explained : Embrace Change',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>34.99,
- 'instock'=>true,
- 'rating'=>3,
- ),
- );
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
- }
-
- public function toggleColumnVisibility($sender,$param)
- {
- foreach($this->DataGrid->Columns as $index=>$column)
- $column->Visible=$sender->Items[$index]->Selected;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-}
-
+<?php
+
+class Sample2 extends TPage
+{
+ protected function getData()
+ {
+ return array(
+ array(
+ 'ISBN'=>'0596007124',
+ 'title'=>'Head First Design Patterns',
+ 'publisher'=>'O\'Reilly Media, Inc.',
+ 'price'=>29.67,
+ 'instock'=>true,
+ 'rating'=>4,
+ ),
+ array(
+ 'ISBN'=>'0201633612',
+ 'title'=>'Design Patterns: Elements of Reusable Object-Oriented Software',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>47.04,
+ 'instock'=>true,
+ 'rating'=>5,
+ ),
+ array(
+ 'ISBN'=>'0321247140',
+ 'title'=>'Design Patterns Explained : A New Perspective on Object-Oriented Design',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>37.49,
+ 'instock'=>true,
+ 'rating'=>4,
+ ),
+ array(
+ 'ISBN'=>'0201485672',
+ 'title'=>'Refactoring: Improving the Design of Existing Code',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>47.14,
+ 'instock'=>true,
+ 'rating'=>3,
+ ),
+ array(
+ 'ISBN'=>'0321213351',
+ 'title'=>'Refactoring to Patterns',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>38.49,
+ 'instock'=>true,
+ 'rating'=>2,
+ ),
+ array(
+ 'ISBN'=>'0735619670',
+ 'title'=>'Code Complete',
+ 'publisher'=>'Microsoft Press',
+ 'price'=>32.99,
+ 'instock'=>false,
+ 'rating'=>4,
+ ),
+ array(
+ 'ISBN'=>'0321278658',
+ 'title'=>'Extreme Programming Explained : Embrace Change',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>34.99,
+ 'instock'=>true,
+ 'rating'=>3,
+ ),
+ );
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+ }
+
+ public function toggleColumnVisibility($sender,$param)
+ {
+ foreach($this->DataGrid->Columns as $index=>$column)
+ $column->Visible=$sender->Items[$index]->Selected;
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample3.php b/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample3.php
index bb18f36b..74085a0f 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample3.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample3.php
@@ -1,190 +1,190 @@
-<?php
-
-class Sample3 extends TPage
-{
- private $_data=null;
-
- protected function getData()
- {
- if($this->_data===null)
- $this->loadData();
- return $this->_data;
- }
-
- protected function loadData()
- {
- // We use viewstate keep track of data.
- // In real applications, data should come from database using an SQL SELECT statement.
- // In the following tabular data, field 'ISBN' is the primary key.
- // All update and delete operations should come with an 'id' value in order to go through.
- if(($this->_data=$this->getViewState('Data',null))===null)
- {
- $this->_data=array(
- array(
- 'ISBN'=>'0596007124',
- 'title'=>'Head First Design Patterns',
- 'publisher'=>'O\'Reilly Media, Inc.',
- 'price'=>29.67,
- 'instock'=>true,
- 'rating'=>4,
- ),
- array(
- 'ISBN'=>'0201633612',
- 'title'=>'Design Patterns: Elements of Reusable Object-Oriented Software',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>47.04,
- 'instock'=>true,
- 'rating'=>5,
- ),
- array(
- 'ISBN'=>'0321247140',
- 'title'=>'Design Patterns Explained : A New Perspective on Object-Oriented Design',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>37.49,
- 'instock'=>true,
- 'rating'=>4,
- ),
- array(
- 'ISBN'=>'0201485672',
- 'title'=>'Refactoring: Improving the Design of Existing Code',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>47.14,
- 'instock'=>true,
- 'rating'=>3,
- ),
- array(
- 'ISBN'=>'0321213351',
- 'title'=>'Refactoring to Patterns',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>38.49,
- 'instock'=>true,
- 'rating'=>2,
- ),
- array(
- 'ISBN'=>'0735619670',
- 'title'=>'Code Complete',
- 'publisher'=>'Microsoft Press',
- 'price'=>32.99,
- 'instock'=>false,
- 'rating'=>4,
- ),
- array(
- 'ISBN'=>'0321278658 ',
- 'title'=>'Extreme Programming Explained : Embrace Change',
- 'publisher'=>'Addison-Wesley Professional',
- 'price'=>34.99,
- 'instock'=>true,
- 'rating'=>3,
- ),
- );
- $this->saveData();
- }
- }
-
- protected function saveData()
- {
- $this->setViewState('Data',$this->_data);
- }
-
- protected function updateBook($isbn,$title,$publisher,$price,$instock,$rating)
- {
- // In real applications, data should be saved to database using an SQL UPDATE statement
- if($this->_data===null)
- $this->loadData();
- $updateRow=null;
- foreach($this->_data as $index=>$row)
- if($row['ISBN']===$isbn)
- $updateRow=&$this->_data[$index];
- if($updateRow!==null)
- {
- $updateRow['title']=$title;
- $updateRow['publisher']=$publisher;
- $updateRow['price']=TPropertyValue::ensureFloat(ltrim($price,'$'));
- $updateRow['instock']=TPropertyValue::ensureBoolean($instock);
- $updateRow['rating']=TPropertyValue::ensureInteger($rating);
- $this->saveData();
- }
- }
-
- protected function deleteBook($isbn)
- {
- // In real applications, data should be saved to database using an SQL DELETE statement
- if($this->_data===null)
- $this->loadData();
- $deleteIndex=-1;
- foreach($this->_data as $index=>$row)
- if($row['ISBN']===$isbn)
- $deleteIndex=$index;
- if($deleteIndex>=0)
- {
- unset($this->_data[$deleteIndex]);
- $this->saveData();
- }
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
- }
-
- public function itemCreated($sender,$param)
- {
- $item=$param->Item;
- if($item->ItemType==='EditItem')
- {
- // set column width of textboxes
- $item->BookTitleColumn->TextBox->Columns=40;
- $item->PriceColumn->TextBox->Columns=5;
- }
- if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem' || $item->ItemType==='EditItem')
- {
- // add an aleart dialog to delete buttons
- $item->DeleteColumn->Button->Attributes->onclick='if(!confirm(\'Are you sure?\')) return false;';
- }
- }
-
- public function editItem($sender,$param)
- {
- $this->DataGrid->EditItemIndex=$param->Item->ItemIndex;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-
- public function saveItem($sender,$param)
- {
- $item=$param->Item;
- $this->updateBook(
- $this->DataGrid->DataKeys[$item->ItemIndex], // ISBN
- $item->BookTitleColumn->TextBox->Text, // title
- $item->PublisherColumn->TextBox->Text, // publisher
- $item->PriceColumn->TextBox->Text, // price
- $item->InStockColumn->CheckBox->Checked, // instock
- $item->RatingColumn->DropDownList->SelectedValue // rating
- );
- $this->DataGrid->EditItemIndex=-1;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-
- public function cancelItem($sender,$param)
- {
- $this->DataGrid->EditItemIndex=-1;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-
- public function deleteItem($sender,$param)
- {
- $this->deleteBook($this->DataGrid->DataKeys[$param->Item->ItemIndex]);
- $this->DataGrid->EditItemIndex=-1;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-}
-
+<?php
+
+class Sample3 extends TPage
+{
+ private $_data=null;
+
+ protected function getData()
+ {
+ if($this->_data===null)
+ $this->loadData();
+ return $this->_data;
+ }
+
+ protected function loadData()
+ {
+ // We use viewstate keep track of data.
+ // In real applications, data should come from database using an SQL SELECT statement.
+ // In the following tabular data, field 'ISBN' is the primary key.
+ // All update and delete operations should come with an 'id' value in order to go through.
+ if(($this->_data=$this->getViewState('Data',null))===null)
+ {
+ $this->_data=array(
+ array(
+ 'ISBN'=>'0596007124',
+ 'title'=>'Head First Design Patterns',
+ 'publisher'=>'O\'Reilly Media, Inc.',
+ 'price'=>29.67,
+ 'instock'=>true,
+ 'rating'=>4,
+ ),
+ array(
+ 'ISBN'=>'0201633612',
+ 'title'=>'Design Patterns: Elements of Reusable Object-Oriented Software',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>47.04,
+ 'instock'=>true,
+ 'rating'=>5,
+ ),
+ array(
+ 'ISBN'=>'0321247140',
+ 'title'=>'Design Patterns Explained : A New Perspective on Object-Oriented Design',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>37.49,
+ 'instock'=>true,
+ 'rating'=>4,
+ ),
+ array(
+ 'ISBN'=>'0201485672',
+ 'title'=>'Refactoring: Improving the Design of Existing Code',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>47.14,
+ 'instock'=>true,
+ 'rating'=>3,
+ ),
+ array(
+ 'ISBN'=>'0321213351',
+ 'title'=>'Refactoring to Patterns',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>38.49,
+ 'instock'=>true,
+ 'rating'=>2,
+ ),
+ array(
+ 'ISBN'=>'0735619670',
+ 'title'=>'Code Complete',
+ 'publisher'=>'Microsoft Press',
+ 'price'=>32.99,
+ 'instock'=>false,
+ 'rating'=>4,
+ ),
+ array(
+ 'ISBN'=>'0321278658 ',
+ 'title'=>'Extreme Programming Explained : Embrace Change',
+ 'publisher'=>'Addison-Wesley Professional',
+ 'price'=>34.99,
+ 'instock'=>true,
+ 'rating'=>3,
+ ),
+ );
+ $this->saveData();
+ }
+ }
+
+ protected function saveData()
+ {
+ $this->setViewState('Data',$this->_data);
+ }
+
+ protected function updateBook($isbn,$title,$publisher,$price,$instock,$rating)
+ {
+ // In real applications, data should be saved to database using an SQL UPDATE statement
+ if($this->_data===null)
+ $this->loadData();
+ $updateRow=null;
+ foreach($this->_data as $index=>$row)
+ if($row['ISBN']===$isbn)
+ $updateRow=&$this->_data[$index];
+ if($updateRow!==null)
+ {
+ $updateRow['title']=$title;
+ $updateRow['publisher']=$publisher;
+ $updateRow['price']=TPropertyValue::ensureFloat(ltrim($price,'$'));
+ $updateRow['instock']=TPropertyValue::ensureBoolean($instock);
+ $updateRow['rating']=TPropertyValue::ensureInteger($rating);
+ $this->saveData();
+ }
+ }
+
+ protected function deleteBook($isbn)
+ {
+ // In real applications, data should be saved to database using an SQL DELETE statement
+ if($this->_data===null)
+ $this->loadData();
+ $deleteIndex=-1;
+ foreach($this->_data as $index=>$row)
+ if($row['ISBN']===$isbn)
+ $deleteIndex=$index;
+ if($deleteIndex>=0)
+ {
+ unset($this->_data[$deleteIndex]);
+ $this->saveData();
+ }
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+ }
+
+ public function itemCreated($sender,$param)
+ {
+ $item=$param->Item;
+ if($item->ItemType==='EditItem')
+ {
+ // set column width of textboxes
+ $item->BookTitleColumn->TextBox->Columns=40;
+ $item->PriceColumn->TextBox->Columns=5;
+ }
+ if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem' || $item->ItemType==='EditItem')
+ {
+ // add an aleart dialog to delete buttons
+ $item->DeleteColumn->Button->Attributes->onclick='if(!confirm(\'Are you sure?\')) return false;';
+ }
+ }
+
+ public function editItem($sender,$param)
+ {
+ $this->DataGrid->EditItemIndex=$param->Item->ItemIndex;
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+
+ public function saveItem($sender,$param)
+ {
+ $item=$param->Item;
+ $this->updateBook(
+ $this->DataGrid->DataKeys[$item->ItemIndex], // ISBN
+ $item->BookTitleColumn->TextBox->Text, // title
+ $item->PublisherColumn->TextBox->Text, // publisher
+ $item->PriceColumn->TextBox->Text, // price
+ $item->InStockColumn->CheckBox->Checked, // instock
+ $item->RatingColumn->DropDownList->SelectedValue // rating
+ );
+ $this->DataGrid->EditItemIndex=-1;
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+
+ public function cancelItem($sender,$param)
+ {
+ $this->DataGrid->EditItemIndex=-1;
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+
+ public function deleteItem($sender,$param)
+ {
+ $this->deleteBook($this->DataGrid->DataKeys[$param->Item->ItemIndex]);
+ $this->DataGrid->EditItemIndex=-1;
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample4.php b/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample4.php
index f9c0804d..ba7cba11 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample4.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample4.php
@@ -1,21 +1,21 @@
-<?php
-
-Prado::using('Application.pages.Controls.Samples.TDataGrid.Sample2');
-
-class Sample4 extends Sample2
-{
- protected function sortData($data,$key)
- {
- $compare = create_function('$a,$b','if ($a["'.$key.'"] == $b["'.$key.'"]) {return 0;}else {return ($a["'.$key.'"] > $b["'.$key.'"]) ? 1 : -1;}');
- usort($data,$compare) ;
- return $data ;
- }
-
- public function sortDataGrid($sender,$param)
- {
- $this->DataGrid->DataSource=$this->sortData($this->Data,$param->SortExpression);
- $this->DataGrid->dataBind();
- }
-}
-
+<?php
+
+Prado::using('Application.pages.Controls.Samples.TDataGrid.Sample2');
+
+class Sample4 extends Sample2
+{
+ protected function sortData($data,$key)
+ {
+ $compare = create_function('$a,$b','if ($a["'.$key.'"] == $b["'.$key.'"]) {return 0;}else {return ($a["'.$key.'"] > $b["'.$key.'"]) ? 1 : -1;}');
+ usort($data,$compare) ;
+ return $data ;
+ }
+
+ public function sortDataGrid($sender,$param)
+ {
+ $this->DataGrid->DataSource=$this->sortData($this->Data,$param->SortExpression);
+ $this->DataGrid->dataBind();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample5.php b/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample5.php
index bdca2ca8..fcf075ea 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample5.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample5.php
@@ -1,68 +1,68 @@
-<?php
-
-Prado::using('Application.pages.Controls.Samples.TDataGrid.Sample1');
-
-class Sample5 extends Sample1
-{
- public function changePage($sender,$param)
- {
- $this->DataGrid->CurrentPageIndex=$param->NewPageIndex;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-
- public function pagerCreated($sender,$param)
- {
- $param->Pager->Controls->insertAt(0,'Page: ');
- }
-
- public function changePagerPosition($sender,$param)
- {
- $top=$sender->Items[0]->Selected;
- $bottom=$sender->Items[1]->Selected;
- if($top && $bottom)
- $position='TopAndBottom';
- else if($top)
- $position='Top';
- else if($bottom)
- $position='Bottom';
- else
- $position='';
- if($position==='')
- $this->DataGrid->PagerStyle->Visible=false;
- else
- {
- $this->DataGrid->PagerStyle->Position=$position;
- $this->DataGrid->PagerStyle->Visible=true;
- }
- }
-
- public function useNumericPager($sender,$param)
- {
- $this->DataGrid->PagerStyle->Mode='Numeric';
- $this->DataGrid->PagerStyle->NextPageText=$this->NextPageText->Text;
- $this->DataGrid->PagerStyle->PrevPageText=$this->PrevPageText->Text;
- $this->DataGrid->PagerStyle->PageButtonCount=$this->PageButtonCount->Text;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-
- public function useNextPrevPager($sender,$param)
- {
- $this->DataGrid->PagerStyle->Mode='NextPrev';
- $this->DataGrid->PagerStyle->NextPageText=$this->NextPageText->Text;
- $this->DataGrid->PagerStyle->PrevPageText=$this->PrevPageText->Text;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-
- public function changePageSize($sender,$param)
- {
- $this->DataGrid->PageSize=TPropertyValue::ensureInteger($this->PageSize->Text);
- $this->DataGrid->CurrentPageIndex=0;
- $this->DataGrid->DataSource=$this->Data;
- $this->DataGrid->dataBind();
- }
-}
-
+<?php
+
+Prado::using('Application.pages.Controls.Samples.TDataGrid.Sample1');
+
+class Sample5 extends Sample1
+{
+ public function changePage($sender,$param)
+ {
+ $this->DataGrid->CurrentPageIndex=$param->NewPageIndex;
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+
+ public function pagerCreated($sender,$param)
+ {
+ $param->Pager->Controls->insertAt(0,'Page: ');
+ }
+
+ public function changePagerPosition($sender,$param)
+ {
+ $top=$sender->Items[0]->Selected;
+ $bottom=$sender->Items[1]->Selected;
+ if($top && $bottom)
+ $position='TopAndBottom';
+ else if($top)
+ $position='Top';
+ else if($bottom)
+ $position='Bottom';
+ else
+ $position='';
+ if($position==='')
+ $this->DataGrid->PagerStyle->Visible=false;
+ else
+ {
+ $this->DataGrid->PagerStyle->Position=$position;
+ $this->DataGrid->PagerStyle->Visible=true;
+ }
+ }
+
+ public function useNumericPager($sender,$param)
+ {
+ $this->DataGrid->PagerStyle->Mode='Numeric';
+ $this->DataGrid->PagerStyle->NextPageText=$this->NextPageText->Text;
+ $this->DataGrid->PagerStyle->PrevPageText=$this->PrevPageText->Text;
+ $this->DataGrid->PagerStyle->PageButtonCount=$this->PageButtonCount->Text;
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+
+ public function useNextPrevPager($sender,$param)
+ {
+ $this->DataGrid->PagerStyle->Mode='NextPrev';
+ $this->DataGrid->PagerStyle->NextPageText=$this->NextPageText->Text;
+ $this->DataGrid->PagerStyle->PrevPageText=$this->PrevPageText->Text;
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+
+ public function changePageSize($sender,$param)
+ {
+ $this->DataGrid->PageSize=TPropertyValue::ensureInteger($this->PageSize->Text);
+ $this->DataGrid->CurrentPageIndex=0;
+ $this->DataGrid->DataSource=$this->Data;
+ $this->DataGrid->dataBind();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample6.php b/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample6.php
index 90e3f7fe..3f24c9ac 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample6.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample6.php
@@ -1,56 +1,56 @@
-<?php
-
-Prado::using('Application.pages.Controls.Samples.TDataGrid.Sample1');
-
-class Sample6 extends Sample1
-{
- /**
- * Returns a subset of data.
- * In MySQL database, this can be replaced by LIMIT clause
- * in an SQL select statement.
- * @param integer the starting index of the row
- * @param integer number of rows to be returned
- * @return array subset of data
- */
- protected function getDataRows($offset,$rows)
- {
- $data=$this->getData();
- $page=array();
- for($i=0;$i<$rows;++$i)
- {
- if($offset+$i<$this->getRowCount())
- $page[$i]=$data[$offset+$i];
- }
- return $page;
- }
-
- /**
- * Returns total number of data rows.
- * In real DB applications, this may be replaced by an SQL select
- * query with count().
- * @return integer total number of data rows
- */
- protected function getRowCount()
- {
- return 19;
- }
-
- public function onLoad($param)
- {
- if(!$this->IsPostBack)
- {
- $this->DataGrid->DataSource=$this->getDataRows(0,$this->DataGrid->PageSize);
- $this->DataGrid->dataBind();
- }
- }
-
- public function changePage($sender,$param)
- {
- $this->DataGrid->CurrentPageIndex=$param->NewPageIndex;
- $offset=$param->NewPageIndex*$this->DataGrid->PageSize;
- $this->DataGrid->DataSource=$this->getDataRows($offset,$this->DataGrid->PageSize);
- $this->DataGrid->dataBind();
- }
-}
-
+<?php
+
+Prado::using('Application.pages.Controls.Samples.TDataGrid.Sample1');
+
+class Sample6 extends Sample1
+{
+ /**
+ * Returns a subset of data.
+ * In MySQL database, this can be replaced by LIMIT clause
+ * in an SQL select statement.
+ * @param integer the starting index of the row
+ * @param integer number of rows to be returned
+ * @return array subset of data
+ */
+ protected function getDataRows($offset,$rows)
+ {
+ $data=$this->getData();
+ $page=array();
+ for($i=0;$i<$rows;++$i)
+ {
+ if($offset+$i<$this->getRowCount())
+ $page[$i]=$data[$offset+$i];
+ }
+ return $page;
+ }
+
+ /**
+ * Returns total number of data rows.
+ * In real DB applications, this may be replaced by an SQL select
+ * query with count().
+ * @return integer total number of data rows
+ */
+ protected function getRowCount()
+ {
+ return 19;
+ }
+
+ public function onLoad($param)
+ {
+ if(!$this->IsPostBack)
+ {
+ $this->DataGrid->DataSource=$this->getDataRows(0,$this->DataGrid->PageSize);
+ $this->DataGrid->dataBind();
+ }
+ }
+
+ public function changePage($sender,$param)
+ {
+ $this->DataGrid->CurrentPageIndex=$param->NewPageIndex;
+ $offset=$param->NewPageIndex*$this->DataGrid->PageSize;
+ $this->DataGrid->DataSource=$this->getDataRows($offset,$this->DataGrid->PageSize);
+ $this->DataGrid->dataBind();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample1.php b/demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample1.php
index 7b8a2ae4..037036f5 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample1.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample1.php
@@ -1,41 +1,41 @@
-<?php
-
-class Sample1 extends TPage
-{
- protected function getData()
- {
- return array(
- array('id'=>'ITN001','name'=>'Motherboard','quantity'=>1,'price'=>100.00,'imported'=>true),
- array('id'=>'ITN002','name'=>'CPU','quantity'=>1,'price'=>150.00,'imported'=>true),
- array('id'=>'ITN003','name'=>'Harddrive','quantity'=>2,'price'=>80.00,'imported'=>true),
- array('id'=>'ITN004','name'=>'Sound card','quantity'=>1,'price'=>40.00,'imported'=>false),
- array('id'=>'ITN005','name'=>'Video card','quantity'=>1,'price'=>150.00,'imported'=>true),
- array('id'=>'ITN006','name'=>'Keyboard','quantity'=>1,'price'=>20.00,'imported'=>false),
- array('id'=>'ITN007','name'=>'Monitor','quantity'=>2,'price'=>300.00,'imported'=>true),
- array('id'=>'ITN008','name'=>'CDRW drive','quantity'=>1,'price'=>40.00,'imported'=>true),
- array('id'=>'ITN009','name'=>'Cooling fan','quantity'=>2,'price'=>10.00,'imported'=>false),
- array('id'=>'ITN010','name'=>'Video camera','quantity'=>20,'price'=>30.00,'imported'=>true),
- array('id'=>'ITN011','name'=>'Card reader','quantity'=>10,'price'=>24.00,'imported'=>true),
- array('id'=>'ITN012','name'=>'Floppy drive','quantity'=>50,'price'=>12.00,'imported'=>false),
- array('id'=>'ITN013','name'=>'CD drive','quantity'=>25,'price'=>20.00,'imported'=>true),
- array('id'=>'ITN014','name'=>'DVD drive','quantity'=>15,'price'=>80.00,'imported'=>true),
- array('id'=>'ITN015','name'=>'Mouse pad','quantity'=>50,'price'=>5.00,'imported'=>false),
- array('id'=>'ITN016','name'=>'Network cable','quantity'=>40,'price'=>8.00,'imported'=>true),
- array('id'=>'ITN017','name'=>'Case','quantity'=>8,'price'=>65.00,'imported'=>false),
- array('id'=>'ITN018','name'=>'Surge protector','quantity'=>45,'price'=>15.00,'imported'=>false),
- array('id'=>'ITN019','name'=>'Speaker','quantity'=>35,'price'=>65.00,'imported'=>false),
- );
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $this->DataList->DataSource=$this->Data;
- $this->DataList->dataBind();
- }
- }
-}
-
+<?php
+
+class Sample1 extends TPage
+{
+ protected function getData()
+ {
+ return array(
+ array('id'=>'ITN001','name'=>'Motherboard','quantity'=>1,'price'=>100.00,'imported'=>true),
+ array('id'=>'ITN002','name'=>'CPU','quantity'=>1,'price'=>150.00,'imported'=>true),
+ array('id'=>'ITN003','name'=>'Harddrive','quantity'=>2,'price'=>80.00,'imported'=>true),
+ array('id'=>'ITN004','name'=>'Sound card','quantity'=>1,'price'=>40.00,'imported'=>false),
+ array('id'=>'ITN005','name'=>'Video card','quantity'=>1,'price'=>150.00,'imported'=>true),
+ array('id'=>'ITN006','name'=>'Keyboard','quantity'=>1,'price'=>20.00,'imported'=>false),
+ array('id'=>'ITN007','name'=>'Monitor','quantity'=>2,'price'=>300.00,'imported'=>true),
+ array('id'=>'ITN008','name'=>'CDRW drive','quantity'=>1,'price'=>40.00,'imported'=>true),
+ array('id'=>'ITN009','name'=>'Cooling fan','quantity'=>2,'price'=>10.00,'imported'=>false),
+ array('id'=>'ITN010','name'=>'Video camera','quantity'=>20,'price'=>30.00,'imported'=>true),
+ array('id'=>'ITN011','name'=>'Card reader','quantity'=>10,'price'=>24.00,'imported'=>true),
+ array('id'=>'ITN012','name'=>'Floppy drive','quantity'=>50,'price'=>12.00,'imported'=>false),
+ array('id'=>'ITN013','name'=>'CD drive','quantity'=>25,'price'=>20.00,'imported'=>true),
+ array('id'=>'ITN014','name'=>'DVD drive','quantity'=>15,'price'=>80.00,'imported'=>true),
+ array('id'=>'ITN015','name'=>'Mouse pad','quantity'=>50,'price'=>5.00,'imported'=>false),
+ array('id'=>'ITN016','name'=>'Network cable','quantity'=>40,'price'=>8.00,'imported'=>true),
+ array('id'=>'ITN017','name'=>'Case','quantity'=>8,'price'=>65.00,'imported'=>false),
+ array('id'=>'ITN018','name'=>'Surge protector','quantity'=>45,'price'=>15.00,'imported'=>false),
+ array('id'=>'ITN019','name'=>'Speaker','quantity'=>35,'price'=>65.00,'imported'=>false),
+ );
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $this->DataList->DataSource=$this->Data;
+ $this->DataList->dataBind();
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample2.php b/demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample2.php
index 9715f5ba..7273dd39 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample2.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample2.php
@@ -1,132 +1,132 @@
-<?php
-
-class Sample2 extends TPage
-{
- private $_data=null;
-
- protected function getData()
- {
- if($this->_data===null)
- $this->loadData();
- return $this->_data;
- }
-
- protected function loadData()
- {
- // We use viewstate keep track of data.
- // In real applications, data should come from database using an SQL SELECT statement.
- // In the following tabular data, field 'id' is the primary key.
- // All update and delete operations should come with an 'id' value in order to go through.
- if(($this->_data=$this->getViewState('Data',null))===null)
- {
- $this->_data=array(
- array('id'=>'ITN001','name'=>'Motherboard','quantity'=>1,'price'=>100.00,'imported'=>true),
- array('id'=>'ITN002','name'=>'CPU','quantity'=>1,'price'=>150.00,'imported'=>true),
- array('id'=>'ITN003','name'=>'Harddrive','quantity'=>2,'price'=>80.00,'imported'=>false),
- array('id'=>'ITN004','name'=>'Sound card','quantity'=>1,'price'=>40.00,'imported'=>false),
- array('id'=>'ITN005','name'=>'Video card','quantity'=>1,'price'=>150.00,'imported'=>true),
- array('id'=>'ITN006','name'=>'Keyboard','quantity'=>1,'price'=>20.00,'imported'=>true),
- array('id'=>'ITN007','name'=>'Monitor','quantity'=>2,'price'=>300.00,'imported'=>false),
- );
- $this->saveData();
- }
- }
-
- protected function saveData()
- {
- $this->setViewState('Data',$this->_data);
- }
-
- protected function updateProduct($id,$name,$quantity,$price,$imported)
- {
- // In real applications, data should be saved to database using an SQL UPDATE statement
- if($this->_data===null)
- $this->loadData();
- $updateRow=null;
- foreach($this->_data as $index=>$row)
- if($row['id']===$id)
- $updateRow=&$this->_data[$index];
- if($updateRow!==null)
- {
- $updateRow['name']=$name;
- $updateRow['quantity']=TPropertyValue::ensureInteger($quantity);
- $updateRow['price']=TPropertyValue::ensureFloat($price);
- $updateRow['imported']=TPropertyValue::ensureBoolean($imported);
- $this->saveData();
- }
- }
-
- protected function deleteProduct($id)
- {
- // In real applications, data should be saved to database using an SQL DELETE statement
- if($this->_data===null)
- $this->loadData();
- $deleteIndex=-1;
- foreach($this->_data as $index=>$row)
- if($row['id']===$id)
- $deleteIndex=$index;
- if($deleteIndex>=0)
- {
- unset($this->_data[$deleteIndex]);
- $this->saveData();
- }
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $this->DataList->DataSource=$this->Data;
- $this->DataList->dataBind();
- }
- }
-
- public function editItem($sender,$param)
- {
- $this->DataList->SelectedItemIndex=-1;
- $this->DataList->EditItemIndex=$param->Item->ItemIndex;
- $this->DataList->DataSource=$this->Data;
- $this->DataList->dataBind();
- }
-
- public function cancelItem($sender,$param)
- {
- $this->DataList->SelectedItemIndex=-1;
- $this->DataList->EditItemIndex=-1;
- $this->DataList->DataSource=$this->Data;
- $this->DataList->dataBind();
- }
-
- public function updateItem($sender,$param)
- {
- $item=$param->Item;
- $this->updateProduct(
- $this->DataList->DataKeys[$item->ItemIndex],
- $item->ProductName->Text,
- $item->ProductQuantity->Text,
- $item->ProductPrice->Text,
- $item->ProductImported->Checked);
- $this->DataList->EditItemIndex=-1;
- $this->DataList->DataSource=$this->Data;
- $this->DataList->dataBind();
- }
-
- public function deleteItem($sender,$param)
- {
- $this->deleteProduct($this->DataList->DataKeys[$param->Item->ItemIndex]);
- $this->DataList->SelectedItemIndex=-1;
- $this->DataList->EditItemIndex=-1;
- $this->DataList->DataSource=$this->Data;
- $this->DataList->dataBind();
- }
-
- public function selectItem($sender,$param)
- {
- $this->DataList->EditItemIndex=-1;
- $this->DataList->DataSource=$this->Data;
- $this->DataList->dataBind();
- }
-}
-
+<?php
+
+class Sample2 extends TPage
+{
+ private $_data=null;
+
+ protected function getData()
+ {
+ if($this->_data===null)
+ $this->loadData();
+ return $this->_data;
+ }
+
+ protected function loadData()
+ {
+ // We use viewstate keep track of data.
+ // In real applications, data should come from database using an SQL SELECT statement.
+ // In the following tabular data, field 'id' is the primary key.
+ // All update and delete operations should come with an 'id' value in order to go through.
+ if(($this->_data=$this->getViewState('Data',null))===null)
+ {
+ $this->_data=array(
+ array('id'=>'ITN001','name'=>'Motherboard','quantity'=>1,'price'=>100.00,'imported'=>true),
+ array('id'=>'ITN002','name'=>'CPU','quantity'=>1,'price'=>150.00,'imported'=>true),
+ array('id'=>'ITN003','name'=>'Harddrive','quantity'=>2,'price'=>80.00,'imported'=>false),
+ array('id'=>'ITN004','name'=>'Sound card','quantity'=>1,'price'=>40.00,'imported'=>false),
+ array('id'=>'ITN005','name'=>'Video card','quantity'=>1,'price'=>150.00,'imported'=>true),
+ array('id'=>'ITN006','name'=>'Keyboard','quantity'=>1,'price'=>20.00,'imported'=>true),
+ array('id'=>'ITN007','name'=>'Monitor','quantity'=>2,'price'=>300.00,'imported'=>false),
+ );
+ $this->saveData();
+ }
+ }
+
+ protected function saveData()
+ {
+ $this->setViewState('Data',$this->_data);
+ }
+
+ protected function updateProduct($id,$name,$quantity,$price,$imported)
+ {
+ // In real applications, data should be saved to database using an SQL UPDATE statement
+ if($this->_data===null)
+ $this->loadData();
+ $updateRow=null;
+ foreach($this->_data as $index=>$row)
+ if($row['id']===$id)
+ $updateRow=&$this->_data[$index];
+ if($updateRow!==null)
+ {
+ $updateRow['name']=$name;
+ $updateRow['quantity']=TPropertyValue::ensureInteger($quantity);
+ $updateRow['price']=TPropertyValue::ensureFloat($price);
+ $updateRow['imported']=TPropertyValue::ensureBoolean($imported);
+ $this->saveData();
+ }
+ }
+
+ protected function deleteProduct($id)
+ {
+ // In real applications, data should be saved to database using an SQL DELETE statement
+ if($this->_data===null)
+ $this->loadData();
+ $deleteIndex=-1;
+ foreach($this->_data as $index=>$row)
+ if($row['id']===$id)
+ $deleteIndex=$index;
+ if($deleteIndex>=0)
+ {
+ unset($this->_data[$deleteIndex]);
+ $this->saveData();
+ }
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $this->DataList->DataSource=$this->Data;
+ $this->DataList->dataBind();
+ }
+ }
+
+ public function editItem($sender,$param)
+ {
+ $this->DataList->SelectedItemIndex=-1;
+ $this->DataList->EditItemIndex=$param->Item->ItemIndex;
+ $this->DataList->DataSource=$this->Data;
+ $this->DataList->dataBind();
+ }
+
+ public function cancelItem($sender,$param)
+ {
+ $this->DataList->SelectedItemIndex=-1;
+ $this->DataList->EditItemIndex=-1;
+ $this->DataList->DataSource=$this->Data;
+ $this->DataList->dataBind();
+ }
+
+ public function updateItem($sender,$param)
+ {
+ $item=$param->Item;
+ $this->updateProduct(
+ $this->DataList->DataKeys[$item->ItemIndex],
+ $item->ProductName->Text,
+ $item->ProductQuantity->Text,
+ $item->ProductPrice->Text,
+ $item->ProductImported->Checked);
+ $this->DataList->EditItemIndex=-1;
+ $this->DataList->DataSource=$this->Data;
+ $this->DataList->dataBind();
+ }
+
+ public function deleteItem($sender,$param)
+ {
+ $this->deleteProduct($this->DataList->DataKeys[$param->Item->ItemIndex]);
+ $this->DataList->SelectedItemIndex=-1;
+ $this->DataList->EditItemIndex=-1;
+ $this->DataList->DataSource=$this->Data;
+ $this->DataList->dataBind();
+ }
+
+ public function selectItem($sender,$param)
+ {
+ $this->DataList->EditItemIndex=-1;
+ $this->DataList->DataSource=$this->Data;
+ $this->DataList->dataBind();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TDataTypeValidator/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TDataTypeValidator/Home.php
index 88d2dbf2..1c5efbcf 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TDataTypeValidator/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TDataTypeValidator/Home.php
@@ -1,8 +1,8 @@
-<?php
-
-class Home extends TPage
-{
-
-}
-
+<?php
+
+class Home extends TPage
+{
+
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TDropDownList/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TDropDownList/Home.php
index 133a797a..74e47b6c 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TDropDownList/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TDropDownList/Home.php
@@ -1,69 +1,69 @@
-<?php
-
-class Home extends TPage
-{
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $data=array('item 1','item 2','item 3','item 4');
- $this->DBDropDownList1->DataSource=$data;
- $this->DBDropDownList1->dataBind();
-
- $data=array('key 1'=>'item 1','key 2'=>'item 2',
- 'key 3'=>'item 3','key 4'=>'item 4');
- $this->DBDropDownList2->DataSource=$data;
- $this->DBDropDownList2->dataBind();
-
- $data=array(
- array('id'=>'001','name'=>'John','age'=>31),
- array('id'=>'002','name'=>'Mary','age'=>30),
- array('id'=>'003','name'=>'Cary','age'=>20));
- $this->DBDropDownList3->DataSource=$data;
- $this->DBDropDownList3->dataBind();
- }
- }
-
- protected function collectSelectionResult($input,$output)
- {
- $indices=$input->SelectedIndices;
- $result='';
- foreach($indices as $index)
- {
- $item=$input->Items[$index];
- $result.="(Index: $index, Value: $item->Value, Text: $item->Text)";
- }
- if($result==='')
- $output->Text='Your selection is empty.';
- else
- $output->Text='Your selection is: '.$result;
- }
-
- public function DBDropDownList1Changed($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->DBDropDownList1Result);
- }
-
- public function DBDropDownList2Changed($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->DBDropDownList2Result);
- }
-
- public function DBDropDownList3Changed($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->DBDropDownList3Result);
- }
-
- public function selectionChanged($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->SelectionResult);
- }
-
- public function buttonClicked($sender,$param)
- {
- $this->collectSelectionResult($this->DropDownList1,$this->SelectionResult2);
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $data=array('item 1','item 2','item 3','item 4');
+ $this->DBDropDownList1->DataSource=$data;
+ $this->DBDropDownList1->dataBind();
+
+ $data=array('key 1'=>'item 1','key 2'=>'item 2',
+ 'key 3'=>'item 3','key 4'=>'item 4');
+ $this->DBDropDownList2->DataSource=$data;
+ $this->DBDropDownList2->dataBind();
+
+ $data=array(
+ array('id'=>'001','name'=>'John','age'=>31),
+ array('id'=>'002','name'=>'Mary','age'=>30),
+ array('id'=>'003','name'=>'Cary','age'=>20));
+ $this->DBDropDownList3->DataSource=$data;
+ $this->DBDropDownList3->dataBind();
+ }
+ }
+
+ protected function collectSelectionResult($input,$output)
+ {
+ $indices=$input->SelectedIndices;
+ $result='';
+ foreach($indices as $index)
+ {
+ $item=$input->Items[$index];
+ $result.="(Index: $index, Value: $item->Value, Text: $item->Text)";
+ }
+ if($result==='')
+ $output->Text='Your selection is empty.';
+ else
+ $output->Text='Your selection is: '.$result;
+ }
+
+ public function DBDropDownList1Changed($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->DBDropDownList1Result);
+ }
+
+ public function DBDropDownList2Changed($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->DBDropDownList2Result);
+ }
+
+ public function DBDropDownList3Changed($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->DBDropDownList3Result);
+ }
+
+ public function selectionChanged($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->SelectionResult);
+ }
+
+ public function buttonClicked($sender,$param)
+ {
+ $this->collectSelectionResult($this->DropDownList1,$this->SelectionResult2);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TEmailAddressValidator/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TEmailAddressValidator/Home.php
index 88d2dbf2..1c5efbcf 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TEmailAddressValidator/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TEmailAddressValidator/Home.php
@@ -1,8 +1,8 @@
-<?php
-
-class Home extends TPage
-{
-
-}
-
+<?php
+
+class Home extends TPage
+{
+
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TFileUpload/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TFileUpload/Home.php
index d5cf990a..29d05a1c 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TFileUpload/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TFileUpload/Home.php
@@ -1,21 +1,21 @@
-<?php
-
-class Home extends TPage
-{
- public function fileUploaded($sender,$param)
- {
- if($sender->HasFile)
- {
- $this->Result->Text="
- You just uploaded a file:
- <br/>
- Name: {$sender->FileName}
- <br/>
- Size: {$sender->FileSize}
- <br/>
- Type: {$sender->FileType}";
- }
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function fileUploaded($sender,$param)
+ {
+ if($sender->HasFile)
+ {
+ $this->Result->Text="
+ You just uploaded a file:
+ <br/>
+ Name: {$sender->FileName}
+ <br/>
+ Size: {$sender->FileSize}
+ <br/>
+ Type: {$sender->FileType}";
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/THtmlArea/Home.php b/demos/quickstart/protected/pages/Controls/Samples/THtmlArea/Home.php
index c56b5229..255a2bf3 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/THtmlArea/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/THtmlArea/Home.php
@@ -1,21 +1,21 @@
-<?php
-
-class Home extends TPage
-{
- public function button1Clicked($sender,$param)
- {
- $this->Result1->Text="You have entered: ".$this->HtmlArea1->Text;
- }
-
- public function button2Clicked($sender,$param)
- {
- $this->Result2->Text="You have entered: ".$this->HtmlArea2->Text;
- }
-
- public function button3Clicked($sender,$param)
- {
- $this->Result3->Text="You have entered: ".$this->HtmlArea3->Text;
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function button1Clicked($sender,$param)
+ {
+ $this->Result1->Text="You have entered: ".$this->HtmlArea1->Text;
+ }
+
+ public function button2Clicked($sender,$param)
+ {
+ $this->Result2->Text="You have entered: ".$this->HtmlArea2->Text;
+ }
+
+ public function button3Clicked($sender,$param)
+ {
+ $this->Result3->Text="You have entered: ".$this->HtmlArea3->Text;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TImageButton/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TImageButton/Home.php
index df61ed82..e30aab2b 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TImageButton/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TImageButton/Home.php
@@ -1,18 +1,18 @@
-<?php
-
-class Home extends TPage
-{
- public function buttonClicked($sender,$param)
- {
- if($param instanceof TCommandEventParameter)
- {
- $this->Result2->Text="Command name: $param->CommandName, Command parameter: $param->CommandParameter";
- }
- else
- {
- $this->Result->Text="You clicked at ($param->X,$param->Y)";
- }
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function buttonClicked($sender,$param)
+ {
+ if($param instanceof TCommandEventParameter)
+ {
+ $this->Result2->Text="Command name: $param->CommandName, Command parameter: $param->CommandParameter";
+ }
+ else
+ {
+ $this->Result->Text="You clicked at ($param->X,$param->Y)";
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TImageMap/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TImageMap/Home.php
index b8e17941..01294c60 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TImageMap/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TImageMap/Home.php
@@ -1,11 +1,11 @@
-<?php
-
-class Home extends TPage
-{
- public function buttonClicked($sender,$param)
- {
- $this->Result->Text="Your post value is : ".$param->PostBackValue;
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function buttonClicked($sender,$param)
+ {
+ $this->Result->Text="Your post value is : ".$param->PostBackValue;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TKeyboard/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TKeyboard/Home.php
index 689f45c8..d725dc06 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TKeyboard/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TKeyboard/Home.php
@@ -1,11 +1,11 @@
-<?php
-
-class Home extends TPage
-{
- public function buttonClicked($sender,$param)
- {
- $this->Result->Text='You have entered "'.$this->PasswordInput->Text.'".';
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function buttonClicked($sender,$param)
+ {
+ $this->Result->Text='You have entered "'.$this->PasswordInput->Text.'".';
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TLinkButton/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TLinkButton/Home.php
index f18072f2..3711ca46 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TLinkButton/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TLinkButton/Home.php
@@ -1,14 +1,14 @@
-<?php
-
-class Home extends TPage
-{
- public function buttonClicked($sender,$param)
- {
- if($param instanceof TCommandEventParameter)
- $sender->Text="Name: {$param->CommandName}, Param: {$param->CommandParameter}";
- else
- $sender->Text="I'm clicked";
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function buttonClicked($sender,$param)
+ {
+ if($param instanceof TCommandEventParameter)
+ $sender->Text="Name: {$param->CommandName}, Param: {$param->CommandParameter}";
+ else
+ $sender->Text="I'm clicked";
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TListBox/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TListBox/Home.php
index a570d38b..9e5add52 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TListBox/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TListBox/Home.php
@@ -1,79 +1,79 @@
-<?php
-
-class Home extends TPage
-{
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $data=array('item 1','item 2','item 3','item 4');
- $this->DBListBox1->DataSource=$data;
- $this->DBListBox1->dataBind();
-
- $data=array('key 1'=>'item 1','key 2'=>'item 2',
- 'key 3'=>'item 3','key 4'=>'item 4');
- $this->DBListBox2->DataSource=$data;
- $this->DBListBox2->dataBind();
-
- $data=array(
- array('id'=>'001','name'=>'John','age'=>31),
- array('id'=>'002','name'=>'Mary','age'=>30),
- array('id'=>'003','name'=>'Cary','age'=>20));
- $this->DBListBox3->DataSource=$data;
- $this->DBListBox3->dataBind();
- }
- }
-
- public function DBListBox1Changed($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->DBListBox1Result);
- }
-
- public function DBListBox2Changed($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->DBListBox2Result);
- }
-
- public function DBListBox3Changed($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->DBListBox3Result);
- }
-
- protected function collectSelectionResult($input,$output)
- {
- $indices=$input->SelectedIndices;
- $result='';
- foreach($indices as $index)
- {
- $item=$input->Items[$index];
- $result.="(Index: $index, Value: $item->Value, Text: $item->Text)";
- }
- if($result==='')
- $output->Text='Your selection is empty.';
- else
- $output->Text='Your selection is: '.$result;
- }
-
- public function selectionChanged($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->SelectionResult);
- }
-
- public function buttonClicked($sender,$param)
- {
- $this->collectSelectionResult($this->ListBox1,$this->SelectionResult2);
- }
-
- public function multiSelectionChanged($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->MultiSelectionResult);
- }
-
- public function buttonClicked2($sender,$param)
- {
- $this->collectSelectionResult($this->ListBox2,$this->MultiSelectionResult2);
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $data=array('item 1','item 2','item 3','item 4');
+ $this->DBListBox1->DataSource=$data;
+ $this->DBListBox1->dataBind();
+
+ $data=array('key 1'=>'item 1','key 2'=>'item 2',
+ 'key 3'=>'item 3','key 4'=>'item 4');
+ $this->DBListBox2->DataSource=$data;
+ $this->DBListBox2->dataBind();
+
+ $data=array(
+ array('id'=>'001','name'=>'John','age'=>31),
+ array('id'=>'002','name'=>'Mary','age'=>30),
+ array('id'=>'003','name'=>'Cary','age'=>20));
+ $this->DBListBox3->DataSource=$data;
+ $this->DBListBox3->dataBind();
+ }
+ }
+
+ public function DBListBox1Changed($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->DBListBox1Result);
+ }
+
+ public function DBListBox2Changed($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->DBListBox2Result);
+ }
+
+ public function DBListBox3Changed($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->DBListBox3Result);
+ }
+
+ protected function collectSelectionResult($input,$output)
+ {
+ $indices=$input->SelectedIndices;
+ $result='';
+ foreach($indices as $index)
+ {
+ $item=$input->Items[$index];
+ $result.="(Index: $index, Value: $item->Value, Text: $item->Text)";
+ }
+ if($result==='')
+ $output->Text='Your selection is empty.';
+ else
+ $output->Text='Your selection is: '.$result;
+ }
+
+ public function selectionChanged($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->SelectionResult);
+ }
+
+ public function buttonClicked($sender,$param)
+ {
+ $this->collectSelectionResult($this->ListBox1,$this->SelectionResult2);
+ }
+
+ public function multiSelectionChanged($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->MultiSelectionResult);
+ }
+
+ public function buttonClicked2($sender,$param)
+ {
+ $this->collectSelectionResult($this->ListBox2,$this->MultiSelectionResult2);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TMultiView/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TMultiView/Home.php
index 1a5dbed3..24a240ca 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TMultiView/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TMultiView/Home.php
@@ -1,15 +1,15 @@
-<?php
-
-class Home extends TPage
-{
- public function viewChanged($sender,$param)
- {
- if($this->MultiView->ActiveViewIndex===2)
- {
- $this->Result1->Text="Your text input is: ".$this->Memo->Text;
- $this->Result2->Text="Your color choice is: ".$this->DropDownList->SelectedValue;
- }
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function viewChanged($sender,$param)
+ {
+ if($this->MultiView->ActiveViewIndex===2)
+ {
+ $this->Result1->Text="Your text input is: ".$this->Memo->Text;
+ $this->Result2->Text="Your color choice is: ".$this->DropDownList->SelectedValue;
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TPager/Sample1.php b/demos/quickstart/protected/pages/Controls/Samples/TPager/Sample1.php
index e5446f60..86563cc1 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TPager/Sample1.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TPager/Sample1.php
@@ -1,82 +1,82 @@
-<?php
-
-class Sample1 extends TPage
-{
- /**
- * Returns total number of data items.
- * In DB-driven applications, this typically requires
- * execution of an SQL statement with COUNT function.
- * Here we simply return a constant number.
- */
- protected function getDataItemCount()
- {
- return 19;
- }
-
- /**
- * Fetches a page of data.
- * In DB-driven applications, this can be achieved by executing
- * an SQL query with LIMIT clause.
- */
- protected function getData($offset,$limit)
- {
- $data=array(
- array('id'=>'ITN001','name'=>'Motherboard','quantity'=>1,'price'=>100.00,'imported'=>true),
- array('id'=>'ITN002','name'=>'CPU','quantity'=>1,'price'=>150.00,'imported'=>true),
- array('id'=>'ITN003','name'=>'Harddrive','quantity'=>2,'price'=>80.00,'imported'=>true),
- array('id'=>'ITN004','name'=>'Sound card','quantity'=>1,'price'=>40.00,'imported'=>false),
- array('id'=>'ITN005','name'=>'Video card','quantity'=>1,'price'=>150.00,'imported'=>true),
- array('id'=>'ITN006','name'=>'Keyboard','quantity'=>1,'price'=>20.00,'imported'=>false),
- array('id'=>'ITN007','name'=>'Monitor','quantity'=>2,'price'=>300.00,'imported'=>true),
- array('id'=>'ITN008','name'=>'CDRW drive','quantity'=>1,'price'=>40.00,'imported'=>true),
- array('id'=>'ITN009','name'=>'Cooling fan','quantity'=>2,'price'=>10.00,'imported'=>false),
- array('id'=>'ITN010','name'=>'Video camera','quantity'=>20,'price'=>30.00,'imported'=>true),
- array('id'=>'ITN011','name'=>'Card reader','quantity'=>10,'price'=>24.00,'imported'=>true),
- array('id'=>'ITN012','name'=>'Floppy drive','quantity'=>50,'price'=>12.00,'imported'=>false),
- array('id'=>'ITN013','name'=>'CD drive','quantity'=>25,'price'=>20.00,'imported'=>true),
- array('id'=>'ITN014','name'=>'DVD drive','quantity'=>15,'price'=>80.00,'imported'=>true),
- array('id'=>'ITN015','name'=>'Mouse pad','quantity'=>50,'price'=>5.00,'imported'=>false),
- array('id'=>'ITN016','name'=>'Network cable','quantity'=>40,'price'=>8.00,'imported'=>true),
- array('id'=>'ITN017','name'=>'Case','quantity'=>8,'price'=>65.00,'imported'=>false),
- array('id'=>'ITN018','name'=>'Surge protector','quantity'=>45,'price'=>15.00,'imported'=>false),
- array('id'=>'ITN019','name'=>'Speaker','quantity'=>35,'price'=>65.00,'imported'=>false),
- );
- return array_slice($data,$offset,$limit);
- }
-
- /**
- * Determines which page of data to be displayed and
- * populates the datalist with the fetched data.
- */
- protected function populateData()
- {
- $offset=$this->DataList->CurrentPageIndex*$this->DataList->PageSize;
- $limit=$this->DataList->PageSize;
- if($offset+$limit>$this->DataList->VirtualItemCount)
- $limit=$this->DataList->VirtualItemCount-$offset;
- $data=$this->getData($offset,$limit);
- $this->DataList->DataSource=$data;
- $this->DataList->dataBind();
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $this->DataList->VirtualItemCount=$this->DataItemCount;
- $this->populateData();
- }
- }
-
- /**
- * Event handler to the OnPageIndexChanged event of pagers.
- */
- public function pageChanged($sender,$param)
- {
- $this->DataList->CurrentPageIndex=$param->NewPageIndex;
- $this->populateData();
- }
-}
-
+<?php
+
+class Sample1 extends TPage
+{
+ /**
+ * Returns total number of data items.
+ * In DB-driven applications, this typically requires
+ * execution of an SQL statement with COUNT function.
+ * Here we simply return a constant number.
+ */
+ protected function getDataItemCount()
+ {
+ return 19;
+ }
+
+ /**
+ * Fetches a page of data.
+ * In DB-driven applications, this can be achieved by executing
+ * an SQL query with LIMIT clause.
+ */
+ protected function getData($offset,$limit)
+ {
+ $data=array(
+ array('id'=>'ITN001','name'=>'Motherboard','quantity'=>1,'price'=>100.00,'imported'=>true),
+ array('id'=>'ITN002','name'=>'CPU','quantity'=>1,'price'=>150.00,'imported'=>true),
+ array('id'=>'ITN003','name'=>'Harddrive','quantity'=>2,'price'=>80.00,'imported'=>true),
+ array('id'=>'ITN004','name'=>'Sound card','quantity'=>1,'price'=>40.00,'imported'=>false),
+ array('id'=>'ITN005','name'=>'Video card','quantity'=>1,'price'=>150.00,'imported'=>true),
+ array('id'=>'ITN006','name'=>'Keyboard','quantity'=>1,'price'=>20.00,'imported'=>false),
+ array('id'=>'ITN007','name'=>'Monitor','quantity'=>2,'price'=>300.00,'imported'=>true),
+ array('id'=>'ITN008','name'=>'CDRW drive','quantity'=>1,'price'=>40.00,'imported'=>true),
+ array('id'=>'ITN009','name'=>'Cooling fan','quantity'=>2,'price'=>10.00,'imported'=>false),
+ array('id'=>'ITN010','name'=>'Video camera','quantity'=>20,'price'=>30.00,'imported'=>true),
+ array('id'=>'ITN011','name'=>'Card reader','quantity'=>10,'price'=>24.00,'imported'=>true),
+ array('id'=>'ITN012','name'=>'Floppy drive','quantity'=>50,'price'=>12.00,'imported'=>false),
+ array('id'=>'ITN013','name'=>'CD drive','quantity'=>25,'price'=>20.00,'imported'=>true),
+ array('id'=>'ITN014','name'=>'DVD drive','quantity'=>15,'price'=>80.00,'imported'=>true),
+ array('id'=>'ITN015','name'=>'Mouse pad','quantity'=>50,'price'=>5.00,'imported'=>false),
+ array('id'=>'ITN016','name'=>'Network cable','quantity'=>40,'price'=>8.00,'imported'=>true),
+ array('id'=>'ITN017','name'=>'Case','quantity'=>8,'price'=>65.00,'imported'=>false),
+ array('id'=>'ITN018','name'=>'Surge protector','quantity'=>45,'price'=>15.00,'imported'=>false),
+ array('id'=>'ITN019','name'=>'Speaker','quantity'=>35,'price'=>65.00,'imported'=>false),
+ );
+ return array_slice($data,$offset,$limit);
+ }
+
+ /**
+ * Determines which page of data to be displayed and
+ * populates the datalist with the fetched data.
+ */
+ protected function populateData()
+ {
+ $offset=$this->DataList->CurrentPageIndex*$this->DataList->PageSize;
+ $limit=$this->DataList->PageSize;
+ if($offset+$limit>$this->DataList->VirtualItemCount)
+ $limit=$this->DataList->VirtualItemCount-$offset;
+ $data=$this->getData($offset,$limit);
+ $this->DataList->DataSource=$data;
+ $this->DataList->dataBind();
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $this->DataList->VirtualItemCount=$this->DataItemCount;
+ $this->populateData();
+ }
+ }
+
+ /**
+ * Event handler to the OnPageIndexChanged event of pagers.
+ */
+ public function pageChanged($sender,$param)
+ {
+ $this->DataList->CurrentPageIndex=$param->NewPageIndex;
+ $this->populateData();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TPanel/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TPanel/Home.php
index d6cf1bd5..1864f380 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TPanel/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TPanel/Home.php
@@ -1,11 +1,11 @@
-<?php
-
-class Home extends TPage
-{
- public function buttonClicked($sender,$param)
- {
- $this->Result->Text="You have clicked on '$sender->Text'.";
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function buttonClicked($sender,$param)
+ {
+ $this->Result->Text="You have clicked on '$sender->Text'.";
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TPlaceHolder/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TPlaceHolder/Home.php
index ecae7876..8987c230 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TPlaceHolder/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TPlaceHolder/Home.php
@@ -1,16 +1,16 @@
-<?php
-
-class Home extends TPage
-{
- public function onInit($param)
- {
- parent::onInit($param);
- $label=new TLabel;
- $label->Text='dynamic';
- $label->BackColor='silver';
- $this->PlaceHolder1->Controls[]=$label;
- $this->PlaceHolder1->Controls[]=' content';
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function onInit($param)
+ {
+ parent::onInit($param);
+ $label=new TLabel;
+ $label->Text='dynamic';
+ $label->BackColor='silver';
+ $this->PlaceHolder1->Controls[]=$label;
+ $this->PlaceHolder1->Controls[]=' content';
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TRadioButton/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TRadioButton/Home.php
index 034d2fcc..a0c2af32 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TRadioButton/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TRadioButton/Home.php
@@ -1,27 +1,27 @@
-<?php
-
-class Home extends TPage
-{
- public function radiobuttonClicked($sender,$param)
- {
- $sender->Text="I'm clicked";
- }
-
- public function selectRadioButton($sender,$param)
- {
- $selection='';
- if($this->Radio1->Checked)
- $selection.='1';
- if($this->Radio2->Checked)
- $selection.='2';
- if($this->Radio3->Checked)
- $selection.='3';
- if($this->Radio4->Checked)
- $selection.='4';
- if($selection==='')
- $selection='empty';
- $this->Result->Text='Your selection is '.$selection;
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function radiobuttonClicked($sender,$param)
+ {
+ $sender->Text="I'm clicked";
+ }
+
+ public function selectRadioButton($sender,$param)
+ {
+ $selection='';
+ if($this->Radio1->Checked)
+ $selection.='1';
+ if($this->Radio2->Checked)
+ $selection.='2';
+ if($this->Radio3->Checked)
+ $selection.='3';
+ if($this->Radio4->Checked)
+ $selection.='4';
+ if($selection==='')
+ $selection='empty';
+ $this->Result->Text='Your selection is '.$selection;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TRadioButtonList/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TRadioButtonList/Home.php
index b45441f9..62b4d7e7 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TRadioButtonList/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TRadioButtonList/Home.php
@@ -1,69 +1,69 @@
-<?php
-
-class Home extends TPage
-{
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $data=array('item 1','item 2','item 3','item 4');
- $this->DBRadioButtonList1->DataSource=$data;
- $this->DBRadioButtonList1->dataBind();
-
- $data=array('key 1'=>'item 1','key 2'=>'item 2',
- 'key 3'=>'item 3','key 4'=>'item 4');
- $this->DBRadioButtonList2->DataSource=$data;
- $this->DBRadioButtonList2->dataBind();
-
- $data=array(
- array('id'=>'001','name'=>'John','age'=>31),
- array('id'=>'002','name'=>'Mary','age'=>30),
- array('id'=>'003','name'=>'Cary','age'=>20));
- $this->DBRadioButtonList3->DataSource=$data;
- $this->DBRadioButtonList3->dataBind();
- }
- }
-
- protected function collectSelectionResult($input,$output)
- {
- $indices=$input->SelectedIndices;
- $result='';
- foreach($indices as $index)
- {
- $item=$input->Items[$index];
- $result.="(Index: $index, Value: $item->Value, Text: $item->Text)";
- }
- if($result==='')
- $output->Text='Your selection is empty.';
- else
- $output->Text='Your selection is: '.$result;
- }
-
- public function buttonClicked($sender,$param)
- {
- $this->collectSelectionResult($this->RadioButtonList,$this->SelectionResult);
- }
-
- public function selectionChanged($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->SelectionResult2);
- }
-
- public function DBRadioButtonList1Changed($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->DBRadioButtonList1Result);
- }
-
- public function DBRadioButtonList2Changed($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->DBRadioButtonList2Result);
- }
-
- public function DBRadioButtonList3Changed($sender,$param)
- {
- $this->collectSelectionResult($sender,$this->DBRadioButtonList3Result);
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $data=array('item 1','item 2','item 3','item 4');
+ $this->DBRadioButtonList1->DataSource=$data;
+ $this->DBRadioButtonList1->dataBind();
+
+ $data=array('key 1'=>'item 1','key 2'=>'item 2',
+ 'key 3'=>'item 3','key 4'=>'item 4');
+ $this->DBRadioButtonList2->DataSource=$data;
+ $this->DBRadioButtonList2->dataBind();
+
+ $data=array(
+ array('id'=>'001','name'=>'John','age'=>31),
+ array('id'=>'002','name'=>'Mary','age'=>30),
+ array('id'=>'003','name'=>'Cary','age'=>20));
+ $this->DBRadioButtonList3->DataSource=$data;
+ $this->DBRadioButtonList3->dataBind();
+ }
+ }
+
+ protected function collectSelectionResult($input,$output)
+ {
+ $indices=$input->SelectedIndices;
+ $result='';
+ foreach($indices as $index)
+ {
+ $item=$input->Items[$index];
+ $result.="(Index: $index, Value: $item->Value, Text: $item->Text)";
+ }
+ if($result==='')
+ $output->Text='Your selection is empty.';
+ else
+ $output->Text='Your selection is: '.$result;
+ }
+
+ public function buttonClicked($sender,$param)
+ {
+ $this->collectSelectionResult($this->RadioButtonList,$this->SelectionResult);
+ }
+
+ public function selectionChanged($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->SelectionResult2);
+ }
+
+ public function DBRadioButtonList1Changed($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->DBRadioButtonList1Result);
+ }
+
+ public function DBRadioButtonList2Changed($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->DBRadioButtonList2Result);
+ }
+
+ public function DBRadioButtonList3Changed($sender,$param)
+ {
+ $this->collectSelectionResult($sender,$this->DBRadioButtonList3Result);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TRangeValidator/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TRangeValidator/Home.php
index 88d2dbf2..1c5efbcf 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TRangeValidator/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TRangeValidator/Home.php
@@ -1,8 +1,8 @@
-<?php
-
-class Home extends TPage
-{
-
-}
-
+<?php
+
+class Home extends TPage
+{
+
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TRegularExpressionValidator/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TRegularExpressionValidator/Home.php
index 88d2dbf2..1c5efbcf 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TRegularExpressionValidator/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TRegularExpressionValidator/Home.php
@@ -1,8 +1,8 @@
-<?php
-
-class Home extends TPage
-{
-
-}
-
+<?php
+
+class Home extends TPage
+{
+
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TRepeater/RegionDisplay.php b/demos/quickstart/protected/pages/Controls/Samples/TRepeater/RegionDisplay.php
index 40d1841e..4f7ab6c2 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TRepeater/RegionDisplay.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TRepeater/RegionDisplay.php
@@ -1,28 +1,28 @@
-<?php
-
-class RegionDisplay extends TRepeaterItemRenderer
-{
- /**
- * This method is invoked when the data is being bound
- * to the parent repeater.
- * At this time, the <b>Data</b> is available which
- * refers to the data row associated with the parent repeater item.
- */
- public function onDataBinding($param)
- {
- parent::onDataBinding($param);
- $this->Repeater->DataSource=$this->Data['detail'];
- $this->Repeater->dataBind();
- }
-
- public function itemCreated($sender,$param)
- {
- static $itemIndex=0;
- $item=$param->Item;
- if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
- $item->Row->BackColor=$itemIndex%2 ? "#BFCFFF" : "#E6ECFF";
- $itemIndex++;
- }
-}
-
+<?php
+
+class RegionDisplay extends TRepeaterItemRenderer
+{
+ /**
+ * This method is invoked when the data is being bound
+ * to the parent repeater.
+ * At this time, the <b>Data</b> is available which
+ * refers to the data row associated with the parent repeater item.
+ */
+ public function onDataBinding($param)
+ {
+ parent::onDataBinding($param);
+ $this->Repeater->DataSource=$this->Data['detail'];
+ $this->Repeater->dataBind();
+ }
+
+ public function itemCreated($sender,$param)
+ {
+ static $itemIndex=0;
+ $item=$param->Item;
+ if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
+ $item->Row->BackColor=$itemIndex%2 ? "#BFCFFF" : "#E6ECFF";
+ $itemIndex++;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample1.php b/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample1.php
index 905a3b8d..c3cff79b 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample1.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample1.php
@@ -1,41 +1,41 @@
-<?php
-
-class Sample1 extends TPage
-{
- protected function getData()
- {
- return array(
- array('id'=>'ITN001','name'=>'Motherboard','quantity'=>1,'price'=>100.00,'imported'=>true),
- array('id'=>'ITN002','name'=>'CPU','quantity'=>1,'price'=>150.00,'imported'=>true),
- array('id'=>'ITN003','name'=>'Harddrive','quantity'=>2,'price'=>80.00,'imported'=>true),
- array('id'=>'ITN004','name'=>'Sound card','quantity'=>1,'price'=>40.00,'imported'=>false),
- array('id'=>'ITN005','name'=>'Video card','quantity'=>1,'price'=>150.00,'imported'=>true),
- array('id'=>'ITN006','name'=>'Keyboard','quantity'=>1,'price'=>20.00,'imported'=>false),
- array('id'=>'ITN007','name'=>'Monitor','quantity'=>2,'price'=>300.00,'imported'=>true),
- array('id'=>'ITN008','name'=>'CDRW drive','quantity'=>1,'price'=>40.00,'imported'=>true),
- array('id'=>'ITN009','name'=>'Cooling fan','quantity'=>2,'price'=>10.00,'imported'=>false),
- array('id'=>'ITN010','name'=>'Video camera','quantity'=>20,'price'=>30.00,'imported'=>true),
- array('id'=>'ITN011','name'=>'Card reader','quantity'=>10,'price'=>24.00,'imported'=>true),
- array('id'=>'ITN012','name'=>'Floppy drive','quantity'=>50,'price'=>12.00,'imported'=>false),
- array('id'=>'ITN013','name'=>'CD drive','quantity'=>25,'price'=>20.00,'imported'=>true),
- array('id'=>'ITN014','name'=>'DVD drive','quantity'=>15,'price'=>80.00,'imported'=>true),
- array('id'=>'ITN015','name'=>'Mouse pad','quantity'=>50,'price'=>5.00,'imported'=>false),
- array('id'=>'ITN016','name'=>'Network cable','quantity'=>40,'price'=>8.00,'imported'=>true),
- array('id'=>'ITN017','name'=>'Case','quantity'=>8,'price'=>65.00,'imported'=>false),
- array('id'=>'ITN018','name'=>'Surge protector','quantity'=>45,'price'=>15.00,'imported'=>false),
- array('id'=>'ITN019','name'=>'Speaker','quantity'=>35,'price'=>65.00,'imported'=>false),
- );
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $this->Repeater->DataSource=$this->getData();
- $this->Repeater->dataBind();
- }
- }
-}
-
+<?php
+
+class Sample1 extends TPage
+{
+ protected function getData()
+ {
+ return array(
+ array('id'=>'ITN001','name'=>'Motherboard','quantity'=>1,'price'=>100.00,'imported'=>true),
+ array('id'=>'ITN002','name'=>'CPU','quantity'=>1,'price'=>150.00,'imported'=>true),
+ array('id'=>'ITN003','name'=>'Harddrive','quantity'=>2,'price'=>80.00,'imported'=>true),
+ array('id'=>'ITN004','name'=>'Sound card','quantity'=>1,'price'=>40.00,'imported'=>false),
+ array('id'=>'ITN005','name'=>'Video card','quantity'=>1,'price'=>150.00,'imported'=>true),
+ array('id'=>'ITN006','name'=>'Keyboard','quantity'=>1,'price'=>20.00,'imported'=>false),
+ array('id'=>'ITN007','name'=>'Monitor','quantity'=>2,'price'=>300.00,'imported'=>true),
+ array('id'=>'ITN008','name'=>'CDRW drive','quantity'=>1,'price'=>40.00,'imported'=>true),
+ array('id'=>'ITN009','name'=>'Cooling fan','quantity'=>2,'price'=>10.00,'imported'=>false),
+ array('id'=>'ITN010','name'=>'Video camera','quantity'=>20,'price'=>30.00,'imported'=>true),
+ array('id'=>'ITN011','name'=>'Card reader','quantity'=>10,'price'=>24.00,'imported'=>true),
+ array('id'=>'ITN012','name'=>'Floppy drive','quantity'=>50,'price'=>12.00,'imported'=>false),
+ array('id'=>'ITN013','name'=>'CD drive','quantity'=>25,'price'=>20.00,'imported'=>true),
+ array('id'=>'ITN014','name'=>'DVD drive','quantity'=>15,'price'=>80.00,'imported'=>true),
+ array('id'=>'ITN015','name'=>'Mouse pad','quantity'=>50,'price'=>5.00,'imported'=>false),
+ array('id'=>'ITN016','name'=>'Network cable','quantity'=>40,'price'=>8.00,'imported'=>true),
+ array('id'=>'ITN017','name'=>'Case','quantity'=>8,'price'=>65.00,'imported'=>false),
+ array('id'=>'ITN018','name'=>'Surge protector','quantity'=>45,'price'=>15.00,'imported'=>false),
+ array('id'=>'ITN019','name'=>'Speaker','quantity'=>35,'price'=>65.00,'imported'=>false),
+ );
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $this->Repeater->DataSource=$this->getData();
+ $this->Repeater->dataBind();
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample2.php b/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample2.php
index e84580a2..803201e9 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample2.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample2.php
@@ -1,79 +1,79 @@
-<?php
-
-class Sample2 extends TPage
-{
- protected function getMasterData()
- {
- return array('North','West','East','South');
- }
-
- protected function getDetailData($region)
- {
- static $data=array(
- 'North'=>array(
- array('name'=>'John','age'=>30,'position'=>'Program Manager'),
- array('name'=>'Edward','age'=>35,'position'=>'Developer'),
- array('name'=>'Walter','age'=>28,'position'=>'Developer'),
- ),
- 'West'=>array(
- array('name'=>'Cary','age'=>31,'position'=>'Senior Manager'),
- array('name'=>'Ted','age'=>25,'position'=>'Developer'),
- array('name'=>'Kevin','age'=>28,'position'=>'Developer'),
- ),
- 'East'=>array(
- array('name'=>'Shawn','age'=>30,'position'=>'Sales Manager'),
- array('name'=>'Larry','age'=>28,'position'=>'Document Writer'),
- ),
- 'South'=>array(
- array('name'=>'King','age'=>30,'position'=>'Program Manager'),
- array('name'=>'Carter','age'=>22,'position'=>'Developer'),
- ),
- );
- return $data[$region];
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $this->Repeater->DataSource=$this->getMasterData();
- $this->Repeater->dataBind();
- }
- }
-
- public function dataBindRepeater2($sender,$param)
- {
- $item=$param->Item;
- if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
- {
- $item->Repeater2->DataSource=$this->getDetailData($item->DataItem);
- $item->Repeater2->dataBind();
- }
- }
-
- public function repeaterItemCreated($sender,$param)
- {
- static $itemIndex=0;
- $item=$param->Item;
- if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
- {
- $item->Cell->BackColor=$itemIndex%2 ? "#6078BF" : "#809FFF";
- $item->Cell->ForeColor='white';
- $itemIndex++;
- }
- }
-
- public function repeater2ItemCreated($sender,$param)
- {
- static $itemIndex=0;
- $item=$param->Item;
- if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
- {
- $item->Row->BackColor=$itemIndex%2 ? "#BFCFFF" : "#E6ECFF";
- $itemIndex++;
- }
- }
-}
-
+<?php
+
+class Sample2 extends TPage
+{
+ protected function getMasterData()
+ {
+ return array('North','West','East','South');
+ }
+
+ protected function getDetailData($region)
+ {
+ static $data=array(
+ 'North'=>array(
+ array('name'=>'John','age'=>30,'position'=>'Program Manager'),
+ array('name'=>'Edward','age'=>35,'position'=>'Developer'),
+ array('name'=>'Walter','age'=>28,'position'=>'Developer'),
+ ),
+ 'West'=>array(
+ array('name'=>'Cary','age'=>31,'position'=>'Senior Manager'),
+ array('name'=>'Ted','age'=>25,'position'=>'Developer'),
+ array('name'=>'Kevin','age'=>28,'position'=>'Developer'),
+ ),
+ 'East'=>array(
+ array('name'=>'Shawn','age'=>30,'position'=>'Sales Manager'),
+ array('name'=>'Larry','age'=>28,'position'=>'Document Writer'),
+ ),
+ 'South'=>array(
+ array('name'=>'King','age'=>30,'position'=>'Program Manager'),
+ array('name'=>'Carter','age'=>22,'position'=>'Developer'),
+ ),
+ );
+ return $data[$region];
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $this->Repeater->DataSource=$this->getMasterData();
+ $this->Repeater->dataBind();
+ }
+ }
+
+ public function dataBindRepeater2($sender,$param)
+ {
+ $item=$param->Item;
+ if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
+ {
+ $item->Repeater2->DataSource=$this->getDetailData($item->DataItem);
+ $item->Repeater2->dataBind();
+ }
+ }
+
+ public function repeaterItemCreated($sender,$param)
+ {
+ static $itemIndex=0;
+ $item=$param->Item;
+ if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
+ {
+ $item->Cell->BackColor=$itemIndex%2 ? "#6078BF" : "#809FFF";
+ $item->Cell->ForeColor='white';
+ $itemIndex++;
+ }
+ }
+
+ public function repeater2ItemCreated($sender,$param)
+ {
+ static $itemIndex=0;
+ $item=$param->Item;
+ if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
+ {
+ $item->Row->BackColor=$itemIndex%2 ? "#BFCFFF" : "#E6ECFF";
+ $itemIndex++;
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample3.php b/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample3.php
index d4f4c8e9..dbaf598f 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample3.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample3.php
@@ -1,79 +1,79 @@
-<?php
-
-class Sample3 extends TPage
-{
- protected function getProducts()
- {
- return array(
- array('id'=>'ITN001','name'=>'Motherboard','category'=>'CAT004','price'=>100.00,'imported'=>true),
- array('id'=>'ITN002','name'=>'CPU','category'=>'CAT004','price'=>150.00,'imported'=>true),
- array('id'=>'ITN003','name'=>'Harddrive','category'=>'CAT003','price'=>80.00,'imported'=>true),
- array('id'=>'ITN006','name'=>'Keyboard','category'=>'CAT002','price'=>20.00,'imported'=>false),
- array('id'=>'ITN008','name'=>'CDRW drive','category'=>'CAT003','price'=>40.00,'imported'=>true),
- array('id'=>'ITN009','name'=>'Cooling fan','category'=>'CAT001','price'=>10.00,'imported'=>false),
- array('id'=>'ITN012','name'=>'Floppy drive','category'=>'CAT003','price'=>12.00,'imported'=>false),
- array('id'=>'ITN013','name'=>'CD drive','category'=>'CAT003','price'=>20.00,'imported'=>true),
- array('id'=>'ITN014','name'=>'DVD drive','category'=>'CAT003','price'=>80.00,'imported'=>true),
- array('id'=>'ITN015','name'=>'Mouse pad','category'=>'CAT001','price'=>5.00,'imported'=>false),
- );
- }
-
- protected function getCategories()
- {
- return array(
- array('id'=>'CAT001','name'=>'Accessories'),
- array('id'=>'CAT002','name'=>'Input Devices'),
- array('id'=>'CAT003','name'=>'Drives'),
- array('id'=>'CAT004','name'=>'Barebone'),
- );
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $this->Repeater->DataSource=$this->Products;
- $this->Repeater->dataBind();
- }
- }
-
- public function repeaterDataBound($sender,$param)
- {
- $item=$param->Item;
- if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
- {
- $item->ProductCategory->DataSource=$this->Categories;
- $item->ProductCategory->DataTextField='name';
- $item->ProductCategory->DataValueField='id';
- $item->ProductCategory->dataBind();
- $item->ProductCategory->SelectedValue=$item->DataItem['category'];
- }
- }
-
- public function saveInput($sender,$param)
- {
- if($this->IsValid)
- {
- $index=0;
- $products=$this->Products;
- $data=array();
- foreach($this->Repeater->Items as $item)
- {
- $item=array(
- 'id'=>$products[$index]['id'],
- 'name'=>$item->ProductName->Text,
- 'category'=>$item->ProductCategory->SelectedItem->Text,
- 'price'=>TPropertyValue::ensureFloat($item->ProductPrice->Text),
- 'imported'=>$item->ProductImported->Checked,
- );
- $data[]=$item;
- $index++;
- }
- $this->Repeater2->DataSource=$data;
- $this->Repeater2->dataBind();
- }
- }
-}
-
+<?php
+
+class Sample3 extends TPage
+{
+ protected function getProducts()
+ {
+ return array(
+ array('id'=>'ITN001','name'=>'Motherboard','category'=>'CAT004','price'=>100.00,'imported'=>true),
+ array('id'=>'ITN002','name'=>'CPU','category'=>'CAT004','price'=>150.00,'imported'=>true),
+ array('id'=>'ITN003','name'=>'Harddrive','category'=>'CAT003','price'=>80.00,'imported'=>true),
+ array('id'=>'ITN006','name'=>'Keyboard','category'=>'CAT002','price'=>20.00,'imported'=>false),
+ array('id'=>'ITN008','name'=>'CDRW drive','category'=>'CAT003','price'=>40.00,'imported'=>true),
+ array('id'=>'ITN009','name'=>'Cooling fan','category'=>'CAT001','price'=>10.00,'imported'=>false),
+ array('id'=>'ITN012','name'=>'Floppy drive','category'=>'CAT003','price'=>12.00,'imported'=>false),
+ array('id'=>'ITN013','name'=>'CD drive','category'=>'CAT003','price'=>20.00,'imported'=>true),
+ array('id'=>'ITN014','name'=>'DVD drive','category'=>'CAT003','price'=>80.00,'imported'=>true),
+ array('id'=>'ITN015','name'=>'Mouse pad','category'=>'CAT001','price'=>5.00,'imported'=>false),
+ );
+ }
+
+ protected function getCategories()
+ {
+ return array(
+ array('id'=>'CAT001','name'=>'Accessories'),
+ array('id'=>'CAT002','name'=>'Input Devices'),
+ array('id'=>'CAT003','name'=>'Drives'),
+ array('id'=>'CAT004','name'=>'Barebone'),
+ );
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $this->Repeater->DataSource=$this->Products;
+ $this->Repeater->dataBind();
+ }
+ }
+
+ public function repeaterDataBound($sender,$param)
+ {
+ $item=$param->Item;
+ if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
+ {
+ $item->ProductCategory->DataSource=$this->Categories;
+ $item->ProductCategory->DataTextField='name';
+ $item->ProductCategory->DataValueField='id';
+ $item->ProductCategory->dataBind();
+ $item->ProductCategory->SelectedValue=$item->DataItem['category'];
+ }
+ }
+
+ public function saveInput($sender,$param)
+ {
+ if($this->IsValid)
+ {
+ $index=0;
+ $products=$this->Products;
+ $data=array();
+ foreach($this->Repeater->Items as $item)
+ {
+ $item=array(
+ 'id'=>$products[$index]['id'],
+ 'name'=>$item->ProductName->Text,
+ 'category'=>$item->ProductCategory->SelectedItem->Text,
+ 'price'=>TPropertyValue::ensureFloat($item->ProductPrice->Text),
+ 'imported'=>$item->ProductImported->Checked,
+ );
+ $data[]=$item;
+ $index++;
+ }
+ $this->Repeater2->DataSource=$data;
+ $this->Repeater2->dataBind();
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample4.php b/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample4.php
index aabab157..fb0e4922 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample4.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample4.php
@@ -1,37 +1,37 @@
-<?php
-
-Prado::using('System.Collections.TDummyDataSource');
-
-class Sample4 extends TPage
-{
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- // use a dummy data source to create 3 repeater items
- $this->Repeater->DataSource=new TDummyDataSource(3);
- $this->Repeater->dataBind();
- }
- }
-
- public function itemCreated($sender,$param)
- {
- // $param->Item refers to the newly created repeater item
- $param->Item->Style="width:300px; margin:10px; margin-left:0px";
- }
-
- public function buttonClicked($sender,$param)
- {
- $links=array();
- foreach($this->Repeater->Items as $textBox)
- {
- if($textBox->Text!=='')
- $links[]=$textBox->Text;
- }
- $this->Repeater2->DataSource=$links;
- $this->Repeater2->dataBind();
- }
-}
-
+<?php
+
+Prado::using('System.Collections.TDummyDataSource');
+
+class Sample4 extends TPage
+{
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ // use a dummy data source to create 3 repeater items
+ $this->Repeater->DataSource=new TDummyDataSource(3);
+ $this->Repeater->dataBind();
+ }
+ }
+
+ public function itemCreated($sender,$param)
+ {
+ // $param->Item refers to the newly created repeater item
+ $param->Item->Style="width:300px; margin:10px; margin-left:0px";
+ }
+
+ public function buttonClicked($sender,$param)
+ {
+ $links=array();
+ foreach($this->Repeater->Items as $textBox)
+ {
+ if($textBox->Text!=='')
+ $links[]=$textBox->Text;
+ }
+ $this->Repeater2->DataSource=$links;
+ $this->Repeater2->dataBind();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample5.php b/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample5.php
index 60beb30e..de6e5bd9 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample5.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TRepeater/Sample5.php
@@ -1,52 +1,52 @@
-<?php
-
-class Sample5 extends TPage
-{
- protected function getData()
- {
- return array(
- array(
- 'name'=>'North',
- 'detail'=>array(
- array('name'=>'John','age'=>30,'position'=>'Program Manager'),
- array('name'=>'Edward','age'=>35,'position'=>'Developer'),
- array('name'=>'Walter','age'=>28,'position'=>'Developer'),
- ),
- ),
- array(
- 'name'=>'West',
- 'detail'=>array(
- array('name'=>'Cary','age'=>31,'position'=>'Senior Manager'),
- array('name'=>'Ted','age'=>25,'position'=>'Developer'),
- array('name'=>'Kevin','age'=>28,'position'=>'Developer'),
- ),
- ),
- array(
- 'name'=>'East',
- 'detail'=>array(
- array('name'=>'Shawn','age'=>30,'position'=>'Sales Manager'),
- array('name'=>'Larry','age'=>28,'position'=>'Document Writer'),
- ),
- ),
- array(
- 'name'=>'South',
- 'detail'=>array(
- array('name'=>'King','age'=>30,'position'=>'Program Manager'),
- array('name'=>'Carter','age'=>22,'position'=>'Developer'),
- ),
- ),
- );
- }
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- if(!$this->IsPostBack)
- {
- $this->Repeater->DataSource=$this->getData();
- $this->Repeater->dataBind();
- }
- }
-}
-
+<?php
+
+class Sample5 extends TPage
+{
+ protected function getData()
+ {
+ return array(
+ array(
+ 'name'=>'North',
+ 'detail'=>array(
+ array('name'=>'John','age'=>30,'position'=>'Program Manager'),
+ array('name'=>'Edward','age'=>35,'position'=>'Developer'),
+ array('name'=>'Walter','age'=>28,'position'=>'Developer'),
+ ),
+ ),
+ array(
+ 'name'=>'West',
+ 'detail'=>array(
+ array('name'=>'Cary','age'=>31,'position'=>'Senior Manager'),
+ array('name'=>'Ted','age'=>25,'position'=>'Developer'),
+ array('name'=>'Kevin','age'=>28,'position'=>'Developer'),
+ ),
+ ),
+ array(
+ 'name'=>'East',
+ 'detail'=>array(
+ array('name'=>'Shawn','age'=>30,'position'=>'Sales Manager'),
+ array('name'=>'Larry','age'=>28,'position'=>'Document Writer'),
+ ),
+ ),
+ array(
+ 'name'=>'South',
+ 'detail'=>array(
+ array('name'=>'King','age'=>30,'position'=>'Program Manager'),
+ array('name'=>'Carter','age'=>22,'position'=>'Developer'),
+ ),
+ ),
+ );
+ }
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ if(!$this->IsPostBack)
+ {
+ $this->Repeater->DataSource=$this->getData();
+ $this->Repeater->dataBind();
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TRequiredFieldValidator/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TRequiredFieldValidator/Home.php
index 88d2dbf2..1c5efbcf 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TRequiredFieldValidator/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TRequiredFieldValidator/Home.php
@@ -1,8 +1,8 @@
-<?php
-
-class Home extends TPage
-{
-
-}
-
+<?php
+
+class Home extends TPage
+{
+
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TSlider/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TSlider/Home.php
index c1c8a711..228fd727 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TSlider/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TSlider/Home.php
@@ -1,9 +1,9 @@
<?php
class Home extends TPage
-{
- public function onInit ($param)
- {
- parent::onInit($param);
+{
+ public function onInit ($param)
+ {
+ parent::onInit($param);
}
public function submit1 ($sender, $param)
{
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TTabPanel/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TTabPanel/Home.php
index badbca73..b03361b8 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TTabPanel/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TTabPanel/Home.php
@@ -1,7 +1,7 @@
-<?php
-
-class Home extends TPage
-{
-}
-
+<?php
+
+class Home extends TPage
+{
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TTable/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TTable/Home.php
index fa5efe38..505a6ded 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TTable/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TTable/Home.php
@@ -1,33 +1,33 @@
-<?php
-
-class Home extends TPage
-{
- public function onLoad($param)
- {
- $this->Table->GridLines='Both';
-
- $row=new TTableRow;
- $this->Table->Rows[]=$row;
-
- $cell=new TTableHeaderCell;
- $cell->Text='Header 1';
- $row->Cells[]=$cell;
-
- $cell=new TTableHeaderCell;
- $cell->Text='Header 2';
- $row->Cells[]=$cell;
-
- $row=new TTableRow;
- $this->Table->Rows[]=$row;
-
- $cell=new TTableCell;
- $cell->Text='Cell 1';
- $row->Cells[]=$cell;
-
- $cell=new TTableCell;
- $cell->Text='Cell 2';
- $row->Cells[]=$cell;
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function onLoad($param)
+ {
+ $this->Table->GridLines='Both';
+
+ $row=new TTableRow;
+ $this->Table->Rows[]=$row;
+
+ $cell=new TTableHeaderCell;
+ $cell->Text='Header 1';
+ $row->Cells[]=$cell;
+
+ $cell=new TTableHeaderCell;
+ $cell->Text='Header 2';
+ $row->Cells[]=$cell;
+
+ $row=new TTableRow;
+ $this->Table->Rows[]=$row;
+
+ $cell=new TTableCell;
+ $cell->Text='Cell 1';
+ $row->Cells[]=$cell;
+
+ $cell=new TTableCell;
+ $cell->Text='Cell 2';
+ $row->Cells[]=$cell;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TTextBox/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TTextBox/Home.php
index f8aa0825..2ac0cb3f 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TTextBox/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TTextBox/Home.php
@@ -1,22 +1,22 @@
-<?php
-
-class Home extends TPage
-{
- public function onLoad($param)
- {
- parent::onLoad($param);
- $this->Output->dataBind();
- }
-
- public function textChanged($sender,$param)
- {
- $sender->Text="text changed";
- }
-
- public function submitText($sender,$param)
- {
- $this->TextBox1->Text="You just entered '".$this->TextBox1->Text."'.";
- }
-}
-
+<?php
+
+class Home extends TPage
+{
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ $this->Output->dataBind();
+ }
+
+ public function textChanged($sender,$param)
+ {
+ $sender->Text="text changed";
+ }
+
+ public function submitText($sender,$param)
+ {
+ $this->TextBox1->Text="You just entered '".$this->TextBox1->Text."'.";
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TValidationSummary/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TValidationSummary/Home.php
index 88d2dbf2..1c5efbcf 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TValidationSummary/Home.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TValidationSummary/Home.php
@@ -1,8 +1,8 @@
-<?php
-
-class Home extends TPage
-{
-
-}
-
+<?php
+
+class Home extends TPage
+{
+
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample1.php b/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample1.php
index 20440e62..5d9bcb1d 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample1.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample1.php
@@ -1,11 +1,11 @@
-<?php
-
-class Sample1 extends TPage
-{
- public function wizardCompleted($sender,$param)
- {
- $this->Result->Text="Your favorite color is: " . $this->DropDownList1->SelectedValue;
- }
-}
-
+<?php
+
+class Sample1 extends TPage
+{
+ public function wizardCompleted($sender,$param)
+ {
+ $this->Result->Text="Your favorite color is: " . $this->DropDownList1->SelectedValue;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample2.php b/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample2.php
index a508fbf3..61572075 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample2.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample2.php
@@ -1,11 +1,11 @@
-<?php
-
-class Sample2 extends TPage
-{
- public function wizardCompleted($sender,$param)
- {
- $this->Result->Text="Your favorite color is: " . $this->DropDownList1->SelectedValue;
- }
-}
-
+<?php
+
+class Sample2 extends TPage
+{
+ public function wizardCompleted($sender,$param)
+ {
+ $this->Result->Text="Your favorite color is: " . $this->DropDownList1->SelectedValue;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample3.php b/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample3.php
index d85d041a..6e767cd4 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample3.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample3.php
@@ -1,25 +1,25 @@
-<?php
-
-class Sample3 extends TPage
-{
- public function wizard3Completed($sender,$param)
- {
- if($this->StudentCheckBox->Checked)
- {
- $str="You are a college student.<br/>";
- $str.="You are in major: ".$this->DropDownList11->SelectedValue."<br/>";
- $str.="Your favorite sport is: ".$this->DropDownList22->SelectedValue;
- }
- else
- $str="Your favorite sport is: ".$this->DropDownList22->SelectedValue;
- $this->Wizard3Result->Text=$str;
- }
-
- public function wizard3NextStep($sender,$param)
- {
- if($param->CurrentStepIndex===0 && !$this->StudentCheckBox->Checked)
- $this->Wizard3->ActiveStepIndex=2;
- }
-}
-
+<?php
+
+class Sample3 extends TPage
+{
+ public function wizard3Completed($sender,$param)
+ {
+ if($this->StudentCheckBox->Checked)
+ {
+ $str="You are a college student.<br/>";
+ $str.="You are in major: ".$this->DropDownList11->SelectedValue."<br/>";
+ $str.="Your favorite sport is: ".$this->DropDownList22->SelectedValue;
+ }
+ else
+ $str="Your favorite sport is: ".$this->DropDownList22->SelectedValue;
+ $this->Wizard3Result->Text=$str;
+ }
+
+ public function wizard3NextStep($sender,$param)
+ {
+ if($param->CurrentStepIndex===0 && !$this->StudentCheckBox->Checked)
+ $this->Wizard3->ActiveStepIndex=2;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample4.php b/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample4.php
index 6b79698d..c7317654 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample4.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample4.php
@@ -1,11 +1,11 @@
-<?php
-
-class Sample4 extends TPage
-{
- public function wizardCompleted($sender,$param)
- {
- $this->Result->Text="Your favorite color is: " . $this->DropDownList1->SelectedValue;
- }
-}
-
+<?php
+
+class Sample4 extends TPage
+{
+ public function wizardCompleted($sender,$param)
+ {
+ $this->Result->Text="Your favorite color is: " . $this->DropDownList1->SelectedValue;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample5.php b/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample5.php
index 4ab6d08b..4fb64395 100644
--- a/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample5.php
+++ b/demos/quickstart/protected/pages/Controls/Samples/TWizard/Sample5.php
@@ -1,12 +1,12 @@
-<?php
-
-class Sample5 extends TPage
-{
- public function wizardCompleted($sender,$param)
- {
- $this->Result1->Text="Your favorite color is: " . $this->DropDownList1->SelectedValue;
- $this->Result2->Text="Your favorite sport is: " . $this->Step2->DropDownList2->SelectedValue;
- }
-}
-
+<?php
+
+class Sample5 extends TPage
+{
+ public function wizardCompleted($sender,$param)
+ {
+ $this->Result1->Text="Your favorite color is: " . $this->DropDownList1->SelectedValue;
+ $this->Result2->Text="Your favorite sport is: " . $this->Step2->DropDownList2->SelectedValue;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Database/Samples/Scaffold/Home.php b/demos/quickstart/protected/pages/Database/Samples/Scaffold/Home.php
index 45d72f1f..4801baed 100644
--- a/demos/quickstart/protected/pages/Database/Samples/Scaffold/Home.php
+++ b/demos/quickstart/protected/pages/Database/Samples/Scaffold/Home.php
@@ -1,33 +1,33 @@
-<?php
-
-Prado::using('System.Data.ActiveRecord.TActiveRecord');
-Prado::using('System.Data.ActiveRecord.Scaffold.TScaffoldView');
-
-class AddressRecord extends TActiveRecord
-{
- const TABLE='addresses';
-
- public $id;
- public $username;
- public $phone;
-
- //for demo, we use static db here
- //otherwise we should use TActiveRecordConfig in application.xml
- private static $_db;
- public function getDbConnection()
- {
- if(self::$_db===null)
- {
- $file = dirname(__FILE__).'/sqlite.db';
- self::$_db = new TDbConnection("sqlite:{$file}");
- }
- return self::$_db;
- }
-}
-
-class Home extends TPage
-{
-
-}
-
+<?php
+
+Prado::using('System.Data.ActiveRecord.TActiveRecord');
+Prado::using('System.Data.ActiveRecord.Scaffold.TScaffoldView');
+
+class AddressRecord extends TActiveRecord
+{
+ const TABLE='addresses';
+
+ public $id;
+ public $username;
+ public $phone;
+
+ //for demo, we use static db here
+ //otherwise we should use TActiveRecordConfig in application.xml
+ private static $_db;
+ public function getDbConnection()
+ {
+ if(self::$_db===null)
+ {
+ $file = dirname(__FILE__).'/sqlite.db';
+ self::$_db = new TDbConnection("sqlite:{$file}");
+ }
+ return self::$_db;
+ }
+}
+
+class Home extends TPage
+{
+
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Fundamentals/Samples/Hangman/Home.php b/demos/quickstart/protected/pages/Fundamentals/Samples/Hangman/Home.php
index 711600aa..6aff0859 100644
--- a/demos/quickstart/protected/pages/Fundamentals/Samples/Hangman/Home.php
+++ b/demos/quickstart/protected/pages/Fundamentals/Samples/Hangman/Home.php
@@ -1,121 +1,121 @@
-<?php
-class Home extends TPage
-{
- public function onLoad($param)
- {
- if (!$this->IsPostBack)
- $this->GameMultiView->ActiveView=$this->IntroView;
- }
-
- public function selectLevel($sender,$param)
- {
- if(($selection=$this->LevelSelection->SelectedValue)==='')
- {
- $this->LevelError->Visible=true;
- return;
- }
- else
- $this->Level=TPropertyValue::ensureInteger($selection);
- $this->Word=$this->generateWord();
- $this->GuessWord=str_repeat('_',strlen($this->Word));
- $this->Misses=0;
- $this->GameMultiView->ActiveView=$this->GuessView;
- }
-
- public function guessWord($sender,$param)
- {
- $sender->Enabled=false;
- $letter=$sender->Text;
- $word=$this->Word;
- $guessWord=$this->GuessWord;
- $pos=0;
- $success=false;
- while(($pos=strpos($word,$letter,$pos))!==false)
- {
- $guessWord[$pos]=$letter;
- $success=true;
- $pos++;
- }
- if($success)
- {
- $this->GuessWord=$guessWord;
- if($guessWord===$word)
- $this->GameMultiView->ActiveView=$this->WinView;
- }
- else
- {
- $this->Misses++;
- if($this->Misses>=$this->Level)
- $this->giveUp(null,null);
- }
- }
-
- public function giveUp($sender,$param)
- {
- $this->GameMultiView->ActiveView=$this->LoseView;
- }
-
- public function startAgain($sender,$param)
- {
- $this->GameMultiView->ActiveView=$this->IntroView;
- $this->LevelError->Visible=false;
- for($letter=65;$letter<=90;++$letter)
- {
- $guessLetter='Guess'.chr($letter);
- $this->$guessLetter->Enabled=true;
- }
- }
-
- protected function generateWord()
- {
- $wordFile=dirname(__FILE__).'/words.txt';
- $words=preg_split("/[\s,]+/",file_get_contents($wordFile));
- do
- {
- $i=rand(0,count($words)-1);
- $word=$words[$i];
- } while(strlen($word)<5 || !preg_match('/^[a-z]*$/i',$word));
- return strtoupper($word);
- }
-
- public function setLevel($value)
- {
- $this->setViewState('Level',$value,0);
- }
-
- public function getLevel()
- {
- return $this->getViewState('Level',0);
- }
-
- public function setWord($value)
- {
- $this->setViewState('Word',$value,'');
- }
-
- public function getWord()
- {
- return $this->getViewState('Word','');
- }
-
- public function getGuessWord()
- {
- return $this->getViewState('GuessWord','');
- }
-
- public function setGuessWord($value)
- {
- $this->setViewState('GuessWord',$value,'');
- }
-
- public function setMisses($value)
- {
- $this->setViewState('Misses',$value,0);
- }
-
- public function getMisses()
- {
- return $this->getViewState('Misses',0);
- }
-}
+<?php
+class Home extends TPage
+{
+ public function onLoad($param)
+ {
+ if (!$this->IsPostBack)
+ $this->GameMultiView->ActiveView=$this->IntroView;
+ }
+
+ public function selectLevel($sender,$param)
+ {
+ if(($selection=$this->LevelSelection->SelectedValue)==='')
+ {
+ $this->LevelError->Visible=true;
+ return;
+ }
+ else
+ $this->Level=TPropertyValue::ensureInteger($selection);
+ $this->Word=$this->generateWord();
+ $this->GuessWord=str_repeat('_',strlen($this->Word));
+ $this->Misses=0;
+ $this->GameMultiView->ActiveView=$this->GuessView;
+ }
+
+ public function guessWord($sender,$param)
+ {
+ $sender->Enabled=false;
+ $letter=$sender->Text;
+ $word=$this->Word;
+ $guessWord=$this->GuessWord;
+ $pos=0;
+ $success=false;
+ while(($pos=strpos($word,$letter,$pos))!==false)
+ {
+ $guessWord[$pos]=$letter;
+ $success=true;
+ $pos++;
+ }
+ if($success)
+ {
+ $this->GuessWord=$guessWord;
+ if($guessWord===$word)
+ $this->GameMultiView->ActiveView=$this->WinView;
+ }
+ else
+ {
+ $this->Misses++;
+ if($this->Misses>=$this->Level)
+ $this->giveUp(null,null);
+ }
+ }
+
+ public function giveUp($sender,$param)
+ {
+ $this->GameMultiView->ActiveView=$this->LoseView;
+ }
+
+ public function startAgain($sender,$param)
+ {
+ $this->GameMultiView->ActiveView=$this->IntroView;
+ $this->LevelError->Visible=false;
+ for($letter=65;$letter<=90;++$letter)
+ {
+ $guessLetter='Guess'.chr($letter);
+ $this->$guessLetter->Enabled=true;
+ }
+ }
+
+ protected function generateWord()
+ {
+ $wordFile=dirname(__FILE__).'/words.txt';
+ $words=preg_split("/[\s,]+/",file_get_contents($wordFile));
+ do
+ {
+ $i=rand(0,count($words)-1);
+ $word=$words[$i];
+ } while(strlen($word)<5 || !preg_match('/^[a-z]*$/i',$word));
+ return strtoupper($word);
+ }
+
+ public function setLevel($value)
+ {
+ $this->setViewState('Level',$value,0);
+ }
+
+ public function getLevel()
+ {
+ return $this->getViewState('Level',0);
+ }
+
+ public function setWord($value)
+ {
+ $this->setViewState('Word',$value,'');
+ }
+
+ public function getWord()
+ {
+ return $this->getViewState('Word','');
+ }
+
+ public function getGuessWord()
+ {
+ return $this->getViewState('GuessWord','');
+ }
+
+ public function setGuessWord($value)
+ {
+ $this->setViewState('GuessWord',$value,'');
+ }
+
+ public function setMisses($value)
+ {
+ $this->setViewState('Misses',$value,0);
+ }
+
+ public function getMisses()
+ {
+ return $this->getViewState('Misses',0);
+ }
+}
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/Search.php b/demos/quickstart/protected/pages/Search.php
index d2dfa7da..c36eba54 100644
--- a/demos/quickstart/protected/pages/Search.php
+++ b/demos/quickstart/protected/pages/Search.php
@@ -1,56 +1,56 @@
-<?php
-/*
- * Created on 7/05/2006
- */
-
-class Search extends TPage
-{
- public function onLoad($param)
- {
- if(!$this->IsPostBack && strlen($text = $this->search->getText()) > 0)
- {
- $quickstart = $this->getApplication()->getModule("quickstart_search");
- $hits_1 = $quickstart->find($text);
- $this->quickstart_results->setDataSource($hits_1);
- $this->quickstart_results->dataBind();
-
- $this->emptyResult->setVisible(!count($hits_1));
- }
- }
-
- public function highlightSearch($text)
- {
- $words = str_word_count($text, 1);
- $keys = str_word_count(strtolower($this->search->getText()),1);
- $where = 0;
- $t = count($words);
- for($i = 0; $i<$t; $i++)
- {
- if($this->containsKeys(strtolower($words[$i]), $keys))
- {
- $words[$i] = '<span class="searchterm">'.$words[$i].'</span>';
- $where = $i;
- break;
- }
- }
-
- $min = $where - 15 < 0 ? 0 : $where - 15;
- $max = $where + 15 > $t ? $t : $where + 15;
- $subtext = array_splice($words, $min, $max-$min);
- $prefix = $min == 0 ? '' : '...';
- $suffix = $max == $t ? '' : '...';
- return $prefix.implode(' ', $subtext).$suffix;
- }
-
- protected function containsKeys($word, $keys)
- {
- foreach($keys as $key)
- {
- if(is_int(strpos($word, $key)))
- return true;
- }
- return false;
- }
-}
-
+<?php
+/*
+ * Created on 7/05/2006
+ */
+
+class Search extends TPage
+{
+ public function onLoad($param)
+ {
+ if(!$this->IsPostBack && strlen($text = $this->search->getText()) > 0)
+ {
+ $quickstart = $this->getApplication()->getModule("quickstart_search");
+ $hits_1 = $quickstart->find($text);
+ $this->quickstart_results->setDataSource($hits_1);
+ $this->quickstart_results->dataBind();
+
+ $this->emptyResult->setVisible(!count($hits_1));
+ }
+ }
+
+ public function highlightSearch($text)
+ {
+ $words = str_word_count($text, 1);
+ $keys = str_word_count(strtolower($this->search->getText()),1);
+ $where = 0;
+ $t = count($words);
+ for($i = 0; $i<$t; $i++)
+ {
+ if($this->containsKeys(strtolower($words[$i]), $keys))
+ {
+ $words[$i] = '<span class="searchterm">'.$words[$i].'</span>';
+ $where = $i;
+ break;
+ }
+ }
+
+ $min = $where - 15 < 0 ? 0 : $where - 15;
+ $max = $where + 15 > $t ? $t : $where + 15;
+ $subtext = array_splice($words, $min, $max-$min);
+ $prefix = $min == 0 ? '' : '...';
+ $suffix = $max == $t ? '' : '...';
+ return $prefix.implode(' ', $subtext).$suffix;
+ }
+
+ protected function containsKeys($word, $keys)
+ {
+ foreach($keys as $key)
+ {
+ if(is_int(strpos($word, $key)))
+ return true;
+ }
+ return false;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/quickstart/protected/pages/ViewSource.php b/demos/quickstart/protected/pages/ViewSource.php
index f267f318..2bbcf097 100644
--- a/demos/quickstart/protected/pages/ViewSource.php
+++ b/demos/quickstart/protected/pages/ViewSource.php
@@ -1,112 +1,112 @@
-<?php
-
-class ViewSource extends TPage
-{
- private $_path=null;
- private $_fullPath=null;
- private $_fileType=null;
-
- public function onLoad($param)
- {
- parent::onLoad($param);
- $path=$this->Request['path'];
- $fullPath=realpath($this->Service->BasePath.'/'.$path);
- $fileExt=$this->getFileExtension($fullPath);
- if($fullPath!==false && is_file($fullPath) && strpos($fullPath,$this->Service->BasePath)!==false)
- {
- if($this->isFileTypeAllowed($fileExt))
- {
- $this->_fullPath=strtr($fullPath,'\\','/');
- $this->_path=strtr(substr($fullPath,strlen($this->Service->BasePath)),'\\','/');
- }
- }
- if($this->_fullPath===null)
- throw new THttpException(500,'File Not Found: %s',$path);
-
- $this->SourceList->DataSource=$this->SourceFiles;
- $this->SourceList->dataBind();
-
- $this->Highlighter->Language=$this->getFileLanguage($fileExt);
- if($this->Request['lines']==='false')
- $this->Highlighter->ShowLineNumbers=false;
- $this->SourceView->Text=file_get_contents($this->_fullPath);
- }
-
- public function getFilePath()
- {
- return $this->_path;
- }
-
- protected function getSourceFiles()
- {
- $list=array();
- $basePath=dirname($this->_fullPath);
- if($dh=opendir($basePath))
- {
- while(($file=readdir($dh))!==false)
- {
- if(is_file($basePath.'/'.$file))
- {
- $extension=$this->getFileExtension($basePath.'/'.$file);
- if($this->isFileTypeAllowed($extension))
- {
- $fileType=$this->getFileType($extension);
- $list[]=array(
- 'name'=>$file,
- 'type'=>$fileType,
- 'active'=>basename($this->_fullPath)===$file,
- 'url'=>'?page=ViewSource&amp;path=/'.ltrim(strtr(dirname($this->_path),'\\','/').'/'.$file,'/')
- );
- }
- }
-
- }
- closedir($dh);
- }
- foreach($list as $item)
- $aux[]=$item['name'];
- array_multisort($aux, SORT_ASC, $list);
- return $list;
- }
-
- protected function isFileTypeAllowed($extension)
- {
- return in_array($extension,array('tpl','page','php','html'));
- }
-
- protected function getFileExtension($fileName)
- {
- if(($pos=strrpos($fileName,'.'))===false)
- return '';
- else
- return substr($fileName,$pos+1);
- }
-
- protected function getFileType($extension)
- {
- if($extension==='tpl' || $extension==='page')
- return 'Template file';
- else
- return 'Class file';
- }
-
- protected function getFileLanguage($extension)
- {
- switch($extension)
- {
- case 'page' :
- case 'tpl' :
- return 'prado';
- case 'php' :
- return 'php';
- break;
- case 'xml' :
- return 'xml';
- break;
- default :
- return 'html';
- }
- }
-}
-
+<?php
+
+class ViewSource extends TPage
+{
+ private $_path=null;
+ private $_fullPath=null;
+ private $_fileType=null;
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ $path=$this->Request['path'];
+ $fullPath=realpath($this->Service->BasePath.'/'.$path);
+ $fileExt=$this->getFileExtension($fullPath);
+ if($fullPath!==false && is_file($fullPath) && strpos($fullPath,$this->Service->BasePath)!==false)
+ {
+ if($this->isFileTypeAllowed($fileExt))
+ {
+ $this->_fullPath=strtr($fullPath,'\\','/');
+ $this->_path=strtr(substr($fullPath,strlen($this->Service->BasePath)),'\\','/');
+ }
+ }
+ if($this->_fullPath===null)
+ throw new THttpException(500,'File Not Found: %s',$path);
+
+ $this->SourceList->DataSource=$this->SourceFiles;
+ $this->SourceList->dataBind();
+
+ $this->Highlighter->Language=$this->getFileLanguage($fileExt);
+ if($this->Request['lines']==='false')
+ $this->Highlighter->ShowLineNumbers=false;
+ $this->SourceView->Text=file_get_contents($this->_fullPath);
+ }
+
+ public function getFilePath()
+ {
+ return $this->_path;
+ }
+
+ protected function getSourceFiles()
+ {
+ $list=array();
+ $basePath=dirname($this->_fullPath);
+ if($dh=opendir($basePath))
+ {
+ while(($file=readdir($dh))!==false)
+ {
+ if(is_file($basePath.'/'.$file))
+ {
+ $extension=$this->getFileExtension($basePath.'/'.$file);
+ if($this->isFileTypeAllowed($extension))
+ {
+ $fileType=$this->getFileType($extension);
+ $list[]=array(
+ 'name'=>$file,
+ 'type'=>$fileType,
+ 'active'=>basename($this->_fullPath)===$file,
+ 'url'=>'?page=ViewSource&amp;path=/'.ltrim(strtr(dirname($this->_path),'\\','/').'/'.$file,'/')
+ );
+ }
+ }
+
+ }
+ closedir($dh);
+ }
+ foreach($list as $item)
+ $aux[]=$item['name'];
+ array_multisort($aux, SORT_ASC, $list);
+ return $list;
+ }
+
+ protected function isFileTypeAllowed($extension)
+ {
+ return in_array($extension,array('tpl','page','php','html'));
+ }
+
+ protected function getFileExtension($fileName)
+ {
+ if(($pos=strrpos($fileName,'.'))===false)
+ return '';
+ else
+ return substr($fileName,$pos+1);
+ }
+
+ protected function getFileType($extension)
+ {
+ if($extension==='tpl' || $extension==='page')
+ return 'Template file';
+ else
+ return 'Class file';
+ }
+
+ protected function getFileLanguage($extension)
+ {
+ switch($extension)
+ {
+ case 'page' :
+ case 'tpl' :
+ return 'prado';
+ case 'php' :
+ return 'php';
+ break;
+ case 'xml' :
+ return 'xml';
+ break;
+ default :
+ return 'html';
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/sqlmap/index.php b/demos/sqlmap/index.php
index afada2c1..3d7997fa 100644
--- a/demos/sqlmap/index.php
+++ b/demos/sqlmap/index.php
@@ -1,20 +1,20 @@
-<?php
-
-$basePath=dirname(__FILE__);
-$frameworkPath='../../framework/prado.php';
-$assetsPath=$basePath."/assets";
-$runtimePath=$basePath."/protected/runtime";
-
-if(!is_file($frameworkPath))
- die("Unable to find prado framework path $frameworkPath.");
-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();
-
+<?php
+
+$basePath=dirname(__FILE__);
+$frameworkPath='../../framework/prado.php';
+$assetsPath=$basePath."/assets";
+$runtimePath=$basePath."/protected/runtime";
+
+if(!is_file($frameworkPath))
+ die("Unable to find prado framework path $frameworkPath.");
+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();
+
?> \ No newline at end of file
diff --git a/demos/sqlmap/protected/APP_CODE/Person.php b/demos/sqlmap/protected/APP_CODE/Person.php
index ad9da4b3..e3daeec6 100644
--- a/demos/sqlmap/protected/APP_CODE/Person.php
+++ b/demos/sqlmap/protected/APP_CODE/Person.php
@@ -1,26 +1,26 @@
-<?php
-
-class Person
-{
- public $ID = -1;
- public $FirstName = '';
- public $LastName = '';
-
- public $WeightInKilograms = 0.0;
- public $HeightInMeters = 0.0;
-
- private $_birthDate = '';
-
- //setters and getter for BirthDate
- public function getBirthDate()
- {
- return $this->_birthDate;
- }
-
- public function setBirthDate($value)
- {
- $this->_birthDate = $value;
- }
-}
-
+<?php
+
+class Person
+{
+ public $ID = -1;
+ public $FirstName = '';
+ public $LastName = '';
+
+ public $WeightInKilograms = 0.0;
+ public $HeightInMeters = 0.0;
+
+ private $_birthDate = '';
+
+ //setters and getter for BirthDate
+ public function getBirthDate()
+ {
+ return $this->_birthDate;
+ }
+
+ public function setBirthDate($value)
+ {
+ $this->_birthDate = $value;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/sqlmap/protected/pages/Manual/Layout.php b/demos/sqlmap/protected/pages/Manual/Layout.php
index e612d52d..cbdb6c04 100644
--- a/demos/sqlmap/protected/pages/Manual/Layout.php
+++ b/demos/sqlmap/protected/pages/Manual/Layout.php
@@ -1,7 +1,7 @@
-<?php
-
-class Layout extends TTemplateControl
-{
-
-}
+<?php
+
+class Layout extends TTemplateControl
+{
+
+}
?> \ No newline at end of file
diff --git a/demos/sqlmap/protected/pages/Manual/TopicList.php b/demos/sqlmap/protected/pages/Manual/TopicList.php
index ce827cc0..eb5976a9 100644
--- a/demos/sqlmap/protected/pages/Manual/TopicList.php
+++ b/demos/sqlmap/protected/pages/Manual/TopicList.php
@@ -1,8 +1,8 @@
-<?php
-
-class TopicList extends TTemplateControl
-{
-
-}
-
+<?php
+
+class TopicList extends TTemplateControl
+{
+
+}
+
?> \ No newline at end of file
diff --git a/demos/sqlmap/protected/pages/Sample/crud1.php b/demos/sqlmap/protected/pages/Sample/crud1.php
index 9ea6e05e..fe1131b8 100644
--- a/demos/sqlmap/protected/pages/Sample/crud1.php
+++ b/demos/sqlmap/protected/pages/Sample/crud1.php
@@ -1,21 +1,21 @@
-<?php
-
-Prado::using('Example.Person');
-
-class crud1 extends TPage
-{
- private function loadData()
- {
- $sqlmap = $this->Application->Modules['person-sample']->Client;
- $this->personList->DataSource = $sqlmap->queryForList('SelectAll');
- $this->personList->dataBind();
- }
-
- public function onLoad($param)
- {
- if(!$this->IsPostBack)
- $this->loadData();
- }
-}
-
+<?php
+
+Prado::using('Example.Person');
+
+class crud1 extends TPage
+{
+ private function loadData()
+ {
+ $sqlmap = $this->Application->Modules['person-sample']->Client;
+ $this->personList->DataSource = $sqlmap->queryForList('SelectAll');
+ $this->personList->dataBind();
+ }
+
+ public function onLoad($param)
+ {
+ if(!$this->IsPostBack)
+ $this->loadData();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/sqlmap/protected/pages/Sample/crud2.php b/demos/sqlmap/protected/pages/Sample/crud2.php
index 3d2087bb..18720146 100644
--- a/demos/sqlmap/protected/pages/Sample/crud2.php
+++ b/demos/sqlmap/protected/pages/Sample/crud2.php
@@ -1,78 +1,78 @@
-<?php
-
-Prado::using('Example.Person');
-
-class crud2 extends TPage
-{
- private function sqlmap()
- {
- return $this->Application->Modules['person-sample']->Client;
- }
-
- private function loadData()
- {
- $this->personList->DataSource = $this->sqlmap()->queryForList('SelectAll');
- $this->personList->dataBind();
- }
-
- public function onLoad($param)
- {
- if(!$this->IsPostBack)
- $this->loadData();
- }
-
- protected function editPerson($sender,$param)
- {
- $this->personList->EditItemIndex=$param->Item->ItemIndex;
- $this->loadData();
- }
-
- protected function deletePerson($sender, $param)
- {
- $id = $this->getKey($sender, $param);
-
- $this->sqlmap()->update("Delete", $id);
- $this->loadData();
- }
-
- protected function updatePerson($sender, $param)
- {
- $person = new Person();
- $person->FirstName = $this->getText($param, 0);
- $person->LastName = $this->getText($param, 1);
- $person->HeightInMeters = $this->getText($param, 2);
- $person->WeightInKilograms = $this->getText($param, 3);
- $person->ID = $this->getKey($sender, $param);
-
- $this->sqlmap()->update("Update", $person);
- $this->refreshList($sender, $param);
- }
-
- protected function addNewPerson($sender, $param)
- {
- $person = new Person;
- $person->FirstName = "-- New Person --";
- $this->sqlmap()->insert("Insert", $person);
-
- $this->loadData();;
- }
-
- protected function refreshList($sender, $param)
- {
- $this->personList->EditItemIndex=-1;
- $this->loadData();
- }
-
- private function getText($param, $index)
- {
- $item = $param->Item;
- return $item->Cells[$index]->Controls[0]->Text;
- }
-
- private function getKey($sender, $param)
- {
- return $sender->DataKeys[$param->Item->DataSourceIndex];
- }
-}
-
+<?php
+
+Prado::using('Example.Person');
+
+class crud2 extends TPage
+{
+ private function sqlmap()
+ {
+ return $this->Application->Modules['person-sample']->Client;
+ }
+
+ private function loadData()
+ {
+ $this->personList->DataSource = $this->sqlmap()->queryForList('SelectAll');
+ $this->personList->dataBind();
+ }
+
+ public function onLoad($param)
+ {
+ if(!$this->IsPostBack)
+ $this->loadData();
+ }
+
+ protected function editPerson($sender,$param)
+ {
+ $this->personList->EditItemIndex=$param->Item->ItemIndex;
+ $this->loadData();
+ }
+
+ protected function deletePerson($sender, $param)
+ {
+ $id = $this->getKey($sender, $param);
+
+ $this->sqlmap()->update("Delete", $id);
+ $this->loadData();
+ }
+
+ protected function updatePerson($sender, $param)
+ {
+ $person = new Person();
+ $person->FirstName = $this->getText($param, 0);
+ $person->LastName = $this->getText($param, 1);
+ $person->HeightInMeters = $this->getText($param, 2);
+ $person->WeightInKilograms = $this->getText($param, 3);
+ $person->ID = $this->getKey($sender, $param);
+
+ $this->sqlmap()->update("Update", $person);
+ $this->refreshList($sender, $param);
+ }
+
+ protected function addNewPerson($sender, $param)
+ {
+ $person = new Person;
+ $person->FirstName = "-- New Person --";
+ $this->sqlmap()->insert("Insert", $person);
+
+ $this->loadData();;
+ }
+
+ protected function refreshList($sender, $param)
+ {
+ $this->personList->EditItemIndex=-1;
+ $this->loadData();
+ }
+
+ private function getText($param, $index)
+ {
+ $item = $param->Item;
+ return $item->Cells[$index]->Controls[0]->Text;
+ }
+
+ private function getKey($sender, $param)
+ {
+ return $sender->DataKeys[$param->Item->DataSourceIndex];
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/index.php b/demos/time-tracker/index.php
index 7954aeb9..d1fbccf9 100644
--- a/demos/time-tracker/index.php
+++ b/demos/time-tracker/index.php
@@ -1,35 +1,35 @@
-<?php
-
-$basePath=dirname(__FILE__);
-//$frameworkPath='../../framework/pradolite.php';
-$frameworkPath='../../framework/prado.php';
-$assetsPath=$basePath."/assets";
-$runtimePath=$basePath."/protected/runtime";
-
-$sqlite_dir = $basePath."/protected/App_Data/SQLite";
-$sqlite_db = $sqlite_dir.'/time-tracker.db';
-
-if(!is_file($frameworkPath))
- die("Unable to find prado framework path $frameworkPath.");
-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.");
-if(!is_writable($sqlite_dir))
- die("Please make sure that the directory $sqlite_dir is writable by Web server process.");
-if(!is_writable($sqlite_db))
- die("Please make sure that the sqlite database file $sqlite_dir is writable by Web server process.");
-
-require_once($frameworkPath);
-
-function h($text)
-{
- $app = Prado::getApplication()->getGlobalization();
- $charset = $app ? $app->getCharset() : 'UTF-8';
- return htmlentities($text, ENT_QUOTES, $charset);
-}
-
-$application=new TApplication;
-$application->run();
-
+<?php
+
+$basePath=dirname(__FILE__);
+//$frameworkPath='../../framework/pradolite.php';
+$frameworkPath='../../framework/prado.php';
+$assetsPath=$basePath."/assets";
+$runtimePath=$basePath."/protected/runtime";
+
+$sqlite_dir = $basePath."/protected/App_Data/SQLite";
+$sqlite_db = $sqlite_dir.'/time-tracker.db';
+
+if(!is_file($frameworkPath))
+ die("Unable to find prado framework path $frameworkPath.");
+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.");
+if(!is_writable($sqlite_dir))
+ die("Please make sure that the directory $sqlite_dir is writable by Web server process.");
+if(!is_writable($sqlite_db))
+ die("Please make sure that the sqlite database file $sqlite_dir is writable by Web server process.");
+
+require_once($frameworkPath);
+
+function h($text)
+{
+ $app = Prado::getApplication()->getGlobalization();
+ $charset = $app ? $app->getCharset() : 'UTF-8';
+ return htmlentities($text, ENT_QUOTES, $charset);
+}
+
+$application=new TApplication;
+$application->run();
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/App_Code/Dao/BaseDao.php b/demos/time-tracker/protected/App_Code/Dao/BaseDao.php
index 5edb6af7..a75011d7 100644
--- a/demos/time-tracker/protected/App_Code/Dao/BaseDao.php
+++ b/demos/time-tracker/protected/App_Code/Dao/BaseDao.php
@@ -1,45 +1,45 @@
-<?php
-/**
- * Base DAO class file.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package Demos
- */
-
-/**
- * Base DAO class.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @version $Id$
- * @package Demos
- * @since 3.1
- */
-class BaseDao
-{
- /**
- * @var TSqlMapGateway sqlmap client.
- */
- private $_sqlmap;
-
- /**
- * @param TSqlMapGateway sqlmap client.
- */
- public function setSqlMap($sqlmap)
- {
- $this->_sqlmap = $sqlmap;
- }
-
- /**
- * @return TSqlMapGateway sqlmap client.
- */
- protected function getSqlMap()
- {
- return $this->_sqlmap;
- }
-}
-
+<?php
+/**
+ * Base DAO class file.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 2005-2006 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @version $Id$
+ * @package Demos
+ */
+
+/**
+ * Base DAO class.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @version $Id$
+ * @package Demos
+ * @since 3.1
+ */
+class BaseDao
+{
+ /**
+ * @var TSqlMapGateway sqlmap client.
+ */
+ private $_sqlmap;
+
+ /**
+ * @param TSqlMapGateway sqlmap client.
+ */
+ public function setSqlMap($sqlmap)
+ {
+ $this->_sqlmap = $sqlmap;
+ }
+
+ /**
+ * @return TSqlMapGateway sqlmap client.
+ */
+ protected function getSqlMap()
+ {
+ return $this->_sqlmap;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/App_Code/Dao/CategoryDao.php b/demos/time-tracker/protected/App_Code/Dao/CategoryDao.php
index 7476f036..e43639a0 100644
--- a/demos/time-tracker/protected/App_Code/Dao/CategoryDao.php
+++ b/demos/time-tracker/protected/App_Code/Dao/CategoryDao.php
@@ -1,53 +1,53 @@
-<?php
-
-class CategoryDao extends BaseDao
-{
- function addNewCategory($category)
- {
- $sqlmap = $this->getSqlMap();
- $exists = $this->getCategoryByNameInProject(
- $category->Name, $category->ProjectID);
- if(!$exists)
- $sqlmap->insert('AddNewCategory', $category);
- }
-
- function getCategoryByID($categoryID)
- {
- $sqlmap = $this->getSqlMap();
- return $sqlmap->queryForObject('GetCategoryByID', $categoryID);
- }
-
- function getAllCategories()
- {
- $sqlmap = $this->getSqlMap();
- return $sqlmap->queryForList('GetAllCategories');
- }
-
- function deleteCategory($categoryID)
- {
- $sqlmap = $this->getSqlMap();
- $sqlmap->delete('DeleteCategory', $categoryID);
- }
-
- function getCategoriesByProjectID($projectID)
- {
- $sqlmap = $this->getSqlMap();
- return $sqlmap->queryForList('GetCategoriesByProjectID', $projectID);
- }
-
- function getCategoryByNameInProject($name, $projectID)
- {
- $sqlmap = $this->getSqlMap();
- $param['project'] = $projectID;
- $param['category'] = $name;
- return $sqlmap->queryForObject('GetCategoryByNameInProject', $param);
- }
-
- function updateCategory($category)
- {
- $sqlmap = $this->getSqlMap();
- $sqlmap->update('UpdateCategory', $category);
- }
-}
-
+<?php
+
+class CategoryDao extends BaseDao
+{
+ function addNewCategory($category)
+ {
+ $sqlmap = $this->getSqlMap();
+ $exists = $this->getCategoryByNameInProject(
+ $category->Name, $category->ProjectID);
+ if(!$exists)
+ $sqlmap->insert('AddNewCategory', $category);
+ }
+
+ function getCategoryByID($categoryID)
+ {
+ $sqlmap = $this->getSqlMap();
+ return $sqlmap->queryForObject('GetCategoryByID', $categoryID);
+ }
+
+ function getAllCategories()
+ {
+ $sqlmap = $this->getSqlMap();
+ return $sqlmap->queryForList('GetAllCategories');
+ }
+
+ function deleteCategory($categoryID)
+ {
+ $sqlmap = $this->getSqlMap();
+ $sqlmap->delete('DeleteCategory', $categoryID);
+ }
+
+ function getCategoriesByProjectID($projectID)
+ {
+ $sqlmap = $this->getSqlMap();
+ return $sqlmap->queryForList('GetCategoriesByProjectID', $projectID);
+ }
+
+ function getCategoryByNameInProject($name, $projectID)
+ {
+ $sqlmap = $this->getSqlMap();
+ $param['project'] = $projectID;
+ $param['category'] = $name;
+ return $sqlmap->queryForObject('GetCategoryByNameInProject', $param);
+ }
+
+ function updateCategory($category)
+ {
+ $sqlmap = $this->getSqlMap();
+ $sqlmap->update('UpdateCategory', $category);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/App_Code/Dao/CategoryRecord.php b/demos/time-tracker/protected/App_Code/Dao/CategoryRecord.php
index 876b582d..0394ce92 100644
--- a/demos/time-tracker/protected/App_Code/Dao/CategoryRecord.php
+++ b/demos/time-tracker/protected/App_Code/Dao/CategoryRecord.php
@@ -1,13 +1,13 @@
-<?php
-
-class CategoryRecord
-{
- public $ActualDuration = 0.0;
- public $Abbreviation = '';
- public $ID=0;
- public $EstimateDuration = 0.0;
- public $Name='';
- public $ProjectID=0;
-}
-
+<?php
+
+class CategoryRecord
+{
+ public $ActualDuration = 0.0;
+ public $Abbreviation = '';
+ public $ID=0;
+ public $EstimateDuration = 0.0;
+ public $Name='';
+ public $ProjectID=0;
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/App_Code/Dao/ProjectDao.php b/demos/time-tracker/protected/App_Code/Dao/ProjectDao.php
index 9e8867bc..1d085b47 100644
--- a/demos/time-tracker/protected/App_Code/Dao/ProjectDao.php
+++ b/demos/time-tracker/protected/App_Code/Dao/ProjectDao.php
@@ -1,105 +1,105 @@
-<?php
-/**
- * Project DAO class file.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package Demos
- */
-
-/**
- * Project DAO class.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @version $Id$
- * @package Demos
- * @since 3.1
- */
-class ProjectDao extends BaseDao
-{
- public function projectNameExists($projectName)
- {
- $sqlmap = $this->getSqlMap();
- return $sqlmap->queryForObject('ProjectNameExists', $projectName);
- }
-
- public function addNewProject($project)
- {
- $sqlmap = $this->getSqlMap();
- $sqlmap->insert('CreateNewProject', $project);
- }
-
- public function getProjectByID($projectID)
- {
- $sqlmap = $this->getSqlMap();
- return $sqlmap->queryForObject('GetProjectByID', $projectID);
- }
-
- public function deleteProject($projectID)
- {
- $sqlmap = $this->getSqlMap();
- $sqlmap->update('DeleteProject',$projectID);
- }
-
- public function addUserToProject($projectID, $username)
- {
- $sqlmap = $this->getSqlMap();
- $members = $this->getProjectMembers($projectID);
- if(!in_array($username, $members))
- {
- $param['username'] = $username;
- $param['project'] = $projectID;
- $sqlmap->insert('AddUserToProject',$param);
- }
- }
-
- public function getProjectMembers($projectID)
- {
- $sqlmap = $this->getSqlMap();
- return $sqlmap->queryForList('GetProjectMembers', $projectID);
- }
-
- public function getAllProjects($sort='', $order='ASC')
- {
- $sqlmap = $this->getSqlMap();
- if($sort === '')
- return $sqlmap->queryForList('GetAllProjects');
- else
- {
- $param['sort'] = $sort;
- $param['order'] = $order;
- return $sqlmap->queryForList('GetAllProjectsOrdered', $param);
- }
- }
-
- public function getProjectsByManagerName($manager)
- {
- $sqlmap = $this->getSqlMap();
- return $sqlmap->queryForList('GetProjectsByManagerName', $manager);
- }
-
- public function getProjectsByUserName($username)
- {
- $sqlmap = $this->getSqlMap();
- return $sqlmap->queryForList('GetProjectsByUserName', $username);
- }
-
- public function removeUserFromProject($projectID, $username)
- {
- $sqlmap = $this->getSqlMap();
- $param['username'] = $username;
- $param['project'] = $projectID;
- $sqlmap->delete('RemoveUserFromProject', $param);
- }
-
- public function updateProject($project)
- {
- $sqlmap = $this->getSqlMap();
- $sqlmap->update('UpdateProject', $project);
- }
-}
-
+<?php
+/**
+ * Project DAO class file.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 2005-2006 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @version $Id$
+ * @package Demos
+ */
+
+/**
+ * Project DAO class.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @version $Id$
+ * @package Demos
+ * @since 3.1
+ */
+class ProjectDao extends BaseDao
+{
+ public function projectNameExists($projectName)
+ {
+ $sqlmap = $this->getSqlMap();
+ return $sqlmap->queryForObject('ProjectNameExists', $projectName);
+ }
+
+ public function addNewProject($project)
+ {
+ $sqlmap = $this->getSqlMap();
+ $sqlmap->insert('CreateNewProject', $project);
+ }
+
+ public function getProjectByID($projectID)
+ {
+ $sqlmap = $this->getSqlMap();
+ return $sqlmap->queryForObject('GetProjectByID', $projectID);
+ }
+
+ public function deleteProject($projectID)
+ {
+ $sqlmap = $this->getSqlMap();
+ $sqlmap->update('DeleteProject',$projectID);
+ }
+
+ public function addUserToProject($projectID, $username)
+ {
+ $sqlmap = $this->getSqlMap();
+ $members = $this->getProjectMembers($projectID);
+ if(!in_array($username, $members))
+ {
+ $param['username'] = $username;
+ $param['project'] = $projectID;
+ $sqlmap->insert('AddUserToProject',$param);
+ }
+ }
+
+ public function getProjectMembers($projectID)
+ {
+ $sqlmap = $this->getSqlMap();
+ return $sqlmap->queryForList('GetProjectMembers', $projectID);
+ }
+
+ public function getAllProjects($sort='', $order='ASC')
+ {
+ $sqlmap = $this->getSqlMap();
+ if($sort === '')
+ return $sqlmap->queryForList('GetAllProjects');
+ else
+ {
+ $param['sort'] = $sort;
+ $param['order'] = $order;
+ return $sqlmap->queryForList('GetAllProjectsOrdered', $param);
+ }
+ }
+
+ public function getProjectsByManagerName($manager)
+ {
+ $sqlmap = $this->getSqlMap();
+ return $sqlmap->queryForList('GetProjectsByManagerName', $manager);
+ }
+
+ public function getProjectsByUserName($username)
+ {
+ $sqlmap = $this->getSqlMap();
+ return $sqlmap->queryForList('GetProjectsByUserName', $username);
+ }
+
+ public function removeUserFromProject($projectID, $username)
+ {
+ $sqlmap = $this->getSqlMap();
+ $param['username'] = $username;
+ $param['project'] = $projectID;
+ $sqlmap->delete('RemoveUserFromProject', $param);
+ }
+
+ public function updateProject($project)
+ {
+ $sqlmap = $this->getSqlMap();
+ $sqlmap->update('UpdateProject', $project);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/App_Code/Dao/ProjectRecord.php b/demos/time-tracker/protected/App_Code/Dao/ProjectRecord.php
index 7812751b..1f6ededd 100644
--- a/demos/time-tracker/protected/App_Code/Dao/ProjectRecord.php
+++ b/demos/time-tracker/protected/App_Code/Dao/ProjectRecord.php
@@ -1,35 +1,35 @@
-<?php
-/**
- * Project class file.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package Demos
- */
-
-/**
- * Time Tracker Project class.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @version $Id$
- * @package Demos
- * @since 3.1
- */
-class ProjectRecord
-{
- public $ActualDuration = 0;
- public $CreatorUserName = '';
- public $CompletionDate = 0;
- public $DateCreated = 0;
- public $Description = '';
- public $EstimateDuration = 0.0;
- public $ID = 0;
- public $ManagerUserName = '';
- public $Name = '';
-}
-
-
+<?php
+/**
+ * Project class file.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 2005-2006 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @version $Id$
+ * @package Demos
+ */
+
+/**
+ * Time Tracker Project class.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @version $Id$
+ * @package Demos
+ * @since 3.1
+ */
+class ProjectRecord
+{
+ public $ActualDuration = 0;
+ public $CreatorUserName = '';
+ public $CompletionDate = 0;
+ public $DateCreated = 0;
+ public $Description = '';
+ public $EstimateDuration = 0.0;
+ public $ID = 0;
+ public $ManagerUserName = '';
+ public $Name = '';
+}
+
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/App_Code/Dao/ReportsDao.php b/demos/time-tracker/protected/App_Code/Dao/ReportsDao.php
index 15d0c2a3..c03dd81d 100644
--- a/demos/time-tracker/protected/App_Code/Dao/ReportsDao.php
+++ b/demos/time-tracker/protected/App_Code/Dao/ReportsDao.php
@@ -1,87 +1,87 @@
-<?php
-
-class ProjectReport extends TComponent
-{
- public $ProjectName = '';
- public $EstimateHours = 0;
- public $EstimateCompletion = 0;
- public $Categories;
-
- public function __construct()
- {
- $this->Categories = new TList;
- }
-
- public function getActualHours()
- {
- $total = 0;
- foreach($this->Categories as $cat)
- $total += $cat->getActualHours();
- return $total;
- }
-}
-
-class CategoryReport extends TComponent
-{
- public $CategoryName = '';
- public $EstimateHours = 0;
- public $members = array();
-
- public function getActualHours()
- {
- $total = 0;
- foreach($this->members as $member)
- $total += $member['hours'];
- return $total;
- }
-}
-
-class UserReport extends TComponent
-{
- public $Username;
- public $Projects = array();
-
- public function getTotalHours()
- {
- $hours = 0;
- foreach($this->Projects as $project)
- $hours += $project->Duration;
- return $hours;
- }
-}
-
-class UserProjectReport
-{
- public $ProjectName = '';
- public $CategoryName = '';
- public $Duration = 0;
- public $Description='';
- public $ReportDate=0;
-}
-
-class ReportsDao extends BaseDao
-{
- public function getTimeReportsByProjectIDs($projects)
- {
- $ids = implode(',', array_map('intval', $projects));
- $sqlmap = $this->getSqlMap();
- return $sqlmap->queryForList('GetTimeReportByProjectIDs', $ids);
- }
-
- public function getUserProjectTimeReports($users, $projects, $startDate, $endDate)
- {
- $sqlmap = $this->getSqlMap();
- $ids = implode(',', array_map('intval', $projects));
- $sqlmap->getDbConnection()->setActive(true); //db connection needs to be open for quoteString
- $usernames = implode(',', array_map(array($sqlmap->getDbConnection(), 'quoteString'), $users));
-
- $param['projects'] = $ids;
- $param['members'] = $usernames;
- $param['startDate'] = intval($startDate);
- $param['endDate'] = intval($endDate);
-
- return $sqlmap->queryForList('GetTimeReportByUsername', $param);
- }
-}
-
+<?php
+
+class ProjectReport extends TComponent
+{
+ public $ProjectName = '';
+ public $EstimateHours = 0;
+ public $EstimateCompletion = 0;
+ public $Categories;
+
+ public function __construct()
+ {
+ $this->Categories = new TList;
+ }
+
+ public function getActualHours()
+ {
+ $total = 0;
+ foreach($this->Categories as $cat)
+ $total += $cat->getActualHours();
+ return $total;
+ }
+}
+
+class CategoryReport extends TComponent
+{
+ public $CategoryName = '';
+ public $EstimateHours = 0;
+ public $members = array();
+
+ public function getActualHours()
+ {
+ $total = 0;
+ foreach($this->members as $member)
+ $total += $member['hours'];
+ return $total;
+ }
+}
+
+class UserReport extends TComponent
+{
+ public $Username;
+ public $Projects = array();
+
+ public function getTotalHours()
+ {
+ $hours = 0;
+ foreach($this->Projects as $project)
+ $hours += $project->Duration;
+ return $hours;
+ }
+}
+
+class UserProjectReport
+{
+ public $ProjectName = '';
+ public $CategoryName = '';
+ public $Duration = 0;
+ public $Description='';
+ public $ReportDate=0;
+}
+
+class ReportsDao extends BaseDao
+{
+ public function getTimeReportsByProjectIDs($projects)
+ {
+ $ids = implode(',', array_map('intval', $projects));
+ $sqlmap = $this->getSqlMap();
+ return $sqlmap->queryForList('GetTimeReportByProjectIDs', $ids);
+ }
+
+ public function getUserProjectTimeReports($users, $projects, $startDate, $endDate)
+ {
+ $sqlmap = $this->getSqlMap();
+ $ids = implode(',', array_map('intval', $projects));
+ $sqlmap->getDbConnection()->setActive(true); //db connection needs to be open for quoteString
+ $usernames = implode(',', array_map(array($sqlmap->getDbConnection(), 'quoteString'), $users));
+
+ $param['projects'] = $ids;
+ $param['members'] = $usernames;
+ $param['startDate'] = intval($startDate);
+ $param['endDate'] = intval($endDate);
+
+ return $sqlmap->queryForList('GetTimeReportByUsername', $param);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/App_Code/Dao/TimeEntryDao.php b/demos/time-tracker/protected/App_Code/Dao/TimeEntryDao.php
index 4bd74eb5..f761fd25 100644
--- a/demos/time-tracker/protected/App_Code/Dao/TimeEntryDao.php
+++ b/demos/time-tracker/protected/App_Code/Dao/TimeEntryDao.php
@@ -1,38 +1,38 @@
-<?php
-
-class TimeEntryDao extends BaseDao
-{
- public function addNewTimeEntry($entry)
- {
- $sqlmap = $this->getSqlMap();
- $sqlmap->insert('AddNewTimeEntry', $entry);
- }
-
- public function getTimeEntryByID($entryID)
- {
- $sqlmap = $this->getSqlMap();
- return $sqlmap->queryForObject('GetTimeEntryByID', $entryID);
- }
-
- public function deleteTimeEntry($entryID)
- {
- $sqlmap = $this->getSqlMap();
- $sqlmap->delete('DeleteTimeEntry', $entryID);
- }
-
- public function getTimeEntriesInProject($username, $projectID)
- {
- $sqlmap = $this->getSqlMap();
- $param['username'] = $username;
- $param['project'] = $projectID;
- return $sqlmap->queryForList('GetAllTimeEntriesByProjectIdAndUser', $param);
- }
-
- public function updateTimeEntry($entry)
- {
- $sqlmap = $this->getSqlMap();
- $sqlmap->update('UpdateTimeEntry', $entry);
- }
-}
-
+<?php
+
+class TimeEntryDao extends BaseDao
+{
+ public function addNewTimeEntry($entry)
+ {
+ $sqlmap = $this->getSqlMap();
+ $sqlmap->insert('AddNewTimeEntry', $entry);
+ }
+
+ public function getTimeEntryByID($entryID)
+ {
+ $sqlmap = $this->getSqlMap();
+ return $sqlmap->queryForObject('GetTimeEntryByID', $entryID);
+ }
+
+ public function deleteTimeEntry($entryID)
+ {
+ $sqlmap = $this->getSqlMap();
+ $sqlmap->delete('DeleteTimeEntry', $entryID);
+ }
+
+ public function getTimeEntriesInProject($username, $projectID)
+ {
+ $sqlmap = $this->getSqlMap();
+ $param['username'] = $username;
+ $param['project'] = $projectID;
+ return $sqlmap->queryForList('GetAllTimeEntriesByProjectIdAndUser', $param);
+ }
+
+ public function updateTimeEntry($entry)
+ {
+ $sqlmap = $this->getSqlMap();
+ $sqlmap->update('UpdateTimeEntry', $entry);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/App_Code/Dao/TimeEntryRecord.php b/demos/time-tracker/protected/App_Code/Dao/TimeEntryRecord.php
index fa4f5b8f..8b533070 100644
--- a/demos/time-tracker/protected/App_Code/Dao/TimeEntryRecord.php
+++ b/demos/time-tracker/protected/App_Code/Dao/TimeEntryRecord.php
@@ -1,16 +1,16 @@
-<?php
-
-class TimeEntryRecord
-{
- public $CreatorUserName='';
- public $Category;
- public $DateCreated=0;
- public $Description='';
- public $Duration=0.0;
- public $ID=0;
- public $Project;
- public $ReportDate=0;
- public $Username;
-}
-
+<?php
+
+class TimeEntryRecord
+{
+ public $CreatorUserName='';
+ public $Category;
+ public $DateCreated=0;
+ public $Description='';
+ public $Duration=0.0;
+ public $ID=0;
+ public $Project;
+ public $ReportDate=0;
+ public $Username;
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/App_Code/Dao/UserDao.php b/demos/time-tracker/protected/App_Code/Dao/UserDao.php
index 4bb23b3a..dcb72ee7 100644
--- a/demos/time-tracker/protected/App_Code/Dao/UserDao.php
+++ b/demos/time-tracker/protected/App_Code/Dao/UserDao.php
@@ -1,165 +1,165 @@
-<?php
-/**
- * User Dao class file.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package Demos
- */
-
-/**
- * UserDao class list, create, find and delete users.
- * In addition, it can validate username and password, and update
- * the user roles. Furthermore, a unique new token can be generated,
- * this token can be used to perform persistent cookie login.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @version $Id$
- * @package Demos
- * @since 3.1
- */
-class UserDao extends BaseDao
-{
- /**
- * @param string username
- * @return TimeTrackerUser find by user name, null if not found or disabled.
- */
- public function getUserByName($username)
- {
- $sqlmap = $this->getSqlMap();
- return $sqlmap->queryForObject('GetUserByName', $username);
- }
-
- /**
- * @param string username
- * @return boolean true if username already exists, false otherwise.
- */
- public function usernameExists($username)
- {
- $sqlmap = $this->getSqlMap();
- return $sqlmap->queryForObject('UsernameExists', $username);
- }
-
- /**
- * @return array list of all enabled users.
- */
- public function getAllUsers()
- {
- $sqlmap = $this->getSqlMap();
- return $sqlmap->queryForList('GetAllUsers');
- }
-
- /**
- * @param TimeTrackerUser new user details.
- * @param string new user password.
- */
- public function addNewUser($user, $password)
- {
- $sqlmap = $this->getSqlMap();
- $param['user'] = $user;
- $param['password'] = md5($password);
- $sqlmap->insert('AddNewUser', $param);
- if(count($user->getRoles()) > 0)
- $this->updateUserRoles($user);
- }
-
- /**
- * @param string username to delete
- */
- public function deleteUserByName($username)
- {
- $sqlmap = $this->getSqlMap();
- $sqlmap->delete('DeleteUserByName', $username);
- }
-
- /**
- * Updates the user profile details, including user roles.
- * @param TimeTrackerUser updated user details.
- * @param string new user password, null to avoid updating password.
- */
- public function updateUser($user,$password=null)
- {
- $sqlmap = $this->getSqlMap();
- if($password !== null)
- {
- $param['user'] = $user;
- $param['password'] = md5($password);
- $sqlmap->update('UpdateUserDetailsAndPassword', $param);
- }
- else
- {
- $sqlmap->update('UpdateUserDetails', $user);
- }
- $this->updateUserRoles($user);
- }
-
- /**
- * @param string username to be validated
- * @param string matching password
- * @return boolean true if the username and password matches.
- */
- public function validateUser($username, $password)
- {
- $sqlmap = $this->getSqlMap();
- $param['username'] = $username;
- $param['password'] = md5($password);
- return $sqlmap->queryForObject('ValidateUser', $param);
- }
-
- /**
- * @param string unique persistent session token
- * @return TimeTrackerUser user details if valid token, null otherwise.
- */
- public function validateSignon($token)
- {
- $sqlmap = $this->getSqlMap();
- $sqlmap->update('UpdateSignon', $token);
- return $sqlmap->queryForObject('ValidateAutoSignon', $token);
- }
-
- /**
- * @param TimeTrackerUser user details to generate the token
- * @return string unique persistent login token.
- */
- public function createSignonToken($user)
- {
- $sqlmap = $this->getSqlMap();
- $param['username'] = $user->getName();
- $param['token'] = md5(microtime().$param['username']);
- $sqlmap->insert('RegisterAutoSignon', $param);
- return $param['token'];
- }
-
- /**
- * @param TimeTrackerUser deletes all signon token for given user, null to delete all
- * tokens.
- */
- public function clearSignonTokens($user=null)
- {
- $sqlmap = $this->getSqlMap();
- if($user !== null)
- $sqlmap->delete('DeleteAutoSignon', $user->getName());
- else
- $sqlmap->delete('DeleteAllSignon');
- }
-
- /**
- * @param TimeTrackerUser user details for updating the assigned roles.
- */
- public function updateUserRoles($user)
- {
- $sqlmap = $this->getSqlMap();
- $sqlmap->delete('DeleteUserRoles', $user);
- foreach($user->getRoles() as $role)
- {
- $param['username'] = $user->getName();
- $param['role'] = $role;
- $sqlmap->update('AddUserRole', $param);
- }
- }
-}
-
+<?php
+/**
+ * User Dao class file.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 2005-2006 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @version $Id$
+ * @package Demos
+ */
+
+/**
+ * UserDao class list, create, find and delete users.
+ * In addition, it can validate username and password, and update
+ * the user roles. Furthermore, a unique new token can be generated,
+ * this token can be used to perform persistent cookie login.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @version $Id$
+ * @package Demos
+ * @since 3.1
+ */
+class UserDao extends BaseDao
+{
+ /**
+ * @param string username
+ * @return TimeTrackerUser find by user name, null if not found or disabled.
+ */
+ public function getUserByName($username)
+ {
+ $sqlmap = $this->getSqlMap();
+ return $sqlmap->queryForObject('GetUserByName', $username);
+ }
+
+ /**
+ * @param string username
+ * @return boolean true if username already exists, false otherwise.
+ */
+ public function usernameExists($username)
+ {
+ $sqlmap = $this->getSqlMap();
+ return $sqlmap->queryForObject('UsernameExists', $username);
+ }
+
+ /**
+ * @return array list of all enabled users.
+ */
+ public function getAllUsers()
+ {
+ $sqlmap = $this->getSqlMap();
+ return $sqlmap->queryForList('GetAllUsers');
+ }
+
+ /**
+ * @param TimeTrackerUser new user details.
+ * @param string new user password.
+ */
+ public function addNewUser($user, $password)
+ {
+ $sqlmap = $this->getSqlMap();
+ $param['user'] = $user;
+ $param['password'] = md5($password);
+ $sqlmap->insert('AddNewUser', $param);
+ if(count($user->getRoles()) > 0)
+ $this->updateUserRoles($user);
+ }
+
+ /**
+ * @param string username to delete
+ */
+ public function deleteUserByName($username)
+ {
+ $sqlmap = $this->getSqlMap();
+ $sqlmap->delete('DeleteUserByName', $username);
+ }
+
+ /**
+ * Updates the user profile details, including user roles.
+ * @param TimeTrackerUser updated user details.
+ * @param string new user password, null to avoid updating password.
+ */
+ public function updateUser($user,$password=null)
+ {
+ $sqlmap = $this->getSqlMap();
+ if($password !== null)
+ {
+ $param['user'] = $user;
+ $param['password'] = md5($password);
+ $sqlmap->update('UpdateUserDetailsAndPassword', $param);
+ }
+ else
+ {
+ $sqlmap->update('UpdateUserDetails', $user);
+ }
+ $this->updateUserRoles($user);
+ }
+
+ /**
+ * @param string username to be validated
+ * @param string matching password
+ * @return boolean true if the username and password matches.
+ */
+ public function validateUser($username, $password)
+ {
+ $sqlmap = $this->getSqlMap();
+ $param['username'] = $username;
+ $param['password'] = md5($password);
+ return $sqlmap->queryForObject('ValidateUser', $param);
+ }
+
+ /**
+ * @param string unique persistent session token
+ * @return TimeTrackerUser user details if valid token, null otherwise.
+ */
+ public function validateSignon($token)
+ {
+ $sqlmap = $this->getSqlMap();
+ $sqlmap->update('UpdateSignon', $token);
+ return $sqlmap->queryForObject('ValidateAutoSignon', $token);
+ }
+
+ /**
+ * @param TimeTrackerUser user details to generate the token
+ * @return string unique persistent login token.
+ */
+ public function createSignonToken($user)
+ {
+ $sqlmap = $this->getSqlMap();
+ $param['username'] = $user->getName();
+ $param['token'] = md5(microtime().$param['username']);
+ $sqlmap->insert('RegisterAutoSignon', $param);
+ return $param['token'];
+ }
+
+ /**
+ * @param TimeTrackerUser deletes all signon token for given user, null to delete all
+ * tokens.
+ */
+ public function clearSignonTokens($user=null)
+ {
+ $sqlmap = $this->getSqlMap();
+ if($user !== null)
+ $sqlmap->delete('DeleteAutoSignon', $user->getName());
+ else
+ $sqlmap->delete('DeleteAllSignon');
+ }
+
+ /**
+ * @param TimeTrackerUser user details for updating the assigned roles.
+ */
+ public function updateUserRoles($user)
+ {
+ $sqlmap = $this->getSqlMap();
+ $sqlmap->delete('DeleteUserRoles', $user);
+ foreach($user->getRoles() as $role)
+ {
+ $param['username'] = $user->getName();
+ $param['role'] = $role;
+ $sqlmap->update('AddUserRole', $param);
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/App_Code/DaoManager.php b/demos/time-tracker/protected/App_Code/DaoManager.php
index bf25c555..705dd4d0 100644
--- a/demos/time-tracker/protected/App_Code/DaoManager.php
+++ b/demos/time-tracker/protected/App_Code/DaoManager.php
@@ -1,79 +1,79 @@
-<?php
-/**
- * DaoManager class file.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package Demos
- */
-
-Prado::using('System.Data.SqlMap.TSqlMapConfig');
-
-/**
- * DaoManager class.
- *
- * A Registry for Dao and an implementation of that type.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @version $Id$
- * @package Demos
- * @since 3.1
- */
-class DaoManager extends TSqlMapConfig
-{
- /**
- * @var array registered list of dao
- */
- private $_dao=array();
-
- /**
- * Initializes the module.
- * This method is required by IModule and is invoked by application.
- * It loads dao information from the module configuration.
- * @param TXmlElement module configuration
- */
- public function init($xml)
- {
- parent::init($xml);
- foreach($xml->getElementsByTagName("dao") as $node)
- {
- $this->_dao[$node->getAttribute('id')] =
- array('class' => $node->getAttribute('class'));
- }
- }
-
- /**
- * @return array list of registered Daos
- */
- public function getDaos()
- {
- return $this->_dao;
- }
-
- /**
- * Returns an implementation of a Dao type, implements the Registery
- * pattern. Multiple calls returns the same Dao instance.
- * @param string Dao type to find.
- * @return object instance of the Dao implementation.
- */
- public function getDao($class)
- {
- if(isset($this->_dao[$class]))
- {
- if(!isset($this->_dao[$class]['instance']))
- {
- $dao = Prado::createComponent($this->_dao[$class]['class']);
- $dao->setSqlMap($this->getClient());
- $this->_dao[$class]['instance'] = $dao;
- }
- return $this->_dao[$class]['instance'];
- }
- else
- throw new TimeTrackerException('daomanager_undefined_dao', $class);
- }
-}
-
+<?php
+/**
+ * DaoManager class file.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 2005-2006 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @version $Id$
+ * @package Demos
+ */
+
+Prado::using('System.Data.SqlMap.TSqlMapConfig');
+
+/**
+ * DaoManager class.
+ *
+ * A Registry for Dao and an implementation of that type.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @version $Id$
+ * @package Demos
+ * @since 3.1
+ */
+class DaoManager extends TSqlMapConfig
+{
+ /**
+ * @var array registered list of dao
+ */
+ private $_dao=array();
+
+ /**
+ * Initializes the module.
+ * This method is required by IModule and is invoked by application.
+ * It loads dao information from the module configuration.
+ * @param TXmlElement module configuration
+ */
+ public function init($xml)
+ {
+ parent::init($xml);
+ foreach($xml->getElementsByTagName("dao") as $node)
+ {
+ $this->_dao[$node->getAttribute('id')] =
+ array('class' => $node->getAttribute('class'));
+ }
+ }
+
+ /**
+ * @return array list of registered Daos
+ */
+ public function getDaos()
+ {
+ return $this->_dao;
+ }
+
+ /**
+ * Returns an implementation of a Dao type, implements the Registery
+ * pattern. Multiple calls returns the same Dao instance.
+ * @param string Dao type to find.
+ * @return object instance of the Dao implementation.
+ */
+ public function getDao($class)
+ {
+ if(isset($this->_dao[$class]))
+ {
+ if(!isset($this->_dao[$class]['instance']))
+ {
+ $dao = Prado::createComponent($this->_dao[$class]['class']);
+ $dao->setSqlMap($this->getClient());
+ $this->_dao[$class]['instance'] = $dao;
+ }
+ return $this->_dao[$class]['instance'];
+ }
+ else
+ throw new TimeTrackerException('daomanager_undefined_dao', $class);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/App_Code/TimeTrackerException.php b/demos/time-tracker/protected/App_Code/TimeTrackerException.php
index 41632c01..8c8e7efa 100644
--- a/demos/time-tracker/protected/App_Code/TimeTrackerException.php
+++ b/demos/time-tracker/protected/App_Code/TimeTrackerException.php
@@ -1,33 +1,33 @@
-<?php
-/**
- * TimeTrackerException class file.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package Demos
- */
-
-/**
- * Generic time tracker application exception. Exception messages are saved in
- * "exceptions.txt"
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @version $Id$
- * @package Demos
- * @since 3.1
- */
-class TimeTrackerException extends TException
-{
- /**
- * @return string path to the error message file
- */
- protected function getErrorMessageFile()
- {
- return dirname(__FILE__).'/exceptions.txt';
- }
-}
-
+<?php
+/**
+ * TimeTrackerException class file.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 2005-2006 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @version $Id$
+ * @package Demos
+ */
+
+/**
+ * Generic time tracker application exception. Exception messages are saved in
+ * "exceptions.txt"
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @version $Id$
+ * @package Demos
+ * @since 3.1
+ */
+class TimeTrackerException extends TException
+{
+ /**
+ * @return string path to the error message file
+ */
+ protected function getErrorMessageFile()
+ {
+ return dirname(__FILE__).'/exceptions.txt';
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/App_Code/TimeTrackerUser.php b/demos/time-tracker/protected/App_Code/TimeTrackerUser.php
index b519fcde..1bf25ac1 100644
--- a/demos/time-tracker/protected/App_Code/TimeTrackerUser.php
+++ b/demos/time-tracker/protected/App_Code/TimeTrackerUser.php
@@ -1,48 +1,48 @@
-<?php
-/**
- * TimeTrackerUser class file.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package Demos
- */
-
-/**
- * Import TUser and TUserManager
- */
-Prado::using('System.Security.TUser');
-Prado::using('System.Security.TUserManager');
-
-/**
- * User class for Time Tracker application.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @version $Id$
- * @package Demos
- * @since 3.1
- */
-class TimeTrackerUser extends TUser
-{
- private $_emailAddress;
-
- /**
- * @param string user email address
- */
- public function setEmailAddress($value)
- {
- $this->_emailAddress = $value;
- }
-
- /**
- * @return string user email address
- */
- public function getEmailAddress()
- {
- return $this->_emailAddress;
- }
-}
-
+<?php
+/**
+ * TimeTrackerUser class file.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 2005-2006 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @version $Id$
+ * @package Demos
+ */
+
+/**
+ * Import TUser and TUserManager
+ */
+Prado::using('System.Security.TUser');
+Prado::using('System.Security.TUserManager');
+
+/**
+ * User class for Time Tracker application.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @version $Id$
+ * @package Demos
+ * @since 3.1
+ */
+class TimeTrackerUser extends TUser
+{
+ private $_emailAddress;
+
+ /**
+ * @param string user email address
+ */
+ public function setEmailAddress($value)
+ {
+ $this->_emailAddress = $value;
+ }
+
+ /**
+ * @return string user email address
+ */
+ public function getEmailAddress()
+ {
+ return $this->_emailAddress;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/App_Code/TrackerAuthManager.php b/demos/time-tracker/protected/App_Code/TrackerAuthManager.php
index 989fcc54..ea6b5aab 100644
--- a/demos/time-tracker/protected/App_Code/TrackerAuthManager.php
+++ b/demos/time-tracker/protected/App_Code/TrackerAuthManager.php
@@ -1,85 +1,85 @@
-<?php
-/**
- * Custom Authentication manager permits authentication using
- * a string token saved in the cookie.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @version $Id$
- * @package Demos
- * @since 3.1
- */
-class TrackerAuthManager extends TAuthManager
-{
- /**
- * @const string signon token cookie name.
- */
- const SignonCookieName = 'time-tracker-signon';
-
- /**
- * Performs the real authentication work. Overrides and calls parent
- * implementation. Trys to authenticate using token saved in cookie.
- * @param mixed parameter to be passed to OnAuthenticate event
- */
- public function onAuthenticate($param)
- {
- parent::onAuthenticate($param);
- $currentUser = $this->Application->User;
- if(!$currentUser || $currentUser->IsGuest)
- $this->authenticateFromCookie($param);
- }
-
- /**
- * If the user is not set or is still a guest, try to authenticate the user
- * using a string token saved in the cookie if any.
- * @param mixed parameter to be passed to OnAuthenticate event
- */
- protected function authenticateFromCookie($param)
- {
- $cookie = $this->Request->Cookies[self::SignonCookieName];
- if(!is_null($cookie))
- {
- $daos = $this->getApplication()->getModule('daos');
- $userDao = $daos->getDao('UserDao');
- $user = $userDao->validateSignon($cookie->Value);
- if($user instanceof TimeTrackerUser)
- $this->updateCredential($user);
- }
- }
-
- /**
- * Changes the user credentials.
- * @param TUser new user details.
- */
- public function updateCredential($user)
- {
- $user->IsGuest = false;
- $this->updateSessionUser($user);
- $this->Application->User = $user;
- }
-
- /**
- * Generate a token to be saved in the cookie for later authentication.
- * @param TimeTrackerUser user details.
- */
- public function rememberSignon($user)
- {
- $daos = $this->getApplication()->getModule('daos');
- $userDao = $daos->getDao('UserDao');
- $token = $userDao->createSignonToken($user);
- $cookie = new THttpCookie(self::SignonCookieName, $token);
- $cookie->Expire = strtotime('+1 month');
- $this->Response->Cookies[] = $cookie;
- }
-
- /**
- * Logs out the user and delete the token from cookie.
- */
- public function logout()
- {
- parent::logout();
- $cookie = new THttpCookie(self::SignonCookieName,'');
- $this->Response->Cookies[] = $cookie;
- }
-}
-
+<?php
+/**
+ * Custom Authentication manager permits authentication using
+ * a string token saved in the cookie.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @version $Id$
+ * @package Demos
+ * @since 3.1
+ */
+class TrackerAuthManager extends TAuthManager
+{
+ /**
+ * @const string signon token cookie name.
+ */
+ const SignonCookieName = 'time-tracker-signon';
+
+ /**
+ * Performs the real authentication work. Overrides and calls parent
+ * implementation. Trys to authenticate using token saved in cookie.
+ * @param mixed parameter to be passed to OnAuthenticate event
+ */
+ public function onAuthenticate($param)
+ {
+ parent::onAuthenticate($param);
+ $currentUser = $this->Application->User;
+ if(!$currentUser || $currentUser->IsGuest)
+ $this->authenticateFromCookie($param);
+ }
+
+ /**
+ * If the user is not set or is still a guest, try to authenticate the user
+ * using a string token saved in the cookie if any.
+ * @param mixed parameter to be passed to OnAuthenticate event
+ */
+ protected function authenticateFromCookie($param)
+ {
+ $cookie = $this->Request->Cookies[self::SignonCookieName];
+ if(!is_null($cookie))
+ {
+ $daos = $this->getApplication()->getModule('daos');
+ $userDao = $daos->getDao('UserDao');
+ $user = $userDao->validateSignon($cookie->Value);
+ if($user instanceof TimeTrackerUser)
+ $this->updateCredential($user);
+ }
+ }
+
+ /**
+ * Changes the user credentials.
+ * @param TUser new user details.
+ */
+ public function updateCredential($user)
+ {
+ $user->IsGuest = false;
+ $this->updateSessionUser($user);
+ $this->Application->User = $user;
+ }
+
+ /**
+ * Generate a token to be saved in the cookie for later authentication.
+ * @param TimeTrackerUser user details.
+ */
+ public function rememberSignon($user)
+ {
+ $daos = $this->getApplication()->getModule('daos');
+ $userDao = $daos->getDao('UserDao');
+ $token = $userDao->createSignonToken($user);
+ $cookie = new THttpCookie(self::SignonCookieName, $token);
+ $cookie->Expire = strtotime('+1 month');
+ $this->Response->Cookies[] = $cookie;
+ }
+
+ /**
+ * Logs out the user and delete the token from cookie.
+ */
+ public function logout()
+ {
+ parent::logout();
+ $cookie = new THttpCookie(self::SignonCookieName,'');
+ $this->Response->Cookies[] = $cookie;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/App_Code/UserManager.php b/demos/time-tracker/protected/App_Code/UserManager.php
index 66eecb95..fd6eeb8e 100644
--- a/demos/time-tracker/protected/App_Code/UserManager.php
+++ b/demos/time-tracker/protected/App_Code/UserManager.php
@@ -1,90 +1,90 @@
-<?php
-/**
- * UserManager class file.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package Demos
- */
-
-/**
- * User manager module class for time tracker application.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @version $Id$
- * @package Demos
- * @since 3.1
- */
-class UserManager extends TModule implements IUserManager
-{
- /**
- * @return string name for a guest user.
- */
- public function getGuestName()
- {
- return 'Guest';
- }
-
- /**
- * Returns a user instance given the user name.
- * @param string user name, null if it is a guest.
- * @return TUser the user instance, null if the specified username is not in the user database.
- */
- public function getUser($username=null)
- {
- if($username===null)
- {
- $user=new TUser($this);
- $user->setIsGuest(true);
- return $user;
- }
- else
- {
- $daos = $this->getApplication()->getModule('daos');
- $userDao = $daos->getDao('UserDao');
- $user = $userDao->getUserByName($username);
- $user->setIsGuest(false);
- return $user;
- }
- }
-
- /**
- * Validates if the username and password are correct.
- * @param string user name
- * @param string password
- * @return boolean true if validation is successful, false otherwise.
- */
- public function validateUser($username,$password)
- {
- $daos = $this->getApplication()->getModule('daos');
- $userDao = $daos->getDao('UserDao');
- return $userDao->validateUser($username, $password);
- }
-
- /**
- * Saves user auth data into a cookie.
- * @param THttpCookie the cookie to receive the user auth data.
- * @since 3.1.1
- */
- public function saveUserToCookie($cookie)
- {
- // do nothing since we don't support cookie-based auth in this example
- }
-
- /**
- * Returns a user instance according to auth data stored in a cookie.
- * @param THttpCookie the cookie storing user authentication information
- * @return TUser the user instance generated based on the cookie auth data, null if the cookie does not have valid auth data.
- * @since 3.1.1
- */
- public function getUserFromCookie($cookie)
- {
- // do nothing since we don't support cookie-based auth in this example
- return null;
- }
-}
-
+<?php
+/**
+ * UserManager class file.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 2005-2006 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @version $Id$
+ * @package Demos
+ */
+
+/**
+ * User manager module class for time tracker application.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @version $Id$
+ * @package Demos
+ * @since 3.1
+ */
+class UserManager extends TModule implements IUserManager
+{
+ /**
+ * @return string name for a guest user.
+ */
+ public function getGuestName()
+ {
+ return 'Guest';
+ }
+
+ /**
+ * Returns a user instance given the user name.
+ * @param string user name, null if it is a guest.
+ * @return TUser the user instance, null if the specified username is not in the user database.
+ */
+ public function getUser($username=null)
+ {
+ if($username===null)
+ {
+ $user=new TUser($this);
+ $user->setIsGuest(true);
+ return $user;
+ }
+ else
+ {
+ $daos = $this->getApplication()->getModule('daos');
+ $userDao = $daos->getDao('UserDao');
+ $user = $userDao->getUserByName($username);
+ $user->setIsGuest(false);
+ return $user;
+ }
+ }
+
+ /**
+ * Validates if the username and password are correct.
+ * @param string user name
+ * @param string password
+ * @return boolean true if validation is successful, false otherwise.
+ */
+ public function validateUser($username,$password)
+ {
+ $daos = $this->getApplication()->getModule('daos');
+ $userDao = $daos->getDao('UserDao');
+ return $userDao->validateUser($username, $password);
+ }
+
+ /**
+ * Saves user auth data into a cookie.
+ * @param THttpCookie the cookie to receive the user auth data.
+ * @since 3.1.1
+ */
+ public function saveUserToCookie($cookie)
+ {
+ // do nothing since we don't support cookie-based auth in this example
+ }
+
+ /**
+ * Returns a user instance according to auth data stored in a cookie.
+ * @param THttpCookie the cookie storing user authentication information
+ * @return TUser the user instance generated based on the cookie auth data, null if the cookie does not have valid auth data.
+ * @since 3.1.1
+ */
+ public function getUserFromCookie($cookie)
+ {
+ // do nothing since we don't support cookie-based auth in this example
+ return null;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/App_Data/DateTimeTypeHandler.php b/demos/time-tracker/protected/App_Data/DateTimeTypeHandler.php
index 03af3d36..b7a76e3d 100644
--- a/demos/time-tracker/protected/App_Data/DateTimeTypeHandler.php
+++ b/demos/time-tracker/protected/App_Data/DateTimeTypeHandler.php
@@ -1,35 +1,35 @@
-<?php
-
-class DateTimeTypeHandler extends TSqlMapTypeHandler
-{
- /**
- * Not implemented.
- */
- public function getParameter($integer)
- {
- return date('Y-m-d H:i:s', $integer);
- }
-
- /**
- * Not implemented.
- */
- public function getResult($string)
- {
- if(intval($string) > 10000) //strtotime doesn't like unix epoc time.
- return intval($string);
- return strtotime($string);
- }
-
- /**
- * Creates a new instance of TimeTrackerUser
- * @param array result data
- * @return TimeTrackerUser new user instance
- */
- public function createNewInstance($row=null)
- {
- throw new TimeTrackerException('Not implemented');
- }
-
-}
-
+<?php
+
+class DateTimeTypeHandler extends TSqlMapTypeHandler
+{
+ /**
+ * Not implemented.
+ */
+ public function getParameter($integer)
+ {
+ return date('Y-m-d H:i:s', $integer);
+ }
+
+ /**
+ * Not implemented.
+ */
+ public function getResult($string)
+ {
+ if(intval($string) > 10000) //strtotime doesn't like unix epoc time.
+ return intval($string);
+ return strtotime($string);
+ }
+
+ /**
+ * Creates a new instance of TimeTrackerUser
+ * @param array result data
+ * @return TimeTrackerUser new user instance
+ */
+ public function createNewInstance($row=null)
+ {
+ throw new TimeTrackerException('Not implemented');
+ }
+
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/App_Data/TimeTrackerUserTypeHandler.php b/demos/time-tracker/protected/App_Data/TimeTrackerUserTypeHandler.php
index 54aba438..d9e28ae5 100644
--- a/demos/time-tracker/protected/App_Data/TimeTrackerUserTypeHandler.php
+++ b/demos/time-tracker/protected/App_Data/TimeTrackerUserTypeHandler.php
@@ -1,54 +1,54 @@
-<?php
-/**
- * TimeTrackerUserTypeHandler class file.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package Demos
- */
-
-/**
- * SQLMap type handler for TimeTrackerUser.
- * The TimeTrackerUser requires an instance of IUserManager in constructor.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @version $Id$
- * @package Demos
- * @since 3.1
- */
-class TimeTrackerUserTypeHandler extends TSqlMapTypeHandler
-{
- /**
- * Not implemented.
- */
- public function getParameter($object)
- {
- throw new TimeTrackerException('Not implemented');
- }
-
- /**
- * Not implemented.
- */
- public function getResult($string)
- {
- throw new TimeTrackerException('Not implemented');
- }
-
- /**
- * Creates a new instance of TimeTrackerUser
- * @param array result data
- * @return TimeTrackerUser new user instance
- */
- public function createNewInstance($row=null)
- {
- $manager = Prado::getApplication()->getModule('users');
- if(is_null($manager))
- $manager = new UserManager();
- return new TimeTrackerUser($manager);
- }
-}
-
+<?php
+/**
+ * TimeTrackerUserTypeHandler class file.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 2005-2006 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @version $Id$
+ * @package Demos
+ */
+
+/**
+ * SQLMap type handler for TimeTrackerUser.
+ * The TimeTrackerUser requires an instance of IUserManager in constructor.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @version $Id$
+ * @package Demos
+ * @since 3.1
+ */
+class TimeTrackerUserTypeHandler extends TSqlMapTypeHandler
+{
+ /**
+ * Not implemented.
+ */
+ public function getParameter($object)
+ {
+ throw new TimeTrackerException('Not implemented');
+ }
+
+ /**
+ * Not implemented.
+ */
+ public function getResult($string)
+ {
+ throw new TimeTrackerException('Not implemented');
+ }
+
+ /**
+ * Creates a new instance of TimeTrackerUser
+ * @param array result data
+ * @return TimeTrackerUser new user instance
+ */
+ public function createNewInstance($row=null)
+ {
+ $manager = Prado::getApplication()->getModule('users');
+ if(is_null($manager))
+ $manager = new UserManager();
+ return new TimeTrackerUser($manager);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/pages/TimeTracker/CategoryDataList.php b/demos/time-tracker/protected/pages/TimeTracker/CategoryDataList.php
index dd04dbf3..cc21a486 100644
--- a/demos/time-tracker/protected/pages/TimeTracker/CategoryDataList.php
+++ b/demos/time-tracker/protected/pages/TimeTracker/CategoryDataList.php
@@ -1,94 +1,94 @@
-<?php
-
-class CategoryDataList extends TTemplateControl
-{
- public function setProjectID($value)
- {
- $this->setViewState('ProjectID', $value, '');
- }
-
- public function getProjectID()
- {
- return $this->getViewState('ProjectID', '');
- }
-
- public function getCategories()
- {
- $this->ensureChildControls();
- return $this->getRegisteredObject('categories');
- }
-
- protected function getCategoryDao()
- {
- return $this->Application->Modules['daos']->getDao('CategoryDao');
- }
-
- public function showCategories()
- {
- $categoryDao = $this->getCategoryDao();
- $list = $categoryDao->getCategoriesByProjectID($this->getProjectID());
- $this->categories->DataSource = $list;
- $this->categories->dataBind();
- }
-
- public function deleteCategoryItem($sender, $param)
- {
- $id = $this->categories->DataKeys[$param->Item->ItemIndex];
- $this->getCategoryDao()->deleteCategory($id);
- $this->refreshCategoryList($sender, $param);
- }
-
- public function editCategoryItem($sender, $param)
- {
- $this->categories->EditItemIndex=$param->Item->ItemIndex;
- $this->showCategories();
- }
-
- public function refreshCategoryList($sender, $param)
- {
- $this->categories->EditItemIndex=-1;
- $this->showCategories();
- }
-
- public function updateCategoryItem($sender, $param)
- {
- if(!$this->Page->IsValid)
- return;
-
- $item = $param->Item;
-
- $id = $this->categories->DataKeys[$param->Item->ItemIndex];
- $category = new CategoryRecord;
- $category->ID = $id;
- $category->Name = $item->name->Text;
- $category->Abbreviation = $item->abbrev->Text;
- $category->EstimateDuration = floatval($item->duration->Text);
- $category->ProjectID = $this->getProjectID();
-
- $this->getCategoryDao()->updateCategory($category);
-
- $this->refreshCategoryList($sender, $param);
- }
-
- public function addCategory_clicked($sender, $param)
- {
- if(!$this->Page->IsValid)
- return;
-
- $newCategory = new CategoryRecord;
- $newCategory->Name = $this->categoryName->Text;
- $newCategory->Abbreviation = $this->abbrev->Text;
- $newCategory->EstimateDuration = floatval($this->duration->Text);
- $newCategory->ProjectID = $this->getProjectID();
-
- $this->getCategoryDao()->addNewCategory($newCategory);
-
- $this->categoryName->Text = '';
- $this->abbrev->Text = '';
- $this->duration->Text = '';
-
- $this->showCategories();
- }
-}
-
+<?php
+
+class CategoryDataList extends TTemplateControl
+{
+ public function setProjectID($value)
+ {
+ $this->setViewState('ProjectID', $value, '');
+ }
+
+ public function getProjectID()
+ {
+ return $this->getViewState('ProjectID', '');
+ }
+
+ public function getCategories()
+ {
+ $this->ensureChildControls();
+ return $this->getRegisteredObject('categories');
+ }
+
+ protected function getCategoryDao()
+ {
+ return $this->Application->Modules['daos']->getDao('CategoryDao');
+ }
+
+ public function showCategories()
+ {
+ $categoryDao = $this->getCategoryDao();
+ $list = $categoryDao->getCategoriesByProjectID($this->getProjectID());
+ $this->categories->DataSource = $list;
+ $this->categories->dataBind();
+ }
+
+ public function deleteCategoryItem($sender, $param)
+ {
+ $id = $this->categories->DataKeys[$param->Item->ItemIndex];
+ $this->getCategoryDao()->deleteCategory($id);
+ $this->refreshCategoryList($sender, $param);
+ }
+
+ public function editCategoryItem($sender, $param)
+ {
+ $this->categories->EditItemIndex=$param->Item->ItemIndex;
+ $this->showCategories();
+ }
+
+ public function refreshCategoryList($sender, $param)
+ {
+ $this->categories->EditItemIndex=-1;
+ $this->showCategories();
+ }
+
+ public function updateCategoryItem($sender, $param)
+ {
+ if(!$this->Page->IsValid)
+ return;
+
+ $item = $param->Item;
+
+ $id = $this->categories->DataKeys[$param->Item->ItemIndex];
+ $category = new CategoryRecord;
+ $category->ID = $id;
+ $category->Name = $item->name->Text;
+ $category->Abbreviation = $item->abbrev->Text;
+ $category->EstimateDuration = floatval($item->duration->Text);
+ $category->ProjectID = $this->getProjectID();
+
+ $this->getCategoryDao()->updateCategory($category);
+
+ $this->refreshCategoryList($sender, $param);
+ }
+
+ public function addCategory_clicked($sender, $param)
+ {
+ if(!$this->Page->IsValid)
+ return;
+
+ $newCategory = new CategoryRecord;
+ $newCategory->Name = $this->categoryName->Text;
+ $newCategory->Abbreviation = $this->abbrev->Text;
+ $newCategory->EstimateDuration = floatval($this->duration->Text);
+ $newCategory->ProjectID = $this->getProjectID();
+
+ $this->getCategoryDao()->addNewCategory($newCategory);
+
+ $this->categoryName->Text = '';
+ $this->abbrev->Text = '';
+ $this->duration->Text = '';
+
+ $this->showCategories();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/pages/TimeTracker/LogTimeEntry.php b/demos/time-tracker/protected/pages/TimeTracker/LogTimeEntry.php
index 2c8f0f3b..71d29b78 100644
--- a/demos/time-tracker/protected/pages/TimeTracker/LogTimeEntry.php
+++ b/demos/time-tracker/protected/pages/TimeTracker/LogTimeEntry.php
@@ -1,112 +1,112 @@
-<?php
-
-class LogTimeEntry extends TPage
-{
-
- protected function getProjectDao()
- {
- return $this->Application->Modules['daos']->getDao('ProjectDao');
- }
-
- protected function getCategoryDao()
- {
- return $this->Application->Modules['daos']->getDao('CategoryDao');
- }
-
- protected function getTimeEntryDao()
- {
- return $this->Application->Modules['daos']->getDao('TimeEntryDao');
- }
-
- public function onLoad($param)
- {
- if(!$this->IsPostBack)
- {
- $projects = $this->getProjects();
- $this->projects->DataSource = $projects;
- $this->projects->dataBind();
- $this->showCategories(key($projects));
- }
- }
-
- protected function showCategories($projectID)
- {
- $categories = array();
- foreach($this->getCategoryDao()->getCategoriesByProjectID($projectID) as $cat)
- {
- $categories[$cat->ID] = $cat->Name;
- }
- $this->category->DataSource = $categories;
- $this->category->dataBind();
- $this->showProjectUsers($projectID);
- }
-
- protected function showProjectUsers($projectID)
- {
- if($this->User->isInRole('manager'))
- $users = $this->getProjectDao()->getProjectMembers($projectID);
- else
- $users = array($this->User->Name);
- $this->projectMembers->DataSource = $users;
- $this->projectMembers->dataBind();
- if(is_int($index = array_search($this->User->Name, $users)))
- {
- $this->projectMembers->SelectedIndex = $index;
- $this->showTimeSheet();
- }
- }
-
- public function showTimeSheet()
- {
- $user = $this->projectMembers->SelectedItem->Text;
- $project = $this->projects->SelectedValue;
- $this->entryList->setProjectEntry($user,$project);
- $this->entryList->refreshEntryList();
- }
-
- protected function getProjects()
- {
- $projects = array();
- if($this->User->isInRole('admin'))
- $list = $this->getProjectDao()->getAllProjects();
- else if($this->User->isInRole('manager'))
- $list = $this->getProjectDao()->getProjectsByManagerName($this->User->Name);
- else
- $list = $this->getProjectDao()->getProjectsByUserName($this->User->Name);
- foreach($list as $project)
- $projects[$project->ID] = $project->Name;
- return $projects;
- }
-
- public function projects_Changed($sender, $param)
- {
- $this->showCategories($sender->SelectedValue);
- }
-
- public function AddNewEntry($sender, $param)
- {
- if(!$this->IsValid)
- return;
-
- if($this->projectMembers->SelectedItem)
- {
- $entry = new TimeEntryRecord;
- $entry->CreatorUserName = $this->User->Name;
- $category = new CategoryRecord;
- $category->ID = $this->category->SelectedValue;
- $entry->Category = $category;
- $entry->Description = $this->description->Text;
- $entry->Duration = floatval($this->hours->Text);
- $entry->ReportDate = $this->day->TimeStamp;
- $entry->Username = $this->projectMembers->SelectedItem->Text;
-
- $this->hours->Text = '';
- $this->description->Text = '';
-
- $this->getTimeEntryDao()->addNewTimeEntry($entry);
- $this->showTimeSheet();
- }
- }
-}
-
+<?php
+
+class LogTimeEntry extends TPage
+{
+
+ protected function getProjectDao()
+ {
+ return $this->Application->Modules['daos']->getDao('ProjectDao');
+ }
+
+ protected function getCategoryDao()
+ {
+ return $this->Application->Modules['daos']->getDao('CategoryDao');
+ }
+
+ protected function getTimeEntryDao()
+ {
+ return $this->Application->Modules['daos']->getDao('TimeEntryDao');
+ }
+
+ public function onLoad($param)
+ {
+ if(!$this->IsPostBack)
+ {
+ $projects = $this->getProjects();
+ $this->projects->DataSource = $projects;
+ $this->projects->dataBind();
+ $this->showCategories(key($projects));
+ }
+ }
+
+ protected function showCategories($projectID)
+ {
+ $categories = array();
+ foreach($this->getCategoryDao()->getCategoriesByProjectID($projectID) as $cat)
+ {
+ $categories[$cat->ID] = $cat->Name;
+ }
+ $this->category->DataSource = $categories;
+ $this->category->dataBind();
+ $this->showProjectUsers($projectID);
+ }
+
+ protected function showProjectUsers($projectID)
+ {
+ if($this->User->isInRole('manager'))
+ $users = $this->getProjectDao()->getProjectMembers($projectID);
+ else
+ $users = array($this->User->Name);
+ $this->projectMembers->DataSource = $users;
+ $this->projectMembers->dataBind();
+ if(is_int($index = array_search($this->User->Name, $users)))
+ {
+ $this->projectMembers->SelectedIndex = $index;
+ $this->showTimeSheet();
+ }
+ }
+
+ public function showTimeSheet()
+ {
+ $user = $this->projectMembers->SelectedItem->Text;
+ $project = $this->projects->SelectedValue;
+ $this->entryList->setProjectEntry($user,$project);
+ $this->entryList->refreshEntryList();
+ }
+
+ protected function getProjects()
+ {
+ $projects = array();
+ if($this->User->isInRole('admin'))
+ $list = $this->getProjectDao()->getAllProjects();
+ else if($this->User->isInRole('manager'))
+ $list = $this->getProjectDao()->getProjectsByManagerName($this->User->Name);
+ else
+ $list = $this->getProjectDao()->getProjectsByUserName($this->User->Name);
+ foreach($list as $project)
+ $projects[$project->ID] = $project->Name;
+ return $projects;
+ }
+
+ public function projects_Changed($sender, $param)
+ {
+ $this->showCategories($sender->SelectedValue);
+ }
+
+ public function AddNewEntry($sender, $param)
+ {
+ if(!$this->IsValid)
+ return;
+
+ if($this->projectMembers->SelectedItem)
+ {
+ $entry = new TimeEntryRecord;
+ $entry->CreatorUserName = $this->User->Name;
+ $category = new CategoryRecord;
+ $category->ID = $this->category->SelectedValue;
+ $entry->Category = $category;
+ $entry->Description = $this->description->Text;
+ $entry->Duration = floatval($this->hours->Text);
+ $entry->ReportDate = $this->day->TimeStamp;
+ $entry->Username = $this->projectMembers->SelectedItem->Text;
+
+ $this->hours->Text = '';
+ $this->description->Text = '';
+
+ $this->getTimeEntryDao()->addNewTimeEntry($entry);
+ $this->showTimeSheet();
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/pages/TimeTracker/Login.php b/demos/time-tracker/protected/pages/TimeTracker/Login.php
index 2bd02cc1..d306cf63 100644
--- a/demos/time-tracker/protected/pages/TimeTracker/Login.php
+++ b/demos/time-tracker/protected/pages/TimeTracker/Login.php
@@ -1,55 +1,55 @@
-<?php
-/**
- * Login Page class file.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package Demos
- */
-
-/**
- * Login page class.
- *
- * Validate the user credentials and redirect to requested page
- * if successful.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @version $Id$
- * @package Demos
- * @since 3.1
- */
-class Login extends TPage
-{
- /**
- * Validates the username and password.
- * @param TControl custom validator that created the event.
- * @param TServerValidateEventParameter validation parameters.
- */
- public function validateUser($sender, $param)
- {
- $authManager=$this->Application->getModule('auth');
- if(!$authManager->login($this->username->Text,$this->password->Text))
- $param->IsValid=false;;
- }
-
- /**
- * Redirect to the requested page if login is successful.
- * @param TControl button control that created the event.
- * @param TEventParameter event parameters.
- */
- public function doLogin($sender, $param)
- {
- if($this->Page->IsValid)
- {
- $auth = $this->Application->getModule('auth');
- if($this->remember->Checked)
- $auth->rememberSignon($this->User);
- $this->Response->redirect($auth->getReturnUrl());
- }
- }
-}
-
+<?php
+/**
+ * Login Page class file.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 2005-2006 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @version $Id$
+ * @package Demos
+ */
+
+/**
+ * Login page class.
+ *
+ * Validate the user credentials and redirect to requested page
+ * if successful.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @version $Id$
+ * @package Demos
+ * @since 3.1
+ */
+class Login extends TPage
+{
+ /**
+ * Validates the username and password.
+ * @param TControl custom validator that created the event.
+ * @param TServerValidateEventParameter validation parameters.
+ */
+ public function validateUser($sender, $param)
+ {
+ $authManager=$this->Application->getModule('auth');
+ if(!$authManager->login($this->username->Text,$this->password->Text))
+ $param->IsValid=false;;
+ }
+
+ /**
+ * Redirect to the requested page if login is successful.
+ * @param TControl button control that created the event.
+ * @param TEventParameter event parameters.
+ */
+ public function doLogin($sender, $param)
+ {
+ if($this->Page->IsValid)
+ {
+ $auth = $this->Application->getModule('auth');
+ if($this->remember->Checked)
+ $auth->rememberSignon($this->User);
+ $this->Response->redirect($auth->getReturnUrl());
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/pages/TimeTracker/Logout.php b/demos/time-tracker/protected/pages/TimeTracker/Logout.php
index 2e3d3ccc..f82f137c 100644
--- a/demos/time-tracker/protected/pages/TimeTracker/Logout.php
+++ b/demos/time-tracker/protected/pages/TimeTracker/Logout.php
@@ -1,34 +1,34 @@
-<?php
-/**
- * Logout class file.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package Demos
- */
-
-/**
- * Logout page class.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @version $Id$
- * @package Demos
- * @since 3.1
- */
-class Logout extends TPage
-{
- /**
- * Logs out the current user and redirect to default page.
- */
- function onLoad($param)
- {
- $this->Application->getModule('auth')->logout();
- $url = $this->Service->constructUrl($this->Service->DefaultPage);
- $this->Response->redirect($url);
- }
-}
-
+<?php
+/**
+ * Logout class file.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 2005-2006 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @version $Id$
+ * @package Demos
+ */
+
+/**
+ * Logout page class.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @version $Id$
+ * @package Demos
+ * @since 3.1
+ */
+class Logout extends TPage
+{
+ /**
+ * Logs out the current user and redirect to default page.
+ */
+ function onLoad($param)
+ {
+ $this->Application->getModule('auth')->logout();
+ $url = $this->Service->constructUrl($this->Service->DefaultPage);
+ $this->Response->redirect($url);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/pages/TimeTracker/MainLayout.php b/demos/time-tracker/protected/pages/TimeTracker/MainLayout.php
index 253d6c03..c966ba85 100644
--- a/demos/time-tracker/protected/pages/TimeTracker/MainLayout.php
+++ b/demos/time-tracker/protected/pages/TimeTracker/MainLayout.php
@@ -1,7 +1,7 @@
-<?php
-
-class MainLayout extends TTemplateControl
-{
-}
-
+<?php
+
+class MainLayout extends TTemplateControl
+{
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/pages/TimeTracker/ProjectDetails.php b/demos/time-tracker/protected/pages/TimeTracker/ProjectDetails.php
index 98a93148..f4fb9718 100644
--- a/demos/time-tracker/protected/pages/TimeTracker/ProjectDetails.php
+++ b/demos/time-tracker/protected/pages/TimeTracker/ProjectDetails.php
@@ -1,191 +1,191 @@
-<?php
-
-class ProjectDetails extends TPage
-{
- private $allUsers;
-
- private $currentProject;
-
- protected function getCurrentProject()
- {
- if(!$this->currentProject)
- {
- $id = intval($this->Request['ProjectID']);
- if($id > 0)
- $this->currentProject = $this->getProjectDao()->getProjectByID($id);
- }
- return $this->currentProject;
- }
-
- protected function getProjectDao()
- {
- return $this->Application->Modules['daos']->getDao('ProjectDao');
- }
-
- protected function getCategoryDao()
- {
- return $this->Application->Modules['daos']->getDao('CategoryDao');
- }
-
- public function onLoad($param)
- {
- if(!$this->IsPostBack)
- {
- $this->manager->DataSource = $this->getUsersWithRole('manager');
- $this->manager->dataBind();
- $this->members->DataSource = $this->getUsersWithRole('consultant');
- $this->members->dataBind();
-
- $project = $this->getCurrentProject();
-
- if($project !== null)
- {
- $this->projectName->Text = $project->Name;
- $this->completionDate->TimeStamp = $project->CompletionDate;
- $this->description->Text = $project->Description;
- $this->estimateHours->Text = $project->EstimateDuration;
- $this->manager->SelectedValue = $project->ManagerUserName;
-
- $this->selectProjectMembers($project->ID);
-
- $this->projectCategoryColumn->Visible = true;
- $this->categories->ProjectID = $project->ID;
- $this->categories->showCategories();
-
- $this->deleteButton->Visible = true;
-
- $this->projectList->DataSource = $this->getProjects();
- $this->projectList->dataBind();
-
- }
- else
- {
- $this->projectCategoryColumn->Visible = false;
- $this->deleteButton->Visible = false;
- }
-
- }
- }
-
- protected function getProjects()
- {
- $projects = array();
- foreach($this->getProjectDao()->getAllProjects() as $project)
- {
- if($project->Name != $this->currentProject->Name)
- $projects[$project->ID] = $project->Name;
- }
- return $projects;
- }
-
- protected function selectProjectMembers($projectID)
- {
- $members = $this->getProjectDao()->getProjectMembers($projectID);
- $this->members->SelectedValues = $members;
- }
-
- protected function getUsersWithRole($role)
- {
- if(is_null($this->allUsers))
- {
- $dao = $this->Application->Modules['daos']->getDao('UserDao');
- $this->allUsers = $dao->getAllUsers();
- }
- $users = array();
- foreach($this->allUsers as $user)
- {
- if($user->isInRole($role))
- $users[$user->Name] = $user->Name;
- }
- return $users;
- }
-
- public function onPreRender($param)
- {
- $ids = array();
- foreach($this->members->Items as $item)
- {
- if($item->Selected)
- $ids[] = $item->Value;
- }
- $this->setViewState('ActiveConsultants', $ids);
- }
-
- public function saveButton_clicked($sender, $param)
- {
- if(!$this->Page->IsValid)
- return;
-
- $newProject = new ProjectRecord;
-
- $projectDao = $this->getProjectDao();
-
- if($project = $this->getCurrentProject())
- $newProject = $projectDao->getProjectByID($project->ID);
- else
- $newProject->CreatorUserName = $this->User->Name;
-
- $newProject->Name = $this->projectName->Text;
- $newProject->CompletionDate = $this->completionDate->TimeStamp;
- $newProject->Description = $this->description->Text;
- $newProject->EstimateDuration = floatval($this->estimateHours->Text);
- $newProject->ManagerUserName = $this->manager->SelectedValue;
-
- if($this->currentProject)
- $projectDao->updateProject($newProject);
- else
- $projectDao->addNewProject($newProject);
-
- $this->updateProjectMembers($newProject->ID);
-
- $url = $this->Service->constructUrl('TimeTracker.ProjectDetails',
- array('ProjectID'=> $newProject->ID));
-
- $this->Response->redirect($url);
- }
-
- protected function updateProjectMembers($projectID)
- {
- $active = $this->getViewState('ActiveConsultants');
- $projectDao = $this->getProjectDao();
- foreach($this->members->Items as $item)
- {
- if($item->Selected)
- {
- if(!in_array($item->Value, $active))
- $projectDao->addUserToProject($projectID, $item->Value);
- }
- else
- {
- if(in_array($item->Value, $active))
- $projectDao->removeUserFromProject($projectID, $item->Value);
- }
- }
- }
-
- public function deleteButton_clicked($sender, $param)
- {
- if($project = $this->getCurrentProject())
- {
- $this->getProjectDao()->deleteProject($project->ID);
- $url = $this->Service->constructUrl('TimeTracker.ProjectList');
- $this->Response->redirect($url);
- }
- }
-
- public function copyButton_clicked($sender, $param)
- {
- $project = $this->projectList->SelectedValue;
- $categoryDao = $this->getCategoryDao();
- $categories = $categoryDao->getCategoriesByProjectID($project);
- $currentProject = $this->getCurrentProject();
- foreach($categories as $cat)
- {
- $cat->ProjectID = $currentProject->ID;
- $categoryDao->addNewCategory($cat);
- }
- $this->categories->showCategories();
- }
-}
-
+<?php
+
+class ProjectDetails extends TPage
+{
+ private $allUsers;
+
+ private $currentProject;
+
+ protected function getCurrentProject()
+ {
+ if(!$this->currentProject)
+ {
+ $id = intval($this->Request['ProjectID']);
+ if($id > 0)
+ $this->currentProject = $this->getProjectDao()->getProjectByID($id);
+ }
+ return $this->currentProject;
+ }
+
+ protected function getProjectDao()
+ {
+ return $this->Application->Modules['daos']->getDao('ProjectDao');
+ }
+
+ protected function getCategoryDao()
+ {
+ return $this->Application->Modules['daos']->getDao('CategoryDao');
+ }
+
+ public function onLoad($param)
+ {
+ if(!$this->IsPostBack)
+ {
+ $this->manager->DataSource = $this->getUsersWithRole('manager');
+ $this->manager->dataBind();
+ $this->members->DataSource = $this->getUsersWithRole('consultant');
+ $this->members->dataBind();
+
+ $project = $this->getCurrentProject();
+
+ if($project !== null)
+ {
+ $this->projectName->Text = $project->Name;
+ $this->completionDate->TimeStamp = $project->CompletionDate;
+ $this->description->Text = $project->Description;
+ $this->estimateHours->Text = $project->EstimateDuration;
+ $this->manager->SelectedValue = $project->ManagerUserName;
+
+ $this->selectProjectMembers($project->ID);
+
+ $this->projectCategoryColumn->Visible = true;
+ $this->categories->ProjectID = $project->ID;
+ $this->categories->showCategories();
+
+ $this->deleteButton->Visible = true;
+
+ $this->projectList->DataSource = $this->getProjects();
+ $this->projectList->dataBind();
+
+ }
+ else
+ {
+ $this->projectCategoryColumn->Visible = false;
+ $this->deleteButton->Visible = false;
+ }
+
+ }
+ }
+
+ protected function getProjects()
+ {
+ $projects = array();
+ foreach($this->getProjectDao()->getAllProjects() as $project)
+ {
+ if($project->Name != $this->currentProject->Name)
+ $projects[$project->ID] = $project->Name;
+ }
+ return $projects;
+ }
+
+ protected function selectProjectMembers($projectID)
+ {
+ $members = $this->getProjectDao()->getProjectMembers($projectID);
+ $this->members->SelectedValues = $members;
+ }
+
+ protected function getUsersWithRole($role)
+ {
+ if(is_null($this->allUsers))
+ {
+ $dao = $this->Application->Modules['daos']->getDao('UserDao');
+ $this->allUsers = $dao->getAllUsers();
+ }
+ $users = array();
+ foreach($this->allUsers as $user)
+ {
+ if($user->isInRole($role))
+ $users[$user->Name] = $user->Name;
+ }
+ return $users;
+ }
+
+ public function onPreRender($param)
+ {
+ $ids = array();
+ foreach($this->members->Items as $item)
+ {
+ if($item->Selected)
+ $ids[] = $item->Value;
+ }
+ $this->setViewState('ActiveConsultants', $ids);
+ }
+
+ public function saveButton_clicked($sender, $param)
+ {
+ if(!$this->Page->IsValid)
+ return;
+
+ $newProject = new ProjectRecord;
+
+ $projectDao = $this->getProjectDao();
+
+ if($project = $this->getCurrentProject())
+ $newProject = $projectDao->getProjectByID($project->ID);
+ else
+ $newProject->CreatorUserName = $this->User->Name;
+
+ $newProject->Name = $this->projectName->Text;
+ $newProject->CompletionDate = $this->completionDate->TimeStamp;
+ $newProject->Description = $this->description->Text;
+ $newProject->EstimateDuration = floatval($this->estimateHours->Text);
+ $newProject->ManagerUserName = $this->manager->SelectedValue;
+
+ if($this->currentProject)
+ $projectDao->updateProject($newProject);
+ else
+ $projectDao->addNewProject($newProject);
+
+ $this->updateProjectMembers($newProject->ID);
+
+ $url = $this->Service->constructUrl('TimeTracker.ProjectDetails',
+ array('ProjectID'=> $newProject->ID));
+
+ $this->Response->redirect($url);
+ }
+
+ protected function updateProjectMembers($projectID)
+ {
+ $active = $this->getViewState('ActiveConsultants');
+ $projectDao = $this->getProjectDao();
+ foreach($this->members->Items as $item)
+ {
+ if($item->Selected)
+ {
+ if(!in_array($item->Value, $active))
+ $projectDao->addUserToProject($projectID, $item->Value);
+ }
+ else
+ {
+ if(in_array($item->Value, $active))
+ $projectDao->removeUserFromProject($projectID, $item->Value);
+ }
+ }
+ }
+
+ public function deleteButton_clicked($sender, $param)
+ {
+ if($project = $this->getCurrentProject())
+ {
+ $this->getProjectDao()->deleteProject($project->ID);
+ $url = $this->Service->constructUrl('TimeTracker.ProjectList');
+ $this->Response->redirect($url);
+ }
+ }
+
+ public function copyButton_clicked($sender, $param)
+ {
+ $project = $this->projectList->SelectedValue;
+ $categoryDao = $this->getCategoryDao();
+ $categories = $categoryDao->getCategoriesByProjectID($project);
+ $currentProject = $this->getCurrentProject();
+ foreach($categories as $cat)
+ {
+ $cat->ProjectID = $currentProject->ID;
+ $categoryDao->addNewCategory($cat);
+ }
+ $this->categories->showCategories();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/pages/TimeTracker/ProjectList.php b/demos/time-tracker/protected/pages/TimeTracker/ProjectList.php
index 4e3ac485..6ea6afe1 100644
--- a/demos/time-tracker/protected/pages/TimeTracker/ProjectList.php
+++ b/demos/time-tracker/protected/pages/TimeTracker/ProjectList.php
@@ -1,34 +1,34 @@
-<?php
-
-class ProjectList extends TPage
-{
- protected function showProjects($sort='', $order='')
- {
- $dao = $this->Application->Modules['daos']->getDao('ProjectDao');
- $this->projectList->DataSource = $dao->getAllProjects($sort, $order);
- $this->projectList->dataBind();
- }
-
- protected function getSortOrdering($sort)
- {
- $ordering = $this->getViewState('SortOrder', array());
- $order = isset($ordering[$sort]) ? $ordering[$sort] : 'DESC';
- $ordering[$sort] = $order == 'DESC' ? 'ASC' : 'DESC';
- $this->setViewState('SortOrder', $ordering);
- return $ordering[$sort];
- }
-
- protected function sortProjects($sender, $param)
- {
- $sort = $param->SortExpression;
- $this->showProjects($sort, $this->getSortOrdering($sort));
- }
-
- public function onLoad($param)
- {
- if(!$this->IsPostBack)
- $this->showProjects();
- }
-}
-
+<?php
+
+class ProjectList extends TPage
+{
+ protected function showProjects($sort='', $order='')
+ {
+ $dao = $this->Application->Modules['daos']->getDao('ProjectDao');
+ $this->projectList->DataSource = $dao->getAllProjects($sort, $order);
+ $this->projectList->dataBind();
+ }
+
+ protected function getSortOrdering($sort)
+ {
+ $ordering = $this->getViewState('SortOrder', array());
+ $order = isset($ordering[$sort]) ? $ordering[$sort] : 'DESC';
+ $ordering[$sort] = $order == 'DESC' ? 'ASC' : 'DESC';
+ $this->setViewState('SortOrder', $ordering);
+ return $ordering[$sort];
+ }
+
+ protected function sortProjects($sender, $param)
+ {
+ $sort = $param->SortExpression;
+ $this->showProjects($sort, $this->getSortOrdering($sort));
+ }
+
+ public function onLoad($param)
+ {
+ if(!$this->IsPostBack)
+ $this->showProjects();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/pages/TimeTracker/ReportProject.php b/demos/time-tracker/protected/pages/TimeTracker/ReportProject.php
index fcb1c865..6ce849b9 100644
--- a/demos/time-tracker/protected/pages/TimeTracker/ReportProject.php
+++ b/demos/time-tracker/protected/pages/TimeTracker/ReportProject.php
@@ -1,53 +1,53 @@
-<?php
-
-class ReportProject extends TPage
-{
- protected function getProjects()
- {
- $projectDao = $this->Application->Modules['daos']->getDao('ProjectDao');
- $projects = array();
- foreach($projectDao->getAllProjects() as $project)
- $projects[$project->ID] = $project->Name;
- return $projects;
- }
-
- public function onLoad($param)
- {
- if(!$this->IsPostBack)
- {
- $this->projectList->DataSource = $this->getProjects();
- $this->dataBind();
- }
- }
-
- public function generateReport_Clicked($sender, $param)
- {
- if(count($this->projectList->SelectedValues) > 0)
- $this->showReport();
- }
-
- protected function showReport()
- {
- $reportDao = $this->Application->Modules['daos']->getDao('ReportDao');
- $reports = $reportDao->getTimeReportsByProjectIDs($this->projectList->SelectedValues);
- $this->views->ActiveViewIndex = 1;
- $this->projects->DataSource = $reports;
- $this->projects->dataBind();
- }
-
- public function project_itemCreated($sender, $param)
- {
- $item = $param->Item;
- if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
- $item->category->DataSource = $item->DataItem->Categories;
- }
-
- public function category_itemCreated($sender, $param)
- {
- $item = $param->Item;
- if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
- $item->members->DataSource = $item->DataItem->members;
- }
-}
-
+<?php
+
+class ReportProject extends TPage
+{
+ protected function getProjects()
+ {
+ $projectDao = $this->Application->Modules['daos']->getDao('ProjectDao');
+ $projects = array();
+ foreach($projectDao->getAllProjects() as $project)
+ $projects[$project->ID] = $project->Name;
+ return $projects;
+ }
+
+ public function onLoad($param)
+ {
+ if(!$this->IsPostBack)
+ {
+ $this->projectList->DataSource = $this->getProjects();
+ $this->dataBind();
+ }
+ }
+
+ public function generateReport_Clicked($sender, $param)
+ {
+ if(count($this->projectList->SelectedValues) > 0)
+ $this->showReport();
+ }
+
+ protected function showReport()
+ {
+ $reportDao = $this->Application->Modules['daos']->getDao('ReportDao');
+ $reports = $reportDao->getTimeReportsByProjectIDs($this->projectList->SelectedValues);
+ $this->views->ActiveViewIndex = 1;
+ $this->projects->DataSource = $reports;
+ $this->projects->dataBind();
+ }
+
+ public function project_itemCreated($sender, $param)
+ {
+ $item = $param->Item;
+ if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
+ $item->category->DataSource = $item->DataItem->Categories;
+ }
+
+ public function category_itemCreated($sender, $param)
+ {
+ $item = $param->Item;
+ if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
+ $item->members->DataSource = $item->DataItem->members;
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/pages/TimeTracker/ReportResource.php b/demos/time-tracker/protected/pages/TimeTracker/ReportResource.php
index 65283417..26644bc9 100644
--- a/demos/time-tracker/protected/pages/TimeTracker/ReportResource.php
+++ b/demos/time-tracker/protected/pages/TimeTracker/ReportResource.php
@@ -1,71 +1,71 @@
-<?php
-
-class ReportResource extends TPage
-{
- protected function getProjects()
- {
- $projectDao = $this->Application->Modules['daos']->getDao('ProjectDao');
- $projects = array();
- foreach($projectDao->getAllProjects() as $project)
- $projects[$project->ID] = $project->Name;
- return $projects;
- }
-
- protected function getUsers()
- {
- $dao = $this->Application->Modules['daos']->getDao('UserDao');
- $users = array();
- foreach($dao->getAllUsers() as $user)
- {
- $users[$user->Name] = $user->Name;
- }
- return $users;
- }
-
- public function onLoad($param)
- {
- if(!$this->IsPostBack)
- {
- $this->projectList->DataSource = $this->getProjects();
- $this->resourceList->DataSource = $this->getUsers();
- $this->dataBind();
- }
- }
-
- public function generateReport_Clicked($sender, $param)
- {
- if(count($this->projectList->SelectedValues) > 0
- && count($this->resourceList->SelectedValues) >0)
- {
- $this->showReport();
- }
- }
-
- protected function showReport()
- {
- $this->views->ActiveViewIndex = 1;
- $reportDao = $this->Application->Modules['daos']->getDao('ReportDao');
- $projects = $this->projectList->SelectedValues;
- $users = $this->resourceList->SelectedValues;
- $start = $this->dateFrom->TimeStamp;
- $end = $this->dateTo->TimeStamp;
-
- $report = $reportDao->getUserProjectTimeReports($users, $projects, $start, $end);
-
- $this->resource_report->DataSource = $report;
- $this->resource_report->dataBind();
- }
-
- public function resource_report_itemCreated($sender, $param)
- {
- $item = $param->Item;
- if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
- {
- if(count($item->DataItem->Projects) > 0 &&
- $item->DataItem->Projects[0]->ProjectName !== null)
- $item->time_entries->DataSource = $item->DataItem->Projects;
- }
- }
-}
-
+<?php
+
+class ReportResource extends TPage
+{
+ protected function getProjects()
+ {
+ $projectDao = $this->Application->Modules['daos']->getDao('ProjectDao');
+ $projects = array();
+ foreach($projectDao->getAllProjects() as $project)
+ $projects[$project->ID] = $project->Name;
+ return $projects;
+ }
+
+ protected function getUsers()
+ {
+ $dao = $this->Application->Modules['daos']->getDao('UserDao');
+ $users = array();
+ foreach($dao->getAllUsers() as $user)
+ {
+ $users[$user->Name] = $user->Name;
+ }
+ return $users;
+ }
+
+ public function onLoad($param)
+ {
+ if(!$this->IsPostBack)
+ {
+ $this->projectList->DataSource = $this->getProjects();
+ $this->resourceList->DataSource = $this->getUsers();
+ $this->dataBind();
+ }
+ }
+
+ public function generateReport_Clicked($sender, $param)
+ {
+ if(count($this->projectList->SelectedValues) > 0
+ && count($this->resourceList->SelectedValues) >0)
+ {
+ $this->showReport();
+ }
+ }
+
+ protected function showReport()
+ {
+ $this->views->ActiveViewIndex = 1;
+ $reportDao = $this->Application->Modules['daos']->getDao('ReportDao');
+ $projects = $this->projectList->SelectedValues;
+ $users = $this->resourceList->SelectedValues;
+ $start = $this->dateFrom->TimeStamp;
+ $end = $this->dateTo->TimeStamp;
+
+ $report = $reportDao->getUserProjectTimeReports($users, $projects, $start, $end);
+
+ $this->resource_report->DataSource = $report;
+ $this->resource_report->dataBind();
+ }
+
+ public function resource_report_itemCreated($sender, $param)
+ {
+ $item = $param->Item;
+ if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem')
+ {
+ if(count($item->DataItem->Projects) > 0 &&
+ $item->DataItem->Projects[0]->ProjectName !== null)
+ $item->time_entries->DataSource = $item->DataItem->Projects;
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/pages/TimeTracker/SiteMap.php b/demos/time-tracker/protected/pages/TimeTracker/SiteMap.php
index dde4b44d..cb923178 100644
--- a/demos/time-tracker/protected/pages/TimeTracker/SiteMap.php
+++ b/demos/time-tracker/protected/pages/TimeTracker/SiteMap.php
@@ -1,57 +1,57 @@
-<?php
-/**
- * SiteMap template class file.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package Demos
- */
-
-/**
- * SiteMap menu is rendered depending on user roles.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @version $Id$
- * @package Demos
- * @since 3.1
- */
-class SiteMap extends TTemplateControl
-{
- /**
- * Sets the active menu item using css class.
- */
- public function onPreRender($param)
- {
- parent::onPreRender($param);
-
- $page = explode('.',$this->Request->ServiceParameter);
- $active = null;
- switch($page[count($page)-1])
- {
- case 'ProjectList':
- case 'ProjectDetails':
- $active = $this->ProjectMenu;
- break;
- case 'UserList':
- case 'UserCreate':
- $active = $this->AdminMenu;
- break;
- case 'ReportProject':
- case 'ReportResource':
- $active = $this->ReportMenu;
- break;
- default:
- $active = $this->LogMenu;
- break;
- }
-
- //add 'active' string to place holder body.
- if(!is_null($active))
- $active->Controls[] = 'active';
- }
-}
-
+<?php
+/**
+ * SiteMap template class file.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 2005-2006 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @version $Id$
+ * @package Demos
+ */
+
+/**
+ * SiteMap menu is rendered depending on user roles.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @version $Id$
+ * @package Demos
+ * @since 3.1
+ */
+class SiteMap extends TTemplateControl
+{
+ /**
+ * Sets the active menu item using css class.
+ */
+ public function onPreRender($param)
+ {
+ parent::onPreRender($param);
+
+ $page = explode('.',$this->Request->ServiceParameter);
+ $active = null;
+ switch($page[count($page)-1])
+ {
+ case 'ProjectList':
+ case 'ProjectDetails':
+ $active = $this->ProjectMenu;
+ break;
+ case 'UserList':
+ case 'UserCreate':
+ $active = $this->AdminMenu;
+ break;
+ case 'ReportProject':
+ case 'ReportResource':
+ $active = $this->ReportMenu;
+ break;
+ default:
+ $active = $this->LogMenu;
+ break;
+ }
+
+ //add 'active' string to place holder body.
+ if(!is_null($active))
+ $active->Controls[] = 'active';
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/pages/TimeTracker/TimeEntryList.php b/demos/time-tracker/protected/pages/TimeTracker/TimeEntryList.php
index ee3f4bb2..0730505f 100644
--- a/demos/time-tracker/protected/pages/TimeTracker/TimeEntryList.php
+++ b/demos/time-tracker/protected/pages/TimeTracker/TimeEntryList.php
@@ -1,89 +1,89 @@
-<?php
-
-class TimeEntryList extends TTemplateControl
-{
- protected function getTimeEntryDao()
- {
- return $this->Application->Modules['daos']->getDao('TimeEntryDao');
- }
-
- protected function getCategoryDao()
- {
- return $this->Application->Modules['daos']->getDao('CategoryDao');
- }
-
- public function setProjectEntry($userID,$projectID)
- {
- $this->setViewState('ProjectEntry', array($userID,$projectID));
- }
-
- protected function getCategories()
- {
- $project = $this->getViewState('ProjectEntry');
- foreach($this->getCategoryDao()->getCategoriesByProjectID($project[1]) as $cat)
- {
- $categories[$cat->ID] = $cat->Name;
- }
- return $categories;
- }
-
- protected function showEntryList()
- {
- $project = $this->getViewState('ProjectEntry');
- $list = $this->getTimeEntryDao()->getTimeEntriesInProject($project[0], $project[1]);
- $this->entries->DataSource = $list;
- $this->entries->dataBind();
- }
-
- public function refreshEntryList()
- {
- $this->entries->EditItemIndex=-1;
- $this->showEntryList();
- }
-
- public function editEntryItem($sender, $param)
- {
- $this->entries->EditItemIndex=$param->Item->ItemIndex;
- $this->showEntryList();
- }
-
- public function deleteEntryItem($sender, $param)
- {
- $id = $this->entries->DataKeys[$param->Item->ItemIndex];
- $this->getTimeEntryDao()->deleteTimeEntry($id);
- $this->refreshEntryList();
- }
-
- public function updateEntryItem($sender, $param)
- {
- if(!$this->Page->IsValid)
- return;
-
- $item = $param->Item;
-
- $id = $this->entries->DataKeys[$param->Item->ItemIndex];
-
- $entry = $this->getTimeEntryDao()->getTimeEntryByID($id);
- $category = new CategoryRecord;
- $category->ID = $param->Item->category->SelectedValue;
- $entry->Category = $category;
- $entry->Description = $param->Item->description->Text;
- $entry->Duration = floatval($param->Item->hours->Text);
- $entry->ReportDate = $param->Item->day->TimeStamp;
-
- $this->getTimeEntryDao()->updateTimeEntry($entry);
- $this->refreshEntryList();
- }
-
- public function EntryItemCreated($sender, $param)
- {
- if($param->Item->ItemType == 'EditItem' && $param->Item->DataItem)
- {
- $param->Item->category->DataSource = $this->getCategories();
- $param->Item->category->dataBind();
- $param->Item->category->SelectedValue = $param->Item->DataItem->Category->ID;
- }
- }
-}
-
+<?php
+
+class TimeEntryList extends TTemplateControl
+{
+ protected function getTimeEntryDao()
+ {
+ return $this->Application->Modules['daos']->getDao('TimeEntryDao');
+ }
+
+ protected function getCategoryDao()
+ {
+ return $this->Application->Modules['daos']->getDao('CategoryDao');
+ }
+
+ public function setProjectEntry($userID,$projectID)
+ {
+ $this->setViewState('ProjectEntry', array($userID,$projectID));
+ }
+
+ protected function getCategories()
+ {
+ $project = $this->getViewState('ProjectEntry');
+ foreach($this->getCategoryDao()->getCategoriesByProjectID($project[1]) as $cat)
+ {
+ $categories[$cat->ID] = $cat->Name;
+ }
+ return $categories;
+ }
+
+ protected function showEntryList()
+ {
+ $project = $this->getViewState('ProjectEntry');
+ $list = $this->getTimeEntryDao()->getTimeEntriesInProject($project[0], $project[1]);
+ $this->entries->DataSource = $list;
+ $this->entries->dataBind();
+ }
+
+ public function refreshEntryList()
+ {
+ $this->entries->EditItemIndex=-1;
+ $this->showEntryList();
+ }
+
+ public function editEntryItem($sender, $param)
+ {
+ $this->entries->EditItemIndex=$param->Item->ItemIndex;
+ $this->showEntryList();
+ }
+
+ public function deleteEntryItem($sender, $param)
+ {
+ $id = $this->entries->DataKeys[$param->Item->ItemIndex];
+ $this->getTimeEntryDao()->deleteTimeEntry($id);
+ $this->refreshEntryList();
+ }
+
+ public function updateEntryItem($sender, $param)
+ {
+ if(!$this->Page->IsValid)
+ return;
+
+ $item = $param->Item;
+
+ $id = $this->entries->DataKeys[$param->Item->ItemIndex];
+
+ $entry = $this->getTimeEntryDao()->getTimeEntryByID($id);
+ $category = new CategoryRecord;
+ $category->ID = $param->Item->category->SelectedValue;
+ $entry->Category = $category;
+ $entry->Description = $param->Item->description->Text;
+ $entry->Duration = floatval($param->Item->hours->Text);
+ $entry->ReportDate = $param->Item->day->TimeStamp;
+
+ $this->getTimeEntryDao()->updateTimeEntry($entry);
+ $this->refreshEntryList();
+ }
+
+ public function EntryItemCreated($sender, $param)
+ {
+ if($param->Item->ItemType == 'EditItem' && $param->Item->DataItem)
+ {
+ $param->Item->category->DataSource = $this->getCategories();
+ $param->Item->category->dataBind();
+ $param->Item->category->SelectedValue = $param->Item->DataItem->Category->ID;
+ }
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/pages/TimeTracker/UserCreate.php b/demos/time-tracker/protected/pages/TimeTracker/UserCreate.php
index 8ee077ac..eddb87cb 100644
--- a/demos/time-tracker/protected/pages/TimeTracker/UserCreate.php
+++ b/demos/time-tracker/protected/pages/TimeTracker/UserCreate.php
@@ -1,112 +1,112 @@
-<?php
-/**
- * UserCreate page class file.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package Demos
- */
-
-/**
- * Create new user wizard page class. Validate that the usernames are unique and
- * set the new user credentials as the current application credentials.
- *
- * If logged in as admin, the user role can be change during creation.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @version $Id$
- * @package Demos
- * @since 3.1
- */
-class UserCreate extends TPage
-{
- /**
- * Sets the default new user roles, default role is set in config.xml
- */
- public function onLoad($param)
- {
- if(!$this->IsPostBack)
- {
- $this->role->SelectedValue =
- $this->Application->Parameters['NewUserRoles'];
- }
- }
-
- /**
- * Verify that the username is not taken.
- * @param TControl custom validator that created the event.
- * @param TServerValidateEventParameter validation parameters.
- */
- public function checkUsername($sender, $param)
- {
- $userDao = $this->Application->Modules['daos']->getDao('UserDao');
- if($userDao->usernameExists($this->username->Text))
- {
- $param->IsValid = false;
- $sender->ErrorMessage =
- "The user name is already taken, try '{$this->username->Text}01'";
- }
- }
-
- /**
- * Skip the role assignment step if not admin.
- */
- public function userWizardNextStep($sender, $param)
- {
- if($param->CurrentStepIndex == 0)
- {
- //create user with admin credentials
- if(!$this->User->isInRole('admin'))
- {
- $this->createNewUser($sender, $param);
- $param->NextStepIndex = 2;
- }
- }
- }
-
- /**
- * Create a new user if all data entered are valid.
- * The default user roles are obtained from "config.xml". The new user
- * details is saved to the database and the new credentials are used as the
- * application user. The user is redirected to the requested page.
- * @param TControl button control that created the event.
- * @param TEventParameter event parameters.
- */
- public function createNewUser($sender, $param)
- {
- if($this->IsValid)
- {
- $newUser = new TimeTrackerUser($this->User->Manager);
- $newUser->EmailAddress = $this->email->Text;
- $newUser->Name = $this->username->Text;
- $newUser->IsGuest = false;
- $newUser->Roles = $this->role->SelectedValue;
-
- //save the user
- $userDao = $this->Application->Modules['daos']->getDao('UserDao');
- $userDao->addNewUser($newUser, $this->password->Text);
-
- //update the user credentials if not admin
- if(!$this->User->isInRole('admin'))
- {
- $auth = $this->Application->getModule('auth');
- $auth->updateCredential($newUser);
- }
- }
- }
-
- /**
- * Continue with requested page.
- */
- public function wizardCompleted($sender, $param)
- {
- //return to requested page
- $auth = $this->Application->getModule('auth');
- $this->Response->redirect($auth->getReturnUrl());
- }
-}
-
+<?php
+/**
+ * UserCreate page class file.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 2005-2006 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @version $Id$
+ * @package Demos
+ */
+
+/**
+ * Create new user wizard page class. Validate that the usernames are unique and
+ * set the new user credentials as the current application credentials.
+ *
+ * If logged in as admin, the user role can be change during creation.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @version $Id$
+ * @package Demos
+ * @since 3.1
+ */
+class UserCreate extends TPage
+{
+ /**
+ * Sets the default new user roles, default role is set in config.xml
+ */
+ public function onLoad($param)
+ {
+ if(!$this->IsPostBack)
+ {
+ $this->role->SelectedValue =
+ $this->Application->Parameters['NewUserRoles'];
+ }
+ }
+
+ /**
+ * Verify that the username is not taken.
+ * @param TControl custom validator that created the event.
+ * @param TServerValidateEventParameter validation parameters.
+ */
+ public function checkUsername($sender, $param)
+ {
+ $userDao = $this->Application->Modules['daos']->getDao('UserDao');
+ if($userDao->usernameExists($this->username->Text))
+ {
+ $param->IsValid = false;
+ $sender->ErrorMessage =
+ "The user name is already taken, try '{$this->username->Text}01'";
+ }
+ }
+
+ /**
+ * Skip the role assignment step if not admin.
+ */
+ public function userWizardNextStep($sender, $param)
+ {
+ if($param->CurrentStepIndex == 0)
+ {
+ //create user with admin credentials
+ if(!$this->User->isInRole('admin'))
+ {
+ $this->createNewUser($sender, $param);
+ $param->NextStepIndex = 2;
+ }
+ }
+ }
+
+ /**
+ * Create a new user if all data entered are valid.
+ * The default user roles are obtained from "config.xml". The new user
+ * details is saved to the database and the new credentials are used as the
+ * application user. The user is redirected to the requested page.
+ * @param TControl button control that created the event.
+ * @param TEventParameter event parameters.
+ */
+ public function createNewUser($sender, $param)
+ {
+ if($this->IsValid)
+ {
+ $newUser = new TimeTrackerUser($this->User->Manager);
+ $newUser->EmailAddress = $this->email->Text;
+ $newUser->Name = $this->username->Text;
+ $newUser->IsGuest = false;
+ $newUser->Roles = $this->role->SelectedValue;
+
+ //save the user
+ $userDao = $this->Application->Modules['daos']->getDao('UserDao');
+ $userDao->addNewUser($newUser, $this->password->Text);
+
+ //update the user credentials if not admin
+ if(!$this->User->isInRole('admin'))
+ {
+ $auth = $this->Application->getModule('auth');
+ $auth->updateCredential($newUser);
+ }
+ }
+ }
+
+ /**
+ * Continue with requested page.
+ */
+ public function wizardCompleted($sender, $param)
+ {
+ //return to requested page
+ $auth = $this->Application->getModule('auth');
+ $this->Response->redirect($auth->getReturnUrl());
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/protected/pages/TimeTracker/UserList.php b/demos/time-tracker/protected/pages/TimeTracker/UserList.php
index 22974d29..ad35a758 100644
--- a/demos/time-tracker/protected/pages/TimeTracker/UserList.php
+++ b/demos/time-tracker/protected/pages/TimeTracker/UserList.php
@@ -1,34 +1,34 @@
-<?php
-/**
- * UserList page class file.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2006 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package Demos
- */
-
-/**
- * List all users in a repeater.
- *
- * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
- * @version $Id$
- * @package Demos
- * @since 3.1
- */
-class UserList extends TPage
-{
- /**
- * Load all the users and display them in a repeater.
- */
- function onLoad($param)
- {
- $userDao = $this->Application->Modules['daos']->getDao('UserDao');
- $this->list->DataSource = $userDao->getAllUsers();
- $this->list->dataBind();
- }
-}
-
+<?php
+/**
+ * UserList page class file.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 2005-2006 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @version $Id$
+ * @package Demos
+ */
+
+/**
+ * List all users in a repeater.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @version $Id$
+ * @package Demos
+ * @since 3.1
+ */
+class UserList extends TPage
+{
+ /**
+ * Load all the users and display them in a repeater.
+ */
+ function onLoad($param)
+ {
+ $userDao = $this->Application->Modules['daos']->getDao('UserDao');
+ $this->list->DataSource = $userDao->getAllUsers();
+ $this->list->dataBind();
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/tests/functional.php b/demos/time-tracker/tests/functional.php
index 888b29db..00790199 100644
--- a/demos/time-tracker/tests/functional.php
+++ b/demos/time-tracker/tests/functional.php
@@ -1,10 +1,10 @@
-<?php
-
-include_once '../../../tests/test_tools/functional_tests.php';
-
-$test_cases = dirname(__FILE__)."/functional";
-
-$tester=new PradoFunctionalTester($test_cases);
-$tester->run(new SimpleReporter());
-
+<?php
+
+include_once '../../../tests/test_tools/functional_tests.php';
+
+$test_cases = dirname(__FILE__)."/functional";
+
+$tester=new PradoFunctionalTester($test_cases);
+$tester->run(new SimpleReporter());
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/tests/functional/HelloPradoTestCase.php b/demos/time-tracker/tests/functional/HelloPradoTestCase.php
index b9e4f1e3..13ee9343 100644
--- a/demos/time-tracker/tests/functional/HelloPradoTestCase.php
+++ b/demos/time-tracker/tests/functional/HelloPradoTestCase.php
@@ -1,14 +1,14 @@
-<?php
-
-//web testing
-class HelloPradoTestCase extends SeleniumTestCase
-{
- function testIndexPage()
- {
- $this->open('../index.php');
- $this->assertTextPresent('Welcome to Prado!');
- //add more test assertions...
- }
-}
-
+<?php
+
+//web testing
+class HelloPradoTestCase extends SeleniumTestCase
+{
+ function testIndexPage()
+ {
+ $this->open('../index.php');
+ $this->assertTextPresent('Welcome to Prado!');
+ //add more test assertions...
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/tests/unit.php b/demos/time-tracker/tests/unit.php
index 20d56432..7961d4f2 100644
--- a/demos/time-tracker/tests/unit.php
+++ b/demos/time-tracker/tests/unit.php
@@ -1,11 +1,11 @@
-<?php
-
-include_once '../../../tests/test_tools/unit_tests.php';
-
-$app_directory = "../protected";
-$test_cases = dirname(__FILE__)."/unit";
-
-$tester = new PradoUnitTester($test_cases, $app_directory);
-$tester->run(new HtmlReporter());
-
+<?php
+
+include_once '../../../tests/test_tools/unit_tests.php';
+
+$app_directory = "../protected";
+$test_cases = dirname(__FILE__)."/unit";
+
+$tester = new PradoUnitTester($test_cases, $app_directory);
+$tester->run(new HtmlReporter());
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/tests/unit/BaseTestCase.php b/demos/time-tracker/tests/unit/BaseTestCase.php
index d72cbc5c..10df400f 100644
--- a/demos/time-tracker/tests/unit/BaseTestCase.php
+++ b/demos/time-tracker/tests/unit/BaseTestCase.php
@@ -1,64 +1,64 @@
-<?php
-
-
-Prado::using('Application.App_Code.Dao.*');
-
-class BaseTestCase extends UnitTestCase
-{
- protected $sqlmap;
-
- function setup()
- {
- $app = Prado::getApplication();
- $this->sqlmap = $app->getModule('daos')->getClient();
- }
-
-
- function flushDatabase()
- {
- $conn = $this->sqlmap->getDbConnection();
- $find = 'sqlite:protected';
- if(is_int(strpos($conn->getConnectionString(),$find)))
- $conn->ConnectionString = str_replace($find, 'sqlite:../protected', $conn->ConnectionString);
- $conn->setActive(false);
- $conn->setActive(true);
- switch(strtolower($conn->getDriverName()))
- {
- case 'mysql':
- return $this->flushMySQLDatabase();
- case 'sqlite':
- return $this->flushSQLiteDatabase();
- }
- }
-
- function flushSQLiteDatabase()
- {
- $conn = $this->sqlmap->getDbConnection();
- $file = str_replace('sqlite:','',$conn->getConnectionString());
- $backup = $file.'.bak';
- copy($backup, $file);
- }
-
- function flushMySQLDatabase()
- {
- $conn = $this->sqlmap->getDbConnection();
- $file = Prado::getPathOfNamespace('Application.App_Data.MySQL4.mysql-reset','.sql');
- if(is_file($file))
- $this->runScript($conn, $file);
- else
- throw new Exception('unable to find script file '.$file);
- }
-
- protected function runScript($connection, $script)
- {
- $sql = file_get_contents($script);
- $lines = explode(';', $sql);
- foreach($lines as $line)
- {
- $line = trim($line);
- if(strlen($line) > 0)
- $connection->createCommand($line)->execute();
- }
- }
-}
+<?php
+
+
+Prado::using('Application.App_Code.Dao.*');
+
+class BaseTestCase extends UnitTestCase
+{
+ protected $sqlmap;
+
+ function setup()
+ {
+ $app = Prado::getApplication();
+ $this->sqlmap = $app->getModule('daos')->getClient();
+ }
+
+
+ function flushDatabase()
+ {
+ $conn = $this->sqlmap->getDbConnection();
+ $find = 'sqlite:protected';
+ if(is_int(strpos($conn->getConnectionString(),$find)))
+ $conn->ConnectionString = str_replace($find, 'sqlite:../protected', $conn->ConnectionString);
+ $conn->setActive(false);
+ $conn->setActive(true);
+ switch(strtolower($conn->getDriverName()))
+ {
+ case 'mysql':
+ return $this->flushMySQLDatabase();
+ case 'sqlite':
+ return $this->flushSQLiteDatabase();
+ }
+ }
+
+ function flushSQLiteDatabase()
+ {
+ $conn = $this->sqlmap->getDbConnection();
+ $file = str_replace('sqlite:','',$conn->getConnectionString());
+ $backup = $file.'.bak';
+ copy($backup, $file);
+ }
+
+ function flushMySQLDatabase()
+ {
+ $conn = $this->sqlmap->getDbConnection();
+ $file = Prado::getPathOfNamespace('Application.App_Data.MySQL4.mysql-reset','.sql');
+ if(is_file($file))
+ $this->runScript($conn, $file);
+ else
+ throw new Exception('unable to find script file '.$file);
+ }
+
+ protected function runScript($connection, $script)
+ {
+ $sql = file_get_contents($script);
+ $lines = explode(';', $sql);
+ foreach($lines as $line)
+ {
+ $line = trim($line);
+ if(strlen($line) > 0)
+ $connection->createCommand($line)->execute();
+ }
+ }
+}
?> \ No newline at end of file
diff --git a/demos/time-tracker/tests/unit/CategoryDaoTestCase.php b/demos/time-tracker/tests/unit/CategoryDaoTestCase.php
index d47fa7ce..e018b0b0 100644
--- a/demos/time-tracker/tests/unit/CategoryDaoTestCase.php
+++ b/demos/time-tracker/tests/unit/CategoryDaoTestCase.php
@@ -1,201 +1,201 @@
-<?php
-
-require_once(dirname(__FILE__).'/BaseTestCase.php');
-
-class CategoryDaoTestCase extends BaseTestCase
-{
- protected $categoryDao;
- protected $projectDao;
-
- function setup()
- {
- parent::setup();
- $app = Prado::getApplication();
- $this->categoryDao = $app->getModule('daos')->getDao('CategoryDao');
- $this->projectDao = $app->getModule('daos')->getDao('ProjectDao');
- $this->flushDatabase();
- }
-
- function createNewProject()
- {
- $project = new ProjectRecord;
- $project->CreatorUserName = "admin";
- $project->DateCreated = time();
- $project->CompletionDate = strtotime('+1 month');
- $project->Description = 'Test project 1';
- $project->EstimateDuration = 100.5;
- $project->ManagerUserName = 'manager';
- $project->Name = 'Project 1';
-
- return $project;
- }
-
- function createNewProject2()
- {
- $project = new ProjectRecord;
- $project->CreatorUserName = "manager";
- $project->DateCreated = time();
- $project->CompletionDate = strtotime('+1 week');
- $project->Description = 'Test project 2';
- $project->EstimateDuration = 30.5;
- $project->ManagerUserName = 'manager';
- $project->Name = 'Project 2';
-
- return $project;
- }
-
- function createNewCategory()
- {
- $category = new CategoryRecord;
- $category->Name = 'Category 1';
- $category->EstimateDuration = 5.5;
- $category->Abbreviation = 'CAT 1';
-
- return $category;
- }
-
- function createNewCategory2()
- {
- $category = new CategoryRecord;
- $category->Name = 'Category 2';
- $category->EstimateDuration = 1.5;
- $category->Abbreviation = 'CAT2';
-
- return $category;
- }
-
- function createNewCategory3()
- {
- $category = new CategoryRecord;
- $category->Name = 'Category 3';
- $category->EstimateDuration = 2.5;
- $category->Abbreviation = 'CAT3';
-
- return $category;
- }
-
- function create3Categories()
- {
- $project1 = $this->createNewProject();
- $this->projectDao->addNewProject($project1);
-
- $project2 = $this->createNewProject2();
- $this->projectDao->addNewProject($project2);
-
- $category1 = $this->createNewCategory();
- $category1->ProjectID = $project1->ID;
-
- $category2 = $this->createNewCategory2();
- $category2->ProjectID = $project2->ID;
-
- $category3 = $this->createNewCategory3();
- $category3->ProjectID = $project1->ID;
-
- $this->categoryDao->addNewCategory($category1);
- $this->categoryDao->addNewCategory($category2);
- $this->categoryDao->addNewCategory($category3);
-
- return array($category1, $category2, $category3);
- }
-
- function testCreateNewCategory()
- {
- $project = $this->createNewProject();
- $this->projectDao->addNewProject($project);
-
- $category = $this->createNewCategory();
- $category->ProjectID = $project->ID;
-
- $this->categoryDao->addNewCategory($category);
-
- $check = $this->categoryDao->getCategoryByID(1);
-
- $this->assertEqual($category, $check);
- }
-
- function testCreateDuplicateCategory()
- {
- $project = $this->createNewProject();
- $this->projectDao->addNewProject($project);
-
- $category = $this->createNewCategory();
- $category->ProjectID = $project->ID;
-
- $this->categoryDao->addNewCategory($category);
-
- try
- {
- $this->categoryDao->addNewCategory($category);
- $this->pass();
- }
- catch(TSqlMapQueryExecutionException $e)
- {
- $this->fail();
- }
- $check = $this->categoryDao->getCategoryByID(1);
- $this->assertEqual($category, $check);
- }
-
- function testGetAllCategories()
- {
- $added = $this->create3Categories();
-
- $list = $this->categoryDao->getAllCategories();
- $this->assertEqual(count($list), 3);
- $this->assertEqual($added[0], $list[0]);
- $this->assertEqual($added[1], $list[1]);
- $this->assertEqual($added[2], $list[2]);
- }
-
- function testDeleteCategory()
- {
- $added = $this->create3Categories();
-
- $this->categoryDao->deleteCategory(1);
-
- $list = $this->categoryDao->getAllCategories();
-
- $this->assertEqual(count($list), 2);
- $this->assertEqual($added[1], $list[0]);
- $this->assertEqual($added[2], $list[1]);
- }
-
- function testCategoriesInProject()
- {
- $added = $this->create3Categories();
-
- $list = $this->categoryDao->getCategoriesByProjectID(1);
-
- $this->assertEqual(count($list), 2);
- $this->assertEqual($added[0], $list[0]);
- $this->assertEqual($added[2], $list[1]);
- }
-
- function testGetCategoryByCategoryNameandProjectId()
- {
- $added = $this->create3Categories();
- $cat = $this->categoryDao->getCategoryByNameInProject('Category 1', 1);
-
- $this->assertEqual($cat, $added[0]);
- }
-
- function testUpdateCategory()
- {
- $project = $this->createNewProject();
- $this->projectDao->addNewProject($project);
-
- $category = $this->createNewCategory();
- $category->ProjectID = $project->ID;
-
- $this->categoryDao->addNewCategory($category);
-
- $category->Name = "Test 2";
- $this->categoryDao->updateCategory($category);
-
- $check = $this->categoryDao->getCategoryByID($category->ID);
-
- $this->assertEqual($category, $check);
- }
-}
-
+<?php
+
+require_once(dirname(__FILE__).'/BaseTestCase.php');
+
+class CategoryDaoTestCase extends BaseTestCase
+{
+ protected $categoryDao;
+ protected $projectDao;
+
+ function setup()
+ {
+ parent::setup();
+ $app = Prado::getApplication();
+ $this->categoryDao = $app->getModule('daos')->getDao('CategoryDao');
+ $this->projectDao = $app->getModule('daos')->getDao('ProjectDao');
+ $this->flushDatabase();
+ }
+
+ function createNewProject()
+ {
+ $project = new ProjectRecord;
+ $project->CreatorUserName = "admin";
+ $project->DateCreated = time();
+ $project->CompletionDate = strtotime('+1 month');
+ $project->Description = 'Test project 1';
+ $project->EstimateDuration = 100.5;
+ $project->ManagerUserName = 'manager';
+ $project->Name = 'Project 1';
+
+ return $project;
+ }
+
+ function createNewProject2()
+ {
+ $project = new ProjectRecord;
+ $project->CreatorUserName = "manager";
+ $project->DateCreated = time();
+ $project->CompletionDate = strtotime('+1 week');
+ $project->Description = 'Test project 2';
+ $project->EstimateDuration = 30.5;
+ $project->ManagerUserName = 'manager';
+ $project->Name = 'Project 2';
+
+ return $project;
+ }
+
+ function createNewCategory()
+ {
+ $category = new CategoryRecord;
+ $category->Name = 'Category 1';
+ $category->EstimateDuration = 5.5;
+ $category->Abbreviation = 'CAT 1';
+
+ return $category;
+ }
+
+ function createNewCategory2()
+ {
+ $category = new CategoryRecord;
+ $category->Name = 'Category 2';
+ $category->EstimateDuration = 1.5;
+ $category->Abbreviation = 'CAT2';
+
+ return $category;
+ }
+
+ function createNewCategory3()
+ {
+ $category = new CategoryRecord;
+ $category->Name = 'Category 3';
+ $category->EstimateDuration = 2.5;
+ $category->Abbreviation = 'CAT3';
+
+ return $category;
+ }
+
+ function create3Categories()
+ {
+ $project1 = $this->createNewProject();
+ $this->projectDao->addNewProject($project1);
+
+ $project2 = $this->createNewProject2();
+ $this->projectDao->addNewProject($project2);
+
+ $category1 = $this->createNewCategory();
+ $category1->ProjectID = $project1->ID;
+
+ $category2 = $this->createNewCategory2();
+ $category2->ProjectID = $project2->ID;
+
+ $category3 = $this->createNewCategory3();
+ $category3->ProjectID = $project1->ID;
+
+ $this->categoryDao->addNewCategory($category1);
+ $this->categoryDao->addNewCategory($category2);
+ $this->categoryDao->addNewCategory($category3);
+
+ return array($category1, $category2, $category3);
+ }
+
+ function testCreateNewCategory()
+ {
+ $project = $this->createNewProject();
+ $this->projectDao->addNewProject($project);
+
+ $category = $this->createNewCategory();
+ $category->ProjectID = $project->ID;
+
+ $this->categoryDao->addNewCategory($category);
+
+ $check = $this->categoryDao->getCategoryByID(1);
+
+ $this->assertEqual($category, $check);
+ }
+
+ function testCreateDuplicateCategory()
+ {
+ $project = $this->createNewProject();
+ $this->projectDao->addNewProject($project);
+
+ $category = $this->createNewCategory();
+ $category->ProjectID = $project->ID;
+
+ $this->categoryDao->addNewCategory($category);
+
+ try
+ {
+ $this->categoryDao->addNewCategory($category);
+ $this->pass();
+ }
+ catch(TSqlMapQueryExecutionException $e)
+ {
+ $this->fail();
+ }
+ $check = $this->categoryDao->getCategoryByID(1);
+ $this->assertEqual($category, $check);
+ }
+
+ function testGetAllCategories()
+ {
+ $added = $this->create3Categories();
+
+ $list = $this->categoryDao->getAllCategories();
+ $this->assertEqual(count($list), 3);
+ $this->assertEqual($added[0], $list[0]);
+ $this->assertEqual($added[1], $list[1]);
+ $this->assertEqual($added[2], $list[2]);
+ }
+
+ function testDeleteCategory()
+ {
+ $added = $this->create3Categories();
+
+ $this->categoryDao->deleteCategory(1);
+
+ $list = $this->categoryDao->getAllCategories();
+
+ $this->assertEqual(count($list), 2);
+ $this->assertEqual($added[1], $list[0]);
+ $this->assertEqual($added[2], $list[1]);
+ }
+
+ function testCategoriesInProject()
+ {
+ $added = $this->create3Categories();
+
+ $list = $this->categoryDao->getCategoriesByProjectID(1);
+
+ $this->assertEqual(count($list), 2);
+ $this->assertEqual($added[0], $list[0]);
+ $this->assertEqual($added[2], $list[1]);
+ }
+
+ function testGetCategoryByCategoryNameandProjectId()
+ {
+ $added = $this->create3Categories();
+ $cat = $this->categoryDao->getCategoryByNameInProject('Category 1', 1);
+
+ $this->assertEqual($cat, $added[0]);
+ }
+
+ function testUpdateCategory()
+ {
+ $project = $this->createNewProject();
+ $this->projectDao->addNewProject($project);
+
+ $category = $this->createNewCategory();
+ $category->ProjectID = $project->ID;
+
+ $this->categoryDao->addNewCategory($category);
+
+ $category->Name = "Test 2";
+ $this->categoryDao->updateCategory($category);
+
+ $check = $this->categoryDao->getCategoryByID($category->ID);
+
+ $this->assertEqual($category, $check);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/tests/unit/ProjectDaoTestCase.php b/demos/time-tracker/tests/unit/ProjectDaoTestCase.php
index 22a01fca..1790f4d0 100644
--- a/demos/time-tracker/tests/unit/ProjectDaoTestCase.php
+++ b/demos/time-tracker/tests/unit/ProjectDaoTestCase.php
@@ -1,200 +1,200 @@
-<?php
-
-require_once(dirname(__FILE__).'/BaseTestCase.php');
-
-class ProjectDaoTestCase extends BaseTestCase
-{
- protected $projectDao;
-
- function setup()
- {
- parent::setup();
- $app = Prado::getApplication();
- $this->projectDao = $app->getModule('daos')->getDao('ProjectDao');
- $this->flushDatabase();
- }
-
-
- function createNewProject()
- {
- $project = new ProjectRecord;
- $project->CreatorUserName = "admin";
- $project->DateCreated = time();
- $project->CompletionDate = strtotime('+1 month');
- $project->Description = 'Test project 1';
- $project->EstimateDuration = 100.5;
- $project->ManagerUserName = 'manager';
- $project->Name = 'Project 1';
-
- return $project;
- }
-
- function createNewProject2()
- {
- $project = new ProjectRecord;
- $project->CreatorUserName = "manager";
- $project->DateCreated = time();
- $project->CompletionDate = strtotime('+1 week');
- $project->Description = 'Test project 2';
- $project->EstimateDuration = 30.5;
- $project->ManagerUserName = 'manager';
- $project->Name = 'Project 2';
-
- return $project;
- }
-
- function createNewProject3()
- {
- $project = new ProjectRecord;
- $project->CreatorUserName = "manager";
- $project->DateCreated = time();
- $project->CompletionDate = strtotime('+1 day');
- $project->Description = 'Test project 3';
- $project->EstimateDuration = 5.0;
- $project->ManagerUserName = 'admin';
- $project->Name = 'Project 3';
-
- return $project;
- }
-
- function add3Projects()
- {
- $project1 = $this->createNewProject();
- $project2 = $this->createNewProject2();
- $project3 = $this->createNewProject3();
-
- $this->projectDao->addNewProject($project1);
- $this->projectDao->addNewProject($project2);
- $this->projectDao->addNewProject($project3);
- return array($project1,$project2,$project3);
- }
-
- function testCreateNewProject()
- {
- $newProject = $this->createNewProject();
- $this->projectDao->addNewProject($newProject);
-
- $check = $this->projectDao->getProjectByID(1);
- $this->assertEqual($newProject, $check);
- }
-
- function testDeleteProject()
- {
- $newProject = $this->createNewProject();
- $this->projectDao->addNewProject($newProject);
-
- $check = $this->projectDao->getProjectByID(1);
- $this->assertEqual($newProject, $check);
-
- $this->projectDao->deleteProject(1);
- $verify = $this->projectDao->getProjectByID(1);
- $this->assertNull($verify);
- }
-
- function testAddUserToProject()
- {
- $project = $this->createNewProject();
- $this->projectDao->addNewProject($project);
-
- $this->projectDao->addUserToProject($project->ID, 'admin');
- $this->projectDao->addUserToProject($project->ID, 'manager');
-
- $members = $this->projectDao->getProjectMembers($project->ID);
-
- $this->assertEqual(count($members), 2);
- $this->assertEqual($members[0], 'admin');
- $this->assertEqual($members[1], 'manager');
- }
-
- function testAddNullUserToProject()
- {
- $project = $this->createNewProject();
- $this->projectDao->addNewProject($project);
- try
- {
- $this->projectDao->addUserToProject($project->ID, 'asd');
- $this->fail();
- }
- catch(TDbException $e)
- {
- $this->pass();
- }
- }
-
- function testGetAllProjects()
- {
- $added = $this->add3Projects();
-
- $projects = $this->projectDao->getAllProjects();
-
- $this->assertEqual(count($projects),3);
- $this->assertEqual($added[0],$projects[0]);
- $this->assertEqual($added[1],$projects[1]);
- $this->assertEqual($added[2],$projects[2]);
- }
-
- function testGetProjectsByManagerName()
- {
- $added = $this->add3Projects();
-
- $projects = $this->projectDao->getProjectsByManagerName('manager');
-
- $this->assertEqual(count($projects),2);
- $this->assertEqual($added[0],$projects[0]);
- $this->assertEqual($added[1],$projects[1]);
- }
-
- function testGetProjectsByUserName()
- {
- $added = $this->add3Projects();
-
- $username = 'consultant';
-
- $this->projectDao->addUserToProject(1, $username);
- $this->projectDao->addUserToProject(3, $username);
-
- $projects = $this->projectDao->getProjectsByUserName($username);
-
- $this->assertEqual(count($projects),2);
- $this->assertEqual($added[0],$projects[0]);
- $this->assertEqual($added[2],$projects[1]);
- }
-
- function testRemoveUserFromProject()
- {
- $added = $this->add3Projects();
- $this->projectDao->addUserToProject(1, 'admin');
- $this->projectDao->addUserToProject(1, 'manager');
- $this->projectDao->addUserToProject(1, 'consultant');
-
- $members = $this->projectDao->getProjectMembers(1);
-
- $this->assertEqual(count($members), 3);
- $this->assertEqual($members[0], 'admin');
- $this->assertEqual($members[2], 'manager');
- $this->assertEqual($members[1], 'consultant');
-
- $this->projectDao->removeUserFromProject(1,'admin');
-
- $list = $this->projectDao->getProjectMembers(1);
-
- $this->assertEqual(count($list), 2);
- $this->assertEqual($list[1], 'manager');
- $this->assertEqual($list[0], 'consultant');
- }
-
- function testUpdateProject()
- {
- $project = $this->createNewProject();
- $this->projectDao->addNewProject($project);
-
- $project->Description = "Project Testing 123";
-
- $this->projectDao->updateProject($project);
-
- $check = $this->projectDao->getProjectByID(1);
- $this->assertEqual($check, $project);
- }
-}
-
+<?php
+
+require_once(dirname(__FILE__).'/BaseTestCase.php');
+
+class ProjectDaoTestCase extends BaseTestCase
+{
+ protected $projectDao;
+
+ function setup()
+ {
+ parent::setup();
+ $app = Prado::getApplication();
+ $this->projectDao = $app->getModule('daos')->getDao('ProjectDao');
+ $this->flushDatabase();
+ }
+
+
+ function createNewProject()
+ {
+ $project = new ProjectRecord;
+ $project->CreatorUserName = "admin";
+ $project->DateCreated = time();
+ $project->CompletionDate = strtotime('+1 month');
+ $project->Description = 'Test project 1';
+ $project->EstimateDuration = 100.5;
+ $project->ManagerUserName = 'manager';
+ $project->Name = 'Project 1';
+
+ return $project;
+ }
+
+ function createNewProject2()
+ {
+ $project = new ProjectRecord;
+ $project->CreatorUserName = "manager";
+ $project->DateCreated = time();
+ $project->CompletionDate = strtotime('+1 week');
+ $project->Description = 'Test project 2';
+ $project->EstimateDuration = 30.5;
+ $project->ManagerUserName = 'manager';
+ $project->Name = 'Project 2';
+
+ return $project;
+ }
+
+ function createNewProject3()
+ {
+ $project = new ProjectRecord;
+ $project->CreatorUserName = "manager";
+ $project->DateCreated = time();
+ $project->CompletionDate = strtotime('+1 day');
+ $project->Description = 'Test project 3';
+ $project->EstimateDuration = 5.0;
+ $project->ManagerUserName = 'admin';
+ $project->Name = 'Project 3';
+
+ return $project;
+ }
+
+ function add3Projects()
+ {
+ $project1 = $this->createNewProject();
+ $project2 = $this->createNewProject2();
+ $project3 = $this->createNewProject3();
+
+ $this->projectDao->addNewProject($project1);
+ $this->projectDao->addNewProject($project2);
+ $this->projectDao->addNewProject($project3);
+ return array($project1,$project2,$project3);
+ }
+
+ function testCreateNewProject()
+ {
+ $newProject = $this->createNewProject();
+ $this->projectDao->addNewProject($newProject);
+
+ $check = $this->projectDao->getProjectByID(1);
+ $this->assertEqual($newProject, $check);
+ }
+
+ function testDeleteProject()
+ {
+ $newProject = $this->createNewProject();
+ $this->projectDao->addNewProject($newProject);
+
+ $check = $this->projectDao->getProjectByID(1);
+ $this->assertEqual($newProject, $check);
+
+ $this->projectDao->deleteProject(1);
+ $verify = $this->projectDao->getProjectByID(1);
+ $this->assertNull($verify);
+ }
+
+ function testAddUserToProject()
+ {
+ $project = $this->createNewProject();
+ $this->projectDao->addNewProject($project);
+
+ $this->projectDao->addUserToProject($project->ID, 'admin');
+ $this->projectDao->addUserToProject($project->ID, 'manager');
+
+ $members = $this->projectDao->getProjectMembers($project->ID);
+
+ $this->assertEqual(count($members), 2);
+ $this->assertEqual($members[0], 'admin');
+ $this->assertEqual($members[1], 'manager');
+ }
+
+ function testAddNullUserToProject()
+ {
+ $project = $this->createNewProject();
+ $this->projectDao->addNewProject($project);
+ try
+ {
+ $this->projectDao->addUserToProject($project->ID, 'asd');
+ $this->fail();
+ }
+ catch(TDbException $e)
+ {
+ $this->pass();
+ }
+ }
+
+ function testGetAllProjects()
+ {
+ $added = $this->add3Projects();
+
+ $projects = $this->projectDao->getAllProjects();
+
+ $this->assertEqual(count($projects),3);
+ $this->assertEqual($added[0],$projects[0]);
+ $this->assertEqual($added[1],$projects[1]);
+ $this->assertEqual($added[2],$projects[2]);
+ }
+
+ function testGetProjectsByManagerName()
+ {
+ $added = $this->add3Projects();
+
+ $projects = $this->projectDao->getProjectsByManagerName('manager');
+
+ $this->assertEqual(count($projects),2);
+ $this->assertEqual($added[0],$projects[0]);
+ $this->assertEqual($added[1],$projects[1]);
+ }
+
+ function testGetProjectsByUserName()
+ {
+ $added = $this->add3Projects();
+
+ $username = 'consultant';
+
+ $this->projectDao->addUserToProject(1, $username);
+ $this->projectDao->addUserToProject(3, $username);
+
+ $projects = $this->projectDao->getProjectsByUserName($username);
+
+ $this->assertEqual(count($projects),2);
+ $this->assertEqual($added[0],$projects[0]);
+ $this->assertEqual($added[2],$projects[1]);
+ }
+
+ function testRemoveUserFromProject()
+ {
+ $added = $this->add3Projects();
+ $this->projectDao->addUserToProject(1, 'admin');
+ $this->projectDao->addUserToProject(1, 'manager');
+ $this->projectDao->addUserToProject(1, 'consultant');
+
+ $members = $this->projectDao->getProjectMembers(1);
+
+ $this->assertEqual(count($members), 3);
+ $this->assertEqual($members[0], 'admin');
+ $this->assertEqual($members[2], 'manager');
+ $this->assertEqual($members[1], 'consultant');
+
+ $this->projectDao->removeUserFromProject(1,'admin');
+
+ $list = $this->projectDao->getProjectMembers(1);
+
+ $this->assertEqual(count($list), 2);
+ $this->assertEqual($list[1], 'manager');
+ $this->assertEqual($list[0], 'consultant');
+ }
+
+ function testUpdateProject()
+ {
+ $project = $this->createNewProject();
+ $this->projectDao->addNewProject($project);
+
+ $project->Description = "Project Testing 123";
+
+ $this->projectDao->updateProject($project);
+
+ $check = $this->projectDao->getProjectByID(1);
+ $this->assertEqual($check, $project);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/tests/unit/TimeEntryDaoTestCase.php b/demos/time-tracker/tests/unit/TimeEntryDaoTestCase.php
index 1ce97b3a..cead9fba 100644
--- a/demos/time-tracker/tests/unit/TimeEntryDaoTestCase.php
+++ b/demos/time-tracker/tests/unit/TimeEntryDaoTestCase.php
@@ -1,214 +1,214 @@
-<?php
-
-require_once(dirname(__FILE__).'/BaseTestCase.php');
-
-class TimeEntryDaoTestCase extends BaseTestCase
-{
- protected $entryDao;
- protected $projectDao;
- protected $userDao;
- protected $categoryDao;
- protected $reportDao;
-
- function setup()
- {
- parent::setup();
- $app = Prado::getApplication();
- $this->entryDao = $app->getModule('daos')->getDao('TimeEntryDao');
- $this->projectDao = $app->getModule('daos')->getDao('ProjectDao');
- $this->userDao = $app->getModule('daos')->getDao('UserDao');
- $this->categoryDao = $app->getModule('daos')->getDao('CategoryDao');
- $this->reportDao = $app->getModule('daos')->getDao('ReportDao');
- $this->flushDatabase();
- }
-
- function createNewProject()
- {
- $project = new ProjectRecord;
- $project->CreatorUserName = "admin";
- $project->DateCreated = time();
- $project->CompletionDate = strtotime('+1 month');
- $project->Description = 'Test project 1';
- $project->EstimateDuration = 100.5;
- $project->ManagerUserName = 'manager';
- $project->Name = 'Project 1';
-
- return $project;
- }
-
- function createNewProject2()
- {
- $project = new ProjectRecord;
- $project->CreatorUserName = "manager";
- $project->DateCreated = time();
- $project->CompletionDate = strtotime('+1 week');
- $project->Description = 'Test project 2';
- $project->EstimateDuration = 30.5;
- $project->ManagerUserName = 'manager';
- $project->Name = 'Project 2';
-
- return $project;
- }
-
- function createNewCategory()
- {
- $category = new CategoryRecord;
- $category->Name = 'Category 1';
- $category->EstimateDuration = 5.5;
- $category->Abbreviation = 'CAT 1';
-
- return $category;
- }
-
- function createNewCategory2()
- {
- $category = new CategoryRecord;
- $category->Name = 'Category 2';
- $category->EstimateDuration = 1.5;
- $category->Abbreviation = 'CAT2';
-
- return $category;
- }
-
- function createNewCategory3()
- {
- $category = new CategoryRecord;
- $category->Name = 'Category 3';
- $category->EstimateDuration = 2.5;
- $category->Abbreviation = 'CAT3';
-
- return $category;
- }
-
- function createProjectsAndCategories()
- {
- $project1 = $this->createNewProject();
- $this->projectDao->addNewProject($project1);
-
- $project2 = $this->createNewProject2();
- $this->projectDao->addNewProject($project2);
-
- $category1 = $this->createNewCategory();
- $category1->ProjectID = $project1->ID;
-
- $category2 = $this->createNewCategory2();
- $category2->ProjectID = $project2->ID;
-
- $category3 = $this->createNewCategory3();
- $category3->ProjectID = $project1->ID;
-
- $this->categoryDao->addNewCategory($category1);
- $this->categoryDao->addNewCategory($category2);
- $this->categoryDao->addNewCategory($category3);
-
- return array($project1, $project2, $category1, $category2, $category3);
- }
-
- function assertSameEntry($entry1, $entry2)
- {
- $this->assertEqual($entry1->CreatorUserName, $entry2->CreatorUserName);
- $this->assertEqual($entry1->Description, $entry2->Description);
- $this->assertEqual($entry1->Duration, $entry2->Duration);
- $this->assertEqual($entry1->ID, $entry2->ID);
- $this->assertEqual($entry1->ReportDate, $entry2->ReportDate);
- $this->assertEqual($entry1->Username, $entry2->Username);
- }
-
-
- function createTimeEntry1()
- {
- $added = $this->createProjectsAndCategories();
-
- $entry = new TimeEntryRecord;
- $entry->CreatorUserName = "admin";
- $entry->Category = $added[2];
- $entry->Description = "New work";
- $entry->Duration = 1.5;
- $entry->Project = $added[0];
- $entry->ReportDate = strtotime('-1 day');
- $entry->Username = 'consultant';
-
- return array($entry, $added);
- }
-
- function createTimeEntries2()
- {
- $added = $this->createProjectsAndCategories();
-
- $entry = new TimeEntryRecord;
- $entry->CreatorUserName = "admin";
- $entry->Category = $added[2];
- $entry->Description = "New work";
- $entry->Duration = 1.2;
- $entry->Project = $added[0];
- $entry->ReportDate = strtotime('-10 day');
- $entry->Username = 'consultant';
-
- $entry2 = new TimeEntryRecord;
- $entry2->CreatorUserName = "admin";
- $entry2->Category = $added[4];
- $entry2->Description = "New work 2";
- $entry2->Duration = 5.5;
- $entry2->Project = $added[0];
- $entry2->ReportDate = strtotime('-4 day');
- $entry2->Username = 'consultant';
-
- return array($entry, $entry2, $added);
- }
-
- function testCreateNewTimeEntry()
- {
- $added = $this->createTimeEntry1();
- $entry = $added[0];
- $this->entryDao->addNewTimeEntry($entry);
-
- $check = $this->entryDao->getTimeEntryByID(1);
-
- $this->assertSameEntry($entry, $check);
- }
-
- function testDeleteTimeEntry()
- {
- $this->testCreateNewTimeEntry();
- $this->entryDao->deleteTimeEntry(1);
-
- $check = $this->entryDao->getTimeEntryByID(1);
- $this->assertNull($check);
- }
-
- function testGetEntriesInProject()
- {
- $added = $this->createTimeEntries2();
- $this->entryDao->addNewTimeEntry($added[0]);
- $this->entryDao->addNewTimeEntry($added[1]);
-
- $list = $this->entryDao->getTimeEntriesInProject('consultant', 1);
-
- $this->assertEqual(count($list), 2);
-
- $this->assertSameEntry($list[0], $added[0]);
- $this->assertSameEntry($list[1], $added[1]);
- }
-
- function testUpdateEntry()
- {
- $added = $this->createTimeEntry1();
- $entry = $added[0];
- $this->entryDao->addNewTimeEntry($entry);
-
- $check = $this->entryDao->getTimeEntryByID(1);
-
- $this->assertSameEntry($entry, $check);
-
- $entry->Description = "asdasd";
- $entry->Duration = 200;
-
- $this->entryDao->updateTimeEntry($entry);
-
- $verify = $this->entryDao->getTimeEntryByID(1);
-
- $this->assertSameEntry($entry, $verify);
- }
-}
-
+<?php
+
+require_once(dirname(__FILE__).'/BaseTestCase.php');
+
+class TimeEntryDaoTestCase extends BaseTestCase
+{
+ protected $entryDao;
+ protected $projectDao;
+ protected $userDao;
+ protected $categoryDao;
+ protected $reportDao;
+
+ function setup()
+ {
+ parent::setup();
+ $app = Prado::getApplication();
+ $this->entryDao = $app->getModule('daos')->getDao('TimeEntryDao');
+ $this->projectDao = $app->getModule('daos')->getDao('ProjectDao');
+ $this->userDao = $app->getModule('daos')->getDao('UserDao');
+ $this->categoryDao = $app->getModule('daos')->getDao('CategoryDao');
+ $this->reportDao = $app->getModule('daos')->getDao('ReportDao');
+ $this->flushDatabase();
+ }
+
+ function createNewProject()
+ {
+ $project = new ProjectRecord;
+ $project->CreatorUserName = "admin";
+ $project->DateCreated = time();
+ $project->CompletionDate = strtotime('+1 month');
+ $project->Description = 'Test project 1';
+ $project->EstimateDuration = 100.5;
+ $project->ManagerUserName = 'manager';
+ $project->Name = 'Project 1';
+
+ return $project;
+ }
+
+ function createNewProject2()
+ {
+ $project = new ProjectRecord;
+ $project->CreatorUserName = "manager";
+ $project->DateCreated = time();
+ $project->CompletionDate = strtotime('+1 week');
+ $project->Description = 'Test project 2';
+ $project->EstimateDuration = 30.5;
+ $project->ManagerUserName = 'manager';
+ $project->Name = 'Project 2';
+
+ return $project;
+ }
+
+ function createNewCategory()
+ {
+ $category = new CategoryRecord;
+ $category->Name = 'Category 1';
+ $category->EstimateDuration = 5.5;
+ $category->Abbreviation = 'CAT 1';
+
+ return $category;
+ }
+
+ function createNewCategory2()
+ {
+ $category = new CategoryRecord;
+ $category->Name = 'Category 2';
+ $category->EstimateDuration = 1.5;
+ $category->Abbreviation = 'CAT2';
+
+ return $category;
+ }
+
+ function createNewCategory3()
+ {
+ $category = new CategoryRecord;
+ $category->Name = 'Category 3';
+ $category->EstimateDuration = 2.5;
+ $category->Abbreviation = 'CAT3';
+
+ return $category;
+ }
+
+ function createProjectsAndCategories()
+ {
+ $project1 = $this->createNewProject();
+ $this->projectDao->addNewProject($project1);
+
+ $project2 = $this->createNewProject2();
+ $this->projectDao->addNewProject($project2);
+
+ $category1 = $this->createNewCategory();
+ $category1->ProjectID = $project1->ID;
+
+ $category2 = $this->createNewCategory2();
+ $category2->ProjectID = $project2->ID;
+
+ $category3 = $this->createNewCategory3();
+ $category3->ProjectID = $project1->ID;
+
+ $this->categoryDao->addNewCategory($category1);
+ $this->categoryDao->addNewCategory($category2);
+ $this->categoryDao->addNewCategory($category3);
+
+ return array($project1, $project2, $category1, $category2, $category3);
+ }
+
+ function assertSameEntry($entry1, $entry2)
+ {
+ $this->assertEqual($entry1->CreatorUserName, $entry2->CreatorUserName);
+ $this->assertEqual($entry1->Description, $entry2->Description);
+ $this->assertEqual($entry1->Duration, $entry2->Duration);
+ $this->assertEqual($entry1->ID, $entry2->ID);
+ $this->assertEqual($entry1->ReportDate, $entry2->ReportDate);
+ $this->assertEqual($entry1->Username, $entry2->Username);
+ }
+
+
+ function createTimeEntry1()
+ {
+ $added = $this->createProjectsAndCategories();
+
+ $entry = new TimeEntryRecord;
+ $entry->CreatorUserName = "admin";
+ $entry->Category = $added[2];
+ $entry->Description = "New work";
+ $entry->Duration = 1.5;
+ $entry->Project = $added[0];
+ $entry->ReportDate = strtotime('-1 day');
+ $entry->Username = 'consultant';
+
+ return array($entry, $added);
+ }
+
+ function createTimeEntries2()
+ {
+ $added = $this->createProjectsAndCategories();
+
+ $entry = new TimeEntryRecord;
+ $entry->CreatorUserName = "admin";
+ $entry->Category = $added[2];
+ $entry->Description = "New work";
+ $entry->Duration = 1.2;
+ $entry->Project = $added[0];
+ $entry->ReportDate = strtotime('-10 day');
+ $entry->Username = 'consultant';
+
+ $entry2 = new TimeEntryRecord;
+ $entry2->CreatorUserName = "admin";
+ $entry2->Category = $added[4];
+ $entry2->Description = "New work 2";
+ $entry2->Duration = 5.5;
+ $entry2->Project = $added[0];
+ $entry2->ReportDate = strtotime('-4 day');
+ $entry2->Username = 'consultant';
+
+ return array($entry, $entry2, $added);
+ }
+
+ function testCreateNewTimeEntry()
+ {
+ $added = $this->createTimeEntry1();
+ $entry = $added[0];
+ $this->entryDao->addNewTimeEntry($entry);
+
+ $check = $this->entryDao->getTimeEntryByID(1);
+
+ $this->assertSameEntry($entry, $check);
+ }
+
+ function testDeleteTimeEntry()
+ {
+ $this->testCreateNewTimeEntry();
+ $this->entryDao->deleteTimeEntry(1);
+
+ $check = $this->entryDao->getTimeEntryByID(1);
+ $this->assertNull($check);
+ }
+
+ function testGetEntriesInProject()
+ {
+ $added = $this->createTimeEntries2();
+ $this->entryDao->addNewTimeEntry($added[0]);
+ $this->entryDao->addNewTimeEntry($added[1]);
+
+ $list = $this->entryDao->getTimeEntriesInProject('consultant', 1);
+
+ $this->assertEqual(count($list), 2);
+
+ $this->assertSameEntry($list[0], $added[0]);
+ $this->assertSameEntry($list[1], $added[1]);
+ }
+
+ function testUpdateEntry()
+ {
+ $added = $this->createTimeEntry1();
+ $entry = $added[0];
+ $this->entryDao->addNewTimeEntry($entry);
+
+ $check = $this->entryDao->getTimeEntryByID(1);
+
+ $this->assertSameEntry($entry, $check);
+
+ $entry->Description = "asdasd";
+ $entry->Duration = 200;
+
+ $this->entryDao->updateTimeEntry($entry);
+
+ $verify = $this->entryDao->getTimeEntryByID(1);
+
+ $this->assertSameEntry($entry, $verify);
+ }
+}
+
?> \ No newline at end of file
diff --git a/demos/time-tracker/tests/unit/UserDaoTestCase.php b/demos/time-tracker/tests/unit/UserDaoTestCase.php
index d216dbe6..ce40092e 100644
--- a/demos/time-tracker/tests/unit/UserDaoTestCase.php
+++ b/demos/time-tracker/tests/unit/UserDaoTestCase.php
@@ -1,271 +1,271 @@
-<?php
-
-require_once(dirname(__FILE__).'/BaseTestCase.php');
-
-class UserDaoTestCase extends BaseTestCase
-{
- protected $userDao;
-
- function setup()
- {
- parent::setup();
- $app = Prado::getApplication();
- $this->userDao = $app->getModule('daos')->getDao('UserDao');
- $this->flushDatabase();
- }
-
- function assertIsAdmin($user)
- {
- if(!$user)
- return $this->fail();
- $this->assertEqual($user->getName(), 'admin');
- $this->assertEqual($user->getEmailAddress(), 'admin@pradosoft.com');
- }
-
- function assertSameUser($user1, $user2)
- {
- if(is_null($user1) || is_null($user2))
- return $this->fail();
-
- $this->assertEqual($user1->getName(), $user2->getName());
- $this->assertEqual($user1->getEmailAddress(), $user2->getEmailAddress());
- }
-
- function assertIsAdminRole($user)
- {
- if(is_null($user))
- return $this->fail();
-
- $this->assertTrue($user->isInRole('admin'));
- }
-
- function assertIsManagerRole($user)
- {
- if(is_null($user))
- return $this->fail();
-
- $this->assertTrue($user->isInRole('manager'));
- }
-
- function assertIsConsultantRole($user)
- {
- if(is_null($user))
- return $this->fail();
-
- $this->assertTrue($user->isInRole('consultant'));
- }
-
- function assertNotConsultantRole($user)
- {
- if(is_null($user))
- return $this->fail();
-
- $this->assertFalse($user->isInRole('consultant'));
- }
-
- function testGetUserByName()
- {
- $user = $this->userDao->getUserByName('admin');
- $this->assertNotNull($user);
- $this->assertIsAdmin($user);
- }
-
- function testGetNonExistentUser()
- {
- $user = $this->userDao->getUserByName('none');
- $this->assertNull($user);
- }
-
- function testGetUsers()
- {
- $users = $this->userDao->getAllUsers();
- $this->assertEqual(count($users), 3);
- }
-
- function testUserLogon()
- {
- $success = $this->userDao->validateUser('admin', 'admin');
- $this->assertTrue($success);
- }
-
- function testBadLogin()
- {
- $success = $this->userDao->validateUser('admin', 'hahah');
- $this->assertFalse($success);
- }
-
-
- function testAddNewUser()
- {
- $user = new TimeTrackerUser(new UserManager());
- $user->Name = "user1";
- $user->EmailAddress = 'user1@pradosoft.com';
-
- $this->userDao->addNewUser($user, 'password');
-
- $check = $this->userDao->getUserByName($user->Name);
-
- $this->assertSameUser($check, $user);
- }
-
- function testDeleteUserByName()
- {
- $this->userDao->deleteUserByName('admin');
-
- $admin = $this->userDao->getUserByName('admin');
- $this->assertNull($admin);
-
- $users = $this->userDao->getAllUsers();
- $this->assertEqual(count($users), 2);
- }
-
- function testAutoSignon()
- {
- $user = new TimeTrackerUser(new UserManager());
- $user->Name = "admin";
-
- $token = $this->userDao->createSignonToken($user);
-
- $check = $this->userDao->validateSignon($token);
-
- $this->assertIsAdmin($check);
- }
-
-
- function testBadAutoSignon()
- {
- $user = new TimeTrackerUser(new UserManager());
- $user->Name = "admin";
-
- $token = $this->userDao->createSignonToken($user);
-
- $check = $this->userDao->validateSignon('adasd');
- $this->assertNull($check);
- }
-
- function testAdminRoles()
- {
- $user = $this->userDao->getUserByName('admin');
- $this->assertIsAdminRole($user);
- $this->assertIsManagerRole($user);
- $this->assertIsConsultantRole($user);
- }
-
- function testSetUserRoles()
- {
- $user = new TimeTrackerUser(new UserManager());
- $user->Name = "user1";
- $user->EmailAddress = 'user1@pradosoft.com';
- $user->Roles = array("manager", "consultant");
-
- $this->userDao->addNewUser($user, 'password');
- $check = $this->userDao->getUserByName('user1');
-
- $this->assertIsManagerRole($check);
- $this->assertIsConsultantRole($check);
- }
-
- function testSetUserRoleNoNullUser()
- {
- $user = new TimeTrackerUser(new UserManager());
- $user->Name = "user1";
- $user->EmailAddress = 'user1@pradosoft.com';
- $user->Roles = array("manager", "consultant");
-
- try
- {
- $this->userDao->updateUserRoles($user);
- $this->fail();
- }
- catch(TDbException $e)
- {
- $this->pass();
- }
-
- $check = $this->sqlmap->queryForObject('GetUserByName', 'user1');
- $this->assertNull($check);
- }
-
- function testUpdateUser()
- {
- $user = $this->userDao->getUserByName('admin');
- $user->EmailAddress = 'something@pradosoft.com';
- $user->Roles = array('manager', 'admin');
-
- $this->userDao->updateUser($user);
-
- $check = $this->userDao->getUserByName('admin');
- $this->assertIsAdminRole($check);
- $this->assertIsManagerRole($check);
- $this->assertNotConsultantRole($check);
- }
-
- function testUpdateUserPassword()
- {
- $user = $this->userDao->getUserByName('admin');
- $user->EmailAddress = 'something@pradosoft.com';
- $user->Roles = array('manager', 'admin');
-
- $pass = 'newpasword';
-
- $this->userDao->updateUser($user, $pass);
-
- $success = $this->userDao->validateUser('admin', $pass);
-
- $this->assertTrue($success);
- }
-
- function testClearSignonTokens()
- {
- $user = new TimeTrackerUser(new UserManager());
- $user->Name = "admin";
-
- $token1 = $this->userDao->createSignonToken($user);
- sleep(1);
- $token2 = $this->userDao->createSignonToken($user);
- $this->assertNotEqual($token1, $token2);
-
- $check1 = $this->userDao->validateSignon($token1);
- $check2 = $this->userDao->validateSignon($token2);
-
- $this->assertIsAdmin($check1);
- $this->assertIsAdmin($check2);
-
- $this->userDao->clearSignonTokens($user);
-
- $check3 = $this->userDao->validateSignon($token1);
- $check4 = $this->userDao->validateSignon($token2);
-
- $this->assertNull($check3);
- $this->assertNull($check4);
- }
-
- function testClearAllSigonTokens()
- {
- $user1 = new TimeTrackerUser(new UserManager());
- $user1->Name = "admin";
-
- $user2 = new TimeTrackerUser(new UserManager());
- $user2->Name = "manager";
-
- $token1 = $this->userDao->createSignonToken($user1);
- $token2 = $this->userDao->createSignonToken($user2);
-
- $check1 = $this->userDao->validateSignon($token1);
- $check2 = $this->userDao->validateSignon($token2);
-
- $this->assertIsAdmin($check1);
- $this->assertNotNull($check2);
- $this->assertEqual($check2->Name, $user2->Name);
-
- $this->userDao->clearSignonTokens();
-
- $check3 = $this->userDao->validateSignon($token1);
- $check4 = $this->userDao->validateSignon($token2);
-
- $this->assertNull($check3);
- $this->assertNull($check4);
- }
-}
-
+<?php
+
+require_once(dirname(__FILE__).'/BaseTestCase.php');
+
+class UserDaoTestCase extends BaseTestCase
+{
+ protected $userDao;
+
+ function setup()
+ {
+ parent::setup();
+ $app = Prado::getApplication();
+ $this->userDao = $app->getModule('daos')->getDao('UserDao');
+ $this->flushDatabase();
+ }
+
+ function assertIsAdmin($user)
+ {
+ if(!$user)
+ return $this->fail();
+ $this->assertEqual($user->getName(), 'admin');
+ $this->assertEqual($user->getEmailAddress(), 'admin@pradosoft.com');
+ }
+
+ function assertSameUser($user1, $user2)
+ {
+ if(is_null($user1) || is_null($user2))
+ return $this->fail();
+
+ $this->assertEqual($user1->getName(), $user2->getName());
+ $this->assertEqual($user1->getEmailAddress(), $user2->getEmailAddress());
+ }
+
+ function assertIsAdminRole($user)
+ {
+ if(is_null($user))
+ return $this->fail();
+
+ $this->assertTrue($user->isInRole('admin'));
+ }
+
+ function assertIsManagerRole($user)
+ {
+ if(is_null($user))
+ return $this->fail();
+
+ $this->assertTrue($user->isInRole('manager'));
+ }
+
+ function assertIsConsultantRole($user)
+ {
+ if(is_null($user))
+ return $this->fail();
+
+ $this->assertTrue($user->isInRole('consultant'));
+ }
+
+ function assertNotConsultantRole($user)
+ {
+ if(is_null($user))
+ return $this->fail();
+
+ $this->assertFalse($user->isInRole('consultant'));
+ }
+
+ function testGetUserByName()
+ {
+ $user = $this->userDao->getUserByName('admin');
+ $this->assertNotNull($user);
+ $this->assertIsAdmin($user);
+ }
+
+ function testGetNonExistentUser()
+ {
+ $user = $this->userDao->getUserByName('none');
+ $this->assertNull($user);
+ }
+
+ function testGetUsers()
+ {
+ $users = $this->userDao->getAllUsers();
+ $this->assertEqual(count($users), 3);
+ }
+
+ function testUserLogon()
+ {
+ $success = $this->userDao->validateUser('admin', 'admin');
+ $this->assertTrue($success);
+ }
+
+ function testBadLogin()
+ {
+ $success = $this->userDao->validateUser('admin', 'hahah');
+ $this->assertFalse($success);
+ }
+
+
+ function testAddNewUser()
+ {
+ $user = new TimeTrackerUser(new UserManager());
+ $user->Name = "user1";
+ $user->EmailAddress = 'user1@pradosoft.com';
+
+ $this->userDao->addNewUser($user, 'password');
+
+ $check = $this->userDao->getUserByName($user->Name);
+
+ $this->assertSameUser($check, $user);
+ }
+
+ function testDeleteUserByName()
+ {
+ $this->userDao->deleteUserByName('admin');
+
+ $admin = $this->userDao->getUserByName('admin');
+ $this->assertNull($admin);
+
+ $users = $this->userDao->getAllUsers();
+ $this->assertEqual(count($users), 2);
+ }
+
+ function testAutoSignon()
+ {
+ $user = new TimeTrackerUser(new UserManager());
+ $user->Name = "admin";
+
+ $token = $this->userDao->createSignonToken($user);
+
+ $check = $this->userDao->validateSignon($token);
+
+ $this->assertIsAdmin($check);
+ }
+
+
+ function testBadAutoSignon()
+ {
+ $user = new TimeTrackerUser(new UserManager());
+ $user->Name = "admin";
+
+ $token = $this->userDao->createSignonToken($user);
+
+ $check = $this->userDao->validateSignon('adasd');
+ $this->assertNull($check);
+ }
+
+ function testAdminRoles()
+ {
+ $user = $this->userDao->getUserByName('admin');
+ $this->assertIsAdminRole($user);
+ $this->assertIsManagerRole($user);
+ $this->assertIsConsultantRole($user);
+ }
+
+ function testSetUserRoles()
+ {
+ $user = new TimeTrackerUser(new UserManager());
+ $user->Name = "user1";
+ $user->EmailAddress = 'user1@pradosoft.com';
+ $user->Roles = array("manager", "consultant");
+
+ $this->userDao->addNewUser($user, 'password');
+ $check = $this->userDao->getUserByName('user1');
+
+ $this->assertIsManagerRole($check);
+ $this->assertIsConsultantRole($check);
+ }
+
+ function testSetUserRoleNoNullUser()
+ {
+ $user = new TimeTrackerUser(new UserManager());
+ $user->Name = "user1";
+ $user->EmailAddress = 'user1@pradosoft.com';
+ $user->Roles = array("manager", "consultant");
+
+ try
+ {
+ $this->userDao->updateUserRoles($user);
+ $this->fail();
+ }
+ catch(TDbException $e)
+ {
+ $this->pass();
+ }
+
+ $check = $this->sqlmap->queryForObject('GetUserByName', 'user1');
+ $this->assertNull($check);
+ }
+
+ function testUpdateUser()
+ {
+ $user = $this->userDao->getUserByName('admin');
+ $user->EmailAddress = 'something@pradosoft.com';
+ $user->Roles = array('manager', 'admin');
+
+ $this->userDao->updateUser($user);
+
+ $check = $this->userDao->getUserByName('admin');
+ $this->assertIsAdminRole($check);
+ $this->assertIsManagerRole($check);
+ $this->assertNotConsultantRole($check);
+ }
+
+ function testUpdateUserPassword()
+ {
+ $user = $this->userDao->getUserByName('admin');
+ $user->EmailAddress = 'something@pradosoft.com';
+ $user->Roles = array('manager', 'admin');
+
+ $pass = 'newpasword';
+
+ $this->userDao->updateUser($user, $pass);
+
+ $success = $this->userDao->validateUser('admin', $pass);
+
+ $this->assertTrue($success);
+ }
+
+ function testClearSignonTokens()
+ {
+ $user = new TimeTrackerUser(new UserManager());
+ $user->Name = "admin";
+
+ $token1 = $this->userDao->createSignonToken($user);
+ sleep(1);
+ $token2 = $this->userDao->createSignonToken($user);
+ $this->assertNotEqual($token1, $token2);
+
+ $check1 = $this->userDao->validateSignon($token1);
+ $check2 = $this->userDao->validateSignon($token2);
+
+ $this->assertIsAdmin($check1);
+ $this->assertIsAdmin($check2);
+
+ $this->userDao->clearSignonTokens($user);
+
+ $check3 = $this->userDao->validateSignon($token1);
+ $check4 = $this->userDao->validateSignon($token2);
+
+ $this->assertNull($check3);
+ $this->assertNull($check4);
+ }
+
+ function testClearAllSigonTokens()
+ {
+ $user1 = new TimeTrackerUser(new UserManager());
+ $user1->Name = "admin";
+
+ $user2 = new TimeTrackerUser(new UserManager());
+ $user2->Name = "manager";
+
+ $token1 = $this->userDao->createSignonToken($user1);
+ $token2 = $this->userDao->createSignonToken($user2);
+
+ $check1 = $this->userDao->validateSignon($token1);
+ $check2 = $this->userDao->validateSignon($token2);
+
+ $this->assertIsAdmin($check1);
+ $this->assertNotNull($check2);
+ $this->assertEqual($check2->Name, $user2->Name);
+
+ $this->userDao->clearSignonTokens();
+
+ $check3 = $this->userDao->validateSignon($token1);
+ $check4 = $this->userDao->validateSignon($token2);
+
+ $this->assertNull($check3);
+ $this->assertNull($check4);
+ }
+}
+
?> \ No newline at end of file