2011-04-15 11:35:30 +02:00
< ? php
/**
2012-04-18 22:30:12 +02:00
An extension that adds additional functionality to a { @ link DataObject } .
2011-04-15 11:35:30 +02:00
*
2012-04-12 08:02:46 +02:00
* @ package framework
2011-04-15 11:35:30 +02:00
* @ subpackage model
*/
abstract class DataExtension extends Extension {
/**
* Statics on a { @ link DataObject } subclass
* which can be extended by an extension . This list is
* limited for security and performance reasons .
*
* Keys are the static names , and the values are whether or not the value is an array that should
* be merged .
*
* @ var array
*/
protected static $extendable_statics = array (
2012-04-18 22:30:12 +02:00
'db' => true ,
2011-04-15 11:35:30 +02:00
'has_one' => true ,
'belongs_to' => true ,
2012-04-18 22:30:12 +02:00
'indexes' => true ,
'defaults' => true ,
'has_many' => true ,
'many_many' => true ,
'belongs_many_many' => true ,
2011-04-15 11:35:30 +02:00
'many_many_extraFields' => true ,
'searchable_fields' => true ,
'api_access' => false ,
);
2011-12-22 03:29:16 +01:00
2012-08-22 23:29:13 +02:00
static function get_extra_config ( $class , $extension , $args ) {
if ( method_exists ( $extension , 'extraDBFields' )) {
2011-12-22 03:29:16 +01:00
$extraStaticsMethod = 'extraDBFields' ;
2011-04-15 11:35:30 +02:00
} else {
2011-12-22 03:29:16 +01:00
$extraStaticsMethod = 'extraStatics' ;
2011-04-15 11:35:30 +02:00
}
2011-08-11 04:01:26 +02:00
2012-09-02 13:55:35 +02:00
$statics = Injector :: inst () -> get ( $extension , true , $args ) -> $extraStaticsMethod ( $class , $extension );
2011-12-22 03:29:16 +01:00
if ( $statics ) {
2012-08-22 23:29:13 +02:00
Deprecation :: notice ( '3.1.0' , " $extraStaticsMethod deprecated. Just define statics on your extension, or use get_extra_config " , Deprecation :: SCOPE_GLOBAL );
return $statics ;
2011-04-15 11:35:30 +02:00
}
}
2012-08-22 23:29:13 +02:00
2011-09-23 10:03:28 +02:00
public static function unload_extra_statics ( $class , $extension ) {
2011-12-22 03:29:16 +01:00
throw new Exception ( 'unload_extra_statics gone' );
2011-09-23 10:03:28 +02:00
}
2012-04-13 06:18:06 +02:00
/**
* Hook for extension - specific validation .
*
* @ param $validationResult Local validation result
* @ throws ValidationException
*/
2012-04-13 06:19:06 +02:00
function validate ( ValidationResult $validationResult ) {
2012-04-13 06:18:06 +02:00
}
2011-09-23 10:03:28 +02:00
2011-04-15 11:35:30 +02:00
/**
* Edit the given query object to support queries for this extension
*
* @ param SQLQuery $query Query to augment .
*/
function augmentSQL ( SQLQuery & $query ) {
}
/**
* Update the database schema as required by this extension .
2011-09-19 04:20:38 +02:00
*
* When duplicating a table ' s structure , remember to duplicate the create options
* as well . See { @ link Versioned -> augmentDatabase } for an example .
2011-04-15 11:35:30 +02:00
*/
function augmentDatabase () {
}
/**
* Augment a write - record request .
*
* @ param SQLQuery $manipulation Query to augment .
*/
function augmentWrite ( & $manipulation ) {
}
function onBeforeWrite () {
}
function onAfterWrite () {
}
function onBeforeDelete () {
}
function onAfterDelete () {
}
function requireDefaultRecords () {
}
function populateDefaults () {
}
function can ( $member ) {
}
function canEdit ( $member ) {
}
function canDelete ( $member ) {
}
function canCreate ( $member ) {
}
/**
* Define extra database fields
*
* Return a map where the keys are db , has_one , etc , and the values are
* additional fields / relations to be defined .
2011-10-30 23:17:37 +01:00
*
* @ param $class since this method might be called on the class directly
* @ param $extension since this can help to extract parameters to help set indexes
2011-04-15 11:35:30 +02:00
*
* @ return array Returns a map where the keys are db , has_one , etc , and
* the values are additional fields / relations to be defined .
*/
2012-03-27 06:04:11 +02:00
function extraStatics ( $class = null , $extension = null ) {
2011-04-15 11:35:30 +02:00
return array ();
}
/**
* This function is used to provide modifications to the form in the CMS
* by the extension . By default , no changes are made . { @ link DataObject -> getCMSFields ()} .
*
* Please consider using { @ link updateFormFields ()} to globally add
* formfields to the record . The method { @ link updateCMSFields ()}
* should just be used to add or modify tabs , or fields which
* are specific to the CMS - context .
*
2011-05-11 09:51:54 +02:00
* Caution : Use { @ link FieldList -> addFieldToTab ()} to add fields .
2011-04-15 11:35:30 +02:00
*
2011-10-28 03:37:27 +02:00
* @ param FieldList $fields FieldList with a contained TabSet
2011-04-15 11:35:30 +02:00
*/
2011-05-11 09:51:54 +02:00
function updateCMSFields ( FieldList $fields ) {
2011-04-15 11:35:30 +02:00
}
/**
* This function is used to provide modifications to the form used
* for front end forms . { @ link DataObject -> getFrontEndFields ()}
*
2011-10-28 03:37:27 +02:00
* Caution : Use { @ link FieldList -> push ()} to add fields .
2011-04-15 11:35:30 +02:00
*
2011-10-28 03:37:27 +02:00
* @ param FieldList $fields FieldList without TabSet nesting
2011-04-15 11:35:30 +02:00
*/
2011-05-11 09:51:54 +02:00
function updateFrontEndFields ( FieldList $fields ) {
2011-04-15 11:35:30 +02:00
}
/**
* This is used to provide modifications to the form actions
* used in the CMS . { @ link DataObject -> getCMSActions ()} .
*
2011-10-28 03:37:27 +02:00
* @ param FieldList $actions FieldList
2011-04-15 11:35:30 +02:00
*/
2011-05-11 09:51:54 +02:00
function updateCMSActions ( FieldList $actions ) {
2011-04-15 11:35:30 +02:00
}
/**
* this function is used to provide modifications to the summary fields in CMS
* by the extension
* By default , the summaryField () of its owner will merge more fields defined in the extension ' s
* $extra_fields [ 'summary_fields' ]
2012-04-18 22:30:12 +02:00
*
* @ param array $fields Array of field names
2011-04-15 11:35:30 +02:00
*/
2012-04-18 22:30:12 +02:00
function updateSummaryFields ( & $fields ) {
$summary_fields = Config :: inst () -> get ( $this -> class , 'summary_fields' );
if ( $summary_fields ) {
2011-04-15 11:35:30 +02:00
// if summary_fields were passed in numeric array,
// convert to an associative array
if ( $summary_fields && array_key_exists ( 0 , $summary_fields )) {
$summary_fields = array_combine ( array_values ( $summary_fields ), array_values ( $summary_fields ));
}
if ( $summary_fields ) $fields = array_merge ( $fields , $summary_fields );
}
}
2012-04-18 22:30:12 +02:00
2011-04-15 11:35:30 +02:00
/**
* this function is used to provide modifications to the fields labels in CMS
* by the extension
* By default , the fieldLabels () of its owner will merge more fields defined in the extension ' s
* $extra_fields [ 'field_labels' ]
2012-04-18 22:30:12 +02:00
*
* @ param array $labels Array of field labels
2011-04-15 11:35:30 +02:00
*/
2012-04-18 22:30:12 +02:00
function updateFieldLabels ( & $labels ) {
$field_labels = Config :: inst () -> get ( $this -> class , 'field_labels' );
if ( $field_labels ) {
$labels = array_merge ( $labels , $field_labels );
2011-04-15 11:35:30 +02:00
}
}
}
2012-02-12 21:22:11 +01:00