Example #1
0
 /**
  * Boot up the core plugin
  *
  * @author Jonathan Davis
  * @since 1.3
  *
  * @return void
  **/
 public static function plugin()
 {
     global $Shopp;
     // Provide global for backwards compatibility
     $Shopp = Shopp::object();
     do_action('shopp_loaded');
 }
Example #2
0
/**
 * Registers a smart collection of products
 *
 * @api
 * @since 1.2
 *
 * @param string $name Class name of the smart collection
 * @return void
 **/
function shopp_register_collection($name = '')
{
    if (empty($name)) {
        shopp_debug(__FUNCTION__ . " failed: Collection name required.");
        return false;
    }
    $Shopp = Shopp::object();
    $namespace = apply_filters('shopp_smart_collections_slug', SmartCollection::$namespace);
    $permastruct = SmartCollection::$taxon;
    $slugs = SmartCollection::slugs($name);
    $slug = $slugs[0];
    $Shopp->Collections[$slug] = $name;
    do_action('shopp_register_collection', $name, $slug);
    $slugs = SmartCollection::slugs($name);
    add_rewrite_tag("%{$permastruct}%", "([^/]+)");
    add_permastruct($permastruct, ShoppPages()->baseslug() . "/{$namespace}/%shopp_collection%", false);
    add_filter($permastruct . '_rewrite_rules', array('ProductCollection', 'pagerewrites'));
    $apicall = create_function('$result, $options, $O', 'ShoppCollection( new ' . $name . '($options) );
		return ShoppStorefrontThemeAPI::category($result, $options, $O);');
    foreach ((array) $slugs as $collection) {
        $collection = str_replace(array('-', '_'), '', $collection);
        // Sanitize slugs
        add_filter('shopp_themeapi_storefront_' . $collection . 'products', $apicall, 10, 3);
        // @deprecated
        add_filter('shopp_themeapi_storefront_' . $collection . 'collection', $apicall, 10, 3);
    }
    // Add special default permalink handling for collection URLs (only add it once)
    global $wp_rewrite;
    if (!$wp_rewrite->using_permalinks() && false === has_filter('term_link', array('SmartCollection', 'defaultlinks'))) {
        add_filter('term_link', array('SmartCollection', 'defaultlinks'), 10, 3);
    }
}
Example #3
0
 public function screen()
 {
     if (!current_user_can('shopp_settings')) {
         wp_die(__('You do not have sufficient permissions to access this page.'));
     }
     // Welcome screen handling
     if (!empty($_POST['setup'])) {
         shopp_set_setting('display_welcome', 'off');
     }
     $countries = ShoppLookup::countries();
     $basecountry = ShoppBaseLocale()->country();
     $countrymenu = Shopp::menuoptions($countries, $basecountry, true);
     $basestates = ShoppLookup::country_zones(array($basecountry));
     $statesmenu = '';
     if (!empty($basestates)) {
         $statesmenu = Shopp::menuoptions($basestates[$basecountry], ShoppBaseLocale()->state(), true);
     }
     $targets = shopp_setting('target_markets');
     if (is_array($targets)) {
         $targets = array_map('stripslashes', $targets);
     }
     if (!$targets) {
         $targets = array();
     }
     $zones_ajaxurl = wp_nonce_url(admin_url('admin-ajax.php'), 'wp_ajax_shopp_country_zones');
     include $this->ui('setup.php');
 }
Example #4
0
function settings_meta_box($Customer)
{
    ?>
	<p>
		<span>
		<input type="hidden" name="marketing" value="no" />
		<input type="checkbox" id="marketing" name="marketing" value="yes"<?php 
    echo $Customer->marketing == 'yes' ? ' checked="checked"' : '';
    ?>
/>
		<label for="marketing" class="inline">&nbsp;<?php 
    _e('Subscribes to marketing', 'Shopp');
    ?>
</label>
		</span>
	</p>
	<br class="clear" />
	<p>
		<span>
		<select name="type"><?php 
    echo Shopp::menuoptions(Lookup::customer_types(), $Customer->type);
    ?>
</select>
		<label for="type"><?php 
    _e('Customer Type', 'Shopp');
    ?>
</label>
		</span>
	</p>
	<br class="clear" />
	<?php 
    do_action('shopp_customer_editor_settings', $Customer);
}
Example #5
0
 public function screen()
 {
     $status = 'available';
     if (!is_dir($this->theme_path)) {
         $status = 'directory';
     } else {
         if (!is_writable($this->theme_path)) {
             $status = 'permissions';
         } else {
             $builtin = array_filter(scandir($this->template_path), 'filter_dotfiles');
             $theme = array_filter(scandir($this->theme_path), 'filter_dotfiles');
             if (empty($theme)) {
                 $status = 'ready';
             } elseif (array_diff($builtin, $theme)) {
                 $status = 'incomplete';
             }
         }
     }
     $category_views = array('grid' => Shopp::__('Grid'), 'list' => Shopp::__('List'));
     $row_products = array(2, 3, 4, 5, 6, 7);
     $productOrderOptions = ProductCategory::sortoptions();
     $productOrderOptions['custom'] = Shopp::__('Custom');
     $orderOptions = array('ASC' => Shopp::__('Order'), 'DESC' => Shopp::__('Reverse Order'), 'RAND' => Shopp::__('Shuffle'));
     $orderBy = array('sortorder' => Shopp::__('Custom arrangement'), 'created' => Shopp::__('Upload date'));
     include $this->ui('presentation.php');
 }
Example #6
0
 public function updates()
 {
     if (!isset($_POST['resetlog'])) {
         return;
     }
     ShoppErrorLogging()->reset();
     $this->notice(Shopp::__('The log file has been reset.'));
 }
Example #7
0
 function widget($args, $options)
 {
     $Shopp = Shopp::object();
     extract($args);
     $title = $before_title . $options['title'] . $after_title;
     unset($options['title']);
     if (empty(ShoppCollection()->id)) {
         return false;
     }
     $menu = shopp(ShoppCollection(), 'get-section-list', $options);
     echo $before_widget . $title . $menu . $after_widget;
 }
Example #8
0
 function widget($args, $options)
 {
     $Shopp = Shopp::object();
     extract($args);
     $title = $before_title . $options['title'] . $after_title;
     unset($options['title']);
     $content = shopp('storefront', 'get-sideproduct', $options);
     if (empty($content)) {
         return false;
     }
     echo $before_widget . $title . $content . $after_widget;
 }
Example #9
0
 static function InlineStyles($message)
 {
     if (false === strpos($message, '<html')) {
         return $message;
     }
     $cssfile = Shopp::locate_template(array('email.css'));
     $stylesheet = file_get_contents($cssfile);
     if (!empty($stylesheet)) {
         $Emogrifier = new Emogrifier($message, $stylesheet);
         $message = $Emogrifier->emogrify();
     }
     return $message;
 }
Example #10
0
 function widget($args, $options)
 {
     $Shopp = Shopp::object();
     if (!empty($args)) {
         extract($args);
     }
     if (empty($options['title'])) {
         $options['title'] = __('Shop Search', 'Shopp');
     }
     $title = $before_title . $options['title'] . $after_title;
     $content = shopp('catalog', 'get-searchform');
     echo $before_widget . $title . $content . $after_widget;
 }
Example #11
0
 function widget($args, $options)
 {
     $Shopp = Shopp::object();
     if (!empty($args)) {
         extract($args);
     }
     if (empty($options['title'])) {
         $options['title'] = "Product Tags";
     }
     $title = $before_title . $options['title'] . $after_title;
     $tagcloud = shopp('catalog', 'get-tagcloud', $options);
     echo $before_widget . $title . $tagcloud . $after_widget;
 }
Example #12
0
 public function screen()
 {
     $Shopp = Shopp::object();
     if (!current_user_can('shopp_settings_checkout')) {
         wp_die(__('You do not have sufficient permissions to access this page.'));
     }
     $purchasetable = ShoppDatabaseObject::tablename(ShoppPurchase::$table);
     $next = sDB::query("SELECT IF ((MAX(id)) > 0,(MAX(id)+1),1) AS id FROM {$purchasetable} LIMIT 1");
     $next_setting = shopp_setting('next_order_id');
     if ($next->id > $next_setting) {
         $next_setting = $next->id;
     }
     $term_recount = false;
     if (!empty($_POST['save'])) {
         check_admin_referer('shopp-setup-management');
         $next_order_id = $_POST['settings']['next_order_id'] = intval($_POST['settings']['next_order_id']);
         if ($next_order_id >= $next->id) {
             if (sDB::query("ALTER TABLE {$purchasetable} AUTO_INCREMENT=" . sDB::escape($next_order_id))) {
                 $next_setting = $next_order_id;
             }
         }
         $_POST['settings']['order_shipfee'] = Shopp::floatval($_POST['settings']['order_shipfee']);
         // Recount terms when this setting changes
         if (isset($_POST['settings']['inventory']) && $_POST['settings']['inventory'] != shopp_setting('inventory')) {
             $term_recount = true;
         }
         shopp_set_formsettings();
         $this->notice(Shopp::__('Management settings saved.'), 'notice', 20);
     }
     if ($term_recount) {
         $taxonomy = ProductCategory::$taxon;
         $terms = get_terms($taxonomy, array('hide_empty' => 0, 'fields' => 'ids'));
         if (!empty($terms)) {
             wp_update_term_count_now($terms, $taxonomy);
         }
     }
     $states = array(__('Map the label to an order state:', 'Shopp') => array_merge(array('' => ''), Lookup::txnstatus_labels()));
     $statusLabels = shopp_setting('order_status');
     $statesLabels = shopp_setting('order_states');
     $reasonLabels = shopp_setting('cancel_reasons');
     if (empty($reasonLabels)) {
         $reasonLabels = array(__('Not as described or expected', 'Shopp'), __('Wrong size', 'Shopp'), __('Found better prices elsewhere', 'Shopp'), __('Product is missing parts', 'Shopp'), __('Product is defective or damaaged', 'Shopp'), __('Took too long to deliver', 'Shopp'), __('Item out of stock', 'Shopp'), __('Customer request to cancel', 'Shopp'), __('Item discontinued', 'Shopp'), __('Other reason', 'Shopp'));
     }
     $promolimit = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '15', '20', '25');
     $lowstock = shopp_setting('lowstock_level');
     if (empty($lowstock)) {
         $lowstock = 0;
     }
     include $this->ui('management.php');
 }
