From 80d4af6b6e00b39fd5fefddfb87a52708baf714e Mon Sep 17 00:00:00 2001 From: Hamish Friedlander Date: Wed, 15 Jun 2016 16:03:16 +1200 Subject: [PATCH] API Apply Framework\ORM Namespace to model --- .upgrade.yml | 122 ++++++++++++++++++ {model => ORM}/ArrayList.php | 12 +- .../connect => ORM/Connect}/DBConnector.php | 7 +- .../Connect}/DBQueryBuilder.php | 12 +- .../Connect}/DBSchemaManager.php | 111 +++++++++++++++- {model/connect => ORM/Connect}/Database.php | 13 +- .../Connect}/DatabaseException.php | 6 +- .../connect => ORM/Connect}/MySQLDatabase.php | 16 ++- {model/connect => ORM/Connect}/MySQLQuery.php | 4 +- .../Connect}/MySQLQueryBuilder.php | 7 +- .../Connect}/MySQLSchemaManager.php | 31 +++-- .../Connect}/MySQLStatement.php | 4 +- .../Connect}/MySQLiConnector.php | 12 +- .../connect => ORM/Connect}/PDOConnector.php | 14 +- {model/connect => ORM/Connect}/PDOQuery.php | 7 +- {model/connect => ORM/Connect}/Query.php | 7 +- {model => ORM}/DB.php | 15 ++- {model => ORM}/DataExtension.php | 11 +- {model => ORM}/DataList.php | 13 +- {model => ORM}/DataModel.php | 4 +- {model => ORM}/DataObject.php | 77 +++++++---- {model => ORM}/DataObjectInterface.php | 5 +- {model => ORM}/DataObjectSchema.php | 25 ++-- {model => ORM}/DataQuery.php | 16 ++- {model => ORM}/DatabaseAdmin.php | 29 +++-- {model => ORM}/FieldType/DBBoolean.php | 7 +- {model => ORM}/FieldType/DBClassName.php | 13 +- {model => ORM}/FieldType/DBComposite.php | 9 +- {model => ORM}/FieldType/DBCurrency.php | 4 +- {model => ORM}/FieldType/DBDate.php | 12 +- {model => ORM}/FieldType/DBDatetime.php | 26 ++-- {model => ORM}/FieldType/DBDecimal.php | 6 +- {model => ORM}/FieldType/DBDouble.php | 8 +- {model => ORM}/FieldType/DBEnum.php | 10 +- {model => ORM}/FieldType/DBField.php | 4 +- {model => ORM}/FieldType/DBFloat.php | 6 +- {model => ORM}/FieldType/DBForeignKey.php | 8 +- {model => ORM}/FieldType/DBHTMLText.php | 4 +- {model => ORM}/FieldType/DBHTMLVarchar.php | 4 +- {model => ORM}/FieldType/DBInt.php | 8 +- {model => ORM}/FieldType/DBLocale.php | 4 +- {model => ORM}/FieldType/DBMoney.php | 6 +- {model => ORM}/FieldType/DBMultiEnum.php | 15 +-- {model => ORM}/FieldType/DBPercentage.php | 4 +- .../FieldType/DBPolymorphicForeignKey.php | 12 +- {model => ORM}/FieldType/DBPrimaryKey.php | 11 +- {model => ORM}/FieldType/DBString.php | 4 +- {model => ORM}/FieldType/DBText.php | 10 +- {model => ORM}/FieldType/DBTime.php | 11 +- {model => ORM}/FieldType/DBVarchar.php | 10 +- {model => ORM}/FieldType/DBYear.php | 8 +- {model => ORM}/Filterable.php | 4 +- {model => ORM}/GroupedList.php | 7 +- {model => ORM}/HasManyList.php | 6 +- {model => ORM}/HiddenClass.php | 3 + {model => ORM/Hierarchy}/Hierarchy.php | 28 +++- {model => ORM}/Limitable.php | 4 +- {model => ORM}/List.php | 9 +- {model => ORM}/ListDecorator.php | 8 +- {model => ORM}/ManyManyList.php | 11 +- {model => ORM}/Map.php | 11 +- {model => ORM}/PolymorphicHasManyList.php | 8 +- .../Queries}/SQLAssignmentRow.php | 4 +- .../Queries}/SQLConditionGroup.php | 4 +- .../Queries}/SQLConditionalExpression.php | 6 +- {model/queries => ORM/Queries}/SQLDelete.php | 6 +- .../queries => ORM/Queries}/SQLExpression.php | 8 +- {model/queries => ORM/Queries}/SQLInsert.php | 6 +- {model/queries => ORM/Queries}/SQLSelect.php | 9 +- {model/queries => ORM/Queries}/SQLUpdate.php | 6 +- .../Queries}/SQLWriteExpression.php | 4 +- {model => ORM}/Relation.php | 10 +- {model => ORM}/RelationList.php | 6 +- {model => ORM}/Sortable.php | 4 +- {model => ORM}/UnsavedRelationList.php | 7 +- {model => ORM}/ValidationException.php | 7 +- {model => ORM}/ValidationResult.php | 6 +- .../Versioning}/ChangeSet.php | 20 ++- .../Versioning}/ChangeSetItem.php | 18 ++- {model => ORM/Versioning}/DataDifferencer.php | 13 +- .../Versioning}/VersionableExtension.php | 2 + .../Versioning}/Versioned.php | 54 +++++--- .../VersionedGridFieldDetailForm.php | 8 +- .../VersionedGridFieldItemRequest.php | 9 +- _config/config.yml | 2 +- _config/database.yml | 12 +- _config/model.yml | 52 ++++---- _config/versioning.yml | 2 +- _register_database.php | 2 +- admin/code/AddToCampaignHandler.php | 8 +- admin/code/AdminRootController.php | 2 + admin/code/CMSBatchAction.php | 6 +- admin/code/CMSBatchActionHandler.php | 7 +- admin/code/CMSProfileController.php | 3 + admin/code/CampaignAdmin.php | 6 +- admin/code/LeftAndMain.php | 17 ++- admin/code/ModelAdmin.php | 2 + admin/tests/LeftAndMainTest.php | 4 +- admin/tests/ModelAdminTest.php | 2 + api/DataFormatter.php | 3 + api/JSONDataFormatter.php | 3 + api/RSSFeed.php | 6 +- api/XMLDataFormatter.php | 4 + cli-script.php | 5 +- conf/ConfigureFromEnv.php | 3 +- control/Controller.php | 2 + control/CookieJar.php | 4 +- control/Director.php | 3 + control/FlushRequestFilter.php | 2 + control/RequestFilter.php | 2 + control/RequestHandler.php | 2 + control/RequestProcessor.php | 2 + control/VersionedRequestFilter.php | 3 + core/ClassInfo.php | 3 + core/Convert.php | 2 + core/Extensible.php | 9 +- core/PaginatedList.php | 5 + dev/Backtrace.php | 4 +- dev/BulkLoader.php | 3 + dev/CsvBulkLoader.php | 2 + dev/Debug.php | 2 + dev/DevBuildController.php | 2 + dev/DevelopmentAdmin.php | 3 + dev/FixtureBlueprint.php | 10 +- dev/FixtureFactory.php | 5 + dev/SapphireTest.php | 26 ++-- .../MySQLDatabaseConfigurationHelper.php | 2 +- filesystem/AssetControlExtension.php | 12 +- filesystem/File.php | 10 +- filesystem/FileMigrationHelper.php | 3 + filesystem/Filesystem.php | 2 + filesystem/Folder.php | 2 + {model => filesystem}/Image.php | 0 filesystem/ImageManipulation.php | 6 +- {model => filesystem}/Image_Backend.php | 0 filesystem/Upload.php | 2 + filesystem/flysystem/AssetAdapter.php | 4 +- filesystem/storage/DBFile.php | 10 +- forms/AssetField.php | 4 + forms/CheckboxSetField.php | 2 + forms/ConfirmedPasswordField.php | 3 + forms/CurrencyField.php | 4 +- forms/DateField.php | 4 +- forms/DatetimeField.php | 6 +- forms/DropdownField.php | 2 + forms/FieldList.php | 2 + forms/FileField.php | 2 + forms/Form.php | 3 + forms/FormField.php | 3 + forms/FormScaffolder.php | 2 +- forms/GroupedDropdownField.php | 2 + forms/InlineFormAction.php | 4 +- forms/ListboxField.php | 2 + forms/LookupField.php | 2 + forms/MemberDatetimeOptionsetField.php | 2 + forms/MoneyField.php | 8 +- forms/MultiSelectField.php | 6 +- forms/NullableField.php | 4 +- forms/NumericField.php | 2 + forms/OptionsetField.php | 2 + forms/PhoneNumberField.php | 2 + forms/SelectField.php | 3 + forms/SelectionGroup.php | 2 + forms/TreeDropdownField.php | 4 +- forms/TreeMultiselectField.php | 4 + forms/UploadField.php | 11 +- forms/gridfield/GridField.php | 7 +- .../GridFieldAddExistingAutocompleter.php | 4 + forms/gridfield/GridFieldComponent.php | 3 + forms/gridfield/GridFieldConfig.php | 2 + forms/gridfield/GridFieldDeleteAction.php | 2 + forms/gridfield/GridFieldDetailForm.php | 5 + forms/gridfield/GridFieldFilterHeader.php | 4 + forms/gridfield/GridFieldLevelup.php | 2 + forms/gridfield/GridFieldPaginator.php | 4 + forms/gridfield/GridFieldPrintButton.php | 5 +- forms/gridfield/GridFieldSortableHeader.php | 5 + forms/htmleditor/HTMLEditorField.php | 5 +- i18n/i18nTextCollector.php | 52 +++++++- main.php | 5 +- model/FieldType/SS_Datetime.php | 49 ------- parsers/BBCodeParser.php | 2 + {model => parsers/HTML}/HTMLValue.php | 0 {model => parsers}/Transliterator.php | 0 {model => parsers}/URLSegmentFilter.php | 0 search/FulltextSearchable.php | 3 + search/SearchContext.php | 3 + search/filters/ComparisonFilter.php | 2 + search/filters/ExactMatchFilter.php | 3 + search/filters/FulltextFilter.php | 3 + search/filters/PartialMatchFilter.php | 3 + search/filters/SearchFilter.php | 5 +- search/filters/WithinRangeFilter.php | 2 + security/Group.php | 8 +- security/GroupCsvBulkLoader.php | 2 + security/LoginAttempt.php | 2 + security/Member.php | 30 +++-- security/MemberAuthenticator.php | 2 + security/MemberCsvBulkLoader.php | 2 + security/MemberPassword.php | 2 + security/PasswordEncryptor.php | 2 + security/PasswordValidator.php | 2 + security/Permission.php | 4 + security/PermissionCheckboxSetField.php | 7 +- security/PermissionRole.php | 2 + security/PermissionRoleCode.php | 2 + security/RememberLoginHash.php | 7 +- security/Security.php | 4 + tasks/EncryptAllPasswordsTask.php | 2 + tasks/MigrateFileTask.php | 2 + tasks/RegenerateCachedImagesTask.php | 2 + tests/api/RSSFeedTest.php | 2 + tests/api/XMLDataFormatterTest.php | 2 + tests/bootstrap.php | 2 + tests/control/CMSProfileControllerTest.php | 2 + tests/control/ControllerTest.php | 2 + tests/control/DirectorTest.php | 6 +- tests/core/ArrayDataTest.php | 6 +- tests/core/ClassInfoTest.php | 4 +- tests/core/ObjectTest.php | 12 +- .../manifest/NamespacedClassManifestTest.php | 4 +- .../module/classes/ClassI.php | 4 +- tests/dev/BulkLoaderResultTest.php | 2 + tests/dev/CsvBulkLoaderTest.php | 5 +- tests/dev/FixtureBlueprintTest.php | 2 + tests/dev/FixtureFactoryTest.php | 2 + .../filesystem/AssetControlExtensionTest.php | 11 +- tests/filesystem/FileMigrationHelperTest.php | 2 + tests/filesystem/FileTest.php | 6 +- tests/filesystem/FolderTest.php | 3 + tests/filesystem/UploadTest.php | 2 + tests/forms/CheckboxFieldTest.php | 3 + tests/forms/CheckboxSetFieldTest.php | 4 + tests/forms/CurrencyFieldTest.php | 6 +- tests/forms/DBFileTest.php | 4 +- tests/forms/DatetimeFieldTest.php | 4 +- tests/forms/DropdownFieldTest.php | 4 +- tests/forms/EnumFieldTest.php | 4 +- tests/forms/FormScaffolderTest.php | 5 +- tests/forms/FormTest.php | 3 + tests/forms/GridFieldTest.php | 8 +- tests/forms/HTMLEditorFieldTest.php | 2 + tests/forms/ListboxFieldTest.php | 2 + tests/forms/LookupFieldTest.php | 2 + tests/forms/MoneyFieldTest.php | 5 +- tests/forms/NumericFieldTest.php | 2 + .../GridFieldAddExistingAutocompleterTest.php | 3 + tests/forms/gridfield/GridFieldConfigTest.php | 4 +- .../gridfield/GridFieldDeleteActionTest.php | 5 +- .../gridfield/GridFieldDetailFormTest.php | 2 + .../gridfield/GridFieldEditButtonTest.php | 3 + .../gridfield/GridFieldExportButtonTest.php | 4 + .../gridfield/GridFieldPaginatorTest.php | 2 + .../gridfield/GridFieldPrintButtonTest.php | 2 + .../gridfield/GridFieldSortableHeaderTest.php | 3 + .../gridfield/GridField_URLHandlerTest.php | 2 + tests/forms/uploadfield/AssetFieldTest.php | 3 + tests/forms/uploadfield/UploadFieldTest.php | 5 + .../code/i18nTestModuleDecorator.php | 2 + .../i18ntestmodule/code/i18nTestModule.php | 2 + .../subfolder/i18nTestNamespacedClass.php | 14 ++ tests/i18n/i18nTest.php | 2 + tests/i18n/i18nTextCollectorTest.php | 64 +++++---- tests/i18n/i18nTextCollectorTestMyObject.php | 2 + tests/model/ArrayListTest.php | 6 +- tests/model/ChangeSetItemTest.php | 5 +- tests/model/ChangeSetTest.php | 11 +- tests/model/ComponentSetTest.php | 2 + tests/model/DBClassNameTest.php | 23 ++-- tests/model/DBCompositeTest.php | 5 +- tests/model/DBCurrencyTest.php | 4 +- tests/model/DBDateTest.php | 10 +- tests/model/DBFieldTest.php | 11 +- tests/model/DBHTMLTextTest.php | 7 +- tests/model/DBLocaleTest.php | 4 +- tests/model/DBMoneyTest.php | 14 +- tests/model/DBPercentageTest.php | 4 +- tests/model/DBStringTest.php | 7 +- tests/model/DBTest.php | 2 + tests/model/DBTextTest.php | 7 +- tests/model/DBYearTest.php | 4 +- tests/model/DataDifferencerTest.php | 6 +- tests/model/DataExtensionTest.php | 7 +- tests/model/DataListTest.php | 4 + tests/model/DataObjectDuplicationTest.php | 2 + tests/model/DataObjectLazyLoadingTest.php | 9 +- .../model/DataObjectSchemaGenerationTest.php | 13 +- tests/model/DataObjectSchemaTest.php | 4 +- .../model/DataObjectSchemaTest_Namespaced.php | 10 +- tests/model/DataObjectTest.php | 36 ++++-- tests/model/DataObjectTest_Namespaced.php | 8 +- tests/model/DataQueryTest.php | 6 +- tests/model/DatabaseTest.php | 5 + tests/model/DbDatetimeTest.php | 8 +- tests/model/DecimalTest.php | 2 + tests/model/GroupedListTest.php | 3 + tests/model/HierarchyTest.php | 16 ++- tests/model/ManyManyListExtensionTest.php | 3 + tests/model/ManyManyListTest.php | 9 +- tests/model/MapTest.php | 3 + tests/model/MySQLDatabaseTest.php | 15 ++- tests/model/PDODatabaseTest.php | 14 +- tests/model/PaginatedListTest.php | 5 +- tests/model/SQLInsertTest.php | 8 +- tests/model/SQLSelectTest.php | 7 +- tests/model/SQLUpdateTest.php | 4 + tests/model/TimeTest.php | 6 +- tests/model/TransactionTest.php | 3 + tests/model/UnsavedRelationListTest.php | 8 +- tests/model/ValidationExceptionTest.php | 3 + tests/model/VersionableExtensionsTest.php | 9 +- tests/model/VersionedOwnershipTest.php | 30 +++-- tests/model/VersionedTest.php | 34 +++-- tests/search/FulltextFilterTest.php | 7 +- tests/search/SearchContextTest.php | 4 +- .../search/SearchFilterApplyRelationTest.php | 2 + tests/security/GroupTest.php | 2 + tests/security/MemberAuthenticatorTest.php | 5 +- tests/security/MemberCsvBulkLoaderTest.php | 2 + tests/security/MemberTest.php | 18 ++- .../PermissionCheckboxSetFieldTest.php | 2 + tests/security/PermissionRoleTest.php | 2 + tests/security/SecurityTest.php | 9 +- tests/tasks/EncryptAllPasswordsTaskTest.php | 2 + tests/testing/YamlFixtureTest.php | 2 + tests/view/SSViewerCacheBlockTest.php | 5 +- tests/view/SSViewerTest.php | 3 + tests/view/ViewableDataTest.php | 2 +- view/GenericTemplateGlobalProvider.php | 3 + view/SSViewer.php | 4 +- view/ViewableData.php | 4 +- 331 files changed, 1918 insertions(+), 630 deletions(-) create mode 100644 .upgrade.yml rename {model => ORM}/ArrayList.php (99%) rename {model/connect => ORM/Connect}/DBConnector.php (98%) rename {model/connect => ORM/Connect}/DBQueryBuilder.php (96%) rename {model/connect => ORM/Connect}/DBSchemaManager.php (91%) rename {model/connect => ORM/Connect}/Database.php (99%) rename {model/connect => ORM/Connect}/DatabaseException.php (94%) rename {model/connect => ORM/Connect}/MySQLDatabase.php (95%) rename {model/connect => ORM/Connect}/MySQLQuery.php (95%) rename {model/connect => ORM/Connect}/MySQLQueryBuilder.php (92%) rename {model/connect => ORM/Connect}/MySQLSchemaManager.php (94%) rename {model/connect => ORM/Connect}/MySQLStatement.php (97%) rename {model/connect => ORM/Connect}/MySQLiConnector.php (96%) rename {model/connect => ORM/Connect}/PDOConnector.php (96%) rename {model/connect => ORM/Connect}/PDOQuery.php (93%) rename {model/connect => ORM/Connect}/Query.php (98%) rename {model => ORM}/DB.php (98%) rename {model => ORM}/DataExtension.php (96%) rename {model => ORM}/DataList.php (99%) rename {model => ORM}/DataModel.php (96%) rename {model => ORM}/DataObject.php (98%) rename {model => ORM}/DataObjectInterface.php (96%) rename {model => ORM}/DataObjectSchema.php (93%) rename {model => ORM}/DataQuery.php (98%) rename {model => ORM}/DatabaseAdmin.php (93%) rename {model => ORM}/FieldType/DBBoolean.php (95%) rename {model => ORM}/FieldType/DBClassName.php (95%) rename {model => ORM}/FieldType/DBComposite.php (98%) rename {model => ORM}/FieldType/DBCurrency.php (96%) rename {model => ORM}/FieldType/DBDate.php (99%) rename {model => ORM}/FieldType/DBDatetime.php (90%) rename {model => ORM}/FieldType/DBDecimal.php (96%) rename {model => ORM}/FieldType/DBDouble.php (77%) rename {model => ORM}/FieldType/DBEnum.php (94%) rename {model => ORM}/FieldType/DBField.php (99%) rename {model => ORM}/FieldType/DBFloat.php (94%) rename {model => ORM}/FieldType/DBForeignKey.php (94%) rename {model => ORM}/FieldType/DBHTMLText.php (99%) rename {model => ORM}/FieldType/DBHTMLVarchar.php (94%) rename {model => ORM}/FieldType/DBInt.php (92%) rename {model => ORM}/FieldType/DBLocale.php (96%) rename {model => ORM}/FieldType/DBMoney.php (98%) rename {model => ORM}/FieldType/DBMultiEnum.php (85%) rename {model => ORM}/FieldType/DBPercentage.php (93%) rename {model => ORM}/FieldType/DBPolymorphicForeignKey.php (88%) rename {model => ORM}/FieldType/DBPrimaryKey.php (92%) rename {model => ORM}/FieldType/DBString.php (99%) rename {model => ORM}/FieldType/DBText.php (97%) rename {model => ORM}/FieldType/DBTime.php (93%) rename {model => ORM}/FieldType/DBVarchar.php (91%) rename {model => ORM}/FieldType/DBYear.php (91%) mode change 100755 => 100644 rename {model => ORM}/Filterable.php (98%) rename {model => ORM}/GroupedList.php (95%) rename {model => ORM}/HasManyList.php (97%) rename {model => ORM}/HiddenClass.php (89%) rename {model => ORM/Hierarchy}/Hierarchy.php (97%) rename {model => ORM}/Limitable.php (93%) rename {model => ORM}/List.php (93%) rename {model => ORM}/ListDecorator.php (98%) rename {model => ORM}/ManyManyList.php (98%) rename {model => ORM}/Map.php (98%) rename {model => ORM}/PolymorphicHasManyList.php (97%) rename {model/queries => ORM/Queries}/SQLAssignmentRow.php (99%) rename {model/queries => ORM/Queries}/SQLConditionGroup.php (90%) rename {model/queries => ORM/Queries}/SQLConditionalExpression.php (99%) rename {model/queries => ORM/Queries}/SQLDelete.php (97%) rename {model/queries => ORM/Queries}/SQLExpression.php (96%) rename {model/queries => ORM/Queries}/SQLInsert.php (98%) rename {model/queries => ORM/Queries}/SQLSelect.php (99%) rename {model/queries => ORM/Queries}/SQLUpdate.php (97%) rename {model/queries => ORM/Queries}/SQLWriteExpression.php (98%) rename {model => ORM}/Relation.php (86%) rename {model => ORM}/RelationList.php (96%) rename {model => ORM}/Sortable.php (96%) rename {model => ORM}/UnsavedRelationList.php (98%) rename {model => ORM}/ValidationException.php (96%) rename {model => ORM}/ValidationResult.php (97%) rename {model/versioning => ORM/Versioning}/ChangeSet.php (96%) rename {model/versioning => ORM/Versioning}/ChangeSetItem.php (96%) rename {model => ORM/Versioning}/DataDifferencer.php (96%) rename {model/versioning => ORM/Versioning}/VersionableExtension.php (94%) rename {model/versioning => ORM/Versioning}/Versioned.php (97%) rename {model/versioning => ORM/Versioning}/VersionedGridFieldDetailForm.php (54%) rename {model/versioning => ORM/Versioning}/VersionedGridFieldItemRequest.php (95%) rename {model => filesystem}/Image.php (100%) rename {model => filesystem}/Image_Backend.php (100%) delete mode 100644 model/FieldType/SS_Datetime.php rename {model => parsers/HTML}/HTMLValue.php (100%) rename {model => parsers}/Transliterator.php (100%) rename {model => parsers}/URLSegmentFilter.php (100%) create mode 100644 tests/i18n/_fakewebroot/i18ntestmodule/code/subfolder/i18nTestNamespacedClass.php diff --git a/.upgrade.yml b/.upgrade.yml new file mode 100644 index 000000000..04527a424 --- /dev/null +++ b/.upgrade.yml @@ -0,0 +1,122 @@ +fileExtensions: + - php +mappings: + ArrayList: SilverStripe\ORM\ArrayList + DatabaseAdmin: SilverStripe\ORM\DatabaseAdmin + DataExtension: SilverStripe\ORM\DataExtension + DataList: SilverStripe\ORM\DataList + DataModel: SilverStripe\ORM\DataModel + DataObject: SilverStripe\ORM\DataObject + DataObjectInterface: SilverStripe\ORM\DataObjectInterface + DataObjectSchema: SilverStripe\ORM\DataObjectSchema + DataQuery: SilverStripe\ORM\DataQuery + DataQuery_SubGroup: SilverStripe\ORM\DataQuery_SubGroup + DB: SilverStripe\ORM\DB + SS_Filterable: SilverStripe\ORM\SS_Filterable + GroupedList: SilverStripe\ORM\GroupedList + HasManyList: SilverStripe\ORM\HasManyList + HiddenClass: SilverStripe\ORM\HiddenClass + SS_Limitable: SilverStripe\ORM\SS_Limitable + SS_List: SilverStripe\ORM\SS_List + SS_ListDecorator: SilverStripe\ORM\SS_ListDecorator + ManyManyList: SilverStripe\ORM\ManyManyList + SS_Map: SilverStripe\ORM\SS_Map + SS_Map_Iterator: SilverStripe\ORM\SS_Map_Iterator + PolymorphicHasManyList: SilverStripe\ORM\PolymorphicHasManyList + SilverStripe\Model\Relation: SilverStripe\ORM\Relation + RelationList: SilverStripe\ORM\RelationList + SS_Sortable: SilverStripe\ORM\SS_Sortable + UnsavedRelationList: SilverStripe\ORM\UnsavedRelationList + ValidationException: SilverStripe\ORM\ValidationException + ValidationResult: SilverStripe\ORM\ValidationResult + SQLAssignmentRow: SilverStripe\ORM\Queries\SQLAssignmentRow + SQLConditionalExpression: SilverStripe\ORM\Queries\SQLConditionalExpression + SQLConditionGroup: SilverStripe\ORM\Queries\SQLConditionGroup + SQLDelete: SilverStripe\ORM\Queries\SQLDelete + SQLExpression: SilverStripe\ORM\Queries\SQLExpression + SQLInsert: SilverStripe\ORM\Queries\SQLInsert + SQLSelect: SilverStripe\ORM\Queries\SQLSelect + SQLUpdate: SilverStripe\ORM\Queries\SQLUpdate + SQLWriteExpression: SilverStripe\ORM\Queries\SQLWriteExpression + SS_Database: SilverStripe\ORM\Connect\SS_Database + SS_DatabaseException: SilverStripe\ORM\Connect\SS_DatabaseException + DBConnector: SilverStripe\ORM\Connect\DBConnector + DBQueryBuilder: SilverStripe\ORM\Connect\DBQueryBuilder + DBSchemaManager: SilverStripe\ORM\Connect\DBSchemaManager + MySQLDatabase: SilverStripe\ORM\Connect\MySQLDatabase + MySQLiConnector: SilverStripe\ORM\Connect\MySQLiConnector + MySQLQuery: SilverStripe\ORM\Connect\MySQLQuery + MySQLQueryBuilder: SilverStripe\ORM\Connect\MySQLQueryBuilder + MySQLSchemaManager: SilverStripe\ORM\Connect\MySQLSchemaManager + MySQLStatement: SilverStripe\ORM\Connect\MySQLStatement + PDOConnector: SilverStripe\ORM\Connect\PDOConnector + PDOQuery: SilverStripe\ORM\Connect\PDOQuery + SS_Query: SilverStripe\ORM\Connect\SS_Query + DBBoolean: SilverStripe\ORM\FieldType\DBBoolean + DBClassName: SilverStripe\ORM\FieldType\DBClassName + DBComposite: SilverStripe\ORM\FieldType\DBComposite + DBCurrency: SilverStripe\ORM\FieldType\DBCurrency + DBDate: SilverStripe\ORM\FieldType\DBDate + DBDatetime: SilverStripe\ORM\FieldType\DBDatetime + DBDecimal: SilverStripe\ORM\FieldType\DBDecimal + DBDouble: SilverStripe\ORM\FieldType\DBDouble + DBEnum: SilverStripe\ORM\FieldType\DBEnum + DBField: SilverStripe\ORM\FieldType\DBField + DBFloat: SilverStripe\ORM\FieldType\DBFloat + DBForeignKey: SilverStripe\ORM\FieldType\DBForeignKey + DBHTMLText: SilverStripe\ORM\FieldType\DBHTMLText + DBHTMLVarchar: SilverStripe\ORM\FieldType\DBHTMLVarchar + DBInt: SilverStripe\ORM\FieldType\DBInt + DBLocale: SilverStripe\ORM\FieldType\DBLocale + DBMoney: SilverStripe\ORM\FieldType\DBMoney + DBMultiEnum: SilverStripe\ORM\FieldType\DBMultiEnum + DBPercentage: SilverStripe\ORM\FieldType\DBPercentage + DBPolymorphicForeignKey: SilverStripe\ORM\FieldType\DBPolymorphicForeignKey + DBPrimaryKey: SilverStripe\ORM\FieldType\DBPrimaryKey + DBString: SilverStripe\ORM\FieldType\DBString + DBText: SilverStripe\ORM\FieldType\DBText + DBTime: SilverStripe\ORM\FieldType\DBTime + DBVarchar: SilverStripe\ORM\FieldType\DBVarchar + DBYear: SilverStripe\ORM\FieldType\DBYear + SS_Datetime: SilverStripe\ORM\FieldType\DBDatetime + SilverStripe\Model\FieldType\DBBoolean: SilverStripe\ORM\FieldType\DBBoolean + SilverStripe\Model\FieldType\DBClassName: SilverStripe\ORM\FieldType\DBClassName + SilverStripe\Model\FieldType\DBComposite: SilverStripe\ORM\FieldType\DBComposite + SilverStripe\Model\FieldType\DBCurrency: SilverStripe\ORM\FieldType\DBCurrency + SilverStripe\Model\FieldType\DBDate: SilverStripe\ORM\FieldType\DBDate + SilverStripe\Model\FieldType\DBDatetime: SilverStripe\ORM\FieldType\DBDatetime + SilverStripe\Model\FieldType\DBDecimal: SilverStripe\ORM\FieldType\DBDecimal + SilverStripe\Model\FieldType\DBDouble: SilverStripe\ORM\FieldType\DBDouble + SilverStripe\Model\FieldType\DBEnum: SilverStripe\ORM\FieldType\DBEnum + SilverStripe\Model\FieldType\DBField: SilverStripe\ORM\FieldType\DBField + SilverStripe\Model\FieldType\DBFloat: SilverStripe\ORM\FieldType\DBFloat + SilverStripe\Model\FieldType\DBForeignKey: SilverStripe\ORM\FieldType\DBForeignKey + SilverStripe\Model\FieldType\DBHTMLText: SilverStripe\ORM\FieldType\DBHTMLText + SilverStripe\Model\FieldType\DBHTMLVarchar: SilverStripe\ORM\FieldType\DBHTMLVarchar + SilverStripe\Model\FieldType\DBInt: SilverStripe\ORM\FieldType\DBInt + SilverStripe\Model\FieldType\DBLocale: SilverStripe\ORM\FieldType\DBLocale + SilverStripe\Model\FieldType\DBMoney: SilverStripe\ORM\FieldType\DBMoney + SilverStripe\Model\FieldType\DBMultiEnum: SilverStripe\ORM\FieldType\DBMultiEnum + SilverStripe\Model\FieldType\DBPercentage: SilverStripe\ORM\FieldType\DBPercentage + SilverStripe\Model\FieldType\DBPolymorphicForeignKey: SilverStripe\ORM\FieldType\DBPolymorphicForeignKey + SilverStripe\Model\FieldType\DBPrimaryKey: SilverStripe\ORM\FieldType\DBPrimaryKey + SilverStripe\Model\FieldType\DBString: SilverStripe\ORM\FieldType\DBString + SilverStripe\Model\FieldType\DBText: SilverStripe\ORM\FieldType\DBText + SilverStripe\Model\FieldType\DBTime: SilverStripe\ORM\FieldType\DBTime + SilverStripe\Model\FieldType\DBVarchar: SilverStripe\ORM\FieldType\DBVarchar + SilverStripe\Model\FieldType\DBYear: SilverStripe\ORM\FieldType\DBYear + SilverStripe\Model\FieldType\SS_Datetime: SilverStripe\ORM\FieldType\DBDatetime + ChangeSet: SilverStripe\ORM\Versioning\ChangeSet + ChangeSetItem: SilverStripe\ORM\Versioning\ChangeSetItem + DataDifferencer: SilverStripe\ORM\Versioning\DataDifferencer + VersionableExtension: SilverStripe\ORM\Versioning\VersionableExtension + Versioned: SilverStripe\ORM\Versioning\Versioned + Versioned_Version: SilverStripe\ORM\Versioning\Versioned_Version + VersionedGridFieldDetailForm: SilverStripe\ORM\Versioning\VersionedGridFieldDetailForm + VersionedGridFieldItemRequest: SilverStripe\ORM\Versioning\VersionedGridFieldItemRequest + Hierarchy: SilverStripe\ORM\Hierarchy\Hierarchy +skipConfigs: + - db + - casting + - table_name + - fixed_fields diff --git a/model/ArrayList.php b/ORM/ArrayList.php similarity index 99% rename from model/ArrayList.php rename to ORM/ArrayList.php index 1e855b0bf..d4e3d79dd 100644 --- a/model/ArrayList.php +++ b/ORM/ArrayList.php @@ -1,4 +1,14 @@ transCreateTable($table, $options, $extensions); $this->alterationMessage("Table $table: created", "created"); } else { - if (Config::inst()->get('DBSchemaManager', 'check_and_repair_on_build')) { + if (Config::inst()->get('SilverStripe\ORM\Connect\DBSchemaManager', 'check_and_repair_on_build')) { $this->checkAndRepairTable($table, $options); } @@ -349,7 +357,7 @@ abstract class DBSchemaManager { $fieldObj->setTable($table); - if($fieldObj instanceof PrimaryKey) { + if($fieldObj instanceof DBPrimaryKey) { $fieldObj->setAutoIncrement($hasAutoIncPK); } @@ -940,4 +948,101 @@ abstract class DBSchemaManager { return true; } + + /** + * Returns data type for 'boolean' column + * + * @param array $values Contains a tokenised list of info about this data type + * @return string + */ + abstract public function boolean($values); + + /** + * Returns data type for 'date' column + * + * @param array $values Contains a tokenised list of info about this data type + * @return string + */ + abstract public function date($values); + + /** + * Returns data type for 'decimal' column + * + * @param array $values Contains a tokenised list of info about this data type + * @return string + */ + abstract public function decimal($values); + + /** + * Returns data type for 'set' column + * + * @param array $values Contains a tokenised list of info about this data type + * @return string + */ + abstract public function enum($values); + + /** + * Returns data type for 'set' column + * + * @param array $values Contains a tokenised list of info about this data type + * @return string + */ + abstract public function set($values); + + /** + * Returns data type for 'float' column + * + * @param array $values Contains a tokenised list of info about this data type + * @return string + */ + abstract public function float($values); + + /** + * Returns data type for 'int' column + * + * @param array $values Contains a tokenised list of info about this data type + * @return string + */ + abstract public function int($values); + + /** + * Returns data type for 'datetime' column + * + * @param array $values Contains a tokenised list of info about this data type + * @return string + */ + abstract public function datetime($values); + + /** + * Returns data type for 'text' column + * + * @param array $values Contains a tokenised list of info about this data type + * @return string + */ + abstract public function text($values); + + /** + * Returns data type for 'time' column + * + * @param array $values Contains a tokenised list of info about this data type + * @return string + */ + abstract public function time($values); + + /** + * Returns data type for 'varchar' column + * + * @param array $values Contains a tokenised list of info about this data type + * @return string + */ + abstract public function varchar($values); + + /* + * Returns data type for 'year' column + * + * @param array $values Contains a tokenised list of info about this data type + * @return string + */ + abstract public function year($values); + } diff --git a/model/connect/Database.php b/ORM/Connect/Database.php similarity index 99% rename from model/connect/Database.php rename to ORM/Connect/Database.php index f26a3e5f7..976d823e8 100644 --- a/model/connect/Database.php +++ b/ORM/Connect/Database.php @@ -1,11 +1,22 @@ get('MySQLDatabase', 'connection_charset')) + && ($charset = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'connection_charset')) ) { $parameters['charset'] = $charset; } // Set collation if( empty($parameters['collation']) - && ($collation = Config::inst()->get('MySQLDatabase', 'connection_collation')) + && ($collation = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'connection_collation')) ) { $parameters['collation'] = $collation; } @@ -158,7 +166,7 @@ class MySQLDatabase extends SS_Database { $baseClasses[$class] = '"' . $class . '"'; } - $charset = Config::inst()->get('MySQLDatabase', 'charset'); + $charset = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'charset'); // Make column selection lists $select = array( diff --git a/model/connect/MySQLQuery.php b/ORM/Connect/MySQLQuery.php similarity index 95% rename from model/connect/MySQLQuery.php rename to ORM/Connect/MySQLQuery.php index 6a94fbb5b..311b2f2be 100644 --- a/model/connect/MySQLQuery.php +++ b/ORM/Connect/MySQLQuery.php @@ -1,10 +1,12 @@ get('MySQLDatabase', 'charset'); - $collation = Config::inst()->get('MySQLDatabase', 'collation'); + $charset = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'charset'); + $collation = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'collation'); $this->query("CREATE DATABASE \"$name\" DEFAULT CHARACTER SET {$charset} DEFAULT COLLATE {$collation}"); } @@ -436,8 +441,8 @@ class MySQLSchemaManager extends DBSchemaManager { //DB::requireField($this->tableName, $this->name, "enum('" . implode("','", $this->enum) . "') character set // utf8 collate utf8_general_ci default '{$this->default}'"); $valuesString = implode(",", Convert::raw2sql($values['enums'], true)); - $charset = Config::inst()->get('MySQLDatabase', 'charset'); - $collation = Config::inst()->get('MySQLDatabase', 'collation'); + $charset = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'charset'); + $collation = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'collation'); return "enum($valuesString) character set {$charset} collate {$collation}" . $this->defaultClause($values); } @@ -454,8 +459,8 @@ class MySQLSchemaManager extends DBSchemaManager { //DB::requireField($this->tableName, $this->name, "enum('" . implode("','", $this->enum) . "') character set //utf8 collate utf8_general_ci default '{$this->default}'"); $valuesString = implode(",", Convert::raw2sql($values['enums'], true)); - $charset = Config::inst()->get('MySQLDatabase', 'charset'); - $collation = Config::inst()->get('MySQLDatabase', 'collation'); + $charset = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'charset'); + $collation = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'collation'); return "set($valuesString) character set {$charset} collate {$collation}" . $this->defaultClause($values); } @@ -493,7 +498,7 @@ class MySQLSchemaManager extends DBSchemaManager { * @param array $values Contains a tokenised list of info about this data type * @return string */ - public function ss_datetime($values) { + public function datetime($values) { //For reference, this is what typically gets passed to this function: //$parts=Array('datatype'=>'datetime'); //DB::requireField($this->tableName, $this->name, $values); @@ -510,8 +515,8 @@ class MySQLSchemaManager extends DBSchemaManager { //For reference, this is what typically gets passed to this function: //$parts=Array('datatype'=>'mediumtext', 'character set'=>'utf8', 'collate'=>'utf8_general_ci'); //DB::requireField($this->tableName, $this->name, "mediumtext character set utf8 collate utf8_general_ci"); - $charset = Config::inst()->get('MySQLDatabase', 'charset'); - $collation = Config::inst()->get('MySQLDatabase', 'collation'); + $charset = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'charset'); + $collation = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'collation'); return 'mediumtext character set ' . $charset . ' collate ' . $collation . $this->defaultClause($values); } @@ -542,8 +547,8 @@ class MySQLSchemaManager extends DBSchemaManager { //DB::requireField($this->tableName, $this->name, "varchar($this->size) character set utf8 collate // utf8_general_ci"); $default = $this->defaultClause($values); - $charset = Config::inst()->get('MySQLDatabase', 'charset'); - $collation = Config::inst()->get('MySQLDatabase', 'collation'); + $charset = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'charset'); + $collation = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'collation'); return "varchar({$values['precision']}) character set {$charset} collate {$collation}{$default}"; } diff --git a/model/connect/MySQLStatement.php b/ORM/Connect/MySQLStatement.php similarity index 97% rename from model/connect/MySQLStatement.php rename to ORM/Connect/MySQLStatement.php index b02938e76..d232aac80 100644 --- a/model/connect/MySQLStatement.php +++ b/ORM/Connect/MySQLStatement.php @@ -1,5 +1,7 @@ get('MySQLDatabase', 'connection_charset'); - $connCollation = Config::inst()->get('MySQLDatabase', 'connection_collation'); + $connCharset = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'connection_charset'); + $connCollation = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'connection_collation'); if(!empty($parameters['port'])) { $this->dbConn = new MySQLi( diff --git a/model/connect/PDOConnector.php b/ORM/Connect/PDOConnector.php similarity index 96% rename from model/connect/PDOConnector.php rename to ORM/Connect/PDOConnector.php index 6b423754e..555d5ee89 100644 --- a/model/connect/PDOConnector.php +++ b/ORM/Connect/PDOConnector.php @@ -1,9 +1,15 @@ get('PDOConnector', 'emulate_prepare'); + return Config::inst()->get('SilverStripe\ORM\Connect\PDOConnector', 'emulate_prepare'); } public function connect($parameters, $selectDB = false) { @@ -135,8 +141,8 @@ class PDOConnector extends DBConnector { } // Connection charset and collation - $connCharset = Config::inst()->get('MySQLDatabase', 'connection_charset'); - $connCollation = Config::inst()->get('MySQLDatabase', 'connection_collation'); + $connCharset = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'connection_charset'); + $connCollation = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'connection_collation'); // Set charset if given and not null. Can explicitly set to empty string to omit if($parameters['driver'] !== 'sqlsrv') { diff --git a/model/connect/PDOQuery.php b/ORM/Connect/PDOQuery.php similarity index 93% rename from model/connect/PDOQuery.php rename to ORM/Connect/PDOQuery.php index bd166b8a1..0dce805ba 100644 --- a/model/connect/PDOQuery.php +++ b/ORM/Connect/PDOQuery.php @@ -1,9 +1,14 @@ * * @package framework - * @subpackage model + * @subpackage orm */ class DataModel { diff --git a/model/DataObject.php b/ORM/DataObject.php similarity index 98% rename from model/DataObject.php rename to ORM/DataObject.php index 1bc6db7d4..d059939b3 100644 --- a/model/DataObject.php +++ b/ORM/DataObject.php @@ -1,9 +1,35 @@ 'PrimaryKey', 'ClassName' => 'DBClassName', - 'LastEdited' => 'SS_Datetime', - 'Created' => 'SS_Datetime', + 'LastEdited' => 'DBDatetime', + 'Created' => 'DBDatetime', ); /** @@ -243,7 +269,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity * @return DataObjectSchema */ public static function getSchema() { - return Injector::inst()->get('DataObjectSchema'); + return Injector::inst()->get('SilverStripe\ORM\DataObjectSchema'); } /** @@ -381,7 +407,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity // Identify fields that should be lazy loaded, but only on existing records if(!empty($record['ID'])) { $currentObj = get_class($this); - while($currentObj != 'DataObject') { + while($currentObj != 'SilverStripe\ORM\DataObject') { $fields = self::custom_database_fields($currentObj); foreach($fields as $field => $type) { if(!array_key_exists($field, $record)) $this->record[$field.'_Lazy'] = $currentObj; @@ -528,7 +554,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity */ public function setClassName($className) { $className = trim($className); - if(!$className || !is_subclass_of($className, 'DataObject')) return; + if(!$className || !is_subclass_of($className, 'SilverStripe\ORM\DataObject')) return; $this->class = $className; $this->setField("ClassName", $className); @@ -589,7 +615,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity } } - if($this->class == 'DataObject') return; + if($this->class == 'SilverStripe\ORM\DataObject') return; // Set up accessors for joined items if($manyMany = $this->manyMany()) { @@ -677,7 +703,8 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity */ public function singular_name() { if(!$name = $this->stat('singular_name')) { - $name = ucwords(trim(strtolower(preg_replace('/_?([A-Z])/', ' $1', $this->class)))); + $reflection = new \ReflectionClass($this); + $name = ucwords(trim(strtolower(preg_replace('/_?([A-Z])/', ' $1', $reflection->getShortName())))); } return $name; @@ -1098,7 +1125,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity $manyManyJoin->setByIdList($fieldValue); } } - if($class == 'DataObject') { + if($class == 'SilverStripe\ORM\DataObject') { break; } } @@ -1121,7 +1148,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity ); } - if(Config::inst()->get('DataObject', 'validation_enabled')) { + if(Config::inst()->get('SilverStripe\ORM\DataObject', 'validation_enabled')) { $result = $this->validate(); if (!$result->valid()) { return new ValidationException( @@ -1455,7 +1482,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity $joinID = $this->getField($joinField); // Extract class name for polymorphic relations - if($class === 'DataObject') { + if($class === 'SilverStripe\ORM\DataObject') { $class = $this->getField($componentName . 'Class'); if(empty($class)) return null; } @@ -1640,7 +1667,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity $remoteRelation )); } - if($class === 'DataObject') { + if($class === 'SilverStripe\ORM\DataObject') { throw new InvalidArgumentException(sprintf( "%s cannot generate opposite component of relation %s.%s as it is polymorphic. " . "This method does not support polymorphic relationships", @@ -1795,7 +1822,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity } // Inspect resulting found relation - if($remoteRelations[$remoteField] === 'DataObject') { + if($remoteRelations[$remoteField] === 'SilverStripe\ORM\DataObject') { $polymorphic = true; return $remoteField; // Composite polymorphic field does not include 'ID' suffix } else { @@ -2737,7 +2764,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity * @return bool */ public static function has_own_table($dataClass) { - if(!is_subclass_of($dataClass, 'DataObject')) { + if(!is_subclass_of($dataClass, 'SilverStripe\ORM\DataObject')) { return false; } $fields = static::database_fields($dataClass); @@ -3069,15 +3096,15 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity * @return DataList The objects matching the filter, in the class specified by $containerClass */ public static function get($callerClass = null, $filter = "", $sort = "", $join = "", $limit = null, - $containerClass = 'DataList') { + $containerClass = 'SilverStripe\ORM\DataList') { if($callerClass == null) { $callerClass = get_called_class(); - if($callerClass == 'DataObject') { + if($callerClass == 'SilverStripe\ORM\DataObject') { throw new \InvalidArgumentException('Call ::get() instead of DataObject::get()'); } - if($filter || $sort || $join || $limit || ($containerClass != 'DataList')) { + if($filter || $sort || $join || $limit || ($containerClass != 'SilverStripe\ORM\DataList')) { throw new \InvalidArgumentException('If calling ::get() then you shouldn\'t pass any other' . ' arguments'); } @@ -3155,7 +3182,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity * @return DataObject $this */ public function flushCache($persistent = true) { - if($this->class == 'DataObject') { + if($this->class == 'SilverStripe\ORM\DataObject') { self::$_cache_get_one = array(); return $this; } @@ -3314,7 +3341,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity } } - if(get_parent_class($this) == "DataObject") { + if(get_parent_class($this) == 'SilverStripe\ORM\DataObject') { $indexes['ClassName'] = true; } @@ -3337,7 +3364,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity // Validate relationship configuration $this->validateModelDefinitions(); if($fields) { - $hasAutoIncPK = get_parent_class($this) === 'DataObject'; + $hasAutoIncPK = get_parent_class($this) === 'SilverStripe\ORM\DataObject'; DB::require_table( $table, $fields, $indexes, $hasAutoIncPK, $this->stat('create_table_options'), $extensions ); @@ -3730,7 +3757,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity * @config */ private static $create_table_options = array( - 'MySQLDatabase' => 'ENGINE=InnoDB' + 'SilverStripe\ORM\Connect\MySQLDatabase' => 'ENGINE=InnoDB' ); /** diff --git a/model/DataObjectInterface.php b/ORM/DataObjectInterface.php similarity index 96% rename from model/DataObjectInterface.php rename to ORM/DataObjectInterface.php index 8b888f4f8..79743b3da 100644 --- a/model/DataObjectInterface.php +++ b/ORM/DataObjectInterface.php @@ -1,11 +1,14 @@ tableNames = []; - foreach(ClassInfo::subclassesFor('DataObject') as $class) { - if($class === 'DataObject') { + foreach(ClassInfo::subclassesFor('SilverStripe\ORM\DataObject') as $class) { + if($class === 'SilverStripe\ORM\DataObject') { continue; } $table = $this->buildTableName($class); @@ -208,7 +215,7 @@ class DataObjectSchema { */ public function databaseFields($class) { $class = ClassInfo::class_name($class); - if($class === 'DataObject') { + if($class === 'SilverStripe\ORM\DataObject') { return []; } $this->cacheDatabaseFields($class); @@ -230,7 +237,7 @@ class DataObjectSchema { */ public function compositeFields($class, $aggregated = true) { $class = ClassInfo::class_name($class); - if($class === 'DataObject') { + if($class === 'SilverStripe\ORM\DataObject') { return []; } $this->cacheDatabaseFields($class); @@ -262,7 +269,7 @@ class DataObjectSchema { // Ensure fixed fields appear at the start $fixedFields = DataObject::config()->fixed_fields; - if(get_parent_class($class) === 'DataObject') { + if(get_parent_class($class) === 'SilverStripe\ORM\DataObject') { // Merge fixed with ClassName spec and custom db fields $dbFields = $fixedFields; } else { @@ -283,7 +290,7 @@ class DataObjectSchema { // Add in all has_ones $hasOne = Config::inst()->get($class, 'has_one', Config::UNINHERITED) ?: array(); foreach($hasOne as $fieldName => $hasOneClass) { - if($hasOneClass === 'DataObject') { + if($hasOneClass === 'SilverStripe\ORM\DataObject') { $compositeFields[$fieldName] = 'PolymorphicForeignKey'; } else { $dbFields["{$fieldName}ID"] = 'ForeignKey'; @@ -339,7 +346,7 @@ class DataObjectSchema { public function classForField($candidateClass, $fieldName) { // normalise class name $candidateClass = ClassInfo::class_name($candidateClass); - if($candidateClass === 'DataObject') { + if($candidateClass === 'SilverStripe\ORM\DataObject') { return null; } diff --git a/model/DataQuery.php b/ORM/DataQuery.php similarity index 98% rename from model/DataQuery.php rename to ORM/DataQuery.php index 3021df552..509556ddd 100644 --- a/model/DataQuery.php +++ b/ORM/DataQuery.php @@ -1,5 +1,15 @@ $dummy) { if(is_subclass_of($class, $rootClass)) { $rootClasses[$rootClass][] = $class; @@ -125,7 +138,7 @@ class DatabaseAdmin extends Controller { * Check if database needs to be built, and build it if it does. */ public static function autoBuild() { - $dataClasses = ClassInfo::subclassesFor('DataObject'); + $dataClasses = ClassInfo::subclassesFor('SilverStripe\ORM\DataObject'); $lastBuilt = self::lastBuilt(); foreach($dataClasses as $class) { if(filemtime(getClassFile($class)) > $lastBuilt) { @@ -141,7 +154,7 @@ class DatabaseAdmin extends Controller { * DataObject classes */ public function buildDefaults() { - $dataClasses = ClassInfo::subclassesFor('DataObject'); + $dataClasses = ClassInfo::subclassesFor('SilverStripe\ORM\DataObject'); array_shift($dataClasses); foreach($dataClasses as $dataClass){ singleton($dataClass)->requireDefaultRecords(); @@ -215,7 +228,7 @@ class DatabaseAdmin extends Controller { } // Build the database. Most of the hard work is handled by DataObject - $dataClasses = ClassInfo::subclassesFor('DataObject'); + $dataClasses = ClassInfo::subclassesFor('SilverStripe\ORM\DataObject'); array_shift($dataClasses); if(!$quiet) { @@ -299,7 +312,7 @@ class DatabaseAdmin extends Controller { public function cleanup() { $allClasses = get_declared_classes(); foreach($allClasses as $class) { - if(get_parent_class($class) == 'DataObject') { + if(get_parent_class($class) == 'SilverStripe\ORM\DataObject') { $baseClasses[] = $class; } } diff --git a/model/FieldType/DBBoolean.php b/ORM/FieldType/DBBoolean.php similarity index 95% rename from model/FieldType/DBBoolean.php rename to ORM/FieldType/DBBoolean.php index 209f05b77..077b1ea62 100644 --- a/model/FieldType/DBBoolean.php +++ b/ORM/FieldType/DBBoolean.php @@ -1,16 +1,17 @@ getBaseClass()); - unset($classNames['DataObject']); + unset($classNames['SilverStripe\ORM\DataObject']); return $classNames; } diff --git a/model/FieldType/DBComposite.php b/ORM/FieldType/DBComposite.php similarity index 98% rename from model/FieldType/DBComposite.php rename to ORM/FieldType/DBComposite.php index d58abc5c5..c5d2f2b26 100644 --- a/model/FieldType/DBComposite.php +++ b/ORM/FieldType/DBComposite.php @@ -1,10 +1,11 @@ * * @package framework - * @subpackage model + * @subpackage orm */ abstract class DBComposite extends DBField { diff --git a/model/FieldType/DBCurrency.php b/ORM/FieldType/DBCurrency.php similarity index 96% rename from model/FieldType/DBCurrency.php rename to ORM/FieldType/DBCurrency.php index a02e031c1..6c673b954 100644 --- a/model/FieldType/DBCurrency.php +++ b/ORM/FieldType/DBCurrency.php @@ -1,6 +1,6 @@ * * @package framework - * @subpackage model + * @subpackage orm */ class DBCurrency extends DBDecimal { diff --git a/model/FieldType/DBDate.php b/ORM/FieldType/DBDate.php similarity index 99% rename from model/FieldType/DBDate.php rename to ORM/FieldType/DBDate.php index 9130ff23d..1857d811b 100644 --- a/model/FieldType/DBDate.php +++ b/ORM/FieldType/DBDate.php @@ -1,14 +1,14 @@ value) return $this->Format($this->config()->nice_format); } diff --git a/model/FieldType/DBDatetime.php b/ORM/FieldType/DBDatetime.php similarity index 90% rename from model/FieldType/DBDatetime.php rename to ORM/FieldType/DBDatetime.php index 8e029f3b8..468271b3a 100644 --- a/model/FieldType/DBDatetime.php +++ b/ORM/FieldType/DBDatetime.php @@ -1,14 +1,14 @@ * static $db = array( - * "Expires" => "SS_Datetime", + * "Expires" => "DBDatetime", * ); * * * @todo Add localization support, see http://open.silverstripe.com/ticket/2931 * * @package framework - * @subpackage model + * @subpackage orm */ class DBDatetime extends DBDate implements TemplateGlobalProvider { @@ -42,7 +42,7 @@ class DBDatetime extends DBDate implements TemplateGlobalProvider { * @see Time::nice_format */ private static $nice_format = 'd/m/Y g:ia'; - + public function setValue($value, $record = null, $markChanged = true) { if($value === false || $value === null || (is_string($value) && !strlen($value))) { // don't try to evaluate empty values with strtotime() below, as it returns "1970-01-01" when it should be @@ -72,7 +72,7 @@ class DBDatetime extends DBDate implements TemplateGlobalProvider { } /** - * Returns the date and time in the format specified by the config value nice_format, or 'd/m/Y g:ia' + * Returns the date and time in the format specified by the config value nice_format, or 'd/m/Y g:ia' * by default (e.g. '31/01/2014 2:23pm'). * @return string Formatted date and time. */ @@ -137,7 +137,7 @@ class DBDatetime extends DBDate implements TemplateGlobalProvider { public function requireField() { $parts=Array('datatype'=>'datetime', 'arrayValue'=>$this->arrayValue); - $values=Array('type'=>'SS_Datetime', 'parts'=>$parts); + $values=Array('type'=>'datetime', 'parts'=>$parts); DB::require_field($this->tableName, $this->name, $values); } @@ -180,13 +180,13 @@ class DBDatetime extends DBDate implements TemplateGlobalProvider { * Returns either the current system date as determined * by date(), or a mocked date through {@link set_mock_now()}. * - * @return SS_Datetime + * @return static */ public static function now() { if(self::$mock_now) { return self::$mock_now; } else { - return DBField::create_field('SS_Datetime', date('Y-m-d H:i:s')); + return DBField::create_field('SilverStripe\ORM\FieldType\DBDatetime', date('Y-m-d H:i:s')); } } @@ -195,14 +195,14 @@ class DBDatetime extends DBDate implements TemplateGlobalProvider { * Use {@link clear_mock_now()} to revert to the current system date. * Caution: This sets a fixed date that doesn't increment with time. * - * @param SS_Datetime|string $datetime Either in object format, or as a SS_Datetime compatible string. + * @param DBDatetime|string $datetime Either in object format, or as a DBDatetime compatible string. * @throws Exception */ public static function set_mock_now($datetime) { - if($datetime instanceof SS_Datetime) { + if($datetime instanceof DBDatetime) { self::$mock_now = $datetime; } elseif(is_string($datetime)) { - self::$mock_now = DBField::create_field('SS_Datetime', $datetime); + self::$mock_now = DBField::create_field('SilverStripe\ORM\FieldType\DBDatetime', $datetime); } else { throw new Exception('DBDatetime::set_mock_now(): Wrong format: ' . $datetime); } @@ -218,7 +218,7 @@ class DBDatetime extends DBDate implements TemplateGlobalProvider { public static function get_template_global_variables() { return array( - 'Now' => array('method' => 'now', 'casting' => 'SS_Datetime'), + 'Now' => array('method' => 'now', 'casting' => 'SilverStripe\ORM\FieldType\DBDatetime'), ); } } diff --git a/model/FieldType/DBDecimal.php b/ORM/FieldType/DBDecimal.php similarity index 96% rename from model/FieldType/DBDecimal.php rename to ORM/FieldType/DBDecimal.php index 8c7dfe0d5..db5a6172c 100644 --- a/model/FieldType/DBDecimal.php +++ b/ORM/FieldType/DBDecimal.php @@ -1,15 +1,15 @@ get('MySQLDatabase', 'charset'); - $collation = Config::inst()->get('MySQLDatabase', 'collation'); + $charset = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'charset'); + $collation = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'collation'); $parts = array( 'datatype' => 'enum', diff --git a/model/FieldType/DBField.php b/ORM/FieldType/DBField.php similarity index 99% rename from model/FieldType/DBField.php rename to ORM/FieldType/DBField.php index 2342912ec..4bb8f3a54 100644 --- a/model/FieldType/DBField.php +++ b/ORM/FieldType/DBField.php @@ -1,6 +1,6 @@ get('MySQLDatabase', 'charset'); - $collation = Config::inst()->get('MySQLDatabase', 'collation'); + $charset = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'charset'); + $collation = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'collation'); $values=array( 'type'=>'set', 'parts'=>array( diff --git a/model/FieldType/DBPercentage.php b/ORM/FieldType/DBPercentage.php similarity index 93% rename from model/FieldType/DBPercentage.php rename to ORM/FieldType/DBPercentage.php index 1c1b2e0ac..386c6f3a1 100644 --- a/model/FieldType/DBPercentage.php +++ b/ORM/FieldType/DBPercentage.php @@ -1,6 +1,6 @@ * * @package framework - * @subpackage model + * @subpackage orm */ class DBPercentage extends DBDecimal { diff --git a/model/FieldType/DBPolymorphicForeignKey.php b/ORM/FieldType/DBPolymorphicForeignKey.php similarity index 88% rename from model/FieldType/DBPolymorphicForeignKey.php rename to ORM/FieldType/DBPolymorphicForeignKey.php index a1fc24782..af572a2f3 100644 --- a/model/FieldType/DBPolymorphicForeignKey.php +++ b/ORM/FieldType/DBPolymorphicForeignKey.php @@ -1,22 +1,20 @@ 'Int', - 'Class' => 'DBClassName("DataObject")' + 'Class' => "DBClassName('SilverStripe\\ORM\\DataObject')" ); public function scaffoldFormField($title = null, $params = null) { @@ -79,7 +77,7 @@ class DBPolymorphicForeignKey extends DBComposite { public function getValue() { $id = $this->getIDValue(); $class = $this->getClassValue(); - if($id && $class && is_subclass_of($class, 'DataObject')) { + if($id && $class && is_subclass_of($class, 'SilverStripe\ORM\DataObject')) { return DataObject::get_by_id($class, $id); } } diff --git a/model/FieldType/DBPrimaryKey.php b/ORM/FieldType/DBPrimaryKey.php similarity index 92% rename from model/FieldType/DBPrimaryKey.php rename to ORM/FieldType/DBPrimaryKey.php index 4e37100e1..312d6e5c7 100644 --- a/model/FieldType/DBPrimaryKey.php +++ b/ORM/FieldType/DBPrimaryKey.php @@ -1,11 +1,10 @@ get('MySQLDatabase', 'charset'); - $collation = Config::inst()->get('MySQLDatabase', 'collation'); + $charset = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'charset'); + $collation = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'collation'); $parts = array( 'datatype' => 'mediumtext', diff --git a/model/FieldType/DBTime.php b/ORM/FieldType/DBTime.php similarity index 93% rename from model/FieldType/DBTime.php rename to ORM/FieldType/DBTime.php index 5c1374034..106688c38 100644 --- a/model/FieldType/DBTime.php +++ b/ORM/FieldType/DBTime.php @@ -1,12 +1,11 @@ get('MySQLDatabase', 'charset'); - $collation = Config::inst()->get('MySQLDatabase', 'collation'); + $charset = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'charset'); + $collation = Config::inst()->get('SilverStripe\ORM\Connect\MySQLDatabase', 'collation'); $parts = array( 'datatype'=>'varchar', diff --git a/model/FieldType/DBYear.php b/ORM/FieldType/DBYear.php old mode 100755 new mode 100644 similarity index 91% rename from model/FieldType/DBYear.php rename to ORM/FieldType/DBYear.php index 2550e1770..812c58cd0 --- a/model/FieldType/DBYear.php +++ b/ORM/FieldType/DBYear.php @@ -1,20 +1,20 @@ get('Hierarchy', 'node_threshold_total'); + $nodeCountThreshold = Config::inst()->get('SilverStripe\ORM\Hierarchy\Hierarchy', 'node_threshold_total'); } if($limitToMarked && $rootCall) { @@ -534,7 +548,7 @@ class Hierarchy extends DataExtension { continue; } $idList[] = $child->ID; - $ext = $child->getExtensionInstance('Hierarchy'); + $ext = $child->getExtensionInstance('SilverStripe\ORM\Hierarchy\Hierarchy'); $ext->setOwner($child); $ext->loadDescendantIDListInto($idList); $ext->clearOwner(); @@ -598,7 +612,7 @@ class Hierarchy extends DataExtension { $stageChildren = $this->owner->stageChildren(true); // Add live site content that doesn't exist on the stage site, if required. - if($this->owner->hasExtension('Versioned')) { + if($this->owner->hasExtension('SilverStripe\ORM\Versioning\Versioned')) { // Next, go through the live children. Only some of these will be listed $liveChildren = $this->owner->liveChildren(true, true); if($liveChildren) { @@ -626,7 +640,7 @@ class Hierarchy extends DataExtension { * @throws Exception */ public function AllHistoricalChildren() { - if(!$this->owner->hasExtension('Versioned')) { + if(!$this->owner->hasExtension('SilverStripe\ORM\Versioning\Versioned')) { throw new Exception('Hierarchy->AllHistoricalChildren() only works with Versioned extension applied'); } @@ -646,7 +660,7 @@ class Hierarchy extends DataExtension { * @throws Exception */ public function numHistoricalChildren() { - if(!$this->owner->hasExtension('Versioned')) { + if(!$this->owner->hasExtension('SilverStripe\ORM\Versioning\Versioned')) { throw new Exception('Hierarchy->AllHistoricalChildren() only works with Versioned extension applied'); } @@ -721,7 +735,7 @@ class Hierarchy extends DataExtension { * @throws Exception */ public function liveChildren($showAll = false, $onlyDeletedFromStage = false) { - if(!$this->owner->hasExtension('Versioned')) { + if(!$this->owner->hasExtension('SilverStripe\ORM\Versioning\Versioned')) { throw new Exception('Hierarchy->liveChildren() only works with Versioned extension applied'); } diff --git a/model/Limitable.php b/ORM/Limitable.php similarity index 93% rename from model/Limitable.php rename to ORM/Limitable.php index 30d4f3ca9..e730ccac4 100644 --- a/model/Limitable.php +++ b/ORM/Limitable.php @@ -1,5 +1,7 @@ 'Varchar', 'State' => "Enum('open,published,reverted','open')", ); private static $has_many = array( - 'Changes' => 'ChangeSetItem', + 'Changes' => 'SilverStripe\ORM\Versioning\ChangeSetItem', ); private static $defaults = array( diff --git a/model/versioning/ChangeSetItem.php b/ORM/Versioning/ChangeSetItem.php similarity index 96% rename from model/versioning/ChangeSetItem.php rename to ORM/Versioning/ChangeSetItem.php index b3a47aecd..620247690 100644 --- a/model/versioning/ChangeSetItem.php +++ b/ORM/Versioning/ChangeSetItem.php @@ -1,9 +1,15 @@ 'ChangeSet', - 'Object' => 'DataObject', + 'ChangeSet' => 'SilverStripe\ORM\Versioning\ChangeSet', + 'Object' => 'SilverStripe\ORM\DataObject', ); private static $many_many = array( - 'ReferencedBy' => 'ChangeSetItem' + 'ReferencedBy' => 'SilverStripe\ORM\Versioning\ChangeSetItem' ); private static $belongs_many_many = array( diff --git a/model/DataDifferencer.php b/ORM/Versioning/DataDifferencer.php similarity index 96% rename from model/DataDifferencer.php rename to ORM/Versioning/DataDifferencer.php index c62f09bb1..43f42f0f8 100644 --- a/model/DataDifferencer.php +++ b/ORM/Versioning/DataDifferencer.php @@ -1,6 +1,15 @@ * * @package framework - * @subpackage misc + * @subpackage orm */ class DataDifferencer extends ViewableData { protected $fromRecord; diff --git a/model/versioning/VersionableExtension.php b/ORM/Versioning/VersionableExtension.php similarity index 94% rename from model/versioning/VersionableExtension.php rename to ORM/Versioning/VersionableExtension.php index 5705623f9..f6794ff42 100644 --- a/model/versioning/VersionableExtension.php +++ b/ORM/Versioning/VersionableExtension.php @@ -1,5 +1,7 @@ _versions columns - foreach(Config::inst()->get('Versioned', 'db_for_versions_table') as $name => $type) { + foreach(Config::inst()->get('SilverStripe\ORM\Versioning\Versioned', 'db_for_versions_table') as $name => $type) { $query->selectField(sprintf('"%s_versions"."%s"', $baseTable, $name), $name); } @@ -618,11 +642,11 @@ class Versioned extends DataExtension implements TemplateGlobalProvider { if($isRootClass) { // Create table for all versions $versionFields = array_merge( - Config::inst()->get('Versioned', 'db_for_versions_table'), + Config::inst()->get('SilverStripe\ORM\Versioning\Versioned', 'db_for_versions_table'), (array)$fields ); $versionIndexes = array_merge( - Config::inst()->get('Versioned', 'indexes_for_versions_table'), + Config::inst()->get('SilverStripe\ORM\Versioning\Versioned', 'indexes_for_versions_table'), (array)$nonUniqueIndexes ); } else { @@ -871,7 +895,7 @@ class Versioned extends DataExtension implements TemplateGlobalProvider { // If we're editing Live, then use (table)_Live instead of (table) if($this->hasStages() && static::get_stage() === static::LIVE) { - $this->augmentWriteStaged($manipulation, $class, $id); + $this->augmentWriteStaged($manipulation, $table, $id); } } @@ -1000,9 +1024,9 @@ class Versioned extends DataExtension implements TemplateGlobalProvider { protected function lookupReverseOwners() { // Find all classes with 'owns' config $lookup = array(); - foreach(ClassInfo::subclassesFor('DataObject') as $class) { + foreach(ClassInfo::subclassesFor('SilverStripe\ORM\DataObject') as $class) { // Ensure this class is versioned - if(!Object::has_extension($class, 'Versioned')) { + if(!Object::has_extension($class, 'SilverStripe\ORM\Versioning\Versioned')) { continue; } @@ -1021,7 +1045,7 @@ class Versioned extends DataExtension implements TemplateGlobalProvider { if(!$ownedClass) { continue; } - if($ownedClass === 'DataObject') { + if($ownedClass === 'SilverStripe\ORM\DataObject') { throw new LogicException(sprintf( "Relation %s on class %s cannot be owned as it is polymorphic", $owned, $class @@ -1115,7 +1139,7 @@ class Versioned extends DataExtension implements TemplateGlobalProvider { $itemKey = $item->class . '/' . $item->ID; // Skip unsaved, unversioned, or already checked objects - if(!$item->isInDB() || !$item->has_extension('Versioned') || isset($list[$itemKey])) { + if(!$item->isInDB() || !$item->has_extension('SilverStripe\ORM\Versioning\Versioned') || isset($list[$itemKey])) { continue; } @@ -1372,7 +1396,7 @@ class Versioned extends DataExtension implements TemplateGlobalProvider { */ public function canBeVersioned($class) { return ClassInfo::exists($class) - && is_subclass_of($class, 'DataObject') + && is_subclass_of($class, 'SilverStripe\ORM\DataObject') && DataObject::has_own_table($class); } @@ -1820,7 +1844,7 @@ class Versioned extends DataExtension implements TemplateGlobalProvider { } // Add all _versions columns - foreach(Config::inst()->get('Versioned', 'db_for_versions_table') as $name => $type) { + foreach(Config::inst()->get('SilverStripe\ORM\Versioning\Versioned', 'db_for_versions_table') as $name => $type) { $query->selectField(sprintf('"%s_versions"."%s"', $baseTable, $name), $name); } @@ -2105,7 +2129,7 @@ class Versioned extends DataExtension implements TemplateGlobalProvider { * @param array $idList */ public static function prepopulate_versionnumber_cache($class, $stage, $idList = null) { - if (!Config::inst()->get('Versioned', 'prepopulate_versionnumber_cache')) { + if (!Config::inst()->get('SilverStripe\ORM\Versioning\Versioned', 'prepopulate_versionnumber_cache')) { return; } $filter = ""; @@ -2149,7 +2173,7 @@ class Versioned extends DataExtension implements TemplateGlobalProvider { * @return DataList A modified DataList designated to the specified stage */ public static function get_by_stage( - $class, $stage, $filter = '', $sort = '', $join = '', $limit = null, $containerClass = 'DataList' + $class, $stage, $filter = '', $sort = '', $join = '', $limit = null, $containerClass = 'SilverStripe\ORM\DataList' ) { $result = DataObject::get($class, $filter, $sort, $join, $limit, $containerClass); return $result->setDataQueryParam(array( @@ -2437,7 +2461,7 @@ class Versioned extends DataExtension implements TemplateGlobalProvider { * Represents a single version of a record. * * @package framework - * @subpackage model + * @subpackage orm * * @see Versioned */ diff --git a/model/versioning/VersionedGridFieldDetailForm.php b/ORM/Versioning/VersionedGridFieldDetailForm.php similarity index 54% rename from model/versioning/VersionedGridFieldDetailForm.php rename to ORM/Versioning/VersionedGridFieldDetailForm.php index fd746eb8e..502d65801 100644 --- a/model/versioning/VersionedGridFieldDetailForm.php +++ b/ORM/Versioning/VersionedGridFieldDetailForm.php @@ -1,13 +1,17 @@ has_extension('Versioned')) { - $class = 'VersionedGridFieldItemRequest'; + if($record && $record->has_extension('SilverStripe\ORM\Versioning\Versioned')) { + $class = 'SilverStripe\ORM\Versioning\VersionedGridFieldItemRequest'; } } } diff --git a/model/versioning/VersionedGridFieldItemRequest.php b/ORM/Versioning/VersionedGridFieldItemRequest.php similarity index 95% rename from model/versioning/VersionedGridFieldItemRequest.php rename to ORM/Versioning/VersionedGridFieldItemRequest.php index 955e4b0ae..b1fea8f92 100644 --- a/model/versioning/VersionedGridFieldItemRequest.php +++ b/ORM/Versioning/VersionedGridFieldItemRequest.php @@ -1,5 +1,12 @@ getRecord(); - if(!$record || !$record->has_extension('Versioned')) { + if(!$record || !$record->has_extension('SilverStripe\ORM\Versioning\Versioned')) { return $actions; } diff --git a/_config/config.yml b/_config/config.yml index 77ff116b9..2a2d4b6c2 100644 --- a/_config/config.yml +++ b/_config/config.yml @@ -7,7 +7,7 @@ Injector: Upload: # Replace an existing file rather than renaming the new one. replaceFile: false -MySQLDatabase: +SilverStripe\ORM\Connect\MySQLDatabase: # You are advised to backup your tables if changing settings on an existing database # `connection_charset` and `charset` should be equal, similarly so should `connection_collation` and `collation` connection_charset: utf8 diff --git a/_config/database.yml b/_config/database.yml index 86cc2e927..ba780ca19 100644 --- a/_config/database.yml +++ b/_config/database.yml @@ -3,20 +3,24 @@ name: databaseconnectors --- Injector: MySQLPDODatabase: - class: 'MySQLDatabase' + class: 'SilverStripe\ORM\Connect\MySQLDatabase' properties: connector: %$PDOConnector schemaManager: %$MySQLSchemaManager queryBuilder: %$MySQLQueryBuilder MySQLDatabase: - class: 'MySQLDatabase' + class: 'SilverStripe\ORM\Connect\MySQLDatabase' properties: connector: %$MySQLiConnector schemaManager: %$MySQLSchemaManager queryBuilder: %$MySQLQueryBuilder MySQLiConnector: - class: 'MySQLiConnector' + class: 'SilverStripe\ORM\Connect\MySQLiConnector' type: prototype PDOConnector: - class: 'PDOConnector' + class: 'SilverStripe\ORM\Connect\PDOConnector' type: prototype + MySQLSchemaManager: + class: 'SilverStripe\ORM\Connect\MySQLSchemaManager' + MySQLQueryBuilder: + class: 'SilverStripe\ORM\Connect\MySQLQueryBuilder' diff --git a/_config/model.yml b/_config/model.yml index 2ea94265c..65d31457b 100644 --- a/_config/model.yml +++ b/_config/model.yml @@ -1,53 +1,53 @@ Injector: Boolean: - class: SilverStripe\Model\FieldType\DBBoolean + class: SilverStripe\ORM\FieldType\DBBoolean Currency: - class: SilverStripe\Model\FieldType\DBCurrency + class: SilverStripe\ORM\FieldType\DBCurrency DBClassName: - class: SilverStripe\Model\FieldType\DBClassName + class: SilverStripe\ORM\FieldType\DBClassName Date: - class: SilverStripe\Model\FieldType\DBDate + class: SilverStripe\ORM\FieldType\DBDate Datetime: - class: SilverStripe\Model\FieldType\DBDatetime - SS_Datetime: - class: SilverStripe\Model\FieldType\DBDatetime + class: SilverStripe\ORM\FieldType\DBDatetime + DBDatetime: + class: SilverStripe\ORM\FieldType\DBDatetime Decimal: - class: SilverStripe\Model\FieldType\DBDecimal + class: SilverStripe\ORM\FieldType\DBDecimal Double: - class: SilverStripe\Model\FieldType\DBDouble + class: SilverStripe\ORM\FieldType\DBDouble Enum: - class: SilverStripe\Model\FieldType\DBEnum + class: SilverStripe\ORM\FieldType\DBEnum DBFile: class: SilverStripe\Filesystem\Storage\DBFile Float: - class: SilverStripe\Model\FieldType\DBFloat + class: SilverStripe\ORM\FieldType\DBFloat ForeignKey: - class: SilverStripe\Model\FieldType\DBForeignKey + class: SilverStripe\ORM\FieldType\DBForeignKey HTMLText: - class: SilverStripe\Model\FieldType\DBHTMLText + class: SilverStripe\ORM\FieldType\DBHTMLText HTMLVarchar: - class: SilverStripe\Model\FieldType\DBHTMLVarchar + class: SilverStripe\ORM\FieldType\DBHTMLVarchar Int: - class: SilverStripe\Model\FieldType\DBInt + class: SilverStripe\ORM\FieldType\DBInt Locale: - class: SilverStripe\Model\FieldType\DBLocale + class: SilverStripe\ORM\FieldType\DBLocale DBLocale: - class: SilverStripe\Model\FieldType\DBLocale + class: SilverStripe\ORM\FieldType\DBLocale Money: - class: SilverStripe\Model\FieldType\DBMoney + class: SilverStripe\ORM\FieldType\DBMoney MultiEnum: - class: SilverStripe\Model\FieldType\DBMultiEnum + class: SilverStripe\ORM\FieldType\DBMultiEnum Percentage: - class: SilverStripe\Model\FieldType\DBPercentage + class: SilverStripe\ORM\FieldType\DBPercentage PolymorphicForeignKey: - class: SilverStripe\Model\FieldType\DBPolymorphicForeignKey + class: SilverStripe\ORM\FieldType\DBPolymorphicForeignKey PrimaryKey: - class: SilverStripe\Model\FieldType\DBPrimaryKey + class: SilverStripe\ORM\FieldType\DBPrimaryKey Text: - class: SilverStripe\Model\FieldType\DBText + class: SilverStripe\ORM\FieldType\DBText Time: - class: SilverStripe\Model\FieldType\DBTime + class: SilverStripe\ORM\FieldType\DBTime Varchar: - class: SilverStripe\Model\FieldType\DBVarchar + class: SilverStripe\ORM\FieldType\DBVarchar Year: - class: SilverStripe\Model\FieldType\DBYear + class: SilverStripe\ORM\FieldType\DBYear diff --git a/_config/versioning.yml b/_config/versioning.yml index b028ed285..1b67aee80 100644 --- a/_config/versioning.yml +++ b/_config/versioning.yml @@ -3,4 +3,4 @@ Name: versioning --- GridFieldDetailForm: extensions: - - VersionedGridFieldDetailForm + - SilverStripe\ORM\Versioning\VersionedGridFieldDetailForm diff --git a/_register_database.php b/_register_database.php index 35dd4233c..bc9bdb826 100644 --- a/_register_database.php +++ b/_register_database.php @@ -6,7 +6,7 @@ $frameworkPath = defined('FRAMEWORK_PATH') ? FRAMEWORK_PATH : FRAMEWORK_NAME; // Use MySQLi as default DatabaseAdapterRegistry::register( array( - 'class' => 'MySQLDatabase', + 'class' => 'SilverStripe\\ORM\\Connect\\MySQLDatabase', 'title' => 'MySQL 5.0+ (using MySQLi)', 'helperPath' => $frameworkPath . '/dev/install/MySQLDatabaseConfigurationHelper.php', 'supported' => class_exists('MySQLi'), diff --git a/admin/code/AddToCampaignHandler.php b/admin/code/AddToCampaignHandler.php index f38773a4c..22c1bac47 100644 --- a/admin/code/AddToCampaignHandler.php +++ b/admin/code/AddToCampaignHandler.php @@ -1,7 +1,11 @@ editForm->httpError(400, _t( 'AddToCampaign.ErrorGeneral', 'We apologise, but there was an error' diff --git a/admin/code/AdminRootController.php b/admin/code/AdminRootController.php index dd46321e0..efcfcb3f7 100644 --- a/admin/code/AdminRootController.php +++ b/admin/code/AdminRootController.php @@ -1,5 +1,7 @@ byIDs($onlyOnLive); foreach($livePages as $obj) { diff --git a/admin/code/CMSBatchActionHandler.php b/admin/code/CMSBatchActionHandler.php index d69a1f086..347b87fe4 100644 --- a/admin/code/CMSBatchActionHandler.php +++ b/admin/code/CMSBatchActionHandler.php @@ -1,5 +1,10 @@ 'readCampaigns', diff --git a/admin/code/LeftAndMain.php b/admin/code/LeftAndMain.php index 0fa901f3f..a46a358fb 100644 --- a/admin/code/LeftAndMain.php +++ b/admin/code/LeftAndMain.php @@ -6,7 +6,16 @@ */ use SilverStripe\Forms\Schema\FormSchema; -use SilverStripe\Model\FieldType\DBField; + +use SilverStripe\ORM\Versioning\Versioned; +use SilverStripe\ORM\DataModel; +use SilverStripe\ORM\ValidationException; +use SilverStripe\ORM\ArrayList; +use SilverStripe\ORM\FieldType\DBField; +use SilverStripe\ORM\DataObject; +use SilverStripe\ORM\DB; +use SilverStripe\ORM\Queries\SQLSelect; + /** * LeftAndMain is the parent class of all the two-pane views in the CMS. @@ -900,7 +909,7 @@ class LeftAndMain extends Controller implements PermissionProvider { )); $record = $this->currentPage(); if($record && $record->exists()) { - if($record->hasExtension('Hierarchy')) { + if($record->hasExtension('SilverStripe\\ORM\\Hierarchy\\Hierarchy')) { $ancestors = $record->getAncestors(); $ancestors = new ArrayList(array_reverse($ancestors->toArray())); $ancestors->push($record); @@ -1022,7 +1031,7 @@ class LeftAndMain extends Controller implements PermissionProvider { // Limit the amount of nodes shown for performance reasons. // Skip the check if we're filtering the tree, since its not clear how many children will // match the filter criteria until they're queried (and matched up with previously marked nodes). - $nodeThresholdLeaf = Config::inst()->get('Hierarchy', 'node_threshold_leaf'); + $nodeThresholdLeaf = Config::inst()->get('SilverStripe\\ORM\\Hierarchy\\Hierarchy', 'node_threshold_leaf'); if($nodeThresholdLeaf && !$filterFunction) { $nodeCountCallback = function($parent, $numChildren) use(&$controller, $className, $nodeThresholdLeaf) { if($className == 'SiteTree' && $parent->ID && $numChildren > $nodeThresholdLeaf) { @@ -1417,7 +1426,7 @@ class LeftAndMain extends Controller implements PermissionProvider { $tree_class = $this->stat('tree_class'); if( - $tree_class::has_extension('Hierarchy') + $tree_class::has_extension('SilverStripe\\ORM\\Hierarchy\\Hierarchy') && !$fields->dataFieldByName('ParentID') ) { $fields->push(new HiddenField('ParentID')); diff --git a/admin/code/ModelAdmin.php b/admin/code/ModelAdmin.php index dfc854a5a..f45873c2d 100644 --- a/admin/code/ModelAdmin.php +++ b/admin/code/ModelAdmin.php @@ -1,4 +1,6 @@ defined('SS_DATABASE_CLASS') ? SS_DATABASE_CLASS : "MySQLDatabase", + "type" => defined('SS_DATABASE_CLASS') ? SS_DATABASE_CLASS : 'MySQLDatabase', "server" => defined('SS_DATABASE_SERVER') ? SS_DATABASE_SERVER : 'localhost', "username" => SS_DATABASE_USERNAME, "password" => SS_DATABASE_PASSWORD, diff --git a/control/Controller.php b/control/Controller.php index 54a3e20d1..f26db60cf 100644 --- a/control/Controller.php +++ b/control/Controller.php @@ -1,5 +1,7 @@ unregisterNamedObject($class); // load statics now for DataObject classes - if(is_subclass_of($class, 'DataObject')) { - if(!is_subclass_of($extensionClass, 'DataExtension')) { + if(is_subclass_of($class, 'SilverStripe\\ORM\\DataObject')) { + if(!is_subclass_of($extensionClass, 'SilverStripe\\ORM\\DataExtension')) { user_error("$extensionClass cannot be applied to $class without being a DataExtension", E_USER_ERROR); } } @@ -315,6 +316,10 @@ trait Extensible { list($extensionClass, $extensionArgs) = \Object::parse_class_spec($extension); $sources[] = $extensionClass; + if (!class_exists($extensionClass)) { + throw new InvalidArgumentException("$class references nonexistent $extensionClass in \$extensions"); + } + call_user_func(array($extensionClass, 'add_to_class'), $class, $extensionClass, $extensionArgs); foreach(array_reverse(ClassInfo::ancestry($extensionClass)) as $extensionClassParent) { diff --git a/core/PaginatedList.php b/core/PaginatedList.php index a31c3de76..461afc66a 100644 --- a/core/PaginatedList.php +++ b/core/PaginatedList.php @@ -1,4 +1,9 @@ update('DataObject', 'validation_enabled', false); + Config::inst()->update('SilverStripe\\ORM\\DataObject', 'validation_enabled', false); Config::inst()->update('File', 'update_filesystem', false); $this->invokeCallbacks('beforeCreate', array($identifier, &$data, &$fixtures)); @@ -184,7 +188,7 @@ class FixtureBlueprint { if($className = $obj->hasOneComponent($hasOneField)) { $obj->{$hasOneField.'ID'} = $this->parseValue($fieldVal, $fixtures, $fieldClass); // Inject class for polymorphic relation - if($className === 'DataObject') { + if($className === 'SilverStripe\\ORM\\DataObject') { $obj->{$hasOneField.'Class'} = $fieldClass; } } diff --git a/dev/FixtureFactory.php b/dev/FixtureFactory.php index 62db48082..f4e837248 100644 --- a/dev/FixtureFactory.php +++ b/dev/FixtureFactory.php @@ -1,4 +1,9 @@ originalReadingMode = \Versioned::get_reading_mode(); + $this->originalReadingMode = Versioned::get_reading_mode(); // We cannot run the tests on this abstract class. if(get_class($this) == "SapphireTest") { @@ -232,7 +240,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { self::create_temp_db(); } - singleton('DataObject')->flushCache(); + singleton('SilverStripe\\ORM\\DataObject')->flushCache(); self::empty_temp_db(); @@ -523,7 +531,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { $controller->response->removeHeader('Location'); } - \Versioned::set_reading_mode($this->originalReadingMode); + Versioned::set_reading_mode($this->originalReadingMode); //unnest injector / config now that tests are over Injector::unnest(); @@ -866,7 +874,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { if($dbName && DB::get_conn()->databaseExists($dbName)) { // Some DataExtensions keep a static cache of information that needs to // be reset whenever the database is killed - foreach(ClassInfo::subclassesFor('DataExtension') as $class) { + foreach(ClassInfo::subclassesFor('SilverStripe\\ORM\\DataExtension') as $class) { $toCall = array($class, 'on_db_reset'); if(is_callable($toCall)) call_user_func($toCall); } @@ -886,7 +894,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { // Some DataExtensions keep a static cache of information that needs to // be reset whenever the database is cleaned out - $classes = array_merge(ClassInfo::subclassesFor('DataExtension'), ClassInfo::subclassesFor('DataObject')); + $classes = array_merge(ClassInfo::subclassesFor('SilverStripe\\ORM\\DataExtension'), ClassInfo::subclassesFor('SilverStripe\\ORM\\DataObject')); foreach($classes as $class) { $toCall = array($class, 'on_db_reset'); if(is_callable($toCall)) call_user_func($toCall); @@ -946,7 +954,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { // clear singletons, they're caching old extension info which is used in DatabaseAdmin->doBuild() Injector::inst()->unregisterAllObjects(); - $dataClasses = ClassInfo::subclassesFor('DataObject'); + $dataClasses = ClassInfo::subclassesFor('SilverStripe\\ORM\\DataObject'); array_shift($dataClasses); DB::quiet(); @@ -971,7 +979,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase { }); ClassInfo::reset_db_cache(); - singleton('DataObject')->flushCache(); + singleton('SilverStripe\\ORM\\DataObject')->flushCache(); } } diff --git a/dev/install/MySQLDatabaseConfigurationHelper.php b/dev/install/MySQLDatabaseConfigurationHelper.php index 91bc19141..a9476188f 100644 --- a/dev/install/MySQLDatabaseConfigurationHelper.php +++ b/dev/install/MySQLDatabaseConfigurationHelper.php @@ -22,7 +22,7 @@ class MySQLDatabaseConfigurationHelper implements DatabaseConfigurationHelper { $error = null; try { switch($databaseConfig['type']) { - case 'MySQLDatabase': + case 'SilverStripe\\ORM\\Connect\\MySQLDatabase': $conn = @new MySQLi($databaseConfig['server'], $databaseConfig['username'], $databaseConfig['password']); if($conn && empty($conn->connect_errno)) { diff --git a/filesystem/AssetControlExtension.php b/filesystem/AssetControlExtension.php index 85c1884e2..da04033a4 100644 --- a/filesystem/AssetControlExtension.php +++ b/filesystem/AssetControlExtension.php @@ -2,12 +2,16 @@ namespace SilverStripe\Filesystem; -use DataObject; + use Injector; use Member; -use Versioned; + use SilverStripe\Filesystem\Storage\AssetStore; use SilverStripe\Filesystem\Storage\DBFile; +use SilverStripe\ORM\DataObject; +use SilverStripe\ORM\Versioning\Versioned; +use SilverStripe\ORM\DataExtension; + /** * This class provides the necessary business logic to ensure that any assets attached @@ -24,7 +28,7 @@ use SilverStripe\Filesystem\Storage\DBFile; * * @property DataObject|Versioned $owner A {@see DataObject}, potentially decorated with {@see Versioned} extension. */ -class AssetControlExtension extends \DataExtension +class AssetControlExtension extends DataExtension { /** @@ -235,7 +239,7 @@ class AssetControlExtension extends \DataExtension */ protected function isVersioned() { - return $this->owner->has_extension('Versioned') && class_exists('Versioned'); + return $this->owner->has_extension('SilverStripe\\ORM\\Versioning\\Versioned') && class_exists('SilverStripe\\ORM\\Versioning\\Versioned'); } /** diff --git a/filesystem/File.php b/filesystem/File.php index 81da3444f..e6ca37fca 100644 --- a/filesystem/File.php +++ b/filesystem/File.php @@ -4,6 +4,12 @@ use SilverStripe\Filesystem\Storage\DBFile; use SilverStripe\Filesystem\Thumbnail; use SilverStripe\Filesystem\ImageManipulation; use SilverStripe\Filesystem\Storage\AssetContainer; +use SilverStripe\ORM\Hierarchy\Hierarchy; +use SilverStripe\ORM\Versioning\Versioned; +use SilverStripe\ORM\ValidationResult; +use SilverStripe\ORM\DB; +use SilverStripe\ORM\DataObject; + /** * This class handles the representation of a file on the filesystem within the framework. @@ -102,8 +108,8 @@ class File extends DataObject implements ShortcodeHandler, AssetContainer, Thumb ); private static $extensions = array( - "Hierarchy", - "Versioned" + "SilverStripe\\ORM\\Hierarchy\\Hierarchy", + "SilverStripe\\ORM\\Versioning\\Versioned" ); private static $casting = array ( diff --git a/filesystem/FileMigrationHelper.php b/filesystem/FileMigrationHelper.php index 38004d8f9..fb8a98335 100644 --- a/filesystem/FileMigrationHelper.php +++ b/filesystem/FileMigrationHelper.php @@ -1,6 +1,9 @@ allowed_extensions as $extension) { if($extension) { $allowedExtensions->push(new \ArrayData(array( diff --git a/filesystem/storage/DBFile.php b/filesystem/storage/DBFile.php index d50031b87..eb7b4fbb7 100644 --- a/filesystem/storage/DBFile.php +++ b/filesystem/storage/DBFile.php @@ -4,15 +4,19 @@ namespace SilverStripe\Filesystem\Storage; use SilverStripe\Filesystem\Thumbnail; use SilverStripe\Filesystem\ImageManipulation; -use SilverStripe\Model\FieldType\DBComposite; + use Injector; use AssetField; use File; use Director; use Permission; -use ValidationResult; -use ValidationException; + + +use SilverStripe\ORM\ValidationResult; +use SilverStripe\ORM\ValidationException; +use SilverStripe\ORM\FieldType\DBComposite; + /** * Represents a file reference stored in a database diff --git a/forms/AssetField.php b/forms/AssetField.php index 1c5e06556..5eed729dc 100644 --- a/forms/AssetField.php +++ b/forms/AssetField.php @@ -3,6 +3,10 @@ use SilverStripe\Filesystem\Storage\AssetContainer; use SilverStripe\Filesystem\Storage\AssetStore; use SilverStripe\Filesystem\Storage\DBFile; +use SilverStripe\ORM\DataObject; +use SilverStripe\ORM\ValidationException; +use SilverStripe\ORM\DataObjectInterface; + /** * Field for uploading into a DBFile instance. diff --git a/forms/CheckboxSetField.php b/forms/CheckboxSetField.php index f600a76f7..3ff403041 100644 --- a/forms/CheckboxSetField.php +++ b/forms/CheckboxSetField.php @@ -1,4 +1,6 @@ value = Config::inst()->get('SilverStripe\Model\FieldType\DBCurrency','currency_symbol') . number_format((double)preg_replace('/[^0-9.\-]/', '', $val), 2); + $this->value = Config::inst()->get('SilverStripe\\ORM\\FieldType\\DBCurrency','currency_symbol') . number_format((double)preg_replace('/[^0-9.\-]/', '', $val), 2); return $this; } /** @@ -44,7 +44,7 @@ class CurrencyField extends TextField { } public function validate($validator) { - $currencySymbol = preg_quote(Config::inst()->get('SilverStripe\Model\FieldType\DBCurrency', 'currency_symbol')); + $currencySymbol = preg_quote(Config::inst()->get('SilverStripe\\ORM\\FieldType\\DBCurrency', 'currency_symbol')); $regex = '/^\s*(\-?'.$currencySymbol.'?|'.$currencySymbol.'\-?)?(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?\s*$/'; if(!empty ($this->value) && !preg_match($regex, $this->value)) { diff --git a/forms/DateField.php b/forms/DateField.php index c5281bee4..a4a45a047 100644 --- a/forms/DateField.php +++ b/forms/DateField.php @@ -1,6 +1,8 @@ tag. * diff --git a/forms/FieldList.php b/forms/FieldList.php index cac3d88bb..edb722fcd 100644 --- a/forms/FieldList.php +++ b/forms/FieldList.php @@ -1,4 +1,6 @@ obj->hasOne()) { foreach($this->obj->hasOne() as $relationship => $component) { if($this->restrictFields && !in_array($relationship, $this->restrictFields)) continue; - $fieldName = $component === 'DataObject' + $fieldName = $component === 'SilverStripe\\ORM\\DataObject' ? $relationship // Polymorphic has_one field is composite, so don't refer to ID subfield : "{$relationship}ID"; if($this->fieldClasses && isset($this->fieldClasses[$fieldName])) { diff --git a/forms/GroupedDropdownField.php b/forms/GroupedDropdownField.php index 0e3e8d5db..31d13f4e1 100644 --- a/forms/GroupedDropdownField.php +++ b/forms/GroupedDropdownField.php @@ -1,4 +1,6 @@ tags. * diff --git a/forms/InlineFormAction.php b/forms/InlineFormAction.php index 59e1c3780..19b49109e 100644 --- a/forms/InlineFormAction.php +++ b/forms/InlineFormAction.php @@ -1,6 +1,8 @@ tag. * diff --git a/forms/LookupField.php b/forms/LookupField.php index 9ef01ae2d..d6d15c94d 100644 --- a/forms/LookupField.php +++ b/forms/LookupField.php @@ -1,5 +1,7 @@ get('Hierarchy', 'node_threshold_leaf'); + $nodeThresholdLeaf = Config::inst()->get('SilverStripe\\ORM\\Hierarchy\\Hierarchy', 'node_threshold_leaf'); if($nodeThresholdLeaf && !$this->filterCallback && !$this->search) { $className = $this->sourceObject; $nodeCountCallback = function($parent, $numChildren) use($className, $nodeThresholdLeaf) { diff --git a/forms/TreeMultiselectField.php b/forms/TreeMultiselectField.php index 5bff0bfa1..847031a90 100644 --- a/forms/TreeMultiselectField.php +++ b/forms/TreeMultiselectField.php @@ -1,4 +1,8 @@ singleton('File')->fieldLabel('Size') )); $colsComponent->setFieldCasting(array( - 'Created' => 'SS_Datetime->Nice' + 'Created' => 'DBDatetime->Nice' )); // Set configurable pagination for file list field diff --git a/forms/gridfield/GridField.php b/forms/gridfield/GridField.php index c46ce5d0b..384f1f556 100644 --- a/forms/gridfield/GridField.php +++ b/forms/gridfield/GridField.php @@ -1,6 +1,11 @@ singleton('File')->fieldLabel('Created'), )); $columns->setFieldCasting(array( - 'Created' => 'SS_Datetime->Nice' + 'Created' => 'DBDatetime->Nice' )); $fromCMS = new CompositeField( diff --git a/i18n/i18nTextCollector.php b/i18n/i18nTextCollector.php index 10f9bb69d..e1f8b85c5 100644 --- a/i18n/i18nTextCollector.php +++ b/i18n/i18nTextCollector.php @@ -239,6 +239,12 @@ class i18nTextCollector extends Object { return array_unique($allConflicts); } + /** + * Map of translation keys => module names + * @var array + */ + protected $classModuleCache = []; + /** * Determine the best module to be given ownership over this key * @@ -249,8 +255,12 @@ class i18nTextCollector extends Object { protected function getBestModuleForKey($entitiesByModule, $key) { // Check classes $class = current(explode('.', $key)); - $owner = i18n::get_owner_module($class); + if(array_key_exists($class, $this->classModuleCache)) { + return $this->classModuleCache[$class]; + } + $owner = $this->findModuleForClass($class); if($owner) { + $this->classModuleCache[$class] = $owner; return $owner; } @@ -259,18 +269,56 @@ class i18nTextCollector extends Object { // Display notice if not found Debug::message( - "Duplicate key {$key} detected in multiple modules with no obvious owner", + "Duplicate key {$key} detected in no / multiple modules with no obvious owner", false ); // Fall back to framework then cms modules foreach(array('framework', 'cms') as $module) { if(isset($entitiesByModule[$module][$key])) { + $this->classModuleCache[$class] = $module; return $module; } } // Do nothing + $this->classModuleCache[$class] = null; + return null; + } + + /** + * Given a partial class name, attempt to determine the best module to assign strings to. + * + * @param string $class Either a FQN class name, or a non-qualified class name. + * @return string Name of module + */ + protected function findModuleForClass($class) { + if(ClassInfo::exists($class)) { + return i18n::get_owner_module($class); + } + + + // If we can't find a class, see if it needs to be fully qualified + if(strpos($class, '\\') !== false) { + return null; + } + + // Find FQN that ends with $class + $classes = preg_grep( + '/'.preg_quote("\\{$class}", '\/').'$/i', + SS_ClassLoader::instance()->getManifest()->getClassNames() + ); + + // Find all modules for candidate classes + $modules = array_unique(array_map(function($class) { + return i18n::get_owner_module($class); + }, $classes)); + + if(count($modules) === 1) { + return reset($modules); + } + + // Couldn't find it! Exists in none, or multiple modules. return null; } diff --git a/main.php b/main.php index 154ec2309..0edf819e2 100644 --- a/main.php +++ b/main.php @@ -1,5 +1,8 @@ model, 'DataObject')) { + if (!is_subclass_of($this->model, 'SilverStripe\\ORM\\DataObject')) { throw new InvalidArgumentException( "Model supplied to " . get_class($this) . " should be an instance of DataObject." ); diff --git a/search/filters/WithinRangeFilter.php b/search/filters/WithinRangeFilter.php index 416dab336..ca1df64c8 100644 --- a/search/filters/WithinRangeFilter.php +++ b/search/filters/WithinRangeFilter.php @@ -1,4 +1,6 @@ getExtensionInstance('Hierarchy'); + $extInstance = $this->getExtensionInstance('SilverStripe\\ORM\\Hierarchy\\Hierarchy'); $extInstance->setOwner($this); $children = $extInstance->AllChildrenIncludingDeleted(); $extInstance->clearOwner(); diff --git a/security/GroupCsvBulkLoader.php b/security/GroupCsvBulkLoader.php index cecd0ffd7..3f23b4aae 100644 --- a/security/GroupCsvBulkLoader.php +++ b/security/GroupCsvBulkLoader.php @@ -1,4 +1,6 @@ Arg and Permission->Type values * diff --git a/security/LoginAttempt.php b/security/LoginAttempt.php index 4da1e2440..70e4cd830 100644 --- a/security/LoginAttempt.php +++ b/security/LoginAttempt.php @@ -1,4 +1,6 @@ 'Varchar', 'Email' => 'Varchar(254)', // See RFC 5321, Section 4.5.3.1.3. (256 minus the < and > character) 'TempIDHash' => 'Varchar(160)', // Temporary id used for cms re-authentication - 'TempIDExpired' => 'SS_Datetime', // Expiry of temp login + 'TempIDExpired' => 'Datetime', // Expiry of temp login 'Password' => 'Varchar(160)', 'AutoLoginHash' => 'Varchar(160)', // Used to auto-login the user on password reset - 'AutoLoginExpired' => 'SS_Datetime', + 'AutoLoginExpired' => 'Datetime', // This is an arbitrary code pointing to a PasswordEncryptor instance, // not an actual encryption algorithm. // Warning: Never change this field after its the first password hashing without @@ -43,7 +53,7 @@ class Member extends DataObject implements TemplateGlobalProvider { 'PasswordEncryption' => "Varchar(50)", 'Salt' => 'Varchar(50)', 'PasswordExpiry' => 'Date', - 'LockedOutUntil' => 'SS_Datetime', + 'LockedOutUntil' => 'Datetime', 'Locale' => 'Varchar(6)', // handled in registerFailedLogin(), only used if $lock_out_after_incorrect_logins is set 'FailedLoginCount' => 'Int', @@ -364,7 +374,7 @@ class Member extends DataObject implements TemplateGlobalProvider { * Returns true if this user is locked out */ public function isLockedOut() { - return $this->LockedOutUntil && SS_Datetime::now()->Format('U') < strtotime($this->LockedOutUntil); + return $this->LockedOutUntil && DBDatetime::now()->Format('U') < strtotime($this->LockedOutUntil); } /** @@ -553,11 +563,11 @@ class Member extends DataObject implements TemplateGlobalProvider { if(strpos(Cookie::get('alc_enc'), ':') && Cookie::get('alc_device') && !Session::get("loggedInAs")) { list($uid, $token) = explode(':', Cookie::get('alc_enc'), 2); - + if (!$uid || !$token) { return; } - + $deviceID = Cookie::get('alc_device'); $member = Member::get()->byId($uid); @@ -578,7 +588,7 @@ class Member extends DataObject implements TemplateGlobalProvider { } else { // Check for expired token $expiryDate = new DateTime($rememberLoginHash->ExpiryDate); - $now = SS_Datetime::now(); + $now = DBDatetime::now(); $now = new DateTime($now->Rfc2822()); if ($now > $expiryDate) { $member = null; @@ -1325,7 +1335,7 @@ class Member extends DataObject implements TemplateGlobalProvider { $groupIDList = array(); - if(is_a($groups, 'SS_List')) { + if(is_a($groups, 'SilverStripe\\ORM\\SS_List')) { foreach($groups as $group) { $groupIDList[] = $group->ID; } @@ -1654,7 +1664,7 @@ class Member extends DataObject implements TemplateGlobalProvider { if($this->FailedLoginCount >= self::config()->lock_out_after_incorrect_logins) { $lockoutMins = self::config()->lock_out_delay_mins; - $this->LockedOutUntil = date('Y-m-d H:i:s', SS_Datetime::now()->Format('U') + $lockoutMins*60); + $this->LockedOutUntil = date('Y-m-d H:i:s', DBDatetime::now()->Format('U') + $lockoutMins*60); $this->FailedLoginCount = 0; } } diff --git a/security/MemberAuthenticator.php b/security/MemberAuthenticator.php index 4a1635ab6..27bdbb61d 100644 --- a/security/MemberAuthenticator.php +++ b/security/MemberAuthenticator.php @@ -1,4 +1,6 @@ 'Varchar(40)', 'Hash' => 'Varchar(160)', - 'ExpiryDate' => 'SS_Datetime' + 'ExpiryDate' => 'Datetime' ); private static $has_one = array ( @@ -122,7 +125,7 @@ class RememberLoginHash extends DataObject { $rememberLoginHash->DeviceID = $deviceID; $rememberLoginHash->Hash = $rememberLoginHash->getNewHash($member); $rememberLoginHash->MemberID = $member->ID; - $now = SS_Datetime::now(); + $now = DBDatetime::now(); $expiryDate = new DateTime($now->Rfc2822()); $tokenExpiryDays = Config::inst()->get('RememberLoginHash', 'token_expiry_days'); $expiryDate->add(new DateInterval('P'.$tokenExpiryDays.'D')); diff --git a/security/Security.php b/security/Security.php index 23e5bbd75..108e92ecc 100644 --- a/security/Security.php +++ b/security/Security.php @@ -1,4 +1,8 @@ preCalls; if ($this->failPre) { @@ -574,7 +576,7 @@ class TestRequestFilter implements RequestFilter, TestOnly { } } - public function postRequest(\SS_HTTPRequest $request, \SS_HTTPResponse $response, \DataModel $model) { + public function postRequest(\SS_HTTPRequest $request, \SS_HTTPResponse $response, DataModel $model) { ++$this->postCalls; if ($this->failPost) { diff --git a/tests/core/ArrayDataTest.php b/tests/core/ArrayDataTest.php index 7af0a4079..655cd6e28 100644 --- a/tests/core/ArrayDataTest.php +++ b/tests/core/ArrayDataTest.php @@ -1,6 +1,8 @@ new DBVarchar("A"), "B" => new stdClass(), )); - $this->assertEquals('SilverStripe\Model\FieldType\DBVarchar', get_class($arrayData->A)); + $this->assertEquals('SilverStripe\\ORM\\FieldType\\DBVarchar', get_class($arrayData->A)); $this->assertEquals("ArrayData", get_class($arrayData->B)); } diff --git a/tests/core/ClassInfoTest.php b/tests/core/ClassInfoTest.php index 76d36f1bb..99d2aaa6c 100644 --- a/tests/core/ClassInfoTest.php +++ b/tests/core/ClassInfoTest.php @@ -1,5 +1,7 @@ assertEquals( - array('Versioned',array('Stage', 'Live')), - Object::parse_class_spec("Versioned('Stage','Live')") + array('SilverStripe\\ORM\\Versioning\\Versioned',array('Stage', 'Live')), + Object::parse_class_spec("SilverStripe\\ORM\\Versioning\\Versioned('Stage','Live')") ); // String with commas $this->assertEquals( - array('Versioned',array('Stage,Live', 'Stage')), - Object::parse_class_spec("Versioned('Stage,Live','Stage')") + array('SilverStripe\\ORM\\Versioning\\Versioned',array('Stage,Live', 'Stage')), + Object::parse_class_spec("SilverStripe\\ORM\\Versioning\\Versioned('Stage,Live','Stage')") ); // String with quotes $this->assertEquals( - array('Versioned',array('Stage\'Stage,Live\'Live', 'Live')), - Object::parse_class_spec("Versioned('Stage\'Stage,Live\'Live','Live')") + array('SilverStripe\\ORM\\Versioning\\Versioned',array('Stage\'Stage,Live\'Live', 'Live')), + Object::parse_class_spec("SilverStripe\\ORM\\Versioning\\Versioned('Stage\'Stage,Live\'Live','Live')") ); // True, false and null values diff --git a/tests/core/manifest/NamespacedClassManifestTest.php b/tests/core/manifest/NamespacedClassManifestTest.php index 68e662f08..96cd53f2a 100644 --- a/tests/core/manifest/NamespacedClassManifestTest.php +++ b/tests/core/manifest/NamespacedClassManifestTest.php @@ -37,7 +37,7 @@ class NamespacedClassManifestTest extends SapphireTest { 'PermissionProvider', ' ', 'AS', ' ', 'P', ), array('silverstripe', '\\', 'test', '\\', 'ClassA'), - array('\\', 'DataObject'), + array('\\', 'Object'), ); $this->assertEquals(count($expectedItems), count($parsedTokens)); @@ -61,7 +61,7 @@ class NamespacedClassManifestTest extends SapphireTest { 'Response' => 'SS_HTTPResponse', 'P' => 'PermissionProvider', 'silverstripe\test\ClassA', - '\DataObject', + '\Object', ); $imports = $method->invoke($this->manifest, $tokens); diff --git a/tests/core/manifest/fixtures/namespaced_classmanifest/module/classes/ClassI.php b/tests/core/manifest/fixtures/namespaced_classmanifest/module/classes/ClassI.php index 252aa3ef7..7712a6601 100644 --- a/tests/core/manifest/fixtures/namespaced_classmanifest/module/classes/ClassI.php +++ b/tests/core/manifest/fixtures/namespaced_classmanifest/module/classes/ClassI.php @@ -2,11 +2,11 @@ namespace SilverStripe\Framework\Tests; //whitespace here is important for tests, please don't change it -use ModelAdmin; +use ModelAdmin; use Controller as Cont ; use SS_HTTPRequest as Request,SS_HTTPResponse AS Response, PermissionProvider AS P; use silverstripe\test\ClassA; -use \DataObject; +use \Object; class ClassI extends ModelAdmin implements P { } diff --git a/tests/dev/BulkLoaderResultTest.php b/tests/dev/BulkLoaderResultTest.php index 15b2dbdc1..1b3d6ef97 100644 --- a/tests/dev/BulkLoaderResultTest.php +++ b/tests/dev/BulkLoaderResultTest.php @@ -1,4 +1,6 @@ logInWithPermission('ADMIN'); @@ -46,7 +49,7 @@ class AssetControlExtensionTest extends SapphireTest { } public function testFileDelete() { - \Versioned::set_stage(Versioned::DRAFT); + Versioned::set_stage(Versioned::DRAFT); /** @var AssetControlExtensionTest_VersionedObject $object1 */ $object1 = AssetControlExtensionTest_VersionedObject::get() @@ -120,7 +123,7 @@ class AssetControlExtensionTest extends SapphireTest { * Test files being replaced */ public function testReplaceFile() { - \Versioned::set_stage(Versioned::DRAFT); + Versioned::set_stage(Versioned::DRAFT); /** @var AssetControlExtensionTest_VersionedObject $object1 */ $object1 = AssetControlExtensionTest_VersionedObject::get() @@ -208,7 +211,7 @@ class AssetControlExtensionTest extends SapphireTest { */ class AssetControlExtensionTest_VersionedObject extends DataObject implements TestOnly { private static $extensions = array( - 'Versioned' + 'SilverStripe\\ORM\\Versioning\\Versioned' ); private static $db = array( diff --git a/tests/filesystem/FileMigrationHelperTest.php b/tests/filesystem/FileMigrationHelperTest.php index c0bc74478..789732436 100644 --- a/tests/filesystem/FileMigrationHelperTest.php +++ b/tests/filesystem/FileMigrationHelperTest.php @@ -1,6 +1,8 @@ get('File', 'allowed_extensions'); diff --git a/tests/filesystem/FolderTest.php b/tests/filesystem/FolderTest.php index 515d6e696..3556a807e 100644 --- a/tests/filesystem/FolderTest.php +++ b/tests/filesystem/FolderTest.php @@ -1,6 +1,9 @@ update('SilverStripe\Model\FieldType\DBCurrency', 'currency_symbol', '€'); + Config::inst()->update('SilverStripe\\ORM\\FieldType\\DBCurrency', 'currency_symbol', '€'); $f->setValue('123.45'); $this->assertTrue( @@ -164,7 +164,7 @@ class CurrencyFieldTest extends SapphireTest { ); //update currency symbol via config - Config::inst()->update('SilverStripe\Model\FieldType\DBCurrency', 'currency_symbol', '€'); + Config::inst()->update('SilverStripe\\ORM\\FieldType\\DBCurrency', 'currency_symbol', '€'); $f->setValue('123.45'); $this->assertEquals( @@ -235,7 +235,7 @@ class CurrencyFieldTest extends SapphireTest { ); //tests with updated currency symbol setting - Config::inst()->update('SilverStripe\Model\FieldType\DBCurrency', 'currency_symbol', '€'); + Config::inst()->update('SilverStripe\\ORM\\FieldType\\DBCurrency', 'currency_symbol', '€'); $f->setValue('€123.45'); $this->assertEquals( diff --git a/tests/forms/DBFileTest.php b/tests/forms/DBFileTest.php index ed1ca2020..7cf181941 100644 --- a/tests/forms/DBFileTest.php +++ b/tests/forms/DBFileTest.php @@ -1,5 +1,7 @@ MyFile->setFromLocalFile($fish, 'awesome-fish.jpg'); // This should fail - $this->setExpectedException('ValidationException'); + $this->setExpectedException('SilverStripe\\ORM\\ValidationException'); $obj->MyFile->setFromString('puppies', 'subdir/puppy-document.txt'); } diff --git a/tests/forms/DatetimeFieldTest.php b/tests/forms/DatetimeFieldTest.php index 3d302b94c..a7d31c5ad 100644 --- a/tests/forms/DatetimeFieldTest.php +++ b/tests/forms/DatetimeFieldTest.php @@ -1,4 +1,6 @@ 'SS_Datetime' + 'MyDatetime' => 'Datetime' ); } diff --git a/tests/forms/DropdownFieldTest.php b/tests/forms/DropdownFieldTest.php index 7e82c54ba..c165415c7 100644 --- a/tests/forms/DropdownFieldTest.php +++ b/tests/forms/DropdownFieldTest.php @@ -1,4 +1,6 @@ createDropdownField(); $field->setValue($value); - $this->assertInstanceOf('SilverStripe\Model\FieldType\DBHTMLText', $field->Field()); + $this->assertInstanceOf('SilverStripe\\ORM\\FieldType\\DBHTMLText', $field->Field()); $this->assertSame($value, $field->Value()); } diff --git a/tests/forms/EnumFieldTest.php b/tests/forms/EnumFieldTest.php index a6f3a23cf..683222d70 100644 --- a/tests/forms/EnumFieldTest.php +++ b/tests/forms/EnumFieldTest.php @@ -1,6 +1,8 @@ 'FormScaffolderTest_Author', - 'Subject' => 'DataObject' + 'Subject' => 'SilverStripe\\ORM\\DataObject' ); private static $many_many = array( 'Tags' => 'FormScaffolderTest_Tag', diff --git a/tests/forms/FormTest.php b/tests/forms/FormTest.php index 9ddf84a48..97095f325 100644 --- a/tests/forms/FormTest.php +++ b/tests/forms/FormTest.php @@ -1,5 +1,8 @@ assertEquals('Member', $obj->getModelClass(), 'Should return Member'); - $obj->setModelClass('DataModel'); - $this->assertEquals('DataModel', $obj->getModelClass(), 'Should return Member'); + $obj->setModelClass('SilverStripe\\ORM\\DataModel'); + $this->assertEquals('SilverStripe\\ORM\\DataModel', $obj->getModelClass(), 'Should return Member'); } /** diff --git a/tests/forms/HTMLEditorFieldTest.php b/tests/forms/HTMLEditorFieldTest.php index 66c48eaae..1b8dc0869 100644 --- a/tests/forms/HTMLEditorFieldTest.php +++ b/tests/forms/HTMLEditorFieldTest.php @@ -1,6 +1,8 @@ assertInstanceOf('ArrayList', $config->getComponents()); + $this->assertInstanceOf('SilverStripe\\ORM\\ArrayList', $config->getComponents()); $this->assertEquals($config->getComponents()->Count(), 0); $config diff --git a/tests/forms/gridfield/GridFieldDeleteActionTest.php b/tests/forms/gridfield/GridFieldDeleteActionTest.php index 2f4d2d909..8e6db505a 100644 --- a/tests/forms/gridfield/GridFieldDeleteActionTest.php +++ b/tests/forms/gridfield/GridFieldDeleteActionTest.php @@ -1,5 +1,8 @@ logOut(); } - $this->setExpectedException('ValidationException'); + $this->setExpectedException('SilverStripe\\ORM\\ValidationException'); $stateID = 'testGridStateActionField'; Session::set( diff --git a/tests/forms/gridfield/GridFieldDetailFormTest.php b/tests/forms/gridfield/GridFieldDetailFormTest.php index fd8d965fd..7cd0b65df 100644 --- a/tests/forms/gridfield/GridFieldDetailFormTest.php +++ b/tests/forms/gridfield/GridFieldDetailFormTest.php @@ -1,5 +1,7 @@ alternateBasePath = $this->getCurrentAbsolutePath() . "/_fakewebroot"; + Config::inst()->update('Director', 'alternate_base_folder', $this->alternateBasePath); $this->alternateBaseSavePath = TEMP_FOLDER . '/i18nTextCollectorTest_webroot'; Filesystem::makeFolder($this->alternateBaseSavePath); @@ -40,6 +41,10 @@ class i18nTextCollectorTest extends SapphireTest { public function tearDown() { SS_TemplateLoader::instance()->popManifest(); + // Pop if added during testing + if(SS_ClassLoader::instance()->getManifest() === $this->manifest) { + SS_ClassLoader::instance()->popManifest(); + } parent::tearDown(); } @@ -520,6 +525,8 @@ YAML; $local = i18n::get_locale(); i18n::set_locale('en_US'); i18n::set_default_locale('en_US'); + i18n::include_by_locale('en'); + i18n::include_by_locale('en_US'); $c = new i18nTextCollector(); $c->setWriter(new i18nTextCollector_Writer_Php()); @@ -688,28 +695,28 @@ YAML; * Test that duplicate keys are resolved to the appropriate modules */ public function testResolveDuplicates() { + SS_ClassLoader::instance()->pushManifest($this->manifest); $collector = new i18nTextCollectorTest_Collector(); // Dummy data as collected $data1 = array( - 'framework' => array( - 'DataObject.PLURALNAME' => array('Data Objects'), - 'DataObject.SINGULARNAME' => array('Data Object') + 'i18ntestmodule' => array( + 'i18nTestModule.PLURALNAME' => array('Data Objects'), + 'i18nTestModule.SINGULARNAME' => array('Data Object') ), 'mymodule' => array( - 'DataObject.PLURALNAME' => array('Ignored String'), - 'DataObject.STREETNAME' => array('Shortland Street') + 'i18nTestModule.PLURALNAME' => array('Ignored String'), + 'i18nTestModule.STREETNAME' => array('Shortland Street') ) ); $expected = array( - 'framework' => array( - 'DataObject.PLURALNAME' => array('Data Objects'), - // Because DataObject is in framework module - 'DataObject.SINGULARNAME' => array('Data Object') + 'i18ntestmodule' => array( + 'i18nTestModule.PLURALNAME' => array('Data Objects'), + 'i18nTestModule.SINGULARNAME' => array('Data Object') ), 'mymodule' => array( - // Because this key doesn't exist in framework strings - 'DataObject.STREETNAME' => array('Shortland Street') + // Because this key doesn't exist in i18ntestmodule strings + 'i18nTestModule.STREETNAME' => array('Shortland Street') ) ); @@ -719,22 +726,22 @@ YAML; // Test getConflicts $data2 = array( 'module1' => array( - 'DataObject.ONE' => array('One'), - 'DataObject.TWO' => array('Two'), - 'DataObject.THREE' => array('Three'), + 'i18ntestmodule.ONE' => array('One'), + 'i18ntestmodule.TWO' => array('Two'), + 'i18ntestmodule.THREE' => array('Three'), ), 'module2' => array( - 'DataObject.THREE' => array('Three'), + 'i18ntestmodule.THREE' => array('Three'), ), 'module3' => array( - 'DataObject.TWO' => array('Two'), - 'DataObject.THREE' => array('Three'), + 'i18ntestmodule.TWO' => array('Two'), + 'i18ntestmodule.THREE' => array('Three'), ) ); $conflictsA = $collector->getConflicts_Test($data2); sort($conflictsA); $this->assertEquals( - array('DataObject.THREE', 'DataObject.TWO'), + array('i18ntestmodule.THREE', 'i18ntestmodule.TWO'), $conflictsA ); @@ -742,7 +749,7 @@ YAML; unset($data2['module3']); $conflictsB = $collector->getConflicts_Test($data2); $this->assertEquals( - array('DataObject.THREE'), + array('i18ntestmodule.THREE'), $conflictsB ); } @@ -751,6 +758,7 @@ YAML; * Test ability for textcollector to detect modules */ public function testModuleDetection() { + SS_ClassLoader::instance()->pushManifest($this->manifest); $collector = new i18nTextCollectorTest_Collector(); $modules = $collector->getModules_Test($this->alternateBasePath); $this->assertEquals( @@ -763,6 +771,13 @@ YAML; ), $modules ); + + $this->assertEquals('i18ntestmodule', $collector->findModuleForClass_Test('i18nTestNamespacedClass')); + $this->assertEquals( + 'i18ntestmodule', + $collector->findModuleForClass_Test('i18nTest\\i18nTestNamespacedClass') + ); + $this->assertEquals('i18ntestmodule', $collector->findModuleForClass_Test('i18nTestSubModule')); } /** @@ -784,11 +799,12 @@ YAML; // Normal module should have predictable dir structure $testFiles = $collector->getFileListForModule_Test('i18ntestmodule'); $testRoot = $this->alternateBasePath . '/i18ntestmodule'; - $this->assertEquals(6, count($testFiles)); + $this->assertEquals(7, count($testFiles)); // Code in code folder is detected $this->assertArrayHasKey("{$testRoot}/code/i18nTestModule.php", $testFiles); $this->assertArrayHasKey("{$testRoot}/code/subfolder/_config.php", $testFiles); $this->assertArrayHasKey("{$testRoot}/code/subfolder/i18nTestSubModule.php", $testFiles); + $this->assertArrayHasKey("{$testRoot}/code/subfolder/i18nTestNamespacedClass.php", $testFiles); // Templates in templates folder is detected $this->assertArrayHasKey("{$testRoot}/templates/Includes/i18nTestModuleInclude.ss", $testFiles); $this->assertArrayHasKey("{$testRoot}/templates/Layout/i18nTestModule.ss", $testFiles); @@ -836,11 +852,15 @@ class i18nTextCollectorTest_Collector extends i18nTextCollector implements TestO } public function getFileListForModule_Test($module) { - return parent::getFileListForModule($module); + return $this->getFileListForModule($module); } public function getConflicts_Test($entitiesByModule) { - return parent::getConflicts($entitiesByModule); + return $this->getConflicts($entitiesByModule); + } + + public function findModuleForClass_Test($class) { + return $this->findModuleForClass($class); } } diff --git a/tests/i18n/i18nTextCollectorTestMyObject.php b/tests/i18n/i18nTextCollectorTestMyObject.php index 10c9ff4ed..ec433e6c6 100644 --- a/tests/i18n/i18nTextCollectorTestMyObject.php +++ b/tests/i18n/i18nTextCollectorTestMyObject.php @@ -1,4 +1,6 @@ map('ID', 'Name'); // Items added after calling map should not be included retroactively $list->add(array('ID' => 7, 'Name' => 'Andrew')); - $this->assertInstanceOf('SS_Map', $map); + $this->assertInstanceOf('SilverStripe\\ORM\\SS_Map', $map); $this->assertEquals(array( 1 => 'Steve', 3 => 'Bob', diff --git a/tests/model/ChangeSetItemTest.php b/tests/model/ChangeSetItemTest.php index 0d30c706d..9f46e5669 100644 --- a/tests/model/ChangeSetItemTest.php +++ b/tests/model/ChangeSetItemTest.php @@ -1,12 +1,15 @@ 'Int' ]; private static $extensions = [ - "Versioned" + "SilverStripe\\ORM\\Versioning\\Versioned" ]; function canEdit($member = null) { return true; } diff --git a/tests/model/ChangeSetTest.php b/tests/model/ChangeSetTest.php index 76d66653d..acbdf9571 100644 --- a/tests/model/ChangeSetTest.php +++ b/tests/model/ChangeSetTest.php @@ -1,5 +1,10 @@ assertEquals('DataObject', $field1->getBaseClass()); - $this->assertNotEquals('DataObject', $field1->getDefault()); + $field1 = new DBClassName('MyClass', 'SilverStripe\\ORM\\DataObject'); + $this->assertEquals('SilverStripe\\ORM\\DataObject', $field1->getBaseClass()); + $this->assertNotEquals('SilverStripe\\ORM\\DataObject', $field1->getDefault()); // Explicit base class $field2 = new DBClassName('MyClass', 'DBClassNameTest_Object'); @@ -86,14 +89,14 @@ class DBClassNameTest extends SapphireTest { // Missing $field5 = new DBClassName('MyClass'); - $this->assertEquals('DataObject', $field5->getBaseClass()); - $this->assertNotEquals('DataObject', $field5->getDefault()); + $this->assertEquals('SilverStripe\\ORM\\DataObject', $field5->getBaseClass()); + $this->assertNotEquals('SilverStripe\\ORM\\DataObject', $field5->getDefault()); // Invalid class $field6 = new DBClassName('MyClass'); $field6->setTable('InvalidTable'); - $this->assertEquals('DataObject', $field6->getBaseClass()); - $this->assertNotEquals('DataObject', $field6->getDefault()); + $this->assertEquals('SilverStripe\\ORM\\DataObject', $field6->getBaseClass()); + $this->assertNotEquals('SilverStripe\\ORM\\DataObject', $field6->getDefault()); // Custom default_classname $field7 = new DBClassName('MyClass'); @@ -106,12 +109,12 @@ class DBClassNameTest extends SapphireTest { class DBClassNameTest_Object extends DataObject implements TestOnly { private static $extensions = array( - 'Versioned' + 'SilverStripe\\ORM\\Versioning\\Versioned' ); private static $db = array( 'DefaultClass' => 'DBClassName', - 'AnyClass' => 'DBClassName("DataObject")', + 'AnyClass' => "DBClassName('SilverStripe\\ORM\\DataObject')", 'ChildClass' => 'DBClassName("DBClassNameTest_ObjectSubClass")', 'LeafClass' => 'DBClassName("DBClassNameTest_ObjectSubSubClass")' ); diff --git a/tests/model/DBCompositeTest.php b/tests/model/DBCompositeTest.php index 46e8356b3..5808bdac8 100644 --- a/tests/model/DBCompositeTest.php +++ b/tests/model/DBCompositeTest.php @@ -1,7 +1,10 @@ update('SilverStripe\Model\FieldType\DBDate', 'nice_format', 'd F Y'); + Config::inst()->update('SilverStripe\\ORM\\FieldType\\DBDate', 'nice_format', 'd F Y'); $this->assertEquals('04 March 2003', $date->Nice()); } diff --git a/tests/model/DBFieldTest.php b/tests/model/DBFieldTest.php index bf360f6a7..6ad223937 100644 --- a/tests/model/DBFieldTest.php +++ b/tests/model/DBFieldTest.php @@ -1,8 +1,13 @@ objFromFixture('MoneyTest_DataObject', 'test1'); - $this->assertInstanceOf('SilverStripe\Model\FieldType\DBMoney', $obj->MyMoney); + $this->assertInstanceOf('SilverStripe\\ORM\\FieldType\\DBMoney', $obj->MyMoney); } public function testLoadFromFixture() { $obj = $this->objFromFixture('MoneyTest_DataObject', 'test1'); - $this->assertInstanceOf('SilverStripe\Model\FieldType\DBMoney', $obj->MyMoney); + $this->assertInstanceOf('SilverStripe\\ORM\\FieldType\\DBMoney', $obj->MyMoney); $this->assertEquals($obj->MyMoney->getCurrency(), 'EUR'); $this->assertEquals($obj->MyMoney->getAmount(), 1.23); } @@ -46,7 +50,7 @@ class DBMoneyTest extends SapphireTest { $this->assertNotContains('MyMoney', array_keys($changed)); // With changes - $this->assertInstanceOf('SilverStripe\Model\FieldType\DBMoney', $obj->MyMoney); + $this->assertInstanceOf('SilverStripe\\ORM\\FieldType\\DBMoney', $obj->MyMoney); $obj->MyMoney->setAmount(99); $changed = $obj->getChangedFields(); $this->assertContains('MyMoney', array_keys($changed), 'Field is detected as changed'); @@ -263,7 +267,7 @@ class DBMoneyTest extends SapphireTest { public function testLoadIntoDataObject() { $obj = new MoneyTest_DataObject(); - $this->assertInstanceOf('SilverStripe\Model\FieldType\DBMoney', $obj->obj('MyMoney')); + $this->assertInstanceOf('SilverStripe\\ORM\\FieldType\\DBMoney', $obj->obj('MyMoney')); $m = new DBMoney(); $m->setValue(array( diff --git a/tests/model/DBPercentageTest.php b/tests/model/DBPercentageTest.php index ac2313f95..0d5531518 100644 --- a/tests/model/DBPercentageTest.php +++ b/tests/model/DBPercentageTest.php @@ -1,6 +1,8 @@ array( 'DataExtensionTest_AppliedToDO' ), + '\SilverStripe\ORM\DataObject' => array( 'DataExtensionTest_AppliedToDO' ), ); public function testOneToManyAssociationWithExtension() { @@ -152,7 +155,7 @@ class DataExtensionTest extends SapphireTest { public function testDbObjectOnExtendedFields() { $member = $this->objFromFixture('DataExtensionTest_Member', 'member1'); $this->assertNotNull($member->dbObject('Website')); - $this->assertInstanceOf('SilverStripe\Model\FieldType\DBVarchar', $member->dbObject('Website')); + $this->assertInstanceOf('SilverStripe\\ORM\\FieldType\\DBVarchar', $member->dbObject('Website')); } public function testExtensionCanBeAppliedToDataObject() { diff --git a/tests/model/DataListTest.php b/tests/model/DataListTest.php index b12422b3a..37a9e8245 100755 --- a/tests/model/DataListTest.php +++ b/tests/model/DataListTest.php @@ -1,5 +1,9 @@ "Varchar" ); private static $extensions = array( - "Versioned('Stage', 'Live')" + "SilverStripe\\ORM\\Versioning\\Versioned('Stage', 'Live')" ); } @@ -443,6 +448,6 @@ class VersionedLazySub_DataObject extends VersionedLazy_DataObject { "ExtraField" => "Varchar", ); private static $extensions = array( - "Versioned('Stage', 'Live')" + "SilverStripe\\ORM\\Versioning\\Versioned('Stage', 'Live')" ); } diff --git a/tests/model/DataObjectSchemaGenerationTest.php b/tests/model/DataObjectSchemaGenerationTest.php index 0d4e06e42..4c322d2d6 100644 --- a/tests/model/DataObjectSchemaGenerationTest.php +++ b/tests/model/DataObjectSchemaGenerationTest.php @@ -1,6 +1,11 @@ assertEquals("DBClassName", $fields['ClassName']); $this->assertEquals( array( @@ -149,6 +155,7 @@ class DataObjectSchemaGenerationTest extends SapphireTest { $item1->write(); DBClassName::clear_classname_cache(); $fields = DataObject::database_fields('DataObjectSchemaGenerationTest_DO'); + /** @skipUpgrade */ $this->assertEquals("DBClassName", $fields['ClassName']); $this->assertEquals( array( @@ -164,6 +171,7 @@ class DataObjectSchemaGenerationTest extends SapphireTest { $item2->write(); DBClassName::clear_classname_cache(); $fields = DataObject::database_fields('DataObjectSchemaGenerationTest_DO'); + /** @skipUpgrade */ $this->assertEquals("DBClassName", $fields['ClassName']); $this->assertEquals( array( @@ -181,6 +189,7 @@ class DataObjectSchemaGenerationTest extends SapphireTest { $item2->write(); DBClassName::clear_classname_cache(); $fields = DataObject::database_fields('DataObjectSchemaGenerationTest_DO'); + /** @skipUpgrade */ $this->assertEquals("DBClassName", $fields['ClassName']); $this->assertEquals( array( @@ -201,7 +210,7 @@ class DataObjectSchemaGenerationTest_DO extends DataObject implements TestOnly { 'NumberField' => 'Decimal', 'FloatingField' => 'Decimal(10,3,1.1)', 'TextValue' => 'Varchar', - 'Date' => 'SS_Datetime', + 'Date' => 'Datetime', 'MyNumber' => 'Int' ); } diff --git a/tests/model/DataObjectSchemaTest.php b/tests/model/DataObjectSchemaTest.php index 663559885..18fd1686b 100644 --- a/tests/model/DataObjectSchemaTest.php +++ b/tests/model/DataObjectSchemaTest.php @@ -1,5 +1,7 @@ assertEquals('DataObjectSchemaTest_BaseClass', $schema->baseDataClass('DataObjectSchemaTest_GRANDChildClass')); $this->setExpectedException('InvalidArgumentException'); - $schema->baseDataClass('DataObject'); + $schema->baseDataClass('SilverStripe\\ORM\\DataObject'); } } diff --git a/tests/model/DataObjectSchemaTest_Namespaced.php b/tests/model/DataObjectSchemaTest_Namespaced.php index cde4db5d7..5d6337076 100644 --- a/tests/model/DataObjectSchemaTest_Namespaced.php +++ b/tests/model/DataObjectSchemaTest_Namespaced.php @@ -4,11 +4,13 @@ * Namespaced dataobjcets used by DataObjectSchemaTest */ namespace Namespaced\DOST; +use SilverStripe\ORM\DataObject; + /** * Basic namespaced object */ -class MyObject extends \DataObject implements \TestOnly { +class MyObject extends DataObject implements \TestOnly { private static $db = [ 'Title' => 'Varchar', 'Description' => 'Text', @@ -18,7 +20,7 @@ class MyObject extends \DataObject implements \TestOnly { /** * Namespaced object with custom table */ -class MyObject_CustomTable extends \DataObject implements \TestOnly { +class MyObject_CustomTable extends DataObject implements \TestOnly { private static $table_name = 'CustomNamespacedTable'; private static $db = [ 'Title' => 'Varchar', @@ -42,7 +44,7 @@ class MyObject_NestedObject extends MyObject implements \TestOnly { /** * Namespaced object with custom table that itself is namespaced */ -class MyObject_NamespacedTable extends \DataObject implements \TestOnly { +class MyObject_NamespacedTable extends DataObject implements \TestOnly { private static $table_name = 'Custom\NamespacedTable'; private static $db = [ 'Title' => 'Varchar', @@ -71,7 +73,7 @@ class MyObject_Namespaced_Subclass extends MyObject_NamespacedTable implements \ * Namespaced class without any fields * has a has_many to another namespaced table */ -class MyObject_NoFields extends \DataObject implements \TestOnly { +class MyObject_NoFields extends DataObject implements \TestOnly { private static $has_many = [ 'Owns' => 'Namespaced\DOST\MyObject_NamespacedTable', ]; diff --git a/tests/model/DataObjectTest.php b/tests/model/DataObjectTest.php index 23756dac1..cc28a3476 100644 --- a/tests/model/DataObjectTest.php +++ b/tests/model/DataObjectTest.php @@ -1,6 +1,13 @@ assertEquals(singleton('DataObjectTest_CEO')->getRelationClass('Company'), 'DataObjectTest_Company', 'belongs_to is properly inspected'); - $this->assertEquals(singleton('DataObjectTest_Fan')->getRelationClass('Favourite'), 'DataObject', + $this->assertEquals(singleton('DataObjectTest_Fan')->getRelationClass('Favourite'), 'SilverStripe\\ORM\\DataObject', 'polymorphic has_one is properly inspected'); } @@ -355,7 +362,7 @@ class DataObjectTest extends SapphireTest { // check behaviour of dbObject with polymorphic relations $favouriteDBObject = $fan1->dbObject('Favourite'); $favouriteValue = $favouriteDBObject->getValue(); - $this->assertInstanceOf('SilverStripe\Model\FieldType\DBPolymorphicForeignKey', $favouriteDBObject); + $this->assertInstanceOf('SilverStripe\\ORM\\FieldType\\DBPolymorphicForeignKey', $favouriteDBObject); $this->assertEquals($favourite->ID, $favouriteValue->ID); $this->assertEquals($favourite->ClassName, $favouriteValue->ClassName); } @@ -1048,7 +1055,7 @@ class DataObjectTest extends SapphireTest { public function testWritingInvalidDataObjectThrowsException() { $validatedObject = new DataObjectTest_ValidatedObject(); - $this->setExpectedException('ValidationException'); + $this->setExpectedException('SilverStripe\\ORM\\ValidationException'); $validatedObject->write(); } @@ -1102,7 +1109,7 @@ class DataObjectTest extends SapphireTest { $this->assertFalse(DataObject::has_own_table("DataObjectTest_FieldlessSubTable")); /* Return false if you don't pass it a subclass of DataObject */ - $this->assertFalse(DataObject::has_own_table("DataObject")); + $this->assertFalse(DataObject::has_own_table("SilverStripe\\ORM\\DataObject")); $this->assertFalse(DataObject::has_own_table("ViewableData")); $this->assertFalse(DataObject::has_own_table("ThisIsntADataObject")); } @@ -1286,7 +1293,7 @@ class DataObjectTest extends SapphireTest { // Check everything works when no relation is present $teamWithoutSponsor = $this->objFromFixture('DataObjectTest_Team', 'team3'); - $this->assertInstanceOf('ManyManyList', $teamWithoutSponsor->Sponsors()); + $this->assertInstanceOf('SilverStripe\\ORM\\ManyManyList', $teamWithoutSponsor->Sponsors()); $this->assertEquals(0, $teamWithoutSponsor->Sponsors()->count()); // Test that belongs_many_many can be infered from with getNonReciprocalComponent @@ -1414,7 +1421,8 @@ class DataObjectTest extends SapphireTest { $assertions = array( 'DataObjectTest_Player' => 'Data Object Test Player', 'DataObjectTest_Team' => 'Data Object Test Team', - 'DataObjectTest_Fixture' => 'Data Object Test Fixture' + 'DataObjectTest_Fixture' => 'Data Object Test Fixture', + 'DataObjectTest\NamespacedClass' => 'Namespaced Class', ); foreach($assertions as $class => $expectedSingularName) { @@ -1752,16 +1760,16 @@ class DataObjectTest extends SapphireTest { $captain = $this->objFromFixture('DataObjectTest_Player', 'captain1'); // Test traversal of a single has_one - $this->assertInstanceOf('SilverStripe\Model\FieldType\DBVarchar', $captain->relObject('FavouriteTeam.Title')); + $this->assertInstanceOf('SilverStripe\\ORM\\FieldType\\DBVarchar', $captain->relObject('FavouriteTeam.Title')); $this->assertEquals("Team 1", $captain->relObject('FavouriteTeam.Title')->getValue()); // Test direct field access - $this->assertInstanceOf('SilverStripe\Model\FieldType\DBBoolean', $captain->relObject('IsRetired')); + $this->assertInstanceOf('SilverStripe\\ORM\\FieldType\\DBBoolean', $captain->relObject('IsRetired')); $this->assertEquals(1, $captain->relObject('IsRetired')->getValue()); $player = $this->objFromFixture('DataObjectTest_Player', 'player2'); // Test that we can traverse more than once, and that arbitrary methods are okay - $this->assertInstanceOf('SilverStripe\Model\FieldType\DBVarchar', $player->relObject('Teams.First.Title')); + $this->assertInstanceOf('SilverStripe\\ORM\\FieldType\\DBVarchar', $player->relObject('Teams.First.Title')); $this->assertEquals("Team 1", $player->relObject('Teams.First.Title')->getValue()); } @@ -1878,7 +1886,7 @@ class DataObjectTest_Fixture extends DataObject implements TestOnly { // Field types 'DateField' => 'Date', - 'DatetimeField' => 'SS_Datetime', + 'DatetimeField' => 'Datetime', 'MyFieldWithDefault' => 'Varchar', 'MyFieldWithAltDefault' => 'Varchar' @@ -1976,7 +1984,7 @@ class DataObjectTest_Company extends DataObject implements TestOnly { private static $has_one = array ( 'CEO' => 'DataObjectTest_CEO', 'PreviousCEO' => 'DataObjectTest_CEO', - 'Owner' => 'DataObject' // polymorphic + 'Owner' => 'SilverStripe\\ORM\\DataObject' // polymorphic ); private static $has_many = array ( @@ -2040,8 +2048,8 @@ class DataObjectTest_Fan extends DataObject implements TestOnly { ); private static $has_one = array( - 'Favourite' => 'DataObject', // Polymorphic relation - 'SecondFavourite' => 'DataObject' + 'Favourite' => 'SilverStripe\\ORM\\DataObject', // Polymorphic relation + 'SecondFavourite' => 'SilverStripe\\ORM\\DataObject' ); } diff --git a/tests/model/DataObjectTest_Namespaced.php b/tests/model/DataObjectTest_Namespaced.php index c0f502664..ed6dc7c88 100644 --- a/tests/model/DataObjectTest_Namespaced.php +++ b/tests/model/DataObjectTest_Namespaced.php @@ -1,12 +1,14 @@ 'Varchar', ); @@ -16,13 +18,13 @@ class NamespacedClass extends \DataObject implements \TestOnly { ); } -class RelationClass extends \DataObject implements \TestOnly { +class RelationClass extends DataObject implements \TestOnly { private static $db = array( 'Title' => 'Varchar' ); private static $has_one = array( - 'Parent' => 'DataObject' + 'Parent' => 'SilverStripe\\ORM\\DataObject' ); } diff --git a/tests/model/DataQueryTest.php b/tests/model/DataQueryTest.php index 5e17d4ac8..95d343b99 100644 --- a/tests/model/DataQueryTest.php +++ b/tests/model/DataQueryTest.php @@ -1,5 +1,9 @@ 'Int', - 'MyDate' => 'SS_Datetime', + 'MyDate' => 'Datetime', 'MyString' => 'Text' ); } diff --git a/tests/model/DatabaseTest.php b/tests/model/DatabaseTest.php index ee7172847..605362b75 100644 --- a/tests/model/DatabaseTest.php +++ b/tests/model/DatabaseTest.php @@ -1,4 +1,9 @@ array('Hierarchy', 'Versioned'), - 'HierarchyHideTest_Object' => array('Hierarchy', 'Versioned'), + 'HierarchyTest_Object' => array('SilverStripe\\ORM\\Hierarchy\\Hierarchy', 'SilverStripe\\ORM\\Versioning\\Versioned'), + 'HierarchyHideTest_Object' => array('SilverStripe\\ORM\\Hierarchy\\Hierarchy', 'SilverStripe\\ORM\\Versioning\\Versioned'), ); protected $extraDataObjects = array( @@ -566,8 +570,8 @@ class HierarchyTest_Object extends DataObject implements TestOnly { ); private static $extensions = array( - 'Hierarchy', - 'Versioned', + 'SilverStripe\\ORM\\Hierarchy\\Hierarchy', + 'SilverStripe\\ORM\\Versioning\\Versioned', ); public function cmstreeclasses() { @@ -581,8 +585,8 @@ class HierarchyHideTest_Object extends DataObject implements TestOnly { ); private static $extensions = array( - 'Hierarchy', - "Versioned('Stage', 'Live')", + 'SilverStripe\\ORM\\Hierarchy\\Hierarchy', + "SilverStripe\\ORM\\Versioning\\Versioned('Stage', 'Live')", ); public function cmstreeclasses() { diff --git a/tests/model/ManyManyListExtensionTest.php b/tests/model/ManyManyListExtensionTest.php index 4b37e7848..67f2afbb9 100644 --- a/tests/model/ManyManyListExtensionTest.php +++ b/tests/model/ManyManyListExtensionTest.php @@ -1,5 +1,8 @@ Clients()->First(); $this->assertEquals('Foo', $check->Reference, 'Basic scalar fields should exist'); - $this->assertInstanceOf('SilverStripe\Model\FieldType\DBMoney', $check->Worth, 'Composite fields should exist on the record'); + $this->assertInstanceOf('SilverStripe\\ORM\\FieldType\\DBMoney', $check->Worth, 'Composite fields should exist on the record'); $this->assertEquals(100, $check->Worth->getAmount()); } diff --git a/tests/model/MapTest.php b/tests/model/MapTest.php index 494326fa1..2908eafce 100755 --- a/tests/model/MapTest.php +++ b/tests/model/MapTest.php @@ -1,5 +1,8 @@ ? ORDER BY "Sort"', array(2) ); - $this->assertInstanceOf('MySQLStatement', $result1); - $this->assertInstanceOf('MySQLStatement', $result2); + $this->assertInstanceOf('SilverStripe\\ORM\\Connect\\MySQLStatement', $result1); + $this->assertInstanceOf('SilverStripe\\ORM\\Connect\\MySQLStatement', $result2); // Also select non-prepared statement $result3 = DB::get_connector()->query('SELECT "Sort", "Title" FROM "MySQLDatabaseTest_Data" ORDER BY "Sort"'); - $this->assertInstanceOf('MySQLQuery', $result3); + $this->assertInstanceOf('SilverStripe\\ORM\\Connect\\MySQLQuery', $result3); // Iterating one level should not buffer, but return the right result $this->assertEquals( @@ -101,13 +106,13 @@ class MySQLDatabaseTest extends SapphireTest { // Test update which affects no rows $query->setWhere(array('Title' => 'Bob')); $result = $query->execute(); - $this->assertInstanceOf('MySQLQuery', $result); + $this->assertInstanceOf('SilverStripe\\ORM\\Connect\\MySQLQuery', $result); $this->assertEquals(0, DB::affected_rows()); // Test update which affects some rows $query->setWhere(array('Title' => 'First Item')); $result = $query->execute(); - $this->assertInstanceOf('MySQLQuery', $result); + $this->assertInstanceOf('SilverStripe\\ORM\\Connect\\MySQLQuery', $result); $this->assertEquals(1, DB::affected_rows()); } } diff --git a/tests/model/PDODatabaseTest.php b/tests/model/PDODatabaseTest.php index 3a227a56c..e6996b11e 100644 --- a/tests/model/PDODatabaseTest.php +++ b/tests/model/PDODatabaseTest.php @@ -1,4 +1,8 @@ ? ORDER BY "Sort"', array(2) ); - $this->assertInstanceOf('PDOQuery', $result1); - $this->assertInstanceOf('PDOQuery', $result2); + $this->assertInstanceOf('SilverStripe\\ORM\\Connect\\PDOQuery', $result1); + $this->assertInstanceOf('SilverStripe\\ORM\\Connect\\PDOQuery', $result2); // Also select non-prepared statement $result3 = DB::get_connector()->query('SELECT "Sort", "Title" FROM "MySQLDatabaseTest_Data" ORDER BY "Sort"'); - $this->assertInstanceOf('PDOQuery', $result3); + $this->assertInstanceOf('SilverStripe\\ORM\\Connect\\PDOQuery', $result3); // Iterating one level should not buffer, but return the right result $this->assertEquals( @@ -101,13 +105,13 @@ class PDODatabaseTest extends SapphireTest { // Test update which affects no rows $query->setWhere(array('Title' => 'Bob')); $result = $query->execute(); - $this->assertInstanceOf('PDOQuery', $result); + $this->assertInstanceOf('SilverStripe\\ORM\\Connect\\PDOQuery', $result); $this->assertEquals(0, DB::affected_rows()); // Test update which affects some rows $query->setWhere(array('Title' => 'First Item')); $result = $query->execute(); - $this->assertInstanceOf('PDOQuery', $result); + $this->assertInstanceOf('SilverStripe\\ORM\\Connect\\PDOQuery', $result); $this->assertEquals(1, DB::affected_rows()); } } diff --git a/tests/model/PaginatedListTest.php b/tests/model/PaginatedListTest.php index 34abb090d..67ec4facc 100644 --- a/tests/model/PaginatedListTest.php +++ b/tests/model/PaginatedListTest.php @@ -1,4 +1,7 @@ getMock('SQLSelect'); + $query = $this->getMock('SilverStripe\\ORM\\Queries\\SQLSelect'); $query->expects($this->once()) ->method('getLimit') ->will($this->returnValue(array('limit' => 15, 'start' => 30))); diff --git a/tests/model/SQLInsertTest.php b/tests/model/SQLInsertTest.php index e5d0b0825..993b1cc1c 100644 --- a/tests/model/SQLInsertTest.php +++ b/tests/model/SQLInsertTest.php @@ -1,5 +1,9 @@ assign('"Description"', 'No description'); $sql = $query->sql($parameters); // Only test this case if using the default query builder - if(get_class(DB::get_conn()->getQueryBuilder()) === 'DBQueryBuilder') { + if(get_class(DB::get_conn()->getQueryBuilder()) === 'SilverStripe\\ORM\\Connect\\DBQueryBuilder') { $this->assertSQLEquals( 'INSERT INTO "SQLInsertTestBase" ("Title", "HasFun", "Age", "Description") VALUES (?, ?, ?, ?)', $sql @@ -59,7 +63,7 @@ class SQLInsertTest extends SapphireTest { )); $sql = $query->sql($parameters); // Only test this case if using the default query builder - if(get_class(DB::get_conn()->getQueryBuilder()) === 'DBQueryBuilder') { + if(get_class(DB::get_conn()->getQueryBuilder()) === 'SilverStripe\\ORM\\Connect\\DBQueryBuilder') { $this->assertSQLEquals( 'INSERT INTO "SQLInsertTestBase" ("Title", "Age", "Description") VALUES (?, ?, ?), (?, ?, ?)', $sql diff --git a/tests/model/SQLSelectTest.php b/tests/model/SQLSelectTest.php index 1c2c765e2..2b9ccaf13 100755 --- a/tests/model/SQLSelectTest.php +++ b/tests/model/SQLSelectTest.php @@ -1,5 +1,10 @@ "Varchar", "Meta" => "Varchar", "Common" => "Varchar", - "Date" => "SS_Datetime" + "Date" => "Datetime" ); } diff --git a/tests/model/SQLUpdateTest.php b/tests/model/SQLUpdateTest.php index c746c60d1..315e69a0c 100644 --- a/tests/model/SQLUpdateTest.php +++ b/tests/model/SQLUpdateTest.php @@ -1,5 +1,9 @@ assertEquals('5:15pm', $time->Nice()); - Config::inst()->update('SilverStripe\Model\FieldType\DBTime', 'nice_format', 'H:i:s'); + Config::inst()->update('SilverStripe\\ORM\\FieldType\\DBTime', 'nice_format', 'H:i:s'); $this->assertEquals('17:15:55', $time->Nice()); } diff --git a/tests/model/TransactionTest.php b/tests/model/TransactionTest.php index 1f48e7e0a..2af2d1751 100644 --- a/tests/model/TransactionTest.php +++ b/tests/model/TransactionTest.php @@ -1,4 +1,7 @@ write(); - $this->assertInstanceOf('RelationList', $object->Children()); + $this->assertInstanceOf('SilverStripe\\ORM\\RelationList', $object->Children()); $this->assertNotEquals($children, $object->Children(), 'Return should be a RelationList after first write'); - $this->assertInstanceOf('RelationList', $object->Siblings()); + $this->assertInstanceOf('SilverStripe\\ORM\\RelationList', $object->Siblings()); $this->assertNotEquals($siblings, $object->Siblings(), 'Return should be a RelationList after first write'); } @@ -242,7 +244,7 @@ class UnsavedRelationListTest_DataObject extends DataObject implements TestOnly private static $has_one = array( 'Parent' => 'UnsavedRelationListTest_DataObject', - 'RelatedObject' => 'DataObject' + 'RelatedObject' => 'SilverStripe\\ORM\\DataObject' ); private static $has_many = array( diff --git a/tests/model/ValidationExceptionTest.php b/tests/model/ValidationExceptionTest.php index 06d1559ee..020990739 100644 --- a/tests/model/ValidationExceptionTest.php +++ b/tests/model/ValidationExceptionTest.php @@ -1,5 +1,8 @@ array('Versioned'), + 'VersionableExtensionsTest_DataObject' => array('SilverStripe\\ORM\\Versioning\\Versioned'), ); protected $extraDataObjects = array( @@ -21,7 +26,7 @@ class VersionableExtensionsTest extends SapphireTest { Config::nest(); - VersionableExtensionsTest_DataObject::add_extension('Versioned'); + VersionableExtensionsTest_DataObject::add_extension('SilverStripe\\ORM\\Versioning\\Versioned'); VersionableExtensionsTest_DataObject::add_extension('VersionableExtensionsTest_Extension'); $cfg = Config::inst(); diff --git a/tests/model/VersionedOwnershipTest.php b/tests/model/VersionedOwnershipTest.php index bf98d8d2d..54fa8b7f7 100644 --- a/tests/model/VersionedOwnershipTest.php +++ b/tests/model/VersionedOwnershipTest.php @@ -1,5 +1,9 @@ getValue()); $date->modify("+{$minutes} minutes"); - SS_Datetime::set_mock_now($date->format('Y-m-d H:i:s')); + DBDatetime::set_mock_now($date->format('Y-m-d H:i:s')); } /** @@ -193,7 +197,7 @@ class VersionedOwnershipTest extends SapphireTest { // Check that stage record is ok /** @var VersionedOwnershipTest_Subclass $subclass2Stage */ - $subclass2Stage = \Versioned::get_by_stage('VersionedOwnershipTest_Subclass', 'Stage')->byID($subclass2ID); + $subclass2Stage = Versioned::get_by_stage('VersionedOwnershipTest_Subclass', 'Stage')->byID($subclass2ID); $this->assertDOSEquals( [ ['Title' => 'Related 2 Modified'], @@ -215,7 +219,7 @@ class VersionedOwnershipTest extends SapphireTest { // Live records are unchanged /** @var VersionedOwnershipTest_Subclass $subclass2Live */ - $subclass2Live = \Versioned::get_by_stage('VersionedOwnershipTest_Subclass', 'Live')->byID($subclass2ID); + $subclass2Live = Versioned::get_by_stage('VersionedOwnershipTest_Subclass', 'Live')->byID($subclass2ID); $this->assertDOSEquals( [ ['Title' => 'Related 2'], @@ -588,7 +592,7 @@ class VersionedOwnershipTest extends SapphireTest { */ class VersionedOwnershipTest_Object extends DataObject implements TestOnly { private static $extensions = array( - 'Versioned', + 'SilverStripe\\ORM\\Versioning\\Versioned', ); private static $db = array( @@ -630,7 +634,7 @@ class VersionedOwnershipTest_Subclass extends VersionedOwnershipTest_Object impl */ class VersionedOwnershipTest_Related extends DataObject implements TestOnly { private static $extensions = array( - 'Versioned', + 'SilverStripe\\ORM\\Versioning\\Versioned', ); private static $db = array( @@ -662,7 +666,7 @@ class VersionedOwnershipTest_Related extends DataObject implements TestOnly { */ class VersionedOwnershipTest_RelatedMany extends DataObject implements TestOnly { private static $extensions = array( - 'Versioned', + 'SilverStripe\\ORM\\Versioning\\Versioned', ); private static $db = array( @@ -684,7 +688,7 @@ class VersionedOwnershipTest_RelatedMany extends DataObject implements TestOnly class VersionedOwnershipTest_Attachment extends DataObject implements TestOnly { private static $extensions = array( - 'Versioned', + 'SilverStripe\\ORM\\Versioning\\Versioned', ); private static $db = array( @@ -707,7 +711,7 @@ class VersionedOwnershipTest_Attachment extends DataObject implements TestOnly { */ class VersionedOwnershipTest_Page extends DataObject implements TestOnly { private static $extensions = array( - 'Versioned', + 'SilverStripe\\ORM\\Versioning\\Versioned', ); private static $db = array( @@ -742,7 +746,7 @@ class VersionedOwnershipTest_Page extends DataObject implements TestOnly { */ class VersionedOwnershipTest_Banner extends DataObject implements TestOnly { private static $extensions = array( - 'Versioned', + 'SilverStripe\\ORM\\Versioning\\Versioned', ); private static $db = array( @@ -766,7 +770,7 @@ class VersionedOwnershipTest_Banner extends DataObject implements TestOnly { */ class VersionedOwnershipTest_CustomRelation extends DataObject implements TestOnly { private static $extensions = array( - 'Versioned', + 'SilverStripe\\ORM\\Versioning\\Versioned', ); private static $db = array( @@ -796,7 +800,7 @@ class VersionedOwnershipTest_CustomRelation extends DataObject implements TestOn */ class VersionedOwnershipTest_Image extends DataObject implements TestOnly { private static $extensions = array( - 'Versioned', + 'SilverStripe\\ORM\\Versioning\\Versioned', ); private static $db = array( diff --git a/tests/model/VersionedTest.php b/tests/model/VersionedTest.php index cc7d4a65f..eb12583cf 100644 --- a/tests/model/VersionedTest.php +++ b/tests/model/VersionedTest.php @@ -1,6 +1,12 @@ array('Versioned'), - "VersionedTest_WithIndexes" => array('Versioned'), + "VersionedTest_DataObject" => array('SilverStripe\\ORM\\Versioning\\Versioned'), + "VersionedTest_WithIndexes" => array('SilverStripe\\ORM\\Versioning\\Versioned'), ); public function testUniqueIndexes() { @@ -198,11 +204,11 @@ class VersionedTest extends SapphireTest { public function testVersionedFieldsAdded() { $obj = new VersionedTest_DataObject(); // Check that the Version column is added as a full-fledged column - $this->assertInstanceOf('SilverStripe\\Model\\FieldType\\DBInt', $obj->dbObject('Version')); + $this->assertInstanceOf('SilverStripe\\ORM\\FieldType\\DBInt', $obj->dbObject('Version')); $obj2 = new VersionedTest_Subclass(); // Check that the Version column is added as a full-fledged column - $this->assertInstanceOf('SilverStripe\\Model\\FieldType\\DBInt', $obj2->dbObject('Version')); + $this->assertInstanceOf('SilverStripe\\ORM\\FieldType\\DBInt', $obj2->dbObject('Version')); } public function testVersionedFieldsNotInCMS() { @@ -412,15 +418,15 @@ class VersionedTest extends SapphireTest { } /** - * Virtual "sleep" that doesn't actually slow execution, only advances SS_DateTime::now() + * Virtual "sleep" that doesn't actually slow execution, only advances DBDateTime::now() * * @param int $minutes */ protected function sleep($minutes) { - $now = SS_Datetime::now(); + $now = DBDatetime::now(); $date = DateTime::createFromFormat('Y-m-d H:i:s', $now->getValue()); $date->modify("+{$minutes} minutes"); - SS_Datetime::set_mock_now($date->format('Y-m-d H:i:s')); + DBDatetime::set_mock_now($date->format('Y-m-d H:i:s')); } /** @@ -936,7 +942,7 @@ class VersionedTest extends SapphireTest { "NewField" => "Varchar", )); - VersionedTest_RelatedWithoutVersion::add_extension("Versioned"); + VersionedTest_RelatedWithoutVersion::add_extension("SilverStripe\\ORM\\Versioning\\Versioned"); $this->resetDBSchema(true); $testData = new VersionedTest_RelatedWithoutVersion(); $testData->NewField = 'Test'; @@ -1050,7 +1056,7 @@ class VersionedTest_DataObject extends DataObject implements TestOnly { ); private static $extensions = array( - "Versioned", + "SilverStripe\\ORM\\Versioning\\Versioned", ); private static $has_one = array( @@ -1085,7 +1091,7 @@ class VersionedTest_WithIndexes extends DataObject implements TestOnly { 'UniqS' => 'Int', ); private static $extensions = array( - "Versioned" + "SilverStripe\\ORM\\Versioning\\Versioned" ); private static $indexes = array( 'UniqS_idx' => 'unique ("UniqS")', @@ -1147,7 +1153,7 @@ class VersionedTest_SingleStage extends DataObject implements TestOnly { ); private static $extensions = array( - 'Versioned("Versioned")' + 'SilverStripe\ORM\Versioning\Versioned("Versioned")' ); } @@ -1162,7 +1168,7 @@ class VersionedTest_PublicStage extends DataObject implements TestOnly { ); private static $extensions = array( - "Versioned" + "SilverStripe\\ORM\\Versioning\\Versioned" ); public function canView($member = null) { @@ -1200,7 +1206,7 @@ class VersionedTest_PublicViaExtension extends DataObject implements TestOnly { ); private static $extensions = array( - "Versioned", + "SilverStripe\\ORM\\Versioning\\Versioned", "VersionedTest_PublicExtension" ); } diff --git a/tests/search/FulltextFilterTest.php b/tests/search/FulltextFilterTest.php index faa54625c..3086bd5c4 100755 --- a/tests/search/FulltextFilterTest.php +++ b/tests/search/FulltextFilterTest.php @@ -1,5 +1,10 @@ "ENGINE=MyISAM", + MySQLSchemaManager::ID => "ENGINE=MyISAM", ); } diff --git a/tests/search/SearchContextTest.php b/tests/search/SearchContextTest.php index ad4f417bd..2f9d41e58 100644 --- a/tests/search/SearchContextTest.php +++ b/tests/search/SearchContextTest.php @@ -1,5 +1,7 @@ "SS_Datetime" + "CompletionDate" => "Datetime" ); private static $has_one = array( diff --git a/tests/search/SearchFilterApplyRelationTest.php b/tests/search/SearchFilterApplyRelationTest.php index 1ce1660e4..64c2c1ea1 100644 --- a/tests/search/SearchFilterApplyRelationTest.php +++ b/tests/search/SearchFilterApplyRelationTest.php @@ -1,5 +1,7 @@ update('Member', 'lock_out_after_incorrect_logins', 1); Config::inst()->update('Member', 'lock_out_delay_mins', 10); - SS_Datetime::set_mock_now('2016-04-18 00:00:00'); + DBDatetime::set_mock_now('2016-04-18 00:00:00'); $controller = new Security(); $form = new Form($controller, 'Form', new FieldList(), new FieldList()); diff --git a/tests/security/MemberCsvBulkLoaderTest.php b/tests/security/MemberCsvBulkLoaderTest.php index 71535a871..ccefb1e8d 100644 --- a/tests/security/MemberCsvBulkLoaderTest.php +++ b/tests/security/MemberCsvBulkLoaderTest.php @@ -1,4 +1,6 @@ assertTrue($passwords->current()->checkPassword('test1'), "Password test1 not found in MemberRecord"); $passwords->next(); - $this->assertInstanceOf('DataObject', $passwords->current()); + $this->assertInstanceOf('SilverStripe\\ORM\\DataObject', $passwords->current()); $this->assertTrue($passwords->current()->checkPassword('1nitialPassword'), "Password 1nitialPassword not found in MemberRecord"); @@ -913,7 +919,7 @@ class MemberTest extends FunctionalTest { $firstHash->ExpiryDate = '2000-01-01 00:00:00'; $firstHash->write(); - SS_DateTime::set_mock_now('1999-12-31 23:59:59'); + DBDateTime::set_mock_now('1999-12-31 23:59:59'); $response = $this->get( 'Security/login', @@ -939,7 +945,7 @@ class MemberTest extends FunctionalTest { $firstHash->ExpiryDate = '2000-01-01 00:00:00'; $firstHash->write(); - SS_DateTime::set_mock_now('2000-01-01 00:00:01'); + DBDateTime::set_mock_now('2000-01-01 00:00:01'); $response = $this->get( 'Security/login', @@ -952,7 +958,7 @@ class MemberTest extends FunctionalTest { ); $this->assertNotContains($message, $response->getBody()); $this->session()->inst_set('loggedInAs', null); - SS_Datetime::clear_mock_now(); + DBDatetime::clear_mock_now(); } public function testRememberMeMultipleDevices() { diff --git a/tests/security/PermissionCheckboxSetFieldTest.php b/tests/security/PermissionCheckboxSetFieldTest.php index 5d701d122..27dba3d5d 100644 --- a/tests/security/PermissionCheckboxSetFieldTest.php +++ b/tests/security/PermissionCheckboxSetFieldTest.php @@ -1,4 +1,6 @@ assertNotEmpty($castedData, 'Casted data was empty.'); - $this->assertInstanceOf('SilverStripe\Model\FieldType\DBField', $castedData, 'Casted data should be instance of DBField.'); + $this->assertInstanceOf('SilverStripe\\ORM\\FieldType\\DBField', $castedData, 'Casted data should be instance of DBField.'); $this->assertEquals($uncastedData, $castedData->getValue(), 'Casted and uncasted strings are not equal.'); } diff --git a/view/GenericTemplateGlobalProvider.php b/view/GenericTemplateGlobalProvider.php index 62f987992..13d3c584d 100644 --- a/view/GenericTemplateGlobalProvider.php +++ b/view/GenericTemplateGlobalProvider.php @@ -1,4 +1,7 @@ get($class, $field, Config::UNINHERITED);