public function metaform()
 {
     $attributes = $this->getAttr();
     $form = array();
     $markup = '';
     $wpml_action = $this->getWPMLAction();
     if (is_admin()) {
         $markup .= '<div class="form-item form-item-markup">';
         $extra_markup = '';
         if (defined('WPML_TM_VERSION') && intval($wpml_action) === 1 && function_exists('wpcf_wpml_post_is_original') && !wpcf_wpml_post_is_original() && function_exists('wpcf_wpml_have_original') && wpcf_wpml_have_original()) {
             $attributes['readonly'] = 'readonly';
             $extra_markup .= sprintf('<img src="%s/images/locked.png" alt="%s" title="%s" style="position:relative;left:2px;top:2px;" />', WPCF_EMBEDDED_RES_RELPATH, __('This field is locked for editing because WPML will copy its value from the original language.', 'wpcf'), __('This field is locked for editing because WPML will copy its value from the original language.', 'wpcf'));
         }
         $markup .= sprintf('<label class="wpt-form-label wpt-form-textfield-label">%1$s%2$s</label>', stripcslashes($this->getTitle()), $extra_markup);
     }
     if (is_admin()) {
         $markup .= '<div class="description wpt-form-description wpt-form-description-textfield description-textfield">' . stripcslashes($this->getDescription()) . '</div>';
     } else {
         $markup .= stripcslashes($this->getDescription());
     }
     $markup .= $this->_editor($attributes);
     if (is_admin()) {
         $markup .= '</div>';
     }
     $form[] = array('#type' => 'markup', '#markup' => $markup);
     return $form;
 }
Пример #2
0
 public function metaform()
 {
     $value = wp_parse_args($this->getValue(), $this->_defaults);
     $attributes = $this->getAttr();
     $wpml_action = $this->getWPMLAction();
     if (isset($attributes['class'])) {
         $attributes['class'] .= ' ';
     } else {
         $attributes['class'] = '';
     }
     $attributes['class'] = 'js-wpt-skypename js-wpt-cond-trigger regular-text';
     // What is this js-wpt-cond-trigger classname for?
     $form = array();
     $form[] = array('#type' => 'textfield', '#title' => $this->getTitle(), '#description' => $this->getDescription(), '#name' => $this->getName() . "[skypename]", '#attributes' => array(), '#value' => $value['skypename'], '#validate' => $this->getValidationData(), '#attributes' => $attributes, '#repetitive' => $this->isRepetitive(), 'wpml_action' => $wpml_action);
     /**
      * action
      */
     $form[] = array('#type' => 'hidden', '#value' => $value['action'], '#name' => $this->getName() . '[action]', '#attributes' => array('class' => 'js-wpt-skype-action'));
     /**
      * color
      */
     $form[] = array('#type' => 'hidden', '#value' => $value['color'], '#name' => $this->getName() . '[color]', '#attributes' => array('class' => 'js-wpt-skype-color'));
     /**
      * size
      */
     $form[] = array('#type' => 'hidden', '#value' => $value['size'], '#name' => $this->getName() . '[size]', '#attributes' => array('class' => 'js-wpt-skype-size'));
     if (!is_admin()) {
         return $form;
     }
     $button_element = array('#name' => '', '#type' => 'button', '#value' => esc_attr(__('Edit Skype', 'wpv-views')), '#attributes' => array('class' => 'js-wpt-skype-edit-button button button-small button-secondary'));
     if (is_admin() && defined('WPML_TM_VERSION') && intval($wpml_action) === 1 && function_exists('wpcf_wpml_post_is_original') && !wpcf_wpml_post_is_original() && function_exists('wpcf_wpml_have_original') && wpcf_wpml_have_original()) {
         $button_element['#attributes']['disabled'] = 'disabled';
     }
     foreach ($value as $key => $val) {
         $button_element['#attributes']['data-' . esc_attr($key)] = $val;
     }
     $form[] = $button_element;
     return $form;
 }
Пример #3
0
/**
 * Creates form elements.
 *
 * Core function. Works and stable. Do not move or change.
 * If required, add hooks only.
 *
 * @param type $post
 * @param type $fields
 * @return type
 */
