public function updateCMSFields(FieldSet $fields)
 {
     $service = singleton('WorkflowService');
     if ($effective = $service->getDefinitionFor($this->owner)) {
         $effectiveTitle = $effective->Title;
     } else {
         $effectiveTitle = _t('WorkflowApplicable.NONE', '(none)');
     }
     $allDefinitions = array(_t('WorkflowApplicable.INHERIT', 'Inherit from parent'));
     if ($definitions = $service->getDefinitions()) {
         $allDefinitions += $definitions->map();
     }
     $tab = $fields->fieldByName('Root') ? 'Root.Workflow' : 'BottomRoot.Workflow';
     $applyWorkflowField = null;
     $fields->addFieldToTab($tab, new HeaderField('AppliedWorkflowHeader', _t('WorkflowApplicable.APPLIEDWORKFLOW', 'Applied Workflow')));
     if (Permission::check('APPLY_WORKFLOW')) {
         $fields->addFieldToTab($tab, new DropdownField('WorkflowDefinitionID', _t('WorkflowApplicable.DEFINITION', 'Applied Workflow'), $allDefinitions));
     }
     $fields->addFieldToTab($tab, new ReadonlyField('EffectiveWorkflow', _t('WorkflowApplicable.EFFECTIVE_WORKFLOW', 'Effective Workflow'), $effectiveTitle));
     $fields->addFieldToTab($tab, new HeaderField('WorkflowLogHeader', _t('WorkflowApplicable.WORKFLOWLOG', 'Workflow Log')));
     $fields->addFieldToTab($tab, $logTable = new ComplexTableField($this->owner, 'WorkflowLog', 'WorkflowInstance', null, 'getActionsSummaryFields', sprintf('"TargetClass" = \'%s\' AND "TargetID" = %d', $this->owner->class, $this->owner->ID)));
     $logTable->setRelationAutoSetting(false);
     $logTable->setPermissions(array('show'));
     $logTable->setPopupSize(760, 420);
 }
 /**
  * Adds token creation fields to CMS
  * 
  * @param FieldSet $fields
  * @return void
  */
 public function updateCMSFields(FieldSet &$fields)
 {
     // Only modify file objects with parent nodes
     if (!$this->owner instanceof Folder || !$this->owner->ID) {
         return;
     }
     // Only allow ADMIN and SECURE_FILE_SETTINGS members to edit these options
     if (!Permission::checkMember(Member::currentUser(), array('ADMIN', 'SECURE_FILE_SETTINGS'))) {
         return;
     }
     // Update Security Tab
     $secureFilesTab = $fields->findOrMakeTab('Root.' . _t('SecureFiles.SECUREFILETABNAME', 'Security'));
     $secureFilesTab->push(new HeaderField(_t('SecureFiles.TOKENACCESSTITLE', 'Token Access')));
     if (!$this->owner->containsFiles()) {
         $secureFilesTab->push(new ReadonlyField('DummyTokenList', '', _t('SecureFiles.NOFILESINFOLDER', 'There are no files in this folder.')));
         return;
     }
     $secureFilesTab->push($tokenList = new ComplexTableField($this->owner, 'ContainedFileTokens', 'SecureFileAccessToken', null, null, "File.ParentID = '{$this->owner->ID}'", $sourceSort = null, "JOIN File ON FileID = File.ID"));
     $tokenList->setParentIdName('FolderID');
     $tokenList->setRelationAutoSetting(false);
     // Remove add link if there are no files in this folder
     if (!$this->owner->containsFiles()) {
         $tokenList->setPermissions(array('edit', 'delete'));
     }
 }
