Exemplo n.º 1
0
 public function screen()
 {
     if (!current_user_can('shopp_promotions')) {
         wp_die(__('You do not have sufficient permissions to access this page.'));
     }
     $table = ShoppDatabaseObject::tablename(ShoppPromo::$table);
     $defaults = array('page' => false, 'status' => false, 'type' => false, 'paged' => 1, 'per_page' => 20, 's' => '');
     $args = array_merge($defaults, $_GET);
     extract($args, EXTR_SKIP);
     $url = add_query_arg(array_merge($_GET, array('page' => $this->page)), admin_url('admin.php'));
     $f = array('action', 'selected', 's');
     $url = remove_query_arg($f, $url);
     $pagenum = absint($paged);
     $start = $per_page * ($pagenum - 1);
     $where = array();
     if (!empty($s)) {
         $where[] = "name LIKE '%{$s}%'";
     }
     if ($status) {
         $datesql = ShoppPromo::activedates();
         switch (strtolower($status)) {
             case 'active':
                 $where[] = "status='enabled' AND {$datesql}";
                 break;
             case 'inactive':
                 $where[] = "status='enabled' AND NOT {$datesql}";
                 break;
             case 'enabled':
                 $where[] = "status='enabled'";
                 break;
             case 'disabled':
                 $where[] = "status='disabled'";
                 break;
         }
     }
     if ($type) {
         switch (strtolower($type)) {
             case 'catalog':
                 $where[] = "target='Catalog'";
                 break;
             case 'cart':
                 $where[] = "target='Cart'";
                 break;
             case 'cartitem':
                 $where[] = "target='Cart Item'";
                 break;
         }
     }
     $select = sDB::select(array('table' => $table, 'columns' => 'SQL_CALC_FOUND_ROWS *', 'where' => $where, 'orderby' => 'created DESC', 'limit' => "{$start},{$per_page}"));
     $Promotions = sDB::query($select, 'array');
     $count = sDB::found();
     $num_pages = ceil($count / $per_page);
     $ListTable = ShoppUI::table_set_pagination($this->id, $count, $num_pages, $per_page);
     $states = array('active' => __('Active', 'Shopp'), 'inactive' => __('Not Active', 'Shopp'), 'enabled' => __('Enabled', 'Shopp'), 'disabled' => __('Disabled', 'Shopp'));
     $types = array('catalog' => __('Catalog Discounts', 'Shopp'), 'cart' => __('Cart Discounts', 'Shopp'), 'cartitem' => __('Cart Item Discounts', 'Shopp'));
     $num_pages = ceil($count / $per_page);
     $page_links = paginate_links(array('base' => add_query_arg('pagenum', '%#%'), 'format' => '', 'total' => $num_pages, 'current' => $pagenum));
     include $this->ui('discounts.php');
 }
Exemplo n.º 2
0
 public function prepare_items()
 {
     $defaults = array('paged' => 1, 'per_page' => 25, 'action' => false, 'selected' => array());
     $args = array_merge($defaults, $_GET);
     extract($args, EXTR_SKIP);
     $start = $per_page * ($paged - 1);
     $edit = false;
     $ImageSetting = new ShoppImageSetting($edit);
     $table = $ImageSetting->_table;
     $columns = 'SQL_CALC_FOUND_ROWS *';
     $where = array("type='{$ImageSetting->type}'", "context='{$ImageSetting->context}'");
     $limit = "{$start},{$per_page}";
     $options = compact('columns', 'useindex', 'table', 'joins', 'where', 'groupby', 'having', 'limit', 'orderby');
     $query = sDB::select($options);
     $this->items = sDB::query($query, 'array', array($ImageSetting, 'loader'));
     $found = sDB::found();
     $json = array();
     $skip = array('created', 'modified', 'numeral', 'context', 'type', 'sortorder', 'parent');
     foreach ($this->items as &$Item) {
         if (method_exists($Item, 'json')) {
             $json[$Item->id] = $Item->json($skip);
         }
     }
     shopp_custom_script('imageset', 'var images = ' . json_encode($json) . ';');
     $this->set_pagination_args(array('total_items' => $found, 'total_pages' => $found / $per_page, 'per_page' => $per_page));
 }