function wpcf_admin_post_process_fields($post = false, $fields = array(), $use_cache = true, $add_to_editor = true, $context = 'group')
{
    global $wpcf;
    $wpcf->field->use_cache = $use_cache;
    $wpcf->field->add_to_editor = $add_to_editor;
    $wpcf->repeater->use_cache = $use_cache;
    $wpcf->repeater->add_to_editor = $add_to_editor;
    // Get cached
    static $cache = array();
    $cache_key = !empty($post->ID) ? $post->ID . md5(serialize($fields)) : false;
    if ($use_cache && $cache_key && isset($cache[$cache_key])) {
        return $cache[$cache_key];
    }
    $fields_processed = array();
    // Get invalid fields (if submitted)
    $invalid_fields = array();
    if (!empty($post->ID)) {
        $invalid_fields = get_post_meta($post->ID, 'wpcf-invalid-fields', true);
        delete_post_meta($post->ID, 'wpcf-invalid-fields');
        /*
         *
         * Add it to global $wpcf
         * From now on take it there.
         */
        $wpcf->field->invalid_fields = $invalid_fields;
    }
    // TODO WPML Get WPML original fields
    $original_cf = array();
    if (function_exists('wpml_get_copied_fields_for_post_edit') && !wpcf_wpml_post_is_original($post)) {
        $__fields_slugs = array();
        foreach ($fields as $_f) {
            $__fields_slugs[] = $_f['meta_key'];
        }
        $original_cf = wpml_get_copied_fields_for_post_edit($__fields_slugs);
    }
    foreach ($fields as $field) {
        // Repetitive fields
        if (wpcf_admin_is_repetitive($field) && $context != 'post_relationship') {
            // First check if repetitive fields are copied using WPML
            /*
             * TODO All WPML specific code needs moving to
             * /embedded/includes/wpml.php
             *
             * @since Types 1.2
             */
            // TODO WPML move
            if (!empty($original_cf['fields']) && in_array(wpcf_types_get_meta_prefix($field) . $field['slug'], $original_cf['fields'])) {
                /*
                 * See if repeater can handle copied fields
                 */
                $wpcf->repeater->set(get_post($original_cf['original_post_id']), $field);
                $fields_processed = $fields_processed + $wpcf->repeater->get_fields_form();
            } else {
                // Set repeater
                /*
                 *
                 *
                 * @since Types 1.2
                 * Now we're using repeater class to handle repetitive forms.
                 * Main change is - use form from $field_meta_box_form() without
                 * re-processing form elements.
                 *
                 * Field should pass form as array:
                 * 'my_checkbox' => array('#type' => 'checkbox' ...),
                 * 'my_textfield' => array('#type' => 'textfield' ...),
                 *
                 * In form it should set values to be stored.
                 * Use hooks to adjust saved data.
                 */
                $wpcf->repeater->set($post, $field);
                $fields_processed = $fields_processed + $wpcf->repeater->get_fields_form();
            }
            /*
             *
             *
             *
             *
             *
             *
             *
             *
             *
             *
             *
             *
             *
             *
             *
             * Non-repetitive fields
             */
        } else {
            /*
             * meta_form will be treated as normal form.
             * See if any obstacles prevent us from using completed
             * form from config files.
             *
             * Main change is - use form from $field_meta_box_form() without
             * re-processing form elements.
             *
             * Field should pass form as array:
             * 'my_checkbox' => array('#type' => 'checkbox' ...),
             * 'my_textfield' => array('#type' => 'textfield' ...),
             *
             * In form it should set values to be stored.
             * Use hooks to adjust saved data.
             */
            $wpcf->field->set($post, $field);
            // TODO WPML move Check if repetitive field is copied using WPML
            if (!empty($original_cf['fields'])) {
                if (in_array($wpcf->field->slug, $original_cf['fields'])) {
                    // Switch to parent post
                    $wpcf->field->set(get_post($original_cf['original_post_id']), $field);
                }
            }
            /*
             * From Types 1.2 use complete form setup
             */
            $fields_processed = $fields_processed + $wpcf->field->_get_meta_form();
        }
    }
    // Cache results
    if ($cache_key) {
        $cache[$cache_key] = $fields_processed;
    }
    return $fields_processed;
}
Пример #4
0
/**
 * Checks if field is copied on post edit screen.
 *
 * @global type $sitepress
 * @param type $field
 * @param type $post
 * @return boolean
 */
