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); }