Example #1
0
 public static function permalinks()
 {
     $var = ShoppPages::QUERYVAR;
     $pageslugs = ShoppPages()->slugs();
     $catalog = $pageslugs['catalog'];
     unset($pageslugs['catalog']);
     add_rewrite_tag("%{$var}%", '(' . join('|', $pageslugs) . ')');
     add_permastruct($var, "{$catalog}/%{$var}%", false);
 }
Example #2
0
/**
 * Register a Shopp product taxonomy
 *
 * @api
 * @since 1.2
 *
 * @param string $taxonomy The taxonomy name
 * @param array $args register_taxonomy arguments
 * @return void
 **/
function shopp_register_taxonomy($taxonomy, $args = array())
{
    $taxonomy = sanitize_key($taxonomy);
    $rewrite_slug = $taxonomy;
    $taxonomy = "shopp_{$taxonomy}";
    if (isset($args['rewrite']) && isset($args['rewrite']['slug'])) {
        $rewrite_slug = $args['rewrite']['slug'];
    }
    if (!isset($args['rewrite'])) {
        $args['rewrite'] = array();
    }
    $args['rewrite']['slug'] = SHOPP_NAMESPACE_TAXONOMIES ? ShoppPages()->baseslug() . '/' . $rewrite_slug : $rewrite_slug;
    register_taxonomy($taxonomy, ShoppProduct::$posttype, $args);
}
Example #3
0
 public function prepare_items()
 {
     $this->id = 'pages';
     $settings = ShoppPages()->settings();
     $template = array('id' => '', 'title' => '', 'slug' => '', 'description' => '');
     foreach ($settings as $name => $page) {
         $page['id'] = $name;
         $this->items[$name] = (object) array_merge($template, $page);
     }
     $per_page = 25;
     $total = count($this->items);
     $this->set_pagination_args(array('total_items' => $total, 'total_pages' => $total / $per_page, 'per_page' => $per_page));
     shopp_custom_script('pageset', 'var pages = ' . json_encode($this->items) . ';');
 }
Example #4
0
 /**
  * Manages CSS relationship classes applied to Shopp elements appearing in a WordPress navigation menu
  *
  * @author Jonathan Davis
  * @since 1.2
  *
  * @param array $menuitems The provided WordPress menu items
  * @return array Updated menu items with proper relationship classes
  **/
 public function menus($menuitems)
 {
     $is_shopp_page = is_shopp_page();
     $keymap = array();
     $parents = array();
     foreach ($menuitems as $key => $item) {
         $page = false;
         // Remove the faulty wp_page_menu (deprecated) class for Shopp pages
         if ($is_shopp_page && in_array('current_page_parent', $item->classes)) {
             unset($item->classes[array_search('current_page_parent', $item->classes)]);
         }
         // Otherwise, skip dealing with any non-Shopp page
         if (ShoppPages::QUERYVAR == $item->type) {
             // Determine the queried Shopp page object name
             $Page = ShoppPages()->requested();
             if ($Page && !is_shopp_collection()) {
                 $page = $Page->name();
             }
             // Set the catalog as current page parent
             if ('catalog' == $item->object && ($is_shopp_page || is_shopp_product())) {
                 $item->classes[] = 'current-page-parent';
             }
             $keymap[$item->db_id] = $key;
         }
         if ('shopp_collection' == $item->type) {
             $page = get_query_var($item->type);
             $keymap[$item->db_id] = $key;
         }
         if ($page == $item->object) {
             $item->classes[] = 'current-page-item';
             $item->classes[] = 'current-menu-item';
             $parents[] = $item->menu_item_parent;
         }
     }
     foreach ((array) $parents as $parentid) {
         if (!isset($keymap[$parentid])) {
             continue;
         }
         $parent = $menuitems[$keymap[$parentid]];
         $parent->classes[] = 'current-menu-parent';
         $parent->classes[] = 'current-page-parent';
         $parent->classes[] = 'current-menu-ancestor';
         $parent->classes[] = 'current-page-ancestor';
         $ancestor = $parent;
         while (0 != $ancestor->menu_item_parent) {
             $ancestor = $menuitems[$keymap[$ancestor->menu_item_parent]];
             $ancestor->classes[] = 'current-menu-ancestor';
             $ancestor->classes[] = 'current-page-ancestor';
         }
     }
     return $menuitems;
 }