Exemplo n.º 3
0
 public function screen()
 {
     global $wpdb;
     $defaults = array('page' => false, 'deleting' => false, 'selected' => false, 'update' => false, 'newstatus' => false, 'pagenum' => 1, 'paged' => false, 'per_page' => 20, 'start' => '', 'end' => '', 'status' => false, 's' => '', 'range' => '', 'startdate' => '', 'enddate' => '');
     $args = array_merge($defaults, $_GET);
     extract($args, EXTR_SKIP);
     if ($page == ShoppAdmin::pagename('customers') && !empty($deleting) && !empty($selected) && is_array($selected) && current_user_can('shopp_delete_customers')) {
         foreach ($selected as $deletion) {
             $Customer = new ShoppCustomer($deletion);
             $Billing = new BillingAddress($Customer->id, 'customer');
             $Billing->delete();
             $Shipping = new ShippingAddress($Customer->id, 'customer');
             $Shipping->delete();
             $Customer->delete();
         }
     }
     $updated = false;
     // if (!empty($_POST['save'])) {
     // 	check_admin_referer('shopp-save-customer');
     // 	$wp_integration = ('wordpress' === shopp_setting( 'account_system' ));
     //
     // 	if ($_POST['id'] !== 'new') {
     // 		$Customer = new ShoppCustomer($_POST['id']);
     // 		$Billing = new BillingAddress($Customer->id, 'customer');
     // 		$Shipping = new ShippingAddress($Customer->id, 'customer');
     // 	} else $Customer = new ShoppCustomer();
     //
     // 	if (!empty($Customer->wpuser)) $user = get_user_by('id',$Customer->wpuser);
     // 	$new_customer = empty( $Customer->id );
     //
     // 	$Customer->updates($_POST);
     //
     // 	// Reassign WordPress login
     // 	if ($wp_integration && isset($_POST['userlogin']) && $_POST['userlogin'] !=  $user->user_login) {
     // 		$newlogin = get_user_by('login', $_POST['userlogin']);
     // 		if ( ! empty($newlogin->ID) ) {
     // 			if (sDB::query("SELECT count(*) AS used FROM $Customer->_table WHERE wpuser=$newlogin->ID",'auto','col','used') == 0) {
     // 				$Customer->wpuser = $newlogin->ID;
     // 				$updated = sprintf(__('Updated customer login to %s.','Shopp'),"<strong>$newlogin->user_login</strong>");
     // 			} else $updated = sprintf(__('Could not update customer login to &quot;%s&quot; because that user is already assigned to another customer.','Shopp'),'<strong>'.sanitize_user($_POST['userlogin']).'</strong>');
     //
     // 		} else $updated = sprintf(__('Could not update customer login to &quot;%s&quot; because the user does not exist in WordPress.','Shopp'),'<strong>'.sanitize_user($_POST['userlogin']).'</strong>');
     // 		if ( empty($_POST['userlogin']) ) $Customer->wpuser = 0;
     // 	}
     //
     // 	if ( ! empty($_POST['new-password']) && !empty($_POST['confirm-password'])
     // 		&& $_POST['new-password'] == $_POST['confirm-password']) {
     // 			$Customer->password = wp_hash_password($_POST['new-password']);
     // 			if (!empty($Customer->wpuser)) wp_set_password($_POST['new-password'], $Customer->wpuser);
     // 		}
     //
     // 	$valid_email = filter_var( $_POST['email'], FILTER_VALIDATE_EMAIL );
     // 	$password = !empty( $_POST['new_password'] );
     //
     // 	if ($wp_integration && $new_customer && $valid_email && $password) {
     // 		$Customer->loginname = $_POST['userlogin'];
     // 		$Customer->email = $_POST['email'];
     // 		$Customer->firstname = $_POST['firstname'];
     // 		$Customer->lastname = $_POST['lastname'];
     //
     // 		$return = $Customer->create_wpuser();
     //
     // 		if ( $return ) {
     // 			$updated = sprintf( __( 'The Shopp and WordPress accounts have been created with the username &quot;%s&quot;.', 'Shopp'), '<strong>'.sanitize_user($_POST['userlogin']).'</strong>');
     // 		} else {
     // 			$updated = sprintf( __( 'Could not create a WordPress account for customer &quot;%s&quot;.','Shopp'), '<strong>'.sanitize_user($_POST['userlogin']).'</strong>');
     // 		}
     // 	}
     // 	elseif ($new_customer && ( !$valid_email || !$password ) ) {
     // 		$updated = __( 'Could not create new user. You must enter a valid email address and a password first.', 'Shopp' );
     // 		$no_save = true;
     // 	}
     //
     // 	if ( !isset( $new_save ) ) {
     // 		$Customer->info = false; // No longer used from DB
     // 		$Customer->save();
     // 	}
     //
     //
     // 	if (isset($_POST['info']) && !empty($_POST['info'])) {
     // 		foreach ((array)$_POST['info'] as $id => $info) {
     // 			$Meta = new ShoppMetaObject($id);
     // 			$Meta->value = $info;
     // 			$Meta->save();
     // 		}
     // 	}
     //
     // 	if (isset($Customer->id)) $Billing->customer = $Customer->id;
     // 	$Billing->updates($_POST['billing']);
     // 	$Billing->save();
     //
     // 	if (isset($Customer->id)) $Shipping->customer = $Customer->id;
     // 	$Shipping->updates($_POST['shipping']);
     // 	$Shipping->save();
     // 	if (!$updated) __('Customer updated.','Shopp');
     // 	$Customer = false;
     //
     // }
     $pagenum = absint($paged);
     if (empty($pagenum)) {
         $pagenum = 1;
     }
     if (!$per_page || $per_page < 0) {
         $per_page = 20;
     }
     $index = $per_page * ($pagenum - 1);
     if (!empty($start)) {
         $startdate = $start;
         list($month, $day, $year) = explode("/", $startdate);
         $starts = mktime(0, 0, 0, $month, $day, $year);
     }
     if (!empty($end)) {
         $enddate = $end;
         list($month, $day, $year) = explode("/", $enddate);
         $ends = mktime(23, 59, 59, $month, $day, $year);
     }
     $customer_table = ShoppDatabaseObject::tablename(Customer::$table);
     $billing_table = ShoppDatabaseObject::tablename(BillingAddress::$table);
     $purchase_table = ShoppDatabaseObject::tablename(ShoppPurchase::$table);
     $users_table = $wpdb->users;
     $where = array();
     if (!empty($s)) {
         $s = stripslashes($s);
         if (preg_match_all('/(\\w+?)\\:(?="(.+?)"|(.+?)\\b)/', $s, $props, PREG_SET_ORDER)) {
             foreach ($props as $search) {
                 $keyword = !empty($search[2]) ? $search[2] : $search[3];
                 switch (strtolower($search[1])) {
                     case "company":
                         $where[] = "c.company LIKE '%{$keyword}%'";
                         break;
                     case "login":
                         $where[] = "u.user_login LIKE '%{$keyword}%'";
                         break;
                     case "address":
                         $where[] = "(b.address LIKE '%{$keyword}%' OR b.xaddress='%{$keyword}%')";
                         break;
                     case "city":
                         $where[] = "b.city LIKE '%{$keyword}%'";
                         break;
                     case "province":
                     case "state":
                         $where[] = "b.state='{$keyword}'";
                         break;
                     case "zip":
                     case "zipcode":
                     case "postcode":
                         $where[] = "b.postcode='{$keyword}'";
                         break;
                     case "country":
                         $where[] = "b.country='{$keyword}'";
                         break;
                 }
             }
         } elseif (strpos($s, '@') !== false) {
             $where[] = "c.email='{$s}'";
         } elseif (is_numeric($s)) {
             $where[] = "c.id='{$s}'";
         } else {
             $where[] = "(CONCAT(c.firstname,' ',c.lastname) LIKE '%{$s}%' OR c.company LIKE '%{$s}%')";
         }
     }
     if (!empty($starts) && !empty($ends)) {
         $where[] = ' (UNIX_TIMESTAMP(c.created) >= ' . $starts . ' AND UNIX_TIMESTAMP(c.created) <= ' . $ends . ')';
     }
     $select = array('columns' => 'SQL_CALC_FOUND_ROWS c.*,city,state,country,user_login', 'table' => "{$customer_table} as c", 'joins' => array($billing_table => "LEFT JOIN {$billing_table} AS b ON b.customer=c.id AND b.type='billing'", $users_table => "LEFT JOIN {$users_table} AS u ON u.ID=c.wpuser AND (c.wpuser IS NULL OR c.wpuser != 0)"), 'where' => $where, 'groupby' => "c.id", 'orderby' => "c.created DESC", 'limit' => "{$index},{$per_page}");
     $query = sDB::select($select);
     $Customers = sDB::query($query, 'array', 'index', 'id');
     $total = sDB::found();
     // Add order data to customer records in this view
     $orders = sDB::query("SELECT customer,SUM(total) AS total,count(id) AS orders FROM {$purchase_table} WHERE customer IN (" . join(',', array_keys($Customers)) . ") GROUP BY customer", 'array', 'index', 'customer');
     foreach ($Customers as &$record) {
         $record->total = 0;
         $record->orders = 0;
         if (!isset($orders[$record->id])) {
             continue;
         }
         $record->total = $orders[$record->id]->total;
         $record->orders = $orders[$record->id]->orders;
     }
     $num_pages = ceil($total / $per_page);
     $ListTable = ShoppUI::table_set_pagination(ShoppAdmin::screen(), $total, $num_pages, $per_page);
     $ranges = array('all' => __('Show New Customers', 'Shopp'), 'today' => __('Today', 'Shopp'), 'week' => __('This Week', 'Shopp'), 'month' => __('This Month', 'Shopp'), 'quarter' => __('This Quarter', 'Shopp'), 'year' => __('This Year', 'Shopp'), 'yesterday' => __('Yesterday', 'Shopp'), 'lastweek' => __('Last Week', 'Shopp'), 'last30' => __('Last 30 Days', 'Shopp'), 'last90' => __('Last 3 Months', 'Shopp'), 'lastmonth' => __('Last Month', 'Shopp'), 'lastquarter' => __('Last Quarter', 'Shopp'), 'lastyear' => __('Last Year', 'Shopp'), 'lastexport' => __('Last Export', 'Shopp'), 'custom' => __('Custom Dates', 'Shopp'));
     $exports = array('tab' => __('Tab-separated.txt', 'Shopp'), 'csv' => __('Comma-separated.csv', 'Shopp'), 'xls' => __('Microsoft&reg; Excel.xls', 'Shopp'));
     $formatPref = shopp_setting('customerexport_format');
     if (!$formatPref) {
         $formatPref = 'tab';
     }
     $columns = array_merge(Customer::exportcolumns(), BillingAddress::exportcolumns(), ShippingAddress::exportcolumns());
     $selected = shopp_setting('customerexport_columns');
     if (empty($selected)) {
         $selected = array_keys($columns);
     }
     $authentication = shopp_setting('account_system');
     $action = add_query_arg(array('page' => ShoppAdmin::pagename('customers')), admin_url('admin.php'));
     include $this->ui('customers.php');
 }
