Changeset 2584282
- Timestamp:
- 08/17/2021 02:42:56 PM (5 years ago)
- Location:
- follow-hook/trunk
- Files:
-
- 5 edited
-
follow-hook-settings.php (modified) (1 diff)
-
follow-hook.php (modified) (9 diffs)
-
license.txt (modified) (2 diffs)
-
readme.txt (modified) (5 diffs)
-
time.txt (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
follow-hook/trunk/follow-hook-settings.php
r2311939 r2584282 9 9 //echo "Pro file is $fdir<br />"; 10 10 include "$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 />"; 18 include "$fdir"; 19 }//end if/else pro_status is valid. 12 20 ?> 13 21 -
follow-hook/trunk/follow-hook.php
r2536639 r2584282 4 4 Plugin URI: https://followhook.com/ 5 5 Description: A custom CRM plugin developed by Kyler Boudreau and Ian Lincicome. 6 Version: 2.2.46 Version: 3.0.0 7 7 Author: Follow Hook 8 8 Author URI: https://followhook.com … … 71 71 72 72 //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 file73 define('Follow_Hook_Plugin_Version', '3.0.0');//Set to current version defined in top of this file 74 74 //moved code from here(lines 16-23 to follow-hook-pro.php 75 75 //includes useful string functions like between, after, before, etc.: … … 1054 1054 //custom fields link: 1055 1055 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 1057 1062 //add_submenu_page($menu_slug, 'Test Page 2', 'Test Page 2',$capability, 'testpg2','testpg2');//remove when not testing by commenting out! 1058 1063 }//end follow_hook_free_admin_menu function to build the cultivate menu in wp-admin for free plugin … … 1109 1114 }//end Follow_Hook_custom_fields_admin_pg functnion to create custom fields page in wp-admin 1110 1115 1111 1116 function mailchimp_admin_pg(){ 1117 include 'mailchimp_admin_pg.php'; 1118 }//end mailchimp_admin_pg function 1112 1119 1113 1120 //CF7 integration with Follow-Hook: … … 1491 1498 $wpdb->query("ALTER TABLE $table_name4 ADD notes VARCHAR(999) DEFAULT NULL"); 1492 1499 } 1500 //update options upon activation: 1501 update_option('remove_from_Mailchimp', 'yes'); 1493 1502 }//end follow_hook_activation_tasks function 1494 1503 //call follow_hook_activation_tasks function when plugin is activated by admin: … … 1514 1523 register_deactivation_hook(__FILE__, 'follow_hook_plugin_uninstall'); 1515 1524 //###################################################################### 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: 1533 add_action('set_object_terms','people_tag_update',10,6); 1534 1535 function 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: 1757 include 'MC_addy_merge_field.php'; 1758 1516 1759 1517 1760 … … 1596 1839 //store the time the function is being ran: 1597 1840 //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"); 1599 1842 fwrite($fh, $dtf); 1600 1843 fclose($fh); … … 1626 1869 $pdir = plugin_dir_path( __FILE__ );//gets the directory of current file with trailing slash whether inside plugin or not! 1627 1870 $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"); 1629 1872 fwrite($fh2, $log); 1630 1873 fclose($fh2); … … 2315 2558 <?php } 2316 2559 add_action( 'admin_enqueue_scripts', 'wptutsplus_post_listing_column_resize' ); 2560 2561 //moved from pro: 2562 include '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): 2565 function follow_hook_add_to_free_settings_tab(){ 2566 include 'Third_Party_Sync.php'; 2567 } 2568 add_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: 2572 function 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 2589 if(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! 2619 return $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 */ 2644 function 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 2317 2673 ?> -
follow-hook/trunk/license.txt
r2426161 r2584282 1 1 Follow Hook - WordPress Plugin 2 2 3 Copyright 2011-202 0by Follow Hook3 Copyright 2011-2021 by Follow Hook 4 4 5 5 This program is free software; you can redistribute it and/or modify … … 22 22 Follow Hook - WordPress plugin 23 23 24 Copyright 2011-20 19by Follow Hook24 Copyright 2011-2021 by Follow Hook 25 25 26 26 Follow Hook is released under the GPL -
follow-hook/trunk/readme.txt
r2536639 r2584282 4 4 Plugin Name: Follow Hook CRM 5 5 Plugin URI: https://followhook.com/ 6 <<<<<<< .mine 7 Tags: CRM, Contact Management, Mailchimp, ConvertKit, Contact Form 7, Project Broadcast 8 ||||||| .r2318605 9 Tags: CRM, Contact Management, ConvertKit, Mailchimp, Email Marketing, Text Marketing, Project Broadcast 10 ======= 6 11 Tags: CRM, Contact Management, ConvertKit, Mailchimp, Contact Form 7, Project Broadcast, Email Marketing, Text Marketing 12 >>>>>>> .r2584261 7 13 Author URI: https://followhook.com/ 14 <<<<<<< .mine 15 Author: Follow Hook 16 Requires at least: 5.1.0 17 Tested up to: 5.8.0 18 ||||||| .r2318605 19 Author: Kyler Boudreau and Ian Lincicome of Follow Hook 20 Requires at least: 5.0 21 Tested up to: 5.4 22 ======= 8 23 Author: Follow Hook 9 24 Requires at least: 5.1.0 10 25 Tested up to: 5.7.2 26 >>>>>>> .r2584261 11 27 Stable tag: trunk 28 <<<<<<< .mine 29 Version: 3.0.0 30 Requires PHP: 7.2 31 ||||||| .r2318605 32 Version: 2.0.1 33 Requires PHP: 7.1 34 ======= 12 35 Version: 2.2.4 13 36 Requires PHP: 7.2 37 >>>>>>> .r2584261 14 38 License URI: https://followhook.com/downloads/follow-hook/ 15 39 40 <<<<<<< .mine 41 A simple, powerful CRM built to stay in touch with customers and prospects. 42 ||||||| .r2318605 43 The 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 ======= 16 45 A simple, powerful CRM. Organize with groups & tags. Link forms to the CRM. Add custom fields and more! 46 >>>>>>> .r2584261 17 47 18 48 == Description == 19 49 Follow Hook is a CRM all about people. 20 50 51 <<<<<<< .mine 52 No 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 54 It'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 ======= 21 56 No 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 59 Organize your people with groups & tags. Link Contact Form 7 forms to your CRM. Sync Follow Hook groups with Mailchimp. Add custom fields and more! 22 60 23 61 **FOLLOW HOOK FEATURES** 24 62 25 63 * 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 ======= 26 70 * Manage contacts with Groups & Tags 71 >>>>>>> .r2584261 27 72 * Create to-do items and assign them to team members 28 73 * Record customer history … … 38 83 * Follow Hook Campaigns for sophisticated automation 39 84 * ConvertKit Sync which syncs Follow Hook Groups with ConvertKit Tags 40 * Mailchimp Sync which syncs Follow Hook Groups with MailChimp Groups85 * Mailchimp Sync is included in Follow Hook Free 41 86 * Project Broadcast Sync for text marketing automation 42 * CSV Import andExport of people87 * CSV Export of people 43 88 * Access to our private support forum! 44 89 * Access to [Follow Hook University](https://followhook.com/university/) for online training … … 57 102 Installing Follow Hook is easy! 58 103 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.' 104 1. First you must update the PRO version of FollowHook if you use that, otherwise continue to step 2. 105 2. From the WordPress dashboard navigate to Plugins > Add New. 106 3. Click 'Upload' and then “Choose File.” 107 4. Select the Follow Hook zipped file you downloaded. 108 5. After upload, click 'Activate.' 63 109 64 110 For general CRM documentation, please visit [Follow Hook University](https://followhook.com/university/). … … 93 139 1. Follow Hook Dashboard 94 140 2. Edit Person 95 3. Add and Edit Tags141 3. Add and Edit Groups 96 142 4. Add New Touchpoint 97 143 5. Assign Contact 7 Form Fields 98 144 6. Add Custom Fields 145 7. Enter Mailchimp API & Audience 99 146 100 147 == Changelog == 101 148 * 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 102 150 * Version 1.1.0 has all of the bugs found to-date fixed. 103 151 * Version 1.2.0 converted Follow Hook Tags into Follow Hook Groups … … 111 159 * Version 2.2.2 major overhaul of admin interface. 112 160 * 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-0 5-24 18:35:541 2021-06-06 15:36:42||||||| .r2311931
Note: See TracChangeset
for help on using the changeset viewer.