/** * Loads the enabled payment cards * * @since 1.1 * * @return void **/ private function _loadcards () { if (empty($this->settings['cards'])) $this->settings['cards'] = $this->cards; if ($this->cards) { $cards = array(); $pcs = Lookup::paycards(); foreach ($this->cards as $card) { $card = strtolower($card); if (isset($pcs[$card])) $cards[] = $pcs[$card]; } $this->cards = $cards; } }
/** * Ecart 1.1.0 upgrades * * @since 1.1 * * @return void **/ function upgrade_110 () { $db =& DB::get(); $meta_table = DatabaseObject::tablename('meta'); $db->query("DELETE FROM $meta_table"); // Clear out previous meta // Update product status from the 'published' column $product_table = DatabaseObject::tablename('product'); $db->query("UPDATE $product_table SET status=CAST(published AS unsigned)"); // Set product publish date based on the 'created' date column $db->query("UPDATE $product_table SET publish=created WHERE status='publish'"); // Update Catalog $catalog_table = DatabaseObject::tablename('catalog'); $db->query("UPDATE $catalog_table set parent=IF(category!=0,category,tag),type=IF(category!=0,'category','tag')"); // Update specs $meta_table = DatabaseObject::tablename('meta'); $spec_table = DatabaseObject::tablename('spec'); $db->query("INSERT INTO $meta_table (parent,context,type,name,value,numeral,sortorder,created,modified) SELECT product,'product','spec',name,content,numeral,sortorder,now(),now() FROM $spec_table"); // Update purchase table $purchase_table = DatabaseObject::tablename('purchase'); $db->query("UPDATE $purchase_table SET txnid=transactionid,txnstatus=transtatus"); // Update image assets $meta_table = DatabaseObject::tablename('meta'); $asset_table = DatabaseObject::tablename('asset'); $db->query("INSERT INTO $meta_table (parent,context,type,name,value,numeral,sortorder,created,modified) SELECT parent,context,'image','processing',CONCAT_WS('::',id,name,value,size,properties,LENGTH(data)),'0',sortorder,created,modified FROM $asset_table WHERE datatype='image'"); $records = $db->query("SELECT id,value FROM $meta_table WHERE type='image' AND name='processing'",AS_ARRAY); foreach ($records as $r) { list($src,$name,$value,$size,$properties,$datasize) = explode("::",$r->value); $p = unserialize($properties); $value = new StdClass(); if (isset($p['width'])) $value->width = $p['width']; if (isset($p['height'])) $value->height = $p['height']; if (isset($p['alt'])) $value->alt = $p['alt']; if (isset($p['title'])) $value->title = $p['title']; $value->filename = $name; if (isset($p['mimetype'])) $value->mime = $p['mimetype']; $value->size = $size; error_log(serialize($value)); if ($datasize > 0) { $value->storage = "DBStorage"; $value->uri = $src; } else { $value->storage = "FSStorage"; $value->uri = $name; } $value = mysql_real_escape_string(serialize($value)); $db->query("UPDATE $meta_table set name='original',value='$value' WHERE id=$r->id"); } // Update product downloads $meta_table = DatabaseObject::tablename('meta'); $asset_table = DatabaseObject::tablename('asset'); $query = "INSERT INTO $meta_table (parent,context,type,name,value,numeral,sortorder,created,modified) SELECT parent,context,'download','processing',CONCAT_WS('::',id,name,value,size,properties,LENGTH(data)),'0',sortorder,created,modified FROM $asset_table WHERE datatype='download' AND parent != 0"; $db->query($query); $records = $db->query("SELECT id,value FROM $meta_table WHERE type='download' AND name='processing'",AS_ARRAY); foreach ($records as $r) { list($src,$name,$value,$size,$properties,$datasize) = explode("::",$r->value); $p = unserialize($properties); $value = new StdClass(); $value->filename = $name; $value->mime = $p['mimetype']; $value->size = $size; if ($datasize > 0) { $value->storage = "DBStorage"; $value->uri = $src; } else { $value->storage = "FSStorage"; $value->uri = $name; } $value = mysql_real_escape_string(serialize($value)); $db->query("UPDATE $meta_table set name='$name',value='$value' WHERE id=$r->id"); } // Update promotions $promo_table = DatabaseObject::tablename('promo'); $records = $db->query("UPDATE $promo_table SET target='Cart' WHERE scope='Order'",AS_ARRAY); $FSStorage = array('path' => array()); // Migrate Asset storage settings $image_storage = $this->Settings->get('image_storage_pref'); if ($image_storage == "fs") { $image_storage = "FSStorage"; $FSStorage['path']['image'] = $this->Settings->get('image_path'); } else $image_storage = "DBStorage"; $this->Settings->save('image_storage',$image_storage); $product_storage = $this->Settings->get('product_storage_pref'); if ($product_storage == "fs") { $product_storage = "FSStorage"; $FSStorage['path']['download'] = $this->Settings->get('products_path'); } else $product_storage = "DBStorage"; $this->Settings->save('product_storage',$product_storage); if (!empty($FSStorage['path'])) $this->Settings->save('FSStorage',$FSStorage); // Preserve payment settings // Determine active gateways $active_gateways = array($this->Settings->get('payment_gateway')); $xco_gateways = (array)$this->Settings->get('xco_gateways'); if (!empty($xco_gateways)) $active_gateways = array_merge($active_gateways,$xco_gateways); // Load 1.0 payment gateway settings for active gateways $gateways = array(); foreach ($active_gateways as $reference) { list($dir,$filename) = explode('/',$reference); $gateways[] = preg_replace('/[^\w+]/','',substr($filename,0,strrpos($filename,'.'))); } $where = "name like '%".join("%' OR name like '%",$gateways)."%'"; $query = "SELECT name,value FROM wp_ecart_setting WHERE $where"; $result = $db->query($query,AS_ARRAY); require_once(ECART_MODEL_PATH.'/Lookup.php'); $paycards = Lookup::paycards(); // Convert settings to 1.1-compatible settings $active_gateways = array(); foreach ($result as $_) { $active_gateways[] = $_->name; // Add gateway to the active gateways list $setting = unserialize($_->value); // Parse the settings // Get rid of legacy settings unset($setting['enabled'],$setting['path'],$setting['billing-required']); // Convert accepted payment cards $accepted = array(); if (isset($setting['cards']) && is_array($setting['cards'])) { foreach ($setting['cards'] as $cardname) { // Normalize card names $cardname = str_replace( array( "Discover", "Diner’s Club", "Diners" ), array( "Discover Card", "Diner's Club", "Diner's Club" ), $cardname); foreach ($paycards as $card) if ($cardname == $card->name) $accepted[] = $card->symbol; } $setting['cards'] = $accepted; } $this->Settings->save($_->name,$setting); // Save the gateway settings } // Save the active gateways to populate the payment settings page $this->Settings->save('active_gateways',join(',',$active_gateways)); // Preserve update key $oldkey = $this->Settings->get('updatekey'); if (!empty($oldkey)) { $newkey = array( ($oldkey['status'] == "activated"?1:0), $oldkey['key'], $oldkey['type'] ); $this->Settings->save('updatekey',$newkey); } $this->roles(); // Setup Roles and Capabilities }
/** * Gets a specified payment card * * @author Jonathan Davis * @since 1.1 * * @return object PayCard object **/ public static function paycard($card) { $cards = Lookup::paycards(); if (isset($cards[strtolower($card)])) { return $cards[strtolower($card)]; } return false; }
/** * Shopp 1.1.0 upgrades * * @author Jonathan Davis * @since 1.1 * * @return void **/ public function upgrade_110() { // 1.1 schema changes $db_version = ShoppSettings::dbversion(); if ($db_version < 1100) { return; } // Skip db_version is not less than 1100 $this->upschema('schema-110.sql'); $meta_table = ShoppDatabaseObject::tablename('meta'); $setting_table = ShoppDatabaseObject::tablename('setting'); $product_table = ShoppDatabaseObject::tablename('product'); // Update product status from the 'published' column sDB::query("UPDATE {$product_table} SET status=CAST(published AS unsigned)"); // Set product publish date based on the 'created' date column sDB::query("UPDATE {$product_table} SET publish=created WHERE status='publish'"); // Update Catalog $catalog_table = ShoppDatabaseObject::tablename('catalog'); sDB::query("UPDATE {$catalog_table} set parent=IF(category!=0, category, tag), type=IF(category!=0, 'category', 'tag')"); // Update specs $meta_table = ShoppDatabaseObject::tablename('meta'); $spec_table = ShoppDatabaseObject::tablename('spec'); $now = current_time('mysql'); sDB::query("INSERT INTO {$meta_table} (parent, context, type, name, value, numeral, sortorder, created, modified)\n\t\t\t\t\tSELECT product, 'product', 'spec', name, content, numeral, sortorder, '{$now}', '{$now}' FROM {$spec_table}"); // Update purchase table $purchase_table = ShoppDatabaseObject::tablename('purchase'); sDB::query("UPDATE {$purchase_table} SET txnid=transactionid, txnstatus=transtatus"); // Update image assets $meta_table = ShoppDatabaseObject::tablename('meta'); $asset_table = ShoppDatabaseObject::tablename('asset'); sDB::query("INSERT INTO {$meta_table} (parent, context, type, name, value, numeral, sortorder, created, modified)\n\t\t\t\t\t\t\tSELECT parent, context, 'image', 'processing', CONCAT_WS('::', id, name, value, size, properties, LENGTH(data)), '0', sortorder, created, modified FROM {$asset_table} WHERE datatype='image'"); $records = sDB::query("SELECT id, value FROM {$meta_table} WHERE type='image' AND name='processing'", 'array'); foreach ($records as $r) { list($src, $name, $value, $size, $properties, $datasize) = explode("::", $r->value); $p = unserialize($properties); $value = new StdClass(); if (isset($p['width'])) { $value->width = $p['width']; } if (isset($p['height'])) { $value->height = $p['height']; } if (isset($p['alt'])) { $value->alt = $p['alt']; } if (isset($p['title'])) { $value->title = $p['title']; } $value->filename = $name; if (isset($p['mimetype'])) { $value->mime = $p['mimetype']; } $value->size = $size; if ($datasize > 0) { $value->storage = "DBStorage"; $value->uri = $src; } else { $value->storage = "FSStorage"; $value->uri = $name; } $value = mysqli_real_escape_string(sDB::get()->dbh, serialize($value)); sDB::query("UPDATE {$meta_table} set name='original', value='{$value}' WHERE id={$r->id}"); } // Update product downloads $meta_table = ShoppDatabaseObject::tablename('meta'); $asset_table = ShoppDatabaseObject::tablename('asset'); $query = "INSERT INTO {$meta_table} (parent, context, type, name, value, numeral, sortorder, created, modified)\n\t\t\t\t\tSELECT parent, context, 'download', 'processing', CONCAT_WS('::', id, name, value, size, properties, LENGTH(data)), '0', sortorder, created, modified FROM {$asset_table} WHERE datatype='download' AND parent != 0"; sDB::query($query); $records = sDB::query("SELECT id, value FROM {$meta_table} WHERE type='download' AND name='processing'", 'array'); foreach ($records as $r) { list($src, $name, $value, $size, $properties, $datasize) = explode("::", $r->value); $p = unserialize($properties); $value = new StdClass(); $value->filename = $name; $value->mime = $p['mimetype']; $value->size = $size; if ($datasize > 0) { $value->storage = "DBStorage"; $value->uri = $src; } else { $value->storage = "FSStorage"; $value->uri = $name; } $value = mysqli_real_escape_string(sDB::get()->dbh, serialize($value)); sDB::query("UPDATE {$meta_table} set name='{$name}', value='{$value}' WHERE id={$r->id}"); } // Update promotions $promo_table = ShoppDatabaseObject::tablename('promo'); $records = sDB::query("UPDATE {$promo_table} SET target='Cart' WHERE scope='Order'", 'array'); $FSStorage = array('path' => array()); // Migrate Asset storage settings $image_storage = shopp_setting('image_storage_pref'); if ($image_storage == "fs") { $image_storage = "FSStorage"; $FSStorage['path']['image'] = shopp_setting('image_path'); } else { $image_storage = "DBStorage"; } shopp_set_setting('image_storage', $image_storage); $product_storage = shopp_setting('product_storage_pref'); if ($product_storage == "fs") { $product_storage = "FSStorage"; $FSStorage['path']['download'] = shopp_setting('products_path'); } else { $product_storage = "DBStorage"; } shopp_set_setting('product_storage', $product_storage); if (!empty($FSStorage['path'])) { shopp_set_setting('FSStorage', $FSStorage); } // Preserve payment settings // Determine active gateways $active_gateways = array(shopp_setting('payment_gateway')); $xco_gateways = (array) shopp_setting('xco_gateways'); if (!empty($xco_gateways)) { $active_gateways = array_merge($active_gateways, $xco_gateways); } // Load 1.0 payment gateway settings for active gateways $gateways = array(); foreach ($active_gateways as $reference) { list($dir, $filename) = explode('/', $reference); $gateways[] = preg_replace('/[^\\w+]/', '', substr($filename, 0, strrpos($filename, '.'))); } $where = "name like '%" . join("%' OR name like '%", $gateways) . "%'"; $query = "SELECT name, value FROM {$setting_table} WHERE {$where}"; $result = sDB::query($query, 'array'); $paycards = Lookup::paycards(); // Convert settings to 1.1-compatible settings $active_gateways = array(); foreach ($result as $_) { $active_gateways[] = $_->name; // Add gateway to the active gateways list $setting = unserialize($_->value); // Parse the settings // Get rid of legacy settings unset($setting['enabled'], $setting['path'], $setting['billing-required']); // Convert accepted payment cards $accepted = array(); if (isset($setting['cards']) && is_array($setting['cards'])) { foreach ($setting['cards'] as $cardname) { // Normalize card names $cardname = str_replace(array("Discover", "Diner’s Club", "Diners"), array("Discover Card", "Diner's Club", "Diner's Club"), $cardname); foreach ($paycards as $card) { if ($cardname == $card->name) { $accepted[] = $card->symbol; } } } $setting['cards'] = $accepted; } shopp_set_setting($_->name, $setting); // Save the gateway settings } // Save the active gateways to populate the payment settings page shopp_set_setting('active_gateways', join(', ', $active_gateways)); // Preserve update key $oldkey = shopp_setting('updatekey'); if (!empty($oldkey)) { $newkey = array($oldkey['status'] == "activated" ? 1 : 0, $oldkey['key'], $oldkey['type']); shopp_set_setting('updatekey', $newkey); } $this->roles(); // Setup Roles and Capabilities }