Exemplo n.º 4
0
 private function __construct()
 {
     $ImageSetting = new ShoppImageSetting();
     $table = $ImageSetting->_table;
     $where = array("type='{$ImageSetting->type}'", "context='{$ImageSetting->context}'");
     $options = compact('table', 'where');
     $query = sDB::select($options);
     $this->populate(sDB::query($query, 'array', array($ImageSetting, 'loader'), false, 'name'));
     $this->found = sDB::found();
 }
Exemplo n.º 5
0
 public function images()
 {
     if (!current_user_can('shopp_settings')) {
         wp_die(__('You do not have sufficient permissions to access this page.'));
     }
     $defaults = array('paged' => 1, 'per_page' => 25, 'action' => false, 'selected' => array());
     $args = array_merge($defaults, $_REQUEST);
     extract($args, EXTR_SKIP);
     $edit = false;
     if (isset($_GET['id'])) {
         $edit = (int) $_GET['id'];
         if ('new' == $_GET['id']) {
             $edit = 'new';
         }
     }
     if (isset($_GET['delete']) || 'delete' == $action) {
         check_admin_referer('shopp-settings-images');
         if (!empty($_GET['delete'])) {
             $selected[] = (int) $_GET['delete'];
         }
         $selected = array_filter($selected);
         foreach ($selected as $delete) {
             $Record = new ImageSetting((int) $delete);
             $Record->delete();
         }
     }
     if (!empty($_POST['save'])) {
         check_admin_referer('shopp-settings-images');
         $ImageSetting = new ImageSetting($edit);
         $_POST['name'] = sanitize_title_with_dashes($_POST['name']);
         $_POST['sharpen'] = floatval(str_replace('%', '', $_POST['sharpen']));
         $ImageSetting->updates($_POST);
         if (!empty($ImageSetting->name)) {
             $ImageSetting->save();
         }
     }
     $start = $per_page * ($paged - 1);
     $ImageSetting = new ImageSetting($edit);
     $table = $ImageSetting->_table;
     $columns = 'SQL_CALC_FOUND_ROWS *';
     $where = array("type='{$ImageSetting->type}'", "context='{$ImageSetting->context}'");
     $limit = "{$start},{$per_page}";
     $options = compact('columns', 'useindex', 'table', 'joins', 'where', 'groupby', 'having', 'limit', 'orderby');
     $query = sDB::select($options);
     $settings = sDB::query($query, 'array', array($ImageSetting, 'loader'));
     $total = sDB::found();
     $num_pages = ceil($total / $per_page);
     $ListTable = ShoppUI::table_set_pagination($this->screen, $total, $num_pages, $per_page);
     $fit_menu = $ImageSetting->fit_menu();
     $quality_menu = $ImageSetting->quality_menu();
     $actions_menu = array('delete' => __('Delete', 'Shopp'));
     $json_settings = array();
     $skip = array('created', 'modified', 'numeral', 'context', 'type', 'sortorder', 'parent');
     foreach ($settings as &$Setting) {
         if (method_exists($Setting, 'json')) {
             $json_settings[$Setting->id] = $Setting->json($skip);
         }
     }
     include $this->ui('images.php');
 }
