/**
  * @param $lead
  * @param $field GF_Field
  *
  * @return array|bool|mixed|string|void
  */
 public static function get_lead_field_value($lead, $field)
 {
     if (empty($lead)) {
         return;
     }
     $field_id = $field instanceof GF_Field ? $field->id : $field['id'];
     //returning cache entry if available
     $cache_key = 'GFFormsModel::get_lead_field_value_' . $lead['id'] . '_' . $field_id;
     $cache_value = GFCache::get($cache_key);
     if ($cache_value !== false) {
         return $cache_value;
     }
     $max_length = GFORMS_MAX_FIELD_LENGTH;
     $value = array();
     $inputs = $field instanceof GF_Field ? $field->get_entry_inputs() : rgar($field, 'inputs');
     if (is_array($inputs)) {
         //making sure values submitted are sent in the value even if
         //there isn't an input associated with it
         $lead_field_keys = array_keys($lead);
         natsort($lead_field_keys);
         foreach ($lead_field_keys as $input_id) {
             if (is_numeric($input_id) && absint($input_id) == absint($field->id)) {
                 $val = $lead[$input_id];
                 if (strlen($val) >= $max_length - 10) {
                     if (empty($form)) {
                         $form = RGFormsModel::get_form_meta($lead['form_id']);
                     }
                     $long_choice = self::get_field_value_long($lead, $input_id, $form);
                 } else {
                     $long_choice = $val;
                 }
                 $value[$input_id] = !empty($long_choice) ? $long_choice : $val;
             }
         }
     } else {
         $val = rgget($field_id, $lead);
         //To save a database call to get long text, only getting long text if regular field is 'somewhat' large (i.e. max - 50)
         if (strlen($val) >= $max_length - 50) {
             if (empty($form)) {
                 $form = RGFormsModel::get_form_meta($lead['form_id']);
             }
             $long_text = self::get_field_value_long($lead, $field_id, $form);
         }
         $value = !empty($long_text) ? $long_text : $val;
     }
     //filtering lead value
     $value = apply_filters('gform_get_field_value', $value, $lead, $field);
     //saving value in global variable to optimize performance
     GFCache::set($cache_key, $value);
     return $value;
 }
 public function get_payment_feed($entry, $form = false)
 {
     $submission_feed = GFCache::get('payment_feed');
     if (!$submission_feed) {
         if ($entry['id']) {
             $feeds = $this->get_feeds_by_entry($entry['id']);
             $submission_feed = $this->get_feed($feeds[0]);
         } else {
             if ($form) {
                 // getting all active feeds
                 $feeds = $this->get_feeds($form['id']);
                 foreach ($feeds as $feed) {
                     if ($this->is_feed_condition_met($feed, $form, $entry)) {
                         $submission_feed = $feed;
                         break;
                     }
                 }
             }
         }
         // if called without $form, there is assumption that cache has already been set; let's avoid issues where the cache has not been set and form was not provided
         // so that the cache will only be set when an $entry and $form object are provided
         if ($entry && $form) {
             GFCache::set('payment_feed', $submission_feed);
         }
     }
     return $submission_feed;
 }
