public function copydata($Item, $prefix = '', array $ignores = array()) { parent::copydata($Item); if (isset($Item->option->label)) { $this->optionlabel = $Item->option->label; } $this->price = $Item->option->id; // Generate download link for downloadables if ('Download' == $Item->type && !empty($this->download)) { $this->keygen(); $this->download = (int) $this->download->id; // Convert download property to integer ID } $this->addons = 'no'; if (empty($Item->addons) || !is_array($Item->addons)) { return true; } $addons = array(); // Create meta records for any addons foreach ((array) $Item->addons as $i => $Addon) { $Download = false; $Meta = new ShoppMetaObject(array('parent' => $this->id, 'context' => 'purchased', 'type' => 'meta', 'name' => $Addon->label)); $Meta->context = 'purchased'; $Meta->type = 'addon'; $Meta->name = $Addon->label; $Meta->numeral = $Addon->unitprice; // Add a meta record to the purchased line item for an addon download if (!empty($Addon->download)) { $hash = array($this->name, $Addon->label, $this->purchase, $this->product, $this->price, $i, time()); $Addon->dkey = sha1(join('', $hash)); $Download = new ShoppMetaObject(array('parent' => $this->id, 'context' => 'purchased', 'type' => 'download', 'name' => $Addon->dkey)); $Download->context = 'purchased'; $Download->type = 'download'; $Download->name = $Addon->dkey; $Download->value = $Addon->download; } $Meta->value = serialize($Addon); $addons[] = $Meta; if ($Download !== false) { $addons[] = $Download; } } $this->addons = $addons; }