Exemplo n.º 6
0
 public function load(array $options = array())
 {
     $thisclass = get_class($this);
     $slug = isset($this->slug) ? $this->slug : sanitize_key($thisclass);
     $Storefront = ShoppStorefront();
     $Shopping = ShoppShopping();
     $Processing = new ShoppProduct();
     $summary_table = ShoppDatabaseObject::tablename(ProductSummary::$table);
     $defaults = array('columns' => false, 'useindex' => false, 'joins' => array(), 'where' => array(), 'groupby' => false, 'orderby' => false, 'having' => array(), 'limit' => false, 'order' => false, 'page' => false, 'paged' => false, 'nostock' => null, 'pagination' => true, 'published' => true, 'ids' => false, 'adjacent' => false, 'product' => false, 'load' => array('coverimages'), 'inventory' => false, 'taxquery' => false, 'debug' => false);
     $loading = array_merge($defaults, $options);
     $loading = apply_filters("shopp_collection_load_options", $loading);
     $loading = apply_filters("shopp_{$slug}_collection_load_options", $loading);
     extract($loading);
     // Setup pagination
     $this->paged = false;
     $this->pagination = false === $paged ? shopp_setting('catalog_pagination') : $paged;
     $page = false === $page ? get_query_var('paged') : $page;
     $this->page = (int) $page > 0 || preg_match('/(0\\-9|[A-Z])/', $page) ? $page : 1;
     // Hard product limit per category to keep resources "reasonable"
     $hardlimit = apply_filters('shopp_category_products_hardlimit', 1000);
     // Enforce the where parameter as an array
     if (!is_array($where)) {
         return shopp_debug('The "where" parameter for ' . __METHOD__ . ' must be formatted as an array.');
     }
     // Inventory filtering
     if (shopp_setting_enabled('inventory') && (is_null($nostock) && !shopp_setting_enabled('outofstock_catalog') || !is_null($nostock) && !Shopp::str_true($nostock))) {
         $where[] = "( s.inventory='off' OR (s.inventory='on' AND s.stock > 0) )";
     }
     if (Shopp::str_true($published)) {
         $where[] = "p.post_status='publish'";
     }
     // Multiple taxonomy queries
     if (is_array($taxquery)) {
         $tqdefaults = array('relation' => 'AND', 'include_children' => true);
         $taxquery = array_merge($tqdefaults, $taxquery);
         $TQ = new WP_Tax_Query($taxquery);
         $sql = $TQ->get_sql($Processing->_table, 'ID');
         unset($TQ);
         $joins['taxquery'] = self::taxquery($sql['join']);
         $where[] = self::taxquery($sql['where']);
     }
     // Sort Order
     if (!$orderby) {
         $titlesort = "p.post_title ASC";
         $defaultsort = empty($order) ? $titlesort : $order;
         // Define filterable built-in sort methods (you're welcome)
         $sortmethods = apply_filters('shopp_collection_sort_methods', array('bestselling' => "s.sold DESC,{$titlesort}", 'highprice' => "maxprice DESC,{$titlesort}", 'lowprice' => "minprice ASC,{$titlesort}", 'newest' => "p.post_date DESC,{$titlesort}", 'oldest' => "p.post_date ASC,{$titlesort}", 'random' => "RAND(" . crc32($Shopping->session) . ")", 'chaos' => "RAND(" . time() . ")", 'reverse' => "p.post_title DESC", 'title' => $titlesort, 'custom' => is_subclass_of($this, 'ProductTaxonomy') ? "tr.term_order ASC,{$titlesort}" : $defaultsort, 'recommended' => is_subclass_of($this, 'ProductTaxonomy') ? "tr.term_order ASC,{$titlesort}" : $defaultsort, 'default' => $defaultsort));
         // Handle valid user browsing sort change requests
         if (isset($_REQUEST['sort']) && !empty($_REQUEST['sort']) && array_key_exists(strtolower($_REQUEST['sort']), $sortmethods)) {
             $Storefront->browsing['sortorder'] = strtolower($_REQUEST['sort']);
         }
         // Collect sort setting sources (Shopp admin setting, User browsing setting, programmer specified setting)
         $sortsettings = array(shopp_setting('default_product_order'), isset($Storefront->browsing['sortorder']) ? $Storefront->browsing['sortorder'] : false, !empty($order) ? $order : false);
         // Go through setting sources to determine most applicable setting
         $sorting = 'title';
         foreach ($sortsettings as $setting) {
             if (!empty($setting) && isset($sortmethods[strtolower($setting)])) {
                 $sorting = strtolower($setting);
             }
         }
         $orderby = $sortmethods[$sorting];
     }
     if (empty($orderby)) {
         $orderby = 'p.post_title ASC';
     }
     // Pagination
     if (empty($limit)) {
         if ($this->pagination > 0 && is_numeric($this->page) && Shopp::str_true($pagination)) {
             if (!$this->pagination || $this->pagination < 0) {
                 $this->pagination = $hardlimit;
             }
             $start = $this->pagination * ($this->page - 1);
             $limit = "{$start},{$this->pagination}";
         } else {
             $limit = $hardlimit;
         }
         $limited = false;
         // Flag that the result set does not have forced limits
     } else {
         $limited = true;
     }
     // The result set has forced limits
     // Core query components
     // Load core product data and product summary columns
     $cols = array('p.ID', 'p.post_title', 'p.post_name', 'p.post_excerpt', 'p.post_status', 'p.post_date', 'p.post_modified', 's.modified AS summed', 's.sold', 's.grossed', 's.maxprice', 's.minprice', 's.ranges', 's.taxed', 's.stock', 's.lowstock', 's.inventory', 's.featured', 's.variants', 's.addons', 's.sale');
     if ($ids) {
         $cols = array('p.ID');
     }
     $columns = "SQL_CALC_FOUND_ROWS " . join(',', $cols) . ($columns !== false ? ',' . $columns : '');
     $table = "{$Processing->_table} AS p";
     $where[] = "p.post_type='" . ShoppProduct::posttype() . "'";
     $joins[$summary_table] = "LEFT OUTER JOIN {$summary_table} AS s ON s.product=p.ID";
     $options = compact('columns', 'useindex', 'table', 'joins', 'where', 'groupby', 'having', 'limit', 'orderby');
     // Alphabetic pagination
     if ('alpha' === $pagination || preg_match('/(0\\-9|[A-Z])/', $page)) {
         // Setup Roman alphabet navigation
         $alphanav = array_merge(array('0-9'), range('A', 'Z'));
         $this->alpha = array_combine($alphanav, array_fill(0, count($alphanav), 0));
         // Setup alphabetized index query
         $a = $options;
         $a['columns'] = "count(DISTINCT p.ID) AS total,IF(LEFT(p.post_title,1) REGEXP '[0-9]',LEFT(p.post_title,1),LEFT(SOUNDEX(p.post_title),1)) AS letter";
         $a['groupby'] = "letter";
         $alphaquery = sDB::select($a);
         $cachehash = 'collection_alphanav_' . md5($alphaquery);
         $cached = Shopp::cache_get($cachehash, 'shopp_collection_alphanav');
         if ($cached) {
             // Load from object cache,  if available
             $this->alpha = $cached;
             $cached = false;
         } else {
             // Run query and cache results
             $expire = apply_filters('shopp_collection_cache_expire', 43200);
             $alpha = sDB::query($alphaquery, 'array', array($this, 'alphatable'));
             Shopp::cache_set($cachehash, $alpha, 'shopp_collection_alphanav', $expire);
         }
         $this->paged = true;
         if ($this->page == 1) {
             $this->page = '0-9';
         }
         $alphafilter = $this->page == "0-9" ? "(LEFT(p.post_title,1) REGEXP '[0-9]') = 1" : "IF(LEFT(p.post_title,1) REGEXP '[0-9]',LEFT(p.post_title,1),LEFT(SOUNDEX(p.post_title),1))='{$this->page}'";
         $options['where'][] = $alphafilter;
     }
     $query = sDB::select(apply_filters('shopp_collection_query', $options));
     if ($debug) {
         echo $query . BR . BR;
     }
     // Load from cached results if available, or run the query and cache the results
     $cachehash = 'collection_' . md5($query);
     $cached = Shopp::cache_get($cachehash, 'shopp_collection');
     if ($cached) {
         $this->products = $cached->products;
         $this->total = $cached->total;
     } else {
         $expire = apply_filters('shopp_collection_cache_expire', 43200);
         $cache = new stdClass();
         if ($ids) {
             $cache->products = $this->products = sDB::query($query, 'array', 'col', 'ID');
         } else {
             $cache->products = $this->products = sDB::query($query, 'array', array($Processing, 'loader'));
         }
         $cache->total = $this->total = sDB::found();
         // If running a limited set, the reported total found should not exceed the limit (but can because of SQL_CALC_FOUND_ROWS)
         // Don't use the limit if it is offset
         if ($limited && false === strpos($limit, ',')) {
             $cache->total = $this->total = min($limit, $this->total);
         }
         Shopp::cache_set($cachehash, $cache, 'shopp_collection', $expire);
     }
     if (false === $this->products) {
         $this->products = array();
     }
     if ($ids) {
         return $this->size() > 0;
     }
     // Finish up pagination construction
     if ($this->pagination > 0 && $this->total > $this->pagination) {
         $this->pages = ceil($this->total / $this->pagination);
         if ($this->pages > 1) {
             $this->paged = true;
         }
     }
     // Load all requested product meta from other data sources
     $Processing->load_data($load, $this->products);
     // If products are missing summary data, resum them
     if (isset($Processing->resum) && !empty($Processing->resum)) {
         $Processing->load_data(array('prices'), $Processing->resum);
     }
     unset($Processing);
     // Free memory
     $this->loaded = true;
     return $this->size() > 0;
 }