Example #5
0
 /**
  * Adds Shopp-specific mod_rewrite rule for low-resource, speedy image server and downloads request handler
  *
  * @author Jonathan Davis
  * @since 1.0
  *
  * @param array $wp_rewrite_rules An array of existing WordPress rewrite rules
  * @return array Rewrite rules
  **/
 public function rewrites($wp_rewrite_rules)
 {
     global $is_IIS;
     $structure = get_option('permalink_structure');
     if ('' == $structure) {
         return $wp_rewrite_rules;
     }
     $path = str_replace('%2F', '/', urlencode(join('/', array(PLUGINDIR, SHOPP_DIR, 'services'))));
     // Download URL rewrites
     $AccountPage = ShoppPages()->get('account');
     if (empty($AccountPage)) {
         // Ensure a ShoppAccountPage is available #2862
         ShoppPages()->register('ShoppAccountPage');
         $AccountPage = ShoppPages()->get('account');
     }
     $downloads = array(ShoppPages()->baseslug(), $AccountPage->slug(), 'download', '([a-f0-9]{40})', '?$');
     if ($is_IIS && 0 === strpos($structure, '/index.php/')) {
         array_unshift($downloads, 'index.php');
     }
     $rules = array(join('/', $downloads) => 'index.php?src=download&shopp_download=$matches[1]');
     // Image URL rewrite
     $images = array(ShoppPages()->baseslug(), 'images', '(\\d+)', "?\\??(.*)\$");
     add_rewrite_rule(join('/', $images), $path . '/image.php?siid=$1&$2');
     return $rules + (array) $wp_rewrite_rules;
 }
Example #6
0
/**
 * Determines if the requested page is a Shopp page or if it matches a given Shopp page
 *
 * Also checks to see if the current loaded query is a Shopp product or product taxonomy.
 *
 * @api
 * @since 1.0
 *
 * @param string $page (optional) System page name ID for the correct ShoppStorefront page {@see ShoppPages class}
 * @param WP_Query $wp_query (optional) will use the global wp_query by default if false, or the provided WP_Query object
 * @return boolean
 **/
function is_shopp_page($page = false, $wp_query = false)
{
    if (false === $wp_query) {
        global $wp_the_query;
        $wp_query = $wp_the_query;
    }
    if (empty($wp_query->query_vars)) {
        shopp_debug('Conditional is_shopp_page functions do not work before the WordPress query is run. Before then, they always return false.');
    }
    $is_shopp_page = false;
    $Page = ShoppPages()->requested();
    if (false === $page) {
        // Check if the current request is a shopp page request
        // Product and collection pages are considered a Shopp page request
        if (is_shopp_product($wp_query) || $wp_query->get('post_type') == ShoppProduct::$posttype) {
            $is_shopp_page = true;
        }
        if (is_shopp_collection($wp_query)) {
            $is_shopp_page = true;
        }
        if (false !== $Page) {
            $is_shopp_page = true;
        }
    } elseif (false !== $Page) {
        // Check if the given shopp page name is the current request
        if ($Page->name() == $page) {
            $is_shopp_page = true;
        }
    }
    return $is_shopp_page;
}
Example #7
0
 public function pages()
 {
     if (!current_user_can('shopp_settings')) {
         wp_die(__('You do not have sufficient permissions to access this page.'));
     }
     if (!empty($_POST['save'])) {
         check_admin_referer('shopp-settings-pages');
         $CatalogPage = ShoppPages()->get('catalog');
         $catalog_slug = $CatalogPage->slug();
         $defaults = ShoppPages()->settings();
         $_POST['settings']['storefront_pages'] = array_merge($defaults, $_POST['settings']['storefront_pages']);
         shopp_set_formsettings();
         // Re-register page, collection, taxonomies and product rewrites
         // so that the new slugs work immediately
         $Shopp = Shopp::object();
         $Shopp->pages();
         $Shopp->collections();
         $Shopp->taxonomies();
         $Shopp->products();
         // If the catalog slug changes
         // $hardflush is false (soft flush... plenty of fiber, no .htaccess update needed)
         $hardflush = ShoppPages()->baseslug() != $catalog_slug;
         flush_rewrite_rules($hardflush);
     }
     $pages = ShoppPages()->settings();
     include $this->ui('pages.php');
 }
