WordPress.org

Plugin Directory

Changeset 1579799


Ignore:
Timestamp:
01/22/17 20:57:47 (10 months ago)
Author:
ZigPress
Message:

ZigConnect - committed 0.9.5 to trunk

Location:
zigconnect/trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • zigconnect/trunk/readme.txt

    r484503 r1579799  
    11=== ZigConnect === 
    22Contributors: ZigPress 
    3 Donate link: http://www.zigpress.com/wordpress/plugins/zigconnect/ 
     3Donate link: https://www.zigpress.com/plugins/zigconnect/ 
    44Tags: post links, posts to posts, post to post, post connection, connect posts, link posts, custom post types, zigpress, zig 
    5 Requires at least: 3.1 
    6 Tested up to: 3.3.1 
    7 Stable tag: 0.9 
     5Requires at least: 4.5 
     6Tested up to: 4.7.1 
     7Stable tag: 0.9.5 
    88 
    99Allows you to link post types and posts to each other and attach data directly to the links. 
     
    1313Allows you to link post types (including custom post types) and posts to each other and attach data directly to the links. ZigConnect was inspired by the plugin "Posts 2 Posts" but has been written from scratch. 
    1414 
    15 Minimum versions required: WordPress 3.1, PHP 5.2.4 and MySQL 5.0.15. 
     15Minimum versions required: WordPress 4.5, PHP 5.3 and MySQL 5.5.3. 
    1616 
    1717For further information and support, please visit [the ZigConnect home page](http://www.zigpress.com/wordpress/plugins/zigconnect/). 
    1818 
    1919ZigConnect uses icons from the [Silk icon set](http://www.famfamfam.com/lab/icons/silk/) and the [Tango Desktop Project](http://tango.freedesktop.org/). 
    20  
    21 THIS IS THE FINAL PUBLIC RELEASE OF ZIGCONNECT. Anyone interested in forking this plugin and continuing its development under a new name is more than welcome to do so. 
    2220 
    2321== Installation == 
     
    3735 
    3836    $connectedposts = zc_get_linked_posts('my_type'); 
    39     if ($connectedposts) 
    40         { 
     37    if ($connectedposts) { 
    4138        echo '<ul>'; 
    42         foreach ($connectedposts as $otherpostid) 
    43             { 
     39        foreach ($connectedposts as $otherpostid) { 
    4440            $otherpost = get_post($otherpostid); 
    4541            echo '<li>'; 
    4642            echo '<a href="' . get_bloginfo('url') . '/my_type/' . $otherpost->post_name . '">' . $otherpost->post_title . '</a>'; 
    4743            echo '</li>'; 
    48             } 
     44        } 
    4945        echo '</ul>'; 
    50         } 
     46    } 
    5147 
    5248If you have a connection between types that carries one or more data fields, you can also show the content of these data fields for each link in the list, like this enlarged example. 
    5349 
    5450    $connectedposts = zc_get_linked_posts('my_type'); 
    55     if ($connectedposts) 
    56         { 
     51    if ($connectedposts) { 
    5752        echo '<ul>'; 
    58         foreach ($connectedposts as $otherpostid) 
    59             { 
     53        foreach ($connectedposts as $otherpostid) { 
    6054            $otherpost = get_post($otherpostid); 
    6155            $linkdata = zc_get_linkdata($otherpostid); 
    6256            echo '<li>'; 
    6357            echo '<a href="' . get_bloginfo('url') . '/my_type/' . $otherpost->post_name . '">' . $otherpost->post_title . '</a>'; 
    64             if ($linkdata) 
    65                 { 
     58            if ($linkdata) { 
    6659                echo ' ( '; 
    67                 foreach ($linkdata as $linkdatakey=>$linkdatavalue) 
    68                     { 
     60                foreach ($linkdata as $linkdatakey=>$linkdatavalue) { 
    6961                    echo $linkdatakey . '=' . $linkdatavalue . ' '; 
    70                     } 
     62                } 
    7163                echo ' ) '; 
    72                 } 
     64            } 
    7365            echo '</li>'; 
    74             } 
     66        } 
    7567        echo '</ul>'; 
    76         } 
     68    } 
    7769 
    7870If you have more than one connection between the same two content types, you can use the new template tags zc_get_connection_by_name or zc_get_connection_by_slug to get the ID of the right connection. You can then pass this ID as a second parameter to the zc_get_linked_posts template tag. 
     
    9284== Changelog == 
    9385 
     86= 0.9.5 = 
     87* The resurrection release. Verified compatibility with WordPress 4.7.x, set minimum PHP version to 5.3. 
     88* Fixed undefined data bug in metabox on post edit page. 
     89* Changed table creation to use InnDB instead of MyISAM. 
     90* Changed table creation to use UTF8MB4 instead of UTF8 (making minimum MySQL version 5.5.3). 
    9491= 0.9 = 
    9592* Final public release, verified compatibility with WordPress 3.3.x. 
     
    150147= 0.1 = 
    151148* First public release 
    152  
  • zigconnect/trunk/sql/zigconnect.sql

    r396590 r1579799  
    1515    KEY `zc_conn_to`            (`zc_conn_to`), 
    1616    KEY `zc_conn_reciprocal`    (`zc_conn_reciprocal`) 
    17 ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
     17) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 
    1818 
    1919 
     
    3333    KEY `zc_field_name`         (`zc_field_name`), 
    3434    KEY `zc_field_order`        (`zc_field_order`) 
    35 ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
     35) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 
    3636 
    3737 
     
    4848    KEY `zc_link_from`          (`zc_link_from`), 
    4949    KEY `zc_link_to`            (`zc_link_to`) 
    50 ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
     50) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 
    5151 
    5252 
     
    6464    KEY `zc_field_id`           (`zc_field_id`), 
    6565    KEY `zc_conn_id`            (`zc_conn_id`) 
    66 ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
     66) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 
    6767 
    6868 
  • zigconnect/trunk/zigconnect-admincallbacks.php

    r396590 r1579799  
    22 
    33 
    4 class ZigConnectAdminCallBacks 
    5     { 
     4if (!class_exists('ZigConnectAdminCallBacks')) { 
    65 
    76 
    8     public function __construct($zigaction) 
    9         { 
    10         if ($zigaction == 'zigconnect-admin-connections-delete') { $this->DoDeleteConnection(); } 
    11         if ($zigaction == 'zigconnect-admin-connections-update') { $this->DoUpdateConnection(); } 
    12         if ($zigaction == 'zigconnect-admin-fields-delete') { $this->DoDeleteField(); } 
    13         if ($zigaction == 'zigconnect-admin-fields-update') { $this->DoUpdateField(); } 
    14         if ($zigaction == 'zigconnect-admin-options-update') { $this->DoUpdateOptions(); } 
     7    final class ZigConnectAdminCallBacks { 
     8 
     9 
     10        public function __construct($zigaction) { 
     11            if ($zigaction == 'zigconnect-admin-connections-delete') { $this->DoDeleteConnection(); } 
     12            if ($zigaction == 'zigconnect-admin-connections-update') { $this->DoUpdateConnection(); } 
     13            if ($zigaction == 'zigconnect-admin-fields-delete') { $this->DoDeleteField(); } 
     14            if ($zigaction == 'zigconnect-admin-fields-update') { $this->DoUpdateField(); } 
     15            if ($zigaction == 'zigconnect-admin-options-update') { $this->DoUpdateOptions(); } 
    1516        } 
    1617 
    1718 
    18         public function DoDeleteConnection() 
    19             { 
     19        public function DoDeleteConnection() { 
    2020            global $objZigConnect; 
    2121            if (!current_user_can('manage_options')) { wp_die(__('You are not allowed to do this.', 'zigconnect')); } 
    22             $objZigConnect->Result = 'OK|' . __('Selected connections and all related data deleted.', 'zigconnect');  
     22            $objZigConnect->Result = 'OK|' . __('Selected connections and all related data deleted.', 'zigconnect'); 
    2323            $ids = $objZigConnect->Params['chk']; 
    2424            if (is_array($ids)) { $ids = array_keys($ids); } 
    2525            $intDeleted = 0; 
    26             foreach ((array) $ids as $id) 
    27                 { 
     26            foreach ((array) $ids as $id) { 
    2827                $objZigConnect->DeleteConnection($id); 
    2928                $intDeleted++; 
    30                 } 
    31             if ($intDeleted == 0) 
    32                 { 
    33                 $objZigConnect->Result = 'ERR|' . __('No connections were selected.', 'zigconnect');  
    34                 } 
     29            } 
     30            if ($intDeleted == 0) { 
     31                $objZigConnect->Result = 'ERR|' . __('No connections were selected.', 'zigconnect'); 
     32            } 
    3533            ob_clean(); 
    3634            wp_redirect($_SERVER['PHP_SELF'] . '?page=zigconnect-menu&r=' . base64_encode($objZigConnect->Result)); 
    3735            exit(); 
    38             } 
     36        } 
    3937 
    4038 
    41         public function DoUpdateConnection() 
    42             { 
     39        public function DoUpdateConnection() { 
    4340            global $objZigConnect; 
    4441            if (!current_user_can('manage_options')) { wp_die(__('You are not allowed to do this.', 'zigconnect')); } 
    45             $objZigConnect->Result = 'OK|' . __('Connection updated.', 'zigconnect');  
     42            $objZigConnect->Result = 'OK|' . __('Connection updated.', 'zigconnect'); 
    4643            $id = (is_numeric(trim($objZigConnect->Params['id']))) ? (int) trim($objZigConnect->Params['id']) : 0 ; 
    4744            $zc_conn_slug = $objZigConnect->AllowChars(strtolower($objZigConnect->Params['zc_conn_slug']), 'abcdefghijklmnopqrstuvwxyz0123456789-', false); 
     
    5249            $blnOK = true; 
    5350            $intDuplicate = $objZigConnect->GetConnectionIDByName($zc_conn_name); 
    54             if (is_numeric($intDuplicate)) 
    55                 { 
    56                 if ($id != $intDuplicate) 
    57                     { 
     51            if (is_numeric($intDuplicate)) { 
     52                if ($id != $intDuplicate) { 
    5853                    $blnOK = false; 
    59                     $objZigConnect->Result = 'ERR|' . __('Duplicate connection name.', 'zigconnect');  
    60                     } 
     54                    $objZigConnect->Result = 'ERR|' . __('Duplicate connection name.', 'zigconnect'); 
    6155                } 
    62             if (($zc_conn_from == '') || ($zc_conn_to == '')) 
    63                 { 
     56            } 
     57            if (($zc_conn_from == '') || ($zc_conn_to == '')) { 
    6458                $blnOK = false; 
    65                 $objZigConnect->Result = 'ERR|' . __('Content type(s) not selected.', 'zigconnect');  
    66                 } 
    67             if (($zc_conn_name == '') || ($zc_conn_slug == '')) 
    68                 { 
     59                $objZigConnect->Result = 'ERR|' . __('Content type(s) not selected.', 'zigconnect'); 
     60            } 
     61            if (($zc_conn_name == '') || ($zc_conn_slug == '')) { 
    6962                $blnOK = false; 
    70                 $objZigConnect->Result = 'ERR|' . __('Name and/or slug not entered.', 'zigconnect');  
    71                 } 
    72             if ($blnOK) 
    73                 { 
     63                $objZigConnect->Result = 'ERR|' . __('Name and/or slug not entered.', 'zigconnect'); 
     64            } 
     65            if ($blnOK) { 
    7466                $objZigConnect->SaveConnection($id, $zc_conn_from, $zc_conn_to, $zc_conn_reciprocal, $zc_conn_slug, $zc_conn_name); 
    75                 } 
     67            } 
    7668            ob_clean(); 
    7769            wp_redirect($_SERVER['PHP_SELF'] . '?page=zigconnect-menu&r=' . base64_encode($objZigConnect->Result)); 
    7870            exit(); 
    79             } 
     71        } 
    8072 
    8173 
    82         public function DoDeleteField() 
    83             { 
     74        public function DoDeleteField() { 
    8475            global $objZigConnect; 
    8576            if (!current_user_can('manage_options')) { wp_die(__('You are not allowed to do this.', 'zigconnect')); } 
    86             $objZigConnect->Result = 'OK|' . __('Selected fields and all related data deleted.', 'zigconnect');  
     77            $objZigConnect->Result = 'OK|' . __('Selected fields and all related data deleted.', 'zigconnect'); 
    8778            $ids = $objZigConnect->Params['chk']; 
    8879            if (is_array($ids)) { $ids = array_keys($ids); } 
    8980            $intDeleted = 0; 
    90             foreach ((array) $ids as $id) 
    91                 { 
     81            foreach ((array) $ids as $id) { 
    9282                $objZigConnect->DeleteField($id); 
    9383                $intDeleted++; 
    94                 } 
    95             if ($intDeleted == 0) 
    96                 { 
    97                 $objZigConnect->Result = 'ERR|' . __('No fields were selected.', 'zigconnect');  
    98                 } 
     84            } 
     85            if ($intDeleted == 0) { 
     86                $objZigConnect->Result = 'ERR|' . __('No fields were selected.', 'zigconnect'); 
     87            } 
    9988            ob_clean(); 
    10089            wp_redirect($_SERVER['PHP_SELF'] . '?page=zigconnect-menu-fields&r=' . base64_encode($objZigConnect->Result)); 
    10190            exit(); 
    102             } 
     91        } 
    10392 
    10493 
    105         public function DoUpdateField() 
    106             { 
     94        public function DoUpdateField() { 
    10795            global $objZigConnect; 
    10896            if (!current_user_can('manage_options')) { wp_die(__('You are not allowed to do this.', 'zigconnect')); } 
    109             $objZigConnect->Result = 'OK|' . __('Field updated.', 'zigconnect');  
     97            $objZigConnect->Result = 'OK|' . __('Field updated.', 'zigconnect'); 
    11098            $id = (is_numeric(trim($objZigConnect->Params['id']))) ? (int) trim($objZigConnect->Params['id']) : 0 ; 
    11199            $zc_conn_id = $objZigConnect->Params['zc_conn_id']; 
     
    117105            $blnOK = true; 
    118106            $intDuplicate = $objZigConnect->GetFieldIDByName($zc_field_name); 
    119             if (is_numeric($intDuplicate)) 
    120                 { 
    121                 if ($id != $intDuplicate) 
    122                     { 
     107            if (is_numeric($intDuplicate)) { 
     108                if ($id != $intDuplicate) { 
    123109                    $blnOK = false; 
    124                     $objZigConnect->Result = 'ERR|' . __('Field already exists.', 'zigconnect');  
    125                     } 
     110                    $objZigConnect->Result = 'ERR|' . __('Field already exists.', 'zigconnect'); 
    126111                } 
    127             if (($zc_field_name == '') || ($zc_field_prompt == '')) 
    128                 { 
     112            } 
     113            if (($zc_field_name == '') || ($zc_field_prompt == '')) { 
    129114                $blnOK = false; 
    130                 $objZigConnect->Result = 'ERR|' . __('Name or prompt not entered.', 'zigconnect');  
    131                 } 
    132             if ($blnOK) 
    133                 { 
     115                $objZigConnect->Result = 'ERR|' . __('Name or prompt not entered.', 'zigconnect'); 
     116            } 
     117            if ($blnOK) { 
    134118                $objZigConnect->SaveField($id, $zc_conn_id, $zc_field_type, $zc_field_name, $zc_field_prompt, $zc_field_size, $zc_field_order); 
    135                 } 
     119            } 
    136120            ob_clean(); 
    137121            wp_redirect($_SERVER['PHP_SELF'] . '?page=zigconnect-menu-fields&r=' . base64_encode($objZigConnect->Result)); 
    138122            exit(); 
    139             } 
     123        } 
    140124 
    141125 
    142         public function DoUpdateOptions() 
    143             { 
     126        public function DoUpdateOptions() { 
    144127            global $objZigConnect; 
    145128            if (!current_user_can('manage_options')) { wp_die(__('You are not allowed to do this.', 'zigconnect')); } 
     
    150133            # re-save options 
    151134            update_option("zigconnect_options", $objZigConnect->Options); 
    152             $objZigConnect->Result = 'OK|' . __('Options saved.', 'zigconnect');  
     135            $objZigConnect->Result = 'OK|' . __('Options saved.', 'zigconnect'); 
    153136            ob_clean(); 
    154137            wp_redirect($_SERVER['PHP_SELF'] . '?page=zigconnect-menu-settings&r=' . base64_encode($objZigConnect->Result)); 
    155138            exit(); 
    156             } 
     139        } 
    157140 
    158141 
     
    160143 
    161144 
     145} else { 
     146 
     147    wp_die('Namespace clash! Class ZigConnectAdminCallBacks already exists.'); 
     148 
     149} 
     150 
     151 
    162152# EOF 
  • zigconnect/trunk/zigconnect-ajaxcallbacks.php

    r415141 r1579799  
    22 
    33 
    4 class ZigConnectAjaxCallBacks 
    5     { 
     4if (!class_exists('ZigConnectAjaxCallBacks')) { 
    65 
    76 
    8     public function __construct($zigaction) 
    9         { 
    10         if ($zigaction == 'zigconnect-ajax-search') { $this->DoAjaxSearch(); } 
    11         if ($zigaction == 'zigconnect-ajax-getrow') { $this->DoAjaxGetRow(); } 
    12         if ($zigaction == 'zigconnect-ajax-addall') { $this->DoAjaxAddAll(); } 
     7 
     8    final class ZigConnectAjaxCallBacks { 
     9 
     10 
     11        public function __construct($zigaction) { 
     12            if ($zigaction == 'zigconnect-ajax-search') { $this->DoAjaxSearch(); } 
     13            if ($zigaction == 'zigconnect-ajax-getrow') { $this->DoAjaxGetRow(); } 
     14            if ($zigaction == 'zigconnect-ajax-addall') { $this->DoAjaxAddAll(); } 
    1315        } 
    1416 
    1517 
    16     public function DoAjaxSearch() 
    17         { 
    18         global $objZigConnect; 
    19         if (!current_user_can('edit_posts')) { wp_die(__('You are not allowed to do this.', 'zigconnect')); } 
    20         # build a select of all post ids / titles that can be linked from this post but aren't yet, that match the query 
    21         ob_clean(); 
    22         $strQuery = trim(esc_attr($objZigConnect->Params['strQuery'])); 
    23         $intThisPostID = esc_attr($objZigConnect->Params['intThisPostID']); 
    24         $objThisPost = get_post($intThisPostID); 
     18        public function DoAjaxSearch() { 
     19            global $objZigConnect; 
     20            if (!current_user_can('edit_posts')) { wp_die(__('You are not allowed to do this.', 'zigconnect')); } 
     21            # build a select of all post ids / titles that can be linked from this post but aren't yet, that match the query 
     22            ob_clean(); 
     23            $strQuery = trim(esc_attr($objZigConnect->Params['strQuery'])); 
     24            $intThisPostID = esc_attr($objZigConnect->Params['intThisPostID']); 
     25            $objThisPost = get_post($intThisPostID); 
    2526 
    26         $zc_conn_id = esc_attr($objZigConnect->Params['zc_conn_id']); 
    27         $strOtherType = $objZigConnect->GetOtherType($zc_conn_id, $objThisPost->post_type); 
    28         $arrAllPostIDs = $objZigConnect->GetPostIDsByType($strOtherType); 
    29         $arrLinkedPostIDs = $objZigConnect->GetLinkedPostIDs($intThisPostID, $strOtherType, $zc_conn_id); 
    30         $arrPostIDsToCheck = array_diff($arrAllPostIDs, $arrLinkedPostIDs); 
    31         $arrMatchingPostIDs = array(); 
    32         foreach($arrPostIDsToCheck as $intPostIDToCheck) 
    33             { 
    34             $objPost = get_post($intPostIDToCheck); 
    35             if ((stripos($objPost->post_title, $strQuery) !== false) || ($strQuery == '')) 
    36                 { 
    37                 $arrMatchingPostIDs[$intPostIDToCheck] = $objPost->post_title; 
     27            $zc_conn_id = esc_attr($objZigConnect->Params['zc_conn_id']); 
     28            $strOtherType = $objZigConnect->GetOtherType($zc_conn_id, $objThisPost->post_type); 
     29            $arrAllPostIDs = $objZigConnect->GetPostIDsByType($strOtherType); 
     30            $arrLinkedPostIDs = $objZigConnect->GetLinkedPostIDs($intThisPostID, $strOtherType, $zc_conn_id); 
     31            $arrPostIDsToCheck = array_diff($arrAllPostIDs, $arrLinkedPostIDs); 
     32            $arrMatchingPostIDs = array(); 
     33            foreach($arrPostIDsToCheck as $intPostIDToCheck) { 
     34                $objPost = get_post($intPostIDToCheck); 
     35                if ((stripos($objPost->post_title, $strQuery) !== false) || ($strQuery == '')) { 
     36                    $arrMatchingPostIDs[$intPostIDToCheck] = $objPost->post_title; 
    3837                } 
    3938            } 
    40         # echo HTML SELECT for search results 
    41         if (count($arrMatchingPostIDs) >= 1) 
    42             { 
    43             ?> 
    44             <select name="zigconnect-metabox-results-<?php echo $zc_conn_id?>" class="zigconnect-metabox-results" id="zigconnect-metabox-results-<?php echo $zc_conn_id?>"> 
    45             <?php 
    46             foreach ($arrMatchingPostIDs as $intMatchingPostID=>$strMatchingPostTitle) 
    47                 { 
     39            # echo HTML SELECT for search results 
     40            if (count($arrMatchingPostIDs) >= 1) { 
    4841                ?> 
    49                 <option value="<?php echo $intMatchingPostID?>"><?php echo $strMatchingPostTitle?></option> 
     42                <select name="zigconnect-metabox-results-<?php echo $zc_conn_id?>" class="zigconnect-metabox-results" id="zigconnect-metabox-results-<?php echo $zc_conn_id?>"> 
    5043                <?php 
     44                foreach ($arrMatchingPostIDs as $intMatchingPostID=>$strMatchingPostTitle) { 
     45                    ?> 
     46                    <option value="<?php echo $intMatchingPostID?>"><?php echo $strMatchingPostTitle?></option> 
     47                    <?php 
    5148                } 
    52             ?> 
    53             </select> 
    54             <input class="button-secondary zigconnect-metabox-addresult" type="button" id="zigconnect-metabox-addresult-<?php echo $zc_conn_id?>" value="<?php _e('Add', 'zigconnect')?>" /> 
    55             <?php 
     49                ?> 
     50                </select> 
     51                <input class="button-secondary zigconnect-metabox-addresult" type="button" id="zigconnect-metabox-addresult-<?php echo $zc_conn_id?>" value="<?php _e('Add', 'zigconnect')?>" /> 
     52                <?php 
    5653            } 
    57         exit(); 
     54            exit(); 
    5855        } 
    5956 
    6057 
    61     public function DoAjaxGetRow() 
    62         { 
    63         global $objZigConnect; 
    64         if (!current_user_can('edit_posts')) { wp_die(__('You are not allowed to do this.', 'zigconnect')); } 
    65         ob_clean(); 
    66         $zc_conn_id = $objZigConnect->Params['zc_conn_id']; 
    67         $intThisPostID = $objZigConnect->Params['intThisPostID']; 
    68         $intOtherPostID = $objZigConnect->Params['intOtherPostID']; 
    69         $objThisPost = get_post($intThisPostID); 
    70         $objOtherPost = get_post($intOtherPostID); 
     58        public function DoAjaxGetRow() { 
     59            global $objZigConnect; 
     60            if (!current_user_can('edit_posts')) { wp_die(__('You are not allowed to do this.', 'zigconnect')); } 
     61            ob_clean(); 
     62            $zc_conn_id = $objZigConnect->Params['zc_conn_id']; 
     63            $intThisPostID = $objZigConnect->Params['intThisPostID']; 
     64            $intOtherPostID = $objZigConnect->Params['intOtherPostID']; 
     65            $objThisPost = get_post($intThisPostID); 
     66            $objOtherPost = get_post($intOtherPostID); 
    7167 
    72         $intFieldsPerRow = $objZigConnect->Options['FieldsPerRow']; 
    73         if (!is_numeric($intFieldsPerRow)) $intFieldsPerRow = 3; 
    74         ?> 
    75         <tr class="firstrow"> 
    76         <td><input type="checkbox" name="zigconnect_metabox_links[<?php echo $zc_conn_id?>][]" value="<?php echo $intOtherPostID?>" checked="checked" />&nbsp;<?php echo $objOtherPost->post_title?>&nbsp;</td> 
    77         <?php 
    78         $arrFieldIDs = $objZigConnect->GetFieldIDs($zc_conn_id); 
    79         $col = 0; 
    80         $zc_link_id = $objZigConnect->GetLinkIDByPosts($intThisPostID, $intOtherPostID, $zc_conn_id); 
    81         if ($arrFieldIDs) 
    82             { 
    83             foreach ($arrFieldIDs as $zc_field_id) 
    84                 { 
    85                 $col++; 
    86                 $objField = $objZigConnect->GetField($zc_field_id); 
    87                 $zc_data_id = $objZigConnect->GetDataIDByFieldAndLink($zc_field_id, $zc_link_id); 
    88                 ?> 
    89                 <td style="text-align:left;"> 
    90                 <?php 
    91                 switch ($objField->zc_field_type) 
    92                     { 
    93                     case 'CHECKBOX' : 
    94                         ?> 
    95                         <input class="zc_field_<?php echo $objField->zc_field_name?>" type="checkbox" name="zigconnect_metabox_data[<?php echo $zc_field_id?>][<?php echo $intOtherPostID?>]" value="1" <?php if ($objZigConnect->GetData($zc_data_id)->zc_data_value == '1') { echo('checked="checked"'); } ?> /> 
    96                         <?php  
    97                         echo $objField->zc_field_prompt; 
    98                         break; 
    99                     default : # TEXT 
    100                         echo $objField->zc_field_prompt; 
    101                         ?> 
    102                         <br /> 
    103                         <input class="zc_field_<?php echo $objField->zc_field_name?>" type="text" size="<?php echo $objField->zc_field_size?>" name="zigconnect_metabox_data[<?php echo $zc_field_id?>][<?php echo $intOtherPostID?>]" value="<?php echo $objZigConnect->GetData($zc_data_id)->zc_data_value?>" /> 
    104                         <?php 
    105                         break; 
    106                     } 
    107                 ?> 
    108                 </td> 
    109                 <?php 
    110                 if ($col % $intFieldsPerRow == 0) echo '</tr><tr><td></td>'; 
    111                 } 
    112             if ($col % $intFieldsPerRow != 0) echo str_repeat('<td></td>', $intFieldsPerRow - ($col % $intFieldsPerRow)); 
    113             } 
    114         ?> 
    115         </tr> 
    116         <?php 
    117         exit(); 
    118         } 
    119  
    120  
    121     public function DoAjaxAddAll() 
    122         { 
    123         global $objZigConnect; 
    124         if (!current_user_can('edit_posts')) { wp_die(__('You are not allowed to do this.', 'zigconnect')); } 
    125         ob_clean(); 
    126         $intThisPostID = esc_attr($objZigConnect->Params['intThisPostID']); 
    127         $zc_conn_id = esc_attr($objZigConnect->Params['zc_conn_id']); 
    128         # we can do everything with the above two parameters 
    129         $objThisPost = get_post($intThisPostID); 
    130         $strOtherType = $objZigConnect->GetOtherType($zc_conn_id, $objThisPost->post_type); 
    131         $arrAllPostIDs = $objZigConnect->GetPostIDsByType($strOtherType); 
    132         $arrLinkedPostIDs = $objZigConnect->GetLinkedPostIDs($intThisPostID, $strOtherType, $zc_conn_id); 
    133         $arrPostIDsToLink = array_diff($arrAllPostIDs, $arrLinkedPostIDs); 
    134  
    135         $intFieldsPerRow = $objZigConnect->Options['FieldsPerRow']; 
    136         if (!is_numeric($intFieldsPerRow)) $intFieldsPerRow = 3; 
    137  
    138         foreach ($arrPostIDsToLink as $intOtherPostID) 
    139             { 
    140             $objOtherPost = get_post($intOtherPostID); 
     68            $intFieldsPerRow = $objZigConnect->Options['FieldsPerRow']; 
     69            if (!is_numeric($intFieldsPerRow)) $intFieldsPerRow = 3; 
    14170            ?> 
    142             <tr> 
     71            <tr class="firstrow"> 
    14372            <td><input type="checkbox" name="zigconnect_metabox_links[<?php echo $zc_conn_id?>][]" value="<?php echo $intOtherPostID?>" checked="checked" />&nbsp;<?php echo $objOtherPost->post_title?>&nbsp;</td> 
    14473            <?php 
    14574            $arrFieldIDs = $objZigConnect->GetFieldIDs($zc_conn_id); 
    14675            $col = 0; 
    147             if ($arrFieldIDs) 
    148                 { 
    149                 foreach ($arrFieldIDs as $zc_field_id) 
    150                     { 
     76            $zc_link_id = $objZigConnect->GetLinkIDByPosts($intThisPostID, $intOtherPostID, $zc_conn_id); 
     77            if ($arrFieldIDs) { 
     78                foreach ($arrFieldIDs as $zc_field_id) { 
    15179                    $col++; 
    15280                    $objField = $objZigConnect->GetField($zc_field_id); 
     81                    $zc_data_id = $objZigConnect->GetDataIDByFieldAndLink($zc_field_id, $zc_link_id); 
    15382                    ?> 
    154                     <td class="right"> 
     83                    <td style="text-align:left;"> 
    15584                    <?php 
    156                     echo $objField->zc_field_prompt; 
    157                     ?>: 
    158                     <input type="text" name="zigconnect_metabox_data[<?php echo $zc_field_id?>][<?php echo $intOtherPostID?>]" /> 
     85                    switch ($objField->zc_field_type) { 
     86                        case 'CHECKBOX' : 
     87                            $zc_data_value = 0; 
     88                            if (is_numeric($zc_data_id)) { 
     89                                $zc_data_value = $objZigConnect->GetData($zc_data_id)->zc_data_value; 
     90                            } 
     91                            ?> 
     92                            <input class="zc_field_<?php echo $objField->zc_field_name?>" type="checkbox" name="zigconnect_metabox_data[<?php echo $zc_field_id?>][<?php echo $intOtherPostID?>]" value="1" <?php if ($zc_data_value == '1') { echo('checked="checked"'); } ?> /> 
     93                            <?php 
     94                            echo $objField->zc_field_prompt; 
     95                        break; 
     96                        default : # TEXT 
     97                            $zc_data_value = ''; 
     98                            if (is_numeric($zc_data_id)) { 
     99                                $zc_data_value = $objZigConnect->GetData($zc_data_id)->zc_data_value; 
     100                            } 
     101                            echo $objField->zc_field_prompt; 
     102                            ?> 
     103                            <br /> 
     104                            <input class="zc_field_<?php echo $objField->zc_field_name?>" type="text" size="<?php echo $objField->zc_field_size?>" name="zigconnect_metabox_data[<?php echo $zc_field_id?>][<?php echo $intOtherPostID?>]" value="<?php echo $objZigConnect->GetData($zc_data_id)->zc_data_value?>" /> 
     105                            <?php 
     106                        break; 
     107                    } 
     108                    ?> 
    159109                    </td> 
    160110                    <?php 
    161111                    if ($col % $intFieldsPerRow == 0) echo '</tr><tr><td></td>'; 
    162                     } 
     112                } 
    163113                if ($col % $intFieldsPerRow != 0) echo str_repeat('<td></td>', $intFieldsPerRow - ($col % $intFieldsPerRow)); 
    164                 } 
     114            } 
    165115            ?> 
    166116            </tr> 
    167117            <?php 
    168             } 
    169         exit(); 
     118            exit(); 
    170119        } 
    171120 
    172121 
    173     } 
     122        public function DoAjaxAddAll() { 
     123            global $objZigConnect; 
     124            if (!current_user_can('edit_posts')) { wp_die(__('You are not allowed to do this.', 'zigconnect')); } 
     125            ob_clean(); 
     126            $intThisPostID = esc_attr($objZigConnect->Params['intThisPostID']); 
     127            $zc_conn_id = esc_attr($objZigConnect->Params['zc_conn_id']); 
     128            # we can do everything with the above two parameters 
     129            $objThisPost = get_post($intThisPostID); 
     130            $strOtherType = $objZigConnect->GetOtherType($zc_conn_id, $objThisPost->post_type); 
     131            $arrAllPostIDs = $objZigConnect->GetPostIDsByType($strOtherType); 
     132            $arrLinkedPostIDs = $objZigConnect->GetLinkedPostIDs($intThisPostID, $strOtherType, $zc_conn_id); 
     133            $arrPostIDsToLink = array_diff($arrAllPostIDs, $arrLinkedPostIDs); 
     134 
     135            $intFieldsPerRow = $objZigConnect->Options['FieldsPerRow']; 
     136            if (!is_numeric($intFieldsPerRow)) $intFieldsPerRow = 3; 
     137 
     138            foreach ($arrPostIDsToLink as $intOtherPostID) { 
     139                $objOtherPost = get_post($intOtherPostID); 
     140                ?> 
     141                <tr> 
     142                <td><input type="checkbox" name="zigconnect_metabox_links[<?php echo $zc_conn_id?>][]" value="<?php echo $intOtherPostID?>" checked="checked" />&nbsp;<?php echo $objOtherPost->post_title?>&nbsp;</td> 
     143                <?php 
     144                $arrFieldIDs = $objZigConnect->GetFieldIDs($zc_conn_id); 
     145                $col = 0; 
     146                if ($arrFieldIDs) { 
     147                    foreach ($arrFieldIDs as $zc_field_id) { 
     148                        $col++; 
     149                        $objField = $objZigConnect->GetField($zc_field_id); 
     150                        ?> 
     151                        <td class="right"> 
     152                        <?php 
     153                        echo $objField->zc_field_prompt; 
     154                        ?>: 
     155                        <input type="text" name="zigconnect_metabox_data[<?php echo $zc_field_id?>][<?php echo $intOtherPostID?>]" /> 
     156                        </td> 
     157                        <?php 
     158                        if ($col % $intFieldsPerRow == 0) echo '</tr><tr><td></td>'; 
     159                    } 
     160                    if ($col % $intFieldsPerRow != 0) echo str_repeat('<td></td>', $intFieldsPerRow - ($col % $intFieldsPerRow)); 
     161                } 
     162                ?> 
     163                </tr> 
     164                <?php 
     165            } 
     166            exit(); 
     167        } 
     168 
     169 
     170    } # END OF CLASS 
     171 
     172 
     173} else { 
     174 
     175    wp_die('Namespace clash! Class ZigConnectAjaxCallBacks already exists.'); 
     176 
     177} 
    174178 
    175179 
  • zigconnect/trunk/zigconnect-optionbuilder.php

    r359192 r1579799  
    22 
    33 
    4 class ZigConnectOptionBuilder 
    5     { 
    6     function __construct() 
    7         { 
    8         if (!$this->Options = get_option('zigconnect_options'))  
    9             {  
    10             $this->Options = array();  
    11             add_option('zigconnect_options', $this->Options); 
     4if (!class_exists('ZigConnectOptionBuilder')) { 
     5 
     6 
     7    final class ZigConnectOptionBuilder { 
     8 
     9 
     10        function __construct() { 
     11            if (!$this->Options = get_option('zigconnect_options')) { 
     12                $this->Options = array(); 
     13                add_option('zigconnect_options', $this->Options); 
    1214            } 
    13         # EXAMPLE: if (!isset($this->Options['AdminPerPage'])) { $this->Options['AdminPerPage'] = 20; } 
     15            # EXAMPLE: if (!isset($this->Options['AdminPerPage'])) { $this->Options['AdminPerPage'] = 20; } 
     16            $this->Options['DeleteOptionsNextDeactivate'] = 0; # always reset this 
     17            $this->Options['DeleteTablesNextDeactivate'] = 0; # always reset this 
     18            $this->Options['JustActivated'] = 1; # always SET this 
     19            update_option("zigconnect_options", $this->Options); # re-save 
     20        } 
    1421 
    15         $this->Options['DeleteOptionsNextDeactivate'] = 0; # always reset this 
    16         $this->Options['DeleteTablesNextDeactivate'] = 0; # always reset this 
    17         $this->Options['JustActivated'] = 1; # always SET this 
    18         update_option("zigconnect_options", $this->Options); # re-save 
    19         } 
     22 
    2023    } 
    2124 
    2225 
     26} else { 
     27 
     28    wp_die('Namespace clash! Class ZigConnectOptionBuilder already exists.'); 
     29 
     30} 
     31 
     32 
    2333# EOF 
  • zigconnect/trunk/zigconnect-tablebuilder.php

    r417261 r1579799  
    22 
    33 
    4 class ZigConnectTableBuilder 
    5     { 
    6     function __construct() 
    7         { 
    8         global $objZigConnect; 
    9         $sql = file_get_contents($objZigConnect->PluginDirectory . 'sql/zigconnect.sql'); 
    10         $sql = str_replace('ZIGCONNECT_TABLENAME_ZC_CONN', $objZigConnect->ConnTable, $sql); 
    11         $sql = str_replace('ZIGCONNECT_TABLENAME_ZC_FIELD', $objZigConnect->FieldTable, $sql); 
    12         $sql = str_replace('ZIGCONNECT_TABLENAME_ZC_LINK', $objZigConnect->LinkTable, $sql); 
    13         $sql = str_replace('ZIGCONNECT_TABLENAME_ZC_DATA', $objZigConnect->DataTable, $sql); 
    14         require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); 
    15         dbDelta($sql); 
     4if (!class_exists('ZigConnectTableBuilder')) { 
     5 
     6 
     7    final class ZigConnectTableBuilder { 
     8 
     9 
     10        function __construct() { 
     11            global $objZigConnect; 
     12            $sql = file_get_contents($objZigConnect->PluginDirectory . 'sql/zigconnect.sql'); 
     13            $sql = str_replace('ZIGCONNECT_TABLENAME_ZC_CONN', $objZigConnect->ConnTable, $sql); 
     14            $sql = str_replace('ZIGCONNECT_TABLENAME_ZC_FIELD', $objZigConnect->FieldTable, $sql); 
     15            $sql = str_replace('ZIGCONNECT_TABLENAME_ZC_LINK', $objZigConnect->LinkTable, $sql); 
     16            $sql = str_replace('ZIGCONNECT_TABLENAME_ZC_DATA', $objZigConnect->DataTable, $sql); 
     17            require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); 
     18            dbDelta($sql); 
    1619        } 
    1720 
     
    2023 
    2124 
     25} else { 
     26 
     27    wp_die('Namespace clash! Class ZigConnectTableBuilder already exists.'); 
     28 
     29} 
     30 
     31 
    2232# EOF 
  • zigconnect/trunk/zigconnect-templatetags.php

    r388399 r1579799  
    22 
    33 
    4 function zc_get_connections($intPostID = 0) 
    5     { 
     4function zc_get_connections($intPostID = 0) { 
    65    global $objZigConnect; 
    76    if (!is_object($objZigConnect)) return false; 
    87    return $objZigConnect->GetConnectionIDs($intPostID); 
    9     } 
     8} 
    109 
    1110 
    12 function zc_get_connection_by_name($strName) 
    13     { 
     11function zc_get_connection_by_name($strName) { 
    1412    global $objZigConnect; 
    1513    if (!is_object($objZigConnect)) return false; 
    1614    return $objZigConnect->GetConnectionIDByName($strName); 
    17     } 
     15} 
    1816 
    1917 
    20 function zc_get_connection_by_slug($strSlug) 
    21     { 
     18function zc_get_connection_by_slug($strSlug) { 
    2219    global $objZigConnect; 
    2320    if (!is_object($objZigConnect)) return false; 
    2421    return $objZigConnect->GetConnectionIDBySlug($strSlug); 
    25     } 
     22} 
    2623 
    2724 
    28 function zc_get_linked_posts($strOtherType, $zc_conn_id = 0) 
    29     { 
     25function zc_get_linked_posts($strOtherType, $zc_conn_id = 0) { 
    3026    global $objZigConnect, $post; 
    3127    if (!is_object($objZigConnect)) return false; 
    3228    return $objZigConnect->GetLinkedPostIDs($post->ID, $strOtherType, $zc_conn_id); 
    33     } 
     29} 
    3430 
    3531 
    36 function zc_get_linked_posts_of_post($intThisPostID, $strOtherType, $zc_conn_id = 0) 
    37     { 
     32function zc_get_linked_posts_of_post($intThisPostID, $strOtherType, $zc_conn_id = 0) { 
    3833    global $objZigConnect, $post; 
    3934    if (!is_object($objZigConnect)) return false; 
    4035    return $objZigConnect->GetLinkedPostIDs($intThisPostID, $strOtherType, $zc_conn_id); 
    41     } 
     36} 
    4237 
    4338 
    44 function zc_get_linkdata($intOtherPostID, $zc_conn_id = 0, $intThisPostOverriddenID = 0) 
    45     { 
     39function zc_get_linkdata($intOtherPostID, $zc_conn_id = 0, $intThisPostOverriddenID = 0) { 
    4640    global $objZigConnect, $post; 
    4741    $intThisPostID = $post->ID; 
     
    5246    $arrFieldIDs = $objZigConnect->GetFieldIDs($zc_conn_id); 
    5347    $arrDataPairs = array(); 
    54     foreach ($arrFieldIDs as $zc_field_id) 
    55         { 
     48    foreach ($arrFieldIDs as $zc_field_id) { 
    5649        $zc_data_id = $objZigConnect->GetDataIDByFieldAndLink($zc_field_id, $zc_link_id); 
    5750        $arrDataPairs[$objZigConnect->GetField($zc_field_id)->zc_field_name] = $objZigConnect->GetData($zc_data_id)->zc_data_value; 
    58         } 
     51    } 
    5952    return $arrDataPairs; 
    60     } 
     53} 
    6154 
    6255 
    63 function zc_get_linkid($intOtherPostID, $zc_conn_id = 0) 
    64     { 
     56function zc_get_linkid($intOtherPostID, $zc_conn_id = 0) { 
    6557    global $objZigConnect, $post; 
    6658    if (!is_object($objZigConnect)) return false; 
    6759    return $objZigConnect->GetLinkIDByPosts($post->ID, $intOtherPostID, $zc_conn_id); 
    68     } 
     60} 
    6961 
    7062 
  • zigconnect/trunk/zigconnect.php

    r484503 r1579799  
    22/* 
    33Plugin Name: ZigConnect 
    4 Plugin URI: http://www.zigpress.com/wordpress/plugins/zigconnect/ 
    5 Version: 0.9 
    6 Requires at least: 3.1 
    7 Tested up to: 3.2.1 
     4Plugin URI: https://www.zigpress.com/plugins/zigconnect/ 
     5Version: 0.9.5 
     6Requires at least: 4.5 
     7Tested up to: 4.7.1 
    88Description: Allows you to link post types and posts to each other and attach data directly to the links. 
    99Author: ZigPress 
    10 Author URI: http://www.zigpress.com/ 
     10Author URI: https://www.zigpress.com/ 
    1111License: GPLv2 
    1212*/ 
     
    1414 
    1515/* 
    16 Copyright (c) 2011-2012 ZigPress 
     16Copyright (c) 2011-2017 ZigPress 
    1717 
    1818This program is free software; you can redistribute it and/or 
     
    2929along with this program; if not, write to the Free Software 
    3030Foundation Inc, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 
    31 */ 
    32  
    33  
    34 /* 
    35 ZigPress PHP code uses Whitesmiths indent style: http://en.wikipedia.org/wiki/Indent_style#Whitesmiths_style 
    3631*/ 
    3732 
     
    5045 
    5146 
    52 class ZigConnect 
    53     { 
    54     public $DB; 
    55     public $Params; 
    56     public $Options; 
    57     public $PluginFolder; 
    58     public $ConnTable; 
    59     public $FieldTable; 
    60     public $LinkTable; 
    61     public $DataTable; 
    62     public $ListTable; 
    63     public $Result; 
    64     public $ResultType; 
    65     public $ResultMessage; 
    66     public $HelpText; 
    67     public $FieldTypes; 
    68  
    69  
    70     function __construct() 
    71         { 
    72         load_plugin_textdomain('zigconnect', false, basename(dirname(__FILE__)) . '/languages/'); 
    73         global $wp_version, $wpdb; 
    74         if (version_compare(phpversion(), '5.2.4', '<')) $this->AutoDeactivate('ZigConnect requires PHP 5.2.4 or newer and has now deactivated itself. Please update your server before reactivating.');  
    75         if (version_compare($wp_version, '3.1', '<')) $this->AutoDeactivate('ZigConnect requires WordPress 3.1 or newer and has now deactivated itself. Please update your installation before reactivating.');  
    76         if (version_compare($wpdb->db_version(), '5.0.15', '<')) $this->AutoDeactivate('ZigConnect requires MySQL 5.0.15 or newer and has now deactivated itself. Please update your server before reactivating.');  
    77         $this->DB = &$wpdb; 
    78         $this->PluginFolder = get_bloginfo('wpurl') . '/' . PLUGINDIR.'/'.dirname(plugin_basename(__FILE__)) . '/'; # url replaced with wpurl in version 0.8.6 
    79         $this->PluginDirectory = WP_PLUGIN_DIR . '/zigconnect/'; # added in version 0.8.6 for use with sql file 
    80  
    81 #       echo $this->PluginFolder . '<br />'; 
    82 #       echo $this->PluginDirectory . '<br />'; 
    83  
    84         $this->GetParams(); 
    85         $this->Options = get_option('zigconnect_options'); 
    86         $this->ConnTable = $this->DB->prefix . 'zc_connections'; 
    87         $this->FieldTable = $this->DB->prefix . 'zc_fields'; 
    88         $this->LinkTable = $this->DB->prefix . 'zc_links'; 
    89         $this->DataTable = $this->DB->prefix . 'zc_data'; 
    90         $this->ListTable = $this->DB->prefix . 'zc_listitems'; 
    91         add_action('admin_init', array($this, 'ActionAdminInit')); 
    92         add_action('add_meta_boxes', array($this, 'ActionMetaBoxes')); 
    93         add_action('save_post', array($this, 'ActionSaveMetaBoxData')); 
    94         add_action('delete_post', array($this, 'ActionDeletePostData')); 
    95         add_action('admin_head', array($this, 'ActionAdminHead')); 
    96         add_action('manage_posts_custom_column', array($this, 'ActionCustomColumns')); 
    97         add_action('admin_menu', array($this, 'ActionAdminMenu')); 
    98         add_action('admin_footer', array($this, 'ActionAdminFooter')); 
    99         add_filter('plugin_row_meta', array($this, 'FilterPluginRowMeta'), 10, 2 ); 
    100         $this->HelpText = $this->GetAdminHelp(); 
    101         $this->FieldTypes = array('TEXT', 'CHECKBOX'); 
    102         } 
    103  
    104  
    105     # ACTIVATION & DEACTIVATION 
    106  
    107  
    108     public function Activate() 
    109         { 
    110         new ZigConnectOptionBuilder(); 
    111         } 
    112  
    113  
    114     public function Deactivate() 
    115         { 
    116         if ($this->Options['DeleteTablesNextDeactivate'] == 1) 
    117             { 
    118             $this->DB->query("DROP TABLE IF EXISTS `" . $this->ConnTable. "`"); 
    119             $this->DB->query("DROP TABLE IF EXISTS `" . $this->FieldTable. "`"); 
    120             $this->DB->query("DROP TABLE IF EXISTS `" . $this->LinkTable. "`"); 
    121             $this->DB->query("DROP TABLE IF EXISTS `" . $this->DataTable. "`"); 
    122             $this->DB->query("DROP TABLE IF EXISTS `" . $this->ListTable. "`"); 
    123             } 
    124         if ($this->Options['DeleteOptionsNextDeactivate'] == 1) delete_option("zigconnect_options"); 
    125         } 
    126  
    127  
    128     public function AutoDeactivate($strMessage) 
    129         { 
    130         require_once ABSPATH . '/wp-admin/includes/plugin.php'; 
    131         deactivate_plugins(__FILE__); 
    132         wp_die(__($strMessage, 'zigconnect'));  
    133         } 
    134  
    135  
    136     # ACTIONS 
    137  
    138  
    139     public function ActionAdminInit() 
    140         { 
    141         if ($this->Options['JustActivated'] == 1) 
    142             { 
    143             new ZigConnectTableBuilder(); 
    144             $this->Options['JustActivated'] = 0; 
    145             update_option("zigconnect_options", $this->Options); 
    146             } 
    147         foreach ($this->GetConnectedPostTypes() as $type) add_filter('manage_edit-' . $type . '_columns', array($this, 'ActionAddCustomColumn')); 
    148         new ZigConnectAjaxCallBacks($this->Params['zigaction']); 
    149         new ZigConnectAdminCallBacks($this->Params['zigaction']); 
    150         } 
    151  
    152  
    153     public function ActionAdminHead() 
    154         { 
    155         ?> 
    156         <link rel="stylesheet" href="<?php echo $this->PluginFolder?>css/zigconnect-admin.css?<?php echo rand()?>" type="text/css" media="screen" /> 
    157         <?php 
    158         } 
    159  
    160  
    161     public function ActionAddCustomColumn($columns) 
    162         { 
    163         $newcolumn = array('zigconnections'=>__('ZigConnections', 'zigconnect')); 
    164         return array_merge($columns, $newcolumn); 
    165         } 
    166  
    167  
    168     function ActionCustomColumns($column) 
    169         { 
    170         global $post; 
    171         switch ($column) 
    172             { 
    173             case 'zigconnections': 
    174                 $arrConnectedTypes = $this->GetConnectedPostTypes($post->post_type); 
    175                 if (count($arrConnectedTypes) >= 1) 
    176                     { 
    177                     echo '<ul>'; 
    178                     foreach ($arrConnectedTypes as $intIndex=>$strConnectedType) 
    179                         { 
    180                         echo '<li>' . count($this->GetLinkedPostIDs($post->ID, $strConnectedType, 0)) . ' ' . $strConnectedType. 's</li>'; 
     47if (!class_exists('ZigConnect')) { 
     48 
     49 
     50    final class ZigConnect { 
     51 
     52 
     53        public $DB; 
     54        public $Params; 
     55        public $Options; 
     56        public $PluginFolder; 
     57        public $ConnTable; 
     58        public $FieldTable; 
     59        public $LinkTable; 
     60        public $DataTable; 
     61        public $ListTable; 
     62        public $Result; 
     63        public $ResultType; 
     64        public $ResultMessage; 
     65        public $HelpText; 
     66        public $FieldTypes; 
     67 
     68 
     69        function __construct() { 
     70            load_plugin_textdomain('zigconnect', false, basename(dirname(__FILE__)) . '/languages/'); 
     71            global $wp_version, $wpdb; 
     72            if (version_compare(phpversion(), '5.3', '<')) $this->AutoDeactivate('ZigConnect requires PHP 5.3 or newer and has now deactivated itself. Please update your server before reactivating.'); 
     73            if (version_compare($wp_version, '4.5', '<')) $this->AutoDeactivate('ZigConnect requires WordPress 4.5 or newer and has now deactivated itself. Please update your installation before reactivating.'); 
     74            if (version_compare($wpdb->db_version(), '5.5.3', '<')) $this->AutoDeactivate('ZigConnect requires MySQL 5.5.3 or newer and has now deactivated itself. Please update your server before reactivating.'); 
     75            $this->DB = &$wpdb; 
     76            $this->PluginFolder = get_bloginfo('wpurl') . '/' . PLUGINDIR.'/'.dirname(plugin_basename(__FILE__)) . '/'; # url replaced with wpurl in version 0.8.6 
     77            $this->PluginDirectory = WP_PLUGIN_DIR . '/zigconnect/'; # added in version 0.8.6 for use with sql file 
     78            $this->GetParams(); 
     79            $this->Options = get_option('zigconnect_options'); 
     80            $this->ConnTable = $this->DB->prefix . 'zc_connections'; 
     81            $this->FieldTable = $this->DB->prefix . 'zc_fields'; 
     82            $this->LinkTable = $this->DB->prefix . 'zc_links'; 
     83            $this->DataTable = $this->DB->prefix . 'zc_data'; 
     84            $this->ListTable = $this->DB->prefix . 'zc_listitems'; 
     85            add_action('admin_init', array($this, 'ActionAdminInit')); 
     86            add_action('add_meta_boxes', array($this, 'ActionMetaBoxes')); 
     87            add_action('save_post', array($this, 'ActionSaveMetaBoxData')); 
     88            add_action('delete_post', array($this, 'ActionDeletePostData')); 
     89            add_action('admin_head', array($this, 'ActionAdminHead')); 
     90            add_action('manage_posts_custom_column', array($this, 'ActionCustomColumns')); 
     91            add_action('admin_menu', array($this, 'ActionAdminMenu')); 
     92            add_action('admin_footer', array($this, 'ActionAdminFooter')); 
     93            add_filter('plugin_row_meta', array($this, 'FilterPluginRowMeta'), 10, 2 ); 
     94            $this->HelpText = $this->GetAdminHelp(); 
     95            $this->FieldTypes = array('TEXT', 'CHECKBOX'); 
     96        } 
     97 
     98 
     99        # ACTIVATION & DEACTIVATION 
     100 
     101 
     102        public function Activate() { 
     103            new ZigConnectOptionBuilder(); 
     104        } 
     105 
     106 
     107        public function Deactivate() { 
     108            if ($this->Options['DeleteTablesNextDeactivate'] == 1) { 
     109                $this->DB->query("DROP TABLE IF EXISTS `" . $this->ConnTable. "`"); 
     110                $this->DB->query("DROP TABLE IF EXISTS `" . $this->FieldTable. "`"); 
     111                $this->DB->query("DROP TABLE IF EXISTS `" . $this->LinkTable. "`"); 
     112                $this->DB->query("DROP TABLE IF EXISTS `" . $this->DataTable. "`"); 
     113                $this->DB->query("DROP TABLE IF EXISTS `" . $this->ListTable. "`"); 
     114            } 
     115            if ($this->Options['DeleteOptionsNextDeactivate'] == 1) delete_option("zigconnect_options"); 
     116        } 
     117 
     118 
     119        public function AutoDeactivate($strMessage) { 
     120            require_once ABSPATH . '/wp-admin/includes/plugin.php'; 
     121            deactivate_plugins(__FILE__); 
     122            wp_die(__($strMessage, 'zigconnect')); 
     123        } 
     124 
     125 
     126        # ACTIONS 
     127 
     128 
     129        public function ActionAdminInit() { 
     130            if ($this->Options['JustActivated'] == 1) { 
     131                new ZigConnectTableBuilder(); 
     132                $this->Options['JustActivated'] = 0; 
     133                update_option("zigconnect_options", $this->Options); 
     134            } 
     135            foreach ($this->GetConnectedPostTypes() as $type) add_filter('manage_edit-' . $type . '_columns', array($this, 'ActionAddCustomColumn')); 
     136            new ZigConnectAjaxCallBacks($this->Params['zigaction']); 
     137            new ZigConnectAdminCallBacks($this->Params['zigaction']); 
     138        } 
     139 
     140 
     141        public function ActionAdminHead() { 
     142            ?> 
     143            <link rel="stylesheet" href="<?php echo $this->PluginFolder?>css/zigconnect-admin.css?<?php echo rand()?>" type="text/css" media="screen" /> 
     144            <?php 
     145        } 
     146 
     147 
     148        public function ActionAddCustomColumn($columns) { 
     149            $newcolumn = array('zigconnections'=>__('ZigConnections', 'zigconnect')); 
     150            return array_merge($columns, $newcolumn); 
     151        } 
     152 
     153 
     154        function ActionCustomColumns($column) { 
     155            global $post; 
     156            switch ($column) { 
     157                case 'zigconnections': 
     158                    $arrConnectedTypes = $this->GetConnectedPostTypes($post->post_type); 
     159                    if (count($arrConnectedTypes) >= 1) { 
     160                        echo '<ul>'; 
     161                        foreach ($arrConnectedTypes as $intIndex=>$strConnectedType) { 
     162                            echo '<li>' . count($this->GetLinkedPostIDs($post->ID, $strConnectedType, 0)) . ' ' . $strConnectedType. 's</li>'; 
    181163                        } 
    182                     echo '</ul>'; 
     164                        echo '</ul>'; 
    183165                    } 
    184166                break; 
     
    187169 
    188170 
    189     public function ActionMetaBoxes() 
    190         { 
    191         global $post; 
    192         $arrTypes = $this->GetConnectedPostTypes($post->post_type); 
    193         foreach ($arrTypes as $strType) 
    194             { 
    195             $objType = get_post_type_object($strType); 
    196             if ($arrConnectionIDs = $this->GetConnectionIDsByTypes($post->post_type, $strType)) 
    197                 { 
    198                 foreach ($arrConnectionIDs as $zc_conn_id) 
    199                     { 
    200                     $objConnection = $this->GetConnection($zc_conn_id); 
    201                     add_meta_box('zigconnect-' . $objConnection->zc_conn_slug, 'ZigConnect: ' . $objType->labels->name . ' (' . $objConnection->zc_conn_name . ')', array($this, 'DoMetaBox'), $post->post_type, 'normal', 'default', array('type'=>$objType->name, 'zc_conn_id'=>$zc_conn_id)); 
     171        public function ActionMetaBoxes() { 
     172            global $post; 
     173            $arrTypes = $this->GetConnectedPostTypes($post->post_type); 
     174            foreach ($arrTypes as $strType) { 
     175                $objType = get_post_type_object($strType); 
     176                if ($arrConnectionIDs = $this->GetConnectionIDsByTypes($post->post_type, $strType)) { 
     177                    foreach ($arrConnectionIDs as $zc_conn_id) { 
     178                        $objConnection = $this->GetConnection($zc_conn_id); 
     179                        add_meta_box('zigconnect-' . $objConnection->zc_conn_slug, 'ZigConnect: ' . $objType->labels->name . ' (' . $objConnection->zc_conn_name . ')', array($this, 'DoMetaBox'), $post->post_type, 'normal', 'default', array('type'=>$objType->name, 'zc_conn_id'=>$zc_conn_id)); 
    202180                    } 
    203181                } 
     
    206184 
    207185 
    208     public function ActionSaveMetaBoxData($post_id) 
    209         { 
    210         if (!wp_verify_nonce($_POST['zigconnect_metaboxes'], plugin_basename(__FILE__))) return $post_id; # crap out if bad nonce 
    211         if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id; # crap out if autosave 
    212         if (!current_user_can('manage_options')) return $post_id; # crap out if not an admin - CHANGE THIS TO SUITABLE CUSTOM TYPE PERMISSIONS 
    213         global $post; 
    214         $strThisType = $post->post_type; 
    215         $arrConnections = $_POST['zigconnect_metabox_connections']; 
    216         foreach ($arrConnections as $zc_conn_id) 
    217             { 
    218             $strOtherType = $this->GetOtherType($zc_conn_id, $strThisType); 
    219             $arrOtherPostIDsToLink = $_POST['zigconnect_metabox_links'][$zc_conn_id]; 
    220             $arrAllOtherPostIDs = $this->GetPostIDsByType($strOtherType); 
    221             foreach ($arrAllOtherPostIDs as $intOtherPostID) 
    222                 { 
    223                 if (@in_array($intOtherPostID, $arrOtherPostIDsToLink)) 
    224                     { 
    225                     $this->SaveLink($zc_conn_id, $post->ID, $intOtherPostID); 
     186        public function ActionSaveMetaBoxData($post_id) { 
     187            if (!wp_verify_nonce($_POST['zigconnect_metaboxes'], plugin_basename(__FILE__))) return $post_id; # crap out if bad nonce 
     188            if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id; # crap out if autosave 
     189            if (!current_user_can('manage_options')) return $post_id; # crap out if not an admin - CHANGE THIS TO SUITABLE CUSTOM TYPE PERMISSIONS 
     190            global $post; 
     191            $strThisType = $post->post_type; 
     192            $arrConnections = $_POST['zigconnect_metabox_connections']; 
     193            foreach ($arrConnections as $zc_conn_id) { 
     194                $strOtherType = $this->GetOtherType($zc_conn_id, $strThisType); 
     195                $arrOtherPostIDsToLink = $_POST['zigconnect_metabox_links'][$zc_conn_id]; 
     196                $arrAllOtherPostIDs = $this->GetPostIDsByType($strOtherType); 
     197                foreach ($arrAllOtherPostIDs as $intOtherPostID) { 
     198                    if (@in_array($intOtherPostID, $arrOtherPostIDsToLink)) { 
     199                        $this->SaveLink($zc_conn_id, $post->ID, $intOtherPostID); 
     200                    } else { 
     201                        $this->DeleteLink($this->GetLinkIDByPosts($post->ID, $intOtherPostID, $zc_conn_id)); 
    226202                    } 
    227                 else 
    228                     { 
    229                     $this->DeleteLink($this->GetLinkIDByPosts($post->ID, $intOtherPostID, $zc_conn_id)); 
    230                     } 
    231                 } 
    232             } 
    233         $arrFieldIDs = $_POST['zigconnect_metabox_data']; 
    234         if (is_array($arrFieldIDs)) 
    235             { 
    236             # here we must see if there are checkbox fields on this connection - if so, we add to the array if not already present 
    237             $arrCheckboxIDs = array(); 
    238             foreach ($arrConnections as $zc_conn_id) 
    239                 { 
    240                 $arrCheckboxIDs = array_merge($arrCheckboxIDs, $this->GetCheckboxIDs($zc_conn_id)); 
    241                 } 
    242             # now we have checkbox field IDs as values in this array 
    243             # for each one, is it already taken account of? 
    244             if (count($arrCheckboxIDs) >= 1) 
    245                 { 
    246                 foreach ($arrCheckboxIDs as $intCheckboxID) 
    247                     { 
    248                     if (!array_key_exists($intCheckboxID, $arrFieldIDs)) 
    249                         { 
    250                         $arrFieldIDs[$intCheckboxID] = $arrOtherPostIDsToLink; 
     203                } 
     204            } 
     205            $arrFieldIDs = $_POST['zigconnect_metabox_data']; 
     206            if (is_array($arrFieldIDs)) { 
     207                # here we must see if there are checkbox fields on this connection - if so, we add to the array if not already present 
     208                $arrCheckboxIDs = array(); 
     209                foreach ($arrConnections as $zc_conn_id) { 
     210                    $arrCheckboxIDs = array_merge($arrCheckboxIDs, $this->GetCheckboxIDs($zc_conn_id)); 
     211                } 
     212                # now we have checkbox field IDs as values in this array 
     213                # for each one, is it already taken account of? 
     214                if (count($arrCheckboxIDs) >= 1) { 
     215                    foreach ($arrCheckboxIDs as $intCheckboxID) { 
     216                        if (!array_key_exists($intCheckboxID, $arrFieldIDs)) { 
     217                            $arrFieldIDs[$intCheckboxID] = $arrOtherPostIDsToLink; 
    251218                        } 
    252219                    } 
    253220                } 
    254             # now we have added in all relevant checkboxes 
    255             foreach ($arrFieldIDs as $zc_field_id=>$arrOtherPostIDs) 
    256                 { 
    257                 $objField = $this->GetField($zc_field_id); 
    258 #echo $objField->zc_field_name . '<br/>'; 
    259                 # here, if the field is a CHECKBOX field 
    260                 if ($objField->zc_field_type == 'CHECKBOX') 
    261                     { 
    262 #echo 'checkbox<br />'; 
    263                     # we must go through ALL POSSIBLE "other" posts and set to zero (because UNCHECKED will be absent from the form post) 
    264                     foreach ($arrAllOtherPostIDs as $intOtherPostID) 
    265                         { 
    266                         $zc_link_id = $this->GetLinkIDByPosts($post->ID, $intOtherPostID); 
    267                         $objLink = $this->GetLink($zc_link_id); 
    268                         if ($objLink)  
    269                             { 
    270 #$tempshop = get_post($objLink->zc_link_to); 
    271 #echo 'setting ' . $tempshop->post_title . ' to 0<br/ >'; 
    272                             $this->SaveData($zc_field_id, $zc_link_id, 0); 
     221                # now we have added in all relevant checkboxes 
     222                foreach ($arrFieldIDs as $zc_field_id=>$arrOtherPostIDs) { 
     223                    $objField = $this->GetField($zc_field_id); 
     224                    # here, if the field is a CHECKBOX field 
     225                    if ($objField->zc_field_type == 'CHECKBOX') { 
     226                        # we must go through ALL POSSIBLE "other" posts and set to zero (because UNCHECKED will be absent from the form post) 
     227                        foreach ($arrAllOtherPostIDs as $intOtherPostID) { 
     228                            $zc_link_id = $this->GetLinkIDByPosts($post->ID, $intOtherPostID); 
     229                            $objLink = $this->GetLink($zc_link_id); 
     230                            if ($objLink) { 
     231                                $this->SaveData($zc_field_id, $zc_link_id, 0); 
    273232                            } 
    274233                        } 
    275234                    } 
    276                 # ok that's done 
    277                 foreach ($arrOtherPostIDs as $intOtherPostID=>$zc_data_value) 
    278                     { 
    279                     $objOtherPost = get_post($intOtherPostID); 
    280                     $arrOtherPostIDsToLink = $_POST['zigconnect_metabox_links'][$objField->zc_conn_id]; 
    281                     if (@in_array($intOtherPostID, $arrOtherPostIDsToLink)) 
    282                         { 
    283                         $this->SaveLink($objField->zc_conn_id, $post->ID, $intOtherPostID); 
    284                         $zc_link_id = $this->GetLinkIDByPosts($post->ID, $intOtherPostID); 
    285                         $objLink = $this->GetLink($zc_link_id); 
    286                         if ($objLink)  
    287                             { 
    288 #if ($objField->zc_field_type == 'CHECKBOX') 
    289 #{ 
    290 #$tempshop = get_post($objLink->zc_link_to); 
    291 #echo 'setting ' . $tempshop->post_title . ' to ' . $zc_data_value . '<br/ >'; 
    292 #} 
    293                             $this->SaveData($zc_field_id, $zc_link_id, $zc_data_value); 
     235                    # ok that's done 
     236                    foreach ($arrOtherPostIDs as $intOtherPostID=>$zc_data_value) { 
     237                        $objOtherPost = get_post($intOtherPostID); 
     238                        $arrOtherPostIDsToLink = $_POST['zigconnect_metabox_links'][$objField->zc_conn_id]; 
     239                        if (@in_array($intOtherPostID, $arrOtherPostIDsToLink)) { 
     240                            $this->SaveLink($objField->zc_conn_id, $post->ID, $intOtherPostID); 
     241                            $zc_link_id = $this->GetLinkIDByPosts($post->ID, $intOtherPostID); 
     242                            $objLink = $this->GetLink($zc_link_id); 
     243                            if ($objLink) { 
     244                                $this->SaveData($zc_field_id, $zc_link_id, $zc_data_value); 
    294245                            } 
    295246                        } 
     
    297248                } 
    298249            } 
    299 #die(); 
    300         } 
    301  
    302  
    303     public function ActionDeletePostData($intPostID) 
    304         { 
    305         # this is hopelessly inadequate right now - we need to get all links for post so we can delete data items too, and list items that are only linked 
    306         $this->DB->query("DELETE FROM " . $this->ListTable . " WHERE zc_post_id=" . $intPostID . " "); 
    307         $this->DB->query("DELETE FROM " . $this->LinkTable . " WHERE (zc_link_from=" . $intPostID . ") OR (zc_link_to=" . $intPostID . ") "); 
    308         return true; 
    309         } 
    310  
    311  
    312     public function ActionAdminMenu() 
    313         { 
    314         $arrAdminMenuHooks = array(); 
    315         $arrAdminMenuHooks[] = add_menu_page('ZigConnect', 'ZigConnect', 'manage_options', 'zigconnect-menu', array($this, 'DoAdminPageMain'), $this->PluginFolder . 'images/preferences-system-windows.png'); 
    316         $arrAdminMenuHooks[] = add_submenu_page('zigconnect-menu', 'Fields &lsaquo; ZigConnect', 'Fields', 'manage_options', 'zigconnect-menu-fields', array($this, 'DoAdminPageFields')); 
    317         $arrAdminMenuHooks[] = add_submenu_page('zigconnect-menu', 'Options &lsaquo; ZigConnect', 'Options', 'manage_options', 'zigconnect-menu-settings', array($this, 'DoAdminPageSettings')); 
    318         foreach ($arrAdminMenuHooks as $strHook) add_contextual_help($strHook, $this->HelpText); 
    319         } 
    320  
    321  
    322     public function ActionAdminFooter() 
    323         { 
    324         ?> 
    325         <script type="text/javascript" src="<?php echo $this->PluginFolder?>js/zigconnect-admin.js?<?php echo rand()?>"></script> 
    326         <?php 
    327         } 
    328  
    329  
    330     public function FilterPluginRowMeta($links, $file)  
    331         { 
    332         $plugin = plugin_basename(__FILE__); 
    333         if ($file == $plugin) return array_merge($links, array('<a target="_blank" href="http://www.zigpress.com/donations/">Donate</a>')); 
    334         return $links; 
    335         } 
    336  
    337  
    338     # FUNCTIONS 
    339  
    340  
    341     # GET ARRAYS OF IDS 
    342  
    343  
    344     public function GetConnectionIDs($intPostID = 0) 
    345         { 
    346         $sql = "SELECT zc_conn_id FROM " . $this->ConnTable . " "; 
    347         if ($intPostID > 0) 
    348             { 
    349             $objPost = get_post($intPostID); 
    350             $strPostType = $objPost->post_type; 
    351             $sql .= "WHERE (zc_conn_from='" . $strPostType . "') OR (zc_conn_to='" . $strPostType . "') "; 
    352             } 
    353         $sql .= "ORDER BY zc_conn_id ASC "; 
    354         return $this->DB->get_col($sql); 
    355         } 
    356  
    357  
    358     public function GetFieldIDs($zc_conn_id=false) 
    359         { 
    360         return $this->DB->get_col("SELECT zc_field_id FROM " . $this->FieldTable . " " . ( $zc_conn_id ? "WHERE (zc_conn_id=" . $zc_conn_id . ") " : "" ) . " ORDER BY zc_field_order ASC "); 
    361         } 
    362  
    363  
    364     public function GetCheckboxIDs($zc_conn_id=false) 
    365         { 
    366         return $this->DB->get_col("SELECT zc_field_id FROM " . $this->FieldTable . " " . "WHERE (zc_field_type='CHECKBOX') " . ( $zc_conn_id ? "AND (zc_conn_id=" . $zc_conn_id . ") " : "" ) . " ORDER BY zc_field_order ASC "); 
    367         } 
    368  
    369  
    370     public function GetLinkIDs($zc_conn_id=false) 
    371         { 
    372         return $this->DB->get_col("SELECT zc_link_id FROM " . $this->LinkTable . " " . ( $zc_conn_id ? "WHERE (zc_conn_id=" . $zc_conn_id . ") " : "" ) . " ORDER BY zc_link_id ASC "); 
    373         } 
    374  
    375  
    376     public function GetDataIDs($zc_conn_id = false, $zc_field_id = false) 
    377         { 
    378         # pass either one or the other, not both 
    379         $sql  = "SELECT zc_data_id FROM " . $this->DataTable . " "; 
    380         if ($zc_conn_id) { $sql .= "WHERE zc_conn_id=" . $zc_conn_id . " "; } 
    381         elseif ($zc_field_id) { $sql .= "WHERE zc_field_id=" . $zc_field_id . " "; } 
    382         return $this->DB->get_col($sql); 
    383         } 
    384  
    385  
    386     public function GetPostIDsByType($strType) 
    387         { 
    388         return $this->DB->get_col("SELECT ID FROM " . $this->DB->posts . " WHERE (post_type='" . $strType . "') AND (post_status='publish') "); 
    389         } 
    390  
    391  
    392     public function GetLinkedPostIDs($intPostID, $strType = '', $zc_conn_id = 0) 
    393         { 
    394         # gets linked post ids whether the passed post id is a "from" or a "to" 
    395         $sql  = "SELECT " . $this->LinkTable . ".zc_link_to FROM " . $this->LinkTable . " LEFT JOIN " . $this->DB->posts . " ON (" . $this->LinkTable . ".zc_link_to=" . $this->DB->posts . ".ID) WHERE (zc_link_from=" . $intPostID . ") "; 
    396         if ($strType != '') $sql .= "AND (" . $this->DB->posts . ".post_type='" . $strType . "') "; 
    397         if ($zc_conn_id > 0) $sql .= "AND (" . $this->LinkTable . ".zc_conn_id=" . $zc_conn_id . ") "; 
    398         $arrIDs = $this->DB->get_col($sql); 
    399         $sql  = "SELECT " . $this->LinkTable . ".zc_link_from FROM " . $this->LinkTable . " LEFT JOIN " . $this->DB->posts . " ON (" . $this->LinkTable . ".zc_link_from=" . $this->DB->posts . ".ID) WHERE (zc_link_to=" . $intPostID . ") "; 
    400         if ($strType != '') $sql .= "AND (" . $this->DB->posts . ".post_type='" . $strType . "') "; 
    401         if ($zc_conn_id > 0) $sql .= "AND (" . $this->LinkTable . ".zc_conn_id=" . $zc_conn_id . ") "; 
    402         return array_unique(array_merge($arrIDs, $this->DB->get_col($sql))); 
    403         } 
    404  
    405  
    406     # GET SINGLE IDS 
    407  
    408  
    409     public function GetConnectionIDsByTypes($zc_conn_from, $zc_conn_to) 
    410         { 
    411         return $this->DB->get_col("SELECT zc_conn_id FROM " . $this->ConnTable . " WHERE ((zc_conn_from='" . $zc_conn_from . "') AND (zc_conn_to='" . $zc_conn_to . "')) OR ((zc_conn_to='" . $zc_conn_from . "') AND (zc_conn_from='" . $zc_conn_to . "') AND (zc_conn_reciprocal=1)) "); 
    412         } 
    413  
    414  
    415     public function GetConnectionIDByTypes($zc_conn_from, $zc_conn_to) 
    416         { 
    417         return $this->DB->get_var("SELECT zc_conn_id FROM " . $this->ConnTable . " WHERE ((zc_conn_from='" . $zc_conn_from . "') AND (zc_conn_to='" . $zc_conn_to . "')) OR ((zc_conn_to='" . $zc_conn_from . "') AND (zc_conn_from='" . $zc_conn_to . "') AND (zc_conn_reciprocal=1)) LIMIT 0, 1 "); 
    418         } 
    419  
    420  
    421     public function GetConnectionIDByLink($zc_link_id) 
    422         { 
    423         return $this->DB->get_var("SELECT zc_conn_id FROM " . $this->LinkTable . " WHERE (zc_link_id=" . $zc_link_id . ") "); 
    424         } 
    425  
    426  
    427     public function GetConnectionIDBySlug($zc_conn_slug) 
    428         { 
    429         return $this->DB->get_var("SELECT zc_conn_id FROM " . $this->ConnTable . " WHERE (zc_conn_slug='" . $zc_conn_slug . "') LIMIT 0, 1 "); 
    430         } 
    431  
    432  
    433     public function GetConnectionIDByName($zc_conn_name) 
    434         { 
    435         return $this->DB->get_var("SELECT zc_conn_id FROM " . $this->ConnTable . " WHERE (zc_conn_name='" . $zc_conn_name . "') LIMIT 0, 1 "); 
    436         } 
    437  
    438  
    439     public function GetFieldIDByName($zc_field_name) 
    440         { 
    441         return $this->DB->get_var("SELECT zc_field_id FROM " . $this->FieldTable . " WHERE (zc_field_name='" . $zc_field_name . "') "); 
    442         } 
    443  
    444  
    445     public function GetLinkIDByPosts($zc_link_from, $zc_link_to, $zc_conn_id = 0) 
    446         { 
    447         return $this->DB->get_var("SELECT zc_link_id FROM " . $this->LinkTable . " WHERE (((zc_link_from=" . $zc_link_from . ") AND (zc_link_to=" . $zc_link_to . ")) OR ((zc_link_to=" . $zc_link_from . ") AND (zc_link_from=" . $zc_link_to . "))) " . (($zc_conn_id > 0) ? "AND (zc_conn_id=" . $zc_conn_id . ") " : "") . " LIMIT 0, 1 "); 
    448         } 
    449  
    450  
    451     public function GetDataIDByFieldAndLink($zc_field_id, $zc_link_id) 
    452         { 
    453         return $this->DB->get_var("SELECT zc_data_id FROM " . $this->DataTable . " WHERE (zc_field_id=" . $zc_field_id . ") AND (zc_link_id=" . $zc_link_id . ") "); 
    454         } 
    455  
    456  
    457     # GET OBJECTS 
    458  
    459  
    460     public function GetConnection($zc_conn_id) 
    461         { 
    462         return $this->DB->get_row("SELECT * FROM " . $this->ConnTable . " WHERE (zc_conn_id=" . $zc_conn_id . ") ", 'OBJECT'); 
    463         } 
    464  
    465  
    466     public function GetField($zc_field_id) 
    467         { 
    468         return $this->DB->get_row("SELECT * FROM " . $this->FieldTable . " WHERE (zc_field_id=" . $zc_field_id . ") ", 'OBJECT'); 
    469         } 
    470  
    471  
    472     public function GetLink($zc_link_id) 
    473         { 
    474         return $this->DB->get_row("SELECT * FROM " . $this->LinkTable . " WHERE (zc_link_id=" . $zc_link_id . ") ", 'OBJECT'); 
    475         } 
    476  
    477  
    478     public function GetData($zc_data_id) 
    479         { 
    480         return $this->DB->get_row("SELECT * FROM " . $this->DataTable . " WHERE (zc_data_id=" . $zc_data_id . ") ", 'OBJECT'); 
    481         } 
    482  
    483  
    484     # DELETE OBJECTS 
    485  
    486  
    487     public function DeleteConnection($zc_conn_id) 
    488         { 
    489         $this->DB->query("DELETE FROM " . $this->DataTable . " WHERE zc_conn_id=" . $zc_conn_id . " "); 
    490         $this->DB->query("DELETE FROM " . $this->LinkTable . " WHERE zc_conn_id=" . $zc_conn_id . " "); 
    491         $this->DB->query("DELETE FROM " . $this->FieldTable . " WHERE zc_conn_id=" . $zc_conn_id . " "); 
    492         $this->DB->query("DELETE FROM " . $this->ConnTable . " WHERE zc_conn_id=" . $zc_conn_id . " "); 
    493         } 
    494  
    495  
    496     public function DeleteField($zc_field_id) 
    497         { 
    498         $this->DB->query("DELETE FROM " . $this->DataTable . " WHERE zc_field_id=" . $zc_field_id . " "); 
    499         $this->DB->query("DELETE FROM " . $this->FieldTable . " WHERE zc_field_id=" . $zc_field_id . " "); 
    500         } 
    501  
    502  
    503     public function DeleteLink($zc_link_id) 
    504         { 
    505         $this->DB->query("DELETE FROM " . $this->DataTable . " WHERE zc_link_id=" . $zc_link_id . " "); 
    506         $this->DB->query("DELETE FROM " . $this->LinkTable . " WHERE zc_link_id=" . $zc_link_id . " "); 
    507         } 
    508  
    509  
    510     public function DeleteData($zc_data_id) 
    511         { 
    512         $this->DB->query("DELETE FROM " . $this->DataTable . " WHERE zc_data_id=" . $zc_data_id . " "); 
    513         } 
    514  
    515  
    516     # SAVE (OR CREATE) OBJECTS 
    517  
    518  
    519     public function SaveConnection($zc_conn_id, $zc_conn_from, $zc_conn_to, $zc_conn_reciprocal, $zc_conn_slug, $zc_conn_name) 
    520         { 
    521         # if first parameter is -1, create the record before saving it 
    522         if ($zc_conn_id == '-1') 
    523             { 
    524             $this->DB->query("INSERT INTO " . $this->ConnTable . "(zc_conn_from) VALUES('') "); 
    525             $zc_conn_id = $this->DB->insert_id; 
    526             } 
    527         $this->DB->query("UPDATE " . $this->ConnTable . " SET zc_conn_from='" . esc_attr($zc_conn_from) . "', zc_conn_to='" . esc_attr($zc_conn_to) . "', zc_conn_reciprocal=" . $zc_conn_reciprocal . ", zc_conn_slug='" . esc_attr($zc_conn_slug) . "', zc_conn_name='" . esc_attr($zc_conn_name) . "' WHERE zc_conn_id=" . $zc_conn_id . " "); 
    528         } 
    529  
    530  
    531     public function SaveField($zc_field_id, $zc_conn_id, $zc_field_type, $zc_field_name, $zc_field_prompt, $zc_field_size, $zc_field_order = 0) 
    532         { 
    533         # if first parameter is -1, create the record before saving it 
    534         if ($zc_field_id == '-1') 
    535             { 
    536             $this->DB->query("INSERT INTO " . $this->FieldTable . "(zc_conn_id) VALUES(0) "); 
    537             $zc_field_id = $this->DB->insert_id; 
    538             } 
    539         $this->DB->query("UPDATE " . $this->FieldTable . " SET zc_conn_id=" . esc_attr($zc_conn_id) . ", zc_field_type='" . esc_attr($zc_field_type) . "', zc_field_name='" . esc_attr($zc_field_name) . "', zc_field_prompt='" . esc_attr($zc_field_prompt) . "', zc_field_size=" . esc_attr($zc_field_size) . ", zc_field_order=" . esc_attr($zc_field_order) . " WHERE zc_field_id=" . $zc_field_id . " "); 
    540         } 
    541  
    542  
    543     public function SaveLink($zc_conn_id, $zc_link_from, $zc_link_to) 
    544         { 
    545 #echo 'in SaveLink<br />'; 
    546         if (!in_array($zc_link_to, $this->GetLinkedPostIDs($zc_link_from, '', $zc_conn_id))) 
    547             { 
    548             $this->DB->query("INSERT INTO " . $this->LinkTable . "(zc_conn_id, zc_link_from, zc_link_to) VALUES(" . $zc_conn_id . ", " . $zc_link_from . ", " . $zc_link_to . ") "); 
    549 #echo 'did insert<br />'; 
    550             } 
    551         } 
    552  
    553  
    554     public function SaveData($zc_field_id, $zc_link_id, $strValue) 
    555         { 
    556         $zc_data_id = $this->GetDataIDByFieldAndLink($zc_field_id, $zc_link_id); 
    557         if (!is_numeric($zc_data_id)) 
    558             { 
    559             $zc_conn_id = $this->GetConnectionIDByLink($zc_link_id); 
    560             $this->DB->query("INSERT INTO " . $this->DataTable . "(zc_link_id, zc_field_id, zc_conn_id) VALUES(" . $zc_link_id . ", " . $zc_field_id . ", " . $zc_conn_id . ") "); 
    561             $zc_data_id = $this->DB->insert_id; 
    562             } 
    563         $this->DB->query("UPDATE " . $this->DataTable . " SET zc_data_value='" . $strValue . "' WHERE zc_data_id=" . $zc_data_id . " "); 
    564         } 
    565  
    566  
    567     # MISCELLANEOUS DATA HANDLING 
    568  
    569  
    570     public function GetConnectionShorthand($zc_conn_id) 
    571         { 
    572         $objConnection = $this->GetConnection($zc_conn_id); 
    573         return $objConnection->zc_conn_from . (($objConnection->zc_conn_reciprocal == 1) ? ' &lt;=&gt; ' : ' =&gt; ') . $objConnection->zc_conn_to; 
    574         } 
    575  
    576  
    577     public function PostsAreLinked($intThisPostID, $intOtherPostID, $zc_conn_id = 0) 
    578         { 
    579         return (in_array($intOtherPostID, $this->GetLinkedPostIDs($intThisPostID, '', $zc_conn_id))) ? true : false; 
    580         } 
    581  
    582  
    583     public function GetConnectedPostTypes($strType = '') 
    584         { 
    585         $sql  = "SELECT zc_conn_to FROM " . $this->ConnTable . " "; 
    586         if ($strType != '') { $sql .= "WHERE (zc_conn_from='" . $strType . "') "; } 
    587         $arrTypes = $this->DB->get_col($sql); 
    588         $sql = "SELECT zc_conn_from FROM " . $this->ConnTable . " "; 
    589         if ($strType != '') { $sql .= "WHERE (zc_conn_reciprocal=1) AND (zc_conn_to='" . $strType . "') "; } 
    590         return array_unique(array_merge($arrTypes, $this->DB->get_col($sql))); 
    591         } 
    592  
    593  
    594     public function GetOtherType($zc_conn_id, $strThisType) 
    595         { 
    596         $objConnection = $this->GetConnection($zc_conn_id); 
    597         return ($objConnection->zc_conn_from == $strThisType) ? $objConnection->zc_conn_to : $objConnection->zc_conn_from; 
    598         } 
    599  
    600  
    601     # GENERIC FUNCTIONS INCLUDED IN ALL ZIGPRESS PLUGINS 
    602  
    603  
    604     public function GetParams() 
    605         { 
    606         $this->Params = array(); 
    607         foreach ($_REQUEST as $key=>$value) 
    608             { 
    609             $this->Params[$key] = $value; 
    610             if (!is_array($this->Params[$key])) { $this->Params[$key] = strip_tags(stripslashes(trim($this->Params[$key]))); } 
    611             # need to sanitise arrays as well really 
    612             } 
    613         if (!is_numeric($this->Params['zigpage'])) { $this->Params['zigpage'] = 1; } 
    614         if ($this->Params['zigaction'] == '') { $this->Params['zigaction'] = $this->Params['zigaction2']; } 
    615         $this->Result = ''; 
    616         $this->ResultType = ''; 
    617         $this->ResultMessage = ''; 
    618         if ($this->Result = base64_decode($this->Params['r'])) list($this->ResultType, $this->ResultMessage) = explode('|', $this->Result); # base64 for ease of encoding 
    619         } 
    620  
    621  
    622     public function AllowChars($strValue, $strChars, $blnCaseSense = false) 
    623         { 
    624         $strResult = ""; 
    625         if ($blnCaseSense) 
    626             { 
    627             for ($i = 0; $i < strlen($strValue); $i++) 
    628                 { 
    629                 $strChar = substr($strValue, $i, 1); 
    630                 if (is_numeric(strpos($strChars, $strChar))) { $strResult .= $strChar; } 
    631                 } 
    632             } 
    633         else 
    634             { 
    635             $strChars = strtoupper($strChars); 
    636             for ($i = 0; $i < strlen($strValue); $i++) 
    637                 { 
    638                 $strChar = substr($strValue, $i, 1); 
    639                 if (is_numeric(strpos($strChars, strtoupper($strChar)))) { $strResult .= $strChar; } 
    640                 } 
    641             } 
    642         return $strResult; 
    643         } 
    644  
    645  
    646     public function DenyChars($strValue, $strChars, $blnCaseSense = false) 
    647         { 
    648         $strResult = ""; 
    649         if ($blnCaseSense) 
    650             { 
    651             for ($i = 0; $i < strlen($strValue); $i++) 
    652                 { 
    653                 $strChar = substr($strValue, $i, 1); 
    654                 if (!is_numeric(strpos($strChars, $strChar))) { $strResult .= $strChar; } 
    655                 } 
    656             } 
    657         else 
    658             { 
    659             $strChars = strtoupper($strChars); 
    660             for ($i = 0; $i < strlen($strValue); $i++) 
    661                 { 
    662                 $strChar = substr($strValue, $i, 1); 
    663                 if (!is_numeric(strpos($strChars, strtoupper($strChar)))) { $strResult .= $strChar; } 
    664                 } 
    665             } 
    666         return $strResult; 
    667         } 
    668  
    669  
    670     function ValidateAsInteger($param, $default = 0, $min = -1, $max = -1) 
    671         { 
    672         if (!is_numeric($param)) { $param = $default; } 
    673         $param = (int) $param; 
    674         if ($min != -1) { if ($param < $min) { $param = $min; } } 
    675         if ($max != -1) { if ($param > $max) { $param = $max; } } 
    676         return $param; 
    677         } 
    678  
    679  
    680     public function ShowResult($strType, $strMessage) 
    681         { 
    682         $strOutput = ''; 
    683         if ($strMessage != '') 
    684             { 
    685             $strClass = ''; 
    686             switch (strtoupper($strType)) 
    687                 { 
    688                 case 'OK' : $strClass = 'updated'; break; 
    689                 case 'INFO' : $strClass = 'updated highlight'; break; 
    690                 case 'ERR' : $strClass = 'error'; break; 
    691                 case 'WARN' : $strClass = 'error'; break; 
    692                 } 
    693             if ($strClass != '') $strOutput .= '<div class="msg ' . $strClass . '" title="' . __('Click to hide', 'zigconnect') . '"><p>' . $strMessage . '</p></div>'; 
    694             } 
    695         return $strOutput; 
    696         } 
    697  
    698  
    699     function GetAllPostMeta($id = 0) 
    700         { 
    701         if ($id == 0) 
    702             { 
    703             global $wp_query; 
    704             $content_array = $wp_query->get_queried_object(); 
    705             $id = $content_array->ID; 
    706             } 
    707         $data = array(); 
    708         $this->DB->query("SELECT meta_key, meta_value FROM {$this->DB->postmeta} WHERE post_id = {$id} "); 
    709         foreach($this->DB->last_result as $k => $v) 
    710             { 
    711             $data[$v->meta_key] = $v->meta_value; 
    712             } 
    713         return $data; 
    714         } 
    715  
    716  
    717     # ADMIN CONTENT 
    718  
    719  
    720     public function DoMetaBox($formpost, $args) 
    721         { 
    722         global $post; 
    723         $args = $args['args']; 
    724         $intThisPostID = $post->ID; 
    725         $strThisType = $post->post_type; 
    726         $strOtherType = $args['type']; 
    727         $zc_conn_id = $args['zc_conn_id']; 
    728         wp_nonce_field( plugin_basename(__FILE__), 'zigconnect_metaboxes' ); 
    729         $objConn = $this->GetConnection($zc_conn_id); 
    730         $arrOtherPostIDs = $this->GetPostIDsByType($strOtherType); 
    731  
    732         $intFieldsPerRow = $this->Options['FieldsPerRow']; 
    733         if (!is_numeric($intFieldsPerRow)) $intFieldsPerRow = 3; 
    734  
    735         if ($arrOtherPostIDs) 
    736             { 
    737             $arrFieldIDs = $this->GetFieldIDs($objConn->zc_conn_id); 
     250        } 
     251 
     252 
     253        public function ActionDeletePostData($intPostID) { 
     254            # this is hopelessly inadequate right now - we need to get all links for post so we can delete data items too, and list items that are only linked 
     255            $this->DB->query("DELETE FROM " . $this->ListTable . " WHERE zc_post_id=" . $intPostID . " "); 
     256            $this->DB->query("DELETE FROM " . $this->LinkTable . " WHERE (zc_link_from=" . $intPostID . ") OR (zc_link_to=" . $intPostID . ") "); 
     257            return true; 
     258        } 
     259 
     260 
     261        public function ActionAdminMenu() { 
     262            $arrAdminMenuHooks = array(); 
     263            $arrAdminMenuHooks[] = add_menu_page('ZigConnect', 'ZigConnect', 'manage_options', 'zigconnect-menu', array($this, 'DoAdminPageMain'), $this->PluginFolder . 'images/preferences-system-windows.png'); 
     264            $arrAdminMenuHooks[] = add_submenu_page('zigconnect-menu', 'Fields &lsaquo; ZigConnect', 'Fields', 'manage_options', 'zigconnect-menu-fields', array($this, 'DoAdminPageFields')); 
     265            $arrAdminMenuHooks[] = add_submenu_page('zigconnect-menu', 'Options &lsaquo; ZigConnect', 'Options', 'manage_options', 'zigconnect-menu-settings', array($this, 'DoAdminPageSettings')); 
     266            foreach ($arrAdminMenuHooks as $strHook) add_contextual_help($strHook, $this->HelpText); 
     267        } 
     268 
     269 
     270        public function ActionAdminFooter() { 
    738271            ?> 
    739             <input type="hidden" name="zigconnect_metabox_connections[]" value="<?php echo $zc_conn_id?>" /> 
    740             <table class="zigconnect-metabox-table" id="zigconnect-metabox-table-<?php echo $zc_conn_id?>"> 
     272            <script type="text/javascript" src="<?php echo $this->PluginFolder?>js/zigconnect-admin.js?<?php echo rand()?>"></script> 
    741273            <?php 
    742             $intLinks = 0; 
    743             foreach ($arrOtherPostIDs as $intOtherPostID) 
    744                 { 
    745                 $objOtherPost = get_post($intOtherPostID); 
    746                 if ($this->PostsAreLinked($intThisPostID, $intOtherPostID, $zc_conn_id)) 
    747                     { 
    748                     $intLinks++; 
    749                     ?> 
    750                     <tr class="firstrow"> 
    751                     <td><input type="checkbox" name="zigconnect_metabox_links[<?php echo $zc_conn_id?>][]" value="<?php echo $intOtherPostID?>" <?php echo $this->PostsAreLinked($intThisPostID, $intOtherPostID, $zc_conn_id) ? 'checked="checked"' : '' ?> />&nbsp;<?php echo $objOtherPost->post_title?>&nbsp;</td> 
    752                     <?php 
    753                     $zc_link_id = $this->GetLinkIDByPosts($intThisPostID, $intOtherPostID, $zc_conn_id); 
    754                     if ($arrFieldIDs) 
    755                         { 
    756                         $col = 0; 
    757                         foreach ($arrFieldIDs as $zc_field_id) 
    758                             { 
    759                             $col++; 
    760                             $objField = $this->GetField($zc_field_id); 
    761                             $zc_data_id = $this->GetDataIDByFieldAndLink($zc_field_id, $zc_link_id); 
    762                             ?> 
    763                             <td style="text-align:left;"> 
    764                             <?php 
    765                             switch ($objField->zc_field_type) 
    766                                 { 
    767                                 case 'CHECKBOX' : 
    768                                     ?> 
    769                                     <input class="zc_field_<?php echo $objField->zc_field_name?>" type="checkbox" name="zigconnect_metabox_data[<?php echo $zc_field_id?>][<?php echo $intOtherPostID?>]" value="1" <?php if ($this->GetData($zc_data_id)->zc_data_value == '1') { echo('checked="checked"'); } ?> /> 
    770                                     <?php  
    771                                     echo $objField->zc_field_prompt; 
     274        } 
     275 
     276 
     277        public function FilterPluginRowMeta($links, $file) { 
     278            $plugin = plugin_basename(__FILE__); 
     279            if ($file == $plugin) return array_merge($links, array('<a target="_blank" href="http://www.zigpress.com/donations/">Donate</a>')); 
     280            return $links; 
     281        } 
     282 
     283 
     284        # FUNCTIONS 
     285 
     286 
     287        # GET ARRAYS OF IDS 
     288 
     289 
     290        public function GetConnectionIDs($intPostID = 0) { 
     291            $sql = "SELECT zc_conn_id FROM " . $this->ConnTable . " "; 
     292            if ($intPostID > 0) { 
     293                $objPost = get_post($intPostID); 
     294                $strPostType = $objPost->post_type; 
     295                $sql .= "WHERE (zc_conn_from='" . $strPostType . "') OR (zc_conn_to='" . $strPostType . "') "; 
     296            } 
     297            $sql .= "ORDER BY zc_conn_id ASC "; 
     298            return $this->DB->get_col($sql); 
     299        } 
     300 
     301 
     302        public function GetFieldIDs($zc_conn_id=false) { 
     303            return $this->DB->get_col("SELECT zc_field_id FROM " . $this->FieldTable . " " . ( $zc_conn_id ? "WHERE (zc_conn_id=" . $zc_conn_id . ") " : "" ) . " ORDER BY zc_field_order ASC "); 
     304        } 
     305 
     306 
     307        public function GetCheckboxIDs($zc_conn_id=false) { 
     308            return $this->DB->get_col("SELECT zc_field_id FROM " . $this->FieldTable . " " . "WHERE (zc_field_type='CHECKBOX') " . ( $zc_conn_id ? "AND (zc_conn_id=" . $zc_conn_id . ") " : "" ) . " ORDER BY zc_field_order ASC "); 
     309        } 
     310 
     311 
     312        public function GetLinkIDs($zc_conn_id=false) { 
     313            return $this->DB->get_col("SELECT zc_link_id FROM " . $this->LinkTable . " " . ( $zc_conn_id ? "WHERE (zc_conn_id=" . $zc_conn_id . ") " : "" ) . " ORDER BY zc_link_id ASC "); 
     314        } 
     315 
     316 
     317        public function GetDataIDs($zc_conn_id = false, $zc_field_id = false) { 
     318            # pass either one or the other, not both 
     319            $sql  = "SELECT zc_data_id FROM " . $this->DataTable . " "; 
     320            if ($zc_conn_id) { $sql .= "WHERE zc_conn_id=" . $zc_conn_id . " "; } 
     321            elseif ($zc_field_id) { $sql .= "WHERE zc_field_id=" . $zc_field_id . " "; } 
     322            return $this->DB->get_col($sql); 
     323        } 
     324 
     325 
     326        public function GetPostIDsByType($strType) { 
     327            return $this->DB->get_col("SELECT ID FROM " . $this->DB->posts . " WHERE (post_type='" . $strType . "') AND (post_status='publish') "); 
     328        } 
     329 
     330 
     331        public function GetLinkedPostIDs($intPostID, $strType = '', $zc_conn_id = 0) { 
     332            # gets linked post ids whether the passed post id is a "from" or a "to" 
     333            $sql  = "SELECT " . $this->LinkTable . ".zc_link_to FROM " . $this->LinkTable . " LEFT JOIN " . $this->DB->posts . " ON (" . $this->LinkTable . ".zc_link_to=" . $this->DB->posts . ".ID) WHERE (zc_link_from=" . $intPostID . ") "; 
     334            if ($strType != '') $sql .= "AND (" . $this->DB->posts . ".post_type='" . $strType . "') "; 
     335            if ($zc_conn_id > 0) $sql .= "AND (" . $this->LinkTable . ".zc_conn_id=" . $zc_conn_id . ") "; 
     336            $arrIDs = $this->DB->get_col($sql); 
     337            $sql  = "SELECT " . $this->LinkTable . ".zc_link_from FROM " . $this->LinkTable . " LEFT JOIN " . $this->DB->posts . " ON (" . $this->LinkTable . ".zc_link_from=" . $this->DB->posts . ".ID) WHERE (zc_link_to=" . $intPostID . ") "; 
     338            if ($strType != '') $sql .= "AND (" . $this->DB->posts . ".post_type='" . $strType . "') "; 
     339            if ($zc_conn_id > 0) $sql .= "AND (" . $this->LinkTable . ".zc_conn_id=" . $zc_conn_id . ") "; 
     340            return array_unique(array_merge($arrIDs, $this->DB->get_col($sql))); 
     341        } 
     342 
     343 
     344        # GET SINGLE IDS 
     345 
     346 
     347        public function GetConnectionIDsByTypes($zc_conn_from, $zc_conn_to) { 
     348            return $this->DB->get_col("SELECT zc_conn_id FROM " . $this->ConnTable . " WHERE ((zc_conn_from='" . $zc_conn_from . "') AND (zc_conn_to='" . $zc_conn_to . "')) OR ((zc_conn_to='" . $zc_conn_from . "') AND (zc_conn_from='" . $zc_conn_to . "') AND (zc_conn_reciprocal=1)) "); 
     349        } 
     350 
     351 
     352        public function GetConnectionIDByTypes($zc_conn_from, $zc_conn_to) { 
     353            return $this->DB->get_var("SELECT zc_conn_id FROM " . $this->ConnTable . " WHERE ((zc_conn_from='" . $zc_conn_from . "') AND (zc_conn_to='" . $zc_conn_to . "')) OR ((zc_conn_to='" . $zc_conn_from . "') AND (zc_conn_from='" . $zc_conn_to . "') AND (zc_conn_reciprocal=1)) LIMIT 0, 1 "); 
     354        } 
     355 
     356 
     357        public function GetConnectionIDByLink($zc_link_id) { 
     358            return $this->DB->get_var("SELECT zc_conn_id FROM " . $this->LinkTable . " WHERE (zc_link_id=" . $zc_link_id . ") "); 
     359        } 
     360 
     361 
     362        public function GetConnectionIDBySlug($zc_conn_slug) { 
     363            return $this->DB->get_var("SELECT zc_conn_id FROM " . $this->ConnTable . " WHERE (zc_conn_slug='" . $zc_conn_slug . "') LIMIT 0, 1 "); 
     364        } 
     365 
     366 
     367        public function GetConnectionIDByName($zc_conn_name) { 
     368            return $this->DB->get_var("SELECT zc_conn_id FROM " . $this->ConnTable . " WHERE (zc_conn_name='" . $zc_conn_name . "') LIMIT 0, 1 "); 
     369        } 
     370 
     371 
     372        public function GetFieldIDByName($zc_field_name) { 
     373            return $this->DB->get_var("SELECT zc_field_id FROM " . $this->FieldTable . " WHERE (zc_field_name='" . $zc_field_name . "') "); 
     374        } 
     375 
     376 
     377        public function GetLinkIDByPosts($zc_link_from, $zc_link_to, $zc_conn_id = 0) { 
     378            return $this->DB->get_var("SELECT zc_link_id FROM " . $this->LinkTable . " WHERE (((zc_link_from=" . $zc_link_from . ") AND (zc_link_to=" . $zc_link_to . ")) OR ((zc_link_to=" . $zc_link_from . ") AND (zc_link_from=" . $zc_link_to . "))) " . (($zc_conn_id > 0) ? "AND (zc_conn_id=" . $zc_conn_id . ") " : "") . " LIMIT 0, 1 "); 
     379        } 
     380 
     381 
     382        public function GetDataIDByFieldAndLink($zc_field_id, $zc_link_id) { 
     383            return $this->DB->get_var("SELECT zc_data_id FROM " . $this->DataTable . " WHERE (zc_field_id=" . $zc_field_id . ") AND (zc_link_id=" . $zc_link_id . ") "); 
     384        } 
     385 
     386 
     387        # GET OBJECTS 
     388 
     389 
     390        public function GetConnection($zc_conn_id) { 
     391            return $this->DB->get_row("SELECT * FROM " . $this->ConnTable . " WHERE (zc_conn_id=" . $zc_conn_id . ") ", 'OBJECT'); 
     392        } 
     393 
     394 
     395        public function GetField($zc_field_id) { 
     396            return $this->DB->get_row("SELECT * FROM " . $this->FieldTable . " WHERE (zc_field_id=" . $zc_field_id . ") ", 'OBJECT'); 
     397        } 
     398 
     399 
     400        public function GetLink($zc_link_id) { 
     401            return $this->DB->get_row("SELECT * FROM " . $this->LinkTable . " WHERE (zc_link_id=" . $zc_link_id . ") ", 'OBJECT'); 
     402        } 
     403 
     404 
     405        public function GetData($zc_data_id) { 
     406            return $this->DB->get_row("SELECT * FROM " . $this->DataTable . " WHERE (zc_data_id=" . $zc_data_id . ") ", 'OBJECT'); 
     407        } 
     408 
     409 
     410        # DELETE OBJECTS 
     411 
     412 
     413        public function DeleteConnection($zc_conn_id) { 
     414            $this->DB->query("DELETE FROM " . $this->DataTable . " WHERE zc_conn_id=" . $zc_conn_id . " "); 
     415            $this->DB->query("DELETE FROM " . $this->LinkTable . " WHERE zc_conn_id=" . $zc_conn_id . " "); 
     416            $this->DB->query("DELETE FROM " . $this->FieldTable . " WHERE zc_conn_id=" . $zc_conn_id . " "); 
     417            $this->DB->query("DELETE FROM " . $this->ConnTable . " WHERE zc_conn_id=" . $zc_conn_id . " "); 
     418        } 
     419 
     420 
     421        public function DeleteField($zc_field_id) { 
     422            $this->DB->query("DELETE FROM " . $this->DataTable . " WHERE zc_field_id=" . $zc_field_id . " "); 
     423            $this->DB->query("DELETE FROM " . $this->FieldTable . " WHERE zc_field_id=" . $zc_field_id . " "); 
     424        } 
     425 
     426 
     427        public function DeleteLink($zc_link_id) { 
     428            $this->DB->query("DELETE FROM " . $this->DataTable . " WHERE zc_link_id=" . $zc_link_id . " "); 
     429            $this->DB->query("DELETE FROM " . $this->LinkTable . " WHERE zc_link_id=" . $zc_link_id . " "); 
     430        } 
     431 
     432 
     433        public function DeleteData($zc_data_id) { 
     434            $this->DB->query("DELETE FROM " . $this->DataTable . " WHERE zc_data_id=" . $zc_data_id . " "); 
     435        } 
     436 
     437 
     438        # SAVE (OR CREATE) OBJECTS 
     439 
     440 
     441        public function SaveConnection($zc_conn_id, $zc_conn_from, $zc_conn_to, $zc_conn_reciprocal, $zc_conn_slug, $zc_conn_name) { 
     442            # if first parameter is -1, create the record before saving it 
     443            if ($zc_conn_id == '-1') { 
     444                $this->DB->query("INSERT INTO " . $this->ConnTable . "(zc_conn_from) VALUES('') "); 
     445                $zc_conn_id = $this->DB->insert_id; 
     446            } 
     447            $this->DB->query("UPDATE " . $this->ConnTable . " SET zc_conn_from='" . esc_attr($zc_conn_from) . "', zc_conn_to='" . esc_attr($zc_conn_to) . "', zc_conn_reciprocal=" . $zc_conn_reciprocal . ", zc_conn_slug='" . esc_attr($zc_conn_slug) . "', zc_conn_name='" . esc_attr($zc_conn_name) . "' WHERE zc_conn_id=" . $zc_conn_id . " "); 
     448        } 
     449 
     450 
     451        public function SaveField($zc_field_id, $zc_conn_id, $zc_field_type, $zc_field_name, $zc_field_prompt, $zc_field_size, $zc_field_order = 0) { 
     452            # if first parameter is -1, create the record before saving it 
     453            if ($zc_field_id == '-1') { 
     454                $this->DB->query("INSERT INTO " . $this->FieldTable . "(zc_conn_id) VALUES(0) "); 
     455                $zc_field_id = $this->DB->insert_id; 
     456            } 
     457            $this->DB->query("UPDATE " . $this->FieldTable . " SET zc_conn_id=" . esc_attr($zc_conn_id) . ", zc_field_type='" . esc_attr($zc_field_type) . "', zc_field_name='" . esc_attr($zc_field_name) . "', zc_field_prompt='" . esc_attr($zc_field_prompt) . "', zc_field_size=" . esc_attr($zc_field_size) . ", zc_field_order=" . esc_attr($zc_field_order) . " WHERE zc_field_id=" . $zc_field_id . " "); 
     458        } 
     459 
     460 
     461        public function SaveLink($zc_conn_id, $zc_link_from, $zc_link_to) { 
     462            if (!in_array($zc_link_to, $this->GetLinkedPostIDs($zc_link_from, '', $zc_conn_id))) { 
     463                $this->DB->query("INSERT INTO " . $this->LinkTable . "(zc_conn_id, zc_link_from, zc_link_to) VALUES(" . $zc_conn_id . ", " . $zc_link_from . ", " . $zc_link_to . ") "); 
     464            } 
     465        } 
     466 
     467 
     468        public function SaveData($zc_field_id, $zc_link_id, $strValue) { 
     469            $zc_data_id = $this->GetDataIDByFieldAndLink($zc_field_id, $zc_link_id); 
     470            if (!is_numeric($zc_data_id)) { 
     471                $zc_conn_id = $this->GetConnectionIDByLink($zc_link_id); 
     472                $this->DB->query("INSERT INTO " . $this->DataTable . "(zc_link_id, zc_field_id, zc_conn_id) VALUES(" . $zc_link_id . ", " . $zc_field_id . ", " . $zc_conn_id . ") "); 
     473                $zc_data_id = $this->DB->insert_id; 
     474            } 
     475            $this->DB->query("UPDATE " . $this->DataTable . " SET zc_data_value='" . $strValue . "' WHERE zc_data_id=" . $zc_data_id . " "); 
     476        } 
     477 
     478 
     479        # MISCELLANEOUS DATA HANDLING 
     480 
     481 
     482        public function GetConnectionShorthand($zc_conn_id) { 
     483            $objConnection = $this->GetConnection($zc_conn_id); 
     484            return $objConnection->zc_conn_from . (($objConnection->zc_conn_reciprocal == 1) ? ' &lt;=&gt; ' : ' =&gt; ') . $objConnection->zc_conn_to; 
     485        } 
     486 
     487 
     488        public function PostsAreLinked($intThisPostID, $intOtherPostID, $zc_conn_id = 0) { 
     489            return (in_array($intOtherPostID, $this->GetLinkedPostIDs($intThisPostID, '', $zc_conn_id))) ? true : false; 
     490        } 
     491 
     492 
     493        public function GetConnectedPostTypes($strType = '') { 
     494            $sql  = "SELECT zc_conn_to FROM " . $this->ConnTable . " "; 
     495            if ($strType != '') { $sql .= "WHERE (zc_conn_from='" . $strType . "') "; } 
     496            $arrTypes = $this->DB->get_col($sql); 
     497            $sql = "SELECT zc_conn_from FROM " . $this->ConnTable . " "; 
     498            if ($strType != '') { $sql .= "WHERE (zc_conn_reciprocal=1) AND (zc_conn_to='" . $strType . "') "; } 
     499            return array_unique(array_merge($arrTypes, $this->DB->get_col($sql))); 
     500        } 
     501 
     502 
     503        public function GetOtherType($zc_conn_id, $strThisType) { 
     504            $objConnection = $this->GetConnection($zc_conn_id); 
     505            return ($objConnection->zc_conn_from == $strThisType) ? $objConnection->zc_conn_to : $objConnection->zc_conn_from; 
     506        } 
     507 
     508 
     509        # GENERIC FUNCTIONS INCLUDED IN ALL ZIGPRESS PLUGINS 
     510 
     511 
     512        public function GetParams() { 
     513            $this->Params = array(); 
     514            foreach ($_REQUEST as $key=>$value) { 
     515                $this->Params[$key] = $value; 
     516                if (!is_array($this->Params[$key])) { $this->Params[$key] = strip_tags(stripslashes(trim($this->Params[$key]))); } 
     517                # need to sanitise arrays as well really 
     518            } 
     519            if (!is_numeric($this->Params['zigpage'])) { $this->Params['zigpage'] = 1; } 
     520            if ($this->Params['zigaction'] == '') { $this->Params['zigaction'] = $this->Params['zigaction2']; } 
     521            $this->Result = ''; 
     522            $this->ResultType = ''; 
     523            $this->ResultMessage = ''; 
     524            if ($this->Result = base64_decode($this->Params['r'])) list($this->ResultType, $this->ResultMessage) = explode('|', $this->Result); # base64 for ease of encoding 
     525        } 
     526 
     527 
     528        public function AllowChars($strValue, $strChars, $blnCaseSense = false) { 
     529            $strResult = ""; 
     530            if ($blnCaseSense) { 
     531                for ($i = 0; $i < strlen($strValue); $i++) { 
     532                    $strChar = substr($strValue, $i, 1); 
     533                    if (is_numeric(strpos($strChars, $strChar))) { $strResult .= $strChar; } 
     534                } 
     535            } else { 
     536                $strChars = strtoupper($strChars); 
     537                for ($i = 0; $i < strlen($strValue); $i++) { 
     538                    $strChar = substr($strValue, $i, 1); 
     539                    if (is_numeric(strpos($strChars, strtoupper($strChar)))) { $strResult .= $strChar; } 
     540                } 
     541            } 
     542            return $strResult; 
     543        } 
     544 
     545 
     546        public function DenyChars($strValue, $strChars, $blnCaseSense = false) { 
     547            $strResult = ""; 
     548            if ($blnCaseSense) { 
     549                for ($i = 0; $i < strlen($strValue); $i++) { 
     550                    $strChar = substr($strValue, $i, 1); 
     551                    if (!is_numeric(strpos($strChars, $strChar))) { $strResult .= $strChar; } 
     552                } 
     553            } else { 
     554                $strChars = strtoupper($strChars); 
     555                for ($i = 0; $i < strlen($strValue); $i++) { 
     556                    $strChar = substr($strValue, $i, 1); 
     557                    if (!is_numeric(strpos($strChars, strtoupper($strChar)))) { $strResult .= $strChar; } 
     558                } 
     559            } 
     560            return $strResult; 
     561        } 
     562 
     563 
     564        function ValidateAsInteger($param, $default = 0, $min = -1, $max = -1) { 
     565            if (!is_numeric($param)) { $param = $default; } 
     566            $param = (int) $param; 
     567            if ($min != -1) { if ($param < $min) { $param = $min; } } 
     568            if ($max != -1) { if ($param > $max) { $param = $max; } } 
     569            return $param; 
     570        } 
     571 
     572 
     573        public function ShowResult($strType, $strMessage) { 
     574            $strOutput = ''; 
     575            if ($strMessage != '') { 
     576                $strClass = ''; 
     577                switch (strtoupper($strType)) { 
     578                    case 'OK' : $strClass = 'updated'; break; 
     579                    case 'INFO' : $strClass = 'updated highlight'; break; 
     580                    case 'ERR' : $strClass = 'error'; break; 
     581                    case 'WARN' : $strClass = 'error'; break; 
     582                } 
     583                if ($strClass != '') $strOutput .= '<div class="msg ' . $strClass . '" title="' . __('Click to hide', 'zigconnect') . '"><p>' . $strMessage . '</p></div>'; 
     584            } 
     585            return $strOutput; 
     586        } 
     587 
     588 
     589        function GetAllPostMeta($id = 0) { 
     590            if ($id == 0) { 
     591                global $wp_query; 
     592                $content_array = $wp_query->get_queried_object(); 
     593                $id = $content_array->ID; 
     594            } 
     595            $data = array(); 
     596            $this->DB->query("SELECT meta_key, meta_value FROM {$this->DB->postmeta} WHERE post_id = {$id} "); 
     597            foreach($this->DB->last_result as $k => $v) { 
     598                $data[$v->meta_key] = $v->meta_value; 
     599            } 
     600            return $data; 
     601        } 
     602 
     603 
     604        # ADMIN CONTENT 
     605 
     606 
     607        public function DoMetaBox($formpost, $args) { 
     608            global $post; 
     609            $args = $args['args']; 
     610            $intThisPostID = $post->ID; 
     611            $strThisType = $post->post_type; 
     612            $strOtherType = $args['type']; 
     613            $zc_conn_id = $args['zc_conn_id']; 
     614            wp_nonce_field( plugin_basename(__FILE__), 'zigconnect_metaboxes' ); 
     615            $objConn = $this->GetConnection($zc_conn_id); 
     616            $arrOtherPostIDs = $this->GetPostIDsByType($strOtherType); 
     617 
     618            $intFieldsPerRow = $this->Options['FieldsPerRow']; 
     619            if (!is_numeric($intFieldsPerRow)) $intFieldsPerRow = 3; 
     620 
     621            if ($arrOtherPostIDs) { 
     622                $arrFieldIDs = $this->GetFieldIDs($objConn->zc_conn_id); 
     623                ?> 
     624                <input type="hidden" name="zigconnect_metabox_connections[]" value="<?php echo $zc_conn_id?>" /> 
     625                <table class="zigconnect-metabox-table" id="zigconnect-metabox-table-<?php echo $zc_conn_id?>"> 
     626                <?php 
     627                $intLinks = 0; 
     628                foreach ($arrOtherPostIDs as $intOtherPostID) { 
     629                    $objOtherPost = get_post($intOtherPostID); 
     630                    if ($this->PostsAreLinked($intThisPostID, $intOtherPostID, $zc_conn_id)) { 
     631                        $intLinks++; 
     632                        ?> 
     633                        <tr class="firstrow"> 
     634                        <td><input type="checkbox" name="zigconnect_metabox_links[<?php echo $zc_conn_id?>][]" value="<?php echo $intOtherPostID?>" <?php echo $this->PostsAreLinked($intThisPostID, $intOtherPostID, $zc_conn_id) ? 'checked="checked"' : '' ?> />&nbsp;<?php echo $objOtherPost->post_title?>&nbsp;</td> 
     635                        <?php 
     636                        $zc_link_id = $this->GetLinkIDByPosts($intThisPostID, $intOtherPostID, $zc_conn_id); 
     637                        if ($arrFieldIDs) { 
     638                            $col = 0; 
     639                            foreach ($arrFieldIDs as $zc_field_id) { 
     640                                $col++; 
     641                                $objField = $this->GetField($zc_field_id); 
     642                                $zc_data_id = $this->GetDataIDByFieldAndLink($zc_field_id, $zc_link_id); 
     643                                ?> 
     644                                <td style="text-align:left;"> 
     645                                <?php 
     646                                switch ($objField->zc_field_type) { 
     647                                    case 'CHECKBOX' : 
     648                                        ?> 
     649                                        <input class="zc_field_<?php echo $objField->zc_field_name?>" type="checkbox" name="zigconnect_metabox_data[<?php echo $zc_field_id?>][<?php echo $intOtherPostID?>]" value="1" <?php if ($this->GetData($zc_data_id)->zc_data_value == '1') { echo('checked="checked"'); } ?> /> 
     650                                        <?php 
     651                                        echo $objField->zc_field_prompt; 
    772652                                    break; 
    773                                 default : # TEXT 
    774                                     echo $objField->zc_field_prompt; 
    775                                     ?> 
    776                                     <br /> 
    777                                     <input class="zc_field_<?php echo $objField->zc_field_name?>" type="text" size="<?php echo $objField->zc_field_size?>" name="zigconnect_metabox_data[<?php echo $zc_field_id?>][<?php echo $intOtherPostID?>]" value="<?php echo $this->GetData($zc_data_id)->zc_data_value?>" /> 
    778                                     <?php 
     653                                    default : # TEXT 
     654                                        echo $objField->zc_field_prompt; 
     655                                        ?> 
     656                                        <br /> 
     657                                        <input class="zc_field_<?php echo $objField->zc_field_name?>" type="text" size="<?php echo $objField->zc_field_size?>" name="zigconnect_metabox_data[<?php echo $zc_field_id?>][<?php echo $intOtherPostID?>]" value="<?php echo $this->GetData($zc_data_id)->zc_data_value?>" /> 
     658                                        <?php 
    779659                                    break; 
    780660                                } 
    781                             ?> 
    782                             </td> 
    783                             <?php 
    784                             if ($col % $intFieldsPerRow == 0) echo '</tr><tr><td></td>'; 
     661                                ?> 
     662                                </td> 
     663                                <?php 
     664                                if ($col % $intFieldsPerRow == 0) echo '</tr><tr><td></td>'; 
    785665                            } 
    786                         if ($col % $intFieldsPerRow != 0) echo str_repeat('<td></td>', $intFieldsPerRow - ($col % $intFieldsPerRow)); 
     666                            if ($col % $intFieldsPerRow != 0) echo str_repeat('<td></td>', $intFieldsPerRow - ($col % $intFieldsPerRow)); 
    787667                        } 
     668                        ?> 
     669                        </tr> 
     670                        <?php 
     671                    } 
     672                } 
     673                $objOtherType = get_post_type_object($strOtherType); 
     674                ?> 
     675                </table> 
     676                <div class="zigconnect-metabox-searchwrapper" id="zigconnect-metabox-searchwrapper-<?php echo $zc_conn_id?>"> 
     677                <div class="zigconnect-metabox-searchform" id="zigconnect-metabox-searchform-<?php echo $zc_conn_id?>"> 
     678 
     679                <input class="button-secondary zigconnect-metabox-addallbutton" type="button" id="zigconnect-metabox-addallbutton-<?php echo $zc_conn_id?>" value="<?php _e('Add All', 'zigconnect')?> <?php echo $objOtherType->labels->name?>!" /> 
     680 
     681                <input type="hidden" name="zigconnect-metabox-search-postid-<?php echo $zc_conn_id?>" id="zigconnect-metabox-search-postid-<?php echo $zc_conn_id?>" value="<?php echo $post->ID?>" /> 
     682                <input name="zigconnect-metabox-search-<?php echo $zc_conn_id?>" type="text" id="zigconnect-metabox-search-<?php echo $zc_conn_id?>" value="" class="medium-text" /> 
     683                <input class="button-secondary zigconnect-metabox-searchbutton" type="button" id="zigconnect-metabox-searchbutton-<?php echo $zc_conn_id?>" value="<?php _e('Search', 'zigconnect')?> <?php echo $objOtherType->labels->name?>" /> 
     684                <div class="zigconnect-metabox-searchresults" id="zigconnect-metabox-searchresults-<?php echo $zc_conn_id?>"> 
     685                </div><!--/zigconnect-metabox-searchresults--> 
     686                <img class="zigconnect-metabox-loader" id="zigconnect-metabox-loader-<?php echo $zc_conn_id?>" style="display:none;" src="<?php echo $this->PluginFolder?>images/ajax-loader.gif" alt="" /> 
     687                </div><!--/zigconnect-metabox-searchform--> 
     688                </div><!--/zigconnect-metabox-searchwrapper--> 
     689                <?php 
     690            } else { 
     691                ?> 
     692                <?php _e('No posts of type', 'zigconnect')?> '<?php echo $strOtherType?>' <?php _e('found.', 'zigconnect')?> 
     693                <?php 
     694            } 
     695        } 
     696 
     697 
     698        public function GetAdminHelp() { 
     699            $help = '<h5>' . __('ZigConnect General Help', 'zigconnect') . '</h5>'; 
     700            $help .= '<ul>'; 
     701            $help .= '<li>' . __('A <strong>connection</strong> defines a link between two post <strong>types</strong>.', 'zigconnect') . '</li>'; 
     702            $help .= '<li>' . __('A <strong>link</strong> is between two actual posts whose types are connected.', 'zigconnect') . '</li>'; 
     703            $help .= '<li>' . __('A <strong>field</strong> is a definition for a piece of data that can be stored with any link belonging to a specific connection.', 'zigconnect') . '</li>'; 
     704            $help .= '<li>' . __('A <strong>data item</strong> is a piece of data stored with a link according to a defined field.', 'zigconnect') . '</li>'; 
     705            $help .= '<li>' . __('For now data fields can be free text fields or checkboxes.', 'zigconnect') . '</li>'; 
     706            $help .= '</ul>'; 
     707            $help .= '<h5>' . __('ZigConnect Template Tags', 'zigconnect') . '</h5>'; 
     708            $help .= '<ul>'; 
     709            $help .= '<li>array <strong>zc_get_connections</strong> ( [int <em>$post_id</em>] )<br />' . __('Returns an array of connection IDs, optionally limited to connections that involve the post type of the specified post.', 'zigconnect') . '</li>'; 
     710            $help .= '<li>array <strong>zc_get_linked_posts</strong> ( string <em>$type</em> )<br />' . __('Returns an array of post IDs of posts that are of the specified type and are linked from the current post.', 'zigconnect') . '</li>'; 
     711            $help .= '<li>array <strong>zc_get_linkdata</strong> ( int <em>$post_id</em> )<br />' . __('Returns an associative array of key+value pairs for the data attached to the link between the current post and the specified post.', 'zigconnect') . '</li>'; 
     712            $help .= '<li>array <strong>zc_get_linkid</strong> ( int <em>$post_id</em> )<br />' . __('Returns the ID of the link between the current post and the specified post.', 'zigconnect') . '</li>'; 
     713            $help .= '</ul>'; 
     714            return $help; 
     715        } 
     716 
     717 
     718        public function DoAdminSidebar() { 
     719            ?> 
     720            <table class="widefat donate" cellspacing="0"> 
     721            <thead> 
     722            <tr><th><?php _e('Support this plugin!', 'zigconnect')?></th></tr> 
     723            </thead> 
     724            <tr><td> 
     725            <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank"> 
     726            <input type="hidden" name="cmd" value="_s-xclick"> 
     727            <input type="hidden" name="hosted_button_id" value="GT252NPAFY8NN"> 
     728            <input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"> 
     729            <img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1"> 
     730            </form> 
     731            <p><?php _e('If you find ZigConnect useful, please keep it free by making a donation.', 'zigconnect')?></p> 
     732            <p><?php _e('Suggested donation: &euro;20 or an amount of your choice. Thanks!', 'zigconnect')?></p> 
     733            </td></tr> 
     734            </table> 
     735            <table class="widefat donate" cellspacing="0"> 
     736            <thead> 
     737            <tr><th><?php _e('Brought to you by ZigPress', 'zigconnect')?></th></tr> 
     738            </thead> 
     739            <tr><td> 
     740            <p><a href="https://www.zigpress.com/">ZigPress</a> <?php _e('is a web agency specialising in WordPress-based solutions. We have also released a number of free plugins to support the WordPress community.', 'zigconnect')?></p> 
     741            <p><a target="_blank" href="https://www.zigpress.com/plugins/zigconnect/"> <?php _e('ZigConnect page', 'zigconnect')?></a></p> 
     742            <p><a target="_blank" href="https://www.zigpress.com/wordpress-plugins/"><?php _e('Other ZigPress plugins', 'zigconnect')?></a></p> 
     743            <p><a target="_blank" href="https://www.facebook.com/pages/ZigPress/171766958751"><?php _e('ZigPress on Facebook', 'zigconnect')?></a></p> 
     744            <p><a target="_blank" href="https://twitter.com/ZigPress"><?php _e('ZigPress on Twitter', 'zigconnect')?></a></p> 
     745            </td></tr> 
     746            </table> 
     747            <?php 
     748        } 
     749 
     750 
     751        public function DoAdminPageMain() { 
     752            if (!current_user_can('manage_options')) { wp_die(__('You are not allowed to do this.', 'zigconnect')); } 
     753            if ($this->ResultType != '') echo $this->ShowResult($this->ResultType, $this->ResultMessage); 
     754            # just in case the user upgraded the plugin by overwriting the old one - this saves them deactivating and reactivating to update the DB schema 
     755            if ($this->DB->get_var("SHOW TABLES LIKE '" . $this->ListTable . "'") == $this->ListTable) { 
     756                new ZigConnectTableBuilder(); 
     757                echo $this->ShowResult('INFO', 'Tables updated.'); 
     758            } 
     759            if ($this->Params['zigaction'] == 'edit') { 
     760                $id = $this->Params['chk']; 
     761                $objConnection = $this->GetConnection($id); 
     762                ?> 
     763                <div class="wrap zigconnect-admin"> 
     764                <h2>ZigConnect - <?php _e('Edit Connection', 'zigconnect')?> <a href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu" class="button"><?php _e('Back without saving', 'zigconnect')?></a></h2> 
     765                <div class="wrap-left"> 
     766                <div class="col-pad"> 
     767                <form action="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu" method="post"> 
     768                <input type="hidden" name="zigaction" value="zigconnect-admin-connections-update" /> 
     769                <input type="hidden" name="id" value="<?php echo $id?>" /> 
     770                <table class="form-table"> 
     771                <tr valign="top"> 
     772                <th class="right" scope="row"><?php _e('Name:', 'zigconnect')?></th> 
     773                <td><input type="text" name="zc_conn_name" id="zc_conn_name" value="<?php echo $objConnection->zc_conn_name?>"  /> <span class="description"><?php _e('For example: Stock Items, Historical Links, etc.', 'zigconnect')?></span></td> 
     774                </tr> 
     775                <tr valign="top"> 
     776                <th class="right" scope="row"><?php _e('Slug:', 'zigconnect')?></th> 
     777                <td><input type="text" name="zc_conn_slug" id="zc_conn_slug" value="<?php echo $objConnection->zc_conn_slug?>"  /> <span class="description"><?php _e('Unique alphanumeric, will be converted to lower case', 'zigconnect')?></span></td> 
     778                </tr> 
     779                <tr valign="top"> 
     780                <th class="right" scope="row"><?php _e('From:', 'zigconnect')?></th> 
     781                <td><select name="zc_conn_from"> 
     782                <option value="">[<?php _e('please select', 'zigconnect')?>]</option> 
     783                <?php 
     784                foreach (get_post_types('', 'names') as $type) { 
     785                    ?><option value="<?php echo $type?>" <?php if ($objConnection->zc_conn_from == $type) { echo('selected="selected"'); } ?> ><?php echo $type?></option><?php 
     786                } 
     787                ?> 
     788                </select></td> 
     789                </tr> 
     790                <tr valign="top"> 
     791                <th class="right" scope="row"><?php _e('To:', 'zigconnect')?></th> 
     792                <td><select name="zc_conn_to"> 
     793                <option value="">[<?php _e('please select', 'zigconnect')?>]</option> 
     794                <?php 
     795                foreach (get_post_types('', 'names') as $type) { 
     796                    ?><option value="<?php echo $type?>" <?php if ($objConnection->zc_conn_to == $type) { echo('selected="selected"'); } ?> ><?php echo $type?></option><?php 
     797                } 
     798                ?> 
     799                </select></td> 
     800                </tr> 
     801                <tr valign="top"> 
     802                <th class="right" scope="row"><?php _e('Reciprocal?', 'zigconnect')?></th> 
     803                <td><input class="checkbox" type="checkbox" name="zc_conn_reciprocal" id="zc_conn_reciprocal" value="1" <?php if ($objConnection->zc_conn_reciprocal == 1) { echo('checked="checked"'); } ?> /> <span class="description"><?php _e('means connection is bidirectional', 'zigconnect')?></span></td> 
     804                </tr> 
     805                </table> 
     806                <p class="submit"><input type="submit" name="Submit" class="button-primary" value="<?php _e('Save Changes', 'zigconnect')?>" /></p> 
     807                </form> 
     808                </div><!--col-pad--> 
     809                </div><!--wrap-left--> 
     810                <div class="wrap-right"> 
     811                <?php 
     812                $this->DoAdminSidebar(); 
     813                ?> 
     814                </div><!--wrap-right--> 
     815                <div class="clearer">&nbsp;</div> 
     816                </div><!--/wrap--> 
     817                <?php 
     818            } else { 
     819                ?> 
     820                <div class="wrap zigconnect-admin"> 
     821                <h2>ZigConnect <a href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu&amp;zigaction=edit&amp;chk=-1" class="button "><?php _e('Add New Connection', 'zigconnect')?></a></h2> 
     822                <div class="wrap-left"> 
     823                <div class="col-pad"> 
     824                <?php 
     825                $sql  = "SELECT * "; 
     826                $sql .= "FROM " . $this->ConnTable . " "; 
     827                $sql .= "ORDER BY zc_conn_from ASC "; 
     828                $result = $this->DB->get_results($sql); 
     829                if ($result) { 
    788830                    ?> 
     831                    <form action="<?php echo $_SERVER['REQUEST_URI']?>" method="get"> 
     832                    <input type="hidden" name="page" value="<?php echo $this->Params['page']?>" /> 
     833                    <div class="tablenav"> 
     834                    <div class="alignleft actions"> 
     835                    <select name="zigaction"> 
     836                    <option value="" selected="selected"><?php _e('Bulk Actions', 'zigconnect')?></option> 
     837                    <option value="zigconnect-admin-connections-delete"><?php _e('Delete', 'zigconnect')?></option> 
     838                    </select> 
     839                    <input type="submit" value="<?php _e('Apply', 'zigconnect')?>" class="button-secondary apply" /> 
     840                    </div><!--/actions--> 
     841                    <br class="clear" /> 
     842                    </div><!--/tablenav--> 
     843                    <table class="widefat " cellspacing="0"> 
     844                    <thead> 
     845                    <tr> 
     846                    <th class="check-column"><input type="checkbox" name="chkall" /></th> 
     847                    <th><?php _e('ID', 'zigconnect')?></th> 
     848                    <th><?php _e('Name', 'zigconnect')?></th> 
     849                    <th><?php _e('Details', 'zigconnect')?></th> 
     850                    <th><?php _e('Reciprocal?', 'zigconnect')?></th> 
     851                    <th><?php _e('Links', 'zigconnect')?></th> 
     852                    <th><?php _e('Data Fields', 'zigconnect')?></th> 
     853                    <th><?php _e('Data Items', 'zigconnect')?></th> 
    789854                    </tr> 
     855                    </thead> 
     856                    <tfoot> 
     857                    <tr> 
     858                    <th class="check-column"><input type="checkbox" name="chkall" /></th> 
     859                    <th><?php _e('ID', 'zigconnect')?></th> 
     860                    <th><?php _e('Name', 'zigconnect')?></th> 
     861                    <th><?php _e('Details', 'zigconnect')?></th> 
     862                    <th><?php _e('Reciprocal?', 'zigconnect')?></th> 
     863                    <th><?php _e('Links', 'zigconnect')?></th> 
     864                    <th><?php _e('Data Fields', 'zigconnect')?></th> 
     865                    <th><?php _e('Data Items', 'zigconnect')?></th> 
     866                    </tr> 
     867                    </tfoot> 
     868                    <tbody> 
    790869                    <?php 
     870                    foreach ($result as $row) { 
     871                        ?> 
     872                        <tr> 
     873                        <th nowrap="nowrap" class="check-column"><input type="checkbox" name="chk[<?php echo $row->zc_conn_id?>]" value="on" /></th> 
     874                        <td><?php echo $row->zc_conn_id?></td> 
     875                        <td><a class="row-title" title="Edit connection" href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu&amp;zigaction=edit&amp;chk=<?php echo $row->zc_conn_id?>"><?php echo $row->zc_conn_name?></a><div class="row-actions"> 
     876                            <a href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu&amp;zigaction=edit&amp;chk=<?php echo $row->zc_conn_id?>"><?php _e('Edit', 'zigconnect')?></a> 
     877                            | <a onclick="return confirm('<?php _e('Are you sure? Deleting a connection cannot be undone!', 'zigconnect')?>')" href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu&amp;zigaction=zigconnect-admin-connections-delete&amp;chk=<?php echo $row->zc_conn_id?>"><?php _e('Delete', 'zigconnect')?></a> 
     878                        </div></td> 
     879                        <td><?php echo $this->GetConnectionShorthand($row->zc_conn_id)?></td> 
     880                        <td nowrap="nowrap"><?php echo ($row->zc_conn_reciprocal == 1) ? '<img class="zigconnect-icon" src="' . $this->PluginFolder . 'images/tick.png" />' : '<img class="zigconnect-icon" src="' . $this->PluginFolder . 'images/bullet_cross.png" />'?></td> 
     881                        <td><?php echo count($this->GetLinkIDs($row->zc_conn_id))?></td> 
     882                        <td><?php echo count($this->GetFieldIDs($row->zc_conn_id))?></td> 
     883                        <td><?php echo count($this->GetDataIDs($row->zc_conn_id, false))?></td> 
     884                        </tr> 
     885                        <?php 
    791886                    } 
    792                 } 
    793             $objOtherType = get_post_type_object($strOtherType); 
    794             ?> 
    795             </table> 
    796             <div class="zigconnect-metabox-searchwrapper" id="zigconnect-metabox-searchwrapper-<?php echo $zc_conn_id?>"> 
    797             <div class="zigconnect-metabox-searchform" id="zigconnect-metabox-searchform-<?php echo $zc_conn_id?>"> 
    798  
    799             <input class="button-secondary zigconnect-metabox-addallbutton" type="button" id="zigconnect-metabox-addallbutton-<?php echo $zc_conn_id?>" value="<?php _e('Add All', 'zigconnect')?> <?php echo $objOtherType->labels->name?>!" /> 
    800  
    801             <input type="hidden" name="zigconnect-metabox-search-postid-<?php echo $zc_conn_id?>" id="zigconnect-metabox-search-postid-<?php echo $zc_conn_id?>" value="<?php echo $post->ID?>" /> 
    802             <input name="zigconnect-metabox-search-<?php echo $zc_conn_id?>" type="text" id="zigconnect-metabox-search-<?php echo $zc_conn_id?>" value="" class="medium-text" />  
    803             <input class="button-secondary zigconnect-metabox-searchbutton" type="button" id="zigconnect-metabox-searchbutton-<?php echo $zc_conn_id?>" value="<?php _e('Search', 'zigconnect')?> <?php echo $objOtherType->labels->name?>" /> 
    804             <div class="zigconnect-metabox-searchresults" id="zigconnect-metabox-searchresults-<?php echo $zc_conn_id?>"> 
    805             </div><!--/zigconnect-metabox-searchresults--> 
    806             <img class="zigconnect-metabox-loader" id="zigconnect-metabox-loader-<?php echo $zc_conn_id?>" style="display:none;" src="<?php echo $this->PluginFolder?>images/ajax-loader.gif" alt="" /> 
    807             </div><!--/zigconnect-metabox-searchform--> 
    808             </div><!--/zigconnect-metabox-searchwrapper--> 
    809             <?php 
    810             } 
    811         else 
    812             { 
    813             ?> 
    814             <?php _e('No posts of type', 'zigconnect')?> '<?php echo $strOtherType?>' <?php _e('found.', 'zigconnect')?> 
    815             <?php 
    816             } 
    817         } 
    818  
    819  
    820     public function GetAdminHelp() 
    821         { 
    822         $help = '<h5>' . __('ZigConnect General Help', 'zigconnect') . '</h5>'; 
    823         $help .= '<ul>'; 
    824         $help .= '<li>' . __('A <strong>connection</strong> defines a link between two post <strong>types</strong>.', 'zigconnect') . '</li>'; 
    825         $help .= '<li>' . __('A <strong>link</strong> is between two actual posts whose types are connected.', 'zigconnect') . '</li>'; 
    826         $help .= '<li>' . __('A <strong>field</strong> is a definition for a piece of data that can be stored with any link belonging to a specific connection.', 'zigconnect') . '</li>'; 
    827         $help .= '<li>' . __('A <strong>data item</strong> is a piece of data stored with a link according to a defined field.', 'zigconnect') . '</li>'; 
    828         $help .= '<li>' . __('For now all data fields are free text fields.', 'zigconnect') . '</li>'; 
    829         $help .= '</ul>'; 
    830         $help .= '<h5>' . __('ZigConnect Template Tags', 'zigconnect') . '</h5>'; 
    831         $help .= '<ul>'; 
    832         $help .= '<li>array <strong>zc_get_connections</strong> ( [int <em>$post_id</em>] )<br />' . __('Returns an array of connection IDs, optionally limited to connections that involve the post type of the specified post.', 'zigconnect') . '</li>'; 
    833         $help .= '<li>array <strong>zc_get_linked_posts</strong> ( string <em>$type</em> )<br />' . __('Returns an array of post IDs of posts that are of the specified type and are linked from the current post.', 'zigconnect') . '</li>'; 
    834         $help .= '<li>array <strong>zc_get_linkdata</strong> ( int <em>$post_id</em> )<br />' . __('Returns an associative array of key+value pairs for the data attached to the link between the current post and the specified post.', 'zigconnect') . '</li>'; 
    835         $help .= '<li>array <strong>zc_get_linkid</strong> ( int <em>$post_id</em> )<br />' . __('Returns the ID of the link between the current post and the specified post.', 'zigconnect') . '</li>'; 
    836         $help .= '</ul>'; 
    837         return $help; 
    838         } 
    839  
    840  
    841     public function DoAdminSidebar() 
    842         { 
    843         ?> 
    844         <table class="widefat donate" cellspacing="0"> 
    845         <thead> 
    846         <tr><th><?php _e('Support this plugin!', 'zigconnect')?></th></tr> 
    847         </thead> 
    848         <tr><td> 
    849         <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank"> 
    850         <input type="hidden" name="cmd" value="_s-xclick"> 
    851         <input type="hidden" name="hosted_button_id" value="GT252NPAFY8NN"> 
    852         <input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"> 
    853         <img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1"> 
    854         </form> 
    855         <p><?php _e('If you find ZigConnect useful, please keep it free by making a donation.', 'zigconnect')?></p> 
    856         <p><?php _e('Suggested donation: &euro;20 - &euro;40 or an amount of your choice. Thanks!', 'zigconnect')?></p> 
    857         </td></tr> 
    858         </table> 
    859         <table class="widefat donate" cellspacing="0"> 
    860         <thead> 
    861         <tr><th><img class="icon floatRight" src="<?php echo $this->PluginFolder?>images/favicon.3.ico" alt="Yes" title="Yes" /><?php _e('Brought to you by ZigPress', 'zigconnect')?></th></tr> 
    862         </thead> 
    863         <tr><td> 
    864         <p><a href="http://www.zigpress.com/">ZigPress</a> <?php _e('is a web agency specialising in WordPress-based solutions. We have also released a number of free plugins to support the WordPress community.', 'zigconnect')?></p> 
    865         <p><a target="_blank" href="http://www.zigpress.com/wordpress/plugins/zigconnect/"><img class="icon" src="<?php echo $this->PluginFolder?>images/preferences-system-windows.png" alt="ZigConnect WordPress plugin ZigPress" title="ZigConnect WordPress plugin by ZigPress" /> <?php _e('ZigConnect page', 'zigconnect')?></a></p> 
    866         <p><a target="_blank" href="http://www.zigpress.com/wordpress/plugins/"><img class="icon" src="<?php echo $this->PluginFolder?>images/plugin.png" alt="WordPress plugins by ZigPress" title="WordPress plugins by ZigPress" /> <?php _e('Other ZigPress plugins', 'zigconnect')?></a></p> 
    867         <p><a target="_blank" href="http://www.facebook.com/pages/ZigPress/171766958751"><img class="icon" src="<?php echo $this->PluginFolder?>images/facebook.png" alt="ZigPress on Facebook" title="ZigPress on Facebook" /> <?php _e('ZigPress on Facebook', 'zigconnect')?></a></p> 
    868         <p><a target="_blank" href="http://twitter.com/ZigPress"><img class="icon" src="<?php echo $this->PluginFolder?>images/twitter.png" alt="ZigPress on Twitter" title="ZigPress on Twitter" /> <?php _e('ZigPress on Twitter', 'zigconnect')?></a></p> 
    869         </td></tr> 
    870         </table> 
    871         <?php 
    872         } 
    873  
    874  
    875     public function DoAdminPageMain() 
    876         { 
    877         if (!current_user_can('manage_options')) { wp_die(__('You are not allowed to do this.', 'zigconnect')); } 
    878         if ($this->ResultType != '') echo $this->ShowResult($this->ResultType, $this->ResultMessage); 
    879         # just in case the user upgraded the plugin by overwriting the old one - this saves them deactivating and reactivating to update the DB schema 
    880         if ($this->DB->get_var("SHOW TABLES LIKE '" . $this->ListTable . "'") == $this->ListTable) 
    881             { 
    882             new ZigConnectTableBuilder(); 
    883             echo $this->ShowResult('INFO', 'Tables updated.'); 
    884             } 
    885         if ($this->Params['zigaction'] == 'edit') 
    886             { 
    887             $id = $this->Params['chk']; 
    888             $objConnection = $this->GetConnection($id); 
     887                    ?> 
     888                    </tbody> 
     889                    </table> 
     890                    <div class="tablenav"> 
     891                    <div class="alignleft actions"> 
     892                    <select name="zigaction2"> 
     893                    <option value="" selected="selected"><?php _e('Bulk Actions', 'zigconnect')?></option> 
     894                    <option value="zigconnect-admin-connections-delete"><?php _e('Delete', 'zigconnect')?></option> 
     895                    </select> 
     896                    <input type="submit" value="<?php _e('Apply', 'zigconnect')?>" class="button-secondary apply" /> 
     897                    </div><!--/actions--> 
     898                    <br class="clear" /> 
     899                    </div><!--/tablenav--> 
     900                    </form> 
     901                    <?php 
     902                } else { 
     903                    ?><p><?php _e('No connections found.', 'zigconnect')?></p><?php 
     904                } 
     905                ?> 
     906                <p><?php _e('Pull down this page\'s Help tab (top right) for assistance.', 'zigconnect')?></p> 
     907                </div><!--col-pad--> 
     908                </div><!--wrap-left--> 
     909                <div class="wrap-right"> 
     910                <?php 
     911                $this->DoAdminSidebar(); 
     912                ?> 
     913                </div><!--wrap-right--> 
     914                <div class="clearer">&nbsp;</div> 
     915                </div><!--/wrap--> 
     916                <?php 
     917            } 
     918        } 
     919 
     920 
     921        public function DoAdminPageFields() { 
     922            if (!current_user_can('manage_options')) { wp_die(__('You are not allowed to do this.', 'zigconnect')); } 
     923            if ($this->ResultType != '') echo $this->ShowResult($this->ResultType, $this->ResultMessage); 
     924            if ($this->Params['zigaction'] == 'edit') { 
     925                $id = $this->Params['chk']; 
     926                $objField = $this->GetField($id); 
     927                ?> 
     928                <div class="wrap zigconnect-admin"> 
     929                <div id="icon-zigconnect" class="icon32"><br /></div> 
     930                <h2>ZigConnect - <?php _e('Edit Field', 'zigconnect')?> <a href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu-fields" class="button"><?php _e('Back without saving', 'zigconnect')?></a></h2> 
     931                <div class="wrap-left"> 
     932                <div class="col-pad"> 
     933                <form action="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu-fields" method="post"> 
     934                <input type="hidden" name="zigaction" value="zigconnect-admin-fields-update" /> 
     935                <input type="hidden" name="id" value="<?php echo $id?>" /> 
     936                <table class="form-table"> 
     937                <tr valign="top"> 
     938                <th class="right" scope="row"><?php _e('Connection:', 'zigconnect')?></th> 
     939                <td><select name="zc_conn_id"> 
     940                <option value="">[<?php _e('please select', 'zigconnect')?>]&nbsp;</option> 
     941                <?php 
     942                $arrConnectionIDs = $this->GetConnectionIDs(); 
     943                foreach ($arrConnectionIDs as $zc_conn_id) { 
     944                    $objConnection = $this->GetConnection($zc_conn_id); 
     945                    ?> 
     946                    <option value="<?php echo $zc_conn_id?>" <?php if ($objField->zc_conn_id == $zc_conn_id) { echo('selected="selected"'); } ?> ><?php echo $objConnection->zc_conn_name?> (<?php echo $this->GetConnectionShorthand($zc_conn_id)?>)&nbsp;</option> 
     947                    <?php 
     948                } 
     949                ?> 
     950                </select></td> 
     951                </tr> 
     952                <tr valign="top"> 
     953                <th class="right" scope="row"><?php _e('Slug:', 'zigconnect')?></th> 
     954                <td><input type="text" name="zc_field_name" id="zc_field_name" value="<?php echo $objField->zc_field_name?>"  /> <span class="description"><?php _e('Unique alphanumeric, will be converted to lower case', 'zigconnect')?></span></td> 
     955                </tr> 
     956                <tr valign="top"> 
     957                <th class="right" scope="row"><?php _e('Name:', 'zigconnect')?></th> 
     958                <td><input type="text" name="zc_field_prompt" id="zc_field_prompt" value="<?php echo $objField->zc_field_prompt?>"  /> <span class="description"><?php _e('Used as prompt on edit screens')?></span></td> 
     959                </tr> 
     960                <tr valign="top"> 
     961                <th class="right" scope="row"><?php _e('Type:', 'zigconnect')?></th> 
     962                <td><select name="zc_field_type"> 
     963                <option value="">[<?php _e('please select', 'zigconnect')?>]&nbsp;</option> 
     964                <?php 
     965                foreach ($this->FieldTypes as $zc_field_type) { 
     966                    ?> 
     967                    <option value="<?php echo $zc_field_type?>" <?php if ($objField->zc_field_type == $zc_field_type) { echo('selected="selected"'); } ?> ><?php echo ucwords(strtolower($zc_field_type))?>&nbsp;</option> 
     968                    <?php 
     969                } 
     970                ?> 
     971                </select></td> 
     972                </tr> 
     973                <tr valign="top"> 
     974                <th class="right" scope="row"><?php _e('Box size:', 'zigconnect')?></th> 
     975                <td><input type="text" name="zc_field_size" id="zc_field_size" value="<?php echo $objField->zc_field_size?>"  /> <span class="description">As in &lt;input type=&quot;text&quot; size=&quot;n&quot;&gt; (if text)</span></td> 
     976                </tr> 
     977                <tr valign="top"> 
     978                <th class="right" scope="row"><?php _e('Order:', 'zigconnect')?></th> 
     979                <td><input type="text" name="zc_field_order" id="zc_field_order" value="<?php echo $objField->zc_field_order?>"  /> <span class="description">The order in which fields are shown in the metaboxes</span></td> 
     980                </tr> 
     981                </table> 
     982                <p class="submit"><input type="submit" name="Submit" class="button-primary" value="<?php _e('Save Changes', 'zigconnect')?>" /></p> 
     983                </form> 
     984                </div><!--col-pad--> 
     985                </div><!--wrap-left--> 
     986                <div class="wrap-right"> 
     987                <?php 
     988                $this->DoAdminSidebar(); 
     989                ?> 
     990                </div><!--wrap-right--> 
     991                <div class="clearer">&nbsp;</div> 
     992                </div><!--/wrap--> 
     993                <?php 
     994            } else { 
     995                ?> 
     996                <div class="wrap zigconnect-admin"> 
     997                <div id="icon-zigconnect" class="icon32"><br /></div> 
     998                <h2>ZigConnect - <?php _e('Fields', 'zigconnect')?> <a href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu-fields&amp;zigaction=edit&amp;chk=-1" class="button"><?php _e('Add New Field', 'zigconnect')?></a></h2> 
     999                <div class="wrap-left"> 
     1000                <div class="col-pad"> 
     1001                <?php 
     1002                $sql = "SELECT "; 
     1003                $sql .= $this->FieldTable . ".*, "; 
     1004                $sql .= $this->ConnTable . ".zc_conn_name "; 
     1005                $sql .= "FROM " . $this->FieldTable . " "; 
     1006                $sql .= "LEFT JOIN " . $this->ConnTable . " "; 
     1007                $sql .= "ON (" . $this->ConnTable . ".zc_conn_id=" . $this->FieldTable . ".zc_conn_id) "; 
     1008                $sql .= "ORDER BY " . $this->ConnTable . ".zc_conn_name ASC, zc_field_order ASC, zc_field_name ASC "; 
     1009                $result = $this->DB->get_results($sql); 
     1010                if ($result) { 
     1011                    ?> 
     1012                    <form action="<?php echo $_SERVER['REQUEST_URI']?>" method="get"> 
     1013                    <input type="hidden" name="page" value="<?php echo $this->Params['page']?>" /> 
     1014                    <div class="tablenav"> 
     1015                    <div class="alignleft actions"> 
     1016                    <select name="zigaction"> 
     1017                    <option value="" selected="selected"><?php _e('Bulk Actions', 'zigconnect')?></option> 
     1018                    <option value="zigconnect-admin-fields-delete"><?php _e('Delete', 'zigconnect')?></option> 
     1019                    </select> 
     1020                    <input type="submit" value="<?php _e('Apply', 'zigconnect')?>" class="button-secondary apply" /> 
     1021                    </div><!--/actions--> 
     1022                    <br class="clear" /> 
     1023                    </div><!--/tablenav--> 
     1024                    <table class="widefat " cellspacing="0"> 
     1025                    <thead> 
     1026                    <tr> 
     1027                    <th class="check-column"><input type="checkbox" name="chkall" /></th> 
     1028                    <th><?php _e('ID', 'zigconnect')?></th> 
     1029                    <th><?php _e('Slug', 'zigconnect')?></th> 
     1030                    <th><?php _e('Name', 'zigconnect')?></th> 
     1031                    <th><?php _e('Type', 'zigconnect')?></th> 
     1032                    <th><?php _e('Connection', 'zigconnect')?></th> 
     1033                    <th><?php _e('Order', 'zigconnect')?></th> 
     1034                    <th><?php _e('Data Items', 'zigconnect')?></th> 
     1035                    </tr> 
     1036                    </thead> 
     1037                    <tfoot> 
     1038                    <tr> 
     1039                    <th class="check-column"><input type="checkbox" name="chkall" /></th> 
     1040                    <th><?php _e('ID', 'zigconnect')?></th> 
     1041                    <th><?php _e('Slug', 'zigconnect')?></th> 
     1042                    <th><?php _e('Name', 'zigconnect')?></th> 
     1043                    <th><?php _e('Type', 'zigconnect')?></th> 
     1044                    <th><?php _e('Connection', 'zigconnect')?></th> 
     1045                    <th><?php _e('Order', 'zigconnect')?></th> 
     1046                    <th><?php _e('Data Items', 'zigconnect')?></th> 
     1047                    </tr> 
     1048                    </tfoot> 
     1049                    <tbody> 
     1050                    <?php 
     1051                    foreach ($result as $row) { 
     1052                        ?> 
     1053                        <tr> 
     1054                        <th nowrap="nowrap" class="check-column"><input type="checkbox" name="chk[<?php echo $row->zc_field_id?>]" value="on" /></th> 
     1055                        <td><?php echo $row->zc_field_id?></td> 
     1056                        <td><a class="row-title" href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu-fields&amp;zigaction=edit&amp;chk=<?php echo $row->zc_field_id?>"><?php echo $row->zc_field_name?></a><div class="row-actions"> 
     1057                            <a href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu-fields&amp;zigaction=edit&amp;chk=<?php echo $row->zc_field_id?>"><?php _e('Edit', 'zigconnect')?></a> 
     1058                            | <a onclick="return confirm('<?php _e('Are you sure? Deleting a field cannot be undone!', 'zigconnect')?>')" href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu-fields&amp;zigaction=zigconnect-admin-fields-delete&amp;chk=<?php echo $row->zc_field_id?>"><?php _e('Delete', 'zigconnect')?></a> 
     1059                        </div></td> 
     1060                        <td><?php echo $row->zc_field_prompt?></td> 
     1061                        <td><?php echo ucwords(strtolower($row->zc_field_type))?></td> 
     1062                        <td><?php echo $row->zc_conn_name?></td> 
     1063                        <td><?php echo $row->zc_field_order?></td> 
     1064                        <td><?php echo count($this->GetDataIDs(false, $row->zc_field_id))?></td> 
     1065                        </tr> 
     1066                        <?php 
     1067                    } 
     1068                    ?> 
     1069                    </tbody> 
     1070                    </table> 
     1071                    <div class="tablenav"> 
     1072                    <div class="alignleft actions"> 
     1073                    <select name="zigaction2"> 
     1074                    <option value="" selected="selected"><?php _e('Bulk Actions', 'zigconnect')?></option> 
     1075                    <option value="zigconnect-admin-fields-delete"><?php _e('Delete', 'zigconnect')?></option> 
     1076                    </select> 
     1077                    <input type="submit" value="<?php _e('Apply', 'zigconnect')?>" class="button-secondary apply" /> 
     1078                    </div><!--/actions--> 
     1079                    <br class="clear" /> 
     1080                    </div><!--/tablenav--> 
     1081                    </form> 
     1082                    <?php 
     1083                } else { 
     1084                    ?><p><?php _e('No fields found.', 'zigconnect')?></p><?php 
     1085                } 
     1086                ?> 
     1087                <p><?php _e('Pull down this page\'s Help tab (top right) for assistance.', 'zigconnect')?></p> 
     1088                </div><!--col-pad--> 
     1089                </div><!--wrap-left--> 
     1090                <div class="wrap-right"> 
     1091                <?php 
     1092                $this->DoAdminSidebar(); 
     1093                ?> 
     1094                </div><!--wrap-right--> 
     1095                <div class="clearer">&nbsp;</div> 
     1096                </div><!--/wrap--> 
     1097                <?php 
     1098            } 
     1099        } 
     1100 
     1101 
     1102        public function DoAdminPageSettings() { 
     1103            if (!current_user_can('manage_options')) { wp_die(__('You are not allowed to do this.', 'zigconnect')); } 
     1104            if ($this->ResultType != '') echo $this->ShowResult($this->ResultType, $this->ResultMessage); 
    8891105            ?> 
    8901106            <div class="wrap zigconnect-admin"> 
    8911107            <div id="icon-zigconnect" class="icon32"><br /></div> 
    892             <h2>ZigConnect - <?php _e('Edit Connection', 'zigconnect')?> <a href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu" class="button add-new-h2"><?php _e('Back without saving', 'zigconnect')?></a></h2> 
     1108            <h2>ZigConnect - <?php _e('Options', 'zigconnect')?></h2> 
    8931109            <div class="wrap-left"> 
    8941110            <div class="col-pad"> 
    895             <form action="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu" method="post"> 
    896             <input type="hidden" name="zigaction" value="zigconnect-admin-connections-update" /> 
    897             <input type="hidden" name="id" value="<?php echo $id?>" /> 
     1111            <p><?php _e('The options below allow you to uninstall cleanly if you need to. Use with care!', 'zigconnect')?></p> 
     1112            <form action="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu-settings" method="post"> 
     1113            <input type="hidden" name="zigaction" value="zigconnect-admin-options-update" /> 
     1114            <?php wp_nonce_field('zigpress_nonce'); ?> 
    8981115            <table class="form-table"> 
    8991116            <tr valign="top"> 
    900             <th class="right" scope="row"><?php _e('Name:', 'zigconnect')?></th> 
    901             <td><input type="text" name="zc_conn_name" id="zc_conn_name" value="<?php echo $objConnection->zc_conn_name?>"  /> <span class="description"><?php _e('For example: Stock Items, Historical Links, etc.', 'zigconnect')?></span></td> 
     1117            <th scope="row" class="right">Fields per row on links:</th> 
     1118            <td><input name="FieldsPerRow" type="text" id="FieldsPerRow" value="<?php echo esc_attr($this->Options['FieldsPerRow']) ?>" class="small-text" /> <span class="description">Suggest between 3 and 6</span></td> 
    9021119            </tr> 
    9031120            <tr valign="top"> 
    904             <th class="right" scope="row"><?php _e('Slug:', 'zigconnect')?></th> 
    905             <td><input type="text" name="zc_conn_slug" id="zc_conn_slug" value="<?php echo $objConnection->zc_conn_slug?>"  /> <span class="description"><?php _e('Unique alphanumeric, will be converted to lower case', 'zigconnect')?></span></td> 
    906             </tr> 
    907             <tr valign="top"> 
    908             <th class="right" scope="row"><?php _e('From:', 'zigconnect')?></th> 
    909             <td><select name="zc_conn_from"> 
    910             <option value="">[<?php _e('please select', 'zigconnect')?>]</option> 
    911             <?php 
    912             foreach (get_post_types('', 'names') as $type) 
    913                 { 
    914                 ?><option value="<?php echo $type?>" <?php if ($objConnection->zc_conn_from == $type) { echo('selected="selected"'); } ?> ><?php echo $type?></option><?php 
    915                 } 
    916             ?> 
    917             </select></td> 
    918             </tr> 
    919             <tr valign="top"> 
    920             <th class="right" scope="row"><?php _e('To:', 'zigconnect')?></th> 
    921             <td><select name="zc_conn_to"> 
    922             <option value="">[<?php _e('please select', 'zigconnect')?>]</option> 
    923             <?php 
    924             foreach (get_post_types('', 'names') as $type) 
    925                 { 
    926                 ?><option value="<?php echo $type?>" <?php if ($objConnection->zc_conn_to == $type) { echo('selected="selected"'); } ?> ><?php echo $type?></option><?php 
    927                 } 
    928             ?> 
    929             </select></td> 
    930             </tr> 
    931             <tr valign="top"> 
    932             <th class="right" scope="row"><?php _e('Reciprocal?', 'zigconnect')?></th> 
    933             <td><input class="checkbox" type="checkbox" name="zc_conn_reciprocal" id="zc_conn_reciprocal" value="1" <?php if ($objConnection->zc_conn_reciprocal == 1) { echo('checked="checked"'); } ?> /> <span class="description"><?php _e('means connection is bidirectional', 'zigconnect')?></span></td> 
     1121            <th scope="row" class="right"><?php _e('Next deactivation removes:', 'zigconnect')?></th> 
     1122            <td><input class="checkbox" type="checkbox" name="DeleteOptionsNextDeactivate" id="DeleteOptionsNextDeactivate" value="1" <?php if ($this->Options['DeleteOptionsNextDeactivate'] == 1) { echo('checked="checked"'); } ?> /> <?php _e('Settings', 'zigconnect')?> &nbsp; &nbsp; <input class="checkbox" type="checkbox" name="DeleteTablesNextDeactivate" id="DeleteTablesNextDeactivate" value="1" <?php if ($this->Options['DeleteTablesNextDeactivate'] == 1) { echo('checked="checked"'); } ?> /> <?php _e('Tables', 'zigconnect')?></td> 
    9341123            </tr> 
    9351124            </table> 
    936             <p class="submit"><input type="submit" name="Submit" class="button-primary" value="<?php _e('Save Changes', 'zigconnect')?>" /></p>  
     1125            <p class="submit"><input type="submit" name="Submit" class="button-primary" value="<?php _e('Save Changes', 'zigconnect')?>" /></p> 
    9371126            </form> 
    9381127            </div><!--col-pad--> 
     
    9461135            </div><!--/wrap--> 
    9471136            <?php 
    948             } 
    949         else 
    950             { 
    951             ?> 
    952             <div class="wrap zigconnect-admin"> 
    953             <div id="icon-zigconnect" class="icon32"><br /></div> 
    954             <h2>ZigConnect <a href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu&amp;zigaction=edit&amp;chk=-1" class="button add-new-h2"><?php _e('Add New Connection', 'zigconnect')?></a></h2> 
    955             <div class="wrap-left"> 
    956             <div class="col-pad"> 
    957             <?php 
    958             $sql  = "SELECT * "; 
    959             $sql .= "FROM " . $this->ConnTable . " "; 
    960             $sql .= "ORDER BY zc_conn_from ASC "; 
    961             $result = $this->DB->get_results($sql); 
    962             if ($result) 
    963                 { 
    964                 ?> 
    965                 <form action="<?php echo $_SERVER['REQUEST_URI']?>" method="get"> 
    966                 <input type="hidden" name="page" value="<?php echo $this->Params['page']?>" /> 
    967                 <div class="tablenav"> 
    968                 <div class="alignleft actions"> 
    969                 <select name="zigaction"> 
    970                 <option value="" selected="selected"><?php _e('Bulk Actions', 'zigconnect')?></option> 
    971                 <option value="zigconnect-admin-connections-delete"><?php _e('Delete', 'zigconnect')?></option> 
    972                 </select> 
    973                 <input type="submit" value="<?php _e('Apply', 'zigconnect')?>" class="button-secondary apply" /> 
    974                 </div><!--/actions--> 
    975                 <br class="clear" /> 
    976                 </div><!--/tablenav--> 
    977                 <table class="widefat " cellspacing="0"> 
    978                 <thead> 
    979                 <tr> 
    980                 <th class="check-column"><input type="checkbox" name="chkall" /></th> 
    981                 <th><?php _e('ID', 'zigconnect')?></th> 
    982                 <th><?php _e('Name', 'zigconnect')?></th> 
    983                 <th><?php _e('Details', 'zigconnect')?></th> 
    984                 <th><?php _e('Reciprocal?', 'zigconnect')?></th> 
    985                 <th><?php _e('Links', 'zigconnect')?></th> 
    986                 <th><?php _e('Data Fields', 'zigconnect')?></th> 
    987                 <th><?php _e('Data Items', 'zigconnect')?></th> 
    988                 </tr> 
    989                 </thead> 
    990                 <tfoot> 
    991                 <tr> 
    992                 <th class="check-column"><input type="checkbox" name="chkall" /></th> 
    993                 <th><?php _e('ID', 'zigconnect')?></th> 
    994                 <th><?php _e('Name', 'zigconnect')?></th> 
    995                 <th><?php _e('Details', 'zigconnect')?></th> 
    996                 <th><?php _e('Reciprocal?', 'zigconnect')?></th> 
    997                 <th><?php _e('Links', 'zigconnect')?></th> 
    998                 <th><?php _e('Data Fields', 'zigconnect')?></th> 
    999                 <th><?php _e('Data Items', 'zigconnect')?></th> 
    1000                 </tr> 
    1001                 </tfoot> 
    1002                 <tbody> 
    1003                 <?php 
    1004                 foreach ($result as $row) 
    1005                     { 
    1006                     ?> 
    1007                     <tr> 
    1008                     <th nowrap="nowrap" class="check-column"><input type="checkbox" name="chk[<?php echo $row->zc_conn_id?>] value="on" /></th> 
    1009                     <td><?php echo $row->zc_conn_id?></td> 
    1010                     <td><a class="row-title" title="Edit connection" href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu&amp;zigaction=edit&amp;chk=<?php echo $row->zc_conn_id?>"><?php echo $row->zc_conn_name?></a><div class="row-actions"> 
    1011                         <a href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu&amp;zigaction=edit&amp;chk=<?php echo $row->zc_conn_id?>"><?php _e('Edit', 'zigconnect')?></a>  
    1012                         | <a onclick="return confirm('<?php _e('Are you sure? Deleting a connection cannot be undone!', 'zigconnect')?>')" href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu&amp;zigaction=zigconnect-admin-connections-delete&amp;chk=<?php echo $row->zc_conn_id?>"><?php _e('Delete', 'zigconnect')?></a> 
    1013                     </div></td> 
    1014                     <td><?php echo $this->GetConnectionShorthand($row->zc_conn_id)?></td> 
    1015                     <td nowrap="nowrap"><?php echo ($row->zc_conn_reciprocal == 1) ? '<img class="zigconnect-icon" src="' . $this->PluginFolder . 'images/tick.png" />' : '<img class="zigconnect-icon" src="' . $this->PluginFolder . 'images/bullet_cross.png" />'?></td> 
    1016                     <td><?php echo count($this->GetLinkIDs($row->zc_conn_id))?></td> 
    1017                     <td><?php echo count($this->GetFieldIDs($row->zc_conn_id))?></td> 
    1018                     <td><?php echo count($this->GetDataIDs($row->zc_conn_id, false))?></td> 
    1019                     </tr> 
    1020                     <?php 
    1021                     } 
    1022                 ?> 
    1023                 </tbody> 
    1024                 </table> 
    1025                 <div class="tablenav"> 
    1026                 <div class="alignleft actions"> 
    1027                 <select name="zigaction2"> 
    1028                 <option value="" selected="selected"><?php _e('Bulk Actions', 'zigconnect')?></option> 
    1029                 <option value="zigconnect-admin-connections-delete"><?php _e('Delete', 'zigconnect')?></option> 
    1030                 </select> 
    1031                 <input type="submit" value="<?php _e('Apply', 'zigconnect')?>" class="button-secondary apply" /> 
    1032                 </div><!--/actions--> 
    1033                 <br class="clear" /> 
    1034                 </div><!--/tablenav--> 
    1035                 </form> 
    1036                 <?php 
    1037                 } 
    1038             else 
    1039                 { 
    1040                 ?><p><?php _e('No connections found.', 'zigconnect')?></p><?php 
    1041                 } 
    1042             ?> 
    1043             <p><?php _e('Pull down this page\'s Help tab (top right) for assistance.', 'zigconnect')?></p> 
    1044             </div><!--col-pad--> 
    1045             </div><!--wrap-left--> 
    1046             <div class="wrap-right"> 
    1047             <?php 
    1048             $this->DoAdminSidebar(); 
    1049             ?> 
    1050             </div><!--wrap-right--> 
    1051             <div class="clearer">&nbsp;</div> 
    1052             </div><!--/wrap--> 
    1053             <?php 
    1054             } 
    1055         } 
    1056  
    1057  
    1058     public function DoAdminPageFields() 
    1059         { 
    1060         if (!current_user_can('manage_options')) { wp_die(__('You are not allowed to do this.', 'zigconnect')); } 
    1061         if ($this->ResultType != '') echo $this->ShowResult($this->ResultType, $this->ResultMessage); 
    1062         if ($this->Params['zigaction'] == 'edit') 
    1063             { 
    1064             $id = $this->Params['chk']; 
    1065             $objField = $this->GetField($id); 
    1066             ?> 
    1067             <div class="wrap zigconnect-admin"> 
    1068             <div id="icon-zigconnect" class="icon32"><br /></div> 
    1069             <h2>ZigConnect - <?php _e('Edit Field', 'zigconnect')?> <a href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu-fields" class="button add-new-h2"><?php _e('Back without saving', 'zigconnect')?></a></h2> 
    1070             <div class="wrap-left"> 
    1071             <div class="col-pad"> 
    1072             <form action="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu-fields" method="post"> 
    1073             <input type="hidden" name="zigaction" value="zigconnect-admin-fields-update" /> 
    1074             <input type="hidden" name="id" value="<?php echo $id?>" /> 
    1075             <table class="form-table"> 
    1076             <tr valign="top"> 
    1077             <th class="right" scope="row"><?php _e('Connection:', 'zigconnect')?></th> 
    1078             <td><select name="zc_conn_id"> 
    1079             <option value="">[<?php _e('please select', 'zigconnect')?>]&nbsp;</option> 
    1080             <?php 
    1081             $arrConnectionIDs = $this->GetConnectionIDs(); 
    1082             foreach ($arrConnectionIDs as $zc_conn_id) 
    1083                 { 
    1084                 $objConnection = $this->GetConnection($zc_conn_id); 
    1085                 ?> 
    1086                 <option value="<?php echo $zc_conn_id?>" <?php if ($objField->zc_conn_id == $zc_conn_id) { echo('selected="selected"'); } ?> ><?php echo $objConnection->zc_conn_name?> (<?php echo $this->GetConnectionShorthand($zc_conn_id)?>)&nbsp;</option> 
    1087                 <?php 
    1088                 } 
    1089             ?> 
    1090             </select></td> 
    1091             </tr> 
    1092             <tr valign="top"> 
    1093             <th class="right" scope="row"><?php _e('Slug:', 'zigconnect')?></th> 
    1094             <td><input type="text" name="zc_field_name" id="zc_field_name" value="<?php echo $objField->zc_field_name?>"  /> <span class="description"><?php _e('Unique alphanumeric, will be converted to lower case', 'zigconnect')?></span></td> 
    1095             </tr> 
    1096             <tr valign="top"> 
    1097             <th class="right" scope="row"><?php _e('Name:', 'zigconnect')?></th> 
    1098             <td><input type="text" name="zc_field_prompt" id="zc_field_prompt" value="<?php echo $objField->zc_field_prompt?>"  /> <span class="description"><?php _e('Used as prompt on edit screens')?></span></td> 
    1099             </tr> 
    1100             <tr valign="top"> 
    1101             <th class="right" scope="row"><?php _e('Type:', 'zigconnect')?></th> 
    1102             <td><select name="zc_field_type"> 
    1103             <option value="">[<?php _e('please select', 'zigconnect')?>]&nbsp;</option> 
    1104             <?php 
    1105             foreach ($this->FieldTypes as $zc_field_type) 
    1106                 { 
    1107                 ?> 
    1108                 <option value="<?php echo $zc_field_type?>" <?php if ($objField->zc_field_type == $zc_field_type) { echo('selected="selected"'); } ?> ><?php echo ucwords(strtolower($zc_field_type))?>&nbsp;</option> 
    1109                 <?php 
    1110                 } 
    1111             ?> 
    1112             </select></td> 
    1113             </tr> 
    1114             <tr valign="top"> 
    1115             <th class="right" scope="row"><?php _e('Box size:', 'zigconnect')?></th> 
    1116             <td><input type="text" name="zc_field_size" id="zc_field_size" value="<?php echo $objField->zc_field_size?>"  /> <span class="description">As in &lt;input type=&quot;text&quot; size=&quot;n&quot;&gt; (if text)</span></td> 
    1117             </tr> 
    1118             <tr valign="top"> 
    1119             <th class="right" scope="row"><?php _e('Order:', 'zigconnect')?></th> 
    1120             <td><input type="text" name="zc_field_order" id="zc_field_order" value="<?php echo $objField->zc_field_order?>"  /> <span class="description">The order in which fields are shown in the metaboxes</span></td> 
    1121             </tr> 
    1122             </table> 
    1123             <p class="submit"><input type="submit" name="Submit" class="button-primary" value="<?php _e('Save Changes', 'zigconnect')?>" /></p>  
    1124             </form> 
    1125             </div><!--col-pad--> 
    1126             </div><!--wrap-left--> 
    1127             <div class="wrap-right"> 
    1128             <?php 
    1129             $this->DoAdminSidebar(); 
    1130             ?> 
    1131             </div><!--wrap-right--> 
    1132             <div class="clearer">&nbsp;</div> 
    1133             </div><!--/wrap--> 
    1134             <?php 
    1135             } 
    1136         else 
    1137             { 
    1138             ?> 
    1139             <div class="wrap zigconnect-admin"> 
    1140             <div id="icon-zigconnect" class="icon32"><br /></div> 
    1141             <h2>ZigConnect - <?php _e('Fields', 'zigconnect')?> <a href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu-fields&amp;zigaction=edit&amp;chk=-1" class="button add-new-h2"><?php _e('Add New Field', 'zigconnect')?></a></h2> 
    1142             <div class="wrap-left"> 
    1143             <div class="col-pad"> 
    1144             <?php 
    1145             $sql = "SELECT "; 
    1146             $sql .= $this->FieldTable . ".*, "; 
    1147             $sql .= $this->ConnTable . ".zc_conn_name "; 
    1148             $sql .= "FROM " . $this->FieldTable . " "; 
    1149             $sql .= "LEFT JOIN " . $this->ConnTable . " "; 
    1150             $sql .= "ON (" . $this->ConnTable . ".zc_conn_id=" . $this->FieldTable . ".zc_conn_id) "; 
    1151             $sql .= "ORDER BY " . $this->ConnTable . ".zc_conn_name ASC, zc_field_order ASC, zc_field_name ASC "; 
    1152             $result = $this->DB->get_results($sql); 
    1153             if ($result) 
    1154                 { 
    1155                 ?> 
    1156                 <form action="<?php echo $_SERVER['REQUEST_URI']?>" method="get"> 
    1157                 <input type="hidden" name="page" value="<?php echo $this->Params['page']?>" /> 
    1158                 <div class="tablenav"> 
    1159                 <div class="alignleft actions"> 
    1160                 <select name="zigaction"> 
    1161                 <option value="" selected="selected"><?php _e('Bulk Actions', 'zigconnect')?></option> 
    1162                 <option value="zigconnect-admin-fields-delete"><?php _e('Delete', 'zigconnect')?></option> 
    1163                 </select> 
    1164                 <input type="submit" value="<?php _e('Apply', 'zigconnect')?>" class="button-secondary apply" /> 
    1165                 </div><!--/actions--> 
    1166                 <br class="clear" /> 
    1167                 </div><!--/tablenav--> 
    1168                 <table class="widefat " cellspacing="0"> 
    1169                 <thead> 
    1170                 <tr> 
    1171                 <th class="check-column"><input type="checkbox" name="chkall" /></th> 
    1172                 <th><?php _e('ID', 'zigconnect')?></th> 
    1173                 <th><?php _e('Slug', 'zigconnect')?></th> 
    1174                 <th><?php _e('Name', 'zigconnect')?></th> 
    1175                 <th><?php _e('Type', 'zigconnect')?></th> 
    1176                 <th><?php _e('Connection', 'zigconnect')?></th> 
    1177                 <th><?php _e('Order', 'zigconnect')?></th> 
    1178                 <th><?php _e('Data Items', 'zigconnect')?></th> 
    1179                 </tr> 
    1180                 </thead> 
    1181                 <tfoot> 
    1182                 <tr> 
    1183                 <th class="check-column"><input type="checkbox" name="chkall" /></th> 
    1184                 <th><?php _e('ID', 'zigconnect')?></th> 
    1185                 <th><?php _e('Slug', 'zigconnect')?></th> 
    1186                 <th><?php _e('Name', 'zigconnect')?></th> 
    1187                 <th><?php _e('Type', 'zigconnect')?></th> 
    1188                 <th><?php _e('Connection', 'zigconnect')?></th> 
    1189                 <th><?php _e('Order', 'zigconnect')?></th> 
    1190                 <th><?php _e('Data Items', 'zigconnect')?></th> 
    1191                 </tr> 
    1192                 </tfoot> 
    1193                 <tbody> 
    1194                 <?php 
    1195                 foreach ($result as $row) 
    1196                     { 
    1197                     ?> 
    1198                     <tr> 
    1199                     <th nowrap="nowrap" class="check-column"><input type="checkbox" name="chk[<?php echo $row->zc_field_id?>] value="on" /></th> 
    1200                     <td><?php echo $row->zc_field_id?></td> 
    1201                     <td><a class="row-title" href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu-fields&amp;zigaction=edit&amp;chk=<?php echo $row->zc_field_id?>"><?php echo $row->zc_field_name?></a><div class="row-actions"> 
    1202                         <a href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu-fields&amp;zigaction=edit&amp;chk=<?php echo $row->zc_field_id?>"><?php _e('Edit', 'zigconnect')?></a>  
    1203                         | <a onclick="return confirm('<?php _e('Are you sure? Deleting a field cannot be undone!', 'zigconnect')?>')" href="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu-fields&amp;zigaction=zigconnect-admin-fields-delete&amp;chk=<?php echo $row->zc_field_id?>"><?php _e('Delete', 'zigconnect')?></a> 
    1204                     </div></td> 
    1205                     <td><?php echo $row->zc_field_prompt?></td> 
    1206                     <td><?php echo ucwords(strtolower($row->zc_field_type))?></td> 
    1207                     <td><?php echo $row->zc_conn_name?></td> 
    1208                     <td><?php echo $row->zc_field_order?></td> 
    1209                     <td><?php echo count($this->GetDataIDs(false, $row->zc_field_id))?></td> 
    1210                     </tr> 
    1211                     <?php 
    1212                     } 
    1213                 ?> 
    1214                 </tbody> 
    1215                 </table> 
    1216                 <div class="tablenav"> 
    1217                 <div class="alignleft actions"> 
    1218                 <select name="zigaction2"> 
    1219                 <option value="" selected="selected"><?php _e('Bulk Actions', 'zigconnect')?></option> 
    1220                 <option value="zigconnect-admin-fields-delete"><?php _e('Delete', 'zigconnect')?></option> 
    1221                 </select> 
    1222                 <input type="submit" value="<?php _e('Apply', 'zigconnect')?>" class="button-secondary apply" /> 
    1223                 </div><!--/actions--> 
    1224                 <br class="clear" /> 
    1225                 </div><!--/tablenav--> 
    1226                 </form> 
    1227                 <?php 
    1228                 } 
    1229             else 
    1230                 { 
    1231                 ?><p><?php _e('No fields found.', 'zigconnect')?></p><?php 
    1232                 } 
    1233             ?> 
    1234             <p><?php _e('Pull down this page\'s Help tab (top right) for assistance.', 'zigconnect')?></p> 
    1235             </div><!--col-pad--> 
    1236             </div><!--wrap-left--> 
    1237             <div class="wrap-right"> 
    1238             <?php 
    1239             $this->DoAdminSidebar(); 
    1240             ?> 
    1241             </div><!--wrap-right--> 
    1242             <div class="clearer">&nbsp;</div> 
    1243             </div><!--/wrap--> 
    1244             <?php 
    1245             } 
    1246         } 
    1247  
    1248  
    1249     public function DoAdminPageSettings() 
    1250         { 
    1251         if (!current_user_can('manage_options')) { wp_die(__('You are not allowed to do this.', 'zigconnect')); } 
    1252         if ($this->ResultType != '') echo $this->ShowResult($this->ResultType, $this->ResultMessage); 
    1253         ?> 
    1254         <div class="wrap zigconnect-admin"> 
    1255         <div id="icon-zigconnect" class="icon32"><br /></div> 
    1256         <h2>ZigConnect - <?php _e('Options', 'zigconnect')?></h2> 
    1257         <div class="wrap-left"> 
    1258         <div class="col-pad"> 
    1259         <p><?php _e('The options below allow you to uninstall cleanly if you need to. Use with care!', 'zigconnect')?></p> 
    1260         <form action="<?php echo $_SERVER['PHP_SELF']?>?page=zigconnect-menu-settings" method="post"> 
    1261         <input type="hidden" name="zigaction" value="zigconnect-admin-options-update" /> 
    1262         <?php wp_nonce_field('zigpress_nonce'); ?> 
    1263         <table class="form-table"> 
    1264         <tr valign="top"> 
    1265         <th scope="row" class="right">Fields per row on links:</th> 
    1266         <td><input name="FieldsPerRow" type="text" id="FieldsPerRow" value="<?php echo esc_attr($this->Options['FieldsPerRow']) ?>" class="small-text" /> <span class="description">Suggest between 3 and 6</span></td> 
    1267         </tr> 
    1268         <tr valign="top"> 
    1269         <th scope="row" class="right"><?php _e('Next deactivation removes:', 'zigconnect')?></th> 
    1270         <td><input class="checkbox" type="checkbox" name="DeleteOptionsNextDeactivate" id="DeleteOptionsNextDeactivate" value="1" <?php if ($this->Options['DeleteOptionsNextDeactivate'] == 1) { echo('checked="checked"'); } ?> /> <?php _e('Settings', 'zigconnect')?> &nbsp; &nbsp; <input class="checkbox" type="checkbox" name="DeleteTablesNextDeactivate" id="DeleteTablesNextDeactivate" value="1" <?php if ($this->Options['DeleteTablesNextDeactivate'] == 1) { echo('checked="checked"'); } ?> /> <?php _e('Tables', 'zigconnect')?></td> 
    1271         </tr> 
    1272         </table> 
    1273         <p class="submit"><input type="submit" name="Submit" class="button-primary" value="<?php _e('Save Changes', 'zigconnect')?>" /></p>  
    1274         </form> 
    1275         </div><!--col-pad--> 
    1276         </div><!--wrap-left--> 
    1277         <div class="wrap-right"> 
    1278         <?php 
    1279         $this->DoAdminSidebar(); 
    1280         ?> 
    1281         </div><!--wrap-right--> 
    1282         <div class="clearer">&nbsp;</div> 
    1283         </div><!--/wrap--> 
    1284         <?php 
    12851137        } 
    12861138 
    12871139 
    12881140    } # end of class 
     1141 
     1142 
     1143} else { 
     1144 
     1145    wp_die('Namespace clash! Class ZigConnect already exists.'); 
     1146 
     1147} 
    12891148 
    12901149 
     
    12981157 
    12991158# EOF 
    1300  
Note: See TracChangeset for help on using the changeset viewer.