Exemplo n.º 7
0
 public function loader($workflow = false)
 {
     if (!current_user_can('shopp_products')) {
         return;
     }
     add_screen_option('per_page', array('label' => __('Products Per Page', 'Shopp'), 'default' => 20, 'option' => 'edit_' . ShoppProduct::$posttype . '_per_page'));
     $per_page_option = get_current_screen()->get_option('per_page');
     $defaults = array('cat' => false, 'paged' => 1, 'per_page' => $per_page_option['default'], 's' => '', 'sl' => '', 'matchcol' => '', 'view' => $this->view, 'is_inventory' => false, 'is_trash' => false, 'is_bestselling' => false, 'categories_menu' => false, 'inventory_menu' => false, 'lowstock' => 0, 'columns' => '', 'orderby' => '', 'order' => '', 'where' => array(), 'joins' => array());
     $args = array_merge($defaults, $_GET);
     if (false !== ($user_per_page = get_user_option($per_page_option['option']))) {
         $args['per_page'] = $user_per_page;
     }
     extract($args, EXTR_SKIP);
     $url = ShoppAdminController::url($_GET);
     $subs = array('all' => array('label' => Shopp::__('All'), 'where' => array("p.post_status!='trash'")), 'published' => array('label' => Shopp::__('Published'), 'where' => array("p.post_status='publish'")), 'drafts' => array('label' => Shopp::__('Drafts'), 'where' => array("p.post_status='draft'")), 'onsale' => array('label' => Shopp::__('On Sale'), 'where' => array("s.sale='on' AND p.post_status != 'trash'")), 'featured' => array('label' => Shopp::__('Featured'), 'where' => array("s.featured='on' AND p.post_status != 'trash'")), 'bestselling' => array('label' => Shopp::__('Bestselling'), 'where' => array("p.post_status!='trash'", BestsellerProducts::threshold() . " < s.sold"), 'order' => 'bestselling'), 'inventory' => array('label' => Shopp::__('Inventory'), 'where' => array("s.inventory='on' AND p.post_status != 'trash'")), 'trash' => array('label' => Shopp::__('Trash'), 'where' => array("p.post_status='trash'")));
     if (!shopp_setting_enabled('inventory')) {
         unset($subs['inventory']);
     }
     switch ($view) {
         case 'inventory':
             if (shopp_setting_enabled('inventory')) {
                 $is_inventory = true;
             } else {
                 Shopp::redirect(add_query_arg('view', null, $url), true);
             }
             break;
         case 'trash':
             $is_trash = true;
             break;
         case 'bestselling':
             $is_bestselling = true;
             break;
     }
     if ($is_inventory) {
         $per_page = 50;
     }
     $pagenum = absint($paged);
     $start = $per_page * ($pagenum - 1);
     $where = $subs[$this->view]['where'];
     if (!empty($s)) {
         $SearchResults = new SearchResults(array('search' => $s, 'nostock' => 'on', 'published' => 'off', 'paged' => -1));
         $SearchResults->load();
         $ids = array_keys($SearchResults->products);
         $where[] = "p.ID IN (" . join(',', $ids) . ")";
     }
     if (!empty($cat)) {
         global $wpdb;
         $joins[$wpdb->term_relationships] = "INNER JOIN {$wpdb->term_relationships} AS tr ON (p.ID=tr.object_id)";
         $joins[$wpdb->term_taxonomy] = "INNER JOIN {$wpdb->term_taxonomy} AS tt ON (tr.term_taxonomy_id=tt.term_taxonomy_id AND tt.term_id={$cat})";
         if (-1 == $cat) {
             unset($joins[$wpdb->term_taxonomy]);
             $joins[$wpdb->term_relationships] = "LEFT JOIN {$wpdb->term_relationships} AS tr ON (p.ID=tr.object_id)";
             $where[] = 'tr.object_id IS NULL';
         }
     }
     // Detect custom taxonomies
     $taxonomies = array_intersect(get_object_taxonomies(ShoppProduct::$posttype), array_keys($_GET));
     if (!empty($taxonomies)) {
         foreach ($taxonomies as $n => $taxonomy) {
             global $wpdb;
             $term = get_term_by('slug', $_GET[$taxonomy], $taxonomy);
             if (!empty($term->term_id)) {
                 $joins[$wpdb->term_relationships . '_' . $n] = "INNER JOIN {$wpdb->term_relationships} AS tr{$n} ON (p.ID=tr{$n}.object_id)";
                 $joins[$wpdb->term_taxonomy . '_' . $n] = "INNER JOIN {$wpdb->term_taxonomy} AS tt{$n} ON (tr{$n}.term_taxonomy_id=tt{$n}.term_taxonomy_id AND tt{$n}.term_id={$term->term_id})";
             }
         }
     }
     if (!empty($sl) && shopp_setting_enabled('inventory')) {
         switch ($sl) {
             case "ns":
                 foreach ($where as &$w) {
                     $w = str_replace("s.inventory='on'", "s.inventory='off'", $w);
                 }
                 $where[] = "s.inventory='off'";
                 break;
             case "oos":
                 $where[] = "(s.inventory='on' AND s.stock = 0)";
                 break;
             case "ls":
                 $ls = shopp_setting('lowstock_level');
                 if (empty($ls)) {
                     $ls = '0';
                 }
                 $where[] = "(s.inventory='on' AND s.lowstock != 'none')";
                 break;
             case "is":
                 $where[] = "(s.inventory='on' AND s.stock > 0)";
         }
     }
     $lowstock = shopp_setting('lowstock_level');
     // Setup queries
     $pd = WPDatabaseObject::tablename(ShoppProduct::$table);
     $pt = ShoppDatabaseObject::tablename(ShoppPrice::$table);
     $ps = ShoppDatabaseObject::tablename(ProductSummary::$table);
     $orderdirs = array('asc', 'desc');
     if (in_array($order, $orderdirs)) {
         $orderd = strtolower($order);
     } else {
         $orderd = 'asc';
     }
     if (isset($subs[$this->view]['order'])) {
         $order = $subs[$this->view]['order'];
     }
     $ordercols = '';
     switch ($orderby) {
         case 'name':
             $order = 'title';
             if ('desc' == $orderd) {
                 $order = 'reverse';
             }
             break;
         case 'price':
             $order = 'lowprice';
             if ('desc' == $orderd) {
                 $order = 'highprice';
             }
             break;
         case 'date':
             $order = 'newest';
             if ('desc' == $orderd) {
                 $order = 'oldest';
             }
             break;
         case 'sold':
             $ordercols = 's.sold ' . $orderd;
             break;
         case 'gross':
             $ordercols = 's.grossed ' . $orderd;
             break;
         case 'inventory':
             $ordercols = 's.stock ' . $orderd;
             break;
         case 'sku':
             $ordercols = 'pt.sku ' . $orderd;
             break;
     }
     if (in_array($this->view, array('onsale', 'featured', 'inventory'))) {
         $joins[$ps] = "INNER JOIN {$ps} AS s ON p.ID=s.product";
     }
     $loading = array('where' => $where, 'joins' => $joins, 'limit' => "{$start},{$per_page}", 'load' => array('categories', 'coverimages'), 'published' => false, 'order' => $order, 'nostock' => true);
     if (!empty($ordercols)) {
         unset($loading['order']);
         $loading['orderby'] = $ordercols;
     }
     if ($is_inventory) {
         // Override for inventory products
         $where[] = "(pt.context='product' OR pt.context='variation') AND pt.type != 'N/A'";
         $loading = array('columns' => "pt.id AS stockid,IF(pt.context='variation',CONCAT(p.post_title,': ',pt.label),p.post_title) AS post_title,pt.sku AS sku,pt.stock AS stock", 'joins' => array_merge(array($pt => "LEFT JOIN {$pt} AS pt ON p.ID=pt.product"), $joins), 'where' => $where, 'groupby' => 'pt.id', 'orderby' => str_replace('s.', 'pt.', $ordercols), 'limit' => "{$start},{$per_page}", 'nostock' => true, 'published' => false);
     }
     // Override loading product meta and limiting by pagination in the workflow list
     if ($workflow) {
         unset($loading['limit']);
         $loading['ids'] = true;
         $loading['pagination'] = false;
         $loading['load'] = array();
     }
     $this->products = new ProductCollection();
     $this->products->load($loading);
     // Overpagination protection, redirect to page 1 if the requested page doesn't exist
     $num_pages = ceil($this->products->total / $per_page);
     if ($paged > 1 && $paged > $num_pages) {
         Shopp::redirect(add_query_arg('paged', null, $url));
     }
     // Return a list of product keys for workflow list requests
     if ($workflow) {
         return $this->products->worklist();
     }
     // Get sub-screen counts
     $subcounts = Shopp::cache_get('shopp_product_subcounts', 'shopp_admin');
     if ($subcounts) {
         foreach ($subcounts as $name => $total) {
             if (isset($subs[$name])) {
                 $subs[$name]['total'] = $total;
             }
         }
     } else {
         $subcounts = array();
         foreach ($subs as $name => &$subquery) {
             $subquery['total'] = 0;
             $query = array('columns' => "count(*) AS total", 'table' => "{$pd} as p", 'joins' => array(), 'where' => array());
             $query = array_merge($query, $subquery);
             $query['where'][] = "p.post_type='shopp_product'";
             if (in_array($name, array('onsale', 'bestselling', 'featured', 'inventory'))) {
                 $query['joins'][$ps] = "INNER JOIN {$ps} AS s ON p.ID=s.product";
             }
             $query = sDB::select($query);
             $subquery['total'] = sDB::query($query, 'auto', 'col', 'total');
             $subcounts[$name] = $subquery['total'];
         }
         Shopp::cache_set('shopp_product_subcounts', $subcounts, 'shopp_admin');
     }
     $this->subs = $subs;
 }