Exemple #3
0
 /**
  * Given an entry and a form field id, calculate the entry value for that field.
  *
  * @access public
  * @param array $entry
  * @param integer $field
  * @return null|string
  */
 public static function field_value($entry, $field_settings, $format = 'html')
 {
     if (empty($entry['form_id']) || empty($field_settings['id'])) {
         return NULL;
     }
     $gravityview_view = GravityView_View::getInstance();
     if (class_exists('GFCache')) {
         /**
          * Gravity Forms' GFCache function was thrashing the database, causing double the amount of time for the field_value() method to run.
          *
          * The reason is that the cache was checking against a field value stored in a transient every time `GFFormsModel::get_lead_field_value()` is called.
          *
          * What we're doing here is telling the GFCache that it's already checked the transient and the value is false, forcing it to just use the non-cached data, which is actually faster.
          *
          * @hack
          * @since  1.3
          * @param  string $cache_key Field Value transient key used by Gravity Forms
          * @param mixed false Setting the value of the cache to false so that it's not used by Gravity Forms' GFFormsModel::get_lead_field_value() method
          * @param boolean false Tell Gravity Forms not to store this as a transient
          * @param  int 0 Time to store the value. 0 is maximum amount of time possible.
          */
         GFCache::set("GFFormsModel::get_lead_field_value_" . $entry["id"] . "_" . $field_settings["id"], false, false, 0);
     }
     $field_id = $field_settings['id'];
     $form = $gravityview_view->getForm();
     $field = gravityview_get_field($form, $field_id);
     $field_type = RGFormsModel::get_input_type($field);
     if ($field_type) {
         $field_type = $field['type'];
         $value = RGFormsModel::get_lead_field_value($entry, $field);
     } else {
         // For non-integer field types (`id`, `date_created`, etc.)
         $field_type = $field_id;
         $field['type'] = $field_id;
         $value = isset($entry[$field_type]) ? $entry[$field_type] : NULL;
     }
     // Prevent any PHP warnings that may be generated
     ob_start();
     $display_value = GFCommon::get_lead_field_display($field, $value, $entry["currency"], false, $format);
     if ($errors = ob_get_clean()) {
         do_action('gravityview_log_error', 'GravityView_API[field_value] Errors when calling GFCommon::get_lead_field_display()', $errors);
     }
     $display_value = apply_filters("gform_entry_field_value", $display_value, $field, $entry, $form);
     // prevent the use of merge_tags for non-admin fields
     if (!empty($field['adminOnly'])) {
         $display_value = self::replace_variables($display_value, $form, $entry);
     }
     // Check whether the field exists in /includes/fields/{$field_type}.php
     // This can be overridden by user template files.
     $field_exists = $gravityview_view->locate_template("fields/{$field_type}.php");
     // Set the field data to be available in the templates
     $gravityview_view->setCurrentField(array('form' => $form, 'field_id' => $field_id, 'field' => $field, 'field_settings' => $field_settings, 'value' => $value, 'display_value' => $display_value, 'format' => $format, 'entry' => $entry, 'field_type' => $field_type));
     if ($field_exists) {
         do_action('gravityview_log_debug', sprintf('[field_value] Rendering %s', $field_exists));
         ob_start();
         load_template($field_exists, false);
         $output = ob_get_clean();
     } else {
         // Backup; the field template doesn't exist.
         $output = $display_value;
     }
     $field_settings = $gravityview_view->getCurrentField('field_settings');
     /**
      * Link to the single entry by wrapping the output in an anchor tag
      *
      * Fields can override this by modifying the field data variable inside the field. See /templates/fields/post_image.php for an example.
      *
      */
     if (!empty($field_settings['show_as_link'])) {
         $output = self::entry_link_html($entry, $output, array(), $field_settings);
     }
     /**
      * @filter `gravityview_field_entry_value_{$field_type}` Modify the field value output for a field type. Example: `gravityview_field_entry_value_number`
      * @since 1.6
      * @param string $output HTML value output
      * @param array  $entry The GF entry array
      * @param  array $field_settings Settings for the particular GV field
      */
     $output = apply_filters('gravityview_field_entry_value_' . $field_type, $output, $entry, $field_settings, $gravityview_view->getCurrentField());
     /**
      * @filter `gravityview_field_entry_value` Modify the field value output for all field types
      * @param string $output HTML value output
      * @param array  $entry The GF entry array
      * @param  array $field_settings Settings for the particular GV field
      * @param array $field_data  {@since 1.6}
      */
     $output = apply_filters('gravityview_field_entry_value', $output, $entry, $field_settings, $gravityview_view->getCurrentField());
     return $output;
 }
 public static function is_section_empty($section_field, $form, $lead)
 {
     $cache_key = "GFCommon::is_section_empty_" . $form["id"] . "_" . $section_field["id"];
     $value = GFCache::get($cache_key);
     if ($value !== false) {
         return $value == true;
     }
     $fields = self::get_section_fields($form, $section_field["id"]);
     if (!is_array($fields)) {
         GFCache::set($cache_key, 1);
         return true;
     }
     foreach ($fields as $field) {
         $val = RGFormsModel::get_lead_field_value($lead, $field);
         $val = GFCommon::get_lead_field_display($field, $val, rgar($lead, 'currency'));
         if (!self::is_product_field($field["type"]) && !rgblank($val)) {
             GFCache::set($cache_key, 0);
             return false;
         }
     }
     GFCache::set($cache_key, 1);
     return true;
 }
 protected function update_lock_request_meta($object_id, $lock_request_value)
 {
     GFCache::set(self::PREFIX_EDIT_LOCK_REQUEST . $this->_object_type . '_' . $object_id, $lock_request_value, true, 120);
 }
 /**
  * Check whether a field is hidden via conditional logic.
  *
  * @param array    $form         Form object.
  * @param GF_Field $field        Field object.
  * @param array    $field_values Default field values for this form. Used when form has not yet been submitted. Pass an array if no default field values are available/required.
  * @param array    $lead         Optional, default is null. If lead object is available, pass the lead.
  *
  * @return mixed
  */
 public static function is_field_hidden($form, $field, $field_values, $lead = null)
 {
     if (empty($field)) {
         return false;
     }
     $cache_key = 'GFFormsModel::is_field_hidden_' . $form['id'] . '_' . $field->id;
     $display = GFCache::get($cache_key);
     if ($display !== false) {
         return $display;
     }
     $section = self::get_section($form, $field->id);
     $section_display = self::get_field_display($form, $section, $field_values, $lead);
     //if section is hidden, hide field no matter what. if section is visible, see if field is supposed to be visible
     if ($section_display == 'hide') {
         $display = 'hide';
     } else {
         if (self::is_page_hidden($form, $field->pageNumber, $field_values, $lead)) {
             $display = 'hide';
         } else {
             $display = self::get_field_display($form, $field, $field_values, $lead);
             return $display == 'hide';
         }
     }
     GFCache::set($cache_key, $display);
     return $display == 'hide';
 }
 public static function is_section_empty($section_field, $form, $entry)
 {
     $cache_key = "GFCommon::is_section_empty_{$form['id']}_{$section_field['id']}";
     $value = GFCache::get($cache_key);
     if ($value !== false) {
         return $value == true;
     }
     $fields = self::get_section_fields($form, $section_field['id']);
     if (!is_array($fields)) {
         GFCache::set($cache_key, 1);
         return true;
     }
     foreach ($fields as $field) {
         $value = GFFormsModel::get_lead_field_value($entry, $field);
         $value = GFCommon::get_lead_field_display($field, $value, rgar($entry, 'currency'));
         if (rgblank($value)) {
             continue;
         }
         // most fields are displayed in the section by default, exceptions are handled below
         $is_field_displayed_in_section = true;
         // by default, product fields are not displayed in their containing section (displayed in a product summary table)
         // if the filter is used to disable this, product fields are displayed in the section like other fields
         if (self::is_product_field($field['type'])) {
             $display_product_summary = apply_filters('gform_display_product_summary', true, $field, $form, $entry);
             $is_field_displayed_in_section = !$display_product_summary;
         }
         if ($is_field_displayed_in_section) {
             GFCache::set($cache_key, 0);
             return false;
         }
     }
     GFCache::set($cache_key, 1);
     return true;
 }
 public function get_feeds($form_id = null)
 {
     global $wpdb;
     $cache_key = implode('_', array_filter(array($this->_slug, 'get_feeds', $form_id)));
     $feeds = GFCache::get($cache_key);
     if (is_array($feeds)) {
         return $feeds;
     }
     $form_filter = is_numeric($form_id) ? $wpdb->prepare("AND form_id=%d", absint($form_id)) : "";
     $sql = $wpdb->prepare("SELECT * FROM {$wpdb->prefix}gf_addon_feed\n                               WHERE addon_slug=%s {$form_filter}", $this->_slug);
     $results = $wpdb->get_results($sql, ARRAY_A);
     foreach ($results as &$result) {
         $result["meta"] = json_decode($result["meta"], true);
     }
     GFCache::set($cache_key, $results);
     return $results;
 }
 public function get_group_setting_key($grouping_id, $group_name)
 {
     $plugin_settings = GFCache::get('mailchimp_plugin_settings');
     if (empty($plugin_settings)) {
         $plugin_settings = $this->get_plugin_settings();
         GFCache::set('mailchimp_plugin_settings', $plugin_settings);
     }
     $key = 'group_key_' . $grouping_id . '_' . str_replace('%', '', sanitize_title_with_dashes($group_name));
     if (!isset($plugin_settings[$key])) {
         $group_key = 'mc_group_' . uniqid();
         $plugin_settings[$key] = $group_key;
         $this->update_plugin_settings($plugin_settings);
         GFCache::set('mailchimp_plugin_settings', $plugin_settings);
     }
     return $plugin_settings[$key];
 }
 /**
  * Update the results cache.
  *
  * @param int $form_id The form ID.
  *
  * @return array
  */
 public function update_cache($form_id)
 {
     $gpoll_data = $this->gpoll_get_data($form_id);
     GFCache::set('gpoll_data_' . $form_id, $gpoll_data, true);
     return $gpoll_data;
 }
 public function get_payment_feed($entry, $form)
 {
     $submission_feed = GFCache::get("payment_feed");
     if (!$submission_feed) {
         if (!empty($entry["id"])) {
             $feeds = $this->get_processed_feeds($entry["id"]);
             $submission_feed = $this->get_feed($feeds[0]);
         } else {
             // getting all active feeds
             $feeds = $this->get_feeds($form['id']);
             foreach ($feeds as $feed) {
                 if ($this->is_feed_condition_met($feed, $form, $entry)) {
                     $submission_feed = $feed;
                     break;
                 }
             }
         }
         GFCache::set("payment_feed", $submission_feed);
     }
     return $submission_feed;
 }
 /**
  * Return the clients.
  *
  * @return mixed
  */
 private function get_clients()
 {
     $clients = GFCache::get('campaignmonitor_clients');
     if (!$clients) {
         $this->include_api();
         $api = new CS_REST_General($this->get_key());
         //getting all clients
         $response = $api->get_clients();
         if ($response->http_status_code == 200) {
             $clients = $response->response;
             GFCache::set('campaignmonitor_clients', $clients);
         }
     }
     return $clients;
 }