Example #13
0
/**
 * Add a sub-menu to a Shopp menu
 *
 * @api
 * @since 1.3
 *
 * @param string $label	The translated label to use for the menu
 * @param string $page The Shopp-internal menu page name (plugin prefix will be automatically added)
 * @param string $menu The Shopp-internal menu page name to append the submenu to
 * @param mixed $handler The callback handler to use to handle the page
 * @param string $access The access capability required to see the menu
 * @return integer The position the menu was added
 **/
function shopp_admin_add_submenu($label, $page, $menu = null, $handler = false, $access = null)
{
    $Admin = ShoppAdmin();
    if (is_null($menu)) {
        $Admin->mainmenu();
    }
    if (is_null($access)) {
        $access = 'none';
    }
    // Restrict access by default
    if (false === $handler) {
        $handler = array(Shopp::object()->Flow, 'admin');
    }
    if (!is_callable($handler)) {
        shopp_debug(__FUNCTION__ . " failed: The specified callback handler is not valid.");
        return false;
    }
    $menupage = add_submenu_page($menu, $label, $label, $access, $page, $handler);
    $Admin->menu($page, $menupage);
    $Admin->addtab($page, $menu);
    do_action("shopp_add_menu_{$page}");
    return $menupage;
}
Example #14
0
 public function column_title($Item)
 {
     $title = empty($Item->title) ? '(' . Shopp::__('not set') . ')' : $Item->title;
     $edit_link = wp_nonce_url(add_query_arg('edit', $Item->id), 'shopp-settings-pages');
     echo '<a class="row-title edit" href="' . $edit_link . '" title="' . Shopp::__('Edit') . ' &quot;' . esc_attr($title) . '&quot;">' . esc_html($title) . '</a>';
     echo $this->row_actions(array('edit' => '<a class="edit" href="' . $edit_link . '">' . __('Edit') . '</a>'));
 }
