/**
  * standard SS method
  */
 function requireDefaultRecords()
 {
     parent::requireDefaultRecords();
     $steps = EcommerceConfig::get("CheckoutPage_Controller", "checkout_steps");
     if (is_array($steps) && count($steps)) {
         foreach ($steps as $id => $code) {
             $newID = $id + 1;
             if ($obj = DataObject::get_by_id("CheckoutPage_StepDescription", $newID)) {
                 //do nothing
             } else {
                 $obj = new CheckoutPage_StepDescription();
                 $obj->ID = $newID;
                 $obj->Heading = $this->getDefaultTitle($code);
                 $obj->write();
             }
         }
     }
 }
 function checkoutAndModifierDetails()
 {
     $checkoutPage = CheckoutPage::get()->First();
     if (!$checkoutPage) {
         $task = new EcommerceTaskDefaultRecords();
         $task->run(null);
         $checkoutPage = CheckoutPage::get()->First();
         if (!$checkoutPage) {
             user_error("There is no checkout page available and it seems impossible to create one.");
         }
     }
     $steps = CheckoutPage_StepDescription::get();
     if ($steps->count()) {
         foreach ($steps as $key => $step) {
             $stepNumber = $key + 1;
             $fields = Config::inst()->get($step->ClassName, "db");
             $defaultsArray = $step->stat("defaults", true);
             $configArray = array();
             foreach ($fields as $fieldKey => $fieldType) {
                 if ($fields) {
                     $configArray[$fieldKey] = $step->{$fieldKey};
                     if (!isset($defaultsArray[$fieldKey])) {
                         $defaultsArray[$fieldKey] = "[default not set]";
                     }
                 }
             }
             $this->definitions["CheckoutPage_Controller"]["STEP_{$stepNumber}" . "_" . $step->getCode()] = $step->Description . "<br />see: <a href=\"/admin/pages/edit/show/" . $checkoutPage->ID . "/\">checkout page</a>.";
             $this->configs["CheckoutPage_Controller"]["STEP_{$stepNumber}" . "_" . $step->getCode()] = $configArray;
             $this->defaults["CheckoutPage_Controller"]["STEP_{$stepNumber}" . "_" . $step->getCode()] = $defaultsArray;
             $this->databaseValues["CheckoutPage_Controller"]["STEP_{$stepNumber}" . "_" . $step->getCode()] = true;
         }
     }
     $steps = OrderModifier_Descriptor::get();
     if ($steps->count()) {
         foreach ($steps as $step) {
             $fields = Config::inst()->get($step->ClassName, "db");
             $defaultsArray = $step->stat("defaults", true);
             $configArray = array();
             foreach ($fields as $fieldKey => $fieldType) {
                 if ($fields) {
                     $configArray[$fieldKey] = $step->{$fieldKey};
                     if (!isset($defaultsArray[$fieldKey])) {
                         $defaultsArray[$fieldKey] = "[default not set]";
                     }
                 }
             }
             $this->definitions["CheckoutPage_Controller"]["OrderModifier_Descriptor_" . $step->ModifierClassName] = $step->Description . "<br />see: <a href=\"/admin/pages/edit/show/" . $checkoutPage->ID . "/\">checkout page</a>.";
             $this->configs["CheckoutPage_Controller"]["OrderModifier_Descriptor_" . $step->ModifierClassName] = $configArray;
             $this->defaults["CheckoutPage_Controller"]["OrderModifier_Descriptor_" . $step->ModifierClassName] = $defaultsArray;
             $this->databaseValues["CheckoutPage_Controller"]["OrderModifier_Descriptor_" . $step->ModifierClassName] = true;
         }
     }
 }
 /**
  * returns a dataobject set of the steps.
  * Or just one step if that is more relevant.
  * @param Int $number - if set, it returns that one step.
  * @return Null | DataObject (CheckoutPage_Description) | ArrayList (CheckoutPage_Description)
  */
 function CheckoutSteps($number = 0)
 {
     $where = '';
     $dos = CheckoutPage_StepDescription::get()->Sort("ID", "ASC");
     if ($number) {
         $dos = $dos->Filter(array("ID" => $number));
     }
     if ($number) {
         if ($dos->count()) {
             return $dos->First();
         }
     }
     $returnData = new ArrayList(array());
     $completed = 1;
     $completedClass = "completed";
     foreach ($dos as $do) {
         if ($this->currentStep && $do->Code() == $this->currentStep) {
             $do->LinkingMode = "current";
             $completed = 0;
             $completedClass = "notCompleted";
         } else {
             if ($completed) {
                 $do->Link = $this->Link("checkoutstep") . "/" . $do->Code . "/";
             }
             $do->LinkingMode = "link {$completedClass}";
         }
         $do->Completed = $completed;
         $returnData->push($do);
     }
     if (EcommerceConfig::get("OrderConfirmationPage_Controller", "include_as_checkout_step")) {
         $orderConfirmationPage = OrderConfirmationPage::get()->First();
         if ($orderConfirmationPage) {
             $do = $orderConfirmationPage->CurrentCheckoutStep(false);
             if ($do) {
                 $returnData->push($do);
             }
         }
     }
     return $returnData;
 }
 /**
  * standard SS method
  */
 function requireDefaultRecords()
 {
     parent::requireDefaultRecords();
     $steps = EcommerceConfig::get("CheckoutPage_Controller", "checkout_steps");
     if (is_array($steps) && count($steps)) {
         $idArray = array();
         foreach ($steps as $id => $code) {
             $newID = $id + 1;
             $idArray[$newID] = $newID;
             if ($obj = CheckoutPage_StepDescription::get()->byID($newID)) {
                 //do nothing
             } else {
                 $obj = CheckoutPage_StepDescription::create();
                 $obj->ID = $newID;
                 $obj->Heading = $this->getDefaultTitle($code);
                 $obj->write();
                 DB::alteration_message("Creating CheckoutPage_StepDescription {$code}", "created");
             }
         }
         $toDeleteObjects = CheckoutPage_StepDescription::get()->exclude(array("ID" => $idArray));
         if ($toDeleteObjects->count()) {
             foreach ($toDeleteObjects as $toDeleteObject) {
                 DB::alteration_message("Deleting CheckoutPage_StepDescription " . $toDeleteObject->ID, "deleted");
                 $toDeleteObject->delete();
             }
         }
     }
 }
 /**
  * Returns a dataobject set of the checkout steps if
  * the OrderConfirmationPage is shown as part of the checkout process
  * We repeat these here so that you can show the user that (s)he has reached the last step
  *
  * @param Int $number - if set, it returns that one step.
  * @return Null | DataObject (CheckoutPage_Description) | ArrayList (CheckoutPage_Description)
  */
 function CheckoutSteps($number = 0)
 {
     $where = '';
     if ($number) {
         $where = "\"CheckoutPage_StepDescription\".\"ID\" = {$number}";
     }
     if (EcommerceConfig::get("OrderConfirmationPage_Controller", "include_as_checkout_step")) {
         if ($this->currentOrder->IsInSession()) {
             $dos = CheckoutPage_StepDescription::get()->where($where)->sort("ID", "ASC");
             if ($number) {
                 if ($dos && $dos->count()) {
                     return $dos->First();
                 }
             }
             $arrayList = new ArrayList(array());
             foreach ($dos as $do) {
                 $do->LinkingMode = "link completed";
                 $do->Completed = 1;
                 $do->Link = "";
                 $arrayList->push($do);
             }
             $do = $this->CurrentCheckoutStep(true);
             if ($do) {
                 $arrayList->push($do);
             }
             return $arrayList;
         }
     }
 }