Example #8
0
 static function register($class)
 {
     global $ShoppTaxonomies;
     $namespace = get_class_property($class, 'namespace');
     $taxonomy = get_class_property($class, 'taxon');
     $hierarchical = get_class_property($class, 'hierarchical');
     $slug = SHOPP_NAMESPACE_TAXONOMIES ? ShoppPages()->baseslug() . '/' . $namespace : $namespace;
     register_taxonomy($taxonomy, array(ShoppProduct::$posttype), apply_filters('shopp_register_taxonomy_' . $taxonomy, array('hierarchical' => $hierarchical, 'labels' => call_user_func(array($class, 'labels'), $class), 'show_ui' => true, 'query_var' => true, 'rewrite' => array('slug' => $slug, 'with_front' => false), 'update_count_callback' => array('ProductTaxonomy', 'recount'), 'capabilities' => array('manage_terms' => 'shopp_categories', 'edit_terms' => 'shopp_categories', 'delete_terms' => 'shopp_categories', 'assign_terms' => 'shopp_categories'))));
     add_filter($taxonomy . '_rewrite_rules', array('ProductCollection', 'pagerewrites'));
     $ShoppTaxonomies[$taxonomy] = $class;
 }
Example #9
0
 /**
  * Generates canonical storefront URLs that respects the WordPress permalink settings
  *
  * @author Jonathan Davis
  * @since 1.1
  * @version 1.2
  *
  * @param mixed $request Additional URI requests
  * @param string $page The gateway page
  * @param boolean $secure (optional) True for secure URLs, false to force unsecure URLs
  * @return string The final URL
  **/
 public static function url($request = false, $page = 'catalog', $secure = null)
 {
     global $wp_rewrite;
     $prettyurls = $wp_rewrite->using_permalinks();
     // Support IIS index.php/ prefixed permalinks
     if ($wp_rewrite->using_index_permalinks()) {
         $path[] = 'index.php';
     }
     $path[] = ShoppPages()->baseslug();
     // Build request path based on Storefront shopp_page requested
     if ('images' == $page) {
         $path[] = 'images';
         if (!$prettyurls) {
             $request = array('siid' => $request);
         }
     } else {
         if (false !== $page) {
             $Page = ShoppPages()->get($page);
             if (method_exists($Page, 'slug')) {
                 $page_slug = $Page->slug();
             }
         }
         if ($page != 'catalog' && !empty($page_slug)) {
             $path[] = $page_slug;
         }
     }
     // Change the URL scheme as necessary
     $scheme = null;
     // Full-auto
     if ($secure === false) {
         $scheme = 'http';
     } elseif (($secure || is_ssl()) && !SHOPP_NOSSL) {
         $scheme = 'https';
     }
     // HTTPS required
     $url = home_url(false, $scheme);
     if ($prettyurls) {
         $url = home_url(join('/', $path), $scheme);
     }
     if (false !== strpos($url, '?')) {
         list($url, $query) = explode('?', $url);
     }
     $url = trailingslashit($url);
     if (!empty($query)) {
         parse_str($query, $home_queryvars);
         if (false === $request) {
             $request = array_merge($home_queryvars, array());
         } else {
             $request = array($request);
             array_push($request, $home_queryvars);
         }
     }
     if (!$prettyurls) {
         $url = isset($page_slug) ? add_query_arg('shopp_page', $page_slug, $url) : $url;
     }
     // No extra request, return the complete URL
     if (!$request) {
         return apply_filters('shopp_url', $url);
     }
     // Filter URI request
     $uri = false;
     if (!is_array($request)) {
         $uri = urldecode($request);
     }
     if (is_array($request) && isset($request[0])) {
         $uri = array_shift($request);
     }
     if (!empty($uri)) {
         $uri = join('/', array_map('urlencode', explode('/', $uri)));
     }
     // sanitize
     $url .= $uri;
     if (false === strpos(basename($uri), '.')) {
         // Not an image URL
         $url = user_trailingslashit($url);
     }
     if (!empty($request) && is_array($request)) {
         $request = array_map('urldecode', $request);
         $request = array_map('urlencode', $request);
         $url = add_query_arg($request, $url);
     }
     return apply_filters('shopp_url', $url);
 }
Example #10
0
 /**
  * Modify the request for ShoppPages
  *
  * @since 1.4
  *
  * @return void
  **/
 protected function request()
 {
     global $nav_menu_selected_id;
     $request = $_POST;
     if (!isset($request['add-shopp-menu-item'])) {
         return;
     }
     if (!isset($request['menu-item'])) {
         return;
     }
     // $pages = ShoppStorefront::pages_settings();
     $nav_menu_selected_id = isset($_POST['menu']) ? (int) $_POST['menu'] : 0;
     foreach ((array) $request['menu-item'] as $key => $item) {
         if (!isset($item['menu-item-shopp-page'])) {
             continue;
         }
         $requested = $item['menu-item-shopp-page'];
         $Page = ShoppPages()->get($requested);
         $menuitem =& $_REQUEST['menu-item'][$key];
         $menuitem['menu-item-db-id'] = 0;
         $menuitem['menu-item-object-id'] = $requested;
         $menuitem['menu-item-object'] = $requested;
         $menuitem['menu-item-type'] = ShoppPages::QUERYVAR;
         $menuitem['menu-item-title'] = $Page->title();
     }
 }