Exemplo n.º 8
0
    public function select_customer()
    {
        check_admin_referer('wp_ajax_shopp_select_customer');
        $defaults = array('page' => false, 'paged' => 1, 'per_page' => 7, 'status' => false, 's' => '');
        $args = wp_parse_args($_REQUEST, $defaults);
        extract($args, EXTR_SKIP);
        if (!empty($s)) {
            $s = stripslashes($s);
            $search = sDB::escape($s);
            $where = array();
            if (preg_match_all('/(\\w+?)\\:(?="(.+?)"|(.+?)\\b)/', $s, $props, PREG_SET_ORDER)) {
                foreach ($props as $search) {
                    $keyword = !empty($search[2]) ? $search[2] : $search[3];
                    switch (strtolower($search[1])) {
                        case "company":
                            $where[] = "c.company LIKE '%{$keyword}%'";
                            break;
                        case "login":
                            $where[] = "u.user_login LIKE '%{$keyword}%'";
                            break;
                        case "address":
                            $where[] = "(b.address LIKE '%{$keyword}%' OR b.xaddress='%{$keyword}%')";
                            break;
                        case "city":
                            $where[] = "b.city LIKE '%{$keyword}%'";
                            break;
                        case "province":
                        case "state":
                            $where[] = "b.state='{$keyword}'";
                            break;
                        case "zip":
                        case "zipcode":
                        case "postcode":
                            $where[] = "b.postcode='{$keyword}'";
                            break;
                        case "country":
                            $where[] = "b.country='{$keyword}'";
                            break;
                    }
                }
            } elseif (strpos($s, '@') !== false) {
                $where[] = "c.email LIKE '%{$search}%'";
            } elseif (is_numeric($s)) {
                $where[] = "c.phone='{$search}'";
            } else {
                $where[] = "(CONCAT(c.firstname,' ',c.lastname) LIKE '%{$search}%' OR c.company LIKE '%{$s}%' OR u.user_login LIKE '%{$s}%')";
            }
            $pagenum = absint($paged);
            if (empty($pagenum)) {
                $pagenum = 1;
            }
            $index = $per_page * ($pagenum - 1);
            $customer_table = ShoppDatabaseObject::tablename(Customer::$table);
            $billing_table = ShoppDatabaseObject::tablename(BillingAddress::$table);
            $purchase_table = ShoppDatabaseObject::tablename(ShoppPurchase::$table);
            global $wpdb;
            $users_table = $wpdb->users;
            $select = array('columns' => 'SQL_CALC_FOUND_ROWS c.*,city,state,country,user_login', 'table' => "{$customer_table} as c", 'joins' => array($billing_table => "LEFT JOIN {$billing_table} AS b ON b.customer=c.id AND b.type='billing'", $users_table => "LEFT JOIN {$users_table} AS u ON u.ID=c.wpuser AND (c.wpuser IS NULL OR c.wpuser != 0)"), 'where' => $where, 'groupby' => "c.id", 'orderby' => "c.created DESC", 'limit' => "{$index},{$per_page}");
            $query = sDB::select($select);
        }
        // if (!empty($starts) && !empty($ends)) $where[] = ' (UNIX_TIMESTAMP(c.created) >= '.$starts.' AND UNIX_TIMESTAMP(c.created) <= '.$ends.')';
        $list = sDB::query($query, 'array', 'index', 'id');
        $results = array();
        foreach ($list as $entry) {
            $results[] = array('id' => $entry->id, 'user' => $entry->user, 'gravatar' => get_avatar($entry->email, 32), 'firstname' => $entry->firstname, 'lastname' => $entry->lastname, 'company' => $entry->company, 'email' => $entry->email, 'lastname' => $entry->lastname, 'phone' => $entry->phone);
        }
        header('Content-Type: application/json; charset=utf-8');
        echo json_encode($results);
        exit;
        $url = admin_url('admin-ajax.php');
        ?>
		<html>
		<head>
			<link rel="stylesheet" id="wp-admin"  href="<?php 
        echo admin_url('css/wp-admin.css');
        ?>
" type="text/css" media="all" />
			<link rel="stylesheet" id="shopp-admin"  href="<?php 
        echo SHOPP_ADMIN_URI . '/styles/admin.css';
        ?>
" type="text/css" media="all" />
		</head>
		<body id="customer-select">
		<?php 
        if (!empty($Customers)) {
            ?>
		<ul>
			<?php 
            foreach ($Customers as $Customer) {
                ?>
			<li><a href="<?php 
                echo add_query_arg(array('order-action' => 'change-customer', 'page' => $_GET['page'], 'id' => (int) $_GET['id'], 'customerid' => $Customer->id), admin_url('admin.php'));
                ?>
" target="_parent">
			<?php 
                $wp_user = get_userdata($Customer->wpuser);
                $userlink = add_query_arg('user_id', $Customer->wpuser, admin_url('user-edit.php'));
                echo get_avatar($Customer->wpuser, 48);
                ?>
			<?php 
                echo "<strong>{$Customer->firstname} {$Customer->lastname}</strong>";
                if (!empty($Customer->company)) {
                    echo ", {$Customer->company}";
                }
                ?>
			<?php 
                if (!empty($Customer->email)) {
                    echo "<br />{$Customer->email}";
                }
                ?>
			<?php 
                if (!empty($Customer->phone)) {
                    echo "<br />{$Customer->phone}";
                }
                ?>
			</a>
			</li>
			<?php 
            }
            ?>
		</ul>
		<?php 
        } else {
            ?>
		<?php 
            _e('No customers found.', 'Shopp');
            ?>
		<?php 
        }
        ?>
		</body>
		</html>
		<?php 
        exit;
    }