Example #15
0
?>
,
	uidir = '<?php 
echo SHOPP_ADMIN_URI;
?>
',
	siteurl = '<?php 
bloginfo('url');
?>
',
	screenid = '<?php 
echo get_current_screen()->id;
?>
',
	canonurl = '<?php 
echo trailingslashit(Shopp::url());
?>
',
	adminurl = '<?php 
echo admin_url();
?>
',
	sugg_url = '<?php 
echo wp_nonce_url(admin_url('admin-ajax.php'), "wp_ajax_shopp_storage_suggestions");
?>
',
	tagsugg_url = '<?php 
echo wp_nonce_url(admin_url('admin-ajax.php'), "wp_ajax_shopp_suggestions");
?>
',
	spectemp_url = '<?php 
Example #16
0
 /**
  * Provide the customer account page URL
  *
  * @api `shopp('customer.url')`
  * @since 1.0
  *
  * @param string        $result  The output
  * @param array         $options The options
  * @param ShoppCustomer $O       The working object
  * @return string The page URL
  **/
 public static function url($result, $options, $O)
 {
     $Shopp = Shopp::object();
     return Shopp::url(array('acct' => null), 'account', $Shopp->Gateways->secure);
 }
Example #17
0
 /**
  * Sets handlers for Shopp shortcodes
  *
  * @author Jonathan Davis
  * @since 1.1
  *
  * @return void
  **/
 public function shortcodes()
 {
     $this->shortcodes = array();
     // Additional shortcode functionality
     $this->shortcodes['catalog-product'] = array('ShoppShortcodes', 'product');
     $this->shortcodes['catalog-buynow'] = array('ShoppShortcodes', 'buynow');
     $this->shortcodes['catalog-collection'] = array('ShoppShortcodes', 'collection');
     foreach ($this->shortcodes as $name => &$callback) {
         if (shopp_setting_enabled('maintenance') || !ShoppSettings()->available() || Shopp::maintenance()) {
             add_shortcode($name, array('', 'maintenance_shortcode'));
         } else {
             add_shortcode($name, $callback);
         }
     }
 }
