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')); } }
/** * @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; }