WordPress.org

Plugin Directory

Changeset 528774


Ignore:
Timestamp:
04/08/12 08:58:49 (2 years ago)
Author:
ldebrouwer
Message:

Version 0.3 of the plugin. Did a rewrite of the code, built in some new feautures.

Location:
affiliate-press/trunk
Files:
3 added
5 edited

Legend:

Unmodified
Added
Removed
  • affiliate-press/trunk/affiliate-press.php

    r528570 r528774  
    22/** 
    33 * @package Affiliate_Press 
    4  * @version 0.2.1 
     4 * @version 0.3 
    55 */ 
    66/* 
     
    99Description: Affiliate Press allows you to set up an affiliate website based on product feeds as easy as 1-2-3. 
    1010Author: ldebrouwer 
    11 Version: 0.2.1 
     11Version: 0.3 
    1212Author URI: http://lucdebrouwer.nl/ 
    1313*/ 
     
    1616define( 'LDB_AP_PATH', plugin_dir_path( __FILE__ ) ); 
    1717define( 'LDB_AP_VIEW_PATH', plugin_dir_path( __FILE__ ) . 'views/' ); 
     18define( 'LDB_AP_VIEW_URL', plugin_dir_url( __FILE__ ) . 'views/' ); 
    1819define( 'LDB_AP_URL', plugin_dir_url( __FILE__ ) ); 
     20define( 'LDB_AP_SCRIPTS_URL', plugin_dir_url( __FILE__ ) . 'scripts/' ); 
    1921 
    2022/* Load translation */ 
     
    2931function AP_activation() { 
    3032    include( LDB_AP_PATH . 'affiliate-press-upgrade.php' ); 
    31     update_option( 'LDB_Affiliate_Press_Version', '0.2.1' ); 
     33    update_option( 'LDB_Affiliate_Press_Version', '0.3' ); 
    3234} 
    3335 
  • affiliate-press/trunk/includes/class-affiliate-press.php

    r528107 r528774  
    55    class LDB_Affiliate_Press { 
    66 
     7        /* Set the main variables */ 
    78        public $messages = array(); 
    89        public $action = false; 
    910 
     11        /* Load the custom post type, menu, meta box, stylesheet. Perform actions if needed. */ 
    1012        function __construct() { 
    1113            add_action( 'init', array( &$this, 'AP_loadCpt' ) ); 
     
    1719        } 
    1820 
     21        /* Add the menu items and add some hidden ones. */ 
     22        function AP_menu() { 
     23            $pages = array(); 
     24            $parent = add_menu_page( __( 'Affiliate Press', 'LDB_AP' ), __( 'Affiliate Press', 'LDB_AP' ), 'manage_options', 'affiliate_press', array( &$this, 'AP_dashboard' ), LDB_AP_URL . 'images/icon16.png' ); 
     25            $pages[] = $parent; 
     26            add_submenu_page( 'affiliate_press', __( 'Dashboard', 'LDB_AP' ), __( 'Dashboard', 'LDB_AP' ), 'manage_options', 'affiliate_press' ); 
     27            $pages[] = add_submenu_page( 'affiliate_press', __( 'Feeds', 'LDB_AP' ), __( 'Feeds', 'LDB_AP' ), 'manage_options', 'affiliate_press_feeds', array( &$this, 'AP_feeds' ) ); 
     28            $pages[] = add_submenu_page( 'affiliate_press', __( 'Add New Feed', 'LDB_AP' ), __( 'Add New Feed', 'LDB_AP' ), 'manage_options', 'affiliate_press_add', array( &$this, 'AP_addFeed' ) ); 
     29            foreach( $pages as $page ) 
     30                add_action( 'admin_print_styles-' . $page, array( &$this, 'AP_loadStyle' ) ); 
     31 
     32            $hiddenpages = array( 
     33                'affiliate_press_edit' => array( &$this, 'AP_editFeed' ), 
     34                'affiliate_press_view' => array( &$this, 'AP_viewFeed' ), 
     35                'affiliate_press_linktoproduct' => array( &$this, 'AP_linkToProduct' ) 
     36            ); 
     37            $this->AP_registerHiddenPages( $hiddenpages, $parent ); 
     38        } 
     39 
     40        /* Function to register the hidden pages */ 
     41        function AP_registerHiddenPages( $pages, $parent ) { 
     42            global $_registered_pages; 
     43            foreach( $pages as $slug => $function ) { 
     44                $hookname = get_plugin_page_hookname( $slug, $parent ); 
     45                if ( !empty( $hookname ) ) { 
     46                    add_action( $hookname, $function ); 
     47                } 
     48                $_registered_pages[ $hookname ] = true; 
     49                add_action( 'admin_print_styles-' . $hookname, array( &$this, 'AP_loadStyle' ) ); 
     50            } 
     51        } 
     52 
     53        /* Function to load the stylesheet and some scripts. */ 
    1954        function AP_loadStyle() { 
    2055            wp_enqueue_style( 'APstyle', LDB_AP_URL . 'styles.css' ); 
     
    2358        } 
    2459 
     60        /* Function to load the custom post type. */ 
    2561        function AP_loadCpt() { 
    2662            $labels = array( 
     
    5490            ); 
    5591            register_post_type( 'product', $args ); 
    56         } 
    57  
     92            add_filter( 'manage_product_posts_columns', array( &$this, 'AP_changeColumns' ) ); 
     93            add_filter( 'manage_product_posts_custom_column', array( &$this, 'AP_addColumnContent' ) ); 
     94            add_filter( 'manage_edit-product_sortable_columns', array( &$this, 'AP_sortableColumns' ) ); 
     95        } 
     96 
     97        /* Function that adds additional columns on the products index page. */ 
     98        function AP_changeColumns( $cols ) { 
     99            $newcols = array(); 
     100            foreach( $cols as $key => $value ) { 
     101                $newcols[ $key ] = $value; 
     102                if( $key === 'title' ) 
     103                    $newcols['prices'] = __( 'Number of prices', 'LDB_AP' ); 
     104            } 
     105            return $newcols; 
     106        } 
     107 
     108        /* Function that adds content to the additional columns on the products index page. */ 
     109        function AP_addColumnContent( $column_name ) { 
     110            global $post, $wpdb; 
     111            switch ( $column_name ) { 
     112                case 'prices' : 
     113                    $results = $wpdb->get_results( 'SELECT apfeeds.title, apfeeds.currency, apprices.price FROM ' . $wpdb->prefix . 'apprices apprices, ' . $wpdb->prefix . 'apfeeds apfeeds WHERE apprices.productID = ' . $post->ID . ' AND apprices.feedID = apfeeds.ID AND apprices.online = 1 ORDER BY apprices.price ASC' ); 
     114                    echo count( $results ); 
     115                break; 
     116            } 
     117        } 
     118 
     119        function AP_sortableColumns() { 
     120            return array( 
     121                'prices' => 'prices', 
     122                'title' => 'title', 
     123                'author' => 'author', 
     124                'date' => 'date', 
     125            ); 
     126        } 
     127 
     128        /* Function that fetches the current action, partly stolen from core. */ 
     129        function AP_currentAction() { 
     130            $action = false; 
     131 
     132            if ( isset( $_REQUEST['action'] ) && -1 != $_REQUEST['action'] ) 
     133                $action = $_REQUEST['action']; 
     134 
     135            if ( isset( $_REQUEST['action2'] ) && -1 != $_REQUEST['action2'] ) 
     136                $action = $_REQUEST['action2']; 
     137 
     138            if ( !$action && isset( $_GET['action'] ) ) 
     139                $action = $_GET['action']; 
     140 
     141            return $action; 
     142        } 
     143 
     144        /* Function to perform the actions issues by forms. */ 
    58145        function AP_performAction() { 
    59146            global $wpdb; 
     
    123210                break; 
    124211                default: 
    125                     if( $_SERVER['REQUEST_METHOD'] === 'POST' && isset( $_POST['wp_nonce_add'] ) && wp_verify_nonce( $_POST['wp_nonce_add'], 'addfeed' ) ) { 
     212                    if( isset( $_POST['wp_nonce_add'] ) && wp_verify_nonce( $_POST['wp_nonce_add'], 'addfeed' ) ) { 
    126213                        $data = $this->AP_prepareFeedData(); 
    127214                        $wpdb->insert( $wpdb->prefix . 'apfeeds', $data ); 
    128215                        $this->AP_setMessage( __( 'The feed was succesfully saved.', 'LDB_AP' ), 'success' ); 
    129                     } else if( $_SERVER['REQUEST_METHOD'] === 'POST' && isset( $_POST['wp_nonce_edit'] ) && wp_verify_nonce( $_POST['wp_nonce_edit'], 'editfeed' ) ) { 
     216                    } else if( isset( $_POST['wp_nonce_edit'] ) && wp_verify_nonce( $_POST['wp_nonce_edit'], 'editfeed' ) ) { 
    130217                        $data = $this->AP_prepareFeedData(); 
    131218                        $wpdb->update( $wpdb->prefix . 'apfeeds', $data, array( 'ID' => $_POST['ID'] ) ); 
    132219                        $this->AP_setMessage( __( 'The feed was succesfully updated.', 'LDB_AP' ), 'success' ); 
     220                    } else if( isset( $_POST['wp_nonce_linkto'] ) && isset( $_POST['identifier'] ) && wp_verify_nonce( $_POST['wp_nonce_linkto'], 'linkto' . $_POST['identifier'] ) ) { 
     221                        add_post_meta( $_POST['product'], $_POST['matches'], $_POST['identifier'] ); 
     222                        header( 'Location:' . $_POST['view_referer'] . '&linkto=' . $_POST['product'] ); 
    133223                    } 
    134224                break; 
     
    136226        } 
    137227 
    138         function AP_menu() { 
    139             $pages = array(); 
    140             $pages[] = add_menu_page( __( 'Affiliate Press', 'LDB_AP' ), __( 'Affiliate Press', 'LDB_AP' ), 'manage_options', 'affiliate_press', array( &$this, 'AP_dashboard' ), LDB_AP_URL . 'images/icon16.png' ); 
    141             add_submenu_page( 'affiliate_press', __( 'Dashboard', 'LDB_AP' ), __( 'Dashboard', 'LDB_AP' ), 'manage_options', 'affiliate_press' ); 
    142             $pages[] = add_submenu_page( 'affiliate_press', __( 'Feeds', 'LDB_AP' ), __( 'Feeds', 'LDB_AP' ), 'manage_options', 'affiliate_press_feeds', array( &$this, 'AP_indexFeed' ) ); 
    143             $pages[] = add_submenu_page( 'affiliate_press', __( 'Add New Feed', 'LDB_AP' ), __( 'Add New Feed', 'LDB_AP' ), 'manage_options', 'affiliate_press_add', array( &$this, 'AP_addFeed' ) ); 
    144             foreach( $pages as $page ) 
    145                 add_action( 'admin_print_styles-' . $page, array( &$this, 'AP_loadStyle' ) ); 
    146         } 
    147  
     228        /* Function that adds the custom meta box for the products. */ 
    148229        function AP_addCustomMetaBox() { 
    149230            add_meta_box( 'affiliate-press', __( 'Prices from feeds', 'LDB_AP' ), array( &$this, 'AP_pricesBox' ), 'product', 'side', 'default' ); 
    150231        } 
    151232 
    152         function AP_dashboard() { 
    153             include( LDB_AP_VIEW_PATH . 'dashboard.php' ); 
    154         } 
    155  
    156         function AP_addFeed() { 
    157             $this->action = 'add'; 
    158             $this->AP_feeds(); 
    159         } 
    160  
    161         function AP_indexFeed() { 
    162             if( !$this->AP_currentAction() ) { 
    163                 $this->action = 'index'; 
    164             } 
    165             $this->AP_feeds(); 
    166         } 
    167  
    168         function AP_postbox( $id, $title, $content ) { 
    169             $postbox = '<div id="' . $id . '" class="postbox"><div class="handlediv" title="' . __( 'Click to toggle', 'LDB_AP' ) . '"><br /></div><h3 class="hndle"><span>' . $title . '</span></h3><div class="inside">' . $content . '</div></div>'; 
    170             echo $postbox; 
    171         } 
    172  
    173         function AP_sidebar() { 
    174             include( LDB_AP_VIEW_PATH . 'sidebar.php' ); 
    175         } 
    176  
     233        /* Function that fetches and show the content for the meta box on the edit product page. */ 
    177234        function AP_pricesBox() { 
    178235            global $post, $wpdb; 
     
    201258        } 
    202259 
    203  
    204         function AP_currentAction() { 
    205             $action = false; 
    206  
    207             if ( isset( $_REQUEST['action'] ) && -1 != $_REQUEST['action'] ) 
    208                 $action = $_REQUEST['action']; 
    209  
    210             if ( isset( $_REQUEST['action2'] ) && -1 != $_REQUEST['action2'] ) 
    211                 $action = $_REQUEST['action2']; 
    212  
    213             if ( !$action && isset( $_GET['action'] ) ) 
    214                 $action = $_GET['action']; 
    215  
    216             return $action; 
    217         } 
    218  
     260        /* Function that shows the dashboard. */ 
     261        function AP_dashboard() { 
     262            include( LDB_AP_VIEW_PATH . 'dashboard.php' ); 
     263        } 
     264 
     265        /* Function that shows the feed index page. */ 
    219266        function AP_feeds() { 
    220             global $wpdb; 
    221             $action = $this->AP_currentAction(); 
    222             if( $this->action ) { 
    223                 $action = $this->action; 
    224                 $this->action = false; 
    225             } 
     267            include( LDB_AP_VIEW_PATH . 'feed-index.php' ); 
     268        } 
     269 
     270        /* Function that shows the add feed page. */ 
     271        function AP_addFeed() { 
     272            $matches = $this->AP_buildSelect( 'matches', $this->AP_getCustomFields() ); 
     273            include( LDB_AP_VIEW_PATH . 'feed-add.php' ); 
     274        } 
     275 
     276        /* Function that shows the edit feed page. */ 
     277        function AP_editFeed() { 
     278            wp_enqueue_script( 'ap_expand', LDB_AP_SCRIPTS_URL . 'expand.js' ); 
     279            if( isset( $_GET['feed'] ) && isset( $_GET['_wpnonce'] ) && wp_verify_nonce( $_GET['_wpnonce'], 'edit' . $_GET['feed'] ) ) { 
     280                $feed = @$this->AP_getFeed( $_REQUEST['feed'] ); 
     281                $customfields = $this->AP_getCustomFields(); 
     282                $matches = $this->AP_buildSelect( 'matches', $this->AP_getCustomFields(), $feed['matches'] ); 
     283                include( LDB_AP_VIEW_PATH . 'feed-edit.php' ); 
     284            } else { 
     285                wp_die( __( "You're not allowed to perform the requested action." ) ); 
     286            } 
     287        } 
     288 
     289        /* Function that shows the view feed page. */ 
     290        function AP_viewFeed() { 
     291            wp_enqueue_script( 'ap_expand', LDB_AP_SCRIPTS_URL . 'expand.js' ); 
    226292            if( isset( $_GET['post'] ) ) { 
    227293                $postinfo = get_post( $_GET['post'] ); 
    228294                $this->AP_setMessage( sprintf( __( 'The draft for %s was created succesfully.', 'LDB_AP' ), $postinfo->post_title ), 'success' ); 
    229             } 
    230  
    231             switch( $action ) { 
    232                 case 'view': 
    233                     if( isset( $_GET['feed'] ) && isset( $_GET['_wpnonce'] ) && wp_verify_nonce( $_GET['_wpnonce'], 'view' . $_GET['feed'] ) ) { 
    234                         $feed = @$this->AP_getFeed( $_GET['feed'] ); 
    235                         $items = @$this->AP_processFeed( $_GET['feed'] ); 
    236                         include( LDB_AP_VIEW_PATH . 'feed-view.php' ); 
     295            } else if( isset( $_GET['linkto'] ) ) { 
     296                $postinfo = get_post( $_GET['linkto'] ); 
     297                $this->AP_setMessage( sprintf( __( 'The item was succesfully linked to the product with title "%s".', 'LDB_AP' ), $postinfo->post_title ), 'success' ); 
     298            } 
     299            if( isset( $_GET['feed'] ) && isset( $_GET['_wpnonce'] ) && wp_verify_nonce( $_GET['_wpnonce'], 'view' . $_GET['feed'] ) ) { 
     300                $feed = @$this->AP_getFeed( $_GET['feed'] ); 
     301                $items = @$this->AP_processFeed( $_GET['feed'] ); 
     302                include( LDB_AP_VIEW_PATH . 'feed-view.php' ); 
     303            } else { 
     304                wp_die( __( "You're not allowed to perform the requested action." ) ); 
     305            } 
     306        } 
     307 
     308        /* Function that adds the item data to an existing product. */ 
     309        function AP_linkToProduct() { 
     310            wp_enqueue_script( 'ap_expand', LDB_AP_SCRIPTS_URL . 'expand.js' ); 
     311            if( isset( $_GET['identifier'] ) && isset( $_GET['_wpnonce'] ) && wp_verify_nonce( $_GET['_wpnonce'], 'linkto' . $_GET['identifier'] ) ) { 
     312                $products = array(); 
     313                $setproducts = array(); 
     314                $productsarray = array(); 
     315                $allproducts = get_posts( 
     316                    array( 
     317                        'post_type' => 'product', 
     318                        'post_status' => array( 'publish', 'draft' ) 
     319                    ) 
     320                ); 
     321                foreach( $allproducts as $product ) { 
     322                    if( !$meta = get_post_meta( $product->ID, $_GET['matches'] ) ) { 
     323                        $products[ $product->ID ] = $product->post_title; 
    237324                    } else { 
    238                         wp_die( __( "You're not allowed to perform the requested action." ) ); 
    239                     } 
    240                 break; 
    241                 case 'add': 
    242                     $matches = $this->AP_buildSelect( 'matches', $this->AP_getCustomFields() ); 
    243                     include( LDB_AP_VIEW_PATH . 'feed-add.php' ); 
    244                 break; 
    245                 case 'edit': 
    246                     if( isset( $_GET['feed'] ) && isset( $_GET['_wpnonce'] ) && wp_verify_nonce( $_GET['_wpnonce'], 'edit' . $_GET['feed'] ) ) { 
    247                         $feed = @$this->AP_getFeed( $_REQUEST['feed'] ); 
    248                         $customfields = $this->AP_getCustomFields(); 
    249                         $matches = $this->AP_buildSelect( 'matches', $this->AP_getCustomFields(), $feed['matches'] ); 
    250                         include( LDB_AP_VIEW_PATH . 'feed-edit.php' ); 
    251                     } else { 
    252                         wp_die( __( "You're not allowed to perform the requested action." ) ); 
    253                     } 
    254                 break; 
    255                 default: 
    256                     include( LDB_AP_VIEW_PATH . 'feed-index.php' ); 
    257                 break; 
    258             } 
    259         } 
    260  
     325                        if( !in_array( $_GET['identifier'], $meta ) ) { 
     326                            $setproducts[ $product->ID ] = $product->post_title; 
     327                        } 
     328                    } 
     329                } 
     330                if( count( $products ) > 0 ) 
     331                    $productsarray[ sprintf( __('Products without %s set', 'LDB_AP' ), $_GET['matches'] ) ] = $products; 
     332 
     333                if( count( $setproducts ) > 0 ) 
     334                    $productsarray[ sprintf( __('Products with %s already set', 'LDB_AP' ), $_GET['matches'] ) ] = $setproducts; 
     335 
     336                $view_referer = $_SERVER['HTTP_REFERER']; 
     337                $linkto = $this->AP_buildSelect( 'product', $productsarray, false, true ); 
     338                include( LDB_AP_VIEW_PATH . 'feed-linkto.php' ); 
     339            } else { 
     340                wp_die( __( "You're not allowed to perform the requested action." ) ); 
     341            } 
     342        } 
     343 
     344        /* Function to show a postbox. */ 
     345        function AP_postbox( $id, $title, $content ) { 
     346            $postbox = '<div id="' . $id . '" class="postbox"><div class="handlediv" title="' . __( 'Click to toggle', 'LDB_AP' ) . '"><br /></div><h3 class="hndle"><span>' . $title . '</span></h3><div class="inside">' . $content . '</div></div>'; 
     347            echo $postbox; 
     348        } 
     349 
     350        /* Function that shows the sidebar. */ 
     351        function AP_sidebar() { 
     352            include( LDB_AP_VIEW_PATH . 'sidebar.php' ); 
     353        } 
     354 
     355        /* Function that catches the attachment id and assigns it as the feature image to it's parent. */ 
    261356        function AP_catchAttachment( $att_id ){ 
    262             $post = get_post( $att_id ); 
    263             update_post_meta( $post->post_parent, '_thumbnail_id' , $att_id ); 
    264         } 
    265  
     357            $post = get_post( $att_id ); 
     358            update_post_meta( $post->post_parent, '_thumbnail_id' , $att_id ); 
     359        } 
     360 
     361        /* Function that creates a product draft based on the feed item data. */ 
    266362        function AP_createDraft( $name, $matches, $identifier, $image ) { 
    267363            $data = array( 
     
    270366            ); 
    271367            $post = wp_insert_post( $data ); 
     368            add_post_meta( $post, $matches, $identifier ); 
    272369            if( $image && !empty( $image ) ) { 
    273370                add_action( 'add_attachment', array( &$this, 'AP_catchAttachment' ) ); 
    274                 add_post_meta( $post, $matches, $identifier ); 
    275                 media_sideload_image( $image, $post ); 
     371                $html = media_sideload_image( $image, $post ); 
    276372                remove_action( 'add_attachment', array( &$this, 'AP_catchAttachment' ) ); 
    277373            } 
     
    279375        } 
    280376 
     377        /* Function that creates a product draft based on the feed item data. */ 
    281378        function AP_prepareFeedData() { 
    282379            $fields = array( 'title', 'currency', 'url', 'item_xpath', 'name_xpath', 'image_xpath', 'price_xpath', 'link_xpath', 'identifier_xpath', 'matches' ); 
     
    296393        } 
    297394 
     395        /* Function that sets a message. */ 
    298396        function AP_setMessage( $msg, $type ) { 
    299397            $this->messages[] = array( $msg, $type ); 
    300398        } 
    301399 
     400        /* Function that gets, displays and clears all messages. */ 
    302401        function AP_getMessage() { 
    303402            $messages = ''; 
     
    309408        } 
    310409 
     410        /* Function that gets all the info for a feed. */ 
    311411        function AP_getFeed( $id ) { 
    312412            global $wpdb; 
     
    317417        } 
    318418 
     419        /* Function that fetches the custom fields for matching the identifier to. */ 
    319420        function AP_getCustomFields() { 
    320421            $fields = array(); 
     
    336437        } 
    337438 
    338         function AP_buildSelect( $name, $values, $default = false ) { 
    339             $select = '<select name="' . $name . '" id="' . $name . '">'; 
    340             foreach( $values as $value ) { 
    341                 if( $value === $default ) { 
    342                     $select.= '<option value="' . $value . '" selected="selected">' . $value . '</option>'; 
    343                 } else { 
    344                     $select.= '<option value="' . $value . '">' . $value . '</option>'; 
     439        /* Function to build a <select>. */ 
     440        function AP_buildSelect( $name, $values, $default = false, $split = false ) { 
     441            $select = '<select name="' . $name . '" id="' . $name . '"><option></option>'; 
     442            if( $split ) { 
     443                foreach( $values as $key => $value ) { 
     444                    if( is_array( $value ) ) { 
     445                        $select.= '<optgroup label="' . $key . '">'; 
     446                        foreach( $value as $subkey => $subvalue ) { 
     447                            if( $subkey === $default ) { 
     448                                $select.= '<option value="' . $subkey . '" selected="selected">' . $subvalue . '</option>'; 
     449                            } else { 
     450                                $select.= '<option value="' . $subkey . '">' . $subvalue . '</option>'; 
     451                            } 
     452                        } 
     453                        $select.= '</optgroup>'; 
     454                    } else { 
     455                        if( $key === $default ) { 
     456                            $select.= '<option value="' . $key . '" selected="selected">' . $value . '</option>'; 
     457                        } else { 
     458                            $select.= '<option value="' . $key . '">' . $value . '</option>'; 
     459                        } 
     460                    } 
     461                } 
     462            } else { 
     463                foreach( $values as $value ) { 
     464                    if( $value === $default ) { 
     465                        $select.= '<option value="' . $value . '" selected="selected">' . $value . '</option>'; 
     466                    } else { 
     467                        $select.= '<option value="' . $value . '">' . $value . '</option>'; 
     468                    } 
    345469                } 
    346470            } 
     
    349473        } 
    350474 
     475        /* Function that processes a feed based on a feed ID. */ 
    351476        function AP_processFeed( $feed ) { 
    352477            global $wpdb; 
     
    388513        } 
    389514 
     515        /* Function that gets the value of an XPath node. */ 
     516        function AP_getValue( $e ) { 
     517            if( $e ) { 
     518                return trim( preg_replace( '/\s+/', ' ', @$e->item(0)->nodeValue ) ); 
     519            } else { 
     520                return false; 
     521            } 
     522        } 
     523 
     524        /* Function that processes the prices found for a product. */ 
    390525        function AP_processPrices( $feed ) { 
    391526            global $wpdb; 
     
    415550        } 
    416551 
    417         function AP_getValue( $e ) { 
    418             if( $e ) { 
    419                 return trim( preg_replace( '/\s+/', ' ', @$e->item(0)->nodeValue ) ); 
    420             } else { 
    421                 return false; 
    422             } 
    423         } 
    424  
     552        /* Function that builds a table to display the prices in the front-end. */ 
    425553        function AP_buildTable( $data ) { 
    426554            $table = '<table cellpadding="0" cellspacing="0" border="0" class="aptable">'; 
     
    436564        } 
    437565 
     566        /* Function that gets the prices to display the prices in the front-end. */ 
    438567        function AP_getPrices( $table = false ) { 
    439568            global $post, $wpdb; 
  • affiliate-press/trunk/includes/class-feeds-table.php

    r528107 r528774  
    2828        function column_title( $item ) { 
    2929            $actions = array( 
    30                 'view' => sprintf( '<a href="%s">%s</a>', wp_nonce_url( '?page=' . $_REQUEST['page'] . '&action=view&feed=' . $item['ID'], 'view' . $item['ID'] ) , __( 'View', 'LDB_AP' ) ), 
    31                 'edit' => sprintf( '<a href="%s">%s</a>', wp_nonce_url( '?page=' . $_REQUEST['page'] . '&action=edit&feed=' . $item['ID'], 'edit' . $item['ID'] ) , __( 'Edit', 'LDB_AP' ) ), 
     30                'view' => sprintf( '<a href="%s">%s</a>', wp_nonce_url( '?page=affiliate_press_view&feed=' . $item['ID'], 'view' . $item['ID'] ) , __( 'View', 'LDB_AP' ) ), 
     31                'edit' => sprintf( '<a href="%s">%s</a>', wp_nonce_url( '?page=affiliate_press_edit&feed=' . $item['ID'], 'edit' . $item['ID'] ) , __( 'Edit', 'LDB_AP' ) ), 
    3232                'process' => sprintf( '<a href="%s">%s</a>', wp_nonce_url( '?page=' . $_REQUEST['page'] . '&action=process&feed=' . $item['ID'], 'process' . $item['ID'] ) , __( 'Process', 'LDB_AP' ) ), 
    3333                'delete' => sprintf( '<a href="%s">%s</a>', wp_nonce_url( '?page=' . $_REQUEST['page'] . '&action=delete&feed=' . $item['ID'], 'delete' . $item['ID'] ) , __( 'Delete', 'LDB_AP' ) ), 
  • affiliate-press/trunk/includes/class-items-table.php

    r528107 r528774  
    2929            $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 
    3030     
    31             $current_url = remove_query_arg( array( 'hotkeys_highlight_last', 'hotkeys_highlight_first', 'message', 'messagetype' ), $current_url ); 
     31            $current_url = remove_query_arg( array( 'hotkeys_highlight_last', 'hotkeys_highlight_first', 'post', 'linkto' ), $current_url ); 
    3232     
    3333            $page_links = array(); 
     
    111111            $query = 'SELECT wposts.ID FROM ' . $wpdb->posts . ' wposts, ' . $wpdb->postmeta . ' wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = "' . $item['matches'] . '" AND wpostmeta.meta_value = "' . $item['identifier'] . '" AND wposts.post_type = "product"'; 
    112112            $results = $wpdb->get_results( $query ); 
     113            $actions = array(); 
    113114            if( count( $results ) > 0 ) { 
    114115                return $item['name']; 
     
    124125                    $order = '&order=' . $_GET['order']; 
    125126                 
    126                 $actions = array( 
    127                     'draft' => sprintf( '<a href="%s">%s</a>', wp_nonce_url( '?page=' . $_REQUEST['page'] . '&action=draft&feed=' . $item['feed_id'] . '&identifier=' . $item['identifier'] . $paged . $orderby . $order . '&_draftnonce=' . wp_create_nonce( 'draft' . $item['identifier'] ), 'view' . $item['feed_id'] ) , __( 'Create as draft', 'LDB_AP' ) ), 
    128                 ); 
    129                 return sprintf( '%1$s %2$s', $item['name'], $this->row_actions( $actions ) ); 
    130             } 
     127                $actions['draft'] = sprintf( '<a href="%s">%s</a>', wp_nonce_url( '?page=' . $_REQUEST['page'] . '&action=draft&feed=' . $item['feed_id'] . '&identifier=' . $item['identifier'] . $paged . $orderby . $order . '&_draftnonce=' . wp_create_nonce( 'draft' . $item['identifier'] ), 'view' . $item['feed_id'] ) , __( 'Create as draft', 'LDB_AP' ) ); 
     128            } 
     129            $products = get_posts( 
     130                array( 
     131                    'post_type' => 'product', 
     132                    'post_status' => array( 'publish', 'draft' ) 
     133                ) 
     134            ); 
     135            $actions['additem'] = sprintf( '<a href="%s" class="thickbox">%s</a>', wp_nonce_url( '?page=affiliate_press_linktoproduct&identifier=' .$item['identifier'] . '&matches=' . $item['matches'] . '&name=' . $item['name'], 'linkto' . $item['identifier'] ), __( 'Link to an existing product', 'LDB_AP' ) ); 
     136            return sprintf( '%1$s %2$s', $item['name'], $this->row_actions( $actions ) ); 
    131137        } 
    132138 
  • affiliate-press/trunk/readme.txt

    r528570 r528774  
    44Tags: affiliate, affiliates, product, products, product feed, product feeds 
    55Requires at least: 3.3 
    6 Tested up to: 3.3 
    7 Stable tag: 0.2.1 
     6Tested up to: 3.4 
     7Stable tag: 0.3 
    88 
    99Affiliate Press allows you to set up an affiliate website based on product feeds as easy as 1-2-3. 
     
    4343The affiliate data is now stored in the $data variable. 
    4444 
     45= Why aren't the images from the feed being attached to the post? = 
     46The permissions on you 'uploads' folder in 'wp-content' are most likely not set correctly. 
     47 
    4548= Where's the help section? = 
    4649This plugin is still under development and in beta. Most of the functionality is still subject to change and I hope to bring some more features to the plugin. Compiling an extensive help and support section would therefor be somewhat of a hassle at the moment. I strongly advise you to post in the [support forums](http://wordpress.org/tags/affiliate-press) if you have any questions. ( And please check there first if your question wasn't answered yet. ) 
     
    4952 
    5053== Changelog == 
     54 
     55= 0.3 = 
     56* Rewrite of a substantial part of the code. 
     57* You're now able to link a feed item to an existing product. 
     58* The number of prices linked to a product is now shown on the products index page. 
    5159 
    5260= 0.2.1 = 
Note: See TracChangeset for help on using the changeset viewer.