function wpcf_wpml_field_is_copied($field, $post = null)
{
    if (defined('ICL_SITEPRESS_VERSION') && defined('WPML_TM_VERSION') && !defined('DOING_AJAX')) {
        if (!wpcf_wpml_post_is_original($post)) {
            return wpcf_wpml_have_original($post) && wpcf_wpml_field_is_copy($field);
        }
    }
    return false;
}
Пример #5
0
 /**
  *
  * @global object $wpdb
  *
  */
 public function metaform()
 {
     $value = $this->getValue();
     $type = $this->getType();
     $translated_type = '';
     $form = array();
     $preview = '';
     $wpml_action = $this->getWPMLAction();
     // Get attachment by guid
     if (!empty($value)) {
         global $wpdb;
         $attachment_id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment' AND guid=%s", $value));
     }
     // Set preview
     if (!empty($attachment_id)) {
         $attributes = array();
         $full = wp_get_attachment_image_src($attachment_id, 'full');
         if (!empty($full)) {
             $attributes['data-full-src'] = esc_attr($full[0]);
         }
         $preview = wp_get_attachment_image($attachment_id, 'thumbnail', false, $attributes);
     } else {
         // If external image set preview
         $file_path = parse_url($value);
         if ($file_path && isset($file_path['path'])) {
             $file = pathinfo($file_path['path']);
         } else {
             $file = pathinfo($value);
         }
         if (isset($file['extension']) && in_array(strtolower($file['extension']), array('jpg', 'jpeg', 'gif', 'png'))) {
             $preview = '<img alt="" src="' . $value . '" />';
         }
     }
     // Set button
     switch ($type) {
         case 'audio':
             $translated_type = __('audio', 'wpv-views');
             break;
         case 'image':
             $translated_type = __('image', 'wpv-views');
             break;
         case 'video':
             $translated_type = __('video', 'wpv-views');
             break;
         default:
             $translated_type = __('file', 'wpv-views');
             break;
     }
     $button_status = '';
     if (is_admin() && defined('WPML_TM_VERSION') && intval($wpml_action) === 1 && function_exists('wpcf_wpml_post_is_original') && !wpcf_wpml_post_is_original() && function_exists('wpcf_wpml_have_original') && wpcf_wpml_have_original()) {
         $button_status = ' disabled="disabled"';
     }
     $button = sprintf('<button class="js-wpt-file-upload button button-secondary" data-wpt-type="%s"%s>%s</button>', $type, $button_status, sprintf(__('Select %s', 'wpv-views'), $translated_type));
     // Set form
     $form[] = array('#type' => 'textfield', '#name' => $this->getName(), '#title' => $this->getTitle(), '#description' => $this->getDescription(), '#value' => $value, '#suffix' => '&nbsp;' . $button, '#validate' => $this->getValidationData(), '#repetitive' => $this->isRepetitive(), '#attributes' => $this->getAttr(), 'wpml_action' => $wpml_action);
     $form[] = array('#type' => 'markup', '#markup' => '<div class="js-wpt-file-preview wpt-file-preview">' . $preview . '</div>');
     return $form;
 }