Exemple #13
0
    public static function get_lead_field_value($lead, $field){

        if(empty($lead))
            return;

        //returning cache entry if available
        $cache_key = "GFFormsModel::get_lead_field_value_" . $lead["id"] . "_" . $field["id"];

        $cache_value = GFCache::get($cache_key);
        if($cache_value !== false)
            return $cache_value;

        $max_length = GFORMS_MAX_FIELD_LENGTH;
        $value = array();
        if(is_array(rgar($field, "inputs"))){
            //making sure values submitted are sent in the value even if
            //there isn't an input associated with it
            $lead_field_keys = array_keys($lead);
            foreach($lead_field_keys as $input_id){
                if(is_numeric($input_id) && absint($input_id) == absint($field["id"])){
                    $val = $lead[$input_id];
                    if(strlen($val) >= ($max_length-10)) {
                        if(empty($form))
                            $form = RGFormsModel::get_form_meta($lead["form_id"]);

                        $long_choice = self::get_field_value_long($lead, $input_id, $form);
                    }
                    else{
                        $long_choice = $val;
                    }

                     $value[$input_id] = !empty($long_choice) ? $long_choice : $val;
                }
            }
        }
        else{
            $val = rgget($field["id"], $lead);

            //To save a database call to get long text, only getting long text if regular field is "somewhat" large (i.e. max - 50)
            if(strlen($val) >= ($max_length - 50)){
                if(empty($form))
                    $form = RGFormsModel::get_form_meta($lead["form_id"]);

                $long_text = self::get_field_value_long($lead, $field["id"], $form);
            }

            $value = !empty($long_text) ? $long_text : $val;
        }

        //filtering lead value
        $value = apply_filters("gform_get_field_value", $value, $lead, $field);

        //saving value in global variable to optimize performance
        GFCache::set($cache_key, $value);

        return $value;
    }
 public function get_freshbooks_items()
 {
     //non persistent cache
     $fb_items = GFCache::get('freshbooks_items');
     if (empty($fb_items)) {
         $this->init_api();
         $items = new FreshBooks_Item();
         $result = array();
         $result_info = array();
         $current_page = 1;
         $fb_items = array();
         do {
             $items->listing($result, $result_info, $current_page, 100);
             $pages = $result_info['pages'];
             foreach ($result as $line_item) {
                 $fb_items[] = array('value' => $line_item->itemId, 'label' => $line_item->name);
             }
             $current_page++;
         } while ($current_page <= $pages);
         GFCache::set('freshbooks_items', $fb_items);
     }
     return $fb_items;
 }