Plugin Directory

Changeset 2584282


Ignore:
Timestamp:
08/17/2021 02:42:56 PM (5 years ago)
Author:
kylerboudreau
Message:

note: you must update Follow Hook Pro plugin before updating to version 3.0.0 of Free Follow Hook plugin.

Location:
follow-hook/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • follow-hook/trunk/follow-hook-settings.php

    r2311939 r2584282  
    99    //echo "Pro file is $fdir<br />";
    1010include "$fdir";
    11 }//end if pro_status is valid.
     11}else{
     12   
     13    //get the free plugin's dir:
     14    $pdir = WP_PLUGIN_DIR . '/follow-hook/';
     15    //echo "FH free is at $pdir<br />";
     16    $fdir = $pdir."toggle_MC_app.php";
     17    //echo "Pro file is $fdir<br />";
     18include "$fdir";   
     19}//end if/else pro_status is valid.
    1220?>
    1321
  • follow-hook/trunk/follow-hook.php

    r2536639 r2584282  
    44Plugin URI: https://followhook.com/
    55Description: A custom CRM plugin developed by Kyler Boudreau and Ian Lincicome.
    6 Version: 2.2.4
     6Version: 3.0.0
    77Author: Follow Hook
    88Author URI: https://followhook.com
     
    7171
    7272//VARIABLES THAT MUST BE SET FOR EA. New VERSION Released:
    73 define('Follow_Hook_Plugin_Version', '2.2.4');//Set to current version defined in top of this file
     73define('Follow_Hook_Plugin_Version', '3.0.0');//Set to current version defined in top of this file
    7474//moved code from here(lines 16-23 to follow-hook-pro.php
    7575//includes useful string functions like between, after, before, etc.:
     
    10541054    //custom fields link:
    10551055    add_submenu_page($menu_slug,'Custom Fields', 'Custom Fields',$capability, 'Follow_Hook_custom_fields_admin_pg', 'Follow_Hook_custom_fields_admin_pg');
    1056 
     1056    //MailChimp Admin link:
     1057    //check follow_hook_MC_toggle option value and nonly inlclude linke for MC if it is set to on in settings:
     1058    $MC_on_off_val = get_option("follow_hook_MC_toggle");
     1059    if($MC_on_off_val=="on"){
     1060    add_submenu_page($menu_slug,'Mailchimp', 'Mailchimp',$capability, 'mailchimp_admin_pg', 'mailchimp_admin_pg');
     1061    }//end if MC value set to on
    10571062        //add_submenu_page($menu_slug, 'Test Page 2', 'Test Page 2',$capability, 'testpg2','testpg2');//remove when not testing by commenting out!
    10581063}//end follow_hook_free_admin_menu function to build the cultivate menu in wp-admin for free plugin
     
    11091114}//end Follow_Hook_custom_fields_admin_pg functnion to create custom fields page in wp-admin
    11101115
    1111 
     1116function mailchimp_admin_pg(){
     1117    include 'mailchimp_admin_pg.php';
     1118}//end mailchimp_admin_pg function
    11121119
    11131120//CF7 integration with Follow-Hook:
     
    14911498    $wpdb->query("ALTER TABLE $table_name4 ADD notes VARCHAR(999) DEFAULT NULL");
    14921499    }
     1500//update options upon activation:
     1501update_option('remove_from_Mailchimp', 'yes');
    14931502}//end follow_hook_activation_tasks function
    14941503//call follow_hook_activation_tasks function when plugin is activated by admin:
     
    15141523register_deactivation_hook(__FILE__, 'follow_hook_plugin_uninstall');
    15151524//######################################################################
     1525
     1526
     1527///////////////////////////////////////////////////////////////////////////
     1528////////////////people_tag_update function to replace code needed from pro's persons_pod_update function/////////////////////////////////////////////////
     1529//////////////////////////////////////////////////////////////////////////////
     1530//added this function when moved MC from pro to free version of FH to
     1531//add_action('set_object_terms','persons_pod_update',10,6);
     1532//and changed the name pf persons_pod_update to people_tag_update:
     1533add_action('set_object_terms','people_tag_update',10,6);
     1534
     1535function people_tag_update($object_id, $terms, $tt_ids, $taxonomy, $append, $old_tt_ids){
     1536    $post_type = get_post_type($object_id);
     1537    if($post_type == 'people'){
     1538    Follow_Hook_log_debug("=============people_tag_update function started==================\n");
     1539    //Added terms are specified terms, that did not already exist
     1540    $added_tt_ids = array_diff($tt_ids, $old_tt_ids);
     1541    if($append){
     1542        //If appending terms - nothing was removed
     1543        $removed_tt_ids = array();
     1544    }else{
     1545        //Removed terms will be old terms, that were not specified in $tt_ids
     1546        $removed_tt_ids = array_diff($old_tt_ids, $tt_ids);
     1547    }
     1548    //we know the person's id is stored in $object_id, so get person's name from the $object_id var:
     1549    $fname = get_post_meta($object_id, "_firstname", true);
     1550    $lname = get_post_meta($object_id, "_lastname", true);
     1551    //get person's email:
     1552    $email = get_post_meta($object_id, "_email", true);
     1553    //get person's mobile ph. no:
     1554    $mobile_ph = get_post_meta($object_id, "_pph", true);
     1555    //get person's address info next from address tab:
     1556    $addy1 = get_post_meta($object_id, "_addy1", true);
     1557    $addy2 = get_post_meta($object_id, "_addy2", true);
     1558    $addy_city = get_post_meta($object_id, "_city", true);
     1559    $addy_state = get_post_meta($object_id, "_state", true);
     1560    $addy_zip = get_post_meta($object_id, "_zip", true);
     1561    $addy_country = get_post_meta($object_id, "_country", true);
     1562    //at this point if fname, lname and email are left blank, then it's probably a new user, so get those values from the post array:
     1563    if(isset($_POST)){//only do it if $_POST array is set:
     1564    if(isset($_POST['_email']) && $email=='')$email = $_POST['_email'];
     1565    if(isset($_POST['_firstname']) && $fname=='')$fname = $_POST['_firstname'];
     1566    if(isset($_POST['_lastname']) && $lname=='')$lname = $_POST['_lastname'];
     1567    if(isset($_POST['_pph']) && $mobile_ph=='')$mobile_ph = $_POST['_pph'];
     1568    if(isset($_POST['_addy1']) && $addy1=='')$addy1 = $_POST['_addy1'];
     1569    if(isset($_POST['_addy2']) && $addy2=='')$addy2 = $_POST['_addy2'];
     1570    if(isset($_POST['_city']) && $addy_city=='')$addy_city = $_POST['_city'];
     1571    if(isset($_POST['_state']) && $addy_state=='')$addy_state = $_POST['_state'];
     1572    if(isset($_POST['_zip']) && $addy_zip=='')$addy_zip = $_POST['_zip'];
     1573    if(isset($_POST['_country']) && $addy_country=='')$addy_country = $_POST['_country'];
     1574    }//end if $_POST is set
     1575    //Get all pods and devide them between the removed_terms and added_terms arrays accordingly:
     1576    $all_terms = get_terms( $taxonomy, array('hide_empty'=>0));
     1577    $removed_terms =array();
     1578    $added_terms =array();
     1579    foreach($all_terms as $term){
     1580        $tt_id = (int) $term->term_taxonomy_id;
     1581        if(in_array($tt_id, $removed_tt_ids)){
     1582            $removed_terms[] = $term;
     1583            //Follow_Hook_log_debug("***Added pod with id of $tt_id to the removed_terms array!\n\n");
     1584        }elseif(in_array($tt_id, $added_tt_ids)){
     1585            $added_terms[] = $term;
     1586        }
     1587    }//end foreach term.
     1588    //$added_terms contains added term objects
     1589    //$removed_terms contains removed term objects
     1590    //see if any pods were added or removed:
     1591    $noof_added = count($added_terms);
     1592    $noof_removed = count($removed_terms);
     1593    //Follow_Hook_log_debug("$noof_added pods were added.\n$noof_removed pods were removed.\n\n");
     1594    //get saved MailChimp api key:
     1595    $mcAPIkey = get_option('cultivate_mc_api_key');
     1596    //get saved MailChimp audience id:
     1597    $mcListID = get_option('cultivate_mc_list_id');
     1598    //if noof_added pods is more than zero, get the name of the added pods:
     1599    if($noof_added > 0){
     1600        //loop over every pod added and process it accordingly:
     1601        foreach($added_terms as $pod_obj){
     1602            $podName = $pod_obj->name;
     1603            $podID = $pod_obj->term_id;
     1604            Follow_Hook_log_debug("Group named $podName with id $podID was added to person $object_id.\n");
     1605            //now find out if the current pod is set to handle MC data or not:
     1606            $MC_yes_no = get_option("pod_add_to_MC_list_$podID");
     1607            //Follow_Hook_log_debug("Is pod $podName set up to add people to MC? $MC_yes_no\n\n");
     1608            if($MC_yes_no == 'yes'){
     1609            //now get groups saved to this pod if any:
     1610            $saved_grps = get_option("pod_groups_csv_$podID");//will be csv string of group ids saved to this pod
     1611            $saved_grps=unserialize($saved_grps);//makes it a regular array of checked/saved groups
     1612            //echo data to log for debugging:
     1613            $gs = '(group ids: ';
     1614            foreach($saved_grps as $g){//iterate over group ids in the saved_grps array:
     1615                $gs .= $g." ,";
     1616                //now we have a name, email and grp id, so use the data to add person to the group in Mailchimp:
     1617//############################### Start Mailchimp Code: #########################################
     1618                //Follow_Hook_log_debug("MailChimp Data from people_tag_update function: id: $oject_id, Name and email: $fname $lname $email\n");
     1619                /* Uncomment to see post variables in the log file:
     1620                foreach($_POST as $key => $value) {
     1621                    Follow_Hook_log_debug("Post key - val: $key - $value\n");
     1622                }
     1623                */
     1624                if(!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL) === false){
     1625                    $mergeTAG = MC_addy_merge_field($email);//MC_addy_merge_field.php-gets merge field name addresses are stored in from MC
     1626//Follow_Hook_log_debug("people_tag_update function called MC_addy_merge_field function and got: $mergeTAG for mergetag name\n");
     1627/////////////////////////// start mailchimp API query to write data to MC////////////////////////////
     1628                // MailChimp API URL
     1629                $memberID = md5(strtolower($email));
     1630                $dataCenter = substr($mcAPIkey,strpos($mcAPIkey,'-')+1);
     1631                $url = 'https://' . $dataCenter . '.api.mailchimp.com/3.0/lists/' . $mcListID . '/members/' . $memberID;
     1632
     1633                // member information
     1634                $json = json_encode([
     1635                    'email_address' => $email,
     1636                    'status'        => 'subscribed',
     1637                    'merge_fields'  => [
     1638                        'FNAME'     => $fname,
     1639                        'LNAME'     => $lname,
     1640                        $mergeTAG   => array(
     1641                            "addr1"=>$addy1,
     1642                            "addr2"=>$addy2,
     1643                            "city"=>$addy_city,
     1644                            "state"=>$addy_state,
     1645                            "zip"=>$addy_zip,
     1646                            "country"=>$addy_country
     1647                        )
     1648                    ],
     1649                    'interests' => array(
     1650                $g => true // add interest to $g group
     1651                //'addb894b0d' => false // remove interest from "Team Site Owners" group
     1652                ),
     1653                ]);
     1654                // store the status message based on response code
     1655                $response = mailchimp_request($mcAPIkey,$url,'PUT',$json);
     1656                $httpcode = $response['code'];
     1657            //  Follow_Hook_log_debug("http code: $httpcode\n");
     1658                /* Uncomment to see values for mailchimp_request function in log file:*/
     1659                foreach($response as $key => $value) {
     1660                    Follow_Hook_log_debug("Response key - val: $key - $value\n");
     1661                }
     1662
     1663                if ($httpcode == 200) {//if no error occurred:
     1664                //  Follow_Hook_log_debug("$fname successfully subscribed to the MC list for Follow Hook!\n");
     1665                } else {//else an error occurred:
     1666                    switch ($httpcode) {
     1667                    case 214:
     1668                        Follow_Hook_log_debug("Oops! $fname $lname is already subscribed.\n");
     1669                        break;
     1670                    default:
     1671                        Follow_Hook_log_debug("Some problem occurred with MailChimp API, switch statement returned httpcode of $httpcode please try again.\n");
     1672                        break;
     1673                    }
     1674                }//end else an error occurred
     1675                }else{//else the email address wasn't valid:
     1676                Follow_Hook_log_debug("Oops! Email address was not valid. Please enter valid email address.\n");
     1677                }//end else email not valid
     1678
     1679            }//end for ea. group in saved_grps array.
     1680        $gs .= ")";
     1681        Follow_Hook_log_debug("Adding person to MC groups:\n$fname $lname $gs Email: $email\n\n");
     1682        //done printing debug data to log file.
     1683            }//end if $MC_yes_no is set to yes
     1684//############################### End Mailchimp Code #########################################
     1685
     1686        }//end foreach added pod.
     1687    }//end if noof_added is greater than zero
     1688
     1689    //if noof_removed is greater than zero, process pods removed:
     1690    if($noof_removed > 0){
     1691        //get mailchimp admin option named "remove_from_mailchimp":
     1692        $remove_from_mc = get_option("remove_from_mailchimp");
     1693        //Interate over Ea. Pod:
     1694        foreach($removed_terms as $pods_obj){
     1695            $podName = $pods_obj->name;
     1696            $podID = $pods_obj->term_id;
     1697            //Follow_Hook_log_debug("\nRemoving pod $podName pod id $podID from person id $object_id\n\n");
     1698           
     1699            //check and see if we need to remove this person from a MailChimp group or not:
     1700            if($remove_from_mc=='yes'){//if we are removing from Mailchimp:
     1701                //Follow_Hook_log_debug("remove_from_mailchimp option set to yes, so attempting to remove people from MC group next.\n");
     1702                //get the saved MailChimp groups for current pod:
     1703                $saved_grps = get_option("pod_groups_csv_$podID");//will be csv string of group ids saved to this pod
     1704                $saved_grps=unserialize($saved_grps);//makes it a regular array of checked/saved groups
     1705                //we know the person's id is stored in $object_id, so get person's name from the $object_id var:
     1706                //the vars of $fname, $lname and $email were moved to top of function above foreach loops.
     1707                foreach($saved_grps as $g){//iterate over group ids in the saved_grps array:
     1708                    $gs .= $g." ,";
     1709                    //now we have a name, email and grp id, so use the data to remove person from the group in Mailchimp:
     1710                    //Follow_Hook_log_debug("MailChimp Removal Data from people_tag_update function: id: $oject_id, Name and email: $fname $lname $email\n");
     1711                    if(!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL) === false){
     1712                        //Follow_Hook_log_debug("Removing $email from MailChimp group...\n");
     1713                        /////////////////////////////start mailchimp code to remove from grp//////////////////////////////
     1714                        //Set up MailChimp API URL:
     1715                        $memberID = md5(strtolower($email));
     1716                        $dataCenter = substr($mcAPIkey,strpos($mcAPIkey,'-')+1);
     1717                        $url = 'https://' . $dataCenter . '.api.mailchimp.com/3.0/lists/' . $mcListID . '/members/' . $memberID;
     1718                        // member information
     1719                        $json = json_encode([
     1720                            'email_address' => $email,
     1721                            'status'        => 'subscribed',
     1722                            'merge_fields'  => [
     1723                                'FNAME'     => $fname,
     1724                                'LNAME'     => $lname
     1725                            ],
     1726                            'interests' => array(
     1727                            $g => false // removes interest to $g group
     1728                            //'addb894b0d' => false // remove interest from "Team Site Owners" group
     1729                            ),
     1730                        ]);
     1731                        // store the status message based on response code
     1732                        $response = mailchimp_request($mcAPIkey,$url,'PUT',$json);
     1733                        $httpcode = $response['code'];
     1734                        //Follow_Hook_log_debug("http status code from MC api: $httpcode\n");
     1735                        ////////////////////////////end mailchimp code to remove from grp//////////////////////
     1736                    }else{//else the email address wasn't valid:
     1737                        //Follow_Hook_log_debug("Oops! people_tag_update function reports: Email address was not valid. Cannot delete user from MailChimp without a valid email!\n");
     1738                    }//end else email not valid
     1739                }//end for ea. group
     1740                $gs .= ")";
     1741                //Follow_Hook_log_debug("people_tag_update function is Removing person from MC groups:\n$fname $lname $gs Email: $email\n\n");
     1742            }else{
     1743                //Follow_Hook_log_debug("people_tag_update reports: remove_from_mailchimp option was set to NO, so noone was removed from MailChimp groups!\n");
     1744            }//end if/else remove_from_mc is yes
     1745
     1746        }//end foreach pod removed.
     1747    }//end if no. of removed pods is more than zero.
     1748    }//end if post type is people
     1749    Follow_Hook_log_debug("====================End people_tag_update function===========\n", "PB.log");
     1750}//end people_tag_update function
     1751
     1752
     1753///////////////////////////////////////////////////////////////////////////
     1754/////////////////////////end people_tag_update function////////////////////
     1755//////////////////////////////////////////////////////////////////////////
     1756//include a function named MC_addy_merge_field that is for getting the field name that the addresses are stored in MailChimp accounts:
     1757include 'MC_addy_merge_field.php';
     1758
    15161759
    15171760
     
    15961839    //store the time the function is being ran:
    15971840    //store time in time.txt:
    1598     $fh = fopen($tFile, 'w') or die("can't open time.txt file to append, Please make sure your follow-hook folder and all files are owned by the www user(user www-data usually). To change ownership you have to access your server command line and issue the command: 'chown -R www-data:www-data cutivate-crm' while you are in the wp-content/plugins directory(cd /var/www/yoursite.com/public_html/wp-content/plugins).  If problem persists, email developer, Ian L. at linian11@yahoo.com");
     1841    $fh = fopen($tFile, 'w') or die("can't open time.txt file to append, Please make sure your follow-hook folder and all files are owned by the www user(user www-data usually). To change ownership you have to access your server command line and issue the command: 'chown -R www-data:www-data follow-hook' while you are in the wp-content/plugins directory(cd /var/www/yoursite.com/public_html/wp-content/plugins).  If problem persists, email developer, Ian L. at linian11@yahoo.com");
    15991842    fwrite($fh, $dtf);
    16001843    fclose($fh);
     
    16261869    $pdir = plugin_dir_path( __FILE__ );//gets the directory of current file with trailing slash whether inside plugin or not!
    16271870    $myFile = $pdir.$filename;
    1628     $fh2 = fopen($myFile, 'a') or die("can't open log file to append, Please make sure your follow-hook folder and all files are owned by the www user(user www-data usually). To change ownership you have to access your server command line and issue the command: 'chown -R www-data:www-data cutivate-crm' while you are in the wp-content/plugins directory(cd /var/www/yoursite.com/public_html/wp-content/plugins).  If problem persists, email developer, Ian L. at linian11@yahoo.com");
     1871    $fh2 = fopen($myFile, 'a') or die("can't open log file to append, Please make sure your follow-hook folder and all files are owned by the www user(user www-data usually). To change ownership you have to access your server command line and issue the command: 'chown -R www-data:www-data follow-hook' while you are in the wp-content/plugins directory(cd /var/www/yoursite.com/public_html/wp-content/plugins).  If problem persists, email developer, Ian L. at linian11@yahoo.com");
    16291872    fwrite($fh2, $log);
    16301873    fclose($fh2);
     
    23152558<?php }
    23162559add_action( 'admin_enqueue_scripts', 'wptutsplus_post_listing_column_resize' );
     2560
     2561//moved from pro:
     2562include 'MC_sync_function.php';
     2563
     2564//added code to work with the "follow_hook_admin_settings_tab" action hook I created in the free Follow Hook plugin to add content to settings page(moved from pro function named follow_hook_add_to_settings_tab):
     2565function follow_hook_add_to_free_settings_tab(){
     2566    include 'Third_Party_Sync.php';
     2567}
     2568add_action('follow_hook_admin_settings_tab', 'follow_hook_add_to_free_settings_tab', 7);
     2569
     2570
     2571//moved from around line 1837 of follow-hook-pro.php:
     2572function fetch_mailchimp_groups_from_API(){
     2573    //MailChimp code to get groups(known to the API as interests)
     2574$err = '';
     2575//get saved MailChimp api key:
     2576$api_key = get_option('cultivate_mc_api_key');
     2577//get saved MailChimp audience id:
     2578$list_id = get_option('cultivate_mc_list_id');
     2579$dc = substr( $api_key, strpos( $api_key, '-' ) + 1 ); // datacenter, it is the part of your api key - us5, us8 etc
     2580$args = array(
     2581    'headers' => array(
     2582        'Authorization' => 'Basic ' . base64_encode( 'user:'. $api_key )
     2583    )
     2584);
     2585
     2586$response = wp_remote_get( 'https://'.$dc.'.api.mailchimp.com/3.0/lists/'.$list_id . '/interest-categories', $args );
     2587$body = json_decode(wp_remote_retrieve_body($response));
     2588
     2589if(wp_remote_retrieve_response_code($response) == 200 && $body->total_items > 0) {
     2590    foreach($body->categories as $group) :
     2591
     2592        //skip hidden interests:
     2593        if($group->type == 'hidden')
     2594            continue;
     2595
     2596        //connect to API to get interests from each category:
     2597        $response = wp_remote_get('https://'.$dc.'.api.mailchimp.com/3.0/lists/'.$list_id . '/interest-categories/' . $group->id . '/interests', $args);
     2598        $body = json_decode(wp_remote_retrieve_body($response));
     2599
     2600        if(wp_remote_retrieve_response_code($response) == 200 && $body->total_items > 0){
     2601
     2602                    foreach($body->interests as $interest){
     2603                        $grpsName = $interest->name;
     2604                        $grpsID = $interest->id;
     2605                        //make a grpArray with id as key and name as value:
     2606                        $grpArray[$grpsID] = $grpsName;
     2607                    }
     2608
     2609        } else {
     2610            $err .= '<b>' . wp_remote_retrieve_response_code($response) . wp_remote_retrieve_response_message($response) . ':</b> ' . $body->detail;
     2611        }
     2612
     2613    endforeach;
     2614} else {
     2615    $err .= '<b>' . wp_remote_retrieve_response_code($response) . wp_remote_retrieve_response_message( $response ) . ':</b> ' . $body->detail;
     2616}
     2617//if($err != '')echo "<p style='color:red'>MailChimp Error! $err</p>";
     2618//now we have a $grpArray with id as key and names as values!
     2619return $grpArray;
     2620}//end fetch_mailchimp_groups_from_API function
     2621
     2622
     2623
     2624//moved following MC function from pro main file:
     2625/* mailchimp_request PHP function Params:
     2626$mcAPIkey = API key for MailChimp
     2627$url      = The
     2628$req_type = Used to set http type for CURL and can be either GET, PUT or POST, etc.
     2629$json     = is a json string containing post requests(see example below):
     2630        $json = json_encode([
     2631            'email_address' => $email,
     2632            'status'        => 'subscribed',
     2633            'merge_fields'  => [
     2634                'FNAME'     => $fname,
     2635                'LNAME'     => $lname
     2636            ],
     2637            'interests' => array(
     2638            '443dd64dcc' => true, // add interest to "Everyone" group
     2639            'addb894b0d' => false // remove interest from "Team Site Owners" group
     2640            ),
     2641        ]);
     2642
     2643*/
     2644function mailchimp_request($mcAPIkey,$url,$req_type,$json=''){
     2645
     2646        // send a HTTP POST, GET or PUT request with curl:
     2647        $ch = curl_init($url);
     2648        curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $mcAPIkey);
     2649        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
     2650        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     2651        curl_setopt($ch, CURLOPT_TIMEOUT, 100);
     2652        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $req_type);//GET, PUT, POST
     2653        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
     2654        if($req_type!="GET")curl_setopt($ch, CURLOPT_POSTFIELDS, $json);//not needed for GET requests
     2655        $result = curl_exec($ch);
     2656        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
     2657        curl_close($ch);
     2658       // echo "http code: $httpCode<br />";
     2659
     2660        $body = json_decode($result);
     2661        //echo "successfully got list for Follow Hook!<br />result:<hr />$result<hr />";
     2662        $results['code'] = $httpCode ;
     2663        $results['result'] = $result;
     2664        // store the status message based on response code
     2665        if ($httpCode == 200) {//if no error occurred:
     2666            return $results;
     2667        } else {//else an error occurred:
     2668            return false;
     2669        }//end else an error occurred
     2670}//end mailchimp_request PHP function by Ian L. of Jafty.com
     2671
     2672
    23172673?>
  • follow-hook/trunk/license.txt

    r2426161 r2584282  
    11Follow Hook - WordPress Plugin
    22
    3 Copyright 2011-2020 by Follow Hook
     3Copyright 2011-2021 by Follow Hook
    44
    55This program is free software; you can redistribute it and/or modify
     
    2222  Follow Hook - WordPress plugin
    2323
    24   Copyright 2011-2019 by Follow Hook
     24  Copyright 2011-2021 by Follow Hook
    2525
    2626  Follow Hook is released under the GPL
  • follow-hook/trunk/readme.txt

    r2536639 r2584282  
    44Plugin Name:  Follow Hook CRM
    55Plugin URI: https://followhook.com/
     6<<<<<<< .mine
     7Tags: CRM, Contact Management, Mailchimp, ConvertKit, Contact Form 7, Project Broadcast
     8||||||| .r2318605
     9Tags: CRM, Contact Management, ConvertKit, Mailchimp, Email Marketing, Text Marketing, Project Broadcast
     10=======
    611Tags: CRM, Contact Management, ConvertKit, Mailchimp, Contact Form 7, Project Broadcast, Email Marketing, Text Marketing
     12>>>>>>> .r2584261
    713Author URI: https://followhook.com/
     14<<<<<<< .mine
     15Author:  Follow Hook
     16Requires at least: 5.1.0
     17Tested up to: 5.8.0
     18||||||| .r2318605
     19Author:  Kyler Boudreau and Ian Lincicome of Follow Hook
     20Requires at least: 5.0
     21Tested up to: 5.4
     22=======
    823Author:  Follow Hook
    924Requires at least: 5.1.0
    1025Tested up to: 5.7.2
     26>>>>>>> .r2584261
    1127Stable tag: trunk
     28<<<<<<< .mine
     29Version:   3.0.0
     30Requires PHP: 7.2
     31||||||| .r2318605
     32Version:   2.0.1
     33Requires PHP: 7.1
     34=======
    1235Version:   2.2.4
    1336Requires PHP: 7.2
     37>>>>>>> .r2584261
    1438License URI: https://followhook.com/downloads/follow-hook/
    1539
     40<<<<<<< .mine
     41A simple, powerful CRM built to stay in touch with customers and prospects.
     42||||||| .r2318605
     43The most flexible CRM for WordPress! Store contact data with custom fields. Organize with groups. Link to Contact Form 7 opt-in forms and automate with touchpoints!
     44=======
    1645A simple, powerful CRM. Organize with groups & tags. Link forms to the CRM. Add custom fields and more!
     46>>>>>>> .r2584261
    1747
    1848== Description ==
    1949Follow Hook is a CRM all about people.
    2050
     51<<<<<<< .mine
     52No sales predictions or tracking quotes. Follow Hook is designed to automate communications with potential and existing customers. It's ideal for direct sales, network marketing and other people-based companies focused on fostering loyal customers vs tracking revenue.
     53||||||| .r2318605
     54It's not designed to make sales predictions or track quotes. Follow Hook is a WordPress CRM designed to automate communications with potential and existing customers. It's ideal for direct sales, network marketing and other people-based companies focused on fostering loyal customers vs tracking revenue.
     55=======
    2156No sales predictions or tracking quotes. Follow Hook is a CRM designed to automate communications with potential and existing customers. It's ideal for direct sales, network marketing and other people-based companies focused on fostering loyal customers vs tracking revenue.
     57>>>>>>> .r2584261
     58
     59Organize your people with groups & tags. Link Contact Form 7 forms to your CRM. Sync Follow Hook groups with Mailchimp. Add custom fields and more!
    2260
    2361**FOLLOW HOOK FEATURES**
    2462
    2563* Add custom fields to support your niche customer base
     64<<<<<<< .mine
     65* Organize contacts with Groups & Tags
     66* Sync Follow Hook Groups with Mailchimp
     67||||||| .r2318605
     68* Manage contacts with Groups & Touchpoints
     69=======
    2670* Manage contacts with Groups & Tags
     71>>>>>>> .r2584261
    2772* Create to-do items and assign them to team members
    2873* Record customer history
     
    3883* Follow Hook Campaigns for sophisticated automation
    3984* ConvertKit Sync which syncs Follow Hook Groups with ConvertKit Tags
    40 * Mailchimp Sync which syncs Follow Hook Groups with MailChimp Groups
     85* Mailchimp Sync is included in Follow Hook Free
    4186* Project Broadcast Sync for text marketing automation
    42 * CSV Import and Export of people
     87* CSV Export of people
    4388* Access to our private support forum!
    4489* Access to [Follow Hook University](https://followhook.com/university/) for online training
     
    57102Installing Follow Hook is easy!
    58103
    59 1. From the WordPress dashboard navigate to Plugins > Add New.
    60 2. Click 'Upload' and then “Choose File.”
    61 3. Select the Follow Hook zipped file you downloaded.
    62 4. After upload, click 'Activate.'
     1041. First you must update the PRO version of FollowHook if you use that, otherwise continue to step 2.
     1052. From the WordPress dashboard navigate to Plugins > Add New.
     1063. Click 'Upload' and then “Choose File.”
     1074. Select the Follow Hook zipped file you downloaded.
     1085. After upload, click 'Activate.'
    63109
    64110For general CRM documentation, please visit [Follow Hook University](https://followhook.com/university/).
     
    931391. Follow Hook Dashboard
    941402. Edit Person
    95 3. Add and Edit Tags
     1413. Add and Edit Groups
    961424. Add New Touchpoint
    971435. Assign Contact 7 Form Fields
    981446. Add Custom Fields
     1457. Enter Mailchimp API & Audience
    99146
    100147== Changelog ==
    101148* Version 1.0.0 is the first version developed as the free version of Follow Hook to be released free of charge on wordpress.org.
     149<<<<<<< .mine
    102150* Version 1.1.0 has all of the bugs found to-date fixed.
    103151* Version 1.2.0 converted Follow Hook Tags into Follow Hook Groups
     
    111159* Version 2.2.2 major overhaul of admin interface.
    112160* Version 2.2.4 misc bug fixes.
     161* Version 3.0.0 Major new release that now includes MailChimp without having to use PRO.
     162||||||| .r2318605
     163* Version 1.0.2 has all of the bugs found to-date fixed.
     164* Version 1.0.3 converted Follow Hook Tags into Follow Hook Groups
     165* Version 1.0.4 fixes a hard-coded URL by replacing it with it's dynamic counter-part.
     166* Version 1.2.0 includes code that works in tandem with V1.4.1 of the Pro add-on.
     167=======
     168* Version 1.1.0 has all of the bugs found to-date fixed.
     169* Version 1.2.0 converted Follow Hook Tags into Follow Hook Groups
     170* Version 1.3.0 fixes a hard-coded URL by replacing it with it's dynamic counter-part.
     171* Version 1.4.0 includes code that works in tandem with V1.4.1 of the Pro add-on.
     172* Version 1.5.0 includes fix for Contact Form 7 submissions.
     173* Version 1.6.0 added sort features for locating contacts based on group.
     174* Version 1.7.0 added tags.
     175* Version 2.0.0 small tweaks.
     176* Version 2.2.1 added ability to sort by tag.
     177* Version 2.2.2 major overhaul of admin interface.
     178* Version 2.2.4 misc bug fixes.
     179>>>>>>> .r2584261
  • follow-hook/trunk/time.txt

    r2536639 r2584282  
    1 2021-05-24 18:35:54
     12021-06-06 15:36:42||||||| .r2311931
Note: See TracChangeset for help on using the changeset viewer.