Пример #6
0
 public function metaform()
 {
     $time_value = $this->getValue();
     $datepicker = $hour = $minute = null;
     $timestamp = null;
     $readonly = false;
     $wpml_action = $this->getWPMLAction();
     if (is_admin()) {
         if (is_array($time_value) && array_key_exists('timestamp', $time_value) && $time_value) {
             $timestamp = $time_value['timestamp'];
         }
         $datepicker = self::timetodate($timestamp);
         $hour = self::timetodate($timestamp, 'H');
         $minute = self::timetodate($timestamp, 'i');
     } else {
         // We are on a CRED form, on frontend, so getVAlue returns nothing or a string or an array of the kind array( 'datepicker' =>, 'hour' =>, 'minute' => )
         // Note that even if the array is passed, 'hour' and 'minute' will only be passed if there are any
         if (!empty($time_value)) {
             if (is_array($time_value)) {
                 if (isset($time_value['timestamp']) && is_numeric($time_value['timestamp']) && self::_isTimestampInRange($time_value['timestamp'])) {
                     $timestamp = $time_value['timestamp'];
                     $datepicker = self::timetodate($timestamp);
                 } elseif (isset($time_value['datepicker']) && $time_value['datepicker'] !== false && is_numeric($time_value['datepicker']) && self::_isTimestampInRange($time_value['datepicker'])) {
                     $timestamp = $time_value['datepicker'];
                     $datepicker = self::timetodate($timestamp);
                 }
                 $hour = self::timetodate($timestamp, 'H');
                 if (isset($time_value['hour']) && is_numeric($time_value['hour'])) {
                     $hour = $time_value['hour'];
                 }
                 $minute = self::timetodate($timestamp, 'i');
                 if (isset($time_value['minute']) && is_numeric($time_value['minute'])) {
                     $minute = $time_value['minute'];
                 }
             } else {
                 if (is_numeric($time_value) && self::_isTimestampInRange($time_value)) {
                     $timestamp = $time_value;
                     $datepicker = self::timetodate($timestamp);
                 } else {
                     $timestamp = self::strtotime($time_value);
                     $datepicker = $time_value;
                 }
                 $hour = self::timetodate($timestamp, 'H');
                 $minute = self::timetodate($timestamp, 'i');
             }
         }
     }
     $data = $this->getData();
     $field_disable = false;
     $def_class_aux = 'js-wpt-date-auxiliar';
     if (is_admin() && defined('WPML_TM_VERSION') && intval($wpml_action) === 1 && function_exists('wpcf_wpml_post_is_original') && !wpcf_wpml_post_is_original() && function_exists('wpcf_wpml_have_original') && wpcf_wpml_have_original()) {
         $field_disable = true;
         // this will stop js validation of date field value (as it will get duplicated)
         $def_class_aux = '';
     }
     if (!$timestamp) {
         // If there is no timestamp, we need to make it an empty string
         // A false value would render the hidden field with a value of 1
         $timestamp = '';
         $datepicker = null;
     }
     $def_class = 'js-wpt-date';
     if ($field_disable || isset($data['attribute']) && isset($data['attribute']['readonly']) && $data['attribute']['readonly'] == 'readonly') {
         $def_class .= ' js-wpv-date-readonly';
         $def_class_aux .= ' js-wpt-date-readonly';
         $readonly = true;
     }
     $form = array();
     $validate = $this->getValidationData();
     $title = $this->getTitle();
     if (isset($validate['required']) && !empty($title)) {
         // Asterisk
         $title .= '&#42;';
     }
     $attr_visible = array('class' => $def_class, 'style' => 'display:inline;width:150px;position:relative;', 'readonly' => 'readonly', 'title' => esc_attr(__('Select', 'wpv-views')) . " Date");
     $attr_hidden = array('class' => $def_class_aux, 'data-ts' => $timestamp, 'data-wpt-type' => 'date');
     if (isset($data['attribute']) && isset($data['attribute']['placeholder'])) {
         $attr_visible['placeholder'] = $data['attribute']['placeholder'];
     }
     $form[] = array('#type' => 'textfield', '#title' => $title, '#description' => $this->getDescription(), '#attributes' => $attr_visible, '#name' => $this->getName() . '[display-only]', '#value' => $datepicker, '#inline' => true, 'wpml_action' => $wpml_action);
     $form[] = array('#type' => 'hidden', '#title' => $title, '#attributes' => $attr_hidden, '#name' => $this->getName() . '[datepicker]', '#value' => $timestamp, '#validate' => $validate, '#repetitive' => $this->isRepetitive());
     /*
      // This was the old implementaton
      // We have implemented the above one because we need a hidden field to hold the timestamp
      // And the visible text input field to display the date string to the user
      $form[] = array(
      '#type' => 'textfield',
      '#title' => $this->getTitle(),
      '#attributes' => array('class' => $def_class, 'style' => 'width:150px;'),
      '#name' => $this->getName() . '[datepicker]',
      '#value' => $timestamp,
      '#validate' => $this->getValidationData(),
      '#repetitive' => $this->isRepetitive(),
      );
     */
     if (!empty($data['add_time'])) {
         // Shared attributes
         $attributes_hour_minute = array();
         if ($readonly) {
             $attributes_hour_minute['disabled'] = 'disabled';
         }
         if (array_key_exists('use_bootstrap', $this->_data) && $this->_data['use_bootstrap']) {
             $attributes_hour_minute['style'] = 'display:inline;width:auto;';
         }
         // Hour
         $hours = 24;
         $options = array();
         for ($index = 0; $index < $hours; $index++) {
             $prefix = $index < 10 ? '0' : '';
             $options[$index] = array('#title' => $prefix . strval($index), '#value' => $index);
         }
         if ($readonly) {
             $form[] = array('#type' => 'hidden', '#value' => $hour, '#name' => $this->getName() . '[hour]', '#inline' => true);
             $hour_element = array('#type' => 'select', '#before' => '<span class="wpt-form-label">' . __('Hour', 'wpv-views') . '</span>', '#options' => $options, '#default_value' => $hour, '#name' => '_' . $this->getName() . '[hour]', '#inline' => true, '#attributes' => array('title' => esc_attr(__('Select', 'wpv-views')) . " Date"));
         } else {
             $hour_element = array('#type' => 'select', '#before' => '<span class="wpt-form-label">' . __('Hour', 'wpv-views') . '</span>', '#options' => $options, '#default_value' => $hour, '#name' => $this->getName() . '[hour]', '#inline' => true, '#attributes' => array('title' => esc_attr(__('Select', 'wpv-views')) . " Date"));
         }
         if (!empty($attributes_hour_minute)) {
             $hour_element['#attributes'] = $attributes_hour_minute;
         }
         $form[] = $hour_element;
         // Minutes
         $minutes = 60;
         $options = array();
         for ($index = 0; $index < $minutes; $index++) {
             $prefix = $index < 10 ? '0' : '';
             $options[$index] = array('#title' => $prefix . strval($index), '#value' => $index);
         }
         if ($readonly) {
             $form[] = array('#type' => 'hidden', '#value' => $minute, '#name' => $this->getName() . '[minute]', '#inline' => true);
             $minute_element = array('#type' => 'select', '#before' => '<span class="wpt-form-label">' . __('Minute', 'wpv-views') . '</span>', '#options' => $options, '#default_value' => $minute, '#name' => '_' . $this->getName() . '[minute]', '#inline' => true, '#attributes' => array('title' => esc_attr(__('Select minute', 'wpv-views'))));
         } else {
             $minute_element = array('#type' => 'select', '#before' => '<span class="wpt-form-label">' . __('Minute', 'wpv-views') . '</span>', '#options' => $options, '#default_value' => $minute, '#name' => $this->getName() . '[minute]', '#inline' => true, '#attributes' => array('title' => esc_attr(__('Select minute', 'wpv-views'))));
         }
         if (!empty($attributes_hour_minute)) {
             $minute_element['#attributes'] = $attributes_hour_minute;
         }
         $form[] = $minute_element;
     }
     $form[] = array('#type' => 'markup', '#inline' => true, '#markup' => sprintf('<input type="button" class="button button-secondary js-wpt-date-clear wpt-date-clear" value="%s" %s/>', esc_attr(__('Clear', 'wpv-views')) . " Date", empty($time_value) || !isset($time_value['timestamp']) || isset($time_value['timestamp']) && empty($time_value['timestamp']) || $readonly ? 'style="display:none" ' : ''));
     return $form;
 }