function wfu_shortcode_composer($data = '', $shortcode_tag = 'wordpress_file_upload') { global $wpdb; global $wp_roles; $siteurl = site_url(); $components = wfu_component_definitions(); if ($shortcode_tag == 'wordpress_file_upload') { $plugin_title = "Uploader"; $cats = wfu_category_definitions(); $defs = wfu_attribute_definitions(); } else { $plugin_title = "Browser"; $cats = wfu_browser_category_definitions(); $defs = wfu_browser_attribute_definitions(); } $plugin_options = wfu_decode_plugin_options(get_option("wordpress_file_upload_options")); if ($data == "") { $shortcode = $plugin_options['shortcode']; $shortcode_full = '[' . $shortcode_tag . ' ' . $shortcode . ']'; $postid = ""; $postname = ""; $posttype = ""; $posthash = ""; $shortcode_position = -1; $widgetid = ""; $sidebar = ""; $autosave = true; } else { $shortcode = trim(substr($data['shortcode'], strlen('[' . $shortcode_tag), -1)); $shortcode_full = $data['shortcode']; $postid = $data['post_id']; $postname = get_the_title($postid); $posttype_obj = get_post_type_object(get_post_type($postid)); $posttype = $posttype_obj ? $posttype_obj->labels->singular_name : ""; $posthash = $data['post_hash']; $shortcode_position = $data['position']; $widgetid = isset($data['widgetid']) ? $data['widgetid'] : ""; $sidebar = isset($data['sidebar']) ? $data['sidebar'] : ""; $autosave = false; } // index $components $components_indexed = array(); foreach ($components as $component) { $components_indexed[$component['id']] = $component; } // complete defs array and index dependencies $governors = array(); $shortcode_attrs = wfu_shortcode_string_to_array($shortcode); $shortcode_id = ''; foreach ($defs as $key => $def) { $attr = $def['attribute']; $defs[$key]['default'] = $def['value']; if (array_key_exists($attr, $shortcode_attrs)) { $defs[$key]['value'] = $shortcode_attrs[$attr]; } $subblock_active = false; //detect if the dependencies of this attribute will be disabled or not if ($def['type'] == "onoff" && $defs[$key]['value'] == "true" || $def['type'] == "radio" && in_array("*" . $defs[$key]['value'], $def['listitems'])) { $subblock_active = true; } // assign dependencies if exist if ($def['dependencies'] != null) { foreach ($def['dependencies'] as $dependency) { if (substr($dependency, 0, 1) == "!") { //invert state for this dependency if an exclamation mark is defined $governors[substr($dependency, 1)] = array('attribute' => $attr, 'active' => !$subblock_active, 'inv' => '_inv'); } else { $governors[$dependency] = array('attribute' => $attr, 'active' => $subblock_active, 'inv' => ''); } } } if ($attr == 'uploadid' || $attr == 'browserid') { $shortcode_id = $defs[$key]['value']; } } //check if attributes need to be generated more than once because their governor is a component field that appears more than once in placements attribute $key = 0; while ($key < count($defs)) { $defs[$key]['additional_values'] = array(); $def = $defs[$key]; $attr = $def['attribute']; //check if this attribute needs to be generated more than once if (array_key_exists($attr, $governors)) { $governor = $governors[$attr]['attribute']; } else { $governor = ""; } if ($governor != "" && isset($components_indexed[$governor]) && $components_indexed[$governor]['multiplacements'] && isset($shortcode_attrs['placements'])) { //count how many occurrences of the governor attribute appear inside placements attribute $occurrences = 0; $sections = explode("/", $shortcode_attrs['placements']); foreach ($sections as $section) { $items_in_section = explode("+", trim($section)); foreach ($items_in_section as $item) { if (trim($item) == $governor) { $occurrences++; } } } //add indexed attributes if there is more than one occurrence for ($ii = 2; $ii <= $occurrences; $ii++) { $def2 = $def; $def2['attribute'] .= $ii; $def2['name'] .= ' (' . $ii . ')'; if (array_key_exists($def2['attribute'], $shortcode_attrs)) { $def2['value'] = $shortcode_attrs[$def2['attribute']]; } else { $def2['value'] = $def2['default']; } array_splice($defs, $key + 1, 0, array($def2)); $key++; } //check if the shortcode contains additional indexed definitions and store them in 'additional_values' $ii = max(1, $occurrences) + 1; while (array_key_exists($attr . $ii, $shortcode_attrs)) { $defs[$key]['additional_values'][$ii] = $shortcode_attrs[$attr . $ii]; $ii++; } } $key++; } $echo_str = '<div id="wfu_wrapper" class="wrap">'; $echo_str .= "\n\t" . '<h2>Wordpress File Upload Control Panel</h2>'; $echo_str .= "\n\t" . '<div id="wfu_page_obsolete_message" class="error" style="display:none;">'; $echo_str .= "\n\t\t" . '<p>' . WFU_DASHBOARD_PAGE_OBSOLETE . '</p>'; $echo_str .= "\n\t" . '</div>'; $echo_str .= "\n\t" . '<div id="wfu_update_rejected_message" class="error" style="display:none;">'; $echo_str .= "\n\t\t" . '<p>' . WFU_DASHBOARD_UPDATE_SHORTCODE_REJECTED . '</p>'; $echo_str .= "\n\t" . '</div>'; $echo_str .= "\n\t" . '<div id="wfu_update_failed_message" class="error" style="display:none;">'; $echo_str .= "\n\t\t" . '<p>' . WFU_DASHBOARD_UPDATE_SHORTCODE_FAILED . '</p>'; $echo_str .= "\n\t" . '</div>'; $echo_str .= "\n\t" . '<div style="margin-top:20px;">'; if (current_user_can('manage_options')) { $echo_str .= "\n\t" . '<a href="' . $siteurl . '/wp-admin/options-general.php?page=wordpress_file_upload&action=manage_mainmenu" class="button" title="go back">Go to Main Menu</a>'; } $echo_str .= "\n\t" . '</div>'; if ($widgetid == "") { $echo_str .= "\n\t" . '<h2 style="margin-bottom: 10px; margin-top: 20px;">' . ($data == "" ? 'Test' : $posttype . ' <strong>' . $postname . '</strong>') . ': Shortcode Composer for ' . $plugin_title . ' <strong>ID ' . $shortcode_id . '</strong></h2>'; } else { $echo_str .= "\n\t" . '<h2 style="margin-bottom: 10px; margin-top: 20px;">Sidebar <strong>' . $sidebar . '</strong>: Shortcode Composer for Uploader <strong>ID ' . $shortcode_id . '</strong></h2>'; } $echo_str .= "\n\t" . '<div style="margin-top:10px; display:inline-block;">'; if ($data != "") { $echo_str .= "\n\t\t" . '<input id="wfu_update_shortcode" type="button" value="Update" class="button-primary" disabled="disabled" onclick="wfu_save_shortcode()" /><span id="wfu_update_shortcode_wait" class="spinner" style="float:right; display:none;"></span>'; } $echo_str .= "\n\t\t" . '<input id="wfu_shortcode_original_enc" type="hidden" value="' . wfu_plugin_encode_string($shortcode_full) . '" />'; $echo_str .= "\n\t\t" . '<input id="wfu_shortcode_tag" type="hidden" value="' . $shortcode_tag . '" />'; $echo_str .= "\n\t\t" . '<input id="wfu_shortcode_postid" type="hidden" value="' . $postid . '" />'; $echo_str .= "\n\t\t" . '<input id="wfu_shortcode_posthash" type="hidden" value="' . $posthash . '" />'; $echo_str .= "\n\t\t" . '<input id="wfu_shortcode_position" type="hidden" value="' . $shortcode_position . '" />'; $echo_str .= "\n\t\t" . '<input id="wfu_shortcode_widgetid" type="hidden" value="' . $widgetid . '" />'; $echo_str .= "\n\t" . '</div>'; $echo_str .= "\n\t" . '<div style="margin-top:20px;">'; $echo_str .= "\n\t\t" . '<div class="wfu_shortcode_container">'; $echo_str .= "\n\t\t\t" . '<span><strong>Generated Shortcode</strong></span>'; $echo_str .= "\n\t\t\t" . '<span id="wfu_save_label" class="wfu_save_label">saved</span>'; $echo_str .= "\n\t\t\t" . '<textarea id="wfu_shortcode" class="wfu_shortcode" rows="5">[' . $shortcode_tag . ']</textarea>'; $echo_str .= "\n\t\t\t" . '<div id="wfu_attribute_defaults" style="display:none;">'; // remove hidden attributes from defs array foreach ($defs as $key => $def) { if ($def['type'] == "hidden") { unset($defs[$key]); } } foreach ($defs as $def) { $echo_str .= "\n\t\t\t\t" . '<input id="wfu_attribute_default_' . $def['attribute'] . '" type="hidden" value="' . $def['default'] . '" />'; } $echo_str .= "\n\t\t\t" . '</div>'; $echo_str .= "\n\t\t\t" . '<div id="wfu_attribute_values" style="display:none;">'; foreach ($defs as $def) { $echo_str .= "\n\t\t\t\t" . '<input id="wfu_attribute_value_' . $def['attribute'] . '" type="hidden" value="' . $def['value'] . '" />'; //add additional values, if exist foreach ($def['additional_values'] as $key => $val) { $echo_str .= "\n\t\t\t\t" . '<input id="wfu_attribute_value_' . $def['attribute'] . $key . '" type="hidden" value="' . $val . '" />'; } } $echo_str .= "\n\t\t\t" . '</div>'; $echo_str .= "\n\t\t" . '</div>'; $echo_str .= "\n\t" . '</div>'; $echo_str .= "\n\t" . '<h3 id="wfu_tab_container" class="nav-tab-wrapper">'; $is_first = true; foreach ($cats as $key => $cat) { $echo_str .= "\n\t\t" . '<a id="wfu_tab_' . $key . '" class="nav-tab' . ($is_first ? ' nav-tab-active' : '') . '" href="javascript: wfu_admin_activate_tab(\'' . $key . '\');">' . $cat . '</a>'; $is_first = false; } $echo_str .= "\n\t" . '</h3>'; $prevcat = ""; $prevsubcat = ""; $is_first = true; $block_open = false; $subblock_open = false; foreach ($defs as $def) { $attr = $def['attribute']; //check if this attribute depends on other if (!array_key_exists($attr, $governors)) { $governors[$attr] = ""; } if ($governors[$attr] != "") { $governor = $governors[$attr]; } else { $governor = array('attribute' => "independent", 'active' => true, 'inv' => ''); } //close previous blocks if ($def['parent'] == "") { if ($subblock_open) { $echo_str .= "\n\t\t\t\t\t\t\t" . '</tbody>'; $echo_str .= "\n\t\t\t\t\t\t" . '</table>'; $subblock_open = false; } if ($block_open) { $echo_str .= "\n\t\t\t\t\t" . '</div></td>'; $echo_str .= "\n\t\t\t\t" . '</tr>'; $block_open = false; } } //check if new category must be generated if ($def['category'] != $prevcat) { if ($prevcat != "") { $echo_str .= "\n\t\t\t" . '</tbody>'; $echo_str .= "\n\t\t" . '</table>'; $echo_str .= "\n\t" . '</div>'; } $prevcat = $def['category']; $prevsubcat = ""; $echo_str .= "\n\t" . '<div id="wfu_container_' . $prevcat . '" class="wfu_container"' . ($is_first ? '' : ' style="display:none;"') . '">'; $echo_str .= "\n\t\t" . '<table class="form-table wfu_main_table">'; $echo_str .= "\n\t\t\t" . '<thead><tr><th></th><td></td><td></td></tr></thead>'; $echo_str .= "\n\t\t\t" . '<tbody>'; $is_first = false; } //check if new sub-category must be generated if ($def['subcategory'] != $prevsubcat) { $prevsubcat = $def['subcategory']; $echo_str .= "\n\t\t\t\t" . '<tr class="wfu_subcategory">'; $echo_str .= "\n\t\t\t\t\t" . '<th scope="row" colspan="3">'; $echo_str .= "\n\t\t\t\t\t\t" . '<h3 style="margin-bottom: 10px; margin-top: 10px;">' . $prevsubcat . '</h3>'; $echo_str .= "\n\t\t\t\t\t" . '</th>'; $echo_str .= "\n\t\t\t\t" . '</tr>'; } //draw attribute element if ($def['parent'] == "") { $dlp = "\n\t\t\t\t"; } else { if (!$subblock_open) { $echo_str .= "\n\t\t\t\t\t\t" . '<div class="wfu_shadow wfu_shadow_' . $def['parent'] . $governor['inv'] . '" style="display:' . ($governor['active'] ? 'none' : 'block') . ';"></div>'; $echo_str .= "\n\t\t\t\t\t\t" . '<table class="form-table wfu_inner_table" style="margin:0;">'; $echo_str .= "\n\t\t\t\t\t\t\t" . '<tbody>'; } $dlp = "\n\t\t\t\t\t\t\t\t"; } $echo_str .= $dlp . '<tr>'; $echo_str .= $dlp . "\t" . '<th scope="row"><div class="wfu_td_div">'; if ($def['parent'] == "") { $echo_str .= $dlp . "\t\t" . '<div class="wfu_shadow wfu_shadow_' . $governor['attribute'] . $governor['inv'] . '" style="display:' . ($governor['active'] ? 'none' : 'block') . ';"></div>'; } $echo_str .= $dlp . "\t\t" . '<div class="wfu_restore_container" title="Double-click to restore defaults setting"><img src="' . WFU_IMAGE_ADMIN_RESTOREDEFAULT . '" ondblclick="wfu_apply_value(\'' . $attr . '\', \'' . $def['type'] . '\', \'' . $def['default'] . '\');" /></div>'; $echo_str .= $dlp . "\t\t" . '<label for="wfu_attribute_' . $attr . '">' . $def['name'] . '</label>'; $echo_str .= $dlp . "\t\t" . '<input type="hidden" name="wfu_attribute_governor_' . $governor['attribute'] . '" class="wfu_attribute_governor" value="' . $attr . '" />'; $echo_str .= $dlp . "\t\t" . '<div class="wfu_help_container" title="' . $def['help'] . '"><img src="' . WFU_IMAGE_ADMIN_HELP . '" /></div>'; $echo_str .= $dlp . "\t" . '</div></th>'; $echo_str .= $dlp . "\t" . '<td style="vertical-align:top;"><div class="wfu_td_div">'; if ($def['parent'] == "") { $echo_str .= $dlp . "\t\t" . '<div class="wfu_shadow wfu_shadow_' . $governor['attribute'] . $governor['inv'] . '" style="display:' . ($governor['active'] ? 'none' : 'block') . ';"></div>'; } if ($def['type'] == "onoff") { $echo_str .= $dlp . "\t\t" . '<div id="wfu_attribute_' . $attr . '" class="wfu_onoff_container_' . ($def['value'] == "true" ? "on" : "off") . '" onclick="wfu_admin_onoff_clicked(\'' . $attr . '\');">'; $echo_str .= $dlp . "\t\t\t" . '<div class="wfu_onoff_slider"></div>'; $echo_str .= $dlp . "\t\t\t" . '<span class="wfu_onoff_text">ON</span>'; $echo_str .= $dlp . "\t\t\t" . '<span class="wfu_onoff_text">OFF</span>'; $echo_str .= $dlp . "\t\t" . '</div>'; } elseif ($def['type'] == "text") { $val = str_replace(array("%n%", "%dq%", "%brl%", "%brr%"), array("\n", """, "[", "]"), $def['value']); $echo_str .= $dlp . "\t\t" . '<input id="wfu_attribute_' . $attr . '" type="text" name="wfu_text_elements" value="' . $val . '" />'; if ($def['variables'] != null) { $echo_str .= $dlp . wfu_insert_variables($def['variables'], 'wfu_variable wfu_variable_' . $attr); } } elseif ($def['type'] == "placements") { $components_used = array(); foreach ($components as $component) { $components_used[$component['id']] = 0; } $centered_content = '<div class="wfu_component_box_inner"><div class="wfu_component_box_label">XXX</div></div>'; $centered_content_multi = '<div class="wfu_component_box_inner"><div class="wfu_component_box_label">XXX</div><div class="wfu_component_box_index">YYY</div></div>'; $echo_str .= $dlp . "\t\t" . '<div class="wfu_placements_wrapper">'; $echo_str .= $dlp . "\t\t\t" . '<div id="wfu_placements_container" class="wfu_placements_container">'; $itemplaces = explode("/", $def['value']); foreach ($itemplaces as $section) { $echo_str .= $dlp . "\t\t\t\t" . '<div class="wfu_component_separator_hor"></div>'; $echo_str .= $dlp . "\t\t\t\t" . '<div class="wfu_component_separator_ver"></div>'; $items_in_section = explode("+", trim($section)); $section_array = array(); foreach ($items_in_section as $item_in_section) { if (key_exists($item_in_section, $components_indexed)) { if ($components_indexed[$item_in_section]['multiplacements'] || $components_used[$item_in_section] == 0) { $components_used[$item_in_section]++; if ($components_indexed[$item_in_section]['multiplacements']) { $multi_index = $components_used[$item_in_section]; $echo_str .= $dlp . "\t\t\t\t" . '<div id="wfu_component_box_' . $item_in_section . '_' . $multi_index . '" class="wfu_component_box" draggable="true" title="' . $components_indexed[$item_in_section]['help'] . '">' . str_replace(array("XXX", "YYY"), array($components_indexed[$item_in_section]['name'], $multi_index), $centered_content_multi) . '</div>'; } else { $echo_str .= $dlp . "\t\t\t\t" . '<div id="wfu_component_box_' . $item_in_section . '_0" class="wfu_component_box" draggable="true" title="' . $components_indexed[$item_in_section]['help'] . '">' . str_replace("XXX", $components_indexed[$item_in_section]['name'], $centered_content) . '</div>'; } $echo_str .= $dlp . "\t\t\t\t" . '<div class="wfu_component_separator_ver"></div>'; } } } } $echo_str .= $dlp . "\t\t\t\t" . '<div class="wfu_component_separator_hor"></div>'; $echo_str .= $dlp . "\t\t\t\t" . '<div id="wfu_component_bar_hor" class="wfu_component_bar_hor"></div>'; $echo_str .= $dlp . "\t\t\t\t" . '<div id="wfu_component_bar_ver" class="wfu_component_bar_ver"></div>'; $echo_str .= $dlp . "\t\t\t" . '</div>'; $echo_str .= $dlp . "\t\t\t" . '<div id="wfu_componentlist_container" class="wfu_componentlist_container">'; $echo_str .= $dlp . "\t\t\t\t" . '<div id="wfu_componentlist_dragdrop" class="wfu_componentlist_dragdrop" style="display:none;"></div>'; $ii = 1; foreach ($components as $component) { $echo_str .= $dlp . "\t\t\t\t" . '<div id="wfu_component_box_container_' . $component['id'] . '" class="wfu_component_box_container">'; $echo_str .= $dlp . "\t\t\t\t\t" . '<div class="wfu_component_box_base">' . str_replace("XXX", $component['name'], $centered_content) . '</div>'; if ($component['multiplacements']) { $multi_index = $components_used[$component['id']] + 1; $echo_str .= $dlp . "\t\t\t\t\t" . '<div id="wfu_component_box_' . $component['id'] . '_' . $multi_index . '" class="wfu_component_box wfu_inbase" draggable="true" title="' . $component['help'] . '">' . str_replace(array("XXX", "YYY"), array($component['name'], $multi_index), $centered_content_multi) . '</div>'; } elseif ($components_used[$component['id']] == 0) { $echo_str .= $dlp . "\t\t\t\t\t" . '<div id="wfu_component_box_' . $component['id'] . '_0" class="wfu_component_box wfu_inbase" draggable="true" title="' . $component['help'] . '">' . str_replace("XXX", $component['name'], $centered_content) . '</div>'; } $echo_str .= $dlp . "\t\t\t\t" . '</div>' . ($ii++ % 3 == 0 ? '<br />' : ''); } $echo_str .= $dlp . "\t\t\t" . '</div>'; $echo_str .= $dlp . "\t\t" . '</div>'; } elseif ($def['type'] == "ltext") { $val = str_replace(array("%n%", "%dq%", "%brl%", "%brr%"), array("\n", """, "[", "]"), $def['value']); $echo_str .= $dlp . "\t\t" . '<input id="wfu_attribute_' . $attr . '" type="text" name="wfu_text_elements" class="wfu_long_text" value="' . $val . '" />'; if ($def['variables'] != null) { $echo_str .= $dlp . wfu_insert_variables($def['variables'], 'wfu_variable wfu_variable_' . $attr); } } elseif ($def['type'] == "integer") { $val = str_replace(array("%n%", "%dq%", "%brl%", "%brr%"), array("\n", """, "[", "]"), $def['value']); $echo_str .= $dlp . "\t\t" . '<input id="wfu_attribute_' . $attr . '" type="number" name="wfu_text_elements" class="wfu_short_text" min="1" value="' . $val . '" />'; if (isset($def['listitems']['unit'])) { $echo_str .= $dlp . "\t\t" . '<label> ' . $def['listitems']['unit'] . '</label>'; } } elseif ($def['type'] == "float") { $val = str_replace(array("%n%", "%dq%", "%brl%", "%brr%"), array("\n", """, "[", "]"), $def['value']); $echo_str .= $dlp . "\t\t" . '<input id="wfu_attribute_' . $attr . '" type="number" name="wfu_text_elements" class="wfu_short_text" step="any" min="0" value="' . $val . '" />'; if (isset($def['listitems']['unit'])) { $echo_str .= $dlp . "\t\t" . '<label> ' . $def['listitems']['unit'] . '</label>'; } } elseif ($def['type'] == "date") { $val = $def['value']; $echo_str .= $dlp . "\t\t" . '<div class="wfu_date_container"><input id="wfu_attribute_' . $attr . '" type="text" value="' . $val . '" readonly style="padding-right:16px; background-color:white;" /><img class="wfu_datereset_button" src="' . WFU_IMAGE_ADMIN_SUBFOLDER_CANCEL . '" onclick="var f = document.getElementById(\'wfu_attribute_' . $attr . '\'); f.value = \'\'; wfu_update_date_value({target:f});" /></div><label style="font-size:smaller; margin-left:4px;">format: YYYY-MM-DD</label>'; $echo_str .= wfu_inject_js_code('jQuery(function() {jQuery("#wfu_attribute_' . $attr . '").datepicker({dateFormat: "yy-mm-dd", onClose: function(date, picker) {wfu_update_date_value({target:this});}});});'); } elseif ($def['type'] == "radio") { $echo_str .= $dlp . "\t\t"; $ii = 0; foreach ($def['listitems'] as $item) { $echo_str .= '<input name="wfu_radioattribute_' . $attr . '" type="radio" value="' . $item . '" ' . ($item == $def['value'] || $item == "*" . $def['value'] ? 'checked="checked" ' : '') . 'style="width:auto; margin:0px 2px 0px ' . ($ii++ == 0 ? '0px' : '8px') . ';" onchange="wfu_admin_radio_clicked(\'' . $attr . '\');" />' . ($item[0] == "*" ? substr($item, 1) : $item); } // $echo_str .= '<input type="button" class="button" value="empty" style="width:auto; margin:-2px 0px 0px 8px;" />'; } elseif ($def['type'] == "ptext") { $val = str_replace(array("%n%", "%dq%", "%brl%", "%brr%"), array("\n", """, "[", "]"), $def['value']); $parts = explode("/", $val); $singular = $parts[0]; if (count($parts) < 2) { $plural = $singular; } else { $plural = $parts[1]; } $echo_str .= $dlp . "\t\t" . '<span class="wfu_ptext_span">Singular</span><input id="wfu_attribute_s_' . $attr . '" type="text" name="wfu_ptext_elements" value="' . $singular . '" />'; if ($def['variables'] != null) { if (count($def['variables']) > 0) { $echo_str .= $dlp . "\t\t" . '<br /><span class="wfu_ptext_span"> </span>'; } } if ($def['variables'] != null) { $echo_str .= $dlp . wfu_insert_variables($def['variables'], 'wfu_variable wfu_variable_s_' . $attr); } $echo_str .= $dlp . "\t\t" . '<br /><span class="wfu_ptext_span">Plural</span><input id="wfu_attribute_p_' . $attr . '" type="text" name="wfu_ptext_elements" value="' . $plural . '" />'; if ($def['variables'] != null) { if (count($def['variables']) > 0) { $echo_str .= $dlp . "\t\t" . '<br /><span class="wfu_ptext_span"> </span>'; } } if ($def['variables'] != null) { $echo_str .= $dlp . wfu_insert_variables($def['variables'], 'wfu_variable wfu_variable_p_' . $attr, $dlp); } } elseif ($def['type'] == "mtext") { $val = str_replace(array("%n%", "%dq%", "%brl%", "%brr%"), array("\n", """, "[", "]"), $def['value']); $echo_str .= $dlp . "\t\t" . '<textarea id="wfu_attribute_' . $attr . '" name="wfu_text_elements" rows="5">' . $val . '</textarea>'; if ($def['variables'] != null) { $echo_str .= $dlp . wfu_insert_variables($def['variables'], 'wfu_variable wfu_variable_' . $attr); } } elseif ($def['type'] == "folderlist") { $echo_str .= $dlp . "\t\t" . '<div id="wfu_subfolders_inner_shadow_' . $attr . '" class="wfu_subfolders_inner_shadow" style="display:none;"></div>'; $subfolders = wfu_parse_folderlist($def['value']); $poptitle = "Populate list automatically with the first-level subfolders of the path defined in uploadpath"; $edittitle = "Allow the user to type the subfolder and filter the list during typing"; $echo_str .= $dlp . "\t\t" . '<input type="checkbox" id="wfu_subfolders_auto_' . $attr . '"' . (substr($def['value'], 0, 4) == "auto" ? ' checked="checked"' : '') . ' onchange="wfu_subfolders_auto_changed(\'' . $attr . '\');" title="' . $poptitle . '" /><label for="wfu_subfolders_auto_' . $attr . '" title="' . $poptitle . '"> Auto-populate list</label>'; $echo_str .= $dlp . "\t\t" . '<div style="display:' . (substr($def['value'], 0, 4) == "auto" ? 'inline' : 'none') . '; padding:0; margin:0 0 0 30px; background:none; border:none;"><input type="checkbox" id="wfu_subfolders_editable_' . $attr . '"' . (substr($def['value'], 0, 5) == "auto+" ? ' checked="checked"' : '') . ' onchange="wfu_subfolders_auto_changed(\'' . $attr . '\');" title="' . $edittitle . '" /><label for="wfu_subfolders_editable_' . $attr . '" title="' . $edittitle . '"> List is editable</label></div><br />'; $echo_str .= $dlp . "\t\t" . '<input type="hidden" id="wfu_subfolders_manualtext_' . $attr . '" value="' . (substr($def['value'], 0, 4) == "auto" ? "" : $def['value']) . '" />'; $echo_str .= $dlp . "\t\t" . '<select id="wfu_attribute_' . $attr . '" class="wfu_select_folders' . (count($subfolders['path']) == 0 ? ' wfu_select_folders_empty' : '') . '" size="7"' . (substr($def['value'], 0, 4) == "auto" ? ' disabled="disabled"' : '') . ' onchange="wfu_subfolders_changed(\'' . $attr . '\');">'; foreach ($subfolders['path'] as $ind => $subfolder) { if (substr($subfolder, -1) == '/') { $subfolder = substr($subfolder, 0, -1); } $subfolder_raw = explode('/', $subfolder); $subfolder = $subfolder_raw[count($subfolder_raw) - 1]; $text = str_repeat(" ", intval($subfolders['level'][$ind])) . $subfolders['label'][$ind]; $subvalue = str_repeat("*", intval($subfolders['level'][$ind])) . ($subfolders['default'][$ind] ? '&' : '') . ($subfolder == "" ? '{root}' : $subfolder) . '/' . $subfolders['label'][$ind]; $echo_str .= $dlp . "\t\t\t" . '<option class="' . ($subfolders['default'][$ind] ? 'wfu_select_folders_option_default' : '') . '" value="' . wfu_plugin_encode_string($subvalue) . '">' . $text . '</option>'; } $echo_str .= $dlp . "\t\t\t" . '<option value="">' . (substr($def['value'], 0, 4) != "auto" && count($subfolders['path']) == 0 ? 'press here' : '') . '</option>'; $echo_str .= $dlp . "\t\t" . '</select>'; $echo_str .= $dlp . "\t\t" . '<div id="wfu_subfolder_nav_' . $attr . '" class="wfu_subfolder_nav_container">'; $echo_str .= $dlp . "\t\t\t" . '<table class="wfu_subfolder_nav"><tbody>'; $echo_str .= $dlp . "\t\t\t\t" . '<tr><td><button id="wfu_subfolders_up_' . $attr . '" name="wfu_subfolder_nav_' . $attr . '" class="button" disabled="disabled" title="move item up" onclick="wfu_subfolders_up_clicked(\'' . $attr . '\');">↑</button></tr></td>'; $echo_str .= $dlp . "\t\t\t\t" . '<tr><td><button id="wfu_subfolders_left_' . $attr . '" name="wfu_subfolder_nav_' . $attr . '" class="button" title="make it parent" disabled="disabled" style="height:14px;" onclick="wfu_subfolders_left_clicked(\'' . $attr . '\');">←</button>'; $echo_str .= $dlp . "\t\t\t\t" . '<button id="wfu_subfolders_right_' . $attr . '" name="wfu_subfolder_nav_' . $attr . '" class="button" title="make it child" disabled="disabled" style="height:14px;" onclick="wfu_subfolders_right_clicked(\'' . $attr . '\');">→</button></tr></td>'; $echo_str .= $dlp . "\t\t\t\t" . '<tr><td><button id="wfu_subfolders_down_' . $attr . '" name="wfu_subfolder_nav_' . $attr . '" class="button" title="move item down" disabled="disabled" onclick="wfu_subfolders_down_clicked(\'' . $attr . '\');">↓</button></tr></td>'; $echo_str .= $dlp . "\t\t\t\t" . '<tr><td style="line-height:0;"><button class="button" style="visibility:hidden; height:10px;"></button></tr></td>'; $echo_str .= $dlp . "\t\t\t\t" . '<tr><td><button id="wfu_subfolders_add_' . $attr . '" name="wfu_subfolder_nav_' . $attr . '" class="button" title="add new item" disabled="disabled" style="height:14px;" onclick="wfu_subfolders_add_clicked(\'' . $attr . '\');">+</button></tr></td>'; $echo_str .= $dlp . "\t\t\t\t" . '<tr><td><button id="wfu_subfolders_def_' . $attr . '" name="wfu_subfolder_nav_' . $attr . '" class="button" title="make it default" disabled="disabled" style="height:14px;" onclick="wfu_subfolders_def_clicked(\'' . $attr . '\');">♦</button></tr></td>'; $echo_str .= $dlp . "\t\t\t\t" . '<tr><td><button id="wfu_subfolders_del_' . $attr . '" name="wfu_subfolder_nav_' . $attr . '" class="button" title="delete item" disabled="disabled" style="height:14px;" onclick="wfu_subfolders_del_clicked(\'' . $attr . '\');">-</button></tr></td>'; $echo_str .= $dlp . "\t\t\t" . '</tbody></table>'; $echo_str .= $dlp . "\t\t" . '</div>'; $echo_str .= $dlp . "\t\t" . '<div id="wfu_subfolder_tools_' . $attr . '" class="wfu_subfolder_tools_container wfu_subfolder_tools_disabled">'; $echo_str .= $dlp . "\t\t\t" . '<table class="wfu_subfolder_tools"><tbody><tr>'; $echo_str .= $dlp . "\t\t\t\t" . '<td style="width:40%;">'; $echo_str .= $dlp . "\t\t\t\t\t" . '<label>Label</label>'; $echo_str .= $dlp . "\t\t\t\t\t" . '<input id="wfu_subfolders_label_' . $attr . '" name="wfu_subfolder_tools_input" type="text" disabled="disabled" />'; $echo_str .= $dlp . "\t\t\t\t" . '</td>'; $echo_str .= $dlp . "\t\t\t\t" . '<td style="width:60%;"><div style="padding-right:36px;">'; $echo_str .= $dlp . "\t\t\t\t\t" . '<label>Path</label>'; $echo_str .= $dlp . "\t\t\t\t\t" . '<input id="wfu_subfolders_path_' . $attr . '" name="wfu_subfolder_tools_input" type="text" disabled="disabled" />'; $echo_str .= $dlp . "\t\t\t\t\t" . '<button id="wfu_subfolders_browse_' . $attr . '" class="button" title="browse folders" style="right:18px;" disabled="disabled" onclick="wfu_subfolders_browse_clicked(\'' . $attr . '\');"><img src="' . WFU_IMAGE_ADMIN_SUBFOLDER_BROWSE . '" ></button>'; $echo_str .= $dlp . "\t\t\t\t\t" . '<button id="wfu_subfolders_ok_' . $attr . '" class="button" title="save changes" style="right:0px;" disabled="disabled" onclick="wfu_subfolders_ok_clicked(\'' . $attr . '\');"><img src="' . WFU_IMAGE_ADMIN_SUBFOLDER_OK . '" ></button>'; // file browser dialog $echo_str .= $dlp . "\t\t\t\t\t" . '<div id="wfu_subfolders_browser_' . $attr . '" class="wfu_subfolders_browser_container" style="display:none;">'; $echo_str .= $dlp . "\t\t\t\t\t\t" . '<table><tbody>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t" . '<tr><td style="height:15px;">'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t" . '<div>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t\t" . '<label>Folder Browser</label>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t\t" . '<button class="button wfu_folder_browser_cancel" onclick="wfu_folder_browser_cancel_clicked(\'' . $attr . '\');"><img src="' . WFU_IMAGE_ADMIN_SUBFOLDER_CANCEL . '" ></button>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t" . '</div>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t" . '</td></tr>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t" . '<tr><td style="height:106px;">'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t" . '<div>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t\t" . '<select id="wfu_subfolders_browser_list_' . $attr . '" size="2" onchange="wfu_subfolders_browser_list_changed(\'' . $attr . '\');">'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t\t\t" . '<option>Value</option>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t\t\t" . '<option>Value2</option>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t\t\t" . '<option>Value3</option>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t\t" . '</select>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t\t" . '<div id="wfu_subfolders_browser_msgcont_' . $attr . '" class="wfu_folder_browser_loading_container" style="padding-top:40px;">'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t\t\t" . '<label id="wfu_subfolders_browser_msg_' . $attr . '" style="margin-bottom:4px;">loading folder contents...</label>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t\t\t" . '<img id="wfu_subfolders_browser_img_' . $attr . '" src="' . WFU_IMAGE_ADMIN_SUBFOLDER_LOADING . '" ></button>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t\t" . '</div>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t" . '</div>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t" . '</td></tr>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t" . '<tr><td align="right" style="height:15px;">'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t" . '<div>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t\t" . '<button class="button" onclick="wfu_folder_browser_cancel_clicked(\'' . $attr . '\');">Cancel</button>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t\t" . '<button id="wfu_subfolders_browser_ok_' . $attr . '" class="button">Ok</button>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t\t" . '</div>'; $echo_str .= $dlp . "\t\t\t\t\t\t\t" . '</td></tr>'; $echo_str .= $dlp . "\t\t\t\t\t\t" . '</tbody></table>'; $echo_str .= $dlp . "\t\t\t\t\t" . '</div>'; $echo_str .= $dlp . "\t\t\t\t" . '</div></td>'; $echo_str .= $dlp . "\t\t\t" . '</tr></tbody></table>'; $echo_str .= $dlp . "\t\t\t" . '<input id="wfu_subfolders_isnewitem_' . $attr . '" type="hidden" value="" />'; $echo_str .= $dlp . "\t\t\t" . '<input id="wfu_subfolders_newitemindex_' . $attr . '" type="hidden" value="" />'; $echo_str .= $dlp . "\t\t\t" . '<input id="wfu_subfolders_newitemlevel_' . $attr . '" type="hidden" value="" />'; $echo_str .= $dlp . "\t\t\t" . '<input id="wfu_subfolders_newitemlevel2_' . $attr . '" type="hidden" value="" />'; $echo_str .= $dlp . "\t\t" . '</div>'; } elseif ($def['type'] == "mchecklist") { $help_count = 0; foreach ($def['listitems'] as $key => $item) { $parts = explode("/", $item); if (count($parts) == 1) { $items[$key]['id'] = $item; $items[$key]['help'] = ''; } else { $items[$key]['id'] = $parts[0]; $items[$key]['help'] = $parts[1]; $help_count++; } } $def['value'] = strtolower($def['value']); if ($def['value'] == "all") { $selected = array(); } else { $selected = explode(",", $def['value']); } foreach ($selected as $key => $item) { $selected[$key] = trim($item); } $echo_str .= $dlp . "\t\t" . '<div id="wfu_attribute_' . $attr . '" class="wfu_mchecklist_container">'; $is_first = true; foreach ($items as $key => $item) { if (!$is_first) { $echo_str .= "<br />"; } $is_first = false; $echo_str .= $dlp . "\t\t\t" . '<div class="wfu_mchecklist_item"><input id="wfu_attribute_' . $attr . '_' . $key . '" type="checkbox"' . ($def['value'] == "all" || in_array($item['id'], $selected) ? ' checked="checked"' : '') . ($def['value'] == "all" ? ' disabled="disabled"' : '') . ' onchange="wfu_update_mchecklist_value(\'' . $attr . '\');" /><label for="wfu_attribute_' . $attr . '_' . $key . '">' . $item['id'] . '</label>'; if ($item['help'] != '') { $echo_str .= '<div class="wfu_help_container" title="' . $item['help'] . '"><img src="' . WFU_IMAGE_ADMIN_HELP . '" /></div>'; } $echo_str .= '</div>'; } $echo_str .= $dlp . "\t\t" . '</div>'; $echo_str .= $dlp . "\t\t" . '<div id="wfu_attribute_' . $attr . '_optionhelp" class="wfu_help_container" title="" style="display:none; position:absolute;"><img src="' . WFU_IMAGE_ADMIN_HELP . '" style="visibility:visible;" /></div>'; $echo_str .= $dlp . "\t\t" . '<div class="wfu_mchecklist_checkall"><input id="wfu_attribute_' . $attr . '_all" type="checkbox" onchange="wfu_update_mchecklist_value(\'' . $attr . '\');"' . ($def['value'] == "all" ? ' checked="checked"' : '') . ' /> Select all</div>'; } elseif ($def['type'] == "rolelist") { $roles = $wp_roles->get_names(); $selected = explode(",", $def['value']); $default_administrator = is_array($def['listitems']) && in_array('default_administrator', $def['listitems']); if (in_array('all', $selected)) { $rolesselected = $default_administrator ? array("administrator") : array(); } else { $rolesselected = $selected; } foreach ($selected as $key => $item) { $selected[$key] = trim($item); } $echo_str .= $dlp . "\t\t" . '<table class="wfu_rolelist_container"><tbody><tr><td>'; $echo_str .= $dlp . "\t\t" . '<select id="wfu_attribute_' . $attr . '" multiple="multiple" size="' . count($roles) . '" onchange="wfu_update_rolelist_value(\'' . $attr . '\');"' . (in_array('all', $selected) ? ' disabled="disabled"' : '') . '>'; foreach ($roles as $roleid => $rolename) { $echo_str .= $dlp . "\t\t\t" . '<option value="' . $roleid . '"' . (in_array($roleid, $rolesselected) ? ' selected="selected"' : '') . '>' . $rolename . '</option>'; } $echo_str .= $dlp . "\t\t" . '</select>'; $echo_str .= $dlp . "\t\t" . '</td><td>'; $echo_str .= $dlp . "\t\t" . '<div class="wfu_rolelist_checkbtn"><input class="' . ($default_administrator ? 'wfu_default_administrator' : '') . '" id="wfu_attribute_' . $attr . '_all" type="checkbox" onchange="wfu_update_rolelist_value(\'' . $attr . '\');"' . (in_array('all', $selected) ? ' checked="checked"' : '') . ' /><label for="wfu_attribute_' . $attr . '_all"> Select all</label></div><br />'; $echo_str .= $dlp . "\t\t" . '<div class="wfu_rolelist_checkbtn"><input id="wfu_attribute_' . $attr . '_guests" type="checkbox" onchange="wfu_update_rolelist_value(\'' . $attr . '\');"' . (in_array("guests", $selected) ? ' checked="checked"' : '') . ' /><label for="wfu_attribute_' . $attr . '_guests"> Include guests</label></div>'; $echo_str .= $dlp . "\t\t" . '</td></tr></tbody></table>'; } elseif ($def['type'] == "userlist") { $users = get_users(); $selected = explode(",", $def['value']); $default_0 = is_array($def['listitems']) && in_array('default_0', $def['listitems']); if (in_array('all', $selected)) { $usersselected = $default_0 ? array($users[0]->user_login) : array(); } else { $usersselected = $selected; } $only_current = false; $echo_str .= $dlp . "\t\t" . '<table class="wfu_userlist_container"><tbody><tr>'; if (is_array($def['listitems']) && in_array('include_current', $def['listitems'])) { $only_current = $def['value'] == 'current'; if ($only_current) { $usersselected = $default_0 ? array($users[0]->user_login) : array(); } $echo_str .= $dlp . "\t\t" . '<td colspan="2"><div class="wfu_userlist_checkbtn"><input id="wfu_attribute_' . $attr . '_current" type="checkbox" onchange="wfu_update_userlist_value(\'' . $attr . '\');"' . ($only_current ? ' checked="checked"' : '') . ' /><label for="wfu_attribute_' . $attr . '_current"> Only From Current User</label></div>'; $echo_str .= $dlp . "\t\t" . '</td></tr><tr>'; } $echo_str .= $dlp . "\t\t" . '<td><select id="wfu_attribute_' . $attr . '" multiple="multiple" size="' . min(count($users), 10) . '" onchange="wfu_update_userlist_value(\'' . $attr . '\');"' . ($only_current || in_array('all', $selected) ? ' disabled="disabled"' : '') . '>'; foreach ($users as $userid => $user) { $echo_str .= $dlp . "\t\t\t" . '<option value="' . $user->user_login . '"' . (in_array($user->user_login, $usersselected) ? ' selected="selected"' : '') . '>' . $user->display_name . ' (' . $user->user_login . ')</option>'; } $echo_str .= $dlp . "\t\t" . '</select>'; $echo_str .= $dlp . "\t\t" . '</td><td>'; $echo_str .= $dlp . "\t\t" . '<div class="wfu_userlist_checkbtn"><input class="' . ($default_0 ? 'wfu_default_0' : '') . '" id="wfu_attribute_' . $attr . '_all" type="checkbox" onchange="wfu_update_userlist_value(\'' . $attr . '\');"' . (in_array('all', $selected) ? ' checked="checked"' : '') . ($only_current ? ' disabled="disabled"' : '') . ' /><label for="wfu_attribute_' . $attr . '_all"> Select all</label></div><br />'; $echo_str .= $dlp . "\t\t" . '<div class="wfu_userlist_checkbtn"><input id="wfu_attribute_' . $attr . '_guests" type="checkbox" onchange="wfu_update_userlist_value(\'' . $attr . '\');"' . (in_array("guests", $selected) ? ' checked="checked"' : '') . ($only_current ? ' disabled="disabled"' : '') . ' /><label for="wfu_attribute_' . $attr . '_guests"> Include guests</label></div>'; $echo_str .= $dlp . "\t\t" . '</td></tr></tbody></table>'; } elseif ($def['type'] == "postlist") { $processed = false; if (is_array($def['listitems'])) { $has_current = in_array('include_current', $def['listitems']); if ($has_current) { unset($def['listitems'][array_search('include_current', $def['listitems'])]); } foreach ($def['listitems'] as $post_type) { // if a post type cannot be found then we reset the list so that it is not processed at all if (get_post_type_object($post_type) == null) { $def['listitems'] = array(); break; } } if (count($def['listitems']) > 0) { $selected = explode(",", $def['value']); $only_current = false; $echo_str .= $dlp . "\t\t" . '<input id="wfu_attribute_' . $attr . '_postlist" type="hidden" value="' . implode(",", $def['listitems']) . '" />'; $echo_str .= $dlp . "\t\t" . '<table class="wfu_postlist_container"><tbody><tr>'; if ($has_current) { $only_current = $def['value'] == 'current'; if ($only_current) { $sselected = array(); } $echo_str .= $dlp . "\t\t" . '<td colspan="' . count($def['listitems']) . '"><div class="wfu_postlist_checkbtn"><input id="wfu_attribute_' . $attr . '_current" type="checkbox" onchange="wfu_update_postlist_value(\'' . $attr . '\');"' . ($only_current ? ' checked="checked"' : '') . ' /><label for="wfu_attribute_' . $attr . '_current"> Only From Current Post/Page</label></div>'; $echo_str .= $dlp . "\t\t" . '</td></tr><tr>'; } $postargs = array('post_type' => $def['listitems'], 'post_status' => "publish,private,draft", 'posts_per_page' => -1); $posts = get_posts($postargs); $list = wfu_construct_post_list($posts); foreach ($def['listitems'] as $post_type) { $flatlist = wfu_flatten_post_list($list[$post_type]); $postobj = get_post_type_object($post_type); $echo_str .= $dlp . "\t\t" . '<td><div class="wfu_postlist_header"><label>' . $postobj->label . '</label><div class="wfu_postlist_selectall"><input id="wfu_attribute_' . $attr . '_all_' . $post_type . '" type="checkbox" onchange="wfu_update_postlist_value(\'' . $attr . '\');"' . (in_array('all', $selected) || in_array('all' . $post_type, $selected) ? ' checked="checked"' : '') . ($only_current ? ' disabled="disabled"' : '') . ' /><label for="wfu_attribute_' . $attr . '_all_' . $post_type . '"> Select all</label></div></div>'; $echo_str .= $dlp . "\t\t" . '<select id="wfu_attribute_' . $attr . '_' . $post_type . '" multiple="multiple" size="' . min(count($flatlist), 10) . '" onchange="wfu_update_postlist_value(\'' . $attr . '\');"' . ($only_current || in_array('all', $selected) || in_array('all' . $post_type, $selected) ? ' disabled="disabled"' : '') . '>'; foreach ($flatlist as $item) { $echo_str .= $dlp . "\t\t\t" . '<option value="' . $item['id'] . '"' . (in_array($item['id'], $selected) ? ' selected="selected"' : '') . '>' . str_repeat(' ', 4 * $item['level']) . ($item['status'] == 1 ? '[Private]' : ($item['status'] == 2 ? '[Draft]' : '')) . $item['title'] . '</option>'; } $echo_str .= $dlp . "\t\t" . '</select></td>'; } $echo_str .= $dlp . "\t\t" . '</tr></tbody></table>'; $processed = true; } } if (!$processed) { $val = str_replace(array("%n%", "%dq%", "%brl%", "%brr%"), array("\n", """, "[", "]"), $def['value']); $echo_str .= $dlp . "\t\t" . '<input id="wfu_attribute_' . $attr . '" type="text" name="wfu_text_elements" value="' . $val . '" />'; } } elseif ($def['type'] == "bloglist") { if (function_exists('wp_get_sites')) { $blogs = wp_get_sites(); $selected = explode(",", $def['value']); if (in_array('all', $selected)) { $blogsselected = array(); } else { $blogsselected = $selected; } $only_current = false; $echo_str .= $dlp . "\t\t" . '<table class="wfu_bloglist_container"><tbody><tr>'; if (is_array($def['listitems']) && in_array('include_current', $def['listitems'])) { $only_current = $def['value'] == 'current'; if ($only_current) { $blogsselected = array(); } $echo_str .= $dlp . "\t\t" . '<td colspan="2"><div class="wfu_bloglist_checkbtn"><input id="wfu_attribute_' . $attr . '_current" type="checkbox" onchange="wfu_update_bloglist_value(\'' . $attr . '\');"' . ($only_current ? ' checked="checked"' : '') . ' /><label for="wfu_attribute_' . $attr . '_current"> Only From Current Site</label></div>'; $echo_str .= $dlp . "\t\t" . '</td></tr><tr>'; } $echo_str .= $dlp . "\t\t" . '<td><select id="wfu_attribute_' . $attr . '" multiple="multiple" size="' . min(count($blogs), 10) . '" onchange="wfu_update_bloglist_value(\'' . $attr . '\');"' . ($only_current || in_array('all', $selected) ? ' disabled="disabled"' : '') . '>'; foreach ($blogs as $blog) { $echo_str .= $dlp . "\t\t\t" . '<option value="' . $blog->blog_id . '"' . (in_array($blog->blog_id, $blogsselected) ? ' selected="selected"' : '') . '>' . $blog->path . '</option>'; } $echo_str .= $dlp . "\t\t" . '</select>'; $echo_str .= $dlp . "\t\t" . '</td><td>'; $echo_str .= $dlp . "\t\t" . '<div class="wfu_bloglist_checkbtn"><input id="wfu_attribute_' . $attr . '_all" type="checkbox" onchange="wfu_update_bloglist_value(\'' . $attr . '\');"' . (in_array('all', $selected) ? ' checked="checked"' : '') . ($only_current ? ' disabled="disabled"' : '') . ' /><label for="wfu_attribute_' . $attr . '_all"> Select all</label></div>'; $echo_str .= $dlp . "\t\t" . '</td></tr></tbody></table>'; } else { $val = str_replace(array("%n%", "%dq%", "%brl%", "%brr%"), array("\n", """, "[", "]"), $def['value']); $echo_str .= $dlp . "\t\t" . '<input id="wfu_attribute_' . $attr . '" type="text" name="wfu_text_elements" value="' . $val . '" />'; } } elseif ($def['type'] == "stringmatch") { $matchfield = ""; $matchcriterion = "equal to"; $matchvalue = ""; preg_match('/^field:(.*?);\\s*criterion:(.*?)\\s*;\\s*value:(.*)$/', $def['value'], $matches); if (count($matches) == 4) { $matchfield = $matches[1]; $matchcriterion = $matches[2]; $matchvalue = $matches[3]; } $echo_str .= $dlp . "\t\t" . '<div style="white-space:nowrap;">'; $echo_str .= $dlp . "\t\t" . '<label>Field </label><input id="wfu_attribute_' . $attr . '_matchfield" type="text" name="wfu_stringmatch_elements" value="' . $matchfield . '" />'; $echo_str .= $dlp . "\t\t" . '<select id="wfu_attribute_' . $attr . '_matchcriterion" value="' . $matchcriterion . '" onchange="wfu_update_stringmatch_value(\'' . $attr . '\');">'; $echo_str .= $dlp . "\t\t\t" . '<option value="equal to"' . ($matchcriterion == "equal to" ? 'selected="selected"' : '') . '>equal to</option>'; $echo_str .= $dlp . "\t\t\t" . '<option value="starts with"' . ($matchcriterion == "starts with" ? 'selected="selected"' : '') . '>starts with</option>'; $echo_str .= $dlp . "\t\t\t" . '<option value="ends with"' . ($matchcriterion == "ends with" ? 'selected="selected"' : '') . '>ends with</option>'; $echo_str .= $dlp . "\t\t\t" . '<option value="contains"' . ($matchcriterion == "contains" ? 'selected="selected"' : '') . '>contains</option>'; $echo_str .= $dlp . "\t\t\t" . '<option value="not equal to"' . ($matchcriterion == "not equal to" ? 'selected="selected"' : '') . '>not equal to</option>'; $echo_str .= $dlp . "\t\t\t" . '<option value="does not start with"' . ($matchcriterion == "does not start with" ? 'selected="selected"' : '') . '>does not start with</option>'; $echo_str .= $dlp . "\t\t\t" . '<option value="does not end with"' . ($matchcriterion == "does not end with" ? 'selected="selected"' : '') . '>does not end with</option>'; $echo_str .= $dlp . "\t\t\t" . '<option value="does not contain"' . ($matchcriterion == "does not contain" ? 'selected="selected"' : '') . '>does not contain</option>'; $echo_str .= $dlp . "\t\t" . '</select>'; $echo_str .= $dlp . "\t\t" . '<input id="wfu_attribute_' . $attr . '_matchvalue" type="text" name="wfu_stringmatch_elements" value="' . $matchvalue . '" />'; $echo_str .= $dlp . "\t\t" . '</div>'; } elseif ($def['type'] == "columns") { $selected = explode(",", $def['value']); if (count($selected) == 1 && $selected[0] == "") { $selected = array(); } $echo_str .= $dlp . "\t" . '<table class="wfu_columns_container"><tbody><tr>'; $echo_str .= $dlp . "\t\t" . '<td>'; $echo_str .= $dlp . "\t\t\t" . '<label class="wfu_columns_listtitle">Available Columns</label><br />'; $echo_str .= $dlp . "\t\t\t" . '<select id="wfu_attribute_' . $attr . '_sourcelist" multiple="multiple" size="' . min(count($def['listitems']), 10) . '">'; foreach ($def['listitems'] as $item) { $item_required = substr($item, 0, 1) == "*"; if ($item_required) { $item = substr($item, 1); } $item_parts = explode("/", $item, 2); if (count($item_parts) == 1) { $item_name = $item; $item_label = $item . ($item_required ? ' (required)' : ''); } else { $item_name = $item_parts[0]; $item_label = $item_parts[1]; } $itemprops[$item_name] = array('label' => $item_label, 'required' => $item_required); $echo_str .= $dlp . "\t\t\t\t" . '<option value="' . $item_name . '"' . ($item_required ? ' class="wfu_columns_item_required"' : '') . ' onclick="wfu_columns_itemclicked(this);">' . $item_label . '</option>'; } $echo_str .= $dlp . "\t\t\t" . '</select>'; $echo_str .= $dlp . "\t\t" . '</td>'; foreach ($itemprops as $item_name => $prop) { if ($prop['required'] && !in_array($item_name, $selected)) { array_splice($selected, 0, 0, array($item_name)); } } $echo_str .= $dlp . "\t\t" . '<td align="center">'; $echo_str .= $dlp . "\t\t\t" . '<label class="wfu_columns_listtitle"></label><br />'; $echo_str .= $dlp . "\t\t\t" . '<button class="wfu_columns_addbutton" onclick="wfu_columns_buttonaction(\'' . $attr . '\', \'add\');">Add >></button><br />'; $echo_str .= $dlp . "\t\t\t" . '<button class="wfu_columns_addbutton" onclick="wfu_columns_buttonaction(\'' . $attr . '\', \'del\');"><< Remove</button>'; $echo_str .= $dlp . "\t\t" . '</td>'; $echo_str .= $dlp . "\t\t" . '<td>'; $echo_str .= $dlp . "\t\t\t" . '<label class="wfu_columns_listtitle">Displayed Columns</label><br />'; $echo_str .= $dlp . "\t\t\t" . '<select id="wfu_attribute_' . $attr . '" multiple="multiple" size="' . min(count($def['listitems']), 10) . '" onchange="wfu_update_columns(\'' . $attr . '\');">'; foreach ($selected as $item_name) { $echo_str .= $dlp . "\t\t\t\t" . '<option value="' . $item_name . '"' . ($itemprops[$item_name]['required'] ? ' class="wfu_columns_item_required"' : '') . ' onclick="wfu_columns_itemclicked(this);">' . $itemprops[$item_name]['label'] . '</option>'; } $echo_str .= $dlp . "\t\t\t" . '</select>'; $echo_str .= $dlp . "\t\t" . '</td>'; $echo_str .= $dlp . "\t\t" . '<td align="center">'; $echo_str .= $dlp . "\t\t\t" . '<label class="wfu_columns_listtitle"></label><br />'; $echo_str .= $dlp . "\t\t\t" . '<button class="wfu_columns_addbutton" onclick="wfu_columns_buttonaction(\'' . $attr . '\', \'up\');">↑</button><br />'; $echo_str .= $dlp . "\t\t\t" . '<button class="wfu_columns_addbutton" onclick="wfu_columns_buttonaction(\'' . $attr . '\', \'down\');">↓</button>'; $echo_str .= $dlp . "\t\t" . '</td>'; $echo_str .= $dlp . "\t" . '</tr></tbody></table>'; } elseif ($def['type'] == "dimensions") { $vals_arr = explode(",", $def['value']); $vals = array(); foreach ($vals_arr as $val_raw) { if (trim($val_raw) != "") { list($val_id, $val) = explode(":", $val_raw); $vals[trim($val_id)] = trim($val); } } $dims = array(); foreach ($components as $comp) { if ($comp['dimensions'] == null) { $dims[$comp['id']] = $comp['name']; } else { foreach ($comp['dimensions'] as $dimraw) { list($dim_id, $dim_name) = explode("/", $dimraw); $dims[$dim_id] = $dim_name; } } } foreach ($dims as $dim_id => $dim_name) { if (!array_key_exists($dim_id, $vals)) { $vals[$dim_id] = ""; } $echo_str .= $dlp . "\t\t" . '<span style="display:inline-block; width:130px;">' . $dim_name . '</span><input id="wfu_attribute_' . $attr . '_' . $dim_id . '" type="text" name="wfu_dimension_elements_' . $attr . '" class="wfu_short_text" value="' . $vals[$dim_id] . '" /><br />'; } } elseif ($def['type'] == "userfields") { $fields_arr = explode("/", $def['value']); $fields = array(); foreach ($fields_arr as $field_raw) { $is_req = substr($field_raw, 0, 1) == "*"; if ($is_req) { $field_raw = substr($field_raw, 1); } if ($field_raw != "") { array_push($fields, array("name" => $field_raw, "required" => $is_req)); } } if (count($fields) == 0) { array_push($fields, array("name" => "", "required" => false)); } $echo_str .= $dlp . "\t\t" . '<div id="wfu_attribute_' . $attr . '" class="wfu_userdata_container">'; foreach ($fields as $field) { $echo_str .= $dlp . "\t\t\t" . '<div class="wfu_userdata_line">'; $echo_str .= $dlp . "\t\t\t\t" . '<input type="text" name="wfu_userfield_elements" value="' . $field['name'] . '" />'; $echo_str .= $dlp . "\t\t\t\t" . '<div class="wfu_userdata_action" onclick="wfu_userdata_add_field(this);"><img src="' . WFU_IMAGE_ADMIN_USERDATA_ADD . '" ></div>'; $echo_str .= $dlp . "\t\t\t\t" . '<div class="wfu_userdata_action wfu_userdata_action_disabled" onclick="wfu_userdata_remove_field(this);"><img src="' . WFU_IMAGE_ADMIN_USERDATA_REMOVE . '" ></div>'; $echo_str .= $dlp . "\t\t\t\t" . '<input type="checkbox"' . ($field['required'] ? 'checked="checked"' : '') . ' onchange="wfu_update_userfield_value({target:this});" />'; $echo_str .= $dlp . "\t\t\t\t" . '<span>Required</span>'; $echo_str .= $dlp . "\t\t\t" . '</div>'; } $echo_str .= $dlp . "\t\t" . '</div>'; } elseif ($def['type'] == "formfields") { //get field type definitions $fielddefs_array = $def['listitems']; foreach ($fielddefs_array as $fielddef) { $fielddefs[$fielddef['type']] = $fielddef; } //initialize editable field properties $fieldprops_basic = array('required', 'donotautocomplete', 'validate', 'typehook', 'labelposition', 'hintposition', 'default', 'data', 'group', 'format'); $fieldprops_default = array("type" => "text", "label" => "", "labelposition" => "left", "required" => false, "donotautocomplete" => false, "validate" => false, "default" => "", "data" => "", "group" => "", "format" => "", "hintposition" => "right", "typehook" => false); //parse shortcode attribute to $fields $fields = wfu_parse_userdata_attribute($def['value']); $labelpositions = array("none", "top", "right", "bottom", "left"); $hintpositions = array("none", "inline", "top", "right", "bottom", "left"); if (count($fields) == 0) { array_push($fields, $fieldprops_default); } //set html template variable $template = $dlp . "\t\t\t\t" . '<table class="wfu_formdata_props_table"><tbody>'; $template .= $dlp . "\t\t\t\t" . '<tr><td colspan="2"><label class="wfu_formdata_label">Type</label><select id="wfu_formfield_[[key]]_type" value="[[t]]" onchange="wfu_formdata_type_changed(\'[[key]]\');">'; foreach ($fielddefs as $item) { $template .= $dlp . "\t\t\t\t\t" . '<option value="' . $item['type'] . '"[[type_' . $item['type'] . '_selected]]>' . $item['type_description'] . '</option>'; } $template .= $dlp . "\t\t\t\t" . '</select></td><td>'; $template .= $dlp . "\t\t\t\t" . '<div class="wfu_formdata_action wfu_formdata_action_add" onclick="wfu_formdata_add_field(\'[[key]]\');"><img src="' . WFU_IMAGE_ADMIN_USERDATA_ADD . '" ></div>'; $template .= $dlp . "\t\t\t\t" . '<div class="wfu_formdata_action wfu_formdata_action_remove[[remove_disabled]]" onclick="wfu_formdata_remove_field(\'[[key]]\');"><img src="' . WFU_IMAGE_ADMIN_USERDATA_REMOVE . '" ></div></td></tr>'; $template .= $dlp . "\t\t\t\t" . '<tr><td class="wfu_formdata_props"><label class="wfu_formdata_label">Label</label></td><td><input type="text" id="wfu_formfield_[[key]]_label" name="wfu_formfield_elements" value="[[label]]" /></td><td></td></tr>'; $labelpos_options = ""; foreach ($labelpositions as $pos) { $labelpos_options .= '<option value="' . $pos . '"[[labelposition_' . $pos . '_selected]]>' . $pos . '</option>'; } $template .= $dlp . "\t\t\t\t" . '<tr><td class="wfu_formdata_props"><label class="wfu_formdata_labelposition" title="[[labelposition_hint]]">Label Position</label></td><td><select id="wfu_formfield_[[key]]_labelposition" value="[[s]]" title="[[labelposition_hint]]" onchange="wfu_update_formfield_value({target:this});">' . $labelpos_options . '</select></td><td></td></tr>'; $template .= '[[R->]]' . $dlp . "\t\t\t\t" . '<tr><td colspan="2" class="wfu_formdata_props"><input id="wfu_formfield_[[key]]_required" type="checkbox"[[r->]] checked="checked"[[<-r]] title="[[required_hint]]" onchange="wfu_update_formfield_value({target:this});" /><label for="wfu_formfield_[[key]]_required" title="[[required_hint]]"> Required</label></td><td></td></tr>[[<-R]]'; $template .= '[[A->]]' . $dlp . "\t\t\t\t" . '<tr><td colspan="2" class="wfu_formdata_props"><input id="wfu_formfield_[[key]]_donotautocomplete" type="checkbox"[[a->]] checked="checked"[[<-a]] title="[[donotautocomplete_hint]]" onchange="wfu_update_formfield_value({target:this});" /><label for="wfu_formfield_[[key]]_donotautocomplete" title="[[donotautocomplete_hint]]"> Do not autocomplete</label></td><td></td></tr>[[<-A]]'; $template .= '[[V->]]' . $dlp . "\t\t\t\t" . '<tr><td colspan="2" class="wfu_formdata_props"><input id="wfu_formfield_[[key]]_validate" type="checkbox"[[v->]] checked="checked"[[<-v]] title="[[validate_hint]]" onchange="wfu_update_formfield_value({target:this});" /><label for="wfu_formfield_[[key]]_validate" title="[[validate_hint]]"> Validate</label></td><td></td></tr>[[<-V]]'; $hint_options = ""; foreach ($hintpositions as $pos) { $hint_options .= '<option value="' . $pos . '"[[hintposition_' . $pos . '_selected]]>' . $pos . '</option>'; } $template .= '[[P->]]' . $dlp . "\t\t\t\t" . '<tr><td class="wfu_formdata_props"><label class="wfu_formdata_label" title="[[hintposition_hint]]">Hint Position</label></td><td><select id="wfu_formfield_[[key]]_hintposition" value="[[p]]" title="[[hintposition_hint]]" onchange="wfu_update_formfield_value({target:this});">' . $hint_options . '</select></td><td></td></tr>[[<-P]]'; $template .= '[[H->]]' . $dlp . "\t\t\t\t" . '<tr><td colspan="2" class="wfu_formdata_props"><input id="wfu_formfield_[[key]]_typehook" type="checkbox"[[h->]] checked="checked"[[<-h]] title="[[typehook_hint]]" onchange="wfu_update_formfield_value({target:this});" /><label for="wfu_formfield_[[key]]_typehook" title="[[typehook_hint]]"> Type hook</label></td><td></td></tr>[[<-H]]'; $template .= '[[D->]]' . $dlp . "\t\t\t\t" . '<tr><td class="wfu_formdata_props"><label class="wfu_formdata_label" title="[[default_hint]]">Default</label></td><td><input id="wfu_formfield_[[key]]_default" type="text" name="wfu_formfield_elements" value="[[d]]" title="[[default_hint]]" /></td><td></td></tr>[[<-D]]'; $template .= '[[L->]]' . $dlp . "\t\t\t\t" . '<tr><td class="wfu_formdata_props"><label class="wfu_formdata_label" title="[[data_hint]]">[[data_label]]</label></td><td><input id="wfu_formfield_[[key]]_data" type="text" name="wfu_formfield_elements" value="[[l]]" title="[[data_hint]]" /></td><td></td></tr>[[<-L]]'; $template .= '[[G->]]' . $dlp . "\t\t\t\t" . '<tr><td class="wfu_formdata_props"><label class="wfu_formdata_label" title="[[group_hint]]">Group ID</label></td><td><input id="wfu_formfield_[[key]]_group" type="text" name="wfu_formfield_elements" value="[[g]]" title="[[group_hint]]" /></td><td></td></tr>[[<-G]]'; $template .= '[[F->]]' . $dlp . "\t\t\t\t" . '<tr><td class="wfu_formdata_props"><label class="wfu_formdata_label" title="[[format_hint]]">Format</label></td><td><input id="wfu_formfield_[[key]]_format" type="text" name="wfu_formfield_elements" value="[[f]]" title="[[format_hint]]" /></td><td></td></tr>[[<-F]]'; $template .= $dlp . "\t\t\t\t" . '</tbody></table>'; //draw html elements $echo_str .= $dlp . "\t\t" . '<div id="wfu_attribute_' . $attr . '" class="wfu_formdata_container">'; $echo_str .= $dlp . "\t\t\t" . '<div id="wfu_attribute_' . $attr . '_codeadd" style="display:none;">'; //pass template and type props to client javascript variable and then erase the code $echo_str .= $dlp . "\t\t\t\t" . '<script type="text/javascript">'; $echo_str .= $dlp . "\t\t\t\t\t" . 'var wfu_attribute_' . $attr . '_formtemplate = "' . wfu_plugin_encode_string($template) . '";'; $echo_str .= $dlp . "\t\t\t\t\t" . 'var wfu_attribute_' . $attr . '_typeprops = {};'; $fielddef_array = array(); foreach ($fielddefs as $item) { array_push($fielddef_array, $item['type']); } //prepare storage of field definitions to browser context $echo_str .= $dlp . "\t\t\t\t\t" . 'wfu_attribute_' . $attr . '_typeprops[0] = \'' . implode(",", $fielddef_array) . '\''; foreach ($fielddefs as $item) { $typeprops = array(); foreach ($fieldprops_basic as $prop) { array_push($typeprops, $prop . ': \'' . $item[$prop] . '\''); array_push($typeprops, $prop . '_hint: \'' . $item[$prop . '_hint'] . '\''); } array_push($typeprops, 'data_label: \'' . $item['data_label'] . '\''); $echo_str .= $dlp . "\t\t\t\t\t" . 'wfu_attribute_' . $attr . '_typeprops["' . $item['type'] . '"] = {' . implode(", ", $typeprops) . '};'; } $echo_str .= $dlp . "\t\t\t\t\t" . 'var self = document.getElementById("wfu_attribute_' . $attr . '_codeadd"); self.parentNode.removeChild(self);'; $echo_str .= $dlp . "\t\t\t\t" . '</script>'; $echo_str .= $dlp . "\t\t\t" . '</div>'; foreach ($fields as $field) { $ind = wfu_create_random_string(4); $key = $attr . "_" . $ind; $fielddef = $fielddefs[$field["type"]]; $echo_str .= $dlp . "\t\t\t" . '<div id="wfu_formfield_' . $key . '_container" class="wfu_formdata_line_container">'; //generate html elements from template, replacing variables where applicable $from_template = str_replace(array('[[key]]', '[[t]]', '[[label]]', '[[s]]', '[[d]]', '[[l]]', '[[data_label]]', '[[g]]', '[[f]]', '[[p]]'), array($key, $field['type'], $field['label'], $field['labelposition'], $field['default'], $field['data'], $fielddef['data_label'], $field['group'], $field['format'], $field['hintposition']), $template); foreach ($fieldprops_basic as $prop) { $from_template = str_replace('[[' . $prop . '_hint]]', str_replace('\\r\\n', "\r\n", $fielddef[$prop . '_hint']), $from_template); } foreach ($fielddefs as $item) { $from_template = str_replace('[[type_' . $item['type'] . '_selected]]', $item['type'] == $field['type'] ? ' selected = "selected"' : '', $from_template); } foreach ($labelpositions as $pos) { $from_template = str_replace('[[labelposition_' . $pos . '_selected]]', $pos == $field['labelposition'] ? ' selected = "selected"' : '', $from_template); } foreach ($hintpositions as $pos) { $from_template = str_replace('[[hintposition_' . $pos . '_selected]]', $pos == $field['hintposition'] ? ' selected = "selected"' : '', $from_template); } $from_template = str_replace('[[remove_disabled]]', count($fields) <= 1 ? ' wfu_formdata_action_disabled' : '', $from_template); //adjust checkbox field values $from_template = preg_replace('/\\[\\[r\\-\\>\\]\\]' . ($field['required'] ? '|' : '.*') . '\\[\\[\\<\\-r\\]\\]/', '', $from_template); $from_template = preg_replace('/\\[\\[a\\-\\>\\]\\]' . ($field['donotautocomplete'] ? '|' : '.*') . '\\[\\[\\<\\-a\\]\\]/', '', $from_template); $from_template = preg_replace('/\\[\\[v\\-\\>\\]\\]' . ($field['validate'] ? '|' : '.*') . '\\[\\[\\<\\-v\\]\\]/', '', $from_template); $from_template = preg_replace('/\\[\\[h\\-\\>\\]\\]' . ($field['typehook'] ? '|' : '.*') . '\\[\\[\\<\\-h\\]\\]/', '', $from_template); //adjust visibility of properties $from_template = preg_replace('/\\[\\[R\\-\\>\\]\\]' . (substr($fielddef["required"], 0, 4) == "show" ? '|' : '.*') . '\\[\\[\\<\\-R\\]\\]/s', '', $from_template); $from_template = preg_replace('/\\[\\[A\\-\\>\\]\\]' . (substr($fielddef["donotautocomplete"], 0, 4) == "show" ? '|' : '.*') . '\\[\\[\\<\\-A\\]\\]/s', '', $from_template); $from_template = preg_replace('/\\[\\[V\\-\\>\\]\\]' . (substr($fielddef["validate"], 0, 4) == "show" ? '|' : '.*') . '\\[\\[\\<\\-V\\]\\]/s', '', $from_template); $from_template = preg_replace('/\\[\\[P\\-\\>\\]\\]' . (substr($fielddef["hintposition"], 0, 4) == "show" ? '|' : '.*') . '\\[\\[\\<\\-P\\]\\]/s', '', $from_template); $from_template = preg_replace('/\\[\\[H\\-\\>\\]\\]' . (substr($fielddef["typehook"], 0, 4) == "show" ? '|' : '.*') . '\\[\\[\\<\\-H\\]\\]/s', '', $from_template); $from_template = preg_replace('/\\[\\[D\\-\\>\\]\\]' . (substr($fielddef["default"], 0, 4) == "show" ? '|' : '.*') . '\\[\\[\\<\\-D\\]\\]/s', '', $from_template); $from_template = preg_replace('/\\[\\[L\\-\\>\\]\\]' . (substr($fielddef["data"], 0, 4) == "show" ? '|' : '.*') . '\\[\\[\\<\\-L\\]\\]/s', '', $from_template); $from_template = preg_replace('/\\[\\[G\\-\\>\\]\\]' . (substr($fielddef["group"], 0, 4) == "show" ? '|' : '.*') . '\\[\\[\\<\\-G\\]\\]/s', '', $from_template); $from_template = preg_replace('/\\[\\[F\\-\\>\\]\\]' . (substr($fielddef["format"], 0, 4) == "show" ? '|' : '.*') . '\\[\\[\\<\\-F\\]\\]/s', '', $from_template); $echo_str .= $from_template; $echo_str .= $dlp . "\t\t\t" . '</div>'; } $echo_str .= $dlp . "\t\t" . '</div>'; } elseif ($def['type'] == "color") { $val = str_replace(array("%n%", "%dq%", "%brl%", "%brr%"), array("\n", """, "[", "]"), $def['value']); $echo_str .= $dlp . "\t\t" . '<input id="wfu_attribute_' . $attr . '" type="text" name="wfu_text_elements" class="wfu_color_field" value="' . $val . '" />'; } elseif ($def['type'] == "color-triplet") { $triplet = explode(",", $def['value']); foreach ($triplet as $key => $item) { $triplet[$key] = trim($item); } if (count($triplet) == 2) { $triplet = array($triplet[0], $triplet[1], "#000000"); } elseif (count($triplet) == 1) { $triplet = array($triplet[0], "#FFFFFF", "#000000"); } elseif (count($triplet) < 3) { $triplet = array("#000000", "#FFFFFF", "#000000"); } $echo_str .= $dlp . "\t\t" . '<div class="wfu_color_container"><label style="display:inline-block; width:120px; margin-top:-16px;">Text Color</label><input id="wfu_attribute_' . $attr . '_color" type="text" class="wfu_color_field" name="wfu_triplecolor_elements" value="' . $triplet[0] . '" /></div>'; $echo_str .= $dlp . "\t\t" . '<div class="wfu_color_container"><label style="display:inline-block; width:120px; margin-top:-16px;">Background Color</label><input id="wfu_attribute_' . $attr . '_bgcolor" type="text" class="wfu_color_field" name="wfu_triplecolor_elements" value="' . $triplet[1] . '" /></div>'; $echo_str .= $dlp . "\t\t" . '<div class="wfu_color_container"><label style="display:inline-block; width:120px; margin-top:-16px;">Border Color</label><input id="wfu_attribute_' . $attr . '_borcolor" type="text" class="wfu_color_field" name="wfu_triplecolor_elements" value="' . $triplet[2] . '" /></div>'; } else { $echo_str .= $dlp . "\t\t" . '<input id="wfu_attribute_' . $attr . '" type="text" name="wfu_text_elements" value="' . $def['value'] . '" />'; if ($def['variables'] != null) { $echo_str .= $dlp . wfu_insert_variables($def['variables'], 'wfu_variable wfu_variable_' . $attr); } } $echo_str .= $dlp . "\t" . '</div></td>'; if ($def['parent'] == "") { $echo_str .= $dlp . "\t" . '<td style="position:relative; vertical-align:top; padding:0;"><div class="wfu_td_div">'; $block_open = false; } else { $echo_str .= $dlp . '</tr>'; $subblock_open = true; } } if ($subblock_open) { $echo_str .= "\n\t\t\t\t\t\t" . '</div>'; } if ($block_open) { $echo_str .= "\n\t\t\t\t\t" . '</div></td>'; $echo_str .= "\n\t\t\t\t" . '</tr>'; } $echo_str .= "\n\t\t\t" . '</tbody>'; $echo_str .= "\n\t\t" . '</table>'; $echo_str .= "\n\t" . '</div>'; $echo_str .= "\n\t" . '<div id="wfu_global_dialog_container" class="wfu_global_dialog_container">'; $echo_str .= "\n\t" . '</div>'; $handler = 'function() { wfu_Attach_Admin_Events(' . ($data == "" ? 'true' : 'false') . '); }'; $echo_str .= "\n\t" . '<script type="text/javascript">if(window.addEventListener) { window.addEventListener("load", ' . $handler . ', false); } else if(window.attachEvent) { window.attachEvent("onload", ' . $handler . '); } else { window["onload"] = ' . $handler . '; }</script>'; $echo_str .= "\n" . '</div>'; // $echo_str .= "\n\t".'<div style="margin-top:10px;">'; // $echo_str .= "\n\t\t".'<label>Final shortcode text</label>'; // $echo_str .= "\n\t".'</div>'; echo $echo_str; }
function wordpress_file_upload_function($incomingfromhandler) { global $post; global $blog_id; $shortcode_tag = 'wordpress_file_upload'; $params = wfu_plugin_parse_array($incomingfromhandler); $sid = $params["uploadid"]; $widgetid = $params["widgetid"]; // store current page and blog id in params array $params["pageid"] = $post->ID; $params["blogid"] = $blog_id; if (!isset($_SESSION['wfu_token_' . $sid]) || $_SESSION['wfu_token_' . $sid] == "") { $_SESSION['wfu_token_' . $sid] = uniqid(mt_rand(), TRUE); } //store the server environment (32 or 64bit) for use when checking file size limits $params["php_env"] = wfu_get_server_environment(); $user = wp_get_current_user(); $widths = wfu_decode_dimensions($params["widths"]); $heights = wfu_decode_dimensions($params["heights"]); //additional parameters to pass to visualization routines $additional_params = array(); $additional_params['widths'] = $widths; $additional_params['heights'] = $heights; $uploadedfile = 'uploadedfile_' . $sid; $hiddeninput = 'hiddeninput_' . $sid; $adminerrorcodes = 'adminerrorcodes_' . $sid; $upload_clickaction = 'wfu_redirect_to_classic(' . $sid . ', \'' . $_SESSION['wfu_token_' . $sid] . '\' , 0, 0);'; //check if user is allowed to view plugin, otherwise do not generate it $uploadroles = explode(",", $params["uploadrole"]); foreach ($uploadroles as &$uploadrole) { $uploadrole = trim($uploadrole); } $plugin_upload_user_role = wfu_get_user_role($user, $uploadroles); if ($plugin_upload_user_role == 'nomatch') { return; } //activate debug mode only for admins if ($plugin_upload_user_role != 'administrator') { $params["debugmode"] = "false"; } $params["adminmessages"] = $params["adminmessages"] == "true" && $plugin_upload_user_role == 'administrator'; // define variable to hold any additional admin errors coming before processing of files (e.g. due to redirection) $params["adminerrors"] = ""; /* Define dynamic upload path from variables */ $search = array('/%userid%/', '/%username%/', '/%blogid%/', '/%pageid%/', '/%pagetitle%/'); if (is_user_logged_in()) { $username = $user->user_login; } else { $username = "******"; } $replace = array($user->ID, $username, $blog_id, $post->ID, get_the_title($post->ID)); $params["uploadpath"] = preg_replace($search, $replace, $params["uploadpath"]); /* Determine if userdata fields have been defined */ $userdata_fields = array(); $userdata_occurrencies = substr_count($params["placements"], "userdata"); if ($userdata_occurrencies == 0) { $userdata_occurrencies = 1; } if ($params["userdata"] == "true") { for ($i = 1; $i <= $userdata_occurrencies; $i++) { $userdata_fields2 = wfu_parse_userdata_attribute($params["userdatalabel" . ($i > 1 ? $i : "")]); foreach ($userdata_fields2 as $key => $item) { $userdata_fields2[$key]["occurrence"] = $i; } $userdata_fields = array_merge($userdata_fields, $userdata_fields2); } } $params["userdata_fields"] = $userdata_fields; /* If medialink or postlink is activated, then subfolders are deactivated */ if ($params["medialink"] == "true" || $params["postlink"] == "true") { $params["askforsubfolders"] = "false"; } /* Generate the array of subfolder paths */ $params['subfoldersarray'] = wfu_get_subfolders_paths($params); //____________________________________________________________________________________________________________________________________________________________________________________ if ($params['forceclassic'] != "true") { //**************section to put additional options inside params array************** $params['subdir_selection_index'] = "-1"; //**************end of section of additional options inside params array************** // below this line no other changes to params array are allowed //**************section to save params as Wordpress options************** // every params array is indexed (uniquely identified) by three fields: // - the page that contains the shortcode // - the id of the shortcode instance (because there may be more than one instances of the shortcode inside a page) // - the user that views the plugin (because some items of the params array are affected by the user name) // the wordpress option "wfu_params_index" holds an array of combinations of these three fields, together with a randomly generated string that corresponds to these fields. // the wordpress option "wfu_params_xxx", where xxx is the randomly generated string, holds the params array (encoded to string) that corresponds to this string. // the structure of the "wfu_params_index" option is as follows: "a1||b1||c1||d1&&a2||b2||c2||d2&&...", where // - a is the randomly generated string (16 characters) // - b is the page id // - c is the shortcode id // - d is the user name $params_index = wfu_generate_current_params_index($sid, $user->user_login); $params_str = wfu_encode_array_to_string($params); update_option('wfu_params_' . $params_index, $params_str); $ajax_params['shortcode_id'] = $sid; $ajax_params['params_index'] = $params_index; $ajax_params['debugmode'] = $params["debugmode"]; $ajax_params['is_admin'] = $plugin_upload_user_role == 'administrator' ? "true" : "false"; $ajax_params["error_header"] = $params["errormessage"]; $ajax_params["fail_colors"] = $params["failmessagecolors"]; $ajax_params_str = wfu_encode_array_to_string($ajax_params); $upload_clickaction = 'wfu_HTML5UploadFile(' . $sid . ', \'' . $ajax_params_str . '\', \'' . $_SESSION['wfu_token_' . $sid] . '\')'; } $upload_onclick = ' onclick="' . $upload_clickaction . '"'; $additional_params['clickaction'] = $upload_clickaction; /* Compose the html code for the plugin */ $wordpress_file_upload_output = ""; $plugin_style = ""; if ($widths["plugin"] != "") { $plugin_style .= 'width: ' . $widths["plugin"] . '; '; } if ($heights["plugin"] != "") { $plugin_style .= 'height: ' . $heights["plugin"] . '; '; } if ($plugin_style != "") { $plugin_style = ' style="' . $plugin_style . '"'; } $wordpress_file_upload_output .= '<div id="' . $shortcode_tag . '_block_' . $sid . '" class="file_div_clean' . ($params["fitmode"] == "responsive" ? '_responsive_container' : '') . ' wfu_container"' . $plugin_style . '>'; $wordpress_file_upload_output .= "\n\t" . '<input type="hidden" id="' . $shortcode_tag . '_' . $sid . '_widgetid" value="' . $widgetid . '" />'; //add visual editor overlay if the current user is administrator if (current_user_can('manage_options')) { $wordpress_file_upload_output .= wfu_add_visual_editor_button($shortcode_tag, $sid); } //read indexed component definitions $components = wfu_component_definitions(); $components_indexed = array(); foreach ($components as $component) { $components_indexed[$component['id']] = $component; $components_indexed[$component['id']]['occurrencies'] = 0; } $itemplaces = explode("/", $params["placements"]); foreach ($itemplaces as $section) { $items_in_section = explode("+", trim($section)); $section_array = array($params["fitmode"]); foreach ($items_in_section as $item_in_section) { $item_in_section = strtolower(trim($item_in_section)); if (isset($components_indexed[$item_in_section]) && ($components_indexed[$item_in_section]['multiplacements'] || $components_indexed[$item_in_section]['occurrencies'] == 0)) { $components_indexed[$item_in_section]['occurrencies']++; $occurrence_index = $components_indexed[$item_in_section]['multiplacements'] ? $components_indexed[$item_in_section]['occurrencies'] : 0; if ($item_in_section == "title") { array_push($section_array, wfu_prepare_title_block($params, $additional_params, $occurrence_index)); } elseif ($item_in_section == "filename") { array_push($section_array, wfu_prepare_textbox_block($params, $additional_params, $occurrence_index)); } elseif ($item_in_section == "selectbutton") { array_push($section_array, wfu_prepare_uploadform_block($params, $additional_params, $occurrence_index)); } elseif ($item_in_section == "uploadbutton" && $params["singlebutton"] != "true") { array_push($section_array, wfu_prepare_submit_block($params, $additional_params, $occurrence_index)); } elseif ($item_in_section == "subfolders") { array_push($section_array, wfu_prepare_subfolders_block($params, $additional_params, $occurrence_index)); } elseif ($item_in_section == "progressbar") { array_push($section_array, wfu_prepare_progressbar_block($params, $additional_params, $occurrence_index)); } elseif ($item_in_section == "message") { array_push($section_array, wfu_prepare_message_block($params, $additional_params, $occurrence_index)); } elseif ($item_in_section == "userdata" && $params["userdata"] == "true") { array_push($section_array, wfu_prepare_userdata_block($params, $additional_params, $occurrence_index)); } } } $wordpress_file_upload_output .= call_user_func_array("wfu_add_div", $section_array); } /* Append mandatory blocks, if have not been included in placements attribute */ if ($params["userdata"] == "true" && strpos($params["placements"], "userdata") === false) { $section_array = array($params["fitmode"]); array_push($section_array, wfu_prepare_userdata_block($params, $additional_params, 0)); $wordpress_file_upload_output .= call_user_func_array("wfu_add_div", $section_array); } if (strpos($params["placements"], "selectbutton") === false) { $section_array = array($params["fitmode"]); array_push($section_array, wfu_prepare_uploadform_block($params, $additional_params, 0)); $wordpress_file_upload_output .= call_user_func_array("wfu_add_div", $section_array); } /* Pass constants to javascript and run plugin post-load actions */ $consts = wfu_set_javascript_constants(); $handler = 'function() { wfu_Initialize_Consts("' . $consts . '"); wfu_plugin_load_action(' . $sid . '); }'; $wordpress_file_upload_output .= "\n\t" . '<script type="text/javascript">if(window.addEventListener) { window.addEventListener("load", ' . $handler . ', false); } else if(window.attachEvent) { window.attachEvent("onload", ' . $handler . '); } else { window["onload"] = ' . $handler . '; }</script>'; $wordpress_file_upload_output .= '</div>'; // $wordpress_file_upload_output .= '<div>'; // $wordpress_file_upload_output .= wfu_test_admin(); // $wordpress_file_upload_output .= '</div>'; // The plugin uses sessions in order to detect if the page was loaded due to file upload or // because the user pressed the Refresh button (or F5) of the page. // In the second case we do not want to perform any file upload, so we abort the rest of the script. if (!isset($_SESSION['wfu_check_refresh_' . $sid]) || $_SESSION['wfu_check_refresh_' . $sid] != "form button pressed") { $_SESSION['wfu_check_refresh_' . $sid] = 'do not process'; $wordpress_file_upload_output .= wfu_post_plugin_actions($params); return $wordpress_file_upload_output . "\n"; } $_SESSION['wfu_check_refresh_' . $sid] = 'do not process'; $params["upload_start_time"] = $_SESSION['wfu_start_time_' . $sid]; // The plugin uses two ways to upload the file: // - The first one uses classic functionality of an HTML form (highest compatibility with browsers but few capabilities). // - The second uses ajax (HTML5) functionality (medium compatibility with browsers but many capabilities, like no page refresh and progress bar). // The plugin loads using ajax functionality by default, however if it detects that ajax functionality is not supported, it will automatically switch to classic functionality. // The next line checks to see if the form was submitted using ajax or classic functionality. // If the uploaded file variable stored in $_FILES ends with "_redirected", then it means that ajax functionality is not supported and the plugin must switch to classic functionality. if (isset($_FILES[$uploadedfile . '_redirected'])) { $params['forceclassic'] = "true"; } if ($params['forceclassic'] != "true") { $wordpress_file_upload_output .= wfu_post_plugin_actions($params); return $wordpress_file_upload_output . "\n"; } // The following code is executed in case of non-ajax uploads to process the files. // Consecutive checks are performed in order to verify and approve the upload of files $wfu_checkpass = true; // First we test that WP nonce passes the check $wfu_checkpass = $wfu_checkpass && isset($_REQUEST["wfu_uploader_nonce"]) && wp_verify_nonce($_REQUEST["wfu_uploader_nonce"], "wfu-uploader-nonce") !== false; $unique_id = isset($_POST['uniqueuploadid_' . $sid]) ? sanitize_text_field($_POST['uniqueuploadid_' . $sid]) : ""; // Check that upload_id is valid $wfu_checkpass = $wfu_checkpass && strlen($unique_id) == 10; if ($wfu_checkpass) { //process any error messages due to redirection to non-ajax upload if (isset($_POST[$adminerrorcodes])) { $code = $_POST[$adminerrorcodes]; if ($code == "") { $params['adminerrors'] = ""; } elseif ($code == "1" || $code == "2" || $code == "3") { $params['adminerrors'] = constant('WFU_ERROR_REDIRECTION_ERRORCODE' . $code); } else { $params['adminerrors'] = WFU_ERROR_REDIRECTION_ERRORCODE0; } } $params['subdir_selection_index'] = -1; if (isset($_POST[$hiddeninput])) { $params['subdir_selection_index'] = sanitize_text_field($_POST[$hiddeninput]); } $wfu_process_file_array = wfu_process_files($params, 'no_ajax'); $safe_output = $wfu_process_file_array["general"]['safe_output']; unset($wfu_process_file_array["general"]['safe_output']); //javascript code generated from individual wfu_after_upload_filters is not executed in non-ajax uploads unset($wfu_process_file_array["general"]['js_script']); $wfu_process_file_array_str = wfu_encode_array_to_string($wfu_process_file_array); $ProcessUploadComplete_functiondef = 'function(){wfu_ProcessUploadComplete(' . $sid . ', 1, "' . $wfu_process_file_array_str . '", "no-ajax", "", "", "' . $safe_output . '", ["false", "", "false"]);}'; $wordpress_file_upload_output .= '<script type="text/javascript">window.onload=' . $ProcessUploadComplete_functiondef . '</script>'; } $wordpress_file_upload_output .= wfu_post_plugin_actions($params); return $wordpress_file_upload_output . "\n"; }