Example #1
0
 /**
  * Inserts or updates a lead in the database.
  * 
  * @since 1.0.7
  * @param objecy $lead A lead to update.
  * @param string[] $identity An array of the identity data.
  * @param string[] $context An array of the context data.
  * @param bool $confirmed Has a lead confirmed one's email address?
  * @return int A lead ID.
  */
 public static function save($lead = null, $identity = array(), $context = array(), $emailConfirmed = false, $subscriptionConfirmed = false)
 {
     global $wpdb;
     $email = isset($identity['email']) ? $identity['email'] : false;
     if (isset($identity['social'])) {
         $emailConfirmed = true;
     }
     $itemId = isset($context['itemId']) ? intval($context['itemId']) : 0;
     $postId = isset($context['postId']) ? intval($context['postId']) : null;
     $item = get_post($itemId);
     $itemTitle = !empty($item) ? $item->post_title : null;
     $postTitle = self::extract('postTitle', $context);
     $postUrl = self::extract('postUrl', $context);
     $name = self::extract('name', $identity);
     $family = self::extract('family', $identity);
     $displayName = self::extract('displayName', $identity);
     if (empty($displayName)) {
         if (!empty($name) && !empty($family)) {
             $displayName = $name . ' ' . $family;
         } elseif (!empty($name)) {
             $displayName = $name;
         } else {
             $displayName = $family;
         }
     }
     $leadId = empty($lead) ? null : $lead->ID;
     // counts the number of confirmed emails (subscription)
     if ($subscriptionConfirmed && $leadId && !$lead->lead_subscription_confirmed) {
         require_once OPANDA_BIZPANDA_DIR . '/admin/includes/stats.php';
         OPanda_Stats::countMetrict($itemId, $postId, 'email-confirmed');
     }
     if (!$leadId) {
         // counts the number of new recivied emails
         OPanda_Stats::countMetrict($itemId, $postId, 'email-received');
         $data = array('lead_display_name' => $displayName, 'lead_name' => $name, 'lead_family' => $family, 'lead_email' => $email, 'lead_date' => time(), 'lead_item_id' => $itemId, 'lead_post_id' => $postId, 'lead_item_title' => $itemTitle, 'lead_post_title' => $postTitle, 'lead_referer' => $postUrl, 'lead_email_confirmed' => $emailConfirmed ? 1 : 0, 'lead_subscription_confirmed' => $subscriptionConfirmed ? 1 : 0, 'lead_ip' => self::getIP());
         // else inserts a new lead
         $result = $wpdb->insert($wpdb->prefix . 'opanda_leads', $data, array('%s', '%s', '%s', '%s', '%d', '%d', '%d', '%s', '%s', '%s', '%d', '%s'));
         if ($result) {
             $leadId = $wpdb->insert_id;
         }
     } else {
         $data = array('lead_display_name' => $displayName, 'lead_name' => $name, 'lead_family' => $family, 'lead_email_confirmed' => $emailConfirmed ? 1 : 0, 'lead_subscription_confirmed' => $subscriptionConfirmed ? 1 : 0);
         $formats = array('lead_display_name' => '%s', 'lead_name' => '%s', 'lead_family' => '%s', 'lead_email_confirmed' => '%d', 'lead_subscription_confirmed' => '%d');
         if (empty($displayName)) {
             unset($data['lead_display_name']);
             unset($formats['lead_display_name']);
         }
         if (empty($name)) {
             unset($data['lead_display_name']);
             unset($formats['lead_display_name']);
         }
         if (empty($family)) {
             unset($data['lead_display_name']);
             unset($formats['lead_display_name']);
         }
         if (!$emailConfirmed || $lead->lead_email_confirmed) {
             unset($data['lead_email_confirmed']);
             unset($formats['lead_email_confirmed']);
         }
         if (!$subscriptionConfirmed || $lead->lead_subscription_confirmed) {
             unset($data['lead_subscription_confirmed']);
             unset($formats['lead_subscription_confirmed']);
         }
         if (!empty($data)) {
             $where = array('lead_email' => $email);
             $wpdb->update($wpdb->prefix . 'opanda_leads', $data, $where, array_values($formats), array('%s'));
         }
     }
     // saving extra fields
     $fields = array();
     foreach ($identity as $itemName => $itemValue) {
         if (in_array($itemName, array('email', 'name', 'family', 'displayName'))) {
             continue;
         }
         if ('image' === $itemName) {
             $itemName = 'externalImage';
         }
         $fields[trim($itemName, '{}')] = array('value' => $itemValue, 'custom' => strpos($itemName, '{') === 0 ? 1 : 0);
     }
     foreach ($fields as $fieldName => $fieldData) {
         $sql = $wpdb->prepare("\n                INSERT INTO {$wpdb->prefix}opanda_leads_fields\n                ( lead_id, field_name, field_value, field_custom )\n                VALUES ( %d, %s, %s, %d ) ON DUPLICATE KEY UPDATE field_value = VALUES(field_value)\n            ", $leadId, $fieldName, $fieldData['value'], $fieldData['custom']);
         $wpdb->query($sql);
     }
     return $leadId;
 }
Example #2
0
/**
 * Calls when a new user places a tweet.
 */
function opanda_tweet_posted($context = array())
{
    require_once OPANDA_BIZPANDA_DIR . '/admin/includes/stats.php';
    $itemId = isset($context['itemId']) ? intval($context['itemId']) : 0;
    $postId = isset($context['postId']) ? intval($context['postId']) : null;
    OPanda_Stats::countMetrict($itemId, $postId, 'tweet-posted');
}