Exemplo n.º 9
0
 /**
  * Load active promotions
  *
  * @author Jonathan Davis
  * @since 1.3
  *
  * @return array List of loaded ShoppOrderPromo objects
  **/
 public function load()
 {
     if ($this->loaded) {
         return;
     }
     // Don't load twice in one request
     $table = ShoppDatabaseObject::tablename(ShoppPromo::$table);
     $where = array("status='enabled'", ShoppPromo::activedates(), "target IN ('" . join("','", self::$targets) . "')");
     $orderby = 'target DESC';
     $queryargs = compact('table', 'where', 'orderby');
     $query = sDB::select($queryargs);
     $loaded = sDB::query($query, 'array', array('ShoppPromotions', 'loader'));
     if (!$loaded || 0 == count($loaded)) {
         return;
     }
     $this->populate($loaded);
     $this->loaded = true;
 }
Exemplo n.º 10
0
    /**
     * Registers the Shopp Collections meta box in the WordPress theme menus screen
     *
     * @author Jonathan Davis
     * @since 1.2
     *
     * @return void
     **/
    public static function shopp_collections_meta_box()
    {
        global $_nav_menu_placeholder, $nav_menu_selected_id;
        $Shopp = Shopp::object();
        $removed_args = array('action', 'customlink-tab', 'edit-menu-item', 'menu-item', 'page-tab', '_wpnonce');
        ?>
		<br />
		<div class="shopp-collections-menu-item customlinkdiv" id="shopp-collections-menu-item">
			<div id="tabs-panel-shopp-collections" class="tabs-panel tabs-panel-active">

				<ul class="categorychecklist form-no-clear">

				<?php 
        $collections = $Shopp->Collections;
        foreach ($collections as $slug => $CollectionClass) {
            $menu = get_class_property($CollectionClass, '_menu');
            if (!$menu) {
                continue;
            }
            $Collection = new $CollectionClass();
            $Collection->smart();
            $_nav_menu_placeholder = 0 > $_nav_menu_placeholder ? $_nav_menu_placeholder - 1 : -1;
            ?>
					<li>
						<label class="menu-item-title">
						<input type="checkbox" name="menu-item[<?php 
            echo $_nav_menu_placeholder;
            ?>
][menu-item-shopp-collection]" value="<?php 
            echo $slug;
            ?>
" class="menu-item-checkbox" /> <?php 
            echo esc_html($Collection->name);
            ?>
</label>
						<input type="hidden" class="menu-item-db-id" name="menu-item[<?php 
            echo $_nav_menu_placeholder;
            ?>
][menu-item-db-id]" value="0" />
						<input type="hidden" class="menu-item-object-id" name="menu-item[<?php 
            echo $_nav_menu_placeholder;
            ?>
][menu-item-object-id]" value="<?php 
            echo $slug;
            ?>
