mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Merge pull request #11032 from creative-commoners/pulls/5.1/remove-todo
MNT Remove TODO comments
This commit is contained in:
commit
0887170115
2
sake
2
sake
@ -90,7 +90,6 @@ if [ "$1" = "-start" ]; then
|
|||||||
url=$3
|
url=$3
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# TODO: Give a globally unique processname by including the projectname as well
|
|
||||||
processname=$2
|
processname=$2
|
||||||
|
|
||||||
daemon -n $processname -r -D $base --pidfile=$pidfile --stdout=$outlog --stderr=$errlog $sake $url
|
daemon -n $processname -r -D $base --pidfile=$pidfile --stdout=$outlog --stderr=$errlog $sake $url
|
||||||
@ -105,7 +104,6 @@ if [ "$1" = "-stop" ]; then
|
|||||||
if [ -f $pidfile ]; then
|
if [ -f $pidfile ]; then
|
||||||
echo "Stopping service $2"
|
echo "Stopping service $2"
|
||||||
|
|
||||||
# TODO: This is a bad way of killing the process
|
|
||||||
kill -KILL `cat $pidfile`
|
kill -KILL `cat $pidfile`
|
||||||
unlink $pidfile
|
unlink $pidfile
|
||||||
else
|
else
|
||||||
|
@ -25,10 +25,6 @@ use SilverStripe\Core\Injector\Injectable;
|
|||||||
*
|
*
|
||||||
* Please see http://webkit.org/blog/68/understanding-html-xml-and-xhtml/ for further information.
|
* Please see http://webkit.org/blog/68/understanding-html-xml-and-xhtml/ for further information.
|
||||||
*
|
*
|
||||||
* @todo Check for correct XHTML doctype in xhtml()
|
|
||||||
* @todo Allow for other HTML4 doctypes (e.g. Transitional) in html()
|
|
||||||
* @todo Make content replacement and doctype setting two separately configurable behaviours
|
|
||||||
*
|
|
||||||
* Some developers might know what they're doing and don't want ContentNegotiator messing with their
|
* Some developers might know what they're doing and don't want ContentNegotiator messing with their
|
||||||
* HTML4 doctypes, but still find it useful to have self-closing tags removed.
|
* HTML4 doctypes, but still find it useful to have self-closing tags removed.
|
||||||
*/
|
*/
|
||||||
@ -169,8 +165,6 @@ class ContentNegotiator
|
|||||||
* <input>, checked, selected).
|
* <input>, checked, selected).
|
||||||
*
|
*
|
||||||
* @param HTTPResponse $response
|
* @param HTTPResponse $response
|
||||||
*
|
|
||||||
* @todo Search for more xhtml replacement
|
|
||||||
*/
|
*/
|
||||||
public function xhtml(HTTPResponse $response)
|
public function xhtml(HTTPResponse $response)
|
||||||
{
|
{
|
||||||
|
@ -146,8 +146,6 @@ class Controller extends RequestHandler implements TemplateGlobalProvider
|
|||||||
/**
|
/**
|
||||||
* A bootstrap for the handleRequest method
|
* A bootstrap for the handleRequest method
|
||||||
*
|
*
|
||||||
* @todo setDataModel and setRequest are redundantly called in parent::handleRequest() - sort this out
|
|
||||||
*
|
|
||||||
* @param HTTPRequest $request
|
* @param HTTPRequest $request
|
||||||
*/
|
*/
|
||||||
protected function beforeHandleRequest(HTTPRequest $request)
|
protected function beforeHandleRequest(HTTPRequest $request)
|
||||||
|
@ -11,10 +11,6 @@ use LogicException;
|
|||||||
* This backend allows one to better test Cookie setting and separate cookie
|
* This backend allows one to better test Cookie setting and separate cookie
|
||||||
* handling from the core
|
* handling from the core
|
||||||
*
|
*
|
||||||
* @todo Create a config array for defaults (eg: httpOnly, secure, path, domain, expiry)
|
|
||||||
* @todo A getter for cookies that haven't been sent to the browser yet
|
|
||||||
* @todo Tests / a way to set the state without hacking with $_COOKIE
|
|
||||||
* @todo Store the meta information around cookie setting (path, domain, secure, etc)
|
|
||||||
*/
|
*/
|
||||||
class CookieJar implements Cookie_Backend
|
class CookieJar implements Cookie_Backend
|
||||||
{
|
{
|
||||||
|
@ -121,7 +121,6 @@ class HTTP
|
|||||||
$regExps[] = "/(<{$tagPrefix}[^>]*$attrib *= *)([^\"' ]*)( )/i";
|
$regExps[] = "/(<{$tagPrefix}[^>]*$attrib *= *)([^\"' ]*)( )/i";
|
||||||
}
|
}
|
||||||
// Replace css styles
|
// Replace css styles
|
||||||
// @todo - http://www.css3.info/preview/multiple-backgrounds/
|
|
||||||
$styles = ['background-image', 'background', 'list-style-image', 'list-style', 'content'];
|
$styles = ['background-image', 'background', 'list-style-image', 'list-style', 'content'];
|
||||||
foreach ($styles as $style) {
|
foreach ($styles as $style) {
|
||||||
$regExps[] = "/($style:[^;]*url *\\(\")([^\"]+)(\"\\))/i";
|
$regExps[] = "/($style:[^;]*url *\\(\")([^\"]+)(\"\\))/i";
|
||||||
|
@ -28,8 +28,6 @@ class HTTPCacheControlMiddleware implements HTTPMiddleware, Resettable
|
|||||||
/**
|
/**
|
||||||
* Generate response for the given request
|
* Generate response for the given request
|
||||||
*
|
*
|
||||||
* @todo Refactor HTTP::add_cache_headers() (e.g. etag handling) into this middleware
|
|
||||||
*
|
|
||||||
* @param HTTPRequest $request
|
* @param HTTPRequest $request
|
||||||
* @param callable $delegate
|
* @param callable $delegate
|
||||||
* @return HTTPResponse
|
* @return HTTPResponse
|
||||||
|
@ -18,7 +18,6 @@ use SilverStripe\View\ViewableData;
|
|||||||
* RSSFeed class
|
* RSSFeed class
|
||||||
*
|
*
|
||||||
* This class is used to create an RSS feed.
|
* This class is used to create an RSS feed.
|
||||||
* @todo Improve documentation
|
|
||||||
*/
|
*/
|
||||||
class RSSFeed extends ViewableData
|
class RSSFeed extends ViewableData
|
||||||
{
|
{
|
||||||
@ -215,8 +214,6 @@ class RSSFeed extends ViewableData
|
|||||||
/**
|
/**
|
||||||
* Output the feed to the browser.
|
* Output the feed to the browser.
|
||||||
*
|
*
|
||||||
* TODO: Pass $response object to ->outputToBrowser() to loosen dependence on global state for easier testing/prototyping so dev can inject custom HTTPResponse instance.
|
|
||||||
*
|
|
||||||
* @return DBHTMLText
|
* @return DBHTMLText
|
||||||
*/
|
*/
|
||||||
public function outputToBrowser()
|
public function outputToBrowser()
|
||||||
|
@ -171,8 +171,6 @@ class RequestHandler extends ViewableData
|
|||||||
// We used to put "handleAction" as the action on controllers, but (a) this could only be called when
|
// We used to put "handleAction" as the action on controllers, but (a) this could only be called when
|
||||||
// you had $Action in your rule, and (b) RequestHandler didn't have one. $Action is better
|
// you had $Action in your rule, and (b) RequestHandler didn't have one. $Action is better
|
||||||
if ($action == 'handleAction') {
|
if ($action == 'handleAction') {
|
||||||
// TODO Fix LeftAndMain usage
|
|
||||||
// Deprecation::notice('3.2.0', 'Calling handleAction directly is deprecated - use $Action instead');
|
|
||||||
$action = '$Action';
|
$action = '$Action';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,7 +140,6 @@ class SimpleResourceURLGenerator implements ResourceURLGenerator
|
|||||||
// All resources mapped directly to _resources/
|
// All resources mapped directly to _resources/
|
||||||
$relativePath = Path::join(RESOURCES_DIR, $relativePath);
|
$relativePath = Path::join(RESOURCES_DIR, $relativePath);
|
||||||
} elseif (stripos($relativePath ?? '', ManifestFileFinder::VENDOR_DIR . DIRECTORY_SEPARATOR) === 0) {
|
} elseif (stripos($relativePath ?? '', ManifestFileFinder::VENDOR_DIR . DIRECTORY_SEPARATOR) === 0) {
|
||||||
// @todo Non-public dir support will be removed in 5.0, so remove this block there
|
|
||||||
// If there is no public folder, map to _resources/ but trim leading vendor/ too (4.0 compat)
|
// If there is no public folder, map to _resources/ but trim leading vendor/ too (4.0 compat)
|
||||||
$relativePath = Path::join(
|
$relativePath = Path::join(
|
||||||
RESOURCES_DIR,
|
RESOURCES_DIR,
|
||||||
|
@ -114,7 +114,6 @@ abstract class BaseKernel implements Kernel
|
|||||||
$this->setModuleLoader($moduleLoader);
|
$this->setModuleLoader($moduleLoader);
|
||||||
|
|
||||||
// Config loader
|
// Config loader
|
||||||
// @todo refactor CoreConfigFactory
|
|
||||||
$configFactory = new CoreConfigFactory($manifestCacheFactory);
|
$configFactory = new CoreConfigFactory($manifestCacheFactory);
|
||||||
$configManifest = $configFactory->createRoot();
|
$configManifest = $configFactory->createRoot();
|
||||||
$configLoader = ConfigLoader::inst();
|
$configLoader = ConfigLoader::inst();
|
||||||
|
@ -82,8 +82,6 @@ class ClassInfo
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @todo Move this to SS_Database or DB
|
|
||||||
*
|
|
||||||
* @param string $tableName
|
* @param string $tableName
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
@ -130,8 +128,6 @@ class ClassInfo
|
|||||||
* Returns an array of the current class and all its ancestors and children
|
* Returns an array of the current class and all its ancestors and children
|
||||||
* which require a DB table.
|
* which require a DB table.
|
||||||
*
|
*
|
||||||
* @todo Move this into {@see DataObjectSchema}
|
|
||||||
*
|
|
||||||
* @param string|object $nameOrObject Class or object instance
|
* @param string|object $nameOrObject Class or object instance
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
|
@ -204,7 +204,6 @@ class Convert
|
|||||||
* Warning: Does not decode array keys
|
* Warning: Does not decode array keys
|
||||||
*
|
*
|
||||||
* @uses html2raw()
|
* @uses html2raw()
|
||||||
* @todo Currently &#xxx; entries are stripped; they should be converted
|
|
||||||
* @param mixed $val
|
* @param mixed $val
|
||||||
* @return array|string
|
* @return array|string
|
||||||
*/
|
*/
|
||||||
|
@ -217,8 +217,6 @@ trait Extensible
|
|||||||
* Clears any previously created singletons through {@link singleton()}
|
* Clears any previously created singletons through {@link singleton()}
|
||||||
* to avoid side-effects from stale extension information.
|
* to avoid side-effects from stale extension information.
|
||||||
*
|
*
|
||||||
* @todo Add support for removing extensions with parameters
|
|
||||||
*
|
|
||||||
* @param string $extension class name of an {@link Extension} subclass, without parameters
|
* @param string $extension class name of an {@link Extension} subclass, without parameters
|
||||||
*/
|
*/
|
||||||
public static function remove_extension($extension)
|
public static function remove_extension($extension)
|
||||||
|
@ -666,10 +666,6 @@ class Injector implements ContainerInterface
|
|||||||
/**
|
/**
|
||||||
* Inject $object with available objects from the service cache
|
* Inject $object with available objects from the service cache
|
||||||
*
|
*
|
||||||
* @todo Track all the existing objects that have had a service bound
|
|
||||||
* into them, so we can update that binding at a later point if needbe (ie
|
|
||||||
* if the managed service changes)
|
|
||||||
*
|
|
||||||
* @param object $object
|
* @param object $object
|
||||||
* The object to inject
|
* The object to inject
|
||||||
* @param string $asType
|
* @param string $asType
|
||||||
|
@ -12,10 +12,6 @@ use SilverStripe\View\ViewableData;
|
|||||||
*
|
*
|
||||||
* You can configure column-handling,
|
* You can configure column-handling,
|
||||||
*
|
*
|
||||||
* @todo Add support for adding/editing has_many relations.
|
|
||||||
* @todo Add support for deep chaining of relation properties (e.g. Player.Team.Stats.GoalCount)
|
|
||||||
* @todo Character conversion
|
|
||||||
*
|
|
||||||
* @see http://tools.ietf.org/html/rfc4180
|
* @see http://tools.ietf.org/html/rfc4180
|
||||||
* @author Ingo Schommer, Silverstripe Ltd. (<firstname>@silverstripe.com)
|
* @author Ingo Schommer, Silverstripe Ltd. (<firstname>@silverstripe.com)
|
||||||
*/
|
*/
|
||||||
@ -217,7 +213,6 @@ abstract class BulkLoader extends ViewableData
|
|||||||
* ]
|
* ]
|
||||||
* </code>
|
* </code>
|
||||||
*
|
*
|
||||||
* @todo Mix in custom column mappings
|
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
**/
|
**/
|
||||||
|
@ -11,8 +11,6 @@ use SilverStripe\View\ArrayData;
|
|||||||
* Encapsulates the result of a {@link BulkLoader} import
|
* Encapsulates the result of a {@link BulkLoader} import
|
||||||
* (usually through the {@link BulkLoader->processAll()} method).
|
* (usually through the {@link BulkLoader->processAll()} method).
|
||||||
*
|
*
|
||||||
* @todo Refactor to support lazy-loaded DataObjectSets once they are implemented.
|
|
||||||
*
|
|
||||||
* @author Ingo Schommer, Silverstripe Ltd. (<firstname>@silverstripe.com)
|
* @author Ingo Schommer, Silverstripe Ltd. (<firstname>@silverstripe.com)
|
||||||
*/
|
*/
|
||||||
class BulkLoader_Result implements \Countable
|
class BulkLoader_Result implements \Countable
|
||||||
|
@ -9,8 +9,6 @@ use SilverStripe\Core\Convert;
|
|||||||
/**
|
/**
|
||||||
* A basic HTML wrapper for stylish rendering of a development info view.
|
* A basic HTML wrapper for stylish rendering of a development info view.
|
||||||
* Used to output error messages, and test results.
|
* Used to output error messages, and test results.
|
||||||
*
|
|
||||||
* @todo Perhaps DebugView should be an interface / ABC, implemented by HTMLDebugView and CliDebugView?
|
|
||||||
*/
|
*/
|
||||||
class CliDebugView extends DebugView
|
class CliDebugView extends DebugView
|
||||||
{
|
{
|
||||||
|
@ -74,8 +74,6 @@ class ViewableDataContains extends Constraint implements TestOnly
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a string representation of the object.
|
* Returns a string representation of the object.
|
||||||
*
|
|
||||||
* @todo: add representation for more than one match
|
|
||||||
*/
|
*/
|
||||||
public function toString(): string
|
public function toString(): string
|
||||||
{
|
{
|
||||||
|
@ -15,9 +15,6 @@ use SilverStripe\ORM\DataObject;
|
|||||||
* input.
|
* input.
|
||||||
*
|
*
|
||||||
* @see http://tools.ietf.org/html/rfc4180
|
* @see http://tools.ietf.org/html/rfc4180
|
||||||
*
|
|
||||||
* @todo Support for deleting existing records not matched in the import
|
|
||||||
* (through relation checks)
|
|
||||||
*/
|
*/
|
||||||
class CsvBulkLoader extends BulkLoader
|
class CsvBulkLoader extends BulkLoader
|
||||||
{
|
{
|
||||||
@ -160,9 +157,6 @@ class CsvBulkLoader extends BulkLoader
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @todo Better messages for relation checks and duplicate detection
|
|
||||||
* Note that columnMap isn't used.
|
|
||||||
*
|
|
||||||
* @param array $record
|
* @param array $record
|
||||||
* @param array $columnMap
|
* @param array $columnMap
|
||||||
* @param BulkLoader_Result $results
|
* @param BulkLoader_Result $results
|
||||||
@ -261,7 +255,6 @@ class CsvBulkLoader extends BulkLoader
|
|||||||
$obj->write();
|
$obj->write();
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo better message support
|
|
||||||
$message = '';
|
$message = '';
|
||||||
|
|
||||||
// save to results
|
// save to results
|
||||||
@ -289,8 +282,6 @@ class CsvBulkLoader extends BulkLoader
|
|||||||
* Find an existing objects based on one or more uniqueness columns
|
* Find an existing objects based on one or more uniqueness columns
|
||||||
* specified via {@link self::$duplicateChecks}.
|
* specified via {@link self::$duplicateChecks}.
|
||||||
*
|
*
|
||||||
* @todo support $columnMap
|
|
||||||
*
|
|
||||||
* @param array $record CSV data column
|
* @param array $record CSV data column
|
||||||
* @param array $columnMap
|
* @param array $columnMap
|
||||||
* @return DataObject
|
* @return DataObject
|
||||||
|
@ -25,9 +25,6 @@ use SilverStripe\Security\Security;
|
|||||||
* Errors handled by this class are passed along to {@link SS_Log}.
|
* Errors handled by this class are passed along to {@link SS_Log}.
|
||||||
* For configuration information, see the {@link SS_Log}
|
* For configuration information, see the {@link SS_Log}
|
||||||
* class documentation.
|
* class documentation.
|
||||||
*
|
|
||||||
* @todo add support for user defined config: Debug::die_on_notice(true | false)
|
|
||||||
* @todo better way of figuring out the error context to display in highlighted source
|
|
||||||
*/
|
*/
|
||||||
class Debug
|
class Debug
|
||||||
{
|
{
|
||||||
@ -212,7 +209,6 @@ class Debug
|
|||||||
// being called again.
|
// being called again.
|
||||||
// This basically calls Permission::checkMember($_SESSION['loggedInAs'], 'ADMIN');
|
// This basically calls Permission::checkMember($_SESSION['loggedInAs'], 'ADMIN');
|
||||||
|
|
||||||
// @TODO - Rewrite safely using DataList::filter
|
|
||||||
$memberID = $_SESSION['loggedInAs'];
|
$memberID = $_SESSION['loggedInAs'];
|
||||||
$permission = DB::prepared_query(
|
$permission = DB::prepared_query(
|
||||||
'
|
'
|
||||||
|
@ -19,11 +19,6 @@ use Exception;
|
|||||||
*
|
*
|
||||||
* Configured in framework/_config/dev.yml, with the config key registeredControllers being
|
* Configured in framework/_config/dev.yml, with the config key registeredControllers being
|
||||||
* used to generate the list of links for /dev.
|
* used to generate the list of links for /dev.
|
||||||
*
|
|
||||||
* @todo documentation for how to add new unit tests and tasks
|
|
||||||
* @todo do we need buildDefaults and generatesecuretoken? if so, register in the list
|
|
||||||
* @todo cleanup errors() it's not even an allowed action, so can go
|
|
||||||
* @todo cleanup index() html building
|
|
||||||
*/
|
*/
|
||||||
class DevelopmentAdmin extends Controller
|
class DevelopmentAdmin extends Controller
|
||||||
{
|
{
|
||||||
|
@ -104,9 +104,6 @@ class ExtensionTestState implements TestState
|
|||||||
|
|
||||||
public function tearDownOnce($class)
|
public function tearDownOnce($class)
|
||||||
{
|
{
|
||||||
// @todo: This isn't strictly necessary to restore extensions, but only to ensure that
|
|
||||||
// Object::$extra_methods is properly flushed. This should be replaced with a simple
|
|
||||||
// flush mechanism for each $class.
|
|
||||||
/** @var string|DataObject $dataClass */
|
/** @var string|DataObject $dataClass */
|
||||||
|
|
||||||
// Remove extensions added for testing
|
// Remove extensions added for testing
|
||||||
|
@ -36,11 +36,6 @@ use SilverStripe\View\ArrayData;
|
|||||||
* the database records.
|
* the database records.
|
||||||
* - If the field name matches a database field, a comma-separated list of values will be saved to that field. The
|
* - If the field name matches a database field, a comma-separated list of values will be saved to that field. The
|
||||||
* keys can be text or numbers.
|
* keys can be text or numbers.
|
||||||
*
|
|
||||||
* @todo Document the different source data that can be used
|
|
||||||
* with this form field - e.g ComponentSet, ArrayList,
|
|
||||||
* array. Is it also appropriate to accept so many different
|
|
||||||
* types of data when just using an array would be appropriate?
|
|
||||||
*/
|
*/
|
||||||
class CheckboxSetField extends MultiSelectField
|
class CheckboxSetField extends MultiSelectField
|
||||||
{
|
{
|
||||||
@ -48,9 +43,6 @@ class CheckboxSetField extends MultiSelectField
|
|||||||
protected $schemaDataType = FormField::SCHEMA_DATA_TYPE_MULTISELECT;
|
protected $schemaDataType = FormField::SCHEMA_DATA_TYPE_MULTISELECT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @todo Explain different source data that can be used with this field,
|
|
||||||
* e.g. SQLMap, ArrayList or an array.
|
|
||||||
*
|
|
||||||
* @param array $properties
|
* @param array $properties
|
||||||
* @return DBHTMLText
|
* @return DBHTMLText
|
||||||
*/
|
*/
|
||||||
|
@ -121,8 +121,6 @@ class CompositeField extends FormField
|
|||||||
* If the CompositeField doesn't have a name, but we still want the ID/name to be set.
|
* If the CompositeField doesn't have a name, but we still want the ID/name to be set.
|
||||||
* This code generates the ID from the nested children.
|
* This code generates the ID from the nested children.
|
||||||
*
|
*
|
||||||
* @todo this is temporary, and should be removed when FormTemplateHelper is updated to handle ID for CompositeFields with no name
|
|
||||||
*
|
|
||||||
* @return String $name
|
* @return String $name
|
||||||
*/
|
*/
|
||||||
public function getName()
|
public function getName()
|
||||||
|
@ -9,8 +9,6 @@ use SilverStripe\ORM\FieldType\DBCurrency;
|
|||||||
* Limited to US-centric formats, including a hardcoded currency
|
* Limited to US-centric formats, including a hardcoded currency
|
||||||
* symbol and decimal separators.
|
* symbol and decimal separators.
|
||||||
* See {@link MoneyField} for a more flexible implementation.
|
* See {@link MoneyField} for a more flexible implementation.
|
||||||
*
|
|
||||||
* @todo Add localization support, see http://open.silverstripe.com/ticket/2931
|
|
||||||
*/
|
*/
|
||||||
class CurrencyField extends TextField
|
class CurrencyField extends TextField
|
||||||
{
|
{
|
||||||
|
@ -67,7 +67,6 @@ class DefaultFormFactory implements FormFactory
|
|||||||
protected function getFormFields(RequestHandler $controller = null, $name, $context = [])
|
protected function getFormFields(RequestHandler $controller = null, $name, $context = [])
|
||||||
{
|
{
|
||||||
// Fall back to standard "getCMSFields" which itself uses the FormScaffolder as a fallback
|
// Fall back to standard "getCMSFields" which itself uses the FormScaffolder as a fallback
|
||||||
// @todo Deprecate or formalise support for getCMSFields()
|
|
||||||
$fields = $context['Record']->getCMSFields();
|
$fields = $context['Record']->getCMSFields();
|
||||||
$this->invokeWithExtensions('updateFormFields', $fields, $controller, $name, $context);
|
$this->invokeWithExtensions('updateFormFields', $fields, $controller, $name, $context);
|
||||||
return $fields;
|
return $fields;
|
||||||
@ -83,7 +82,6 @@ class DefaultFormFactory implements FormFactory
|
|||||||
*/
|
*/
|
||||||
protected function getFormActions(RequestHandler $controller = null, $name, $context = [])
|
protected function getFormActions(RequestHandler $controller = null, $name, $context = [])
|
||||||
{
|
{
|
||||||
// @todo Deprecate or formalise support for getCMSActions()
|
|
||||||
$actions = $context['Record']->getCMSActions();
|
$actions = $context['Record']->getCMSActions();
|
||||||
$this->invokeWithExtensions('updateFormActions', $actions, $controller, $name, $context);
|
$this->invokeWithExtensions('updateFormActions', $actions, $controller, $name, $context);
|
||||||
return $actions;
|
return $actions;
|
||||||
|
@ -105,9 +105,6 @@ class FieldGroup extends CompositeField
|
|||||||
* Returns the name (ID) for the element.
|
* Returns the name (ID) for the element.
|
||||||
* In some cases the FieldGroup doesn't have a title, but we still want
|
* In some cases the FieldGroup doesn't have a title, but we still want
|
||||||
* the ID / name to be set. This code, generates the ID from the nested children
|
* the ID / name to be set. This code, generates the ID from the nested children
|
||||||
*
|
|
||||||
* TODO this is temporary, and should be removed when FormTemplateHelper is updated to handle ID
|
|
||||||
* for CompositeFields with no name
|
|
||||||
*/
|
*/
|
||||||
public function getName()
|
public function getName()
|
||||||
{
|
{
|
||||||
|
@ -411,8 +411,6 @@ class FieldList extends ArrayList
|
|||||||
/**
|
/**
|
||||||
* Returns the specified tab object, creating it if necessary.
|
* Returns the specified tab object, creating it if necessary.
|
||||||
*
|
*
|
||||||
* @todo Support recursive creation of TabSets
|
|
||||||
*
|
|
||||||
* @param string $tabName The tab to return, in the form "Tab.Subtab.Subsubtab".
|
* @param string $tabName The tab to return, in the form "Tab.Subtab.Subsubtab".
|
||||||
* Caution: Does not recursively create TabSet instances, you need to make sure everything
|
* Caution: Does not recursively create TabSet instances, you need to make sure everything
|
||||||
* up until the last tab in the chain exists.
|
* up until the last tab in the chain exists.
|
||||||
@ -462,8 +460,6 @@ class FieldList extends ArrayList
|
|||||||
* Returns a named field.
|
* Returns a named field.
|
||||||
* You can use dot syntax to get fields from child composite fields
|
* You can use dot syntax to get fields from child composite fields
|
||||||
*
|
*
|
||||||
* @todo Implement similarly to dataFieldByName() to support nested sets - or merge with dataFields()
|
|
||||||
*
|
|
||||||
* @param string $name
|
* @param string $name
|
||||||
* @return FormField|null
|
* @return FormField|null
|
||||||
*/
|
*/
|
||||||
|
@ -123,8 +123,6 @@ class FormField extends RequestHandler
|
|||||||
* Adds a title attribute to the markup.
|
* Adds a title attribute to the markup.
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*
|
|
||||||
* @todo Implement in all subclasses
|
|
||||||
*/
|
*/
|
||||||
protected $description;
|
protected $description;
|
||||||
|
|
||||||
@ -1425,8 +1423,6 @@ class FormField extends RequestHandler
|
|||||||
*
|
*
|
||||||
* @param array $schemaData - The data to be merged with $this->schemaData.
|
* @param array $schemaData - The data to be merged with $this->schemaData.
|
||||||
* @return FormField
|
* @return FormField
|
||||||
*
|
|
||||||
* @todo Add deep merging of arrays like `data` and `attributes`.
|
|
||||||
*/
|
*/
|
||||||
public function setSchemaData($schemaData = [])
|
public function setSchemaData($schemaData = [])
|
||||||
{
|
{
|
||||||
@ -1447,8 +1443,6 @@ class FormField extends RequestHandler
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @todo Throw exception if value is missing, once a form field schema is mandatory across the CMS
|
|
||||||
*
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getSchemaDataType()
|
public function getSchemaDataType()
|
||||||
@ -1501,8 +1495,6 @@ class FormField extends RequestHandler
|
|||||||
*
|
*
|
||||||
* @param array $schemaState The data to be merged with $this->schemaData.
|
* @param array $schemaState The data to be merged with $this->schemaData.
|
||||||
* @return FormField
|
* @return FormField
|
||||||
*
|
|
||||||
* @todo Add deep merging of arrays like `data` and `attributes`.
|
|
||||||
*/
|
*/
|
||||||
public function setSchemaState($schemaState = [])
|
public function setSchemaState($schemaState = [])
|
||||||
{
|
{
|
||||||
@ -1529,7 +1521,6 @@ class FormField extends RequestHandler
|
|||||||
* Includes validation data if the field is associated to a {@link Form},
|
* Includes validation data if the field is associated to a {@link Form},
|
||||||
* and {@link Form->validate()} has been called.
|
* and {@link Form->validate()} has been called.
|
||||||
*
|
*
|
||||||
* @todo Make form / field messages not always stored as html; Store value / casting as separate values.
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getSchemaStateDefaults()
|
public function getSchemaStateDefaults()
|
||||||
|
@ -137,7 +137,6 @@ class FormRequestHandler extends RequestHandler
|
|||||||
$this->form->loadDataFrom($vars, true, $allowedFields);
|
$this->form->loadDataFrom($vars, true, $allowedFields);
|
||||||
|
|
||||||
// Protection against CSRF attacks
|
// Protection against CSRF attacks
|
||||||
// @todo Move this to SecurityTokenField::validate()
|
|
||||||
$token = $this->form->getSecurityToken();
|
$token = $this->form->getSecurityToken();
|
||||||
if (! $token->checkRequest($request)) {
|
if (! $token->checkRequest($request)) {
|
||||||
$securityID = $token->getName();
|
$securityID = $token->getName();
|
||||||
|
@ -36,16 +36,12 @@ class FormScaffolder
|
|||||||
/**
|
/**
|
||||||
* @var array $restrictFields Numeric array of a field name whitelist.
|
* @var array $restrictFields Numeric array of a field name whitelist.
|
||||||
* If left blank, all fields from {@link DataObject->db()} will be included.
|
* If left blank, all fields from {@link DataObject->db()} will be included.
|
||||||
*
|
|
||||||
* @todo Implement restrictions for has_many and many_many relations.
|
|
||||||
*/
|
*/
|
||||||
public $restrictFields;
|
public $restrictFields;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array $fieldClasses Optional mapping of fieldnames to subclasses of {@link FormField}.
|
* @var array $fieldClasses Optional mapping of fieldnames to subclasses of {@link FormField}.
|
||||||
* By default the scaffolder will determine the field instance by {@link DBField::scaffoldFormField()}.
|
* By default the scaffolder will determine the field instance by {@link DBField::scaffoldFormField()}.
|
||||||
*
|
|
||||||
* @todo Implement fieldClasses for has_many and many_many relations
|
|
||||||
*/
|
*/
|
||||||
public $fieldClasses;
|
public $fieldClasses;
|
||||||
|
|
||||||
@ -87,7 +83,6 @@ class FormScaffolder
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo Pass localized title
|
|
||||||
if ($this->fieldClasses && isset($this->fieldClasses[$fieldName])) {
|
if ($this->fieldClasses && isset($this->fieldClasses[$fieldName])) {
|
||||||
$fieldClass = $this->fieldClasses[$fieldName];
|
$fieldClass = $this->fieldClasses[$fieldName];
|
||||||
$fieldObject = new $fieldClass($fieldName);
|
$fieldObject = new $fieldClass($fieldName);
|
||||||
|
@ -342,8 +342,6 @@ class GridField extends FormField
|
|||||||
/**
|
/**
|
||||||
* Cast an arbitrary value with the help of a $castingDefinition.
|
* Cast an arbitrary value with the help of a $castingDefinition.
|
||||||
*
|
*
|
||||||
* @todo refactor this into GridFieldComponent
|
|
||||||
*
|
|
||||||
* @param mixed $value
|
* @param mixed $value
|
||||||
* @param string|array $castingDefinition
|
* @param string|array $castingDefinition
|
||||||
*
|
*
|
||||||
@ -555,8 +553,6 @@ class GridField extends FormField
|
|||||||
];
|
];
|
||||||
$fragmentDeferred = [];
|
$fragmentDeferred = [];
|
||||||
|
|
||||||
// TODO: Break the below into separate reducer methods
|
|
||||||
|
|
||||||
// Continue looping if any placeholders exist
|
// Continue looping if any placeholders exist
|
||||||
while (array_filter($content ?? [], function ($value) {
|
while (array_filter($content ?? [], function ($value) {
|
||||||
return preg_match(self::FRAGMENT_REGEX ?? '', $value ?? '');
|
return preg_match(self::FRAGMENT_REGEX ?? '', $value ?? '');
|
||||||
@ -1182,8 +1178,6 @@ class GridField extends FormField
|
|||||||
* Custom request handler that will check component handlers before proceeding to the default
|
* Custom request handler that will check component handlers before proceeding to the default
|
||||||
* implementation.
|
* implementation.
|
||||||
*
|
*
|
||||||
* @todo copy less code from RequestHandler.
|
|
||||||
*
|
|
||||||
* @param HTTPRequest $request
|
* @param HTTPRequest $request
|
||||||
* @return array|RequestHandler|HTTPResponse|string
|
* @return array|RequestHandler|HTTPResponse|string
|
||||||
* @throws HTTPResponse_Exception
|
* @throws HTTPResponse_Exception
|
||||||
|
@ -169,7 +169,6 @@ class GridFieldDetailForm_ItemRequest extends RequestHandler
|
|||||||
} else {
|
} else {
|
||||||
// If not requested by ajax, we need to render it within the controller context+template
|
// If not requested by ajax, we need to render it within the controller context+template
|
||||||
return $controller->customise([
|
return $controller->customise([
|
||||||
// TODO CMS coupling
|
|
||||||
'Content' => $return,
|
'Content' => $return,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@ -179,10 +178,6 @@ class GridFieldDetailForm_ItemRequest extends RequestHandler
|
|||||||
* Builds an item edit form. The arguments to getCMSFields() are the popupController and
|
* Builds an item edit form. The arguments to getCMSFields() are the popupController and
|
||||||
* popupFormName, however this is an experimental API and may change.
|
* popupFormName, however this is an experimental API and may change.
|
||||||
*
|
*
|
||||||
* @todo In the future, we will probably need to come up with a tigher object representing a partially
|
|
||||||
* complete controller with gaps for extra functionality. This, for example, would be a better way
|
|
||||||
* of letting Security/login put its log-in form inside a UI specified elsewhere.
|
|
||||||
*
|
|
||||||
* @return Form|HTTPResponse
|
* @return Form|HTTPResponse
|
||||||
*/
|
*/
|
||||||
public function ItemEditForm()
|
public function ItemEditForm()
|
||||||
@ -266,12 +261,10 @@ class GridFieldDetailForm_ItemRequest extends RequestHandler
|
|||||||
$form->loadDataFrom(['ManyMany' => $extraData]);
|
$form->loadDataFrom(['ManyMany' => $extraData]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO Coupling with CMS
|
|
||||||
$toplevelController = $this->getToplevelController();
|
$toplevelController = $this->getToplevelController();
|
||||||
if ($toplevelController && $toplevelController instanceof LeftAndMain) {
|
if ($toplevelController && $toplevelController instanceof LeftAndMain) {
|
||||||
// Always show with base template (full width, no other panels),
|
// Always show with base template (full width, no other panels),
|
||||||
// regardless of overloaded CMS controller templates.
|
// regardless of overloaded CMS controller templates.
|
||||||
// TODO Allow customization, e.g. to display an edit form alongside a search form from the CMS controller
|
|
||||||
$form->setTemplate([
|
$form->setTemplate([
|
||||||
'type' => 'Includes',
|
'type' => 'Includes',
|
||||||
'SilverStripe\\Admin\\LeftAndMain_EditForm',
|
'SilverStripe\\Admin\\LeftAndMain_EditForm',
|
||||||
@ -464,7 +457,6 @@ class GridFieldDetailForm_ItemRequest extends RequestHandler
|
|||||||
|
|
||||||
protected function getBackLink()
|
protected function getBackLink()
|
||||||
{
|
{
|
||||||
// TODO Coupling with CMS
|
|
||||||
$backlink = '';
|
$backlink = '';
|
||||||
$toplevelController = $this->getToplevelController();
|
$toplevelController = $this->getToplevelController();
|
||||||
if ($toplevelController && $toplevelController instanceof LeftAndMain) {
|
if ($toplevelController && $toplevelController instanceof LeftAndMain) {
|
||||||
|
@ -209,7 +209,6 @@ class GridFieldExportButton extends AbstractGridFieldComponent implements GridFi
|
|||||||
|
|
||||||
$items = $gridField->getManipulatedList();
|
$items = $gridField->getManipulatedList();
|
||||||
|
|
||||||
// @todo should GridFieldComponents change behaviour based on whether others are available in the config?
|
|
||||||
foreach ($gridField->getConfig()->getComponents() as $component) {
|
foreach ($gridField->getConfig()->getComponents() as $component) {
|
||||||
if ($component instanceof GridFieldFilterHeader || $component instanceof GridFieldSortableHeader) {
|
if ($component instanceof GridFieldFilterHeader || $component instanceof GridFieldSortableHeader) {
|
||||||
$items = $component->getManipulatedData($gridField, $items);
|
$items = $component->getManipulatedData($gridField, $items);
|
||||||
|
@ -55,8 +55,6 @@ use SilverStripe\View\ArrayData;
|
|||||||
class GroupedDropdownField extends DropdownField
|
class GroupedDropdownField extends DropdownField
|
||||||
{
|
{
|
||||||
|
|
||||||
// TODO remove this when GroupedDropdownField is implemented
|
|
||||||
// This should be one of SCHEMA_DATA_TYPE_* constants instead
|
|
||||||
protected $schemaDataType = 'GroupedDropdownField';
|
protected $schemaDataType = 'GroupedDropdownField';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -17,7 +17,6 @@ use SilverStripe\ORM\DataObjectInterface;
|
|||||||
class MoneyField extends FormField
|
class MoneyField extends FormField
|
||||||
{
|
{
|
||||||
|
|
||||||
// TODO replace with `FormField::SCHEMA_DATA_TYPE_TEXT` when MoneyField is implemented
|
|
||||||
protected $schemaDataType = 'MoneyField';
|
protected $schemaDataType = 'MoneyField';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -90,7 +90,6 @@ class SelectionGroup extends CompositeField
|
|||||||
}
|
}
|
||||||
|
|
||||||
$itemID = $this->ID() . '_' . (++$count);
|
$itemID = $this->ID() . '_' . (++$count);
|
||||||
// @todo Move into SelectionGroup_Item.ss template at some point.
|
|
||||||
$extra = [
|
$extra = [
|
||||||
"RadioButton" => DBField::create_field('HTMLFragment', HTML::createTag(
|
"RadioButton" => DBField::create_field('HTMLFragment', HTML::createTag(
|
||||||
'input',
|
'input',
|
||||||
|
@ -14,8 +14,6 @@ use SilverStripe\ORM\FieldType\DBTime;
|
|||||||
* # Localization
|
* # Localization
|
||||||
*
|
*
|
||||||
* See {@link DateField}
|
* See {@link DateField}
|
||||||
*
|
|
||||||
* @todo Timezone support
|
|
||||||
*/
|
*/
|
||||||
class TimeField extends TextField
|
class TimeField extends TextField
|
||||||
{
|
{
|
||||||
|
@ -126,7 +126,6 @@ class DebugViewFriendlyErrorFormatter implements FormatterInterface
|
|||||||
*/
|
*/
|
||||||
public function output($statusCode)
|
public function output($statusCode)
|
||||||
{
|
{
|
||||||
// TODO: Refactor into a content-type option
|
|
||||||
if (Director::is_ajax()) {
|
if (Director::is_ajax()) {
|
||||||
return $this->getTitle();
|
return $this->getTitle();
|
||||||
}
|
}
|
||||||
|
@ -165,8 +165,6 @@ class HTTPOutputHandler extends AbstractProcessingHandler
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: This coupling isn't ideal
|
|
||||||
// See https://github.com/silverstripe/silverstripe-framework/issues/4484
|
|
||||||
if (Controller::has_curr()) {
|
if (Controller::has_curr()) {
|
||||||
$response = Controller::curr()->getResponse();
|
$response = Controller::curr()->getResponse();
|
||||||
} else {
|
} else {
|
||||||
|
@ -37,7 +37,6 @@ abstract class DBConnector
|
|||||||
* it will be called on the object itself and as such can be overridden in a subclass.
|
* it will be called on the object itself and as such can be overridden in a subclass.
|
||||||
* Subclasses should run all errors through this function.
|
* Subclasses should run all errors through this function.
|
||||||
*
|
*
|
||||||
* @todo hook this into a more well-structured error handling system.
|
|
||||||
* @param string $msg The error message.
|
* @param string $msg The error message.
|
||||||
* @param integer $errorLevel The level of the error to throw.
|
* @param integer $errorLevel The level of the error to throw.
|
||||||
* @param string $sql The SQL related to this query
|
* @param string $sql The SQL related to this query
|
||||||
|
@ -350,8 +350,6 @@ abstract class DBSchemaManager
|
|||||||
* Generate the following table in the database, modifying whatever already exists
|
* Generate the following table in the database, modifying whatever already exists
|
||||||
* as necessary.
|
* as necessary.
|
||||||
*
|
*
|
||||||
* @todo Change detection for CREATE TABLE $options other than "Engine"
|
|
||||||
*
|
|
||||||
* @param string $table The name of the table
|
* @param string $table The name of the table
|
||||||
* @param array $fieldSchema A list of the fields to create, in the same form as DataObject::$db
|
* @param array $fieldSchema A list of the fields to create, in the same form as DataObject::$db
|
||||||
* @param array $indexSchema A list of indexes to create. See {@link requireIndex()}
|
* @param array $indexSchema A list of indexes to create. See {@link requireIndex()}
|
||||||
@ -669,7 +667,6 @@ abstract class DBSchemaManager
|
|||||||
*/
|
*/
|
||||||
public function requireField($table, $field, $spec)
|
public function requireField($table, $field, $spec)
|
||||||
{
|
{
|
||||||
//TODO: this is starting to get extremely fragmented.
|
|
||||||
//There are two different versions of $spec floating around, and their content changes depending
|
//There are two different versions of $spec floating around, and their content changes depending
|
||||||
//on how they are structured. This needs to be tidied up.
|
//on how they are structured. This needs to be tidied up.
|
||||||
$fieldValue = null;
|
$fieldValue = null;
|
||||||
@ -687,7 +684,6 @@ abstract class DBSchemaManager
|
|||||||
|
|
||||||
// Collations didn't come in until MySQL 4.1. Anything earlier will throw a syntax error if you try and use
|
// Collations didn't come in until MySQL 4.1. Anything earlier will throw a syntax error if you try and use
|
||||||
// collations.
|
// collations.
|
||||||
// TODO: move this to the MySQLDatabase file, or drop it altogether?
|
|
||||||
if (!$this->database->supportsCollations()) {
|
if (!$this->database->supportsCollations()) {
|
||||||
$spec = preg_replace('/ *character set [^ ]+( collate [^ ]+)?( |$)/', '\\2', $spec ?? '');
|
$spec = preg_replace('/ *character set [^ ]+( collate [^ ]+)?( |$)/', '\\2', $spec ?? '');
|
||||||
}
|
}
|
||||||
@ -974,7 +970,6 @@ abstract class DBSchemaManager
|
|||||||
* @param string $tableName The name of the table.
|
* @param string $tableName The name of the table.
|
||||||
* @param string $indexName The name of the index.
|
* @param string $indexName The name of the index.
|
||||||
* @param array $indexSpec The specification of the index, see Database::requireIndex() for more details.
|
* @param array $indexSpec The specification of the index, see Database::requireIndex() for more details.
|
||||||
* @todo Find out where this is called from - Is it even used? Aren't indexes always dropped and re-added?
|
|
||||||
*/
|
*/
|
||||||
abstract public function alterIndex($tableName, $indexName, $indexSpec);
|
abstract public function alterIndex($tableName, $indexName, $indexSpec);
|
||||||
|
|
||||||
|
@ -563,7 +563,6 @@ abstract class Database
|
|||||||
*/
|
*/
|
||||||
public function concatOperator()
|
public function concatOperator()
|
||||||
{
|
{
|
||||||
// @todo Make ' + ' in mssql
|
|
||||||
return ' || ';
|
return ' || ';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -714,7 +713,6 @@ abstract class Database
|
|||||||
* will be an extension name, and the value the configuration for that extension. This
|
* will be an extension name, and the value the configuration for that extension. This
|
||||||
* could be one of partitions, tablespaces, or clustering
|
* could be one of partitions, tablespaces, or clustering
|
||||||
* @return boolean Flag indicating support for all of the above
|
* @return boolean Flag indicating support for all of the above
|
||||||
* @todo Write test cases
|
|
||||||
*/
|
*/
|
||||||
public function supportsExtensions($extensions)
|
public function supportsExtensions($extensions)
|
||||||
{
|
{
|
||||||
|
@ -471,8 +471,6 @@ class DB
|
|||||||
* That's a limitation of the system that's due to it being written for {@link DataObject::write()},
|
* That's a limitation of the system that's due to it being written for {@link DataObject::write()},
|
||||||
* which needs to do a single write on a number of different tables.
|
* which needs to do a single write on a number of different tables.
|
||||||
*
|
*
|
||||||
* @todo Update this to support paramaterised queries
|
|
||||||
*
|
|
||||||
* @param array $manipulation
|
* @param array $manipulation
|
||||||
*/
|
*/
|
||||||
public static function manipulate($manipulation)
|
public static function manipulate($manipulation)
|
||||||
|
@ -472,8 +472,6 @@ class DataList extends ViewableData implements SS_List, Filterable, Sortable, Li
|
|||||||
* E.g. ->filter('Field:not', 'value) will generate '... OR "Field" IS NULL', and
|
* E.g. ->filter('Field:not', 'value) will generate '... OR "Field" IS NULL', and
|
||||||
* ->filter('Field:not', null) will generate '"Field" IS NOT NULL'
|
* ->filter('Field:not', null) will generate '"Field" IS NOT NULL'
|
||||||
*
|
*
|
||||||
* @todo extract the sql from $customQuery into a SQLGenerator class
|
|
||||||
*
|
|
||||||
* @param string|array Escaped SQL statement. If passed as array, all keys and values will be escaped internally
|
* @param string|array Escaped SQL statement. If passed as array, all keys and values will be escaped internally
|
||||||
* @return $this
|
* @return $this
|
||||||
*/
|
*/
|
||||||
@ -536,8 +534,6 @@ class DataList extends ViewableData implements SS_List, Filterable, Sortable, Li
|
|||||||
* $list = $list->filterAny(array('Name'=>array('bob','phil'), 'Age'=>array(21, 43)));
|
* $list = $list->filterAny(array('Name'=>array('bob','phil'), 'Age'=>array(21, 43)));
|
||||||
* // SQL: WHERE (("Name" IN ('bob', 'phil')) OR ("Age" IN ('21', '43'))
|
* // SQL: WHERE (("Name" IN ('bob', 'phil')) OR ("Age" IN ('21', '43'))
|
||||||
*
|
*
|
||||||
* @todo extract the sql from this method into a SQLGenerator class
|
|
||||||
*
|
|
||||||
* @param string|array See {@link filter()}
|
* @param string|array See {@link filter()}
|
||||||
* @return static
|
* @return static
|
||||||
*/
|
*/
|
||||||
@ -679,8 +675,6 @@ class DataList extends ViewableData implements SS_List, Filterable, Sortable, Li
|
|||||||
* @example $list = $list->exclude(array('Name'=>array('bob','phil'), 'Age'=>array(21, 43)));
|
* @example $list = $list->exclude(array('Name'=>array('bob','phil'), 'Age'=>array(21, 43)));
|
||||||
* // bob age 21 or 43, phil age 21 or 43 would be excluded
|
* // bob age 21 or 43, phil age 21 or 43 would be excluded
|
||||||
*
|
*
|
||||||
* @todo extract the sql from this method into a SQLGenerator class
|
|
||||||
*
|
|
||||||
* @param string|array
|
* @param string|array
|
||||||
* @param string [optional]
|
* @param string [optional]
|
||||||
*
|
*
|
||||||
@ -1817,7 +1811,6 @@ class DataList extends ViewableData implements SS_List, Filterable, Sortable, Li
|
|||||||
/**
|
/**
|
||||||
* Return a new item to add to this DataList.
|
* Return a new item to add to this DataList.
|
||||||
*
|
*
|
||||||
* @todo This doesn't factor in filters.
|
|
||||||
* @param array $initialFields
|
* @param array $initialFields
|
||||||
* @return DataObject
|
* @return DataObject
|
||||||
*/
|
*/
|
||||||
@ -1831,8 +1824,6 @@ class DataList extends ViewableData implements SS_List, Filterable, Sortable, Li
|
|||||||
* Remove this item by deleting it
|
* Remove this item by deleting it
|
||||||
*
|
*
|
||||||
* @param DataObject $item
|
* @param DataObject $item
|
||||||
* @todo Allow for amendment of this behaviour - for example, we can remove an item from
|
|
||||||
* an "ActiveItems" DataList by changing the status to inactive.
|
|
||||||
*/
|
*/
|
||||||
public function remove($item)
|
public function remove($item)
|
||||||
{
|
{
|
||||||
|
@ -99,9 +99,6 @@ use stdClass;
|
|||||||
* the results are cached in memory through {@link cachedCall()}.
|
* the results are cached in memory through {@link cachedCall()}.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @todo Add instance specific removeExtension() which undos loadExtraStatics()
|
|
||||||
* and defineMethods()
|
|
||||||
*
|
|
||||||
* @property int $ID ID of the DataObject, 0 if the DataObject doesn't exist in database.
|
* @property int $ID ID of the DataObject, 0 if the DataObject doesn't exist in database.
|
||||||
* @property int $OldID ID of object, if deleted
|
* @property int $OldID ID of object, if deleted
|
||||||
* @property string $Title
|
* @property string $Title
|
||||||
@ -128,8 +125,6 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
|||||||
private static $plural_name = null;
|
private static $plural_name = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allow API access to this object?
|
|
||||||
* @todo Define the options that can be set here
|
|
||||||
* @config
|
* @config
|
||||||
*/
|
*/
|
||||||
private static $api_access = false;
|
private static $api_access = false;
|
||||||
@ -682,8 +677,6 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
|||||||
$clonedItem = $item->duplicate(false);
|
$clonedItem = $item->duplicate(false);
|
||||||
$destinationObject->setComponent($relation, $clonedItem);
|
$destinationObject->setComponent($relation, $clonedItem);
|
||||||
// After $clonedItem is assigned the appropriate FieldID / FieldClass, force write
|
// After $clonedItem is assigned the appropriate FieldID / FieldClass, force write
|
||||||
// @todo Write this component in onAfterWrite instead, assigning the FieldID then
|
|
||||||
// https://github.com/silverstripe/silverstripe-framework/issues/7818
|
|
||||||
$clonedItem->write();
|
$clonedItem->write();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1151,7 +1144,6 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO remove redundant merge of has_one fields
|
|
||||||
$leftObj->{$key} = $rightObj->{$key};
|
$leftObj->{$key} = $rightObj->{$key};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1752,10 +1744,6 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
|||||||
throw new LogicException("DataObject::delete() called on a DataObject without an ID");
|
throw new LogicException("DataObject::delete() called on a DataObject without an ID");
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: This is quite ugly. To improve:
|
|
||||||
// - move the details of the delete code in the DataQuery system
|
|
||||||
// - update the code to just delete the base table, and rely on cascading deletes in the DB to do the rest
|
|
||||||
// obviously, that means getting requireTable() to configure cascading deletes ;-)
|
|
||||||
$srcQuery = DataList::create(static::class)
|
$srcQuery = DataList::create(static::class)
|
||||||
->filter('ID', $this->ID)
|
->filter('ID', $this->ID)
|
||||||
->dataQuery()
|
->dataQuery()
|
||||||
@ -1908,8 +1896,6 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
|||||||
$schema = static::getSchema();
|
$schema = static::getSchema();
|
||||||
if ($class = $schema->hasOneComponent(static::class, $componentName)) {
|
if ($class = $schema->hasOneComponent(static::class, $componentName)) {
|
||||||
// Force item to be written if not by this point
|
// Force item to be written if not by this point
|
||||||
// @todo This could be lazy-written in a beforeWrite hook, but force write here for simplicity
|
|
||||||
// https://github.com/silverstripe/silverstripe-framework/issues/7818
|
|
||||||
if ($item && !$item->isInDB()) {
|
if ($item && !$item->isInDB()) {
|
||||||
$item->write();
|
$item->write();
|
||||||
}
|
}
|
||||||
@ -2594,8 +2580,6 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
|||||||
* by default. To customize, either overload this method in your
|
* by default. To customize, either overload this method in your
|
||||||
* subclass, or extend it by {@link DataExtension->updateFrontEndFields()}.
|
* subclass, or extend it by {@link DataExtension->updateFrontEndFields()}.
|
||||||
*
|
*
|
||||||
* @todo Decide on naming for "website|frontend|site|page" and stick with it in the API
|
|
||||||
*
|
|
||||||
* @param array $params See {@link scaffoldFormFields()}
|
* @param array $params See {@link scaffoldFormFields()}
|
||||||
* @return FieldList Always returns a simple field collection without TabSet.
|
* @return FieldList Always returns a simple field collection without TabSet.
|
||||||
*/
|
*/
|
||||||
@ -2692,7 +2676,6 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
|||||||
$columns = [];
|
$columns = [];
|
||||||
|
|
||||||
// Add SQL for fields, both simple & multi-value
|
// Add SQL for fields, both simple & multi-value
|
||||||
// TODO: This is copy & pasted from buildSQL(), it could be moved into a method
|
|
||||||
$databaseFields = $schema->databaseFields($class, false);
|
$databaseFields = $schema->databaseFields($class, false);
|
||||||
foreach ($databaseFields as $k => $v) {
|
foreach ($databaseFields as $k => $v) {
|
||||||
if (!isset($this->record[$k]) || $this->record[$k] === null) {
|
if (!isset($this->record[$k]) || $this->record[$k] === null) {
|
||||||
@ -2771,7 +2754,6 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
|||||||
array_keys($this->record ?? []),
|
array_keys($this->record ?? []),
|
||||||
array_fill(0, count($this->record ?? []), self::CHANGE_STRICT)
|
array_fill(0, count($this->record ?? []), self::CHANGE_STRICT)
|
||||||
);
|
);
|
||||||
// @todo Find better way to allow versioned to write a new version after forceChange
|
|
||||||
unset($changed['Version']);
|
unset($changed['Version']);
|
||||||
} else {
|
} else {
|
||||||
$changed = $this->changed;
|
$changed = $this->changed;
|
||||||
@ -2905,8 +2887,6 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
|||||||
|
|
||||||
// if a field is not existing or has strictly changed
|
// if a field is not existing or has strictly changed
|
||||||
if (!array_key_exists($fieldName, $this->original ?? []) || $this->original[$fieldName] !== $val) {
|
if (!array_key_exists($fieldName, $this->original ?? []) || $this->original[$fieldName] !== $val) {
|
||||||
// TODO Add check for php-level defaults which are not set in the db
|
|
||||||
// TODO Add check for hidden input-fields (readonly) which are not set in the db
|
|
||||||
// At the very least, the type has changed
|
// At the very least, the type has changed
|
||||||
$this->changed[$fieldName] = self::CHANGE_STRICT;
|
$this->changed[$fieldName] = self::CHANGE_STRICT;
|
||||||
|
|
||||||
@ -3314,8 +3294,6 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
|||||||
* @param string|array $limit A limit expression to be inserted into the LIMIT clause.
|
* @param string|array $limit A limit expression to be inserted into the LIMIT clause.
|
||||||
* @param string $containerClass The container class to return the results in.
|
* @param string $containerClass The container class to return the results in.
|
||||||
*
|
*
|
||||||
* @todo $containerClass is Ignored, why?
|
|
||||||
*
|
|
||||||
* @return DataList The objects matching the filter, in the class specified by $containerClass
|
* @return DataList The objects matching the filter, in the class specified by $containerClass
|
||||||
*/
|
*/
|
||||||
public static function get(
|
public static function get(
|
||||||
@ -3480,7 +3458,6 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
|||||||
*/
|
*/
|
||||||
public static function reset()
|
public static function reset()
|
||||||
{
|
{
|
||||||
// @todo Decouple these
|
|
||||||
DBEnum::flushCache();
|
DBEnum::flushCache();
|
||||||
ClassInfo::reset_db_cache();
|
ClassInfo::reset_db_cache();
|
||||||
static::getSchema()->reset();
|
static::getSchema()->reset();
|
||||||
@ -3941,8 +3918,6 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
|||||||
/**
|
/**
|
||||||
* Get the default summary fields for this object.
|
* Get the default summary fields for this object.
|
||||||
*
|
*
|
||||||
* @todo use the translation apparatus to return a default field selection for the language
|
|
||||||
*
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function summaryFields()
|
public function summaryFields()
|
||||||
@ -4000,8 +3975,6 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
|||||||
* it is constructed here. Otherwise, the default filter specified in
|
* it is constructed here. Otherwise, the default filter specified in
|
||||||
* {@link DBField} is used.
|
* {@link DBField} is used.
|
||||||
*
|
*
|
||||||
* @todo error handling/type checking for valid FormField and SearchFilter subclasses?
|
|
||||||
*
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function defaultSearchFilters()
|
public function defaultSearchFilters()
|
||||||
|
@ -1153,7 +1153,7 @@ class DataObjectSchema
|
|||||||
if ($key === 'from') {
|
if ($key === 'from') {
|
||||||
return $relationClass;
|
return $relationClass;
|
||||||
}
|
}
|
||||||
// @todo support polymorphic 'to'
|
|
||||||
throw new InvalidArgumentException(
|
throw new InvalidArgumentException(
|
||||||
"many_many through relation {$parentClass}.{$component} {$key} references a polymorphic field "
|
"many_many through relation {$parentClass}.{$component} {$key} references a polymorphic field "
|
||||||
. "{$joinClass}::{$relation} which is not supported"
|
. "{$joinClass}::{$relation} which is not supported"
|
||||||
|
@ -63,9 +63,8 @@ class DataQuery
|
|||||||
*/
|
*/
|
||||||
private $queryFinalised = false;
|
private $queryFinalised = false;
|
||||||
|
|
||||||
// TODO: replace subclass_access with this
|
|
||||||
protected $querySubclasses = true;
|
protected $querySubclasses = true;
|
||||||
// TODO: replace restrictclasses with this
|
|
||||||
protected $filterByClassName = true;
|
protected $filterByClassName = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -335,9 +334,6 @@ class DataQuery
|
|||||||
"RecordClassName"
|
"RecordClassName"
|
||||||
);
|
);
|
||||||
|
|
||||||
// TODO: Versioned, SiteTreeSubsites, etc, could probably be better implemented as subclasses
|
|
||||||
// of DataQuery
|
|
||||||
|
|
||||||
$obj = Injector::inst()->get($this->dataClass);
|
$obj = Injector::inst()->get($this->dataClass);
|
||||||
$obj->extend('augmentSQL', $query, $this);
|
$obj->extend('augmentSQL', $query, $this);
|
||||||
|
|
||||||
|
@ -519,8 +519,6 @@ class DatabaseAdmin extends Controller
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Migrate all class names
|
* Migrate all class names
|
||||||
*
|
|
||||||
* @todo Migrate to separate build task
|
|
||||||
*/
|
*/
|
||||||
protected function migrateClassNames()
|
protected function migrateClassNames()
|
||||||
{
|
{
|
||||||
|
@ -12,8 +12,6 @@ use SilverStripe\ORM\Queries\SQLSelect;
|
|||||||
* Extend this class when designing a {@link DBField} that doesn't have a 1-1 mapping with a database field.
|
* Extend this class when designing a {@link DBField} that doesn't have a 1-1 mapping with a database field.
|
||||||
* This includes multi-value fields and transformed fields
|
* This includes multi-value fields and transformed fields
|
||||||
*
|
*
|
||||||
* @todo Unittests for loading and saving composite values (see GIS module for existing similar unittests)
|
|
||||||
*
|
|
||||||
* Example with a combined street name and number:
|
* Example with a combined street name and number:
|
||||||
* <code>
|
* <code>
|
||||||
* class Street extends DBComposite {
|
* class Street extends DBComposite {
|
||||||
|
@ -30,7 +30,6 @@ use SilverStripe\View\TemplateGlobalProvider;
|
|||||||
* );
|
* );
|
||||||
* </code>
|
* </code>
|
||||||
*
|
*
|
||||||
* @todo Add localization support, see http://open.silverstripe.com/ticket/2931
|
|
||||||
*/
|
*/
|
||||||
class DBDatetime extends DBDate implements TemplateGlobalProvider
|
class DBDatetime extends DBDate implements TemplateGlobalProvider
|
||||||
{
|
{
|
||||||
|
@ -14,7 +14,6 @@ class DBDouble extends DBFloat
|
|||||||
public function requireField()
|
public function requireField()
|
||||||
{
|
{
|
||||||
// HACK: MSSQL does not support double so we're using float instead
|
// HACK: MSSQL does not support double so we're using float instead
|
||||||
// @todo This should go into MSSQLDatabase ideally somehow
|
|
||||||
if (DB::get_conn() instanceof MySQLDatabase) {
|
if (DB::get_conn() instanceof MySQLDatabase) {
|
||||||
DB::require_field($this->tableName, $this->name, "double");
|
DB::require_field($this->tableName, $this->name, "double");
|
||||||
} else {
|
} else {
|
||||||
|
@ -41,8 +41,6 @@ use SilverStripe\View\ViewableData;
|
|||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
* </code>
|
* </code>
|
||||||
*
|
|
||||||
* @todo remove MySQL specific code from subclasses
|
|
||||||
*/
|
*/
|
||||||
abstract class DBField extends ViewableData implements DBIndexable
|
abstract class DBField extends ViewableData implements DBIndexable
|
||||||
{
|
{
|
||||||
@ -579,12 +577,6 @@ abstract class DBField extends ViewableData implements DBIndexable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @todo documentation
|
|
||||||
*
|
|
||||||
* @todo figure out how we pass configuration parameters to
|
|
||||||
* search filters (note: parameter hack now in place to pass in the required full path - using $this->name
|
|
||||||
* won't work)
|
|
||||||
*
|
|
||||||
* @param string $name Override name of this field
|
* @param string $name Override name of this field
|
||||||
* @return SearchFilter
|
* @return SearchFilter
|
||||||
*/
|
*/
|
||||||
|
@ -6,8 +6,6 @@ use SilverStripe\i18n\i18n;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Locale database field
|
* Locale database field
|
||||||
*
|
|
||||||
* @todo Allowing showing locale values in different languages through Nice()
|
|
||||||
*/
|
*/
|
||||||
class DBLocale extends DBVarchar
|
class DBLocale extends DBVarchar
|
||||||
{
|
{
|
||||||
|
@ -35,7 +35,6 @@ class DBMultiEnum extends DBEnum
|
|||||||
|
|
||||||
public function requireField()
|
public function requireField()
|
||||||
{
|
{
|
||||||
// @todo: Remove mysql-centric logic from this
|
|
||||||
$charset = Config::inst()->get(MySQLDatabase::class, 'charset');
|
$charset = Config::inst()->get(MySQLDatabase::class, 'charset');
|
||||||
$collation = Config::inst()->get(MySQLDatabase::class, 'collation');
|
$collation = Config::inst()->get(MySQLDatabase::class, 'collation');
|
||||||
$values = [
|
$values = [
|
||||||
|
@ -18,9 +18,8 @@ class DBPolymorphicForeignKey extends DBComposite
|
|||||||
|
|
||||||
public function scaffoldFormField($title = null, $params = null)
|
public function scaffoldFormField($title = null, $params = null)
|
||||||
{
|
{
|
||||||
// Opt-out of form field generation - Scaffolding should be performed on
|
// Don't provide scaffolded form field generation - Scaffolding should be performed on
|
||||||
// the has_many end, or set programmatically.
|
// the has_many end, or set programmatically.
|
||||||
// @todo - Investigate suitable FormField
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,8 +7,6 @@ use SilverStripe\ORM\DB;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* A special type Int field used for primary keys.
|
* A special type Int field used for primary keys.
|
||||||
*
|
|
||||||
* @todo Allow for custom limiting/filtering of scaffoldFormField dropdown
|
|
||||||
*/
|
*/
|
||||||
class DBPrimaryKey extends DBInt
|
class DBPrimaryKey extends DBInt
|
||||||
{
|
{
|
||||||
|
@ -13,7 +13,6 @@ use SilverStripe\ORM\DataList;
|
|||||||
/**
|
/**
|
||||||
* Selects textual content with an exact match between columnname and keyword.
|
* Selects textual content with an exact match between columnname and keyword.
|
||||||
*
|
*
|
||||||
* @todo documentation
|
|
||||||
*/
|
*/
|
||||||
class ExactMatchFilter extends SearchFilter
|
class ExactMatchFilter extends SearchFilter
|
||||||
{
|
{
|
||||||
|
@ -25,7 +25,6 @@ use Exception;
|
|||||||
* ];
|
* ];
|
||||||
* </code>
|
* </code>
|
||||||
*
|
*
|
||||||
* @todo Add support for databases besides MySQL
|
|
||||||
*/
|
*/
|
||||||
class FulltextFilter extends SearchFilter
|
class FulltextFilter extends SearchFilter
|
||||||
{
|
{
|
||||||
|
@ -332,7 +332,6 @@ abstract class SearchFilter
|
|||||||
public function getDbFormattedValue()
|
public function getDbFormattedValue()
|
||||||
{
|
{
|
||||||
// SRM: This code finds the table where the field named $this->name lives
|
// SRM: This code finds the table where the field named $this->name lives
|
||||||
// Todo: move to somewhere more appropriate, such as DataMapper, the magical class-to-be?
|
|
||||||
|
|
||||||
if ($this->aggregate) {
|
if ($this->aggregate) {
|
||||||
return intval($this->value);
|
return intval($this->value);
|
||||||
|
@ -4,11 +4,6 @@ namespace SilverStripe\ORM\Filters;
|
|||||||
|
|
||||||
use SilverStripe\ORM\DataQuery;
|
use SilverStripe\ORM\DataQuery;
|
||||||
|
|
||||||
/**
|
|
||||||
* Incomplete.
|
|
||||||
*
|
|
||||||
* @todo add to tests
|
|
||||||
*/
|
|
||||||
class WithinRangeFilter extends SearchFilter
|
class WithinRangeFilter extends SearchFilter
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -119,7 +119,6 @@ class HasManyList extends RelationList
|
|||||||
* Doesn't actually remove the item, it just clears the foreign key value.
|
* Doesn't actually remove the item, it just clears the foreign key value.
|
||||||
*
|
*
|
||||||
* @param DataObject $item The DataObject to be removed
|
* @param DataObject $item The DataObject to be removed
|
||||||
* @todo Maybe we should delete the object instead?
|
|
||||||
*/
|
*/
|
||||||
public function remove($item)
|
public function remove($item)
|
||||||
{
|
{
|
||||||
|
@ -111,7 +111,6 @@ class PolymorphicHasManyList extends HasManyList
|
|||||||
* Doesn't actually remove the item, it just clears the foreign key value.
|
* Doesn't actually remove the item, it just clears the foreign key value.
|
||||||
*
|
*
|
||||||
* @param DataObject $item The DataObject to be removed
|
* @param DataObject $item The DataObject to be removed
|
||||||
* @todo Maybe we should delete the object instead?
|
|
||||||
*/
|
*/
|
||||||
public function remove($item)
|
public function remove($item)
|
||||||
{
|
{
|
||||||
|
@ -68,8 +68,6 @@ class SQLAssignmentRow
|
|||||||
$parameters = [$parameters];
|
$parameters = [$parameters];
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo Some input sanitisation checking the key contains the
|
|
||||||
// correct number of ? placeholders as the number of parameters
|
|
||||||
return [$sql => $parameters];
|
return [$sql => $parameters];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -256,8 +256,6 @@ abstract class SQLConditionalExpression extends SQLExpression
|
|||||||
/**
|
/**
|
||||||
* Retrieves the finalized list of joins
|
* Retrieves the finalized list of joins
|
||||||
*
|
*
|
||||||
* @todo This part of the code could be simplified
|
|
||||||
*
|
|
||||||
* @param array $parameters Out variable for parameters required for this query
|
* @param array $parameters Out variable for parameters required for this query
|
||||||
* @return array List of joins as a mapping from array('Alias' => 'Join Expression')
|
* @return array List of joins as a mapping from array('Alias' => 'Join Expression')
|
||||||
*/
|
*/
|
||||||
@ -693,8 +691,6 @@ abstract class SQLConditionalExpression extends SQLExpression
|
|||||||
/**
|
/**
|
||||||
* Checks whether this query is for a specific ID in a table
|
* Checks whether this query is for a specific ID in a table
|
||||||
*
|
*
|
||||||
* @todo Doesn't work with combined statements (e.g. "Foo='bar' AND ID=5")
|
|
||||||
*
|
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
public function filtersOnID()
|
public function filtersOnID()
|
||||||
@ -713,15 +709,12 @@ abstract class SQLConditionalExpression extends SQLExpression
|
|||||||
/**
|
/**
|
||||||
* Checks whether this query is filtering on a foreign key, ie finding a has_many relationship
|
* Checks whether this query is filtering on a foreign key, ie finding a has_many relationship
|
||||||
*
|
*
|
||||||
* @todo Doesn't work with combined statements (e.g. "Foo='bar' AND ParentID=5")
|
|
||||||
*
|
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
public function filtersOnFK()
|
public function filtersOnFK()
|
||||||
{
|
{
|
||||||
$regexp = '/^(.*\.)?("|`)?[a-zA-Z]+ID("|`)?\s?(=|IN)/';
|
$regexp = '/^(.*\.)?("|`)?[a-zA-Z]+ID("|`)?\s?(=|IN)/';
|
||||||
|
|
||||||
// @todo - Test this works with parameterized queries
|
|
||||||
foreach ($this->getWhereParameterised($parameters) as $predicate) {
|
foreach ($this->getWhereParameterised($parameters) as $predicate) {
|
||||||
if (preg_match($regexp ?? '', $predicate ?? '')) {
|
if (preg_match($regexp ?? '', $predicate ?? '')) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -45,8 +45,6 @@ abstract class SQLExpression
|
|||||||
/**
|
/**
|
||||||
* Return the generated SQL string for this query
|
* Return the generated SQL string for this query
|
||||||
*
|
*
|
||||||
* @todo Is it ok for this to consider parameters? Test cases here!
|
|
||||||
*
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function __toString()
|
public function __toString()
|
||||||
|
@ -575,7 +575,6 @@ class SQLSelect extends SQLConditionalExpression
|
|||||||
// Choose a default column
|
// Choose a default column
|
||||||
if ($column == null) {
|
if ($column == null) {
|
||||||
if ($this->groupby) {
|
if ($this->groupby) {
|
||||||
// @todo Test case required here
|
|
||||||
$countQuery = new SQLSelect();
|
$countQuery = new SQLSelect();
|
||||||
$countQuery->setSelect("count(*)");
|
$countQuery->setSelect("count(*)");
|
||||||
$countQuery->setFrom(['(' . $clone->sql($innerParameters) . ') all_distinct']);
|
$countQuery->setFrom(['(' . $clone->sql($innerParameters) . ') all_distinct']);
|
||||||
|
@ -107,10 +107,6 @@ class SearchContext
|
|||||||
return ($this->fields) ? $this->fields : singleton($this->modelClass)->scaffoldSearchFields();
|
return ($this->fields) ? $this->fields : singleton($this->modelClass)->scaffoldSearchFields();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @todo move to SQLSelect
|
|
||||||
* @todo fix hack
|
|
||||||
*/
|
|
||||||
protected function applyBaseTableFields()
|
protected function applyBaseTableFields()
|
||||||
{
|
{
|
||||||
$classes = ClassInfo::dataClassesFor($this->modelClass);
|
$classes = ClassInfo::dataClassesFor($this->modelClass);
|
||||||
@ -327,8 +323,6 @@ class SearchContext
|
|||||||
/**
|
/**
|
||||||
* Returns a result set from the given search parameters.
|
* Returns a result set from the given search parameters.
|
||||||
*
|
*
|
||||||
* @todo rearrange start and limit params to reflect DataObject
|
|
||||||
*
|
|
||||||
* @param array $searchParams
|
* @param array $searchParams
|
||||||
* @param array|bool|string $sort
|
* @param array|bool|string $sort
|
||||||
* @param array|null|string $limit
|
* @param array|null|string $limit
|
||||||
|
@ -183,8 +183,6 @@ class Group extends DataObject
|
|||||||
if ($record && !$record->ID) {
|
if ($record && !$record->ID) {
|
||||||
$groupsField->setValue($group->ID);
|
$groupsField->setValue($group->ID);
|
||||||
} elseif ($record && $record->ID) {
|
} elseif ($record && $record->ID) {
|
||||||
// TODO Mark disabled once chosen.js supports it
|
|
||||||
// $groupsField->setDisabledItems(array($group->ID));
|
|
||||||
$form->Fields()->replaceField(
|
$form->Fields()->replaceField(
|
||||||
'DirectGroups',
|
'DirectGroups',
|
||||||
$groupsField->performReadonlyTransformation()
|
$groupsField->performReadonlyTransformation()
|
||||||
@ -194,8 +192,6 @@ class Group extends DataObject
|
|||||||
});
|
});
|
||||||
$memberList = GridField::create('Members', false, $this->DirectMembers(), $config)
|
$memberList = GridField::create('Members', false, $this->DirectMembers(), $config)
|
||||||
->addExtraClass('members_grid');
|
->addExtraClass('members_grid');
|
||||||
// @todo Implement permission checking on GridField
|
|
||||||
//$memberList->setPermissions(array('edit', 'delete', 'export', 'add', 'inlineadd'));
|
|
||||||
$fields->addFieldToTab('Root.Members', $memberList);
|
$fields->addFieldToTab('Root.Members', $memberList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -238,8 +234,6 @@ class Group extends DataObject
|
|||||||
sprintf(
|
sprintf(
|
||||||
'<a href="%s" class="add-role">%s</a>',
|
'<a href="%s" class="add-role">%s</a>',
|
||||||
SecurityAdmin::singleton()->Link('show/root#Root_Roles'),
|
SecurityAdmin::singleton()->Link('show/root#Root_Roles'),
|
||||||
// TODO This should include #Root_Roles to switch directly to the tab,
|
|
||||||
// but tabstrip.js doesn't display tabs when directly addressed through a URL pragma
|
|
||||||
_t('SilverStripe\\Security\\Group.RolesAddEditLink', 'Manage roles')
|
_t('SilverStripe\\Security\\Group.RolesAddEditLink', 'Manage roles')
|
||||||
) .
|
) .
|
||||||
"</p>"
|
"</p>"
|
||||||
|
@ -5,9 +5,6 @@ namespace SilverStripe\Security;
|
|||||||
use SilverStripe\Dev\CsvBulkLoader;
|
use SilverStripe\Dev\CsvBulkLoader;
|
||||||
use SilverStripe\ORM\DataObject;
|
use SilverStripe\ORM\DataObject;
|
||||||
|
|
||||||
/**
|
|
||||||
* @todo Migrate Permission->Arg and Permission->Type values
|
|
||||||
*/
|
|
||||||
class GroupCsvBulkLoader extends CsvBulkLoader
|
class GroupCsvBulkLoader extends CsvBulkLoader
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -114,9 +114,6 @@ class Member extends DataObject
|
|||||||
* statement.
|
* statement.
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
* @todo Generic implementation of $searchable_fields on DataObject,
|
|
||||||
* with definition for different searching algorithms
|
|
||||||
* (LIKE, FULLTEXT) and default FormFields to construct a searchform.
|
|
||||||
*/
|
*/
|
||||||
private static $searchable_fields = [
|
private static $searchable_fields = [
|
||||||
'FirstName',
|
'FirstName',
|
||||||
@ -446,7 +443,6 @@ class Member extends DataObject
|
|||||||
*/
|
*/
|
||||||
public function beforeMemberLoggedIn()
|
public function beforeMemberLoggedIn()
|
||||||
{
|
{
|
||||||
// @todo Move to middleware on the AuthenticationMiddleware IdentityStore
|
|
||||||
$this->extend('beforeMemberLoggedIn');
|
$this->extend('beforeMemberLoggedIn');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -619,7 +615,6 @@ class Member extends DataObject
|
|||||||
* Returns the fields for the member form - used in the registration/profile module.
|
* Returns the fields for the member form - used in the registration/profile module.
|
||||||
* It should return fields that are editable by the admin and the logged-in user.
|
* It should return fields that are editable by the admin and the logged-in user.
|
||||||
*
|
*
|
||||||
* @todo possibly move this to an extension
|
|
||||||
*
|
*
|
||||||
* @return FieldList Returns a {@link FieldList} containing the fields for
|
* @return FieldList Returns a {@link FieldList} containing the fields for
|
||||||
* the member form.
|
* the member form.
|
||||||
@ -770,7 +765,6 @@ class Member extends DataObject
|
|||||||
|
|
||||||
// We don't send emails out on dev/tests sites to prevent accidentally spamming users.
|
// We don't send emails out on dev/tests sites to prevent accidentally spamming users.
|
||||||
// However, if TestMailer is in use this isn't a risk.
|
// However, if TestMailer is in use this isn't a risk.
|
||||||
// @todo some developers use external tools, so emailing might be a good idea anyway
|
|
||||||
if ((Director::isLive() || Injector::inst()->get(MailerInterface::class) instanceof TestMailer)
|
if ((Director::isLive() || Injector::inst()->get(MailerInterface::class) instanceof TestMailer)
|
||||||
&& $this->isChanged('Password')
|
&& $this->isChanged('Password')
|
||||||
&& $this->record['Password']
|
&& $this->record['Password']
|
||||||
@ -1151,7 +1145,6 @@ class Member extends DataObject
|
|||||||
* including any parent groups where membership is implied.
|
* including any parent groups where membership is implied.
|
||||||
* Use {@link DirectGroups()} to only retrieve the group relations without inheritance.
|
* Use {@link DirectGroups()} to only retrieve the group relations without inheritance.
|
||||||
*
|
*
|
||||||
* @todo Push all this logic into Member_GroupSet's getIterator()?
|
|
||||||
* @return Member_Groupset
|
* @return Member_Groupset
|
||||||
*/
|
*/
|
||||||
public function Groups()
|
public function Groups()
|
||||||
|
@ -58,7 +58,6 @@ class ChangePasswordHandler extends RequestHandler
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle the change password request
|
* Handle the change password request
|
||||||
* @todo this could use some spring cleaning
|
|
||||||
*
|
*
|
||||||
* @return array|HTTPResponse
|
* @return array|HTTPResponse
|
||||||
*/
|
*/
|
||||||
|
@ -173,13 +173,9 @@ class CookieAuthenticationHandler implements AuthenticationHandler
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($this->cascadeInTo) {
|
if ($this->cascadeInTo) {
|
||||||
// @todo look at how to block "regular login" triggers from happening here
|
|
||||||
// @todo deal with the fact that the Session::current_session() isn't correct here :-/
|
|
||||||
$this->cascadeInTo->logIn($member, false, $request);
|
$this->cascadeInTo->logIn($member, false, $request);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo Consider whether response should be part of logIn() as well
|
|
||||||
|
|
||||||
// Renew the token
|
// Renew the token
|
||||||
$rememberLoginHash->renew();
|
$rememberLoginHash->renew();
|
||||||
$tokenExpiryDays = RememberLoginHash::config()->uninherited('token_expiry_days');
|
$tokenExpiryDays = RememberLoginHash::config()->uninherited('token_expiry_days');
|
||||||
|
@ -168,7 +168,6 @@ class MemberAuthenticator implements Authenticator
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Log login attempt
|
* Log login attempt
|
||||||
* TODO We could handle this with an extension
|
|
||||||
*
|
*
|
||||||
* @param array $data
|
* @param array $data
|
||||||
* @param HTTPRequest $request
|
* @param HTTPRequest $request
|
||||||
|
@ -84,7 +84,6 @@ class MemberLoginForm extends BaseLoginForm
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($checkCurrentUser && Security::getCurrentUser()) {
|
if ($checkCurrentUser && Security::getCurrentUser()) {
|
||||||
// @todo find a more elegant way to handle this
|
|
||||||
$logoutAction = Security::logout_url();
|
$logoutAction = Security::logout_url();
|
||||||
$fields = FieldList::create(
|
$fields = FieldList::create(
|
||||||
HiddenField::create('AuthenticationMethod', null, $this->getAuthenticatorClass(), $this)
|
HiddenField::create('AuthenticationMethod', null, $this->getAuthenticatorClass(), $this)
|
||||||
@ -134,7 +133,6 @@ class MemberLoginForm extends BaseLoginForm
|
|||||||
HiddenField::create("AuthenticationMethod", null, $this->getAuthenticatorClass(), $this),
|
HiddenField::create("AuthenticationMethod", null, $this->getAuthenticatorClass(), $this),
|
||||||
// Regardless of what the unique identifier field is (usually 'Email'), it will be held in the
|
// Regardless of what the unique identifier field is (usually 'Email'), it will be held in the
|
||||||
// 'Email' value, below:
|
// 'Email' value, below:
|
||||||
// @todo Rename the field to a more generic covering name
|
|
||||||
$emailField = TextField::create("Email", $label, null, null, $this),
|
$emailField = TextField::create("Email", $label, null, null, $this),
|
||||||
PasswordField::create("Password", _t('SilverStripe\\Security\\Member.PASSWORD', 'Password'))
|
PasswordField::create("Password", _t('SilverStripe\\Security\\Member.PASSWORD', 'Password'))
|
||||||
);
|
);
|
||||||
|
@ -80,7 +80,6 @@ class SessionAuthenticationHandler implements AuthenticationHandler
|
|||||||
$session->set($this->getSessionVariable(), $member->ID);
|
$session->set($this->getSessionVariable(), $member->ID);
|
||||||
|
|
||||||
// This lets apache rules detect whether the user has logged in
|
// This lets apache rules detect whether the user has logged in
|
||||||
// @todo make this a setting on the authentication handler
|
|
||||||
if (Member::config()->get('login_marker_cookie')) {
|
if (Member::config()->get('login_marker_cookie')) {
|
||||||
Cookie::set(Member::config()->get('login_marker_cookie'), 1, 0);
|
Cookie::set(Member::config()->get('login_marker_cookie'), 1, 0);
|
||||||
}
|
}
|
||||||
@ -109,7 +108,6 @@ class SessionAuthenticationHandler implements AuthenticationHandler
|
|||||||
$file = '';
|
$file = '';
|
||||||
$line = '';
|
$line = '';
|
||||||
|
|
||||||
// TODO: deprecate and use Session::regenerateSessionId
|
|
||||||
// @ is to suppress win32 warnings/notices when session wasn't cleaned up properly
|
// @ is to suppress win32 warnings/notices when session wasn't cleaned up properly
|
||||||
// There's nothing we can do about this, because it's an operating system function!
|
// There's nothing we can do about this, because it's an operating system function!
|
||||||
if (!headers_sent($file, $line)) {
|
if (!headers_sent($file, $line)) {
|
||||||
|
@ -45,7 +45,6 @@ class MemberCsvBulkLoader extends CsvBulkLoader
|
|||||||
/** @var Member $member */
|
/** @var Member $member */
|
||||||
$member = DataObject::get_by_id($this->objectClass, $objID);
|
$member = DataObject::get_by_id($this->objectClass, $objID);
|
||||||
foreach ($this->groups as $group) {
|
foreach ($this->groups as $group) {
|
||||||
// TODO This isnt the most memory effective way to add members to a group
|
|
||||||
$member->Groups()->add($group);
|
$member->Groups()->add($group);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,7 +133,6 @@ class Permission extends DataObject implements TemplateGlobalProvider, Resettabl
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Flush the permission cache, for example if you have edited group membership or a permission record.
|
* Flush the permission cache, for example if you have edited group membership or a permission record.
|
||||||
* @todo Call this whenever Group_Members is added to or removed from
|
|
||||||
*/
|
*/
|
||||||
public static function reset()
|
public static function reset()
|
||||||
{
|
{
|
||||||
|
@ -416,7 +416,6 @@ class Security extends Controller implements TemplateGlobalProvider
|
|||||||
$request->getSession()->set("BackURL", $_SERVER['REQUEST_URI']);
|
$request->getSession()->set("BackURL", $_SERVER['REQUEST_URI']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO AccessLogEntry needs an extension to handle permission denied errors
|
|
||||||
// Audit logging hook
|
// Audit logging hook
|
||||||
$controller->extend('permissionDenied', $member);
|
$controller->extend('permissionDenied', $member);
|
||||||
|
|
||||||
|
@ -35,7 +35,6 @@ use SilverStripe\View\TemplateGlobalProvider;
|
|||||||
* }
|
* }
|
||||||
* </code>
|
* </code>
|
||||||
*
|
*
|
||||||
* @todo Make token name form specific for additional forgery protection.
|
|
||||||
*/
|
*/
|
||||||
class SecurityToken implements TemplateGlobalProvider
|
class SecurityToken implements TemplateGlobalProvider
|
||||||
{
|
{
|
||||||
|
@ -1886,8 +1886,6 @@ class SSTemplateParser extends Parser implements TemplateParser
|
|||||||
$res['php'] .= '((bool)'.$sub['php'].')';
|
$res['php'] .= '((bool)'.$sub['php'].')';
|
||||||
} else {
|
} else {
|
||||||
$php = ($sub['ArgumentMode'] == 'default' ? $sub['lookup_php'] : $sub['php']);
|
$php = ($sub['ArgumentMode'] == 'default' ? $sub['lookup_php'] : $sub['php']);
|
||||||
// TODO: kinda hacky - maybe we need a way to pass state down the parse chain so
|
|
||||||
// Lookup_LastLookupStep and Argument_BareWord can produce hasValue instead of XML_val
|
|
||||||
$res['php'] .= str_replace('$$FINAL', 'hasValue', $php ?? '');
|
$res['php'] .= str_replace('$$FINAL', 'hasValue', $php ?? '');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5292,8 +5290,6 @@ class SSTemplateParser extends Parser implements TemplateParser
|
|||||||
$text = stripslashes($text ?? '');
|
$text = stripslashes($text ?? '');
|
||||||
$text = addcslashes($text ?? '', '\'\\');
|
$text = addcslashes($text ?? '', '\'\\');
|
||||||
|
|
||||||
// TODO: This is pretty ugly & gets applied on all files not just html. I wonder if we can make this
|
|
||||||
// non-dynamically calculated
|
|
||||||
$code = <<<'EOC'
|
$code = <<<'EOC'
|
||||||
(\SilverStripe\View\SSViewer::getRewriteHashLinksDefault()
|
(\SilverStripe\View\SSViewer::getRewriteHashLinksDefault()
|
||||||
? \SilverStripe\Core\Convert::raw2att( preg_replace("/^(\\/)+/", "/", $_SERVER['REQUEST_URI'] ) )
|
? \SilverStripe\Core\Convert::raw2att( preg_replace("/^(\\/)+/", "/", $_SERVER['REQUEST_URI'] ) )
|
||||||
@ -5332,8 +5328,7 @@ EOC;
|
|||||||
|
|
||||||
$this->includeDebuggingComments = $includeDebuggingComments;
|
$this->includeDebuggingComments = $includeDebuggingComments;
|
||||||
|
|
||||||
// Ignore UTF8 BOM at beginning of string. TODO: Confirm this is needed, make sure SSViewer handles UTF
|
// Ignore UTF8 BOM at beginning of string.
|
||||||
// (and other encodings) properly
|
|
||||||
if (substr($string ?? '', 0, 3) == pack("CCC", 0xef, 0xbb, 0xbf)) {
|
if (substr($string ?? '', 0, 3) == pack("CCC", 0xef, 0xbb, 0xbf)) {
|
||||||
$this->pos = 3;
|
$this->pos = 3;
|
||||||
}
|
}
|
||||||
|
@ -438,8 +438,6 @@ class ViewableData implements IteratorAggregate
|
|||||||
{
|
{
|
||||||
$class = $this->castingClass($field) ?: $this->config()->get('default_cast');
|
$class = $this->castingClass($field) ?: $this->config()->get('default_cast');
|
||||||
|
|
||||||
// TODO: It would be quicker not to instantiate the object, but to merely
|
|
||||||
// get its class from the Injector
|
|
||||||
/** @var DBField $type */
|
/** @var DBField $type */
|
||||||
$type = Injector::inst()->get($class, true);
|
$type = Injector::inst()->get($class, true);
|
||||||
return $type->config()->get('escape_type');
|
return $type->config()->get('escape_type');
|
||||||
|
@ -71,8 +71,6 @@ class i18nTextCollector
|
|||||||
* The directory base on which the collector should act.
|
* The directory base on which the collector should act.
|
||||||
* Usually the webroot set through {@link Director::baseFolder()}.
|
* Usually the webroot set through {@link Director::baseFolder()}.
|
||||||
*
|
*
|
||||||
* @todo Fully support changing of basePath through {@link SSViewer} and {@link ManifestBuilder}
|
|
||||||
*
|
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
public $basePath;
|
public $basePath;
|
||||||
@ -314,9 +312,6 @@ class i18nTextCollector
|
|||||||
return $owner;
|
return $owner;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo - How to determine ownership of templates? Templates can
|
|
||||||
// exist in multiple locations with the same name.
|
|
||||||
|
|
||||||
// Display notice if not found
|
// Display notice if not found
|
||||||
Debug::message(
|
Debug::message(
|
||||||
"Duplicate key {$key} detected in no / multiple modules with no obvious owner",
|
"Duplicate key {$key} detected in no / multiple modules with no obvious owner",
|
||||||
|
@ -137,7 +137,6 @@ class CmsFormsContext implements Context
|
|||||||
* Example: Given "my text" in the "Content" HTML field should be right aligned
|
* Example: Given "my text" in the "Content" HTML field should be right aligned
|
||||||
* Example: Given "my text" in the "Content" HTML field should not be bold
|
* Example: Given "my text" in the "Content" HTML field should not be bold
|
||||||
*
|
*
|
||||||
* @todo Use an actual DOM parser for more accurate assertions
|
|
||||||
*
|
*
|
||||||
* @Given /^"(?P<text>([^"]*))" in the "(?P<field>(?:[^"]|\\")*)" HTML field should(?P<negate>(?: not)?) be (?P<formatting>(.*))$/
|
* @Given /^"(?P<text>([^"]*))" in the "(?P<field>(?:[^"]|\\")*)" HTML field should(?P<negate>(?: not)?) be (?P<formatting>(.*))$/
|
||||||
*/
|
*/
|
||||||
@ -194,8 +193,7 @@ class CmsFormsContext implements Context
|
|||||||
$text = addcslashes($text ?? '', "'");
|
$text = addcslashes($text ?? '', "'");
|
||||||
|
|
||||||
$js = <<<JS
|
$js = <<<JS
|
||||||
// TODO <IE9 support
|
|
||||||
// TODO Allow text matches across nodes
|
|
||||||
var editor = jQuery('#$inputFieldId').entwine('ss').getEditor(),
|
var editor = jQuery('#$inputFieldId').entwine('ss').getEditor(),
|
||||||
doc = editor.getInstance().getDoc(),
|
doc = editor.getInstance().getDoc(),
|
||||||
sel = editor.getInstance().selection,
|
sel = editor.getInstance().selection,
|
||||||
|
@ -594,8 +594,6 @@ SCRIPT
|
|||||||
*/
|
*/
|
||||||
public function clickLinkInPreview($link)
|
public function clickLinkInPreview($link)
|
||||||
{
|
{
|
||||||
// TODO Remove once we have native support in Mink and php-webdriver,
|
|
||||||
// see https://groups.google.com/forum/#!topic/behat/QNhOuGHKEWI
|
|
||||||
$this->getSession()->switchToIFrame('cms-preview-iframe');
|
$this->getSession()->switchToIFrame('cms-preview-iframe');
|
||||||
$link = $this->fixStepArgument($link);
|
$link = $this->fixStepArgument($link);
|
||||||
$this->getSession()->getPage()->clickLink($link);
|
$this->getSession()->getPage()->clickLink($link);
|
||||||
|
@ -18,9 +18,6 @@ use SilverStripe\Core\Environment;
|
|||||||
use SilverStripe\Core\Kernel;
|
use SilverStripe\Core\Kernel;
|
||||||
use SilverStripe\Dev\SapphireTest;
|
use SilverStripe\Dev\SapphireTest;
|
||||||
|
|
||||||
/**
|
|
||||||
* @todo test Director::alternateBaseFolder()
|
|
||||||
*/
|
|
||||||
class DirectorTest extends SapphireTest
|
class DirectorTest extends SapphireTest
|
||||||
{
|
{
|
||||||
protected static $extra_controllers = [
|
protected static $extra_controllers = [
|
||||||
|
@ -133,9 +133,6 @@ class SessionTest extends SapphireTest
|
|||||||
public function testStartRetainsInMemoryData()
|
public function testStartRetainsInMemoryData()
|
||||||
{
|
{
|
||||||
$this->markTestIncomplete('Test');
|
$this->markTestIncomplete('Test');
|
||||||
// TODO Figure out how to simulate session vars without a session_start() resetting them
|
|
||||||
// $_SESSION['existing'] = true;
|
|
||||||
// $_SESSION['merge'] = 1;
|
|
||||||
$req = new HTTPRequest('GET', '/');
|
$req = new HTTPRequest('GET', '/');
|
||||||
$session = new Session(null); // unstarted session
|
$session = new Session(null); // unstarted session
|
||||||
$session->set('new', true);
|
$session->set('new', true);
|
||||||
|
@ -214,8 +214,6 @@ PHP
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests {@link Convert::testRaw2URL()}
|
* Tests {@link Convert::testRaw2URL()}
|
||||||
*
|
|
||||||
* @todo test toASCII()
|
|
||||||
*/
|
*/
|
||||||
public function testRaw2URL()
|
public function testRaw2URL()
|
||||||
{
|
{
|
||||||
|
@ -213,7 +213,6 @@ class ThemeResourceLoaderTest extends SapphireTest
|
|||||||
*/
|
*/
|
||||||
public function testFindTemplatesInApplication()
|
public function testFindTemplatesInApplication()
|
||||||
{
|
{
|
||||||
// TODO: replace with one that doesn't create temporary files (so bad)
|
|
||||||
$templates = [
|
$templates = [
|
||||||
$this->base . '/myproject/templates/Page.ss',
|
$this->base . '/myproject/templates/Page.ss',
|
||||||
$this->base . '/myproject/templates/Layout/Page.ss'
|
$this->base . '/myproject/templates/Layout/Page.ss'
|
||||||
|
@ -22,11 +22,6 @@ use SilverStripe\Core\Tests\ObjectTest\TestExtension;
|
|||||||
use SilverStripe\Dev\SapphireTest;
|
use SilverStripe\Dev\SapphireTest;
|
||||||
use SilverStripe\Versioned\Versioned;
|
use SilverStripe\Versioned\Versioned;
|
||||||
|
|
||||||
/**
|
|
||||||
* @todo tests for addStaticVars()
|
|
||||||
* @todo tests for setting statics which are not defined on the object as built-in PHP statics
|
|
||||||
* @todo tests for setting statics through extensions (#2387)
|
|
||||||
*/
|
|
||||||
class ObjectTest extends SapphireTest
|
class ObjectTest extends SapphireTest
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -253,8 +248,6 @@ class ObjectTest extends SapphireTest
|
|||||||
"Injected sub-extensions are detected with static has_extension() when added through add_extension()"
|
"Injected sub-extensions are detected with static has_extension() when added through add_extension()"
|
||||||
);
|
);
|
||||||
|
|
||||||
// @todo At the moment, this does NOT remove the extension due to parameterized naming,
|
|
||||||
// meaning the extension will remain added in further test cases
|
|
||||||
ExtensionTest::remove_extension(ExtendTest3::class);
|
ExtensionTest::remove_extension(ExtendTest3::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,6 @@ class PhpSyntaxTest extends SapphireTest
|
|||||||
public function testShortTagsOffWillWork()
|
public function testShortTagsOffWillWork()
|
||||||
{
|
{
|
||||||
// Ignore this test completely if running the test suite on windows
|
// Ignore this test completely if running the test suite on windows
|
||||||
// TODO: Make it work on all platforms, by building an alternative to find | grep.
|
|
||||||
$returnCode = 0;
|
$returnCode = 0;
|
||||||
$output = [];
|
$output = [];
|
||||||
exec("which find && which grep && which php", $output, $returnCode);
|
exec("which find && which grep && which php", $output, $returnCode);
|
||||||
@ -51,7 +50,6 @@ class PhpSyntaxTest extends SapphireTest
|
|||||||
|
|
||||||
public function getAllFiles($ext = 'php')
|
public function getAllFiles($ext = 'php')
|
||||||
{
|
{
|
||||||
// TODO: Unix only
|
|
||||||
$cmd = sprintf(
|
$cmd = sprintf(
|
||||||
'find %s | grep %s',
|
'find %s | grep %s',
|
||||||
BASE_PATH,
|
BASE_PATH,
|
||||||
|
@ -227,8 +227,6 @@ class CsvBulkLoaderTest extends SapphireTest
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Test import with custom identifiers by importing the data.
|
* Test import with custom identifiers by importing the data.
|
||||||
*
|
|
||||||
* @todo Test duplicateCheck callbacks
|
|
||||||
*/
|
*/
|
||||||
public function testLoadWithIdentifiers()
|
public function testLoadWithIdentifiers()
|
||||||
{
|
{
|
||||||
|
@ -18,9 +18,6 @@ class CurrencyFieldDisabledTest extends SapphireTest
|
|||||||
$this->assertStringContainsString('$5.00', $result, 'The value should be rendered');
|
$this->assertStringContainsString('$5.00', $result, 'The value should be rendered');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @todo: Update the expectation when intl for currencies is implemented
|
|
||||||
*/
|
|
||||||
public function testFieldWithCustomisedCurrencySymbol()
|
public function testFieldWithCustomisedCurrencySymbol()
|
||||||
{
|
{
|
||||||
DBCurrency::config()->set('currency_symbol', '€');
|
DBCurrency::config()->set('currency_symbol', '€');
|
||||||
|
@ -37,9 +37,6 @@ class CurrencyFieldReadonlyTest extends SapphireTest
|
|||||||
$this->assertStringContainsString('AUD0.00', $result, 'The value should be rendered');
|
$this->assertStringContainsString('AUD0.00', $result, 'The value should be rendered');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @todo: Update the expectation when intl for currencies is implemented
|
|
||||||
*/
|
|
||||||
public function testFieldWithCustomisedCurrencySymbol()
|
public function testFieldWithCustomisedCurrencySymbol()
|
||||||
{
|
{
|
||||||
DBCurrency::config()->set('currency_symbol', '€');
|
DBCurrency::config()->set('currency_symbol', '€');
|
||||||
|
@ -18,8 +18,6 @@ class EmailFieldTest extends FunctionalTest
|
|||||||
/**
|
/**
|
||||||
* Check the php validator for email addresses. We should be checking against RFC 5322 which defines email address
|
* Check the php validator for email addresses. We should be checking against RFC 5322 which defines email address
|
||||||
* syntax.
|
* syntax.
|
||||||
*
|
|
||||||
* @TODO
|
|
||||||
* - double quotes around the local part (before @) is not supported
|
* - double quotes around the local part (before @) is not supported
|
||||||
* - special chars ! # $ % & ' * + - / = ? ^ _ ` { | } ~ are all valid in local part
|
* - special chars ! # $ % & ' * + - / = ? ^ _ ` { | } ~ are all valid in local part
|
||||||
* - special chars ()[]\;:,<> are valid in the local part if the local part is in double quotes
|
* - special chars ()[]\;:,<> are valid in the local part if the local part is in double quotes
|
||||||
|
@ -20,17 +20,6 @@ use SilverStripe\Forms\HiddenField;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for FieldList
|
* Tests for FieldList
|
||||||
*
|
|
||||||
* @todo test for {@link FieldList->setValues()}. Need to check
|
|
||||||
* that the values that were set are the correct ones given back.
|
|
||||||
* @todo test for {@link FieldList->transform()} and {@link FieldList->makeReadonly()}.
|
|
||||||
* Need to ensure that it correctly transforms the FieldList object.
|
|
||||||
* @todo test for {@link FieldList->HiddenFields()}. Need to check
|
|
||||||
* the fields returned are the correct HiddenField objects for a
|
|
||||||
* given FieldList instance.
|
|
||||||
* @todo test for {@link FieldList->dataFields()}.
|
|
||||||
* @todo test for {@link FieldList->findOrMakeTab()}.
|
|
||||||
* @todo the same as above with insertBefore() and insertAfter()
|
|
||||||
*/
|
*/
|
||||||
class FieldListTest extends SapphireTest
|
class FieldListTest extends SapphireTest
|
||||||
{
|
{
|
||||||
@ -856,9 +845,6 @@ class FieldListTest extends SapphireTest
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @todo check actual placement of fields
|
|
||||||
*/
|
|
||||||
public function testInsertBeforeWithNestedTabsets()
|
public function testInsertBeforeWithNestedTabsets()
|
||||||
{
|
{
|
||||||
$FieldListA = new FieldList(
|
$FieldListA = new FieldList(
|
||||||
@ -973,9 +959,6 @@ class FieldListTest extends SapphireTest
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @todo check actual placement of fields
|
|
||||||
*/
|
|
||||||
public function testInsertAfterWithNestedTabsets()
|
public function testInsertAfterWithNestedTabsets()
|
||||||
{
|
{
|
||||||
$FieldListA = new FieldList(
|
$FieldListA = new FieldList(
|
||||||
|
@ -24,7 +24,6 @@ class Category extends DataObject implements TestOnly
|
|||||||
public function getCMSFields()
|
public function getCMSFields()
|
||||||
{
|
{
|
||||||
$fields = parent::getCMSFields();
|
$fields = parent::getCMSFields();
|
||||||
// TODO No longer necessary once FormScaffolder uses GridField
|
|
||||||
$fields->replaceField(
|
$fields->replaceField(
|
||||||
'People',
|
'People',
|
||||||
GridField::create(
|
GridField::create(
|
||||||
|
@ -29,7 +29,6 @@ class PeopleGroup extends DataObject implements TestOnly
|
|||||||
public function getCMSFields()
|
public function getCMSFields()
|
||||||
{
|
{
|
||||||
$fields = parent::getCMSFields();
|
$fields = parent::getCMSFields();
|
||||||
// TODO No longer necessary once FormScaffolder uses GridField
|
|
||||||
$fields->replaceField(
|
$fields->replaceField(
|
||||||
'People',
|
'People',
|
||||||
GridField::create(
|
GridField::create(
|
||||||
|
@ -39,7 +39,6 @@ class Person extends DataObject implements TestOnly
|
|||||||
public function getCMSFields()
|
public function getCMSFields()
|
||||||
{
|
{
|
||||||
$fields = parent::getCMSFields();
|
$fields = parent::getCMSFields();
|
||||||
// TODO No longer necessary once FormScaffolder uses GridField
|
|
||||||
$fields->replaceField(
|
$fields->replaceField(
|
||||||
'Categories',
|
'Categories',
|
||||||
GridField::create(
|
GridField::create(
|
||||||
|
@ -185,10 +185,6 @@ class GridFieldTest extends SapphireTest
|
|||||||
{
|
{
|
||||||
$obj = new GridField('testfield', 'testfield');
|
$obj = new GridField('testfield', 'testfield');
|
||||||
|
|
||||||
// @todo - PHP 7.0.6 change requires __isset() to return true
|
|
||||||
// for each reference from left to right along an isset() invocation.
|
|
||||||
// See https://bugs.php.net/bug.php?id=62059
|
|
||||||
|
|
||||||
// Check value persistence
|
// Check value persistence
|
||||||
$this->assertEquals(15, $obj->State->NoValue(15));
|
$this->assertEquals(15, $obj->State->NoValue(15));
|
||||||
$this->assertEquals(15, $obj->State->NoValue(-1));
|
$this->assertEquals(15, $obj->State->NoValue(-1));
|
||||||
|
@ -222,15 +222,6 @@ class ListboxFieldTest extends SapphireTest
|
|||||||
'Field validates values in source map'
|
'Field validates values in source map'
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
|
||||||
* @todo re-enable these tests when field validation is removed from {@link ListboxField::setValue()} and moved
|
|
||||||
* to the {@link ListboxField::validate()} function
|
|
||||||
*/
|
|
||||||
// $field->setValue(4);
|
|
||||||
// $this->assertFalse(
|
|
||||||
// $field->validate($validator),
|
|
||||||
// 'Field does not validate values outside of source map'
|
|
||||||
// );
|
|
||||||
$field->setValue(
|
$field->setValue(
|
||||||
false,
|
false,
|
||||||
new ArrayData(
|
new ArrayData(
|
||||||
|
@ -128,9 +128,6 @@ class NumericFieldTest extends SapphireTest
|
|||||||
$field = new NumericField('Number');
|
$field = new NumericField('Number');
|
||||||
|
|
||||||
$html = $field->Field();
|
$html = $field->Field();
|
||||||
|
|
||||||
// @todo - Revert to number one day when html5 number supports proper localisation
|
|
||||||
// See https://github.com/silverstripe/silverstripe-framework/pull/4565
|
|
||||||
$this->assertStringContainsString('type="text"', $html, 'number type not set');
|
$this->assertStringContainsString('type="text"', $html, 'number type not set');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,9 +5,6 @@ namespace SilverStripe\Forms\Tests;
|
|||||||
use SilverStripe\Dev\SapphireTest;
|
use SilverStripe\Dev\SapphireTest;
|
||||||
use SilverStripe\Forms\RequiredFields;
|
use SilverStripe\Forms\RequiredFields;
|
||||||
|
|
||||||
/**
|
|
||||||
* @todo Test the validation method php()
|
|
||||||
*/
|
|
||||||
class RequiredFieldsTest extends SapphireTest
|
class RequiredFieldsTest extends SapphireTest
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -59,7 +59,6 @@ class TimeFieldTest extends SapphireTest
|
|||||||
$f = new TimeField('Time', 'Time');
|
$f = new TimeField('Time', 'Time');
|
||||||
$f->setHTML5(false);
|
$f->setHTML5(false);
|
||||||
$f->setLocale('fr_FR');
|
$f->setLocale('fr_FR');
|
||||||
// TODO Find an hour format that's actually different
|
|
||||||
$f->setValue('23:59');
|
$f->setValue('23:59');
|
||||||
$this->assertEquals($f->dataValue(), '23:59:00');
|
$this->assertEquals($f->dataValue(), '23:59:00');
|
||||||
}
|
}
|
||||||
|
@ -117,8 +117,6 @@ class DBFieldTest extends SapphireTest
|
|||||||
$this->assertEquals(true, $boolean->prepValueForDB(1));
|
$this->assertEquals(true, $boolean->prepValueForDB(1));
|
||||||
$this->assertEquals(true, $boolean->prepValueForDB('1'));
|
$this->assertEquals(true, $boolean->prepValueForDB('1'));
|
||||||
|
|
||||||
// @todo - Revisit Varchar to evaluate correct behaviour of nullifyEmpty
|
|
||||||
|
|
||||||
/* Varchar behaviour: nullifyifEmpty defaults to true */
|
/* Varchar behaviour: nullifyifEmpty defaults to true */
|
||||||
$varchar = DBVarchar::create();
|
$varchar = DBVarchar::create();
|
||||||
$this->assertEquals(0, $varchar->prepValueForDB(0));
|
$this->assertEquals(0, $varchar->prepValueForDB(0));
|
||||||
|
@ -95,8 +95,6 @@ class DataObjectLazyLoadingTest extends SapphireTest
|
|||||||
$teams = DataObject::get(Team::class); // query parent class
|
$teams = DataObject::get(Team::class); // query parent class
|
||||||
$subteam1Lazy = $teams->find('ID', $subteam1->ID);
|
$subteam1Lazy = $teams->find('ID', $subteam1->ID);
|
||||||
|
|
||||||
// TODO Fix hasField() to exclude *_Lazy
|
|
||||||
// $this->assertFalse($subteam1Lazy->hasField('SubclassDatabaseField_Lazy'));
|
|
||||||
$this->assertTrue($subteam1Lazy->hasField('SubclassDatabaseField'));
|
$this->assertTrue($subteam1Lazy->hasField('SubclassDatabaseField'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -830,9 +830,6 @@ class DataObjectTest extends SapphireTest
|
|||||||
$this->assertEquals($captain2->ID, $team1->Captain->ID);
|
$this->assertEquals($captain2->ID, $team1->Captain->ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @todo Extend type change tests (e.g. '0'==NULL)
|
|
||||||
*/
|
|
||||||
public function testChangedFields()
|
public function testChangedFields()
|
||||||
{
|
{
|
||||||
$obj = $this->objFromFixture(DataObjectTest\Player::class, 'captain1');
|
$obj = $this->objFromFixture(DataObjectTest\Player::class, 'captain1');
|
||||||
@ -1140,9 +1137,6 @@ class DataObjectTest extends SapphireTest
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @todo Re-enable all test cases for field existence after behaviour has been fixed
|
|
||||||
*/
|
|
||||||
public function testFieldExistence()
|
public function testFieldExistence()
|
||||||
{
|
{
|
||||||
$teamInstance = $this->objFromFixture(DataObjectTest\Team::class, 'team1');
|
$teamInstance = $this->objFromFixture(DataObjectTest\Team::class, 'team1');
|
||||||
@ -1290,9 +1284,6 @@ class DataObjectTest extends SapphireTest
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @todo Re-enable all test cases for field inheritance aggregation after behaviour has been fixed
|
|
||||||
*/
|
|
||||||
public function testFieldInheritance()
|
public function testFieldInheritance()
|
||||||
{
|
{
|
||||||
$schema = DataObject::getSchema();
|
$schema = DataObject::getSchema();
|
||||||
@ -1633,12 +1624,6 @@ class DataObjectTest extends SapphireTest
|
|||||||
null,
|
null,
|
||||||
'merge() with $overwriteWithEmpty overwrites empty fields on left object'
|
'merge() with $overwriteWithEmpty overwrites empty fields on left object'
|
||||||
);
|
);
|
||||||
|
|
||||||
// @todo test "left" priority flag
|
|
||||||
// @todo test includeRelations flag
|
|
||||||
// @todo test includeRelations in combination with overwriteWithEmpty
|
|
||||||
// @todo test has_one relations
|
|
||||||
// @todo test has_many and many_many relations
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testPopulateDefaults()
|
public function testPopulateDefaults()
|
||||||
@ -1919,7 +1904,6 @@ class DataObjectTest extends SapphireTest
|
|||||||
public function testManyManyUnlimitedRowCount()
|
public function testManyManyUnlimitedRowCount()
|
||||||
{
|
{
|
||||||
$player = $this->objFromFixture(DataObjectTest\Player::class, 'player2');
|
$player = $this->objFromFixture(DataObjectTest\Player::class, 'player2');
|
||||||
// TODO: What's going on here?
|
|
||||||
$this->assertEquals(2, $player->Teams()->dataQuery()->query()->unlimitedRowCount());
|
$this->assertEquals(2, $player->Teams()->dataQuery()->query()->unlimitedRowCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,9 +202,6 @@ class DataQueryTest extends SapphireTest
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @todo Test paramaterised
|
|
||||||
*/
|
|
||||||
public function testNestedGroups()
|
public function testNestedGroups()
|
||||||
{
|
{
|
||||||
$dq = new DataQuery(DataQueryTest\ObjectA::class);
|
$dq = new DataQuery(DataQueryTest\ObjectA::class);
|
||||||
|
@ -21,7 +21,6 @@ class PolyItem extends DataObject implements TestOnly
|
|||||||
/**
|
/**
|
||||||
* Placeholder for missing belongs_many_many for polymorphic relation
|
* Placeholder for missing belongs_many_many for polymorphic relation
|
||||||
*
|
*
|
||||||
* @todo Make this work for belongs_many_many
|
|
||||||
* @return Generator|DataObject[]
|
* @return Generator|DataObject[]
|
||||||
*/
|
*/
|
||||||
public function Objects()
|
public function Objects()
|
||||||
|
@ -10,8 +10,6 @@ use SilverStripe\ORM\Tests\DataObjectTest\Team;
|
|||||||
* Tests the PolymorphicHasManyList class
|
* Tests the PolymorphicHasManyList class
|
||||||
*
|
*
|
||||||
* @see PolymorphicHasManyList
|
* @see PolymorphicHasManyList
|
||||||
*
|
|
||||||
* @todo Complete
|
|
||||||
*/
|
*/
|
||||||
class PolymorphicHasManyListTest extends SapphireTest
|
class PolymorphicHasManyListTest extends SapphireTest
|
||||||
{
|
{
|
||||||
|
@ -104,7 +104,6 @@ class MemberCsvBulkLoaderTest extends SapphireTest
|
|||||||
DataObject::flush_and_destroy_cache();
|
DataObject::flush_and_destroy_cache();
|
||||||
$member = DataObject::get_by_id(Member::class, $memberID);
|
$member = DataObject::get_by_id(Member::class, $memberID);
|
||||||
|
|
||||||
// TODO Direct getter doesn't work, wtf!
|
|
||||||
$this->assertEquals(Security::config()->password_encryption_algorithm, $member->getField('PasswordEncryption'));
|
$this->assertEquals(Security::config()->password_encryption_algorithm, $member->getField('PasswordEncryption'));
|
||||||
$auth = new MemberAuthenticator();
|
$auth = new MemberAuthenticator();
|
||||||
$result = $auth->checkPassword($member, 'mypassword');
|
$result = $auth->checkPassword($member, 'mypassword');
|
||||||
|
@ -21,8 +21,6 @@ class SecurityDefaultAdminTest extends SapphireTest
|
|||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
// TODO Workaround to force database clearing with no fixture present,
|
|
||||||
// and avoid sideeffects from other tests
|
|
||||||
if (!static::$tempDB->isUsed()) {
|
if (!static::$tempDB->isUsed()) {
|
||||||
static::$tempDB->build();
|
static::$tempDB->build();
|
||||||
}
|
}
|
||||||
|
@ -18,10 +18,6 @@ use SilverStripe\Dev\Deprecation;
|
|||||||
use SilverStripe\View\SSViewer;
|
use SilverStripe\View\SSViewer;
|
||||||
use SilverStripe\View\ThemeResourceLoader;
|
use SilverStripe\View\ThemeResourceLoader;
|
||||||
|
|
||||||
/**
|
|
||||||
* @todo Test that order of combine_files() is correct
|
|
||||||
* @todo Figure out how to clear the modified state of Requirements class - might affect other tests.
|
|
||||||
*/
|
|
||||||
class RequirementsTest extends SapphireTest
|
class RequirementsTest extends SapphireTest
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -2057,7 +2057,6 @@ EOC;
|
|||||||
|
|
||||||
public function testRequireCallInTemplateInclude()
|
public function testRequireCallInTemplateInclude()
|
||||||
{
|
{
|
||||||
//TODO undo skip test on the event that templates ever obtain the ability to reference MODULE_DIR (or something to that effect)
|
|
||||||
if (FRAMEWORK_DIR === 'framework') {
|
if (FRAMEWORK_DIR === 'framework') {
|
||||||
$template = new SSViewer(['SSViewerTestProcess']);
|
$template = new SSViewer(['SSViewerTestProcess']);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user