Example #18
0
$this->notices();
?>


	<?php 
$totalsedit = isset($_GET['edit']) && 'totals' == $_GET['edit'];
$columns = get_column_headers($this->screen);
$hidden = get_hidden_columns($this->screen);
$colspan = count($columns);
$timestamp = empty($Purchase->created) ? current_time('timestamp') : $Purchase->created;
?>
	<div id="order">
		<div class="title">
			<div id="titlewrap">
				<span class="date"><?php 
echo Shopp::_d(get_option('date_format'), $timestamp);
?>
 <small><?php 
echo date(get_option('time_format'), $timestamp);
?>
</small>

				<div class="alignright">

					<?php 
if ($Purchase->shipped) {
    ?>
					<div class="stamp shipped<?php 
    if ($Purchase->isvoid()) {
        echo ' void';
    }
Example #19
0
 /**
  * Adds a ShoppAdminPage entry to the WordPress menus under the Shopp menus
  *
  * @author Jonathan Davis
  * @since 1.1
  *
  * @param ShoppAdminPage $Page A ShoppAdminPage object
  * @return void
  **/
 private function submenus(ShoppAdminPage $Page)
 {
     $name = $Page->name;
     $pagehook = $Page->page;
     // Set capability
     $capability = isset($this->caps[$name]) ? $this->caps[$name] : 'none';
     $taxonomies = get_object_taxonomies(ShoppProduct::$posttype, 'names');
     if (in_array("shopp_{$name}", $taxonomies)) {
         $capability = 'shopp_categories';
     }
     // Set controller (callback handler)
     $controller = array(ShoppAdmin(), 'route');
     if (Shopp::upgradedb()) {
         $controller = array('ShoppAdmin', 'updatedb');
     }
     $menu = $Page->parent ? $Page->parent : $this->mainmenu;
     shopp_admin_add_submenu($Page->label, $pagehook, $menu, $controller, $capability);
 }
Example #20
0
 protected function title()
 {
     return Shopp::__('Billing Address');
 }
Example #21
0
 public static function process()
 {
     // We have to avoid truthiness, hence the strange logic expression
     if (true !== apply_filters('shopp_validate_registration', true)) {
         return;
     }
     $Customer = ShoppOrder()->Customer;
     do_action('shopp_customer_registration', $Customer);
     if ($Customer->session(ShoppCustomer::GUEST)) {
         $Customer->type = __('Guest', 'Shopp');
         // No cuts
         $Customer->wpuser = 0;
         // No buts
         unset($Customer->password);
         // No coconuts
     } else {
         // WordPress account integration used, customer has no wp user
         if ('wordpress' == shopp_setting('account_system') && empty($Customer->wpuser)) {
             if ($wpuser = get_current_user_id()) {
                 $Customer->wpuser = $wpuser;
             } else {
                 $Customer->create_wpuser();
             }
             // not logged in, create new account
         }
         if (!$Customer->exists(true)) {
             $Customer->id = false;
             shopp_debug('Creating new Shopp customer record');
             if (empty($Customer->password)) {
                 $Customer->password = wp_generate_password(12, true);
             }
             if ('shopp' == shopp_setting('account_system')) {
                 $Customer->notification();
             }
             $Customer->password = wp_hash_password($Customer->password);
             if (isset($Customer->passhash)) {
                 $Customer->password = $Customer->passhash;
             }
         } else {
             unset($Customer->password);
         }
         // Existing customer, do not overwrite password field!
     }
     // New customer, save hashed password
     $Customer->save();
     $Customer->password = '';
     // Update billing and shipping addresses
     $addresses = array('Billing', 'Shipping');
     foreach ($addresses as $Address) {
         if (empty(ShoppOrder()->{$Address}->address)) {
             continue;
         }
         $Address = ShoppOrder()->{$Address};
         $Address->customer = $Customer->id;
         $Address->save();
     }
     do_action('shopp_customer_registered', $Customer);
     // Auto-login
     $Customer->login();
     // Login the customer
     if (!empty($Customer->wpuser)) {
         // Log the WordPress user in
         ShoppLogin::wpuser(get_user_by('id', $Customer->wpuser));
     }
     if (apply_filters('shopp_registration_redirect', false)) {
         Shopp::redirect(Shopp::url(false, 'account'));
     }
 }
Example #22
0
 public function label()
 {
     return Shopp::__('Shipping');
 }
Example #23
0
?>
</label></th>
		<td><input type="hidden" name="settings[inventory]" value="off" /><input type="checkbox" name="settings[inventory]" value="on" id="inventory-toggle"<?php 
if (shopp_setting_enabled('inventory')) {
    echo ' checked="checked"';
}
?>
 /><label for="inventory-toggle"> <?php 
Shopp::_e('Enable inventory tracking', 'Shopp');
?>
</label><br />
		<?php 
Shopp::_e('Enables inventory tracking. Disable if you are exclusively selling intangible products or not keeping track of product stock.');
?>
</td>
	</tr>
</table>

<p class="submit"><input type="submit" class="button-primary" name="save" value="<?php 
Shopp::_e('Save Changes');
?>
" /></p>

<script type="text/javascript">
/* <![CDATA[ */
	var zones_url = '<?php 
echo $zones_ajaxurl;
?>
';
/* ]]> */
</script>
Example #24
0
 public function column_conditional($Item)
 {
     $conditionals = count($Item['rules']) > 0;
     $this->checkbox($conditionals, $conditionals ? Shopp::__('This tax setting has conditional rules defined.') : Shopp::__('No conditions are defined for this tax rate.'));
 }
Example #25
0
 public function column_name($Item)
 {
     echo '<a class="row-title edit" href="' . $editurl . '" title="' . Shopp::__('Edit') . ' &quot;' . esc_attr($Item->name) . '&quot;">' . esc_html($Item->name) . '</a>';
     $edit_link = wp_nonce_url(add_query_arg('id', $Item->id), 'shopp-settings-images');
     $delete_link = wp_nonce_url(add_query_arg('delete', $Item->id), 'shopp-settings-images');
     echo $this->row_actions(array('edit' => '<a class="edit" href="' . $edit_link . '">' . __('Edit') . '</a>', 'delete' => '<a class="delete" href="' . $delete_link . '">' . __('Delete') . '</a>'));
 }
Example #26
0
 public function setobject($Object, $context)
 {
     if (is_object($Object)) {
         return $Object;
     }
     // always use if first argument is an object
     $api = $this->classname;
     $apicontext = call_user_func(array($api, '_apicontext'));
     if (strtolower($context) != strtolower($apicontext)) {
         return $Object;
     }
     // do nothing
     $Shopp = Shopp::object();
     $property = ucfirst($apicontext);
     if (property_exists($Shopp, $property)) {
         return $Shopp->{$property};
     }
     return false;
 }
Example #27
0
?>

	<br class="clear" />

	<?php 
$totalsedit = isset($_GET['edit']) && 'totals' == $_GET['edit'];
$columns = get_column_headers($this->id);
$hidden = get_hidden_columns($this->id);
$colspan = count($columns);
?>
	<div id="order">
			<div class="title">
				<div id="titlewrap">
				<span class="date"><?php 
$datetime = $Purchase->exists() ? $Purchase->created : current_time('timestamp');
echo Shopp::_d(get_option('date_format'), $datetime);
?>
 <small><?php 
echo date(get_option('time_format'), $datetime);
?>
</small>

					<div class="alignright">

						<?php 
if ($Purchase->shipped) {
    ?>
					<div class="stamp shipped<?php 
    if ($Purchase->isvoid()) {
        echo ' void';
    }
Example #28
0
 /**
  * Generates the output for the exported report
  *
  * @author Jonathan Davis
  * @since 1.3
  *
  * @return void
  **/
 public function output()
 {
     if (empty($this->data)) {
         Shopp::redirect(add_query_arg(array_merge($_GET, array('src' => null)), admin_url('admin.php')));
     }
     $sitename = get_bloginfo('name');
     $report = $this->options['report'];
     $reports = ShoppAdminReport::reports();
     $name = $reports[$report]['name'];
     header("Content-type: {$this->content_type}");
     header("Content-Disposition: attachment; filename=\"{$sitename} {$name}.{$this->extension}\"");
     header("Content-Description: Delivered by " . ShoppVersion::agent());
     header("Cache-Control: maxage=1");
     header("Pragma: public");
     $this->begin();
     if ($this->headings) {
         $this->heading();
     }
     $this->records();
     $this->end();
 }
Example #29
0
<?php

$editaddress = ShoppAdminCustomerBillingAddressBox::editor($Customer, 'shipping');
$address = array('${type}' => 'shipping', '${address}' => $Customer->Shipping->address, '${xaddress}' => $Customer->Shipping->xaddress, '${city}' => $Customer->Shipping->city, '${state}' => $Customer->Shipping->state, '${postcode}' => $Customer->Shipping->postcode, '${country}' => $Customer->Shipping->country, '${statemenu}' => Shopp::menuoptions($Customer->_shipping_states, $Customer->Shipping->state, true), '${countrymenu}' => Shopp::menuoptions($Customer->_countries, $Customer->Shipping->country, true));
$js = preg_replace('/\\${([-\\w]+)}/', '$1', json_encode($address));
shopp_custom_script('customers', 'address["shipping"] = ' . $js . ';');
?>
<div id="shipping-address-editor" class="editor">
<?php 
echo ShoppUI::template($editaddress, $address);
?>
</div>
Example #30
0
All of these advanced searches can be used:

', 'Customers Manager help tab') . $table;
$Exporting = Shopp::_mx('### Exporting

Customers can be exported in a variety of formats with any number of customer data columns needed.

**Shopp supported order export formats:**

* Tab-separated.txt
* Comma-separated.csv
* Microsoft&copy; Excel.xls

For Tab-separated, comma-separated and Microsoft® Excel file formats select the columns to include for each record in the export. Enable the Include column headings option to include column names in the first line of the export file.

### Continuous Periodic Exports

Using filtering and searching you can isolate specific orders to export. Additionally, using date range filtering you can set up periodic exporting. Shopp stores the end date of each export that has date range filters enabled. This allows selecting the Last Export option from the date range drop-down menu which will automatically set the start field to the end date of the last completed export, and the end date field will be set to today’s current date.', 'Customers Manager help tab');
$sidebar = Shopp::_mx('**For more information:**

[Shopp User Guide](%s)

[Community Forums](%s)

[Shopp Support Help Desk](%s)', 'Customers Manager help tab (sidebar)', ShoppSupport::DOCS . 'orders-customers/customer-manager/', ShoppSupport::FORUMS, ShoppSupport::SUPPORT);
get_current_screen()->add_help_tab(array('id' => 'overview', 'title' => Shopp::__('Overview'), 'content' => $Overview));
get_current_screen()->add_help_tab(array('id' => 'filtering', 'title' => Shopp::__('Filtering'), 'content' => $Filtering));
get_current_screen()->add_help_tab(array('id' => 'exporting', 'title' => Shopp::__('Exporting'), 'content' => $Exporting));
get_current_screen()->add_help_tab(array('id' => 'search', 'title' => Shopp::__('Search'), 'content' => $Search));
get_current_screen()->set_help_sidebar($sidebar);