" />
						<input type="hidden" class="menu-item-object" name="menu-item[<?php 
            echo $_nav_menu_placeholder;
            ?>
][menu-item-object]" value="<?php 
            echo $slug;
            ?>
" />
						<input type="hidden" class="menu-item-parent-id" name="menu-item[<?php 
            echo $_nav_menu_placeholder;
            ?>
][menu-item-parent-id]" value="0">
						<input type="hidden" class="menu-item-type" name="menu-item[<?php 
            echo $_nav_menu_placeholder;
            ?>
][menu-item-type]" value="<?php 
            echo SmartCollection::$taxon;
            ?>
" />
						<input type="hidden" class="menu-item-title" name="menu-item[<?php 
            echo $_nav_menu_placeholder;
            ?>
][menu-item-title]" value="<?php 
            echo $Collection->name;
            ?>
" />

					</li>
				<?php 
        }
        ?>
				<?php 
        // Promo Collections
        $select = sDB::select(array('table' => ShoppDatabaseObject::tablename(ShoppPromo::$table), 'columns' => 'SQL_CALC_FOUND_ROWS id,name', 'where' => array("target='Catalog'", "status='enabled'"), 'orderby' => 'created DESC'));
        $Promotions = sDB::query($select, 'array');
        foreach ($Promotions as $promo) {
            $slug = sanitize_title_with_dashes($promo->name);
            ?>
					<li>
						<label class="menu-item-title">
						<input type="checkbox" name="menu-item[<?php 
            echo $_nav_menu_placeholder;
            ?>
][menu-item-shopp-collection]" value="<?php 
            echo $slug;
            ?>
" class="menu-item-checkbox" /> <?php 
            echo esc_html($promo->name);
            ?>
</label>
						<input type="hidden" class="menu-item-db-id" name="menu-item[<?php 
            echo $_nav_menu_placeholder;
            ?>
][menu-item-db-id]" value="0" />
						<input type="hidden" class="menu-item-object-id" name="menu-item[<?php 
            echo $_nav_menu_placeholder;
            ?>
][menu-item-object-id]" value="<?php 
            echo $slug;
            ?>
" />
						<input type="hidden" class="menu-item-object" name="menu-item[<?php 
            echo $_nav_menu_placeholder;
            ?>
][menu-item-object]" value="<?php 
            echo $slug;
            ?>
" />
						<input type="hidden" class="menu-item-parent-id" name="menu-item[<?php 
            echo $_nav_menu_placeholder;
            ?>
][menu-item-parent-id]" value="0">
						<input type="hidden" class="menu-item-type" name="menu-item[<?php 
            echo $_nav_menu_placeholder;
            ?>
][menu-item-type]" value="<?php 
            echo SmartCollection::$taxon;
            ?>
" />
						<input type="hidden" class="menu-item-title" name="menu-item[<?php 
            echo $_nav_menu_placeholder;
            ?>
][menu-item-title]" value="<?php 
            echo $promo->name;
            ?>
" />

					</li>
				<?php 
        }
        ?>
				</ul>

			</div>

			<p class="button-controls">
				<span class="list-controls">
					<a href="<?php 
        echo esc_url(add_query_arg(array('shopp-pages-menu-item' => 'all', 'selectall' => 1), remove_query_arg($removed_args)));
        ?>
#shopp-collections-menu-item" class="select-all"><?php 
        _e('Select All');
        ?>
</a>
				</span>

				<span class="add-to-menu">
					<span class="spinner"></span>
					<input type="submit"<?php 
        disabled($nav_menu_selected_id, 0);
        ?>
 class="button-secondary submit-add-to-menu" value="<?php 
        esc_attr_e('Add to Menu');
        ?>
" name="add-shopp-menu-item" id="submit-shopp-collections-menu-item" />
				</span>
			</p>

		</div><!-- /.customlinkdiv -->
		<?php 
    }
Exemplo n.º 11
0
 public function images()
 {
     $settings = array('gallery-previews' => array('fit' => 'all', 'size' => 240, 'quality' => 100), 'gallery-thumbnails' => array('fit' => 'all', 'size' => 64, 'quality' => 100), 'thumbnails' => array('fit' => 'all', 'size' => 96, 'quality' => 100));
     // Determine if any of the default settings exist to prevent overwriting changes
     $defaults = array_keys($settings);
     $ImageSetting = new ShoppImageSetting();
     $options = array('columns' => 'name', 'table' => $ImageSetting->_table, 'where' => array("type='{$ImageSetting->type}'", "context='{$ImageSetting->context}'", "name IN ('" . join("', '", $defaults) . "')"), 'limit' => count($defaults));
     $query = sDB::select($options);
     $existing = sDB::query($query, 'array', 'col', 'name');
     // Get the settings that need setup
     $setup = array_diff($defaults, $existing);
     foreach ($setup as $setting) {
         shopp_set_image_setting($setting, $settings[$setting]);
     }
 }
Exemplo n.º 12
0
" />
				<input type="hidden" class="menu-item-title" name="menu-item[<?php 
    echo $navmenu_placeholder;
    ?>
][menu-item-title]" value="<?php 
    echo $Collection->name;
    ?>
" />

			</li>
		<?php 
}
?>
		<?php 
// Promo Collections
$select = sDB::select(array('table' => ShoppDatabaseObject::tablename(ShoppPromo::$table), 'columns' => 'SQL_CALC_FOUND_ROWS id,name', 'where' => array("target='Catalog'", "status='enabled'"), 'orderby' => 'created DESC'));
$Promotions = sDB::query($select, 'array');
foreach ((array) $Promotions as $promo) {
    $slug = sanitize_title_with_dashes($promo->name);
    ?>
			<li>
				<label class="menu-item-title">
				<input type="checkbox" name="menu-item[<?php 
    echo $navmenu_placeholder;
    ?>
][menu-item-shopp-collection]" value="<?php 
    echo $slug;
    ?>
" class="menu-item-checkbox" /> <?php 
    echo esc_html($promo->name);
    ?>