Example #11
0
 /**
  * Handle login redirects
  *
  * @author Jonathan Davis
  * @since 1.2
  *
  * @return void
  **/
 public function redirect()
 {
     $redirect = false;
     $secure = ShoppOrder()->security();
     if (isset($_REQUEST['redirect']) && !empty($_REQUEST['redirect'])) {
         if (ShoppPages()->exists($_REQUEST['redirect'])) {
             $redirect = Shopp::url(false, $_REQUEST['redirect'], $secure);
         } else {
             $redirect = $_REQUEST['redirect'];
         }
     }
     if (!$redirect) {
         $redirect = apply_filters('shopp_login_redirect', Shopp::url(false, 'account', $secure));
     }
     Shopp::safe_redirect($redirect);
 }
Example #12
0
		<div class="shopp-pages-menu-item taxonomydiv" id="shopp-pages-menu-item">
			<div id="tabs-panel-shopp-pages" class="tabs-panel tabs-panel-active">

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

				<?php 
foreach (ShoppPages() as $name => $Page) {
    $navmenu_placeholder = 0 > $navmenu_placeholder ? $navmenu_placeholder - 1 : -1;
    ?>
					<li>
						<label class="menu-item-title">
						<input type="checkbox" name="menu-item[<?php 
    esc_html_e($navmenu_placeholder);
    ?>
][menu-item-shopp-page]" value="<?php 
    esc_attr_e($Page->slug());
    ?>
" class="menu-item-checkbox" /> <?php 
    echo esc_html($Page->title());
    ?>
</label>
						<input type="hidden" class="menu-item-db-id" name="menu-item[<?php 
    esc_attr_e($navmenu_placeholder);
    ?>
][menu-item-db-id]" value="0" />
						<input type="hidden" class="menu-item-object-id" name="menu-item[<?php 
    esc_attr_e($navmenu_placeholder);
    ?>
][menu-item-object-id]" value="<?php 
    esc_attr_e($name);
    ?>
Example #13
0
    public static function shoppage_meta_box()
    {
        global $_nav_menu_placeholder, $nav_menu_selected_id;
        $removed_args = array('action', 'customlink-tab', 'edit-menu-item', 'menu-item', 'page-tab', '_wpnonce');
        ?>
		<br />
		<div class="shopp-pages-menu-item customlinkdiv" id="shopp-pages-menu-item">
			<div id="tabs-panel-shopp-pages" class="tabs-panel tabs-panel-active">

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

				<?php 
        foreach (ShoppPages() as $name => $Page) {
            $_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 
            esc_html_e($_nav_menu_placeholder);
            ?>
][menu-item-shopp-page]" value="<?php 
            esc_attr_e($pagetype);
            ?>
" class="menu-item-checkbox" /> <?php 
            echo esc_html($Page->title());
            ?>
</label>
						<input type="hidden" class="menu-item-db-id" name="menu-item[<?php 
            esc_attr_e($_nav_menu_placeholder);
            ?>
][menu-item-db-id]" value="0" />
						<input type="hidden" class="menu-item-object-id" name="menu-item[<?php 
            esc_attr_e($_nav_menu_placeholder);
            ?>
][menu-item-object-id]" value="<?php 
            esc_attr_e($name);
            ?>
" />
						<input type="hidden" class="menu-item-object" name="menu-item[<?php 
            esc_attr_e($_nav_menu_placeholder);
            ?>
][menu-item-object]" value="<?php 
            esc_attr_e($name);
            ?>
" />
						<input type="hidden" class="menu-item-parent-id" name="menu-item[<?php 
            esc_attr_e($_nav_menu_placeholder);
            ?>
][menu-item-parent-id]" value="0">
						<input type="hidden" class="menu-item-type" name="menu-item[<?php 
            esc_attr_e($_nav_menu_placeholder);
            ?>
][menu-item-type]" value="<?php 
            esc_attr_e(ShoppPages::QUERYVAR);
            ?>
" />
						<input type="hidden" class="menu-item-title" name="menu-item[<?php 
            esc_attr_e($_nav_menu_placeholder);
            ?>
][menu-item-title]" value="<?php 
            esc_attr_e($Page->title());
            ?>
" />

					</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-pages-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-pages-menu-item" />
				</span>
			</p>

		</div><!-- /.customlinkdiv -->
		<?php 
    }