diff --git a/_config.php b/_config.php
index dde7bb7..5ed7c55 100644
--- a/_config.php
+++ b/_config.php
@@ -1,9 +1,8 @@
action map.
+ *
+ * @var array
+ */
+ private static $url_handlers = array(
+ 'delete' => 'delete',
+ );
- /**
- * RequestHandler url => action map
- * @var array
- */
- private static $url_handlers = array(
- 'delete' => 'delete'
- );
-
+ /**
+ * Delete the selected records passed from the delete bulk action.
+ *
+ * @param SS_HTTPRequest $request
+ *
+ * @return SS_HTTPResponse List of deleted records ID
+ */
+ public function delete(SS_HTTPRequest $request)
+ {
+ $ids = array();
- /**
- * Delete the selected records passed from the delete bulk action
- *
- * @param SS_HTTPRequest $request
- * @return SS_HTTPResponse List of deleted records ID
- */
- public function delete(SS_HTTPRequest $request)
- {
- $ids = array();
-
- foreach ( $this->getRecords() as $record )
- {
- array_push($ids, $record->ID);
- $record->delete();
- }
+ foreach ($this->getRecords() as $record) {
+ array_push($ids, $record->ID);
+ $record->delete();
+ }
- $response = new SS_HTTPResponse(Convert::raw2json(array(
- 'done' => true,
- 'records' => $ids
- )));
- $response->addHeader('Content-Type', 'text/json');
- return $response;
- }
-}
\ No newline at end of file
+ $response = new SS_HTTPResponse(Convert::raw2json(array(
+ 'done' => true,
+ 'records' => $ids,
+ )));
+ $response->addHeader('Content-Type', 'text/json');
+
+ return $response;
+ }
+}
diff --git a/bulkManager/code/GridFieldBulkActionEditHandler.php b/bulkManager/code/GridFieldBulkActionEditHandler.php
index 880e8fe..43798ad 100644
--- a/bulkManager/code/GridFieldBulkActionEditHandler.php
+++ b/bulkManager/code/GridFieldBulkActionEditHandler.php
@@ -3,394 +3,372 @@
* Bulk action handler for editing records.
*
* @author colymba
- * @package GridFieldBulkEditingTools
- * @subpackage BulkManager
*/
class GridFieldBulkActionEditHandler extends GridFieldBulkActionHandler
-{
- /**
- * RequestHandler allowed actions
- * @var array
- */
- private static $allowed_actions = array(
- 'index',
- 'bulkEditForm',
- 'recordEditForm'
- );
+{
+ /**
+ * RequestHandler allowed actions.
+ *
+ * @var array
+ */
+ private static $allowed_actions = array(
+ 'index',
+ 'bulkEditForm',
+ 'recordEditForm',
+ );
-
- /**
- * RequestHandler url => action map
- * @var array
- */
- private static $url_handlers = array(
- 'bulkEdit/bulkEditForm' => 'bulkEditForm',
+ /**
+ * RequestHandler url => action map.
+ *
+ * @var array
+ */
+ private static $url_handlers = array(
+ 'bulkEdit/bulkEditForm' => 'bulkEditForm',
'bulkEdit/recordEditForm' => 'recordEditForm',
- 'bulkEdit' => 'index'
- );
+ 'bulkEdit' => 'index',
+ );
+ /**
+ * Return URL to this RequestHandler.
+ *
+ * @param string $action Action to append to URL
+ *
+ * @return string URL
+ */
+ public function Link($action = null)
+ {
+ return Controller::join_links(parent::Link(), 'bulkEdit', $action);
+ }
- /**
- * Return URL to this RequestHandler
- * @param string $action Action to append to URL
- * @return string URL
- */
- public function Link($action = null)
- {
- return Controller::join_links(parent::Link(), 'bulkEdit', $action);
- }
+ /**
+ * Return a form for all the selected DataObjects
+ * with their respective editable fields.
+ *
+ * @return Form Selected DataObjects editable fields
+ */
+ public function bulkEditForm()
+ {
+ $crumbs = $this->Breadcrumbs();
+ if ($crumbs && $crumbs->count() >= 2) {
+ $one_level_up = $crumbs->offsetGet($crumbs->count() - 2);
+ }
+ $actions = new FieldList();
- /**
- * Return a form for all the selected DataObjects
- * with their respective editable fields.
- *
- * @return Form Selected DataObjects editable fields
- */
- public function bulkEditForm()
- {
- $crumbs = $this->Breadcrumbs();
- if($crumbs && $crumbs->count()>=2)
- {
- $one_level_up = $crumbs->offsetGet($crumbs->count()-2);
- }
-
- $actions = new FieldList();
-
- $actions->push(
- FormAction::create('doSave', _t('GRIDFIELD_BULKMANAGER_EDIT_HANDLER.SAVE_BTN_LABEL', 'Save all'))
- ->setAttribute('id', 'bulkEditingSaveBtn')
- ->addExtraClass('ss-ui-action-constructive')
- ->setAttribute('data-icon', 'accept')
- ->setUseButtonTag(true)
- );
-
- $actions->push(
- FormAction::create('Cancel', _t('GRIDFIELD_BULKMANAGER_EDIT_HANDLER.CANCEL_BTN_LABEL', 'Cancel'))
- ->setAttribute('id', 'bulkEditingUpdateCancelBtn')
- ->addExtraClass('ss-ui-action-destructive cms-panel-link')
- ->setAttribute('data-icon', 'decline')
- ->setAttribute('href', $one_level_up->Link)
- ->setUseButtonTag(true)
- ->setAttribute('src', '')//changes type to image so isn't hooked by default actions handlers
- );
-
- $recordList = $this->getRecordIDList();
- $recordsFieldList = new FieldList();
- $config = $this->component->getConfig();
+ $actions->push(
+ FormAction::create('doSave', _t('GRIDFIELD_BULKMANAGER_EDIT_HANDLER.SAVE_BTN_LABEL', 'Save all'))
+ ->setAttribute('id', 'bulkEditingSaveBtn')
+ ->addExtraClass('ss-ui-action-constructive')
+ ->setAttribute('data-icon', 'accept')
+ ->setUseButtonTag(true)
+ );
- $editingCount = count($recordList);
- $modelClass = $this->gridField->getModelClass();
- $singleton = singleton($modelClass);
- $titleModelClass = (($editingCount > 1) ? $singleton->i18n_plural_name() : $singleton->i18n_singular_name());
+ $actions->push(
+ FormAction::create('Cancel', _t('GRIDFIELD_BULKMANAGER_EDIT_HANDLER.CANCEL_BTN_LABEL', 'Cancel'))
+ ->setAttribute('id', 'bulkEditingUpdateCancelBtn')
+ ->addExtraClass('ss-ui-action-destructive cms-panel-link')
+ ->setAttribute('data-icon', 'decline')
+ ->setAttribute('href', $one_level_up->Link)
+ ->setUseButtonTag(true)
+ ->setAttribute('src', '')//changes type to image so isn't hooked by default actions handlers
+ );
+
+ $recordList = $this->getRecordIDList();
+ $recordsFieldList = new FieldList();
+ $config = $this->component->getConfig();
+
+ $editingCount = count($recordList);
+ $modelClass = $this->gridField->getModelClass();
+ $singleton = singleton($modelClass);
+ $titleModelClass = (($editingCount > 1) ? $singleton->i18n_plural_name() : $singleton->i18n_singular_name());
//some cosmetics
$headerText = _t('GRIDFIELD_BULKMANAGER_EDIT_HANDLER.HEADER_TEXT',
- 'Editing {count} {class}',
- array(
- 'count' => $editingCount,
- 'class' => $titleModelClass
- )
- );
- $header = LiteralField::create(
- 'bulkEditHeader',
- '
'
- );
- $recordsFieldList->push($header);
+ 'Editing {count} {class}',
+ array(
+ 'count' => $editingCount,
+ 'class' => $titleModelClass,
+ )
+ );
+ $header = LiteralField::create(
+ 'bulkEditHeader',
+ ''
+ );
+ $recordsFieldList->push($header);
- $toggle = LiteralField::create('bulkEditToggle', '' . _t('GRIDFIELD_BULKMANAGER_EDIT_HANDLER.TOGGLE_ALL_LINK', 'Show/Hide all') . '');
- $recordsFieldList->push($toggle);
+ $toggle = LiteralField::create('bulkEditToggle', ''._t('GRIDFIELD_BULKMANAGER_EDIT_HANDLER.TOGGLE_ALL_LINK', 'Show/Hide all').'');
+ $recordsFieldList->push($toggle);
-
- //fetch fields for each record and push to fieldList
- foreach ( $recordList as $id )
- {
- $record = DataObject::get_by_id($modelClass, $id);
- $recordEditingFields = $this->getRecordEditingFields($record);
+ //fetch fields for each record and push to fieldList
+ foreach ($recordList as $id) {
+ $record = DataObject::get_by_id($modelClass, $id);
+ $recordEditingFields = $this->getRecordEditingFields($record);
- $toggleField = ToggleCompositeField::create(
- 'RecordFields_'.$id,
- $record->getTitle(),
- $recordEditingFields
- )
- ->setHeadingLevel(4)
- ->setAttribute('data-id', $id)
- ->addExtraClass('bulkEditingFieldHolder');
+ $toggleField = ToggleCompositeField::create(
+ 'RecordFields_'.$id,
+ $record->getTitle(),
+ $recordEditingFields
+ )
+ ->setHeadingLevel(4)
+ ->setAttribute('data-id', $id)
+ ->addExtraClass('bulkEditingFieldHolder');
- $recordsFieldList->push($toggleField);
- }
-
- $bulkEditForm = Form::create(
- $this,
- 'recordEditForm', //recordEditForm name is here to trick SS to pass all subform request to recordEditForm()
- $recordsFieldList,
- $actions
- );
-
- if($crumbs && $crumbs->count()>=2){
- $bulkEditForm->Backlink = $one_level_up->Link;
- }
+ $recordsFieldList->push($toggleField);
+ }
- //override form action URL back to bulkEditForm
- //and add record ids GET var
- $bulkEditForm->setAttribute(
- 'action',
- $this->Link('bulkEditForm?records[]='.implode('&', $recordList))
- );
+ $bulkEditForm = Form::create(
+ $this,
+ 'recordEditForm', //recordEditForm name is here to trick SS to pass all subform request to recordEditForm()
+ $recordsFieldList,
+ $actions
+ );
- return $bulkEditForm;
- }
+ if ($crumbs && $crumbs->count() >= 2) {
+ $bulkEditForm->Backlink = $one_level_up->Link;
+ }
+ //override form action URL back to bulkEditForm
+ //and add record ids GET var
+ $bulkEditForm->setAttribute(
+ 'action',
+ $this->Link('bulkEditForm?records[]='.implode('&', $recordList))
+ );
- /**
- * Return's a form with only one record's fields
- * Used for bulkEditForm subForm requests via ajax
- *
- * @return Form Currently being edited form
- */
- public function recordEditForm()
- {
- //clone current request : used to figure out what record we are asking
- $request = clone $this->request;
- $recordInfo = $request->shift();
+ return $bulkEditForm;
+ }
- //shift request till we find the requested field
- while ($recordInfo)
- {
- if ( $unescapedRecordInfo = $this->unEscapeFieldName($recordInfo) )
- {
- $id = $unescapedRecordInfo['id'];
- $fieldName = $unescapedRecordInfo['name'];
+ /**
+ * Return's a form with only one record's fields
+ * Used for bulkEditForm subForm requests via ajax.
+ *
+ * @return Form Currently being edited form
+ */
+ public function recordEditForm()
+ {
+ //clone current request : used to figure out what record we are asking
+ $request = clone $this->request;
+ $recordInfo = $request->shift();
- $action = $request->shift();
- break;
- }
- else{
- $recordInfo = $request->shift();
- }
- }
+ //shift request till we find the requested field
+ while ($recordInfo) {
+ if ($unescapedRecordInfo = $this->unEscapeFieldName($recordInfo)) {
+ $id = $unescapedRecordInfo['id'];
+ $fieldName = $unescapedRecordInfo['name'];
- //generate a form with only that requested record's fields
- if ( $id )
- {
- $modelClass = $this->gridField->getModelClass();
- $record = DataObject::get_by_id($modelClass, $id);
+ $action = $request->shift();
+ break;
+ } else {
+ $recordInfo = $request->shift();
+ }
+ }
- $cmsFields = $record->getCMSFields();
- $recordEditingFields = $this->getRecordEditingFields($record);
-
- return Form::create(
- $this->gridField,
- 'recordEditForm',
- FieldList::create($recordEditingFields),
- FieldList::create()
- );
- }
- }
+ //generate a form with only that requested record's fields
+ if ($id) {
+ $modelClass = $this->gridField->getModelClass();
+ $record = DataObject::get_by_id($modelClass, $id);
+ $cmsFields = $record->getCMSFields();
+ $recordEditingFields = $this->getRecordEditingFields($record);
- /**
- * Returns a record's populated form fields
- * with all filtering done ready to be included in the main form
- *
- * @uses DataObject::getCMSFields()
- *
- * @param DataObject $record The record to get the fields from
- * @return array The record's editable fields
- */
- private function getRecordEditingFields(DataObject $record)
- {
- $tempForm = Form::create(
- $this, "TempEditForm",
- $record->getCMSFields(),
- FieldList::create()
- );
+ return Form::create(
+ $this->gridField,
+ 'recordEditForm',
+ FieldList::create($recordEditingFields),
+ FieldList::create()
+ );
+ }
+ }
- $tempForm->loadDataFrom($record);
- $fields = $tempForm->Fields();
+ /**
+ * Returns a record's populated form fields
+ * with all filtering done ready to be included in the main form.
+ *
+ * @uses DataObject::getCMSFields()
+ *
+ * @param DataObject $record The record to get the fields from
+ *
+ * @return array The record's editable fields
+ */
+ private function getRecordEditingFields(DataObject $record)
+ {
+ $tempForm = Form::create(
+ $this, 'TempEditForm',
+ $record->getCMSFields(),
+ FieldList::create()
+ );
- $fields = $this->filterRecordEditingFields($fields, $record->ID);
+ $tempForm->loadDataFrom($record);
+ $fields = $tempForm->Fields();
- return $fields;
- }
+ $fields = $this->filterRecordEditingFields($fields, $record->ID);
+ return $fields;
+ }
- /**
- * Filters a records editable fields
- * based on component's config
- * and escape each field with unique name.
- *
- * See {@link GridFieldBulkManager} component for filtering config.
- *
- * @param FieldList $fields Record's CMS Fields
- * @param integer $id Record's ID, used fir unique name
- * @return array Filtered record's fields
- */
- private function filterRecordEditingFields(FieldList $fields, $id)
- {
- $config = $this->component->getConfig();
- $editableFields = $config['editableFields'];
+ /**
+ * Filters a records editable fields
+ * based on component's config
+ * and escape each field with unique name.
+ *
+ * See {@link GridFieldBulkManager} component for filtering config.
+ *
+ * @param FieldList $fields Record's CMS Fields
+ * @param int $id Record's ID, used fir unique name
+ *
+ * @return array Filtered record's fields
+ */
+ private function filterRecordEditingFields(FieldList $fields, $id)
+ {
+ $config = $this->component->getConfig();
+ $editableFields = $config['editableFields'];
// get all dataFields or just the ones allowed in config
- if ( $editableFields )
- {
- $dataFields = array();
+ if ($editableFields) {
+ $dataFields = array();
- foreach ($editableFields as $fieldName)
- {
- $dataFields[$fieldName] = $fields->dataFieldByName($fieldName);
- }
- }
- else{
- $dataFields = $fields->dataFields();
- }
+ foreach ($editableFields as $fieldName) {
+ $dataFields[$fieldName] = $fields->dataFieldByName($fieldName);
+ }
+ } else {
+ $dataFields = $fields->dataFields();
+ }
- // escape field names with unique prefix
- foreach ( $dataFields as $name => $field )
- {
- $field->Name = $this->escapeFieldName($id, $name);
- $dataFields[$name] = $field;
- }
-
- return $dataFields;
- }
+ // escape field names with unique prefix
+ foreach ($dataFields as $name => $field) {
+ $field->Name = $this->escapeFieldName($id, $name);
+ $dataFields[$name] = $field;
+ }
+ return $dataFields;
+ }
- /**
- * Escape a fieldName with a unique prefix
- *
- * @param integer $recordID Record id from who the field belongs
- * @param string $name Field name
- * @return string Escaped field name
- */
- protected function escapeFieldName($recordID, $name)
- {
- return 'record_' . $recordID . '_' . $name;
- }
+ /**
+ * Escape a fieldName with a unique prefix.
+ *
+ * @param int $recordID Record id from who the field belongs
+ * @param string $name Field name
+ *
+ * @return string Escaped field name
+ */
+ protected function escapeFieldName($recordID, $name)
+ {
+ return 'record_'.$recordID.'_'.$name;
+ }
+ /**
+ * Un-escape a previously escaped field name.
+ *
+ * @param string $fieldName Escaped field name
+ *
+ * @return array|false Fasle if the fieldName was not escaped. Or Array map with record 'id' and field 'name'
+ */
+ protected function unEscapeFieldName($fieldName)
+ {
+ $parts = array();
+ $match = preg_match('/record_(\d+)_(\w+)/i', $fieldName, $parts);
- /**
- * Un-escape a previously escaped field name
- *
- * @param string $fieldName Escaped field name
- * @return array|false Fasle if the fieldName was not escaped. Or Array map with record 'id' and field 'name'
- */
- protected function unEscapeFieldName($fieldName)
- {
- $parts = array();
- $match = preg_match('/record_(\d+)_(\w+)/i', $fieldName, $parts);
+ if (!$match) {
+ return false;
+ } else {
+ return array(
+ 'id' => $parts[1],
+ 'name' => $parts[2],
+ );
+ }
+ }
- if ( !$match )
- {
- return false;
- }
- else{
- return array(
- 'id' => $parts[1],
- 'name' => $parts[2],
- );
- }
- }
-
-
- /**
- * Creates and return the bulk editing interface
- *
- * @return string Form's HTML
- */
- public function index()
- {
- $form = $this->bulkEditForm();
- $form->setTemplate('LeftAndMain_EditForm');
- $form->addExtraClass('center cms-content');
- $form->setAttribute('data-pjax-fragment', 'CurrentForm Content');
-
- Requirements::javascript(BULKEDITTOOLS_MANAGER_PATH . '/javascript/GridFieldBulkEditingForm.js');
- Requirements::css(BULKEDITTOOLS_MANAGER_PATH . '/css/GridFieldBulkEditingForm.css');
- Requirements::add_i18n_javascript(BULKEDITTOOLS_PATH . '/lang/js');
-
- if($this->request->isAjax())
- {
- $response = new SS_HTTPResponse(
- Convert::raw2json(array( 'Content' => $form->forAjaxTemplate()->getValue() ))
- );
- $response->addHeader('X-Pjax', 'Content');
- $response->addHeader('Content-Type', 'text/json');
- $response->addHeader('X-Title', 'SilverStripe - Bulk '.$this->gridField->list->dataClass.' Editing');
- return $response;
- }
- else {
- $controller = $this->getToplevelController();
- return $controller->customise(array( 'Content' => $form ));
- }
- }
+ /**
+ * Creates and return the bulk editing interface.
+ *
+ * @return string Form's HTML
+ */
+ public function index()
+ {
+ $form = $this->bulkEditForm();
+ $form->setTemplate('LeftAndMain_EditForm');
+ $form->addExtraClass('center cms-content');
+ $form->setAttribute('data-pjax-fragment', 'CurrentForm Content');
+ Requirements::javascript(BULKEDITTOOLS_MANAGER_PATH.'/javascript/GridFieldBulkEditingForm.js');
+ Requirements::css(BULKEDITTOOLS_MANAGER_PATH.'/css/GridFieldBulkEditingForm.css');
+ Requirements::add_i18n_javascript(BULKEDITTOOLS_PATH.'/lang/js');
- /**
- * Handles bulkEditForm submission
- * and parses and saves each records data
- *
- * @param array $data Sumitted form data
- * @param Form $form Form
- */
- public function doSave($data, $form)
- {
- $className = $this->gridField->list->dataClass;
- $singleton = singleton($className);
+ if ($this->request->isAjax()) {
+ $response = new SS_HTTPResponse(
+ Convert::raw2json(array('Content' => $form->forAjaxTemplate()->getValue()))
+ );
+ $response->addHeader('X-Pjax', 'Content');
+ $response->addHeader('Content-Type', 'text/json');
+ $response->addHeader('X-Title', 'SilverStripe - Bulk '.$this->gridField->list->dataClass.' Editing');
- $formsData = array();
- $ids = array();
- $done = 0;
+ return $response;
+ } else {
+ $controller = $this->getToplevelController();
- //unescape and sort form data per record ID
- foreach ($data as $fieldName => $value)
- {
- if ( $fieldInfo = $this->unEscapeFieldName($fieldName) )
- {
- if ( !isset($formsData[$fieldInfo['id']]) )
- {
- $formsData[$fieldInfo['id']] = array();
- }
+ return $controller->customise(array('Content' => $form));
+ }
+ }
- $formsData[$fieldInfo['id']][$fieldInfo['name']] = $value;
- }
- }
+ /**
+ * Handles bulkEditForm submission
+ * and parses and saves each records data.
+ *
+ * @param array $data Sumitted form data
+ * @param Form $form Form
+ */
+ public function doSave($data, $form)
+ {
+ $className = $this->gridField->list->dataClass;
+ $singleton = singleton($className);
- //process each record's form data and save
- foreach ($formsData as $recordID => $recordData)
- {
- $record = DataObject::get_by_id($className, $recordID);
- $recordForm = Form::create(
- $this, "RecordForm",
- $record->getCMSFields(),
- FieldList::create()
- );
+ $formsData = array();
+ $ids = array();
+ $done = 0;
- $recordForm->loadDataFrom($recordData);
- $recordForm->saveInto($record);
- $id = $record->write();
+ //unescape and sort form data per record ID
+ foreach ($data as $fieldName => $value) {
+ if ($fieldInfo = $this->unEscapeFieldName($fieldName)) {
+ if (!isset($formsData[$fieldInfo['id']])) {
+ $formsData[$fieldInfo['id']] = array();
+ }
- array_push($ids, $record->ID);
+ $formsData[$fieldInfo['id']][$fieldInfo['name']] = $value;
+ }
+ }
- if ( $id )
- {
- $done++;
- }
- }
+ //process each record's form data and save
+ foreach ($formsData as $recordID => $recordData) {
+ $record = DataObject::get_by_id($className, $recordID);
+ $recordForm = Form::create(
+ $this, 'RecordForm',
+ $record->getCMSFields(),
+ FieldList::create()
+ );
- //compose form message
- $messageModelClass = (($done > 1) ? $singleton->i18n_plural_name() : $singleton->i18n_singular_name());
- $message = _t('GRIDFIELD_BULKMANAGER_EDIT_HANDLER.SAVE_RESULT_TEXT',
- '{count} {class} saved successfully.',
- array(
- 'count' => $done,
- 'class' => $messageModelClass
- )
- );
- $form->sessionMessage($message, 'good');
+ $recordForm->loadDataFrom($recordData);
+ $recordForm->saveInto($record);
+ $id = $record->write();
- //return back to form
- return Controller::curr()->redirect($this->Link('?records[]='.implode('&records[]=', $ids)));
- //return Controller::curr()->redirect($form->Backlink); //returns to gridField
- }
+ array_push($ids, $record->ID);
+
+ if ($id) {
+ ++$done;
+ }
+ }
+
+ //compose form message
+ $messageModelClass = (($done > 1) ? $singleton->i18n_plural_name() : $singleton->i18n_singular_name());
+ $message = _t('GRIDFIELD_BULKMANAGER_EDIT_HANDLER.SAVE_RESULT_TEXT',
+ '{count} {class} saved successfully.',
+ array(
+ 'count' => $done,
+ 'class' => $messageModelClass,
+ )
+ );
+ $form->sessionMessage($message, 'good');
+
+ //return back to form
+ return Controller::curr()->redirect($this->Link('?records[]='.implode('&records[]=', $ids)));
+ //return Controller::curr()->redirect($form->Backlink); //returns to gridField
+ }
}
diff --git a/bulkManager/code/GridFieldBulkActionHandler.php b/bulkManager/code/GridFieldBulkActionHandler.php
index 91ca627..8cd5bd3 100644
--- a/bulkManager/code/GridFieldBulkActionHandler.php
+++ b/bulkManager/code/GridFieldBulkActionHandler.php
@@ -2,135 +2,137 @@
/**
* Base class to extend for all custom bulk action handlers
* Gives access to the GridField, Component and Controller
- * and implements useful functions like {@link getRecordIDList()} and {@link getRecords()}
+ * and implements useful functions like {@link getRecordIDList()} and {@link getRecords()}.
*
* @author colymba
- * @package GridFieldBulkEditingTools
- * @subpackage BulkManager
*/
class GridFieldBulkActionHandler extends RequestHandler
{
- /**
- * Related GridField instance
- * @var GridField
- */
- protected $gridField;
-
+ /**
+ * Related GridField instance.
+ *
+ * @var GridField
+ */
+ protected $gridField;
- /**
- * GridFieldBulkManager instance
- * @var GridFieldBulkManager
- */
- protected $component;
-
+ /**
+ * GridFieldBulkManager instance.
+ *
+ * @var GridFieldBulkManager
+ */
+ protected $component;
- /**
- * Current controller instance
- * @var Controller
- */
- protected $controller;
+ /**
+ * Current controller instance.
+ *
+ * @var Controller
+ */
+ protected $controller;
+ /**
+ * @param GridFIeld $gridField
+ * @param GridField_URLHandler $component
+ * @param Controller $controller
+ */
+ public function __construct($gridField, $component, $controller)
+ {
+ $this->gridField = $gridField;
+ $this->component = $component;
+ $this->controller = $controller;
+ parent::__construct();
+ }
- /**
- *
- * @param GridFIeld $gridField
- * @param GridField_URLHandler $component
- * @param Controller $controller
- */
- public function __construct($gridField, $component, $controller)
- {
- $this->gridField = $gridField;
- $this->component = $component;
- $this->controller = $controller;
- parent::__construct();
- }
+ /**
+ * Returns the URL for this RequestHandler.
+ *
+ * @author SilverStripe
+ *
+ * @see GridFieldDetailForm_ItemRequest
+ *
+ * @param string $action
+ *
+ * @return string
+ */
+ public function Link($action = null)
+ {
+ return Controller::join_links($this->gridField->Link(), 'bulkAction', $action);
+ }
+ /**
+ * Traverse up nested requests until we reach the first that's not a GridFieldDetailForm or GridFieldDetailForm_ItemRequest.
+ * The opposite of {@link Controller::curr()}, required because
+ * Controller::$controller_stack is not directly accessible.
+ *
+ * @return Controller
+ */
+ protected function getToplevelController()
+ {
+ $c = $this->controller;
+ while ($c && ($c instanceof GridFieldDetailForm_ItemRequest || $c instanceof GridFieldDetailForm)) {
+ $c = $c->getController();
+ }
- /**
- * Returns the URL for this RequestHandler
- *
- * @author SilverStripe
- * @see GridFieldDetailForm_ItemRequest
- * @param string $action
- * @return string
- */
- public function Link($action = null)
- {
- return Controller::join_links($this->gridField->Link(), 'bulkAction', $action);
- }
+ return $c;
+ }
-
- /**
- * Traverse up nested requests until we reach the first that's not a GridFieldDetailForm or GridFieldDetailForm_ItemRequest.
- * The opposite of {@link Controller::curr()}, required because
- * Controller::$controller_stack is not directly accessible.
- *
- * @return Controller
- */
- protected function getToplevelController()
- {
- $c = $this->controller;
- while($c && ($c instanceof GridFieldDetailForm_ItemRequest || $c instanceof GridFieldDetailForm)) {
- $c = $c->getController();
- }
- return $c;
- }
+ /**
+ * Edited version of the GridFieldEditForm function
+ * adds the 'Bulk Upload' at the end of the crums.
+ *
+ * CMS-specific functionality: Passes through navigation breadcrumbs
+ * to the template, and includes the currently edited record (if any).
+ * see {@link LeftAndMain->Breadcrumbs()} for details.
+ *
+ * @author SilverStripe original Breadcrumbs() method
+ *
+ * @see GridFieldDetailForm_ItemRequest
+ *
+ * @param bool $unlinked
+ *
+ * @return ArrayData
+ */
+ public function Breadcrumbs($unlinked = false)
+ {
+ if (!$this->controller->hasMethod('Breadcrumbs')) {
+ return;
+ }
+ $items = $this->controller->Breadcrumbs($unlinked);
+ $items->push(new ArrayData(array(
+ 'Title' => 'Bulk Editing',
+ 'Link' => false,
+ )));
- /**
- * Edited version of the GridFieldEditForm function
- * adds the 'Bulk Upload' at the end of the crums
- *
- * CMS-specific functionality: Passes through navigation breadcrumbs
- * to the template, and includes the currently edited record (if any).
- * see {@link LeftAndMain->Breadcrumbs()} for details.
- *
- * @author SilverStripe original Breadcrumbs() method
- * @see GridFieldDetailForm_ItemRequest
- * @param boolean $unlinked
- * @return ArrayData
- */
- public function Breadcrumbs($unlinked = false)
- {
- if(!$this->controller->hasMethod('Breadcrumbs')) return;
+ return $items;
+ }
- $items = $this->controller->Breadcrumbs($unlinked);
- $items->push(new ArrayData(array(
- 'Title' => 'Bulk Editing',
- 'Link' => false
- )));
- return $items;
- }
-
-
- /**
- * Returns the list of record IDs selected in the front-end
- *
- * @return array List of IDs
- */
- public function getRecordIDList()
- {
- $vars = $this->request->requestVars();
- return $vars['records'];
- }
+ /**
+ * Returns the list of record IDs selected in the front-end.
+ *
+ * @return array List of IDs
+ */
+ public function getRecordIDList()
+ {
+ $vars = $this->request->requestVars();
+ return $vars['records'];
+ }
- /**
- * Returns a DataList of the records selected in the front-end
- *
- * @return DataList List of records
- */
- public function getRecords()
- {
- $ids = $this->getRecordIDList();
+ /**
+ * Returns a DataList of the records selected in the front-end.
+ *
+ * @return DataList List of records
+ */
+ public function getRecords()
+ {
+ $ids = $this->getRecordIDList();
- if ( $ids )
- {
- $class = $this->gridField->list->dataClass;
- return DataList::create($class)->byIDs( $ids );
- }
- else{
- return false;
- }
- }
-}
\ No newline at end of file
+ if ($ids) {
+ $class = $this->gridField->list->dataClass;
+
+ return DataList::create($class)->byIDs($ids);
+ } else {
+ return false;
+ }
+ }
+}
diff --git a/bulkManager/code/GridFieldBulkActionUnlinkHandler.php b/bulkManager/code/GridFieldBulkActionUnlinkHandler.php
index 45cfd02..547cf9a 100644
--- a/bulkManager/code/GridFieldBulkActionUnlinkHandler.php
+++ b/bulkManager/code/GridFieldBulkActionUnlinkHandler.php
@@ -3,43 +3,43 @@
* Bulk action handler for unlinking records.
*
* @author colymba
- * @package GridFieldBulkEditingTools
- * @subpackage BulkManager
*/
-class GridFieldBulkActionUnLinkHandler extends GridFieldBulkActionHandler
+class GridFieldBulkActionUnlinkHandler extends GridFieldBulkActionHandler
{
- /**
- * RequestHandler allowed actions
- * @var array
- */
- private static $allowed_actions = array('unLink');
+ /**
+ * RequestHandler allowed actions.
+ *
+ * @var array
+ */
+ private static $allowed_actions = array('unLink');
+ /**
+ * RequestHandler url => action map.
+ *
+ * @var array
+ */
+ private static $url_handlers = array(
+ 'unLink' => 'unLink',
+ );
- /**
- * RequestHandler url => action map
- * @var array
- */
- private static $url_handlers = array(
- 'unLink' => 'unLink'
- );
-
-
- /**
- * Unlink the selected records passed from the unlink bulk action
- *
- * @param SS_HTTPRequest $request
- * @return SS_HTTPResponse List of affected records ID
- */
- public function unLink(SS_HTTPRequest $request)
- {
- $ids = $this->getRecordIDList();
- $this->gridField->list->removeMany($ids);
-
- $response = new SS_HTTPResponse(Convert::raw2json(array(
- 'done' => true,
- 'records' => $ids
- )));
- $response->addHeader('Content-Type', 'text/json');
- return $response;
- }
-}
\ No newline at end of file
+ /**
+ * Unlink the selected records passed from the unlink bulk action.
+ *
+ * @param SS_HTTPRequest $request
+ *
+ * @return SS_HTTPResponse List of affected records ID
+ */
+ public function unLink(SS_HTTPRequest $request)
+ {
+ $ids = $this->getRecordIDList();
+ $this->gridField->list->removeMany($ids);
+
+ $response = new SS_HTTPResponse(Convert::raw2json(array(
+ 'done' => true,
+ 'records' => $ids,
+ )));
+ $response->addHeader('Content-Type', 'text/json');
+
+ return $response;
+ }
+}
diff --git a/bulkManager/code/GridFieldBulkManager.php b/bulkManager/code/GridFieldBulkManager.php
index 9b5935d..0cf81cb 100644
--- a/bulkManager/code/GridFieldBulkManager.php
+++ b/bulkManager/code/GridFieldBulkManager.php
@@ -1,378 +1,364 @@
fields editable on the Model
- * 'actions' => maps of action name and configuration
- *
- * @var array
- */
- protected $config = array(
+{
+ /**
+ * component configuration.
+ *
+ * 'editableFields' => fields editable on the Model
+ * 'actions' => maps of action name and configuration
+ *
+ * @var array
+ */
+ protected $config = array(
'editableFields' => null,
- 'actions' => array()
- );
-
-
- /**
- * GridFieldBulkManager component constructor
- *
- * @param array $editableFields List of editable fields
- * @param boolean $defaultActions Use default actions list. False to start fresh.
- */
- public function __construct($editableFields = null, $defaultActions = true)
- {
- if ( $editableFields != null ) $this->setConfig ( 'editableFields', $editableFields );
+ 'actions' => array(),
+ );
- if ( $defaultActions )
- {
- $this->config['actions'] = array(
- 'bulkEdit' => array(
- 'label' => _t('GRIDFIELD_BULK_MANAGER.EDIT_SELECT_LABEL', 'Edit'),
- 'handler' => 'GridFieldBulkActionEditHandler',
- 'config' => array(
- 'isAjax' => false,
- 'icon' => 'pencil',
- 'isDestructive' => false
- )
- ),
- 'unLink' => array(
- 'label' => _t('GRIDFIELD_BULK_MANAGER.UNLINK_SELECT_LABEL', 'UnLink'),
- 'handler' => 'GridFieldBulkActionUnLinkHandler',
- 'config' => array(
- 'isAjax' => true,
- 'icon' => 'chain--minus',
- 'isDestructive' => false
- )
- ),
- 'delete' => array(
- 'label' => _t('GRIDFIELD_BULK_MANAGER.DELETE_SELECT_LABEL', 'Delete'),
- 'handler' => 'GridFieldBulkActionDeleteHandler',
- 'config' => array(
- 'isAjax' => true,
- 'icon' => 'decline',
- 'isDestructive' => true
- )
- )
- );
- }
- }
-
+ /**
+ * GridFieldBulkManager component constructor.
+ *
+ * @param array $editableFields List of editable fields
+ * @param bool $defaultActions Use default actions list. False to start fresh.
+ */
+ public function __construct($editableFields = null, $defaultActions = true)
+ {
+ if ($editableFields != null) {
+ $this->setConfig('editableFields', $editableFields);
+ }
+ if ($defaultActions) {
+ $this->config['actions'] = array(
+ 'bulkEdit' => array(
+ 'label' => _t('GRIDFIELD_BULK_MANAGER.EDIT_SELECT_LABEL', 'Edit'),
+ 'handler' => 'GridFieldBulkActionEditHandler',
+ 'config' => array(
+ 'isAjax' => false,
+ 'icon' => 'pencil',
+ 'isDestructive' => false,
+ ),
+ ),
+ 'unLink' => array(
+ 'label' => _t('GRIDFIELD_BULK_MANAGER.UNLINK_SELECT_LABEL', 'UnLink'),
+ 'handler' => 'GridFieldBulkActionUnLinkHandler',
+ 'config' => array(
+ 'isAjax' => true,
+ 'icon' => 'chain--minus',
+ 'isDestructive' => false,
+ ),
+ ),
+ 'delete' => array(
+ 'label' => _t('GRIDFIELD_BULK_MANAGER.DELETE_SELECT_LABEL', 'Delete'),
+ 'handler' => 'GridFieldBulkActionDeleteHandler',
+ 'config' => array(
+ 'isAjax' => true,
+ 'icon' => 'decline',
+ 'isDestructive' => true,
+ ),
+ ),
+ );
+ }
+ }
- /* **********************************************************************
- * Components settings and custom methodes
- * */
-
- /**
- * Sets the component configuration parameter
- *
- * @param string $reference
- * @param mixed $value
- */
- function setConfig($reference, $value)
- {
- if (!array_key_exists($reference, $this->config) )
- {
- user_error("Unknown option reference: $reference", E_USER_ERROR);
- }
+ /* **********************************************************************
+ * Components settings and custom methodes
+ * */
- if ( $reference == 'actions' )
- {
- user_error("Bulk actions must be edited via addBulkAction() and removeBulkAction()", E_USER_ERROR);
- }
-
- if ( ($reference == 'editableFields') && !is_array($value) )
- {
- $value = array($value);
- }
+ /**
+ * Sets the component configuration parameter.
+ *
+ * @param string $reference
+ * @param mixed $value
+ */
+ public function setConfig($reference, $value)
+ {
+ if (!array_key_exists($reference, $this->config)) {
+ user_error("Unknown option reference: $reference", E_USER_ERROR);
+ }
- $this->config[$reference] = $value;
+ if ($reference == 'actions') {
+ user_error('Bulk actions must be edited via addBulkAction() and removeBulkAction()', E_USER_ERROR);
+ }
- return $this;
- }
+ if (($reference == 'editableFields') && !is_array($value)) {
+ $value = array($value);
+ }
-
- /**
- * Returns one $config parameter of the full $config
- *
- * @param string $reference $congif parameter to return
- * @return mixed
- */
- function getConfig ( $reference = false )
- {
- if ( $reference ) return $this->config[$reference];
- else return $this->config;
- }
+ $this->config[$reference] = $value;
+ return $this;
+ }
- /**
- * Lets you add custom bulk actions to the bulk manager interface
- *
- * @todo add config options for front-end: isAjax, icon
- *
- * @param string $name Bulk action's name. Used by RequestHandler.
- * @param string $label Dropdown menu action's label. Default to ucfirst($name).
- * @param string $handler RequestHandler class name for this action. Default to 'GridFieldBulkAction'.ucfirst($name).'Handler'
- * @param array $config Front-end configuration array( 'isAjax' => true, 'icon' => 'accept', 'isDestructive' => false )
- * @return GridFieldBulkManager Current GridFieldBulkManager instance
- */
- function addBulkAction($name, $label = null, $handler = null, $config = null)
- {
- if ( array_key_exists($name, $this->config['actions']) )
- {
- user_error("Bulk action '$name' already exists.", E_USER_ERROR);
- }
+ /**
+ * Returns one $config parameter of the full $config.
+ *
+ * @param string $reference $congif parameter to return
+ *
+ * @return mixed
+ */
+ public function getConfig($reference = false)
+ {
+ if ($reference) {
+ return $this->config[$reference];
+ } else {
+ return $this->config;
+ }
+ }
- if ( !$label )
- {
- $label = ucfirst($name);
- }
+ /**
+ * Lets you add custom bulk actions to the bulk manager interface.
+ *
+ * @todo add config options for front-end: isAjax, icon
+ *
+ * @param string $name Bulk action's name. Used by RequestHandler.
+ * @param string $label Dropdown menu action's label. Default to ucfirst($name).
+ * @param string $handler RequestHandler class name for this action. Default to 'GridFieldBulkAction'.ucfirst($name).'Handler'
+ * @param array $config Front-end configuration array( 'isAjax' => true, 'icon' => 'accept', 'isDestructive' => false )
+ *
+ * @return GridFieldBulkManager Current GridFieldBulkManager instance
+ */
+ public function addBulkAction($name, $label = null, $handler = null, $config = null)
+ {
+ if (array_key_exists($name, $this->config['actions'])) {
+ user_error("Bulk action '$name' already exists.", E_USER_ERROR);
+ }
- if ( !$handler )
- {
- $handler = 'GridFieldBulkAction'.ucfirst($name).'Handler';
- }
+ if (!$label) {
+ $label = ucfirst($name);
+ }
- if ( !ClassInfo::exists( $handler ) )
- {
- user_error("Bulk action handler for $name not found: $handler", E_USER_ERROR);
- }
+ if (!$handler) {
+ $handler = 'GridFieldBulkAction'.ucfirst($name).'Handler';
+ }
- if ( $config && !is_array($config) )
- {
- user_error("Bulk action front-end config should be an array of key => value pairs.", E_USER_ERROR);
- }
- else{
- $config = array(
- 'isAjax' => isset($config['isAjax']) ? $config['isAjax'] : true,
- 'icon' => isset($config['icon']) ? $config['icon'] : 'accept',
- 'isDestructive' => isset($config['isDestructive']) ? $config['isDestructive'] : false
- );
- }
+ if (!ClassInfo::exists($handler)) {
+ user_error("Bulk action handler for $name not found: $handler", E_USER_ERROR);
+ }
- $this->config['actions'][$name] = array(
- 'label' => $label,
+ if ($config && !is_array($config)) {
+ user_error('Bulk action front-end config should be an array of key => value pairs.', E_USER_ERROR);
+ } else {
+ $config = array(
+ 'isAjax' => isset($config['isAjax']) ? $config['isAjax'] : true,
+ 'icon' => isset($config['icon']) ? $config['icon'] : 'accept',
+ 'isDestructive' => isset($config['isDestructive']) ? $config['isDestructive'] : false,
+ );
+ }
+
+ $this->config['actions'][$name] = array(
+ 'label' => $label,
'handler' => $handler,
- 'config' => $config
+ 'config' => $config,
);
- return $this;
- }
+ return $this;
+ }
+ /**
+ * Removes a bulk actions from the bulk manager interface.
+ *
+ * @param string $name Bulk action's name
+ *
+ * @return GridFieldBulkManager Current GridFieldBulkManager instance
+ */
+ public function removeBulkAction($name)
+ {
+ if (!array_key_exists($name, $this->config['actions'])) {
+ user_error("Bulk action '$name' doesn't exists.", E_USER_ERROR);
+ }
- /**
- * Removes a bulk actions from the bulk manager interface
- *
- * @param string $name Bulk action's name
- * @return GridFieldBulkManager Current GridFieldBulkManager instance
- */
- function removeBulkAction($name)
- {
- if ( !array_key_exists($name, $this->config['actions']) )
- {
- user_error("Bulk action '$name' doesn't exists.", E_USER_ERROR);
- }
+ unset($this->config['actions'][$name]);
- unset( $this->config['actions'][$name] );
+ return $this;
+ }
- return $this;
- }
+ /* **********************************************************************
+ * GridField_ColumnProvider
+ * */
+ /**
+ * Add bulk select column.
+ *
+ * @param GridField $gridField Current GridField instance
+ * @param array $columns Columns list
+ */
+ public function augmentColumns($gridField, &$columns)
+ {
+ if (!in_array('BulkSelect', $columns)) {
+ $columns[] = 'BulkSelect';
+ }
+ }
+ /**
+ * Which columns are handled by the component.
+ *
+ * @param GridField $gridField Current GridField instance
+ *
+ * @return array List of handled column names
+ */
+ public function getColumnsHandled($gridField)
+ {
+ return array('BulkSelect');
+ }
- /* **********************************************************************
- * GridField_ColumnProvider
- * */
-
- /**
- * Add bulk select column
- *
- * @param GridField $gridField Current GridField instance
- * @param array $columns Columns list
- */
- function augmentColumns($gridField, &$columns)
- {
- if(!in_array('BulkSelect', $columns)) $columns[] = 'BulkSelect';
- }
+ /**
+ * Sets the column's content.
+ *
+ * @param GridField $gridField Current GridField instance
+ * @param DataObject $record Record intance for this row
+ * @param string $columnName Column's name for which we need content
+ *
+ * @return mixed Column's field content
+ */
+ public function getColumnContent($gridField, $record, $columnName)
+ {
+ $cb = CheckboxField::create('bulkSelect_'.$record->ID)
+ ->addExtraClass('bulkSelect no-change-track')
+ ->setAttribute('data-record', $record->ID);
-
- /**
- * Which columns are handled by the component
- *
- * @param GridField $gridField Current GridField instance
- * @return array List of handled column names
- */
- function getColumnsHandled($gridField)
- {
- return array('BulkSelect');
- }
+ return $cb->Field();
+ }
-
- /**
- * Sets the column's content
- *
- * @param GridField $gridField Current GridField instance
- * @param DataObject $record Record intance for this row
- * @param string $columnName Column's name for which we need content
- * @return mixed Column's field content
- */
- function getColumnContent($gridField, $record, $columnName)
- {
- $cb = CheckboxField::create('bulkSelect_'.$record->ID)
- ->addExtraClass('bulkSelect no-change-track')
- ->setAttribute('data-record', $record->ID);
- return $cb->Field();
- }
+ /**
+ * Set the column's HTML attributes.
+ *
+ * @param GridField $gridField Current GridField instance
+ * @param DataObject $record Record intance for this row
+ * @param string $columnName Column's name for which we need attributes
+ *
+ * @return array List of HTML attributes
+ */
+ public function getColumnAttributes($gridField, $record, $columnName)
+ {
+ return array('class' => 'col-bulkSelect');
+ }
-
- /**
- * Set the column's HTML attributes
- *
- * @param GridField $gridField Current GridField instance
- * @param DataObject $record Record intance for this row
- * @param string $columnName Column's name for which we need attributes
- * @return array List of HTML attributes
- */
- function getColumnAttributes($gridField, $record, $columnName)
- {
- return array('class' => 'col-bulkSelect');
- }
-
+ /**
+ * Set the column's meta data.
+ *
+ * @param GridField $gridField Current GridField instance
+ * @param string $columnName Column's name for which we need meta data
+ *
+ * @return array List of meta data
+ */
+ public function getColumnMetadata($gridField, $columnName)
+ {
+ if ($columnName == 'BulkSelect') {
+ return array('title' => 'Select');
+ }
+ }
- /**
- * Set the column's meta data
- *
- * @param GridField $gridField Current GridField instance
- * @param string $columnName Column's name for which we need meta data
- * @return array List of meta data
- */
- function getColumnMetadata($gridField, $columnName)
- {
- if($columnName == 'BulkSelect') {
- return array('title' => 'Select');
- }
- }
+ /* **********************************************************************
+ * GridField_HTMLProvider
+ * */
+ /**
+ * @param GridField $gridField
+ *
+ * @return array
+ */
+ public function getHTMLFragments($gridField)
+ {
+ Requirements::css(BULKEDITTOOLS_MANAGER_PATH.'/css/GridFieldBulkManager.css');
+ Requirements::javascript(BULKEDITTOOLS_MANAGER_PATH.'/javascript/GridFieldBulkManager.js');
+ Requirements::add_i18n_javascript(BULKEDITTOOLS_PATH.'/lang/js');
+ if (!count($this->config['actions'])) {
+ user_error('Trying to use GridFieldBulkManager without any bulk action.', E_USER_ERROR);
+ }
- /* **********************************************************************
- * GridField_HTMLProvider
- * */
-
- /**
- *
- * @param GridField $gridField
- * @return array
- */
- public function getHTMLFragments($gridField)
- {
- Requirements::css(BULKEDITTOOLS_MANAGER_PATH . '/css/GridFieldBulkManager.css');
- Requirements::javascript(BULKEDITTOOLS_MANAGER_PATH . '/javascript/GridFieldBulkManager.js');
- Requirements::add_i18n_javascript(BULKEDITTOOLS_PATH . '/lang/js');
-
- if ( !count($this->config['actions']) )
- {
- user_error("Trying to use GridFieldBulkManager without any bulk action.", E_USER_ERROR);
- }
+ $actionsListSource = array();
+ $actionsConfig = array();
- $actionsListSource = array();
- $actionsConfig = array();
+ foreach ($this->config['actions'] as $action => $actionData) {
+ $actionsListSource[$action] = $actionData['label'];
+ $actionsConfig[$action] = $actionData['config'];
+ }
- foreach ($this->config['actions'] as $action => $actionData)
- {
- $actionsListSource[$action] = $actionData['label'];
- $actionsConfig[$action] = $actionData['config'];
- }
+ reset($this->config['actions']);
+ $firstAction = key($this->config['actions']);
- reset($this->config['actions']);
- $firstAction = key($this->config['actions']);
+ $dropDownActionsList = DropdownField::create('bulkActionName', '')
+ ->setSource($actionsListSource)
+ ->setAttribute('class', 'bulkActionName no-change-track')
+ ->setAttribute('id', '');
- $dropDownActionsList = DropdownField::create('bulkActionName', '')
- ->setSource( $actionsListSource )
- ->setAttribute('class', 'bulkActionName no-change-track')
- ->setAttribute('id', '');
-
- $templateData = array(
- 'Menu' => $dropDownActionsList->FieldHolder(),
- 'Button' => array(
- 'Label' => _t('GRIDFIELD_BULK_MANAGER.ACTION_BTN_LABEL', 'Go'),
- 'DataURL' => $gridField->Link('bulkAction'),
- 'Icon' => $this->config['actions'][$firstAction]['config']['icon'],
- 'DataConfig' => htmlspecialchars(json_encode($actionsConfig), ENT_QUOTES, 'UTF-8')
- ),
- 'Select' => array(
- 'Label' => _t('GRIDFIELD_BULK_MANAGER.SELECT_ALL_LABEL', 'Select all')
- ),
- 'Colspan' => (count($gridField->getColumns()) - 1)
+ $templateData = array(
+ 'Menu' => $dropDownActionsList->FieldHolder(),
+ 'Button' => array(
+ 'Label' => _t('GRIDFIELD_BULK_MANAGER.ACTION_BTN_LABEL', 'Go'),
+ 'DataURL' => $gridField->Link('bulkAction'),
+ 'Icon' => $this->config['actions'][$firstAction]['config']['icon'],
+ 'DataConfig' => htmlspecialchars(json_encode($actionsConfig), ENT_QUOTES, 'UTF-8'),
+ ),
+ 'Select' => array(
+ 'Label' => _t('GRIDFIELD_BULK_MANAGER.SELECT_ALL_LABEL', 'Select all'),
+ ),
+ 'Colspan' => (count($gridField->getColumns()) - 1),
);
- $templateData = new ArrayData($templateData);
+ $templateData = new ArrayData($templateData);
- return array(
- 'header' => $templateData->renderWith('BulkManagerButtons')
- );
- }
+ return array(
+ 'header' => $templateData->renderWith('BulkManagerButtons'),
+ );
+ }
+ /* **********************************************************************
+ * GridField_URLHandler
+ * */
+ /**
+ * Returns an action => handler list.
+ *
+ * @param GridField $gridField
+ *
+ * @return array
+ */
+ public function getURLHandlers($gridField)
+ {
+ return array(
+ 'bulkAction' => 'handleBulkAction',
+ );
+ }
- /* **********************************************************************
- * GridField_URLHandler
- * */
-
- /**
- * Returns an action => handler list
- *
- * @param GridField $gridField
- * @return array
- */
- public function getURLHandlers($gridField) {
- return array(
- 'bulkAction' => 'handleBulkAction'
- );
- }
+ /**
+ * Pass control over to the RequestHandler
+ * loop through the handlers provided in config['actions']
+ * and find matching url_handlers.
+ *
+ * $url_handlers rule should not use wildcards like '$Action' => '$Action'
+ * but have more specific path defined
+ *
+ * @param GridField $gridField
+ * @param SS_HTTPRequest $request
+ *
+ * @return mixed
+ */
+ public function handleBulkAction($gridField, $request)
+ {
+ $controller = $gridField->getForm()->Controller();
-
- /**
- * Pass control over to the RequestHandler
- * loop through the handlers provided in config['actions']
- * and find matching url_handlers.
- *
- * $url_handlers rule should not use wildcards like '$Action' => '$Action'
- * but have more specific path defined
- *
- * @param GridField $gridField
- * @param SS_HTTPRequest $request
- * @return mixed
- */
- public function handleBulkAction($gridField, $request)
- {
- $controller = $gridField->getForm()->Controller();
+ foreach ($this->config['actions'] as $name => $data) {
+ $handlerClass = $data['handler'];
+ $urlHandlers = Config::inst()->get($handlerClass, 'url_handlers', Config::UNINHERITED);
- foreach ($this->config['actions'] as $name => $data)
- {
- $handlerClass = $data['handler'];
- $urlHandlers = Config::inst()->get($handlerClass, 'url_handlers', Config::UNINHERITED);
+ if ($urlHandlers) {
+ foreach ($urlHandlers as $rule => $action) {
+ if ($request->match($rule, false)) {
+ //print_r('matched ' . $handlerClass . ' to ' . $rule);
+ $handler = Injector::inst()->create($handlerClass, $gridField, $this, $controller);
- if($urlHandlers) foreach($urlHandlers as $rule => $action)
- {
- if($request->match($rule, false))
- {
- //print_r('matched ' . $handlerClass . ' to ' . $rule);
- $handler = Injector::inst()->create($handlerClass, $gridField, $this, $controller);
- return $handler->handleRequest($request, DataModel::inst());
- }
- }
- }
+ return $handler->handleRequest($request, DataModel::inst());
+ }
+ }
+ }
+ }
- user_error("Unable to find matching bulk action handler for ".$request->remaining().'.', E_USER_ERROR);
- }
+ user_error('Unable to find matching bulk action handler for '.$request->remaining().'.', E_USER_ERROR);
+ }
}
diff --git a/bulkUpload/code/GridFieldBulkImageUpload.php b/bulkUpload/code/GridFieldBulkImageUpload.php
index aade985..4e01af7 100644
--- a/bulkUpload/code/GridFieldBulkImageUpload.php
+++ b/bulkUpload/code/GridFieldBulkImageUpload.php
@@ -1,25 +1,24 @@
field name of the $has_one File/Image relation
- * @var array
- */
- protected $config = array(
- 'fileRelationName' => null
- );
+{
+ /**
+ * component configuration.
+ *
+ * 'fileRelationName' => field name of the $has_one File/Image relation
+ *
+ * @var array
+ */
+ protected $config = array(
+ 'fileRelationName' => null,
+ );
-
- /**
- * UploadField configuration.
- * These options are passed on directly to the UploadField
- * via {@link UploadField::setConfig()} api
- *
- * Defaults are: *
- * 'sequentialUploads' => false : process uploads 1 after the other rather than all at once
- * 'canAttachExisting' => true : displays "From files" button in the UploadField
- * 'canPreviewFolder' => true : displays the upload location in the UploadField
- *
- * @var array
- */
- protected $ufConfig = array(
- 'sequentialUploads' => false,
+ /**
+ * UploadField configuration.
+ * These options are passed on directly to the UploadField
+ * via {@link UploadField::setConfig()} api.
+ *
+ * Defaults are: *
+ * 'sequentialUploads' => false : process uploads 1 after the other rather than all at once
+ * 'canAttachExisting' => true : displays "From files" button in the UploadField
+ * 'canPreviewFolder' => true : displays the upload location in the UploadField
+ *
+ * @var array
+ */
+ protected $ufConfig = array(
+ 'sequentialUploads' => false,
'canAttachExisting' => true,
- 'canPreviewFolder' => true
- );
+ 'canPreviewFolder' => true,
+ );
+ /**
+ * UploadField setup function calls.
+ * List of setup functions to call on {@link UploadField} with the value to pass.
+ *
+ * e.g. array('setFolderName' => 'bulkUpload') will result in:
+ * $uploadField->setFolderName('bulkUpload')
+ *
+ * @var array
+ */
+ protected $ufSetup = array(
+ 'setFolderName' => 'bulkUpload',
+ );
- /**
- * UploadField setup function calls.
- * List of setup functions to call on {@link UploadField} with the value to pass
- *
- * e.g. array('setFolderName' => 'bulkUpload') will result in:
- * $uploadField->setFolderName('bulkUpload')
- *
- * @var array
- */
- protected $ufSetup = array(
- 'setFolderName' => 'bulkUpload'
- );
+ /**
+ * UploadField Validator setup function calls.
+ * List of setup functions to call on {@link Upload::validator} with the value to pass.
+ *
+ * e.g. array('setAllowedMaxFileSize' => 10) will result in:
+ * $uploadField->getValidator()->setAllowedMaxFileSize(10)
+ *
+ * @var array
+ */
+ protected $ufValidatorSetup = array(
+ 'setAllowedMaxFileSize' => null,
+ );
+ /**
+ * Component constructor.
+ *
+ * @param string $fileRelationName
+ */
+ public function __construct($fileRelationName = null)
+ {
+ if ($fileRelationName != null) {
+ $this->setConfig('fileRelationName', $fileRelationName);
+ }
+ }
- /**
- * UploadField Validator setup function calls.
- * List of setup functions to call on {@link Upload::validator} with the value to pass
- *
- * e.g. array('setAllowedMaxFileSize' => 10) will result in:
- * $uploadField->getValidator()->setAllowedMaxFileSize(10)
- *
- * @var array
- */
- protected $ufValidatorSetup = array(
- 'setAllowedMaxFileSize' => null
- );
+ /* **********************************************************************
+ * Components settings and custom methodes
+ * */
+ /**
+ * Set a component configuration parameter.
+ *
+ * @param string $reference
+ * @param mixed $value
+ */
+ public function setConfig($reference, $value)
+ {
+ if (in_array($reference, array('folderName', 'maxFileSize', 'sequentialUploads', 'canAttachExisting', 'canPreviewFolder'))) {
+ Deprecation::notice('2.1.0', "GridFieldBulkUpload 'setConfig()' doesn't support '$reference' anymore. Please use 'setUfConfig()', 'setUfSetup()' or 'setUfValidatorSetup()' instead.");
- /**
- * Component constructor
- *
- * @param string $fileRelationName
- */
- public function __construct($fileRelationName = null)
- {
- if ( $fileRelationName != null ) $this->setConfig ( 'fileRelationName', $fileRelationName );
- }
-
+ if ($reference === 'folderName') {
+ $this->setUfSetup('setFolderName', $value);
+ } elseif ($reference === 'maxFileSize') {
+ $this->setUfValidatorSetup('setAllowedMaxFileSize', $value);
+ } else {
+ $this->setUfConfig($reference, $value);
+ }
+ } elseif (!array_key_exists($reference, $this->config)) {
+ user_error("Unknown option reference: $reference", E_USER_ERROR);
+ }
+ $this->config[$reference] = $value;
- /* **********************************************************************
- * Components settings and custom methodes
- * */
-
- /**
- * Set a component configuration parameter
- *
- * @param string $reference
- * @param mixed $value
- */
- function setConfig ( $reference, $value )
- {
- if ( in_array($reference, array('folderName', 'maxFileSize', 'sequentialUploads', 'canAttachExisting', 'canPreviewFolder')) )
- {
- Deprecation::notice('2.1.0', "GridFieldBulkUpload 'setConfig()' doesn't support '$reference' anymore. Please use 'setUfConfig()', 'setUfSetup()' or 'setUfValidatorSetup()' instead.");
+ return $this;
+ }
- if ( $reference === 'folderName' )
- {
- $this->setUfSetup('setFolderName', $value);
- }
- else if ( $reference === 'maxFileSize' )
- {
- $this->setUfValidatorSetup('setAllowedMaxFileSize', $value);
- }
- else{
- $this->setUfConfig($reference, $value);
- }
- }
- else if (!array_key_exists($reference, $this->config) ) {
- user_error("Unknown option reference: $reference", E_USER_ERROR);
- }
+ /**
+ * Set an UploadField configuration parameter.
+ *
+ * @param string $reference
+ * @param mixed $value
+ */
+ public function setUfConfig($reference, $value)
+ {
+ $this->ufConfig[$reference] = $value;
- $this->config[$reference] = $value;
- return $this;
- }
+ return $this;
+ }
+ /**
+ * Set an UploadField setup function call.
+ *
+ * @param string $function
+ * @param mixed $param
+ */
+ public function setUfSetup($function, $param)
+ {
+ $this->ufSetup[$function] = $param;
- /**
- * Set an UploadField configuration parameter
- *
- * @param string $reference
- * @param mixed $value
- */
- function setUfConfig ( $reference, $value )
- {
- $this->ufConfig[$reference] = $value;
- return $this;
- }
+ return $this;
+ }
+ /**
+ * Set an UploadField Validator setup function call.
+ *
+ * @param string $function
+ * @param mixed $param
+ */
+ public function setUfValidatorSetup($function, $param)
+ {
+ $this->ufValidatorSetup[$function] = $param;
- /**
- * Set an UploadField setup function call
- *
- * @param string $function
- * @param mixed $param
- */
- function setUfSetup ( $function, $param )
- {
- $this->ufSetup[$function] = $param;
- return $this;
- }
+ return $this;
+ }
+ /**
+ * Returns one $config reference or the full $config.
+ *
+ * @param string $reference $congif parameter to return
+ *
+ * @return mixed
+ */
+ public function getConfig($reference = false)
+ {
+ if ($reference) {
+ return $this->config[$reference];
+ } else {
+ return $this->config;
+ }
+ }
- /**
- * Set an UploadField Validator setup function call
- *
- * @param string $function
- * @param mixed $param
- */
- function setUfValidatorSetup ( $function, $param )
- {
- $this->ufValidatorSetup[$function] = $param;
- return $this;
- }
-
+ /**
+ * Returns one $ufConfig reference or the full config.
+ *
+ * @param string $reference $ufConfig parameter to return
+ *
+ * @return mixed
+ */
+ public function getUfConfig($reference = false)
+ {
+ if ($reference) {
+ return $this->ufConfig[$reference];
+ } else {
+ return $this->ufConfig;
+ }
+ }
- /**
- * Returns one $config reference or the full $config
- *
- * @param string $reference $congif parameter to return
- * @return mixed
- */
- function getConfig ( $reference = false )
- {
- if ( $reference ) return $this->config[$reference];
- else return $this->config;
- }
-
+ /**
+ * Returns one $ufSetup reference or the full config.
+ *
+ * @param string $reference $ufSetup parameter to return
+ *
+ * @return mixed
+ */
+ public function getUfSetup($reference = false)
+ {
+ if ($reference) {
+ return $this->ufSetup[$reference];
+ } else {
+ return $this->ufSetup;
+ }
+ }
- /**
- * Returns one $ufConfig reference or the full config.
- *
- * @param string $reference $ufConfig parameter to return
- * @return mixed
- */
- function getUfConfig ( $reference = false )
- {
- if ( $reference ) return $this->ufConfig[$reference];
- else return $this->ufConfig;
- }
-
+ /**
+ * Returns one $ufValidatorSetup reference or the full config.
+ *
+ * @param string $reference $ufValidatorSetup parameter to return
+ *
+ * @return mixed
+ */
+ public function getUfValidatorSetup($reference = false)
+ {
+ if ($reference) {
+ return $this->ufValidatorSetup[$reference];
+ } else {
+ return $this->ufValidatorSetup;
+ }
+ }
- /**
- * Returns one $ufSetup reference or the full config.
- *
- * @param string $reference $ufSetup parameter to return
- * @return mixed
- */
- function getUfSetup ( $reference = false )
- {
- if ( $reference ) return $this->ufSetup[$reference];
- else return $this->ufSetup;
- }
-
+ /**
+ * Get the first has_one Image/File relation from the GridField managed DataObject
+ * i.e. 'MyImage' => 'Image' will return 'MyImage'.
+ *
+ * @return string Name of the $has_one relation
+ */
+ public function getDefaultFileRelationName($gridField)
+ {
+ $recordClass = $gridField->list->dataClass;
+ $hasOneFields = Config::inst()->get($recordClass, 'has_one', Config::INHERITED);
- /**
- * Returns one $ufValidatorSetup reference or the full config.
- *
- * @param string $reference $ufValidatorSetup parameter to return
- * @return mixed
- */
- function getUfValidatorSetup ( $reference = false )
- {
- if ( $reference ) return $this->ufValidatorSetup[$reference];
- else return $this->ufValidatorSetup;
- }
+ $imageField = null;
+ foreach ($hasOneFields as $field => $type) {
+ if ($type === 'Image' || $type === 'File' || is_subclass_of($type, 'File')) {
+ $imageField = $field;
+ break;
+ }
+ }
+ return $imageField;
+ }
- /**
- * Get the first has_one Image/File relation from the GridField managed DataObject
- * i.e. 'MyImage' => 'Image' will return 'MyImage'
- *
- * @return string Name of the $has_one relation
- */
- public function getDefaultFileRelationName($gridField)
- {
- $recordClass = $gridField->list->dataClass;
- $hasOneFields = Config::inst()->get($recordClass, 'has_one', Config::INHERITED);
-
- $imageField = null;
- foreach( $hasOneFields as $field => $type )
- {
- if( $type === 'Image' || $type === 'File' || is_subclass_of($type, 'File') )
- {
- $imageField = $field;
- break;
- }
- }
-
- return $imageField;
- }
+ /**
+ * Returns the name of the Image/File field name from the managed record
+ * Either as set in the component config or the default one.
+ *
+ * @return string
+ */
+ public function getFileRelationName($gridField)
+ {
+ $configFileRelationName = $this->getConfig('fileRelationName');
+ return $configFileRelationName ? $configFileRelationName : $this->getDefaultFileRelationName($gridField);
+ }
- /**
- * Returns the name of the Image/File field name from the managed record
- * Either as set in the component config or the default one
- *
- * @return string
- */
- public function getFileRelationName($gridField)
- {
- $configFileRelationName = $this->getConfig('fileRelationName');
- return $configFileRelationName ? $configFileRelationName : $this->getDefaultFileRelationName($gridField);
- }
+ /**
+ * Return the ClassName of the fileRelation
+ * i.e. 'MyImage' => 'Image' will return 'Image'
+ * i.e. 'MyImage' => 'File' will return 'File'.
+ *
+ * @return string file relation className
+ */
+ public function getFileRelationClassName($gridField)
+ {
+ $recordClass = $gridField->list->dataClass;
+ $hasOneFields = Config::inst()->get($recordClass, 'has_one', Config::INHERITED);
+ $fieldName = $this->getFileRelationName($gridField);
+ if ($fieldName) {
+ return $hasOneFields[$fieldName];
+ } else {
+ return 'File';
+ }
+ }
- /**
- * Return the ClassName of the fileRelation
- * i.e. 'MyImage' => 'Image' will return 'Image'
- * i.e. 'MyImage' => 'File' will return 'File'
- *
- * @return string file relation className
- */
- public function getFileRelationClassName($gridField)
- {
- $recordClass = $gridField->list->dataClass;
- $hasOneFields = Config::inst()->get($recordClass, 'has_one', Config::INHERITED);
+ /**
+ * Returned a configured UploadField instance
+ * embedded in the gridfield heard.
+ *
+ * @param GridField $gridField Current GridField
+ *
+ * @return UploadField Configured UploadField instance
+ */
+ public function bulkUploadField($gridField)
+ {
+ $fileRelationName = $this->getFileRelationName($gridField);
+ $uploadField = UploadField::create($fileRelationName, '')
+ ->setForm($gridField->getForm())
- $fieldName = $this->getFileRelationName($gridField);
- if($fieldName)
- {
- return $hasOneFields[$fieldName];
- }
- else{
- return 'File';
- }
- }
-
+ ->setConfig('previewMaxWidth', 20)
+ ->setConfig('previewMaxHeight', 20)
+ ->setConfig('changeDetection', false)
- /**
- * Returned a configured UploadField instance
- * embedded in the gridfield heard
- * @param GridField $gridField Current GridField
- * @return UploadField Configured UploadField instance
- */
- public function bulkUploadField($gridField)
- {
- $fileRelationName = $this->getFileRelationName($gridField);
- $uploadField = UploadField::create($fileRelationName, '')
- ->setForm($gridField->getForm())
+ ->setRecord(DataObject::create()) // avoid UploadField to get auto-config from the Page (e.g fix allowedMaxFileNumber)
- ->setConfig('previewMaxWidth', 20)
- ->setConfig('previewMaxHeight', 20)
- ->setConfig('changeDetection', false)
-
- ->setRecord(DataObject::create()) // avoid UploadField to get auto-config from the Page (e.g fix allowedMaxFileNumber)
+ ->setTemplate('GridFieldBulkUploadField')
+ ->setDownloadTemplateName('colymba-bulkuploaddownloadtemplate')
- ->setTemplate('GridFieldBulkUploadField')
- ->setDownloadTemplateName('colymba-bulkuploaddownloadtemplate')
-
- ->setConfig('url', $gridField->Link('bulkupload/upload'))
- ->setConfig('urlSelectDialog', $gridField->Link('bulkupload/select'))
- ->setConfig('urlAttach', $gridField->Link('bulkupload/attach'))
- ->setConfig('urlFileExists', $gridField->Link('bulkupload/fileexists'))
- ;
+ ->setConfig('url', $gridField->Link('bulkupload/upload'))
+ ->setConfig('urlSelectDialog', $gridField->Link('bulkupload/select'))
+ ->setConfig('urlAttach', $gridField->Link('bulkupload/attach'))
+ ->setConfig('urlFileExists', $gridField->Link('bulkupload/fileexists'))
+ ;
//set UploadField config
- foreach ($this->ufConfig as $key => $val)
- {
- $uploadField->setConfig($key, $val);
+ foreach ($this->ufConfig as $key => $val) {
+ $uploadField->setConfig($key, $val);
}
//UploadField setup
- foreach ($this->ufSetup as $fn => $param)
- {
- $uploadField->{$fn}($param);
+ foreach ($this->ufSetup as $fn => $param) {
+ $uploadField->{$fn}($param);
}
//UploadField Validator setup
- foreach ($this->ufValidatorSetup as $fn => $param)
- {
- $uploadField->getValidator()->{$fn}($param);
+ foreach ($this->ufValidatorSetup as $fn => $param) {
+ $uploadField->getValidator()->{$fn}($param);
}
-
- return $uploadField;
- }
+ return $uploadField;
+ }
+ /* **********************************************************************
+ * GridField_HTMLProvider
+ * */
- /* **********************************************************************
- * GridField_HTMLProvider
- * */
-
- /**
- * HTML to be embedded into the GridField
- *
- * @param GridField $gridField
- * @return array
- */
- public function getHTMLFragments($gridField)
- {
- // permission check
- if( !singleton($gridField->getModelClass())->canEdit() )
- {
- return array();
- }
+ /**
+ * HTML to be embedded into the GridField.
+ *
+ * @param GridField $gridField
+ *
+ * @return array
+ */
+ public function getHTMLFragments($gridField)
+ {
+ // permission check
+ if (!singleton($gridField->getModelClass())->canEdit()) {
+ return array();
+ }
- // check BulkManager exists
- $bulkManager = $gridField->getConfig()->getComponentsByType('GridFieldBulkManager');
+ // check BulkManager exists
+ $bulkManager = $gridField->getConfig()->getComponentsByType('GridFieldBulkManager');
- // upload management buttons
- $finishButton = FormAction::create('Finish', _t('GRIDFIELD_BULK_UPLOAD.FINISH_BTN_LABEL', 'Finish'))
- ->addExtraClass('bulkUploadFinishButton')
- ->setAttribute('data-icon', 'accept')
- ->setUseButtonTag(true);
+ // upload management buttons
+ $finishButton = FormAction::create('Finish', _t('GRIDFIELD_BULK_UPLOAD.FINISH_BTN_LABEL', 'Finish'))
+ ->addExtraClass('bulkUploadFinishButton')
+ ->setAttribute('data-icon', 'accept')
+ ->setUseButtonTag(true);
- $clearErrorButton = FormAction::create('ClearError', _t('GRIDFIELD_BULK_UPLOAD.CLEAR_ERROR_BTN_LABEL', 'Clear errors'))
- ->addExtraClass('bulkUploadClearErrorButton')
- ->setAttribute('data-icon', 'arrow-circle-double')
- ->setUseButtonTag(true);
+ $clearErrorButton = FormAction::create('ClearError', _t('GRIDFIELD_BULK_UPLOAD.CLEAR_ERROR_BTN_LABEL', 'Clear errors'))
+ ->addExtraClass('bulkUploadClearErrorButton')
+ ->setAttribute('data-icon', 'arrow-circle-double')
+ ->setUseButtonTag(true);
- if ( count($bulkManager) )
- {
- $cancelButton = FormAction::create('Cancel', _t('GRIDFIELD_BULK_UPLOAD.CANCEL_BTN_LABEL', 'Cancel'))
- ->addExtraClass('bulkUploadCancelButton ss-ui-action-destructive')
- ->setAttribute('data-icon', 'decline')
- ->setAttribute('data-url', $gridField->Link('bulkupload/cancel'))
- ->setUseButtonTag(true);
+ if (count($bulkManager)) {
+ $cancelButton = FormAction::create('Cancel', _t('GRIDFIELD_BULK_UPLOAD.CANCEL_BTN_LABEL', 'Cancel'))
+ ->addExtraClass('bulkUploadCancelButton ss-ui-action-destructive')
+ ->setAttribute('data-icon', 'decline')
+ ->setAttribute('data-url', $gridField->Link('bulkupload/cancel'))
+ ->setUseButtonTag(true);
- $bulkManager_config = $bulkManager->first()->getConfig();
- $bulkManager_actions = $bulkManager_config['actions'];
- if(array_key_exists('bulkedit' , $bulkManager_actions)){
- $editAllButton = FormAction::create('EditAll', _t('GRIDFIELD_BULK_UPLOAD.EDIT_ALL_BTN_LABEL', 'Edit all'))
+ $bulkManager_config = $bulkManager->first()->getConfig();
+ $bulkManager_actions = $bulkManager_config['actions'];
+ if (array_key_exists('bulkedit', $bulkManager_actions)) {
+ $editAllButton = FormAction::create('EditAll', _t('GRIDFIELD_BULK_UPLOAD.EDIT_ALL_BTN_LABEL', 'Edit all'))
->addExtraClass('bulkUploadEditButton')
->setAttribute('data-icon', 'pencil')
->setAttribute('data-url', $gridField->Link('bulkupload/edit'))
->setUseButtonTag(true);
- }else{
- $editAllButton = '';
- }
- }
- else{
- $cancelButton = '';
- $editAllButton = '';
- }
+ } else {
+ $editAllButton = '';
+ }
+ } else {
+ $cancelButton = '';
+ $editAllButton = '';
+ }
- // get uploadField + inject extra buttons
- $uploadField = $this->bulkUploadField($gridField);
- $uploadField->FinishButton = $finishButton;
- $uploadField->CancelButton = $cancelButton;
- $uploadField->EditAllButton = $editAllButton;
- $uploadField->ClearErrorButton = $clearErrorButton;
+ // get uploadField + inject extra buttons
+ $uploadField = $this->bulkUploadField($gridField);
+ $uploadField->FinishButton = $finishButton;
+ $uploadField->CancelButton = $cancelButton;
+ $uploadField->EditAllButton = $editAllButton;
+ $uploadField->ClearErrorButton = $clearErrorButton;
- $data = ArrayData::create(array(
- 'Colspan' => count($gridField->getColumns()),
- 'UploadField' => $uploadField->Field() // call ->Field() to get requirements in right order
- ));
+ $data = ArrayData::create(array(
+ 'Colspan' => count($gridField->getColumns()),
+ 'UploadField' => $uploadField->Field(), // call ->Field() to get requirements in right order
+ ));
- Requirements::css(BULKEDITTOOLS_UPLOAD_PATH . '/css/GridFieldBulkUpload.css');
- Requirements::javascript(BULKEDITTOOLS_UPLOAD_PATH . '/javascript/GridFieldBulkUpload.js');
- Requirements::javascript(BULKEDITTOOLS_UPLOAD_PATH . '/javascript/GridFieldBulkUpload_downloadtemplate.js');
- Requirements::add_i18n_javascript(BULKEDITTOOLS_PATH . '/lang/js');
-
- return array(
- 'header' => $data->renderWith('GridFieldBulkUpload')
- );
- }
+ Requirements::css(BULKEDITTOOLS_UPLOAD_PATH.'/css/GridFieldBulkUpload.css');
+ Requirements::javascript(BULKEDITTOOLS_UPLOAD_PATH.'/javascript/GridFieldBulkUpload.js');
+ Requirements::javascript(BULKEDITTOOLS_UPLOAD_PATH.'/javascript/GridFieldBulkUpload_downloadtemplate.js');
+ Requirements::add_i18n_javascript(BULKEDITTOOLS_PATH.'/lang/js');
+ return array(
+ 'header' => $data->renderWith('GridFieldBulkUpload'),
+ );
+ }
+ /* **********************************************************************
+ * GridField_URLHandler
+ * */
- /* **********************************************************************
- * GridField_URLHandler
- * */
-
- /**
- * Component URL handlers
- *
- * @param GridField $gridField
- * @return array
- */
- public function getURLHandlers($gridField) {
- return array(
- 'bulkupload' => 'handleBulkUpload'
- );
- }
-
+ /**
+ * Component URL handlers.
+ *
+ * @param GridField $gridField
+ *
+ * @return array
+ */
+ public function getURLHandlers($gridField)
+ {
+ return array(
+ 'bulkupload' => 'handleBulkUpload',
+ );
+ }
- /**
- * Pass control over to the RequestHandler
- *
- * @param GridField $gridField
- * @param SS_HTTPRequest $request
- * @return mixed
- */
- public function handleBulkUpload($gridField, $request)
- {
- $controller = $gridField->getForm()->Controller();
- $handler = new GridFieldBulkUpload_Request($gridField, $this, $controller);
-
- return $handler->handleRequest($request, DataModel::inst());
- }
+ /**
+ * Pass control over to the RequestHandler.
+ *
+ * @param GridField $gridField
+ * @param SS_HTTPRequest $request
+ *
+ * @return mixed
+ */
+ public function handleBulkUpload($gridField, $request)
+ {
+ $controller = $gridField->getForm()->Controller();
+ $handler = new GridFieldBulkUpload_Request($gridField, $this, $controller);
+
+ return $handler->handleRequest($request, DataModel::inst());
+ }
}
diff --git a/bulkUpload/code/GridFieldBulkUpload_Request.php b/bulkUpload/code/GridFieldBulkUpload_Request.php
index 4e3dc17..7d1e2be 100644
--- a/bulkUpload/code/GridFieldBulkUpload_Request.php
+++ b/bulkUpload/code/GridFieldBulkUpload_Request.php
@@ -1,305 +1,295 @@
action map.
+ *
+ * @var array
+ */
+ private static $url_handlers = array(
+ '$Action!' => '$Action',
+ );
- /**
- * RequestHandler url => action map
- * @var array
- */
- private static $url_handlers = array(
- '$Action!' => '$Action'
- );
-
+ /**
+ * Handler's constructor.
+ *
+ * @param GridFIeld $gridField
+ * @param GridField_URLHandler $component
+ * @param Controller $controller
+ */
+ public function __construct($gridField, $component, $controller)
+ {
+ $this->gridField = $gridField;
+ $this->component = $component;
+ $this->controller = $controller;
+ parent::__construct();
+ }
- /**
- * Handler's constructor
- *
- * @param GridFIeld $gridField
- * @param GridField_URLHandler $component
- * @param Controller $controller
- */
- public function __construct($gridField, $component, $controller)
- {
- $this->gridField = $gridField;
- $this->component = $component;
- $this->controller = $controller;
- parent::__construct();
- }
+ /**
+ * Return the original component's UploadField.
+ *
+ * @return UploadField UploadField instance as defined in the component
+ */
+ public function getUploadField()
+ {
+ return $this->component->bulkUploadField($this->gridField);
+ }
+ /**
+ * Process upload through UploadField,
+ * creates new record and link newly uploaded file
+ * adds record to GrifField relation list
+ * and return image/file data and record edit form.
+ *
+ * @param SS_HTTPRequest $request
+ *
+ * @return string json
+ */
+ public function upload(SS_HTTPRequest $request)
+ {
+ //create record
+ $recordClass = $this->gridField->list->dataClass;
+ $record = Object::create($recordClass);
+ $record->write();
- /**
- * Return the original component's UploadField
- *
- * @return UploadField UploadField instance as defined in the component
- */
- public function getUploadField()
- {
- return $this->component->bulkUploadField($this->gridField);
- }
+ // passes the current gridfield-instance to a call-back method on the new object
+ $record->extend('onBulkUpload', $this->gridField);
+ if ($record->hasMethod('onBulkImageUpload')) {
+ Deprecation::notice('2.0', '"onBulkImageUpload" callback is deprecated, use "onBulkUpload" instead.');
+ $record->extend('onBulkImageUpload', $this->gridField);
+ }
-
- /**
- * Process upload through UploadField,
- * creates new record and link newly uploaded file
- * adds record to GrifField relation list
- * and return image/file data and record edit form
- *
- * @param SS_HTTPRequest $request
- * @return string json
- */
- public function upload(SS_HTTPRequest $request)
- {
- //create record
- $recordClass = $this->gridField->list->dataClass;
- $record = Object::create($recordClass);
- $record->write();
+ //get uploadField and process upload
+ $uploadField = $this->getUploadField();
+ $uploadField->setRecord($record);
- // passes the current gridfield-instance to a call-back method on the new object
- $record->extend("onBulkUpload", $this->gridField);
- if ( $record->hasMethod('onBulkImageUpload') )
- {
- Deprecation::notice('2.0', '"onBulkImageUpload" callback is deprecated, use "onBulkUpload" instead.');
- $record->extend("onBulkImageUpload", $this->gridField);
- }
+ $fileRelationName = $uploadField->getName();
+ $uploadResponse = $uploadField->upload($request);
- //get uploadField and process upload
- $uploadField = $this->getUploadField();
- $uploadField->setRecord($record);
+ //get uploaded File response datas
+ $uploadResponse = Convert::json2array($uploadResponse->getBody());
+ $uploadResponse = array_shift($uploadResponse);
- $fileRelationName = $uploadField->getName();
- $uploadResponse = $uploadField->upload($request);
+ // Attach the file to record.
+ $record->{"{$fileRelationName}ID"} = $uploadResponse['id'];
+ $record->write();
- //get uploaded File response datas
- $uploadResponse = Convert::json2array( $uploadResponse->getBody() );
- $uploadResponse = array_shift( $uploadResponse );
-
- // Attach the file to record.
- $record->{"{$fileRelationName}ID"} = $uploadResponse['id'];
- $record->write();
+ // attached record to gridField relation
+ $this->gridField->list->add($record->ID);
- // attached record to gridField relation
- $this->gridField->list->add($record->ID);
-
- // JS Template Data
- $responseData = $this->newRecordJSTemplateData($record, $uploadResponse);
-
- $response = new SS_HTTPResponse(Convert::raw2json(array($responseData)));
- $this->contentTypeNegotiation($response);
-
- return $response;
- }
+ // JS Template Data
+ $responseData = $this->newRecordJSTemplateData($record, $uploadResponse);
+ $response = new SS_HTTPResponse(Convert::raw2json(array($responseData)));
+ $this->contentTypeNegotiation($response);
- /**
- * Updates the Upload/Attach response from the UploadField
- * with the new DataObject records for the JS template
- *
- * @param DataObject $record Newly create DataObject record
- * @param array $uploadResponse Upload or Attach response from UploadField
- * @return array Updated $uploadResponse with $record data
- */
- protected function newRecordJSTemplateData(DataObject &$record, &$uploadResponse)
- {
- // fetch uploadedFile record and sort out previewURL
- // update $uploadResponse datas in case changes happened onAfterWrite()
- $uploadedFile = DataObject::get_by_id( $this->component->getFileRelationClassName($this->gridField), $uploadResponse['id'] );
-
- if ( $uploadedFile )
- {
- $uploadResponse['name'] = $uploadedFile->Name;
- $uploadResponse['url'] = $uploadedFile->getURL();
+ return $response;
+ }
- if ( $uploadedFile instanceof Image )
- {
- $uploadResponse['thumbnail_url'] = $uploadedFile->CroppedImage(30,30)->getURL();
- }
- else{
- $uploadResponse['thumbnail_url'] = $uploadedFile->Icon();
- }
+ /**
+ * Updates the Upload/Attach response from the UploadField
+ * with the new DataObject records for the JS template.
+ *
+ * @param DataObject $record Newly create DataObject record
+ * @param array $uploadResponse Upload or Attach response from UploadField
+ *
+ * @return array Updated $uploadResponse with $record data
+ */
+ protected function newRecordJSTemplateData(DataObject &$record, &$uploadResponse)
+ {
+ // fetch uploadedFile record and sort out previewURL
+ // update $uploadResponse datas in case changes happened onAfterWrite()
+ $uploadedFile = DataObject::get_by_id($this->component->getFileRelationClassName($this->gridField), $uploadResponse['id']);
- // check if our new record has a Title, if not create one automatically
- $title = $record->getTitle();
- if ( !$title || $title === $record->ID )
- {
- if ( $record->hasDatabaseField('Title') )
- {
- $record->Title = $uploadedFile->Title;
- $record->write();
- }
- else if ($record->hasDatabaseField('Name')){
- $record->Name = $uploadedFile->Title;
- $record->write();
- }
- }
- }
+ if ($uploadedFile) {
+ $uploadResponse['name'] = $uploadedFile->Name;
+ $uploadResponse['url'] = $uploadedFile->getURL();
- // Collect all data for JS template
- $return = array_merge($uploadResponse, array(
- 'record' => array(
- 'id' => $record->ID
- )
- ));
+ if ($uploadedFile instanceof Image) {
+ $uploadResponse['thumbnail_url'] = $uploadedFile->CroppedImage(30, 30)->getURL();
+ } else {
+ $uploadResponse['thumbnail_url'] = $uploadedFile->Icon();
+ }
- return $return;
- }
+ // check if our new record has a Title, if not create one automatically
+ $title = $record->getTitle();
+ if (!$title || $title === $record->ID) {
+ if ($record->hasDatabaseField('Title')) {
+ $record->Title = $uploadedFile->Title;
+ $record->write();
+ } elseif ($record->hasDatabaseField('Name')) {
+ $record->Name = $uploadedFile->Title;
+ $record->write();
+ }
+ }
+ }
+ // Collect all data for JS template
+ $return = array_merge($uploadResponse, array(
+ 'record' => array(
+ 'id' => $record->ID,
+ ),
+ ));
- /**
- * Pass select request to UploadField
- *
- * @link UploadField->select()
- */
- public function select(SS_HTTPRequest $request)
- {
- /*
- $uploadField = $this->getUploadField();
- return $uploadField->handleSelect($request);
- */
- $uploadField = $this->getUploadField();
- return UploadField_SelectHandler::create($this, $uploadField->getFolderName());
- }
+ return $return;
+ }
+ /**
+ * Pass select request to UploadField.
+ *
+ * @link UploadField->select()
+ */
+ public function select(SS_HTTPRequest $request)
+ {
+ /*
+ $uploadField = $this->getUploadField();
+ return $uploadField->handleSelect($request);
+ */
+ $uploadField = $this->getUploadField();
- /**
- * Pass getRelationAutosetClass request to UploadField
- * Used by select dialog
- *
- * @link UploadField->getRelationAutosetClass()
- */
- public function getRelationAutosetClass($default = 'File')
- {
- $uploadField = $this->getUploadField();
- return $uploadField->getRelationAutosetClass($default);
- }
-
+ return UploadField_SelectHandler::create($this, $uploadField->getFolderName());
+ }
- /**
- * Pass getAllowedMaxFileNumber request to UploadField
- * Used by select dialog
- *
- * @link UploadField->getAllowedMaxFileNumber()
- */
- public function getAllowedMaxFileNumber()
- {
- $uploadField = $this->getUploadField();
- return $uploadField->getAllowedMaxFileNumber();
- }
+ /**
+ * Pass getRelationAutosetClass request to UploadField
+ * Used by select dialog.
+ *
+ * @link UploadField->getRelationAutosetClass()
+ */
+ public function getRelationAutosetClass($default = 'File')
+ {
+ $uploadField = $this->getUploadField();
+ return $uploadField->getRelationAutosetClass($default);
+ }
- /**
- * Retrieve Files to be attached
- * and generated DataObjects for each one
- *
- * @param SS_HTTPRequest $request
- * @return SS_HTTPResponse
- */
- public function attach(SS_HTTPRequest $request)
- {
- $uploadField = $this->getUploadField();
- $attachResponses = $uploadField->attach($request);
- $attachResponses = json_decode($attachResponses->getBody(), true);
+ /**
+ * Pass getAllowedMaxFileNumber request to UploadField
+ * Used by select dialog.
+ *
+ * @link UploadField->getAllowedMaxFileNumber()
+ */
+ public function getAllowedMaxFileNumber()
+ {
+ $uploadField = $this->getUploadField();
- $fileRelationName = $uploadField->getName();
- $recordClass = $this->gridField->list->dataClass;
- $return = array();
+ return $uploadField->getAllowedMaxFileNumber();
+ }
- foreach ($attachResponses as $attachResponse)
- {
- // create record
- $record = Object::create($recordClass);
- $record->write();
- $record->extend("onBulkUpload", $this->gridField);
+ /**
+ * Retrieve Files to be attached
+ * and generated DataObjects for each one.
+ *
+ * @param SS_HTTPRequest $request
+ *
+ * @return SS_HTTPResponse
+ */
+ public function attach(SS_HTTPRequest $request)
+ {
+ $uploadField = $this->getUploadField();
+ $attachResponses = $uploadField->attach($request);
+ $attachResponses = json_decode($attachResponses->getBody(), true);
- // attach file
- $record->{"{$fileRelationName}ID"} = $attachResponse['id'];
- $record->write();
+ $fileRelationName = $uploadField->getName();
+ $recordClass = $this->gridField->list->dataClass;
+ $return = array();
- // attached record to gridField relation
- $this->gridField->list->add($record->ID);
+ foreach ($attachResponses as $attachResponse) {
+ // create record
+ $record = Object::create($recordClass);
+ $record->write();
+ $record->extend('onBulkUpload', $this->gridField);
- // JS Template Data
- $responseData = $this->newRecordJSTemplateData($record, $attachResponse);
+ // attach file
+ $record->{"{$fileRelationName}ID"} = $attachResponse['id'];
+ $record->write();
- // add to returned dataset
- array_push($return, $responseData);
- }
+ // attached record to gridField relation
+ $this->gridField->list->add($record->ID);
- $response = new SS_HTTPResponse(Convert::raw2json($return));
- $this->contentTypeNegotiation($response);
+ // JS Template Data
+ $responseData = $this->newRecordJSTemplateData($record, $attachResponse);
- return $response;
- }
+ // add to returned dataset
+ array_push($return, $responseData);
+ }
+ $response = new SS_HTTPResponse(Convert::raw2json($return));
+ $this->contentTypeNegotiation($response);
- /**
- * Pass fileexists request to UploadField
- *
- * @link UploadField->fileexists()
- */
- public function fileexists(SS_HTTPRequest $request)
- {
- $uploadField = $this->getUploadField();
- return $uploadField->fileexists($request);
- }
+ return $response;
+ }
+ /**
+ * Pass fileexists request to UploadField.
+ *
+ * @link UploadField->fileexists()
+ */
+ public function fileexists(SS_HTTPRequest $request)
+ {
+ $uploadField = $this->getUploadField();
- /**
- * @param string $action
- * @return string
- */
- public function Link($action = null) {
- return Controller::join_links($this->gridField->Link(), '/bulkupload/', $action);
- }
+ return $uploadField->fileexists($request);
+ }
- /**
- * Sets response 'Content-Type' depending on browser capabilities
- * e.g. IE needs text/plain for iframe transport
- * https://github.com/blueimp/jQuery-File-Upload/issues/1795
- * @param SS_HTTPResponse $response HTTP Response to set content-type on
- */
- protected function contentTypeNegotiation(&$response)
- {
- if (isset($_SERVER['HTTP_ACCEPT']) && ((strpos($_SERVER['HTTP_ACCEPT'], 'application/json') !== false) || $_SERVER['HTTP_ACCEPT'] === '*/*' ))
- {
- $response->addHeader('Content-Type', 'application/json');
- }else{
- $response->addHeader('Content-Type', 'text/plain');
- }
- }
+ /**
+ * @param string $action
+ *
+ * @return string
+ */
+ public function Link($action = null)
+ {
+ return Controller::join_links($this->gridField->Link(), '/bulkupload/', $action);
+ }
+
+ /**
+ * Sets response 'Content-Type' depending on browser capabilities
+ * e.g. IE needs text/plain for iframe transport
+ * https://github.com/blueimp/jQuery-File-Upload/issues/1795.
+ *
+ * @param SS_HTTPResponse $response HTTP Response to set content-type on
+ */
+ protected function contentTypeNegotiation(&$response)
+ {
+ if (isset($_SERVER['HTTP_ACCEPT']) && ((strpos($_SERVER['HTTP_ACCEPT'], 'application/json') !== false) || $_SERVER['HTTP_ACCEPT'] === '*/*')) {
+ $response->addHeader('Content-Type', 'application/json');
+ } else {
+ $response->addHeader('Content-Type', 'text/plain');
+ }
+ }
}
diff --git a/tasks/BuildTransifexTranslations.php b/tasks/BuildTransifexTranslations.php
index 3438e5d..9df0d49 100644
--- a/tasks/BuildTransifexTranslations.php
+++ b/tasks/BuildTransifexTranslations.php
@@ -4,66 +4,63 @@
* from Transifex data. This tasks assumes that:
* - Javascript translations are from the Transifex resource called 'js'
* - YML translations are from the Transifex resource called 'yml'
- * - Transifex AUTH credentials to be saved in $txAuthFile with content {"username": "user", "password": "pwd"}
+ * - Transifex AUTH credentials to be saved in $txAuthFile with content {"username": "user", "password": "pwd"}.
*
* This is inspired by SilverStripe build tools. Thanks
+ *
* @see https://github.com/silverstripe/silverstripe-buildtools/blob/master/src/GenerateJavascriptI18nTask.php
*/
-include_once "phing/Task.php";
+include_once 'phing/Task.php';
// Ignore this file if phing is not installed
-if(!class_exists('Task')) {
- return;
+if (!class_exists('Task')) {
+ return;
}
class BuildTransifexTranslations extends Task
{
- private $txapi = 'https://www.transifex.com/api/2';
- private $txproject = '';
- private $txAuthFile = 'transifexAuth.json';
- private $txAuth = null;
+ private $txapi = 'https://www.transifex.com/api/2';
+ private $txproject = '';
+ private $txAuthFile = 'transifexAuth.json';
+ private $txAuth = null;
- private $root = '';
- private $jsDir = '/lang/js';
- private $ymlDir = '/lang';
+ private $root = '';
+ private $jsDir = '/lang/js';
+ private $ymlDir = '/lang';
- public function settxapi($txapi)
- {
- $this->txapi = $txapi;
- }
+ public function settxapi($txapi)
+ {
+ $this->txapi = $txapi;
+ }
- public function settxproject($txproject)
- {
- $this->txproject = $txproject;
- }
+ public function settxproject($txproject)
+ {
+ $this->txproject = $txproject;
+ }
/**
- * Task init
+ * Task init.
*/
public function init()
- {
- $root = realpath(__DIR__ . DIRECTORY_SEPARATOR . '..');
- $authFile = $root . DIRECTORY_SEPARATOR . $this->txAuthFile;
+ {
+ $root = realpath(__DIR__.DIRECTORY_SEPARATOR.'..');
+ $authFile = $root.DIRECTORY_SEPARATOR.$this->txAuthFile;
- if ( file_exists($authFile) )
- {
- $txAuthData = file_get_contents($authFile);
- $txAuthData = json_decode($txAuthData);
- if ( $txAuthData->username && $txAuthData->password )
- {
- $this->txAuth = $txAuthData;
+ if (file_exists($authFile)) {
+ $txAuthData = file_get_contents($authFile);
+ $txAuthData = json_decode($txAuthData);
+ if ($txAuthData->username && $txAuthData->password) {
+ $this->txAuth = $txAuthData;
+ } else {
+ throw new BuildException("Transifex credentials malformat. Check your $authFile for 'username' and 'password' keys.");
+ }
+ } else {
+ throw new BuildException("Transifex credentials not found. $authFile missing.");
}
- else{
- throw new BuildException("Transifex credentials malformat. Check your $authFile for 'username' and 'password' keys.");
- }
- }
- else{
- throw new BuildException("Transifex credentials not found. $authFile missing.");
- }
- $this->root = $root;
- $this->jsDir = $root . $this->jsDir;
- $this->ymlDir = $root . $this->ymlDir;
+ $this->root = $root;
+ $this->jsDir = $root.$this->jsDir;
+ $this->ymlDir = $root.$this->ymlDir;
}
/**
@@ -71,138 +68,120 @@ class BuildTransifexTranslations extends Task
*/
public function main()
{
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
- curl_setopt($ch, CURLOPT_USERPWD, $this->txAuth->username . ":" . $this->txAuth->password);
-
+ $ch = curl_init();
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+ curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
+ curl_setopt($ch, CURLOPT_USERPWD, $this->txAuth->username.':'.$this->txAuth->password);
+
// get resources
$url = $this->txapi.'/project/'.$this->txproject.'/resources/';
- curl_setopt($ch, CURLOPT_URL, $url);
- $resources = curl_exec($ch);
+ curl_setopt($ch, CURLOPT_URL, $url);
+ $resources = curl_exec($ch);
- if ( !$resources )
- {
- throw new BuildException("Cannot fetch resources");
- }
- else{
- $resources = json_decode($resources);
- }
+ if (!$resources) {
+ throw new BuildException('Cannot fetch resources');
+ } else {
+ $resources = json_decode($resources);
+ }
// get langs
$url = $this->txapi.'/project/'.$this->txproject.'/languages/';
- curl_setopt($ch, CURLOPT_URL, $url);
- $languages = curl_exec($ch);
+ curl_setopt($ch, CURLOPT_URL, $url);
+ $languages = curl_exec($ch);
- if ( !$languages )
- {
- throw new BuildException("Cannot fetch languages");
- }
- else{
- $languages = json_decode($languages);
- }
+ if (!$languages) {
+ throw new BuildException('Cannot fetch languages');
+ } else {
+ $languages = json_decode($languages);
+ }
// clear existing translation files and/or setup folders
$this->resetTranslations();
// add source_language_code to languages list
$sourceLangs = array();
- foreach ($resources as $resource)
- {
- $lang = new StdClass();
- $locale = $resource->source_language_code;
- $lang->language_code = $locale;
- if ( !array_key_exists($locale, $sourceLangs) )
- {
- $sourceLangs[$locale] = $lang;
- }
- }
- $sourceLangs = array_values($sourceLangs);
- $languages = array_merge($languages, $sourceLangs);
+ foreach ($resources as $resource) {
+ $lang = new StdClass();
+ $locale = $resource->source_language_code;
+ $lang->language_code = $locale;
+ if (!array_key_exists($locale, $sourceLangs)) {
+ $sourceLangs[$locale] = $lang;
+ }
+ }
+ $sourceLangs = array_values($sourceLangs);
+ $languages = array_merge($languages, $sourceLangs);
// get each resource translations
- foreach ($resources as $resource)
- {
- foreach ($languages as $language)
- {
- $url = $this->txapi.'/project/'.$this->txproject.'/resource/'.$resource->slug.'/translation/'.$language->language_code;
- curl_setopt($ch, CURLOPT_URL, $url);
- $data = curl_exec($ch);
- if ( $data )
- {
- $this->saveTranslation($resource->slug, $language->language_code, $data);
+ foreach ($resources as $resource) {
+ foreach ($languages as $language) {
+ $url = $this->txapi.'/project/'.$this->txproject.'/resource/'.$resource->slug.'/translation/'.$language->language_code;
+ curl_setopt($ch, CURLOPT_URL, $url);
+ $data = curl_exec($ch);
+ if ($data) {
+ $this->saveTranslation($resource->slug, $language->language_code, $data);
+ }
}
- }
}
-
- curl_close($ch);
+
+ curl_close($ch);
}
/**
* Clear any existing translation files
- * and create directory structure if needed
+ * and create directory structure if needed.
*/
private function resetTranslations()
{
- if ( file_exists($this->jsDir) )
- {
- echo "Clearing js translations...\n";
- $iterator = new GlobIterator($this->jsDir . DIRECTORY_SEPARATOR . '*.js');
- foreach ($iterator as $fileInfo)
- {
- if ( $fileInfo->isFile() )
- {
- $del = unlink($fileInfo->getRealPath());
- }
+ if (file_exists($this->jsDir)) {
+ echo "Clearing js translations...\n";
+ $iterator = new GlobIterator($this->jsDir.DIRECTORY_SEPARATOR.'*.js');
+ foreach ($iterator as $fileInfo) {
+ if ($fileInfo->isFile()) {
+ $del = unlink($fileInfo->getRealPath());
+ }
+ }
}
- }
- if ( file_exists($this->ymlDir) )
- {
- echo "Clearing yml translations...\n";
- $iterator = new GlobIterator($this->ymlDir . DIRECTORY_SEPARATOR . '*.yml');
- foreach ($iterator as $fileInfo)
- {
- if ( $fileInfo->isFile() )
- {
- $del = unlink($fileInfo->getRealPath());
- }
+ if (file_exists($this->ymlDir)) {
+ echo "Clearing yml translations...\n";
+ $iterator = new GlobIterator($this->ymlDir.DIRECTORY_SEPARATOR.'*.yml');
+ foreach ($iterator as $fileInfo) {
+ if ($fileInfo->isFile()) {
+ $del = unlink($fileInfo->getRealPath());
+ }
+ }
}
- }
- if ( !file_exists($this->jsDir) )
- {
- echo "Creating js folders...\n";
- mkdir($this->jsDir);
- }
+ if (!file_exists($this->jsDir)) {
+ echo "Creating js folders...\n";
+ mkdir($this->jsDir);
+ }
- if ( !file_exists($this->ymlDir) )
- {
- echo "Creating yml folders...\n";
- mkdir($this->ymlDir);
- }
+ if (!file_exists($this->ymlDir)) {
+ echo "Creating yml folders...\n";
+ mkdir($this->ymlDir);
+ }
}
/**
* Hook that detect the translation type via resource slug
- * and call corect saving function with data
+ * and call corect saving function with data.
+ *
* @param string $resource Transifex resrouce slug
* @param string $locale Transifex locale
* @param string $data Raw Transifex translation data
*/
private function saveTranslation($resource, $locale, $data)
{
- if ( !$resource || !$locale || !$data )
- {
- return;
- }
+ if (!$resource || !$locale || !$data) {
+ return;
+ }
- $data = json_decode($data);
- $translation = rtrim($data->content);
+ $data = json_decode($data);
+ $translation = rtrim($data->content);
- switch ($resource)
- {
+ switch ($resource) {
case 'js':
$this->saveJSTranslation($locale, $translation);
break;
@@ -215,24 +194,25 @@ class BuildTransifexTranslations extends Task
/**
* Save a JS translation file
- * Uses JSTemplate to fit with SilverStripe requirements
+ * Uses JSTemplate to fit with SilverStripe requirements.
+ *
* @param string $locale Locale code
* @param string $json JSON translation key:value
*/
private function saveJSTranslation($locale, $json)
- {
- echo "Saving $locale.js\n";
- file_put_contents(
- $this->jsDir . DIRECTORY_SEPARATOR . $locale . '.js',
- $this->getBanner('js') .
+ {
+ echo "Saving $locale.js\n";
+ file_put_contents(
+ $this->jsDir.DIRECTORY_SEPARATOR.$locale.'.js',
+ $this->getBanner('js').
str_replace(
array(
'%TRANSLATIONS%',
- '%LOCALE%'
+ '%LOCALE%',
),
array(
$json,
- $locale
+ $locale,
),
$this->getJSTemplate()
)
@@ -240,67 +220,70 @@ class BuildTransifexTranslations extends Task
}
/**
- * Save a YML translation file
+ * Save a YML translation file.
+ *
* @param string $locale Locale code
* @param string $yml YML translation
*/
public function saveYMLTranslation($locale, $yml)
{
- echo "Saving $locale.yml\n";
-
- if ($locale !== 'en')
- {
- $content = $this->getBanner('yml') . $yml;
- }
- else{
- $content = $yml;
- }
+ echo "Saving $locale.yml\n";
- file_put_contents(
- $this->ymlDir . DIRECTORY_SEPARATOR . $locale . '.yml',
+ if ($locale !== 'en') {
+ $content = $this->getBanner('yml').$yml;
+ } else {
+ $content = $yml;
+ }
+
+ file_put_contents(
+ $this->ymlDir.DIRECTORY_SEPARATOR.$locale.'.yml',
$content
);
}
/**
- * Return the commented file banner
+ * Return the commented file banner.
+ *
* @param string $type File type e.g js
+ *
* @return string The commented file banner
*/
private function getBanner($type)
{
- switch ( strtolower($type) )
- {
+ switch (strtolower($type)) {
case 'yml':
- $comment = "#";
+ $comment = '#';
break;
-
+
default:
- $comment = "//";
+ $comment = '//';
break;
}
- $banner = <<