Exemple #3
0
 /**
  * @return FieldSet
  */
 function RootForm()
 {
     $memberList = new MemberTableField($this, "Members");
     // unset 'inlineadd' permission, we don't want inline addition
     $memberList->setPermissions(array('edit', 'delete', 'add'));
     $fields = new FieldList(new TabSet('Root', new Tab('Members', singleton('Member')->i18n_plural_name(), $memberList, new LiteralField('MembersCautionText', sprintf('<p class="caution-remove"><strong>%s</strong></p>', _t('SecurityAdmin.MemberListCaution', 'Caution: Removing members from this list will remove them from all groups and the database')))), new Tab('Import', _t('SecurityAdmin.TABIMPORT', 'Import'), new LiteralField('GroupImportFormIframe', sprintf('<iframe src="%s" id="GroupImportFormIframe" width="100%%" height="400px" border="0"></iframe>', $this->Link('groupimport'))))), new HiddenField('ID', false, 0));
     // Add roles editing interface
     if (Permission::check('APPLY_ROLES')) {
         $rolesCTF = new ComplexTableField($this, 'Roles', 'PermissionRole');
         $rolesCTF->setPermissions(array('add', 'edit', 'delete'));
         $rolesTab = $fields->findOrMakeTab('Root.Roles', _t('SecurityAdmin.TABROLES', 'Roles'));
         $rolesTab->push(new LiteralField('RolesDescription', ''));
         $rolesTab->push($rolesCTF);
     }
     $actions = new FieldList(new FormAction('addmember', _t('SecurityAdmin.ADDMEMBER', 'Add Member')));
     $this->extend('updateRootFormFields', $fields, $actions);
     $form = new Form($this, 'EditForm', $fields, $actions);
     $form->addExtraClass('cms-edit-form');
     return $form;
 }
 function getCMSFields()
 {
     $fields = parent::getCMSFields();
     $categories = DataObject::get("NewsletterCategory");
     $fields->addFieldsToTab('Root.Content.Newsletter', array(new TextField("Name", _t("Newsletter.Campaign.Name", "Name of the Newsletter Campaign")), new EmailField("SendFrom", _t("Newsletter.Campaign.SendFrom", "Send from eMail")), new TextField("TemplateFilename", _t("Newsletter.Campaign.TemplateFilename", "Name of template (no .ss)")), new TextField("BodyStyle", _t("Newsletter.Campaign.BodyStyle", "Body StyleSheet")), new TextField("ContentStyle", _t("Newsletter.Campaign.Content", "Content StyleSheet")), new TextField("LinkStyle", _t("Newsletter.Campaign.LinkStyle", "Style for every link [a]")), new TextField("ImageStyle", _t("Newsletter.Campaign.ImageStyle", "Style for every image [img]")), new TextField("ParagraphStyle", _t("Newsletter.Campaign.ParagraphStyle", "Style for every paragraph [p]")), new TextField("HeadingStyle", _t("Newsletter.Campaign.HeadingStyle", "Style for heading [h2]")), new TextField("HorizontalRuleStyle", _t("Newsletter.Campaign.HorizontalRuleStyle", "Style for every [hr]")), new TextField("TableStyle", _t("Newsletter.Campaign.TableStyle", "Style for every table [table]")), new TextField("TableCellAttribute", _t("Newsletter.Campaign.TabelCellAttribute", "[td] CellAtribute")), new TextField("TableCellStyle", _t("Newsletter.Campaign.Style", "[td] Stylesheet")), new DropdownField('NewsletterCategoryID', _t("Newsletter.Campaign.NewsletterCategory", "Belongs to this newsletter category"), $categories->toDropdownMap('ID', 'Title', 'Bitte Newsletterkategorie eintragen', true))));
     $tablefield = new ComplexTableField($controller = $this, $name = 'Recievers', 'NewsletterReciever', $fieldList = array('FirstName' => _t("Newsletter.Member.FirstName", "FirstName"), 'Surname' => _t("Newsletter.Member.Surname", "Surame"), 'Email' => _t("Newsletter.Member.Email", "eMail"), 'Send' => _t("Newsletter.Admin.MailSended", "eMail sended (0=no/1=yes)")), null, $sourceFilter = "NewsletterID = '{$this->ID}'");
     $tablefield->setPermissions(array("show", "edit", "delete"));
     $tablefield->setParentClass(false);
     $fields->addFieldToTab("Root.Content." . _t("Newsletter.Admin.RecieverList", "List of recievers"), $tablefield);
     //Blacklist
     $tablefield = new ComplexTableField($controller = $this, $name = 'Blacklist', 'NewsletterBlacklist', $fieldList = array('Email' => _t("Newsletter.Member.Email", "eMail"), 'NewsletterCategory.Title' => _t("Newsletter.NewsletterCategory", "Newsletter Category")), null, $sourceFilter = "NewsletterCategoryID = {$this->NewsletterCategoryID}");
     $tablefield->setPermissions(array("show", "edit", "delete", "add"));
     $tablefield->setParentClass(false);
     $fields->addFieldToTab("Root.Content." . _t("Newsletter.Admin.BlackList", "Blacklist"), $tablefield);
     //Subscribers
     $tablefield = new ComplexTableField($controller = $this, $name = 'Subscribers', 'NewsletterMember', $fieldList = array('Email' => _t("Newsletter.Member.Email", "eMail"), 'NewsletterCategory.Title' => _t("Newsletter.NewsletterCategory", "Newsletter Category")), null, $sourceFilter = "NewsletterCategoryID = {$this->NewsletterCategoryID}");
     $tablefield->setPermissions(array("show", "edit", "delete", "add"));
     $tablefield->setParentClass(false);
     $fields->addFieldToTab("Root.Content." . _t("Newsletter.Admin.Subscribers", "Subscribers"), $tablefield);
     return $fields;
 }
 public function getCMSFields()
 {
     Requirements::javascript(THIRDPARTY_DIR . '/jquery/jquery.js');
     Requirements::javascript(THIRDPARTY_DIR . '/jquery-livequery/jquery.livequery.js');
     Requirements::javascript('eventmanagement/javascript/RegisterableEventCms.js');
     $fields = parent::getCMSFields();
     $fields->addFieldsToTab('Root.Content.Tickets', array(new HeaderField('TicketTypesHeader', $this->fieldLabel('TicketTypesHeader')), new ComplexTableField($this, 'Tickets', 'EventTicket')));
     $generators = ClassInfo::implementorsOf('EventRegistrationTicketGenerator');
     if ($generators) {
         foreach ($generators as $generator) {
             $instance = new $generator();
             $generators[$generator] = $instance->getGeneratorTitle();
         }
         $fields->addFieldsToTab('Root.Content.Tickets', array(new HeaderField('TicketGeneratorHeader', 'Ticket Generator'), new LiteralField('TicketGeneratorNone', '<p>The ticket ' . 'generator is used to generate a ticket file for the ' . 'user to download and print to bring to the event.</p>'), new DropdownField('TicketGenerator', '', $generators, null, null, '(none)')));
     }
     $changeFields = singleton('RegisterableDateTime')->fieldLabels(false);
     $fields->addFieldsToTab('Root.Content.Registration', array(new HeaderField('RegistrationSettingsHeader', $this->fieldLabel('RegistrationSettingsHeader')), new CheckboxField('OneRegPerEmail', $this->fieldLabel('OneRegPerEmail')), new CheckboxField('RequireLoggedIn', $this->fieldLabel('RequireLoggedIn')), new NumericField('RegistrationTimeLimit', $this->fieldLabel('RegistrationTimeLimit')), new HeaderField('EmailSettingsHeader', $this->fieldLabel('EmailSettingsHeader')), new CheckboxField('RegEmailConfirm', $this->fieldLabel('RegEmailConfirm')), new TextField('EmailConfirmMessage', $this->fieldLabel('EmailConfirmMessage')), new NumericField('ConfirmTimeLimit', $this->fieldLabel('ConfirmTimeLimit')), new TextField('AfterConfirmTitle', $this->fieldLabel('AfterConfirmTitle')), new HtmlEditorField('AfterConfirmContent', $this->fieldLabel('AfterConfirmContent'), 5), new CheckboxField('UnRegEmailConfirm', $this->fieldLabel('UnRegEmailConfirm')), new TextField('AfterConfUnregTitle', $this->fieldLabel('AfterConfUnregTitle')), new HtmlEditorField('AfterConfUnregContent', $this->fieldLabel('AfterConfUnregContent'), 5), new CheckboxField('EmailNotifyChanges', $this->fieldLabel('EmailNotifyChanges')), new CheckboxSetField('NotifyChangeFields', $this->fieldLabel('NotifyChangeFields'), $changeFields)));
     $fields->addFieldsToTab('Root.Content.AfterRegistration', array(new TextField('AfterRegTitle', $this->fieldLabel('AfterRegTitle')), new HtmlEditorField('AfterRegContent', $this->fieldLabel('AfterRegContent'))));
     $fields->addFieldsToTab('Root.Content.AfterUnregistration', array(new TextField('AfterUnregTitle', $this->fieldLabel('AfterUnregTitle')), new HtmlEditorField('AfterUnregContent', $this->fieldLabel('AfterUnregContent'))));
     $registrations = new ComplexTableField($this, 'Registrations', 'EventRegistration', null, null, '"Status" = \'Valid\' AND "Time"."EventID" = ' . $this->ID, null, 'INNER JOIN "CalendarDateTime" AS "Time" ON "Time"."ID" = "TimeID"');
     $registrations->setTemplate('EventRegistrationComplexTableField');
     $registrations->setPermissions(array('show', 'print', 'export'));
     $canceled = new ComplexTableField($this, 'Registations', 'EventRegistration', null, null, '"Status" = \'Canceled\' AND "Time"."EventID" = ' . $this->ID, null, 'INNER JOIN "CalendarDateTime" AS "Time" ON "Time"."ID" = "TimeID"');
     $canceled->setTemplate('EventRegistrationComplexTableField');
     $canceled->setPermissions(array('show', 'print', 'export'));
     $fields->addFieldToTab('Root', new Tab('Registrations'), 'Behaviour');
     $fields->addFieldsToTab('Root.Registrations', array(new HeaderField('RegistrationsHeader', $this->fieldLabel('Registrations')), $registrations, new ToggleCompositeField('CanceledRegistrations', 'Canceled Registrations', $canceled)));
     if ($this->RegEmailConfirm) {
         $unconfirmed = new ComplexTableField($this, 'UnconfirmedRegistations', 'EventRegistration', null, null, '"Status" = \'Unconfirmed\' AND "Time"."EventID" = ' . $this->ID, null, 'INNER JOIN "CalendarDateTime" AS "Time" ON "Time"."ID" = "TimeID"');
         $unconfirmed->setPermissions(array('show', 'print', 'export'));
         $unconfirmed->setTemplate('EventRegistrationComplexTableField');
         $fields->addFieldToTab('Root.Registrations', new ToggleCompositeField('UnconfirmedRegistrations', 'Unconfirmed Registrations', $unconfirmed));
     }
     // Add a tab allowing admins to invite people from, as well as view
     // people who have been invited.
     $fields->addFieldToTab('Root', new Tab('Invitations'), 'Behaviour');
     $fields->addFieldsToTab('Root.Invitations', array(new HeaderField('InvitationsHeader', $this->fieldLabel('InvitationsHeader')), new EventInvitationField($this, 'Invitations')));
     return $fields;
 }
	/**
	 * Gets the form fields as defined through the metadata
	 * on {@link $obj} and the custom parameters passed to FormScaffolder.
	 * Depending on those parameters, the fields can be used in ajax-context,
	 * contain {@link TabSet}s etc.
	 * 
	 * @return FieldSet
	 */
	public function getFieldSet() {
		$fields = new FieldSet();
		
		// tabbed or untabbed
		if($this->tabbed) {
			$fields->push(new TabSet("Root", $mainTab = new Tab("Main")));
			$mainTab->setTitle(_t('SiteTree.TABMAIN', "Main"));
		}
		
		// add database fields
		foreach($this->obj->db() as $fieldName => $fieldType) {
			if($this->restrictFields && !in_array($fieldName, $this->restrictFields)) continue;
			
			// @todo Pass localized title
			if($this->fieldClasses && isset($this->fieldClasses[$fieldName])) {
				$fieldClass = $this->fieldClasses[$fieldName];
				$fieldObject = new $fieldClass($fieldName);
			} else {
				$fieldObject = $this->obj->dbObject($fieldName)->scaffoldFormField(null, $this->getParamsArray());
			}
			$fieldObject->setTitle($this->obj->fieldLabel($fieldName));
			if($this->tabbed) {
				$fields->addFieldToTab("Root.Main", $fieldObject);
			} else {
				$fields->push($fieldObject);
			}
		}
		
		// add has_one relation fields
		if($this->obj->has_one()) {
			foreach($this->obj->has_one() as $relationship => $component) {
				if($this->restrictFields && !in_array($relationship, $this->restrictFields)) continue;
				$hasOneField = $this->obj->dbObject("{$relationship}ID")->scaffoldFormField(null, $this->getParamsArray());
				$hasOneField->setTitle($this->obj->fieldLabel($relationship));
				if($this->tabbed) {
					$fields->addFieldToTab("Root.Main", $hasOneField);
				} else {
					$fields->push($hasOneField);
				}
			}
		}
		
		// only add relational fields if an ID is present
		if($this->obj->ID) {
			// add has_many relation fields
			if($this->obj->has_many() && ($this->includeRelations === true || isset($this->includeRelations['has_many']))) {
				foreach($this->obj->has_many() as $relationship => $component) {
					if($this->tabbed) {
						$relationTab = $fields->findOrMakeTab(
							"Root.$relationship", 
							$this->obj->fieldLabel($relationship)
						);
					}
					$relationshipFields = singleton($component)->summaryFields();
					$foreignKey = $this->obj->getComponentJoinField($relationship);
					$ctf = new ComplexTableField(
						$this,
						$relationship,
						$component,
						$relationshipFields,
						"getCMSFields", 
						"$foreignKey = " . $this->obj->ID
					);
					$ctf->setPermissions(TableListField::permissions_for_object($component));
					if($this->tabbed) {
						$fields->addFieldToTab("Root.$relationship", $ctf);
					} else {
						$fields->push($ctf);
					}
				}
			}

			if($this->obj->many_many() && ($this->includeRelations === true || isset($this->includeRelations['many_many']))) {
				foreach($this->obj->many_many() as $relationship => $component) {
					if($this->tabbed) {
						$relationTab = $fields->findOrMakeTab(
							"Root.$relationship", 
							$this->obj->fieldLabel($relationship)
						);
					}

					$relationshipFields = singleton($component)->summaryFields();
					$filterWhere = $this->obj->getManyManyFilter($relationship, $component);
					$filterJoin = $this->obj->getManyManyJoin($relationship, $component);
					$ctf =  new ComplexTableField(
						$this,
						$relationship,
						$component,
						$relationshipFields,
						"getCMSFields", 
						$filterWhere,
						'', 
						$filterJoin
					);
					$ctf->setPermissions(TableListField::permissions_for_object($component));
					$ctf->popupClass = "ScaffoldingComplexTableField_Popup";
					if($this->tabbed) {
						$fields->addFieldToTab("Root.$relationship", $ctf);
					} else {
						$fields->push($ctf);
					}
				}
			}
		}
		
		return $fields;
	}
 /**
  */
 public function getCMSFields()
 {
     $fields = new FieldSet(new TabSet('Root'));
     $cmsUsers = Member::mapInCMSGroups()->getItems();
     if ($cmsUsers && $cmsUsers->count()) {
         $cmsUsers = $cmsUsers->map();
     } else {
         $cmsUsers = array();
     }
     $fields->addFieldToTab('Root.Main', new TextField('Title', _t('WorkflowDefinition.TITLE', 'Title')));
     $fields->addFieldToTab('Root.Main', new TextareaField('Description', _t('WorkflowDefinition.DESCRIPTION', 'Description')));
     $fields->addFieldToTab('Root.Main', new CheckboxSetField('Users', _t('WorkflowDefinition.USERS', 'Users'), $cmsUsers));
     $fields->addFieldToTab('Root.Main', new TreeMultiselectField('Groups', _t('WorkflowDefinition.GROUPS', 'Groups'), 'Group'));
     if (class_exists('AbstractQueuedJob')) {
         $before = _t('WorkflowDefinition.SENDREMINDERDAYSBEFORE', 'Send reminder email after ');
         $after = _t('WorkflowDefinition.SENDREMINDERDAYSAFTER', ' days without action.');
         $fields->addFieldToTab('Root.Main', new FieldGroup(_t('WorkflowDefinition.REMINDEREMAIL', 'Reminder Email'), new LabelField('ReminderEmailBefore', $before), new NumericField('RemindDays', ''), new LabelField('ReminderEmailAfter', $after)));
     }
     if ($this->ID && Permission::check('VIEW_ACTIVE_WORKFLOWS')) {
         $fields->addFieldToTab('Root.ActiveInstances', $active = new ComplexTableField($this, 'Instances', 'WorkflowInstance', array('Title' => 'Title', 'Target.Title' => 'Target Title', 'WorkflowStatus' => 'Status', 'CurrentAction.Title' => 'Current Action', 'LastEdited' => 'Last Actioned'), 'getInstanceManagementFields', '"WorkflowStatus" IN (\'Active\', \'Paused\')', '"LastEdited" DESC'));
         if (Permission::check('REASSIGN_ACTIVE_WORKFLOWS')) {
             $active->setPermissions(array('show', 'edit'));
         } else {
             $active->setPermissions(array('show'));
         }
         $fields->addFieldToTab('Root.Completed', $complete = new ComplexTableField($this, 'CompletedInstances', 'WorkflowInstance', array('Title' => 'Title', 'Target.Title' => 'Target Title', 'WorkflowStatus' => 'Status', 'CurrentAction.Title' => 'Current Action', 'LastEdited' => 'Last Actioned'), 'getActionsSummaryFields', '"WorkflowStatus" IN (\'Complete\', \'Cancelled\')', '"LastEdited" DESC'));
         $complete->setPermissions(array('show'));
     }
     return $fields;
 }
 /**
  * Standard SS function
  * @return FieldSet
  **/
 function getCMSFields()
 {
     $fields = parent::getCMSFields();
     $fields->removeFieldFromTab('Root.Content.Messages.Messages.Actions', "ProceedToCheckoutLabel");
     $fields->removeFieldFromTab('Root.Content.Messages.Messages.Actions', "ContinueShoppingLabel");
     $fields->removeFieldFromTab('Root.Content.Messages.Messages.Actions', "ContinuePageID");
     $fields->removeFieldFromTab('Root.Content.Messages.Messages.Actions', "LoadOrderLinkLabel");
     $fields->removeFieldFromTab('Root.Content.Messages.Messages.Actions', "CurrentOrderLinkLabel");
     $fields->removeFieldFromTab('Root.Content.Messages.Messages.Actions', "SaveOrderLinkLabel");
     $fields->removeFieldFromTab('Root.Content.Messages.Messages.Actions', "DeleteOrderLinkLabel");
     $termsPageIDField = new OptionalTreeDropdownField('TermsPageID', _t("CheckoutPage.TERMSANDCONDITIONSPAGE", "Terms and conditions page (if any - to remove, delete message below)"), 'SiteTree');
     $fields->addFieldToTab('Root.Content.Process', $termsPageIDField);
     $fields->addFieldToTab('Root.Content.Process', new TextField('TermsAndConditionsMessage', _t("CheckoutPage.TERMSANDCONDITIONSMESSAGE", "Terms and conditions page message (shown if the user does not tick the box) - leave blank to allow customer to proceed without ticking the box")));
     $fields->addFieldToTab('Root.Content.Process', new CheckboxField('HasCheckoutSteps', _t("CheckoutPage.HASCHECKOUTSTEPS", "Checkout Process in Steps")));
     $fields->addFieldToTab('Root.Content.Main', new HtmlEditorField('InvitationToCompleteOrder', _t("CheckoutPage.INVITATIONTOCOMPLETEORDER", 'Invitation to complete order ... shown when the customer can do a regular checkout'), $row = 4));
     //The Content field has a slightly different meaning for the Checkout Page.
     $fields->removeFieldFromTab('Root.Content.Main', "Content");
     $fields->addFieldToTab('Root.Content.Messages.Messages.AlwaysVisible', new HtmlEditorField('Content', _t("CheckoutPage.CONTENT", 'General note - always visible on the checkout page'), 7, 7));
     if (DataObject::get_one("OrderModifier_Descriptor")) {
         $orderModifierDescriptionField = new ComplexTableField($this, _t("CheckoutPage.ORDERMODIFIERDESCRIPTMESSAGES", "Messages relating to order form extras (e.g. tax or shipping)"), "OrderModifier_Descriptor");
         $orderModifierDescriptionField->setRelationAutoSetting(false);
         $orderModifierDescriptionField->setTitle(_t("CheckoutPage.ORDERMODIFIERDESCRIPTMESSAGES", "Messages relating to order form extras (e.g. tax or shipping)"));
         $orderModifierDescriptionField->setPermissions(array("show", "edit"));
         $fields->addFieldToTab('Root.Content.Messages.Messages.OrderExtras', $orderModifierDescriptionField);
     }
     if (DataObject::get_one("CheckoutPage_StepDescription")) {
         $checkoutStepDescriptionField = new ComplexTableField($this, _t("CheckoutPage.CHECKOUTSTEPESCRIPTIONS", "Checkout Step Descriptions"), "CheckoutPage_StepDescription");
         $checkoutStepDescriptionField->setRelationAutoSetting(false);
         $checkoutStepDescriptionField->setTitle(_t("CheckoutPage.CHECKOUTSTEPESCRIPTIONS", "Checkout Step Descriptions"));
         $checkoutStepDescriptionField->setPermissions(array("show", "edit"));
         $fields->addFieldToTab('Root.Content.Messages.Messages.CheckoutSteps', $checkoutStepDescriptionField);
     }
     return $fields;
 }
    /**
     * STANDARD SILVERSTRIPE STUFF
     * broken up into submitted and not (yet) submitted
     **/
    function getCMSFields()
    {
        $fields = parent::getCMSFields();
        if ($this->exists()) {
            $submitted = $this->IsSubmitted() ? true : false;
            if ($submitted) {
                $this->tryToFinaliseOrder();
            } else {
                $this->init(true);
            }
            if ($submitted) {
                $this->fieldsAndTabsToBeRemoved[] = "CustomerOrderNote";
            } else {
                $this->fieldsAndTabsToBeRemoved[] = "Emails";
            }
            foreach ($this->fieldsAndTabsToBeRemoved as $field) {
                $fields->removeByName($field);
            }
            //$fields->insertBefore(new LiteralField('Title',"<h2>".$this->Title()."</h2>"),'Root');
            $fields->insertAfter(new Tab("Next", new HeaderField("MyOrderStepHeader", _t("Order.CURRENTSTATUS", "Current Status")), $this->OrderStepField(), new HeaderField("OrderStepNextStepHeader", _t("Order.ACTIONNEXTSTEP", "Action Next Step"), 1), new LiteralField("OrderStepNextStepHeaderExtra", "<p><strong>" . _t("Order.NEEDTOREFRESH", "If you have made any changes to the order then you will have to refresh or save this record to see up-to-date options here.") . "</strong></p>"), new LiteralField("ActionNextStepManually", "<br /><br /><br /><h3>" . _t("Order.MANUALSTATUSCHANGE", "Manual Status Change") . "</h3>")), "Main");
            if ($submitted) {
                $htmlSummary = $this->renderWith("Order");
                $fields->addFieldToTab('Root.Main', new LiteralField('MainDetails', $htmlSummary));
                $paymentsTable = new HasManyComplexTableField($this, "Payments", "Payment", null, null, "\"OrderID\" = " . $this->ID . "", "\"Created\" ASC", null);
                $paymentsTable->setPageSize(20);
                $paymentsTable->addSummary(_t("Order.TOTAL", "Total"), array("Total" => array("sum", "Currency->Nice")));
                if ($this->IsPaid()) {
                    $paymentsTable->setPermissions(array('export', 'show'));
                } else {
                    $paymentsTable->setPermissions(array('edit', 'delete', 'export', 'show'));
                }
                $paymentsTable->setShowPagination(false);
                $paymentsTable->setRelationAutoSetting(true);
                $fields->addFieldToTab('Root.Payments', $paymentsTable);
                $fields->addFieldToTab("Root.Payments", new ReadOnlyField("TotalPaid", _t("Order.TOTALPAID", "Total Paid"), $this->getTotalPaid()));
                $fields->addFieldToTab("Root.Payments", new ReadOnlyField("TotalOutstanding", _t("Order.TOTALOUTSTANDING", "Total Outstanding"), $this->getTotalOutstanding()));
                if ($this->canPay()) {
                    $link = EcommercePaymentController::make_payment_link($this->ID);
                    $js = "window.open(this.href, 'payment', 'toolbar=0,scrollbars=1,location=1,statusbar=1,menubar=0,resizable=1,width=800,height=600'); return false;";
                    $header = _t("Order.MAKEPAYMENT", "make payment");
                    $label = _t("Order.MAKEADDITIONALPAYMENTNOW", "make additional payment now");
                    $linkHTML = '<a href="' . $link . '" onclick="' . $js . '">' . $label . '</a>';
                    $fields->addFieldToTab("Root.Payments", new HeaderField("MakeAdditionalPaymentHeader", $header, 3));
                    $fields->addFieldToTab("Root.Payments", new LiteralField("MakeAdditionalPayment", $linkHTML));
                }
                //member
                if ($member = $this->Member()) {
                    $fields->addFieldToTab('Root.Customer', new LiteralField("MemberDetails", $member->getEcommerceFieldsForCMSAsString()));
                }
                $cancelledField = $fields->dataFieldByName("CancelledByID");
                $fields->removeByName("CancelledByID");
                $fields->addFieldToTab("Root.Cancellation", $cancelledField);
                $oldOrderStatusLogs = new ComplexTableField($this, $name = "OldOrderStatusLogs", $sourceClass = "OrderStatusLog", $fieldList = null, $detailFormFields = null, $sourceFilter = "\"OrderID\" = " . $this->ID, $sourceSort = "", $sourceJoin = "");
                $oldOrderStatusLogs->setPermissions(array("show"));
                $fields->addFieldToTab('Root.Log', $oldOrderStatusLogs);
                $submissionLog = $this->SubmissionLog();
                if ($submissionLog) {
                    $fields->addFieldToTab('Root.Log', new ReadonlyField('SequentialOrderNumber', _t("Order.SEQUENTIALORDERNUMBER", "Sequential order number for submitted orders (e.g. 1,2,3,4,5...)"), $submissionLog->SequentialOrderNumber));
                }
            } else {
                $msg = sprintf(_t("Order.NOSUBMITTEDYET", 'No details are shown here as this order has not been submitted yet.
						You can %1$s to submit it... NOTE: For this, you will be logged in as the customer and logged out as (shop)admin .'), '<a href="' . $this->RetrieveLink() . '" target="_blank">load this order</a>');
                $fields->addFieldToTab('Root.Main', new LiteralField('MainDetails', '<p>' . $msg . '</p>'));
                $orderItemsTable = new HasManyComplexTableField($this, "Attributes", "OrderItem", null, null, "\"OrderID\" = " . $this->ID . "", "\"Created\" ASC", null);
                $orderItemsTable->setPermissions(array('edit', 'delete', 'export', 'add', 'inlineadd', "show"));
                $orderItemsTable->setShowPagination(false);
                $orderItemsTable->setRelationAutoSetting(true);
                $orderItemsTable->addSummary(_t("Order.TOTAL", "Total"), array("Total" => array("sum", "Currency->Nice")));
                $fields->addFieldToTab('Root.Items', $orderItemsTable);
                $modifierTable = new ComplexTableField($this, "OrderModifiers", "OrderModifier", null, null, "\"OrderID\" = " . $this->ID . "", "\"Created\" ASC", null);
                $modifierTable->setPermissions(array('edit', 'delete', 'export', 'show'));
                $modifierTable->setPageSize(100);
                $fields->addFieldToTab('Root.Extras', $modifierTable);
                //MEMBER STUFF
                $specialOptionsArray = array();
                if ($this->MemberID) {
                    $specialOptionsArray[0] = _t("Order.SELECTCUSTOMER", "-- - Remover Customer -- -");
                    $specialOptionsArray[$this->MemberID] = _t("Order.LEAVEWITHCURRENTCUSTOMER", "- Leave with current customer: ") . $this->Member()->getTitle();
                } elseif ($currentMember = Member::currentUser()) {
                    $specialOptionsArray[0] = _t("Order.SELECTCUSTOMER", "-- - Select Customers -- -");
                    $currentMemberID = $currentMember->ID;
                    $specialOptionsArray[$currentMemberID] = _t("Order.ASSIGNTHISORDERTOME", "- Assign this order to me: ") . $currentMember->getTitle();
                }
                //MEMBER FIELD!!!!!!!
                $memberArray = $specialOptionsArray + EcommerceRole::list_of_customers();
                $fields->addFieldToTab("Root.Main", new DropdownField("MemberID", _t("Order.SELECTCUSTOMER", "Select Cutomer"), $memberArray), "CustomerOrderNote");
                $memberArray = null;
            }
            $fields->addFieldToTab('Root.Addresses', new HeaderField("BillingAddressHeader", _t("Order.BILLINGADDRESS", "Billing Address")));
            $billingAddressObject = $this->CreateOrReturnExistingAddress("BillingAddress");
            $billingAddressField = new HasOneComplexTableField($this, "BillingAddress", "BillingAddress", null, null, "\"BillingAddress\".\"ID\" = " . $this->BillingAddressID, "\"Created\" ASC", null);
            if (!$this->BillingAddressID) {
                $billingAddressField->setPermissions(array('edit', 'add', 'inlineadd', 'show'));
            } elseif ($this->canEdit()) {
                $billingAddressField->setPermissions(array('edit', 'show'));
            } else {
                $billingAddressField->setPermissions(array('export', 'show'));
            }
            //DO NOT ADD!
            //$billingAddressField->setRelationAutoSetting(true);
            //$billingAddress->setShowPagination(false);
            $fields->addFieldToTab('Root.Addresses', $billingAddressField);
            if (EcommerceConfig::get("OrderAddress", "use_separate_shipping_address")) {
                $fields->addFieldToTab('Root.Addresses', new HeaderField("ShippingAddressHeader", _t("Order.SHIPPINGADDRESS", "Shipping Address")));
                $fields->addFieldToTab('Root.Addresses', new CheckboxField("UseShippingAddress", _t("Order.USESEPERATEADDRESS", "Use seperate shipping address?")));
                if ($this->UseShippingAddress) {
                    $shippinggAddressObject = $this->CreateOrReturnExistingAddress("ShippingAddress");
                    $shippingAddressField = new HasOneComplexTableField($this, "ShippingAddress", "ShippingAddress", null, null, "\"ShippingAddress\".\"ID\" = " . $this->ShippingAddressID, "\"Created\" ASC", null);
                    if (!$this->ShippingAddressID) {
                        $shippingAddressField->setPermissions(array('edit', 'add', 'inlineadd', 'show'));
                    } elseif ($this->canEdit()) {
                        $shippingAddressField->setPermissions(array('edit', 'show'));
                    } else {
                        $shippingAddressField->setPermissions(array('export', 'show'));
                    }
                    //DO NOT ADD
                    //$shippingAddress->setRelationAutoSetting(true);
                    $fields->addFieldToTab('Root.Addresses', $shippingAddressField);
                }
            }
            $this->MyStep()->addOrderStepFields($fields, $this);
            $fields->addFieldToTab("Root.Next", new LiteralField("StatusIDExplanation", _t("Order.STATUSIDEXPLANATION", "You can not manually update the status of an order.")));
            $fields->addFieldToTab("Root.Currency", new NumericField("ExchangeRate ", _t("Order.EXCHANGERATE", "Exchange Rate")));
            $fields->addFieldToTab("Root.Currency", new DropdownField("CurrencyUsedID ", _t("Order.CurrencyUsed", "Currency Used"), DataObject::get("EcommerceCurrency"), EcommerceCurrency::default_currency_id()));
        } else {
            $fields->removeByName("Main");
            $firstStep = DataObject::get_one("OrderStep");
            $msg = _t("Order.VERYFIRSTSTEP", "The first step in creating an order is to save (<i>add</i>) it.");
            $fields->addFieldToTab("Root.Next", new LiteralField("VeryFirstStep", "<p>" . $msg . "</p>"));
            if ($firstStep) {
                $fields->addFieldToTab("Root.Next", new HiddenField("StatusID", $firstStep->ID, $firstStep->ID));
            }
        }
        $this->extend('updateCMSFields', $fields);
        return $fields;
    }
 /**
  * @return FieldSet
  */
 public function getWorkflowCMSFields()
 {
     $fields = new FieldSet();
     $diffLinkTitle = _t('SiteTreeCMSWorkflow.DIFFERENCESLINK', 'Show differences to live');
     // list all closed requests
     $fields->push(new HeaderField('WorkflowClosedRequestsHeader', _t('SiteTreeCMSWorkflow.CLOSEDREQUESTSHEADER', 'Closed Requests')));
     $closedRequests = $this->ClosedWorkflowRequests();
     // $_REQUEST['showqueries']=1;
     $closedRequestsTF = new ComplexTableField($this, 'ClosedWorkflowRequests', 'WorkflowRequest', array('Created' => singleton('WorkflowRequest')->fieldLabel('Created'), 'StatusDescription' => singleton('WorkflowRequest')->fieldLabel('Status'), 'Author.Title' => singleton('WorkflowRequest')->fieldLabel('Author'), 'DiffLinkToLastPublished' => _t('SiteTreeCMSWorkflow.DIFFERENCESCOLUMN', 'Differences')));
     $closedRequestsTF->setPermissions(array('show'));
     $closedRequestsTF->setFieldFormatting(array("DiffLinkToLastPublished" => '<a href=\\"$value\\" target=\\"_blank\\" class=\\"externallink\\">' . $diffLinkTitle . '</a>'));
     $closedRequestsTF->setFieldCasting(array('Created' => 'SS_Datetime->Full'));
     $closedRequestsTF->setCustomSourceItems($closedRequests);
     $fields->push($closedRequestsTF);
     return $fields;
 }
 function updateCMSFields(&$fields)
 {
     if ($this->owner->MasterPageID) {
         $fields->insertFirst(new HeaderField('This page\'s content is copied from a master page: ' . $this->owner->MasterPage()->Title, 2));
     }
     // replace readonly link prefix
     $subsite = $this->owner->Subsite();
     if ($subsite && $subsite->ID) {
         $baseUrl = 'http://' . $subsite->domain() . '/';
         $fields->removeByName('BaseUrlLabel');
         $fields->addFieldToTab('Root.Content.Metadata', new LabelField('BaseUrlLabel', $baseUrl), 'URLSegment');
     }
     $relatedCount = 0;
     $reverse = $this->ReverseRelated();
     if ($reverse) {
         $relatedCount += $reverse->Count();
     }
     $normalRelated = $this->NormalRelated();
     if ($normalRelated) {
         $relatedCount += $normalRelated->Count();
     }
     $tabName = $relatedCount ? 'Related (' . $relatedCount . ')' : 'Related';
     $tab = $fields->findOrMakeTab('Root.Related', $tabName);
     // Related pages
     $tab->push(new LiteralField('RelatedNote', '<p>You can list pages here that are related to this page.<br />When this page is updated, you will get a reminder to check whether these related pages need to be updated as well.</p>'));
     $tab->push($related = new ComplexTableField($this, 'RelatedPages', 'RelatedPageLink', array('RelatedPageAdminLink' => 'Page', 'AbsoluteLink' => 'URL')));
     // The 'show' link doesn't provide any useful info
     $related->setPermissions(array('add', 'edit', 'delete'));
     if ($reverse) {
         $text = '<p>In addition, this page is marked as related by the following pages: </p><p>';
         foreach ($reverse as $rpage) {
             $text .= $rpage->RelatedPageAdminLink(true) . " - " . $rpage->AbsoluteLink(true) . "<br />\n";
         }
         $text .= '</p>';
         $tab->push(new LiteralField('ReverseRelated', $text));
     }
     $virtualPagesTable = new SubsiteAgnosticTableListField('VirtualPageTracking', 'SiteTree', array('Title' => 'Title', 'AbsoluteLink' => 'URL', 'Subsite.Title' => 'Subsite'), '"CopyContentFromID" = ' . $this->owner->ID, '');
     $virtualPagesTable->setFieldFormatting(array('Title' => '<a href=\\"admin/show/$ID\\">$Title</a>'));
     $virtualPagesTable->setPermissions(array('show', 'export'));
     if ($tab = $fields->fieldByName('Root.VirtualPages')) {
         $tab->removeByName('VirtualPageTracking');
         $tab->push($virtualPagesTable);
     } else {
         if ($virtualPagesTable->TotalCount()) {
             $virtualPagesNote = new LiteralField('BackLinksNote', '<p>' . _t('SiteTree.VIRTUALPAGESLINKING', 'The following virtual pages pull from this page:') . '</p>');
             $fields->fieldByName('Root')->push($tabVirtualPages = new Tab('VirtualPages', $virtualPagesNote, $virtualPagesTable));
         }
     }
 }
 /**
  * Standard SS variable.
  */
 function getCMSFields()
 {
     //prevent calling updateCMSFields extend function too early
     $siteTreeFieldExtensions = $this->get_static('SiteTree', 'runCMSFieldsExtensions');
     $this->disableCMSFieldsExtensions();
     $fields = parent::getCMSFields();
     if ($siteTreeFieldExtensions) {
         $this->enableCMSFieldsExtensions();
     }
     $fields->replaceField('Root.Content.Main', new HTMLEditorField('Content', _t('Product.DESCRIPTION', 'Product Description'), 3));
     //NOTE: IMAGE FIELD WAS GIVING ERRORS IN ModelAdmin
     //$fields->addFieldToTab('Root.Content.Images', new TreeDropdownField('ImageID', _t('Product.IMAGE', 'Product Image'), "Image"));
     $fields->addFieldToTab('Root.Content.Images', new ImageField('Image', _t('Product.IMAGE', 'Product Image')));
     $fields->addFieldToTab('Root.Content.Details', new ReadonlyField('FullName', _t('Product.FULLNAME', 'Full Name')));
     $fields->addFieldToTab('Root.Content.Details', new CheckboxField('AllowPurchase', _t('Product.ALLOWPURCHASE', 'Allow product to be purchased'), 1));
     $fields->addFieldToTab('Root.Content.Details', new CheckboxField('FeaturedProduct', _t('Product.FEATURED', 'Featured Product')));
     $fields->addFieldToTab('Root.Content.Details', new NumericField('Price', _t('Product.PRICE', 'Price'), '', 12));
     $fields->addFieldToTab('Root.Content.Details', new TextField('InternalItemID', _t('Product.CODE', 'Product Code'), '', 30));
     if ($this->EcomConfig()->ProductsHaveWeight) {
         $fields->addFieldToTab('Root.Content.Details', new NumericField('Weight', _t('Product.WEIGHT', 'Weight')));
     }
     if ($this->EcomConfig()->ProductsHaveModelNames) {
         $fields->addFieldToTab('Root.Content.Details', new TextField('Model', _t('Product.MODEL', 'Model')));
     }
     if ($this->EcomConfig()->ProductsHaveQuantifiers) {
         $fields->addFieldToTab('Root.Content.Details', new TextField('Quantifier', _t('Product.QUANTIFIER', 'Quantifier (e.g. per kilo, per month, per dozen, each)')));
     }
     if ($this->EcomConfig()->ProductsAlsoInOtherGroups) {
         $fields->addFieldsToTab('Root.Content.AlsoShowHere', array(new HeaderField('ProductGroupsHeader', _t('Product.ALSOSHOWSIN', 'Also shows in ...')), $this->getProductGroupsTable()));
     }
     $orderTableField = new ComplexTableField($this, 'OrderItems', 'OrderItem', array('Order.ID' => '#', 'Order.Created' => 'When', 'Quantity' => 'Quantity'), new FieldSet(), "\"BuyableID\" = '" . $this->ID . "' AND \"BuyableClassName\" = '" . $this->ClassName . "'", "\"Created\" DESC");
     $orderTableField->setPermissions(array("show"));
     $orderTableField->setShowPagination(true);
     $orderTableField->setRelationAutoSetting(true);
     /*
     $orderTableField->addSummary(
     	_t("Product.TOTALCOUNT", "Total Count"),
     	array("TotalCount" => array("sum","Quantity->Nice"))
     );
     */
     $fields->addFieldToTab('Root.Content.Orders', $orderTableField);
     if ($siteTreeFieldExtensions) {
         $this->extend('updateCMSFields', $fields);
     }
     return $fields;
 }
 /**
  * Get products table
  * @return ComplexTableField
  */
 public function getCMSProductsTable()
 {
     $table = new ComplexTableField($this, 'OrderItems', 'RepeatOrder_OrderItem', array('Product.Title' => 'Title', 'Quantity' => 'Qty'));
     $table->setShowPagination(false);
     $table->setAddTitle('Product');
     $table->setPermissions(array('add', 'edit', 'delete'));
     return $table;
 }