Inheritance: extends WeeklyTask
 function set_clear_days($days = 90)
 {
     self::$cleardays = $days;
 }
 /**
  * Gets or creates the current order.
  * IMPORTANT FUNCTION!
  * @todo - does this need to be public????
  * @return void
  */
 public function currentOrder()
 {
     if (!$this->order) {
         $sessionVariableName = $this->sessionVariableName("OrderID");
         $orderIDFromSession = intval(Session::get($sessionVariableName));
         if ($orderIDFromSession > 0) {
             $this->order = DataObject::get_by_id("Order", $orderIDFromSession);
         }
         //order has already been submitted - immediately remove it because we dont want to change it.
         $member = Member::currentUser();
         if ($this->order) {
             //first reason to set to null: it is already submitted
             if ($this->order->IsSubmitted()) {
                 $this->order = null;
             } elseif (!$this->order->canView()) {
                 $this->order = null;
             } elseif ($member && $member->exists()) {
                 if ($this->order->MemberID != $member->ID) {
                     $updateMember = false;
                     if (!$this->order->MemberID) {
                         $updateMember = true;
                     }
                     if (!$member->IsShopAdmin()) {
                         $updateMember = true;
                     }
                     if ($updateMember) {
                         $this->order->MemberID = $member->ID;
                         $this->order->write();
                     }
                 }
                 //current order has nothing in it AND the member already has an order: use the old one first
                 if ($this->order->StatusID) {
                     $firstStep = DataObject::get_one("OrderStep");
                     //we assume the first step always exists.
                     //TODO: what sort order?
                     $previousOrderFromMember = DataObject::get_one("Order", "\r\n\t\t\t\t\t\t\t\t\"MemberID\" = " . $member->ID . "\r\n\t\t\t\t\t\t\t\tAND (\"StatusID\" = " . $firstStep->ID . " OR \"StatusID\" = 0)\r\n\t\t\t\t\t\t\t\tAND \"Order\".\"ID\" <> " . $this->order->ID);
                     if ($previousOrderFromMember && $previousOrderFromMember->canView()) {
                         if ($previousOrderFromMember->StatusID) {
                             $this->order->delete();
                             $this->order = $previousOrderFromMember;
                         } else {
                             $previousOrderFromMember->delete();
                         }
                     }
                 }
             }
         }
         if (!$this->order) {
             if ($member) {
                 $firstStep = DataObject::get_one("OrderStep");
                 $previousOrderFromMember = DataObject::get_one("Order", "\"MemberID\" = " . $member->ID . " AND (\"StatusID\" = " . $firstStep->ID . " OR \"StatusID\" = 0)");
                 if ($previousOrderFromMember) {
                     if ($previousOrderFromMember->canView()) {
                         $this->order = $previousOrderFromMember;
                     }
                 }
             }
             if (!$this->order) {
                 //here we cleanup old orders, because they should be cleaned at the same rate that they are created...
                 $cleanUpEveryTime = EcommerceConfig::get("ShoppingCart", "cleanup_every_time");
                 if ($cleanUpEveryTime) {
                     $obj = new CartCleanupTask();
                     $obj->runSilently();
                 }
                 //create new order
                 $this->order = new Order();
                 if ($member) {
                     $this->order->MemberID = $member->ID;
                 }
                 $this->order->write();
             }
             Session::set($sessionVariableName, intval($this->order->ID));
         }
         //member just logged in and is not associated with order yet
         //if you are not logged in but the order belongs to a member then clear the cart.
         /***** THIS IS NOT CORRECT, BECAUSE YOU CAN CREATE AN ORDER FOR A USER AND NOT BE LOGGED IN!!! ***
         			elseif($this->order->MemberID && !$member) {
         				$this->clear();
         				return false;
         			}
         			*/
         if ($this->order && $this->order->exists() && $this->order->StatusID) {
             $this->order->calculateOrderAttributes();
         }
     }
     return $this->order;
 }
 /**
  * run in verbose mode
  */
 public static function run_on_demand()
 {
     $obj = new CartCleanupTask();
     $obj->verbose = true;
     $obj->run(null);
 }