WordPress.org

Plugin Directory

Changeset 766567


Ignore:
Timestamp:
09/03/13 22:25:49 (8 months ago)
Author:
joedolson
Message:

Switch from trunk to tag. Commit development version.

Location:
my-content-management/trunk
Files:
2 added
7 edited

Legend:

Unmodified
Added
Removed
  • my-content-management/trunk/js/jquery.addfields.js

    r719617 r766567  
    2626    $('.del_field').attr('disabled','disabled'); 
    2727     
     28    $('#mcm-settings select').on('change',function() { 
     29        var selected = $(this).val(); 
     30        if ( selected == 'richtext' || selected == 'select' ) { 
     31            $(this).parents("tr:first").find('.mcm-repeatable').attr('disabled', true ); 
     32        } else { 
     33            $(this).parents("tr:first").find('.mcm-repeatable').removeAttr( 'disabled' ); 
     34        } 
     35    }); 
     36     
    2837    $(".up,.down").click(function(e){ 
    2938        e.preventDefault(); 
    30         $('#mcm-settings input[type=checkbox]').attr('disabled',true); 
     39        $('#mcm-settings input[class=mcm-delete]').attr('disabled',true); 
     40        $('#mcm-settings table tr').removeClass('fade'); 
    3141        var row = $(this).parents("tr:first"); 
    3242        if ($(this).is(".up")) { 
    33             row.insertBefore(row.prev()); 
     43            row.insertBefore(row.prev()).addClass('fade'); 
    3444        } else { 
    35             row.insertAfter(row.next()); 
     45            row.insertAfter(row.next()).addClass('fade'); 
    3646        } 
    3747    }); 
  • my-content-management/trunk/mcm-custom-posts.php

    r719617 r766567  
    88    global $mcm_types, $mcm_enabled; 
    99    $types = $mcm_types; $enabled = $mcm_enabled; 
    10      
    1110    if ( is_array( $enabled ) ) { 
    1211        foreach ( $enabled as $key ) { 
     
    3938                'rewrite' => array('slug'=>$slug,'with_front'=>false), 
    4039                'hierarchical' => $raw['hierarchical'], 
    41                 'menu_position' => 20, 
     40                'menu_position' => 15, 
    4241                'has_archive' => true, 
    4342                'supports' => $raw['supports'], 
    4443                'map_meta_cap'=>true, 
    45                 'capability_type'=>'post' // capability type is post type 
     44                'capability_type'=>'post', // capability type is post type 
     45                'taxonomies'=>array( 'post_tag' ) 
    4646            );  
    4747            register_post_type($key,$args); 
     
    7676} 
    7777 
    78  
    7978function mcm_taxonomies() { 
    8079    global $mcm_types,$mcm_enabled; 
     
    120119    if ( function_exists( 'add_meta_box' ) ) { 
    121120        foreach ( array_keys( $fields ) as $field ) { 
    122             //$id = sanitize_title($field); 
    123             add_meta_box( $field, $field, 'mcm_build_custom_box', $post_type, $location, 'default', $fields ); 
    124             //echo "$field, $post_type, $location, $fields"; 
     121            $id = sanitize_title($field); 
     122            add_meta_box( $id, $field, 'mcm_build_custom_box', $post_type, $location, 'default', $fields ); 
    125123        } 
    126124    } 
     
    130128    static $nonce_flag = false; 
    131129    // Run once 
     130    $id = $fields['title']; 
    132131    echo "<div class='mcm_post_fields'>"; 
    133132    if ( !$nonce_flag ) { 
    134133        mcm_echo_nonce(); 
    135         mcm_echo_hidden($fields['args'][$fields['id']]); 
    136134        $nonce_flag = true; 
    137135    } 
     136    mcm_echo_hidden($fields['args'][$id]);   
    138137    // Generate box contents 
    139138    $i = 0; 
    140     foreach ( $fields['args'][$fields['id']] as $field ) { 
     139    foreach ( $fields['args'][$id] as $field ) { 
    141140        echo mcm_field_html( $field ); 
    142141        $i++; 
     
    155154        case 'upload': 
    156155            return mcm_upload_field( $args ); 
     156        case 'chooser': 
     157            return mcm_chooser_field( $args ); 
     158        case 'richtext': 
     159            return mcm_rich_text_area( $args ); 
    157160        default: 
    158161            return mcm_text_field( $args, $args[3] ); 
     
    174177} 
    175178 
    176 add_action( 'save_post', 'mcm_save_postdata', 1, 2 ); 
    177 // this is the default text field meta box 
    178  
    179179function mcm_upload_field( $args ) { 
    180180    global $post; 
    181181    $description = $args[2]; 
    182182    // adjust data 
    183     $args[2] = get_post_meta($post->ID, $args[0], true); 
    184     $args[1] = __($args[1], 'sp' ); 
    185     if(!empty($args[2]) && $args[2] != '0') { 
    186         $download = '<p><a href="'.$args[2].'">View '.$args[1].'</a></p>'; 
    187     } 
     183    $single = true; 
     184    $download = ''; 
     185    if ( isset( $args[4] ) && $args[4] == 'true' ) {  $single = false; }     
     186    $args[2] = get_post_meta($post->ID, $args[0], $single); 
     187    if ( !empty($args[2]) && $args[2] != '0' ) { 
     188        if ( $single ) { 
     189            $download = '<div><a href="'.$args[2].'">View '.$args[1].'</a></div>'; 
     190        } else { 
     191            $download = "<ul>"; 
     192            $i = 0; 
     193            foreach ( $args[2] as $file ) { 
     194                if ( $file != '' ) { 
     195                    $short = str_replace( site_url(), '', $file ); 
     196                    $download .= '<li><input type="checkbox" id="del-'.$args[0].$i.'" name="mcm_delete['.$args[0].'][]" value="'.$file.'" /> <label for="del-'.$args[0].$i.'">'.__('Delete','my-content-management').'</label> <a href="'.$short.'">'.$short.'</a></li>'; 
     197                    $i++; 
     198                } 
     199            } 
     200            $download .= "</ul>"; 
     201        } 
     202    } else { 
     203        $download = ''; 
     204    } 
    188205    $max_upload = (int)(ini_get('upload_max_filesize')); 
    189206    $max_post = (int)(ini_get('post_max_size')); 
     
    191208    $upload_mb = min($max_upload, $max_post, $memory_limit); 
    192209    $label_format = 
    193         '<p class="mcm_text_field mcm_field"><label for="%1$s"><strong>%2$s</strong></label><br />'. 
    194         '<input style="width: 80%%;" type="file" name="%1$s" value="%3$s" id="%1$s" /><br />'. 
     210        '<div class="mcm_text_field mcm_field"><label for="%1$s"><strong>%2$s</strong></label><br />'. 
     211        '<input style="width: 80%;" type="file" name="%1$s" id="%1$s" /><br />'. 
    195212        sprintf( __( "Upload limit: %s MB",'my-content-management' ),$upload_mb ); 
    196         if ( $description != '' ) { $label_format .= '<br /><em>'.$description.'</em></p>'; } else { $label_format .= '</p>'; } 
     213        if ( $description != '' ) { $label_format .= '<br /><em>'.$description.'</em>'; }  
    197214        if ( $download != '' ) { $label_format .= $download; } 
     215        $label_format .= "</div>"; 
     216        return vsprintf( $label_format, $args ); 
     217} 
     218 
     219function mcm_chooser_field( $args ) { 
     220    global $post; 
     221    $description = $args[2]; 
     222    // adjust data 
     223    $single = true; 
     224    $download = ''; 
     225    if ( isset( $args[4] ) && $args[4] == 'true' ) {  $single = false; }  
     226    $args[2] = get_post_meta($post->ID, $args[0], $single ); 
     227    if(!empty($args[2]) && $args[2] != '0') { 
     228        if ( $single ) { 
     229            $download = wp_get_attachment_url( $args[2] ); 
     230            $img = wp_get_attachment_image( $args[2], 'thumbnail' ); 
     231            $download = '<a href="'.$download.'">'.$img.'</a>'; 
     232            $copy = __('Change Media','my-content-management'); 
     233        } else { 
     234            $i = 0; 
     235            foreach ( $args[2] as $attachment ) { 
     236                $url = wp_get_attachment_url( $attachment ); 
     237                $img = wp_get_attachment_image( $attachment, array(80,80) ); 
     238                $download .= '<div class="mcm-chooser-image"><a href="'.$url.'">'.$img.'</a><span class="mcm-delete"><input type="checkbox" id="del-'.$args[0].$i.'" name="mcm_delete['.$args[0].'][]" value="'.$attachment.'" /> <label for="del-'.$args[0].$i.'">'.__('Delete','my-content-management').'</label></span></div> '; 
     239                $i++; 
     240            } 
     241            $copy = __('Add Media','my-content-management'); 
     242        } 
     243    } else { 
     244        $copy = __('Choose Media','my-content-management'); 
     245    } 
     246    $label_format = 
     247        '<div class="mcm_text_field mcm_field field-holder"><label for="%1$s"><strong>%2$s</strong></label> '. 
     248        '<input type="hidden" name="%1$s" value="" class="textfield" id="%1$s" /> <a href="#" class="button textfield-field">'.$copy.'</a><br />'; 
     249        $label_format .= '<br /><div class="selected">'.$description.'</div>'; 
     250        if ( $download != '' ) { $label_format .= $download; } 
     251        $label_format .= "</div>"; 
    198252        return vsprintf( $label_format, $args ); 
    199253} 
     
    203257    if ( $type == 'mcm_text_field' ) { $type = 'text'; } else { $type = ( in_array( $type, $types ) )?$type:'text'; } 
    204258    global $post; 
     259    $name = $args[0]; 
     260    $label = $args[1]; 
    205261    $description = $args[2]; 
    206     $args[4] = $type; 
    207262    // adjust data 
    208     $args[2] = esc_attr( get_post_meta($post->ID, $args[0], true) ); 
    209     $args[1] = __($args[1], 'sp' ); 
    210     $label_format = 
    211         '<p class="mcm_text_field mcm_field"><label for="%1$s"><strong>%2$s</strong></label><br />'. 
    212         '<input style="width: 80%%;" type="%4$s" name="%1$s" value="%3$s" id="%1$s" />'; 
    213         if ( $description != '' ) { $label_format .= '<br /><em>'.$description.'</em></p>'; } else { $label_format .= '</p>'; } 
    214         return vsprintf( $label_format, $args ); 
     263    $single = true; 
     264    if ( isset( $args[4] ) && $args[4] == 'true' ) {  $single = false; } 
     265    $meta = get_post_meta($post->ID, $name, $single); 
     266    $value = ( $single ) ? $meta : ''; 
     267    $output = "<div class='mcm_text_field mcm_field'>"; 
     268        $output .= 
     269        '<p> 
     270            <label for="'.$name.'"><strong>'.$label.'</strong></label><br /> 
     271            <input style="width: 80%;" type="'.$type.'" name="'.$name.'" value="'.$value.'" id="'.$name.'" /> 
     272        </p>'; 
     273        if ( is_array( $meta ) ) { 
     274            $i = 1; 
     275            $output .= "<ul>"; 
     276            foreach ( $meta as $field ) { 
     277                if ( $field != '' ) { 
     278                    $field = htmlentities($field);               
     279                    $output .= 
     280                    '<li><span class="mcm-delete"><input type="checkbox" id="del-'.$name.$i.'" name="mcm_delete['.$name.'][]" value="'.$field.'" /> <label for="del-'.$name.$i.'">'.__('Delete','my-content-management').'</label></span> '.$field.'</li>'; 
     281                    $i++; 
     282                } 
     283            } 
     284            $output .= "</ul>"; 
     285        } 
     286    if ( $description != '' ) { $output .= '<em>'.$description.'</em>'; } 
     287    $output .= "</div>"; 
     288    return $output; 
    215289} 
    216290 
    217291function mcm_select( $args ) { 
    218         global $post; 
    219         $choices = $args[2]; 
    220         $custom = get_post_meta( $post->ID, $args[0], true ); 
    221         $label_format = '<p class="mcm_select mcm_field"><label for="%1$s"><strong>%2$s</strong></label><br />'. 
     292    global $post; 
     293    $choices = $args[2]; 
     294    $single = true; 
     295    if ( isset( $args[4] ) && $args[4] == 'true' ) {  $single = false; }     
     296    $args[2] = get_post_meta($post->ID, $args[0], $single); 
     297    $label_format = '<p class="mcm_select mcm_field"><label for="%1$s"><strong>%2$s</strong></label><br />'. 
    222298        '<select name="%1$s" id="%1$s">'. 
    223299            mcm_create_options( $choices, $custom ). 
    224300        '</select></p>'; 
    225         return vsprintf( $label_format, $args ); 
    226 } 
    227  
    228 // this is the text area meta box 
    229 function mcm_text_area ( $args ) { 
     301    return vsprintf( $label_format, $args ); 
     302} 
     303 
     304 
     305function mcm_text_area( $args ) { 
    230306    global $post; 
     307    $name = $args[0]; 
     308    $label = $args[1]; 
    231309    $description = $args[2]; 
    232310    // adjust data 
    233     $args[2] = get_post_meta($post->ID, $args[0], true); 
    234     $args[1] = __($args[1], 'sp' ); 
    235     $label_format = 
    236         '<p class="mcm_textarea mcm_field"><label for="%1$s"><strong>%2$s</strong></label><br />'. 
    237         '<textarea style="width: 90%%;" name="%1$s">%3$s</textarea>'; 
    238         if ( $description != '' ) { $label_format .= '<br /><em>'.$description.'</em></p>'; } else { $label_format .= '</p>'; } 
    239     return vsprintf( $label_format, $args ); 
     311    $single = true; 
     312    if ( isset( $args[4] ) && $args[4] == 'true' ) {  $single = false; } 
     313    $meta = get_post_meta($post->ID, $name, $single); 
     314    $value = ( $single ) ? $meta : ''; 
     315    $output = "<div class='mcm_textarea mcm_field'>"; 
     316        $output .= 
     317        '<p> 
     318            <label for="'.$name.'"><strong>'.$label.'</strong></label><br /> 
     319            <textarea style="width: 90%;" name="'.$name.'" id="'.$name.'">'.$value.'</textarea> 
     320        </p>'; 
     321        if ( is_array( $meta ) ) { 
     322            $i = 1; 
     323            $output .= "<ul>"; 
     324            foreach ( $meta as $field ) { 
     325                if ( $field != '' ) { 
     326                    $field = htmlentities($field); 
     327                    $output .= 
     328                    '<li><span class="mcm-delete"><input type="checkbox" id="del-'.$name.$i.'" name="mcm_delete['.$name.'][]" value="'.$field.'" /> <label for="del-'.$name.$i.'">'.__('Delete','my-content-management').'</label></span> '.$field.'</li>'; 
     329                    $i++; 
     330                } 
     331            } 
     332            $output .= "</ul>"; 
     333        } 
     334    if ( $description != '' ) { $output .= '<em>'.$description.'</em>'; } 
     335    $output .= "</div>"; 
     336    return $output; 
     337} 
     338 
     339// this is the text area meta box 
     340function mcm_rich_text_area ( $args ) { 
     341    global $post; 
     342    // adjust data 
     343    $single = true; 
     344    if ( isset( $args[4] ) && $args[4] == 'true' ) {  $single = false; }     
     345    $args[2] = get_post_meta($post->ID, $args[0], $single); 
     346    $meta = $args[2]; 
     347    $id = str_replace( array( '_','-'), '', $args[0] );  
     348    $editor_args = array( 'textarea_name'=>$args[0], 'editor_css'=>'<style>background: #fff;</style>', 'editor_class'=>'mcm_rich_text_editor' ); 
     349    echo wp_editor( $meta, $id, $editor_args ); 
    240350} 
    241351 
    242352/* When the post is saved, saves our custom data */ 
    243  
     353add_action( 'save_post', 'mcm_save_postdata', 1, 2 ); 
    244354function mcm_save_postdata($post_id, $post) { 
     355    if ( empty($_POST) || ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) || wp_is_post_revision($post_id) || isset($_POST['_inline_edit']) ) { return $post_id; } 
     356 
    245357    global $mcm_fields; 
    246358    $fields = $mcm_fields; 
     
    252364            return $post->ID; 
    253365        } 
    254     // Is the user allowed to edit the post or page? 
    255     if ( 'page' == $_POST['post_type'] ) { 
    256         if ( ! current_user_can( 'edit_page', $post->ID )) { 
    257             return $post->ID; 
     366        // Is the user allowed to edit the post or page? 
     367        if ( 'page' == $_POST['post_type'] ) { 
     368            if ( ! current_user_can( 'edit_page', $post->ID )) { 
     369                return $post->ID; 
     370            } 
     371        } else { 
     372            if ( ! current_user_can( 'edit_post', $post->ID )) { 
     373                return $post->ID; 
     374            } 
     375        } 
     376        $these_fields = array();         
     377        if ( isset( $_POST['mcm_fields'] ) ) { 
     378            $these_fields = $_POST['mcm_fields']; 
     379        } else { 
     380            return; 
     381        } 
     382        // OK, we're authenticated: we need to find and save the data 
     383        if ( isset( $_POST['mcm_delete'] ) ) { 
     384            foreach ( $_POST['mcm_delete'] as $data=>$deletion ) { 
     385                foreach ( $deletion as $delete ) { 
     386                    if ( $delete != '' ) { 
     387                        delete_post_meta( $post->ID, $data, $delete ); 
     388                    } 
     389                } 
     390            } 
     391        }    
     392        foreach ( $fields as $field ) { 
     393            foreach ( $field as $key=>$value ) { 
     394                if ( in_array( $value[0], $these_fields ) ) { 
     395                    if ( isset( $_POST[$value[0]] ) && ( !isset($value[4]) || $value[4] != 'true' ) ) { 
     396                        update_post_meta( $post->ID, $value[0], $_POST[$value[0]] ); 
     397                    } 
     398                    if ( isset( $_POST[$value[0]] ) && isset($value[4]) && $value[4] == 'true' ) { 
     399                        if ( $_POST[$value[0]] != '' ) { 
     400                            add_post_meta( $post->ID, $value[0], $_POST[$value[0]] ); 
     401                        } 
     402                    }                
     403                    if(!empty($_FILES[$value[0]])) { 
     404                        $file   = $_FILES[$value[0]]; 
     405                        $upload = wp_handle_upload($file, array('test_form' => false)); 
     406                        if(!isset($upload['error']) && isset($upload['file'])) { 
     407                            $filetype   = wp_check_filetype(basename($upload['file']), null); 
     408                            $title      = $file['name']; 
     409                            $ext        = strrchr($title, '.'); 
     410                            $title      = ($ext !== false) ? substr($title, 0, -strlen($ext)) : $title; 
     411                            $attachment = array( 
     412                                'post_mime_type'    => $filetype['type'], 
     413                                'post_title'        => addslashes($title), 
     414                                'post_content'      => '', 
     415                                'post_status'       => 'inherit', 
     416                                'post_parent'       => $post->ID 
     417                            ); 
     418                            $attach_id = wp_insert_attachment($attachment, $upload['file']); 
     419                            $url = wp_get_attachment_url( $attach_id ); 
     420                            if ( !isset( $value[4] ) || $value[4] != 'true' ) { 
     421                                update_post_meta( $post->ID, $value[0], $url ); 
     422                            } else if ( $value[4] == 'true' ) { 
     423                                add_post_meta( $post->ID, $value[0], $url ); 
     424                            } 
     425                        } 
     426                    } 
     427                    if ( empty( $_FILES[$value[0]]['name'] ) && !isset( $_POST[$value[0]] ) ) { 
     428                        if ( mcm_is_repeatable( $value ) && mcm_has_value( $post->ID, $value[0] ) ) { 
     429                            // do something here? ... 
     430                        } else { 
     431                            update_post_meta( $post->ID, $value[0], '' ); 
     432                        } 
     433                    } 
     434                } 
     435            } 
     436        } 
     437    } 
     438} 
     439 
     440function mcm_is_repeatable( $value ) { 
     441    if ( is_array( $value ) ) { 
     442        if ( isset($value[4]) && $value[4] == 'true' ) { 
     443            return true;  
    258444        } 
    259445    } else { 
    260         if ( ! current_user_can( 'edit_post', $post->ID )) { 
    261             return $post->ID; 
    262         } 
    263     } 
    264         // OK, we're authenticated: we need to find and save the data 
    265         foreach ( $fields as $field ) { 
    266             foreach ( $field as $key=>$value ) {     
    267                 if (isset($_POST[$value[0]]) ) { 
    268                     $my_data[$value[0]] = $_POST[$value[0]]; 
    269                 } 
    270                 if(!empty($_FILES[$value[0]])) { 
    271                     $file   = $_FILES[$value[0]]; 
    272                     $upload = wp_handle_upload($file, array('test_form' => false)); 
    273                     if(!isset($upload['error']) && isset($upload['file'])) { 
    274                         $filetype   = wp_check_filetype(basename($upload['file']), null); 
    275                         $title      = $file['name']; 
    276                         $ext        = strrchr($title, '.'); 
    277                         $title      = ($ext !== false) ? substr($title, 0, -strlen($ext)) : $title; 
    278                         $attachment = array( 
    279                             'post_mime_type'    => $filetype['type'], 
    280                             'post_title'        => addslashes($title), 
    281                             'post_content'      => '', 
    282                             'post_status'       => 'inherit', 
    283                             'post_parent'       => $post->ID 
    284                         ); 
    285                         $attach_id = wp_insert_attachment($attachment, $upload['file']); 
    286                         $my_data[$value[0]] = wp_get_attachment_url( $attach_id ); 
    287                     } 
    288                 }                
    289             } 
    290         } 
    291         // Add values of $my_data as custom fields 
    292         // Let's cycle through the $my_data array! 
    293         foreach ($my_data as $key => $value) { 
    294             if ( 'revision' == $post->post_type  ) { // don't store custom data twice 
    295                 return; 
    296             } 
    297             // if $value is an array, make it a CSV (unlikely) 
    298             $value = implode(',', (array)$value); 
    299             if ( get_post_meta($post->ID, $key, FALSE) ) { 
    300                 // Custom field has a value. 
    301                 update_post_meta($post->ID, $key, $value); 
    302             } else { 
    303                 // Custom field does not have a value. 
    304                 add_post_meta($post->ID, $key, $value); 
    305             } 
    306             if (!$value) { 
    307                 // have empty values for blanks (so templating works) 
    308                 update_post_meta($post->ID, $key,''); 
    309             } 
    310         } 
    311     } 
    312 } 
     446        $options = get_option( 'mcm_options' ); 
     447        $mcm_fields = $options['simplified']; 
     448        if ( is_array( $mcm_fields ) ) {         
     449            foreach ( $mcm_fields as $set ) { 
     450                if ( isset( $set['repetition'] ) && $set['repetition'] == 'true' ) { return true; } 
     451            } 
     452        } 
     453    } 
     454    return false; 
     455} 
     456 
     457function mcm_is_richtext( $value ) { 
     458    if ( is_array( $value ) ) { 
     459        if ( isset($value[3]) && $value[3] == 'richtext' ) { 
     460            return true;  
     461        } 
     462    } else { 
     463        $options = get_option( 'mcm_options' ); 
     464        $mcm_fields = $options['simplified']; 
     465        if ( is_array( $mcm_fields ) ) { 
     466            foreach ( $mcm_fields as $set ) { 
     467                if ( isset( $set['type'] ) && $set['type'] == 'richtext' ) { return true; } 
     468            } 
     469        } 
     470    } 
     471    return false; 
     472} 
     473 
     474function mcm_has_value( $post_ID, $key ) { 
     475    $meta = get_post_meta( $post_ID, $key, true ); 
     476    if ( $meta ) { return true; } 
     477    return false; 
     478} 
     479 
    313480function mcm_echo_nonce() { 
    314481    // Use nonce for verification ... ONLY USE ONCE! 
     
    321488 
    322489function mcm_echo_hidden($fields) { 
    323     foreach ( $fields as $field ) { 
    324         foreach ( $field as $key=>$value ) { 
    325             $new_fields[] = $key; 
    326         } 
    327     } 
    328     $value = implode(',',$new_fields); 
    329     echo '<input type="hidden" name="mcm_fields" value="'.$value.'" />'; 
    330 } 
    331  
     490    // finish when I add hidden fields. 
     491    if ( is_array( $fields ) ) { 
     492        foreach ( $fields as $field ) { 
     493            $new_fields[] = $field[0]; 
     494        } 
     495        $value = apply_filters( 'mcm_hidden_fields', $new_fields, $fields ); 
     496        foreach ( $new_fields as $hidden ) { 
     497            echo '<input type="hidden" name="mcm_fields[]" value="'.$hidden.'" />'; 
     498        } 
     499    } 
     500} 
    332501 
    333502// defaults 
     
    367536            array( '_subtitle',__('Subtitle','my-content-management'), '','mcm_text_field'), 
    368537            array( '_business',__('Business','my-content-management'),'','mcm_text_field' ), 
    369             array( '_phone', __('Phone Number','my-content-management'), '','tel'), 
     538            array( '_phone', __('Phone Number','my-content-management'), '','tel','true'), 
    370539            array( '_email', __('E-mail','my-content-management'), '', 'email') 
    371540        ), 
     
    406575        __('Resource Info','my-content-management') => 
    407576        array ( 
    408             array( '_authors',__('Additional Authors','my-content-management'),'','mcm_text_field'), 
     577            array( '_authors',__('Additional Authors','my-content-management'),'','mcm_text_field','true'), 
    409578            array( '_licensing',__('License Terms','my-content-management'),'','mcm_text_area'), 
    410579            array( '_show',__('Show on','my-content-management'),'This is a label for advanced use in themes','mcm_text_field') 
  • my-content-management/trunk/mcm-styles.css

    r719617 r766567  
    1313.mcm-settings td label { position: absolute; left: -999em; }  
    1414.mcm-settings td input { width: 100%; } 
     15.mcm-settings tr.fade { background: #ff9; transition: background .5s ease-in-out; } 
     16.mcm-settings tr.fade:hover { background: #ffe; } 
    1517.mcm-settings .up span, .mcm-settings .down span { position: absolute; left: -999em; } 
    1618.mcm-settings .up { background: url(/wp-content/plugins/my-content-management/images/up.png); width: 24px; height: 24px; display: inline-block; } 
     
    1820.mcm-settings td a { opacity: .5; } 
    1921.mcm-settings td a:hover, .mcm-settings td a:focus { opacity: 1; } 
     22 
     23.mcm-settings .tabs { margin: 0; padding: 0 4px; position: relative; top: 1px; } 
     24.mcm-settings .tabs li { display: inline; margin: 0 auto; line-height: 1; } 
     25.mcm-settings .tabs a { display: inline-block; padding: 4px 8px; border-radius: 4px 4px 0 0; border: 1px solid #ccc; background: #f3f3f3; } 
     26.mcm-settings .tabs a.active { border-bottom: 1px solid #fefefe; background: #fefefe; } 
     27.mcm-settings .wptab { background: #fff; border: 1px solid #ddd; padding: 0 10px; } 
  • my-content-management/trunk/mcm-view-custom-posts.php

    r719617 r766567  
    9696                    $term = explode( ',',$term ); 
    9797                } 
     98                if ( $term == 'null' ) { $term = array(null); } 
    9899                $args['tax_query'] = array( array( 'taxonomy' => $taxes[0], 'field' => 'slug', 'terms' => $term, 'operator'=>$operator ) );  
    99100            } 
     
    117118        $debug = false; 
    118119        if ( $debug ) { 
    119         echo "<pre>"; 
    120         print_r($args); 
    121         echo "</pre>"; 
     120            echo "<pre>"; 
     121            print_r($args); 
     122            echo "</pre>"; 
    122123        } 
    123124        $loop = new WP_Query( $args ); 
     
    129130            $id = get_the_ID(); 
    130131            $p['id'] = $id; 
     132            $p['post_type'] = get_post_type( $id ); 
    131133            $p['permalink'] = get_permalink(); 
    132134            $p['link_title'] = "<a href='".get_permalink()."'>".get_the_title()."</a>";          
     
    151153                $postclass = implode( ' ',get_post_class() ); 
    152154            $p['postclass'] = $postclass; 
    153             $p['terms'] = ($taxonomy != 'all')?get_the_term_list( $id, $taxonomy,'',', ','' ):''; 
     155            $p['terms'] = ($taxonomy != 'all')?get_the_term_list( $id, $taxonomy,'',', ','' ):get_the_term_list( $id, "mcm_category_$primary", '', ', ', '' ); 
    154156            $custom_fields = get_post_custom(); 
    155157                foreach ( $custom_fields as $key=>$value ) { 
     
    186188            $the_post = get_post( $v ); 
    187189            $p['id'] = $the_post->ID; 
     190            $p['post_type'] = get_post_type( $the_post->ID );            
    188191            $p['excerpt'] = wpautop( $the_post->post_excerpt ); 
    189192            $p['excerpt_raw'] = $the_post->post_excerpt; 
     
    209212            $postclass = implode( ' ',get_post_class( '',$the_post->ID ) ); 
    210213            $p['postclass'] = $postclass;                
    211             $p['terms'] = ($taxonomy != 'all')?get_the_term_list( $the_post->ID, $taxonomy,'',', ','' ):''; 
     214            $p['terms'] = ($taxonomy != 'all')?get_the_term_list( $the_post->ID, $taxonomy,'',', ','' ):get_the_term_list( $id, "mcm_category_$primary", '', ', ', '' ); 
    212215            $custom_fields = get_post_custom( $the_post->ID ); 
    213                 foreach ( $custom_fields as $key=>$value ) { 
    214                     $is_email = ( stripos( $key, 'email' ) !== false )?true:false; 
    215                     if ( is_array( $value ) ) { 
    216                         if ( is_array( $value[0] ) ) { 
    217                             foreach( $value[0] as $val ) { 
    218                                 $cfield[] = ( $is_email )?apply_filters('mcm_munge',$val,$val,$custom ):$val; 
    219                             } 
    220                             $p[$key] =  explode( ", ", $cfield ); 
    221                         } else { 
    222                             $p[$key] =  ( $is_email )?apply_filters('mcm_munge',$value[0],$value[0], $custom ):$value[0]; 
     216            foreach ( $custom_fields as $key=>$value ) { 
     217                $cfield = array(); 
     218                $is_email = ( stripos( $key, 'email' ) !== false )?true:false; 
     219                if ( is_array( $value ) ) { 
     220                    $value = maybe_unserialize($value); 
     221                    if ( is_array( $value[0] ) ) { 
     222                        // if the saved value is an array 
     223                        foreach( $value[0] as $val ) { 
     224                            $cfield[] = ( $is_email )?apply_filters( 'mcm_munge',$val,$val,$custom ):$val; 
     225                        } 
     226                    } else { 
     227                        // if multiple values 
     228                        foreach ( $value as $v ) { 
     229                            $cfield[] =  ( $is_email )?apply_filters( 'mcm_munge',$v,$v,$custom ):$v; 
    223230                        } 
    224231                    } 
    225232                } 
     233                $p[$key] = $cfield; 
     234            } 
    226235            $p = apply_filters('mcm_extend_posts', $p, $p, $custom ); 
    227236            $this_post = mcm_run_template( $p, $display, $column, $wrapper ); 
     
    259268 
    260269// A simple function to get data stored in a custom field 
    261 function mcm_get_custom_field($field,$id='') { 
     270function mcm_get_custom_field($field,$id='',$fallback=false ) { 
    262271    global $post; 
    263272    $id = ($id != '')?$id:$post->ID; 
    264     $custom_field = get_post_meta($id, $field, true); 
     273    $custom_field = ''; 
     274    $single =  ( mcm_is_repeatable( $field ) )?false:true; 
     275    $plaintext = ( mcm_is_richtext( $field ) )?false:true; 
     276    $meta = get_post_meta( $id, $field, $single ); 
     277    if ( $single ) { 
     278        $custom_field = ( $meta )?$meta:$fallback;   
     279    } else { 
     280        foreach( $meta as $field ) { 
     281            $custom_field .= ( $field )?$field:$fallback; 
     282        } 
     283    } 
     284    if ( !$plaintext ) { 
     285        $custom_field = wpautop( $custom_field ); 
     286    }    
    265287    return $custom_field; 
    266288} 
    267289 
    268 function mcm_custom_field( $field,$before='',$after='',$id='' ) { 
    269     $value = mcm_get_custom_field($field, $id); 
     290function mcm_custom_field( $field,$before='',$after='',$id='',$fallback=false ) { 
     291    $value = mcm_get_custom_field($field, $id, $fallback); 
    270292    if ( $value ) { 
    271293        if ( is_array( $value ) ) { 
     
    291313        case 'full': 
    292314            $wrapper = ( isset($templates[$type]['wrapper']['item']['full']) )?$templates[$type]['wrapper']['item']['full']:'div'; 
    293          
    294315            if ( $wrapper != '' ) { $pre = "<$wrapper class='$postclass $column'>"; $posttag = "</$wrapper>"; } else { $pre = $posttag = '';} 
    295              
    296316            if ( isset($templates[$type]['full']) && trim( $templates[$type]['full'] ) != '' ) { 
    297317                $return .= "$pre 
     
    307327        case 'excerpt': 
    308328            $wrapper = ( isset($templates[$type]['wrapper']['item']['excerpt']) )?$templates[$type]['wrapper']['item']['excerpt']:'div'; 
    309              
    310329            if ( $wrapper != '' ) { $pre = "<$wrapper class='$postclass $column'>"; $posttag = "</$wrapper>"; } else { $pre = $posttag = '';} 
    311  
    312330            if ( isset($templates[$type]['excerpt']) && trim( $templates[$type]['excerpt'] ) != '' ) { 
    313331                $return .= "$pre 
     
    323341        case 'list': 
    324342            $wrapper = ( isset($templates[$type]['wrapper']['item']['list']) )?$templates[$type]['wrapper']['item']['list']:'li'; 
    325              
    326343            if ( $wrapper != '' ) { $pre = "<$wrapper class='$postclass $column'>"; $posttag = "</$wrapper>"; } else { $pre = $posttag = '';} 
    327344            if ( isset($templates[$type]['list']) && trim( $templates[$type]['list'] ) != '' ) { 
    328345                $return .= "$pre 
    329                 ".mcm_draw_template($post,$templates[$type]['list'])." 
     346                ".mcm_draw_template( $post,$templates[$type]['list'] )." 
    330347                $posttag"; 
    331348            } else {         
     
    343360    return $return; 
    344361} 
    345 /* 
    346 function mcm_draw_template( $array,$template ) { 
    347     //1st argument: array of details 
    348     //2nd argument: template to print details into 
     362 
     363// nested template tags: parses tags inside before or after values of tags 
     364function mcm_simple_template( $array=array(), $template=false ) { 
     365    if ( !$template ) { return; } 
     366    foreach ( $array as $key=>$value ) { 
     367        if ( !is_object( $value ) ) { 
     368            if ( strpos( $template, "{".$key."}" ) ) { 
     369                $template = str_replace( "{".$key."}", $value, $template ); 
     370            } 
     371        } 
     372    } 
     373    return $template; 
     374} 
     375 
     376function mcm_draw_template( $array=array(), $template='' ) { 
     377    $template = stripcslashes($template); 
     378    $fallback = $before = $after = $size = $output = ''; 
     379    $template = mcm_simple_template( $array, $template ); 
    349380    foreach ($array as $key=>$value) { 
    350         if ( !is_object($value) ) { 
    351             $search = "{".$key."}"; 
    352             $template = stripcslashes(str_replace($search,$value,$template)); 
    353         } else { 
    354         } 
    355     } 
    356     return trim($template); 
    357 } 
    358 */ 
    359 function mcm_draw_template( $array='',$template='' ) { 
    360     //1st argument: array of details 
    361     //2nd argument: template to print details into 
    362     $template = stripcslashes($template); 
    363     foreach ($array as $key=>$value) { 
     381        $is_chooser = mcm_is_chooser( $key ); 
    364382        if ( !is_object($value) ) { 
    365383            if ( strpos( $template, "{".$key ) !== false ) { // only check for tag parts that exist 
    366                 preg_match_all('/{'.$key.'\b(?>\s+(?:before="([^"]*)"|after="([^"]*)")|[^\s]+|\s+){0,2}}/', $template, $matches, PREG_PATTERN_ORDER ); 
    367                 if ( $matches ) { 
    368                     $before = ( isset( $matches[1][0] ) )?$matches[1][0]:''; 
    369                     $after = ( isset( $matches[2][0] ) )?$matches[2][0]:''; 
    370                     $value = ( $value == '' )?'':$before.$value.$after; 
    371                     $whole_thang = ( isset( $matches[0][0] ) )?$matches[0][0]:''; 
    372                     $template = str_replace( $whole_thang, $value, $template ); 
     384                preg_match_all('/{'.$key.'[^}]*+}/i',$template, $result);  
     385                if ( $result ) { 
     386                    foreach( $result as $pass ) { 
     387                        $whole_thang = $pass[0]; 
     388                        preg_match_all('/(before|after|fallback|size)="([^"]*)"/i', $whole_thang, $matches, PREG_PATTERN_ORDER ); 
     389                        if ( $matches ) { 
     390                            foreach ( $matches[1] as $k => $v ) { 
     391                                if ( $v == 'fallback' ) { $fallback = $matches[2][$k]; } 
     392                                if ( $v == 'before' ) { $before = $matches[2][$k]; } 
     393                                if ( $v == 'after' ) { $after = $matches[2][$k]; } 
     394                                if ( $v == 'size' ) { $size = $matches[2][$k]; } 
     395                            } 
     396                            if ( is_array( $value ) ) { 
     397                                foreach ( $value as $val ) { 
     398                                    if ( $is_chooser ) { if ( is_numeric( $val ) ) { $val = wp_get_attachment_link( $val, $size ); } } 
     399                                    $fb = ( $fallback != '' && $val == '' )?$before.$fallback.$after:''; 
     400                                    $output .= ( $val == '' )?$fb:$before.$val.$after; 
     401                                } 
     402                            } else { 
     403                                if ( $is_chooser ) { $value = wp_get_attachment_link( $value, $size ); } 
     404                                $fb = ( $fallback != '' && $value == '' )?$before.$fallback.$after:''; 
     405                                $output = ( $value == '' )?$fb:$before.$value.$after; 
     406                            } 
     407                            $template = str_replace( $whole_thang, $output, $template ); 
     408                        } 
     409                        $fallback = $before = $after = $size = $output = ''; 
     410                    } 
    373411                } 
    374412            } 
    375         }  
    376     } 
    377     return stripslashes( trim( mc_clean_template($template) ) ); 
    378 } 
     413        } 
     414    } 
     415    return stripslashes( trim( mc_clean_template($template) ) );             
     416} 
     417//needs testing JCD 
     418function mcm_is_chooser( $key ) { 
     419    // determine whether a given key is a media chooser data type 
     420    global $mcm_fields; 
     421    $check = $found = false; 
     422    foreach ( $mcm_fields as $k=>$v ) { 
     423        foreach ( $v as $field ) { 
     424            if ( $field[0] == $key ) { 
     425                $found = true; 
     426            } 
     427            if ( $found ) { 
     428                $check = ( $field[3] == 'chooser' )?true:false; 
     429                return $check; 
     430            } 
     431        } 
     432    } 
     433    return $check;   
     434} 
     435 
    379436// function cleans unreplaced template tags out of the template.  
    380437// Necessary for custom fields, which do not exist in array if empty. 
    381438function mc_clean_template( $template ) { 
    382     preg_match_all('/{[\w]*\b(?>\s+(?:before="([^"]*)"|after="([^"]*)")|[^\s]+|\s+){0,2}}/', $template, $matches, PREG_PATTERN_ORDER ); 
    383  
     439    preg_match_all('/{\w[^}]*+}/i', $template, $matches, PREG_PATTERN_ORDER ); 
    384440    if ( $matches ) { 
    385441        foreach ( $matches[0] as $match ) { 
     
    428484    for ($i = 0; $i <= strlen($unmixedkey); $i++) { 
    429485        $ranpos = rand(0,$unshuffled-1); 
    430         $nextchar = @$inprogresskey{$ranpos}; 
     486        $nextchar = ( isset( $inprogresskey{$ranpos} ) )?$inprogresskey{$ranpos}:''; 
    431487        $mixedkey .= $nextchar; 
    432488        $before = substr($inprogresskey,0,$ranpos); 
  • my-content-management/trunk/mcm-widgets.php

    r719617 r766567  
    3333        </p>     
    3434        <p> 
    35         <label for="<?php echo $this->get_field_id('mcm_widget_post_type'); ?>"><?php _e('Post type to search','my-content-management'); ?></label> <select<?php echo $enabled; ?> id="<?php echo $this->get_field_id('mcm_widget_post_type'); ?>" name="<?php echo $this->get_field_name('mcm_widget_post_type'); ?>"> 
     35        <label for="<?php echo $this->get_field_id('mcm_widget_post_type'); ?>"><?php _e('Post type to search','my-content-management'); ?></label> <select id="<?php echo $this->get_field_id('mcm_widget_post_type'); ?>" name="<?php echo $this->get_field_name('mcm_widget_post_type'); ?>"> 
    3636    <?php 
    3737        foreach( $enabled as $v ) { 
  • my-content-management/trunk/my-content-management.php

    r719617 r766567  
    66Author: Joseph C Dolson 
    77Author URI: http://www.joedolson.com 
    8 Version: 1.3.4 
     8Version: 1.4.0 
    99*/ 
    1010/*  Copyright 2011-2012  Joe Dolson (email : joe@joedolson.com) 
     
    2626if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 
    2727 
    28 $mcm_version = '1.3.4'; 
     28$mcm_version = '1.4.0'; 
    2929// Enable internationalisation 
    3030load_plugin_textdomain( 'my-content-management',false, dirname( plugin_basename( __FILE__ ) ) . '/lang' );  
     
    6565$mcm_extras = $mcm_options['extras']; 
    6666 
     67// TODO: work out use of media uploader 
     68add_action( 'admin_enqueue_scripts', 'mcm_enqueue_admin_scripts' ); 
     69function mcm_enqueue_admin_scripts() { 
     70    $screen = get_current_screen(); 
     71    if ( $screen->base == 'post' ) { 
     72        if( function_exists('wp_enqueue_media') && !did_action( 'wp_enqueue_media' ) ) { 
     73            wp_enqueue_media(); 
     74        } 
     75        wp_enqueue_script( 'mcm-admin-script', plugins_url( 'js/uploader.js', __FILE__ ), array( 'jquery' ) ); 
     76        wp_localize_script( 'mcm-admin-script', 'thumbHeight', get_option( 'thumbnail_size_h' ) ); 
     77    } 
     78} 
    6779//Shortcode 
    6880function mcm_show_posts($atts) { 
     
    8799                'custom_wrapper'=>'div', 
    88100                'custom' => false 
    89             ), $atts)); 
     101            ), $atts, 'my_content' )); 
    90102            if ( isset( $_GET['mcm'] ) && isset( $_GET['mcm_value'] ) ) { 
    91103                ${$_GET['mcm']} = sanitize_text_field($_GET['mcm_value']); 
     
    120132                'week' => '', 
    121133                'day' => '' 
    122             ), $atts)); 
     134            ), $atts, 'my_archive' ) ); 
    123135            if ( !$type || !$taxonomy ) return; 
    124136        $terms = get_terms( $taxonomy ); 
     
    169181    extract(shortcode_atts(array( 
    170182                'type' => 'page' 
    171             ), $atts)); 
     183            ), $atts, 'custom_search' ) ); 
    172184    return mcm_search_form( $type ); 
    173185} 
    174186 
    175187function mcm_munger($atts) { 
    176     extract(shortcode_atts(array( 
     188    extract( shortcode_atts( array( 
    177189                'address' => '' 
    178             ), $atts)); 
     190            ), $atts, 'email' ) ); 
    179191    return mcm_munge( $address ); 
    180192} 
     
    242254    if ( $mcm_version == $from ) { return; } 
    243255    switch ( $from ) { 
    244         case '1.2.1': 
     256        case version_compare( $from, '1.2.0', '<' ): 
     257            $options = get_option('mcm_options'); 
     258            $options['types'][]=$default_mcm_types; 
     259            $options['fields']=$default_mcm_fields; 
     260            $options['extras']=$default_mcm_extras; 
     261            update_option( 'mcm_options', $options ); 
    245262        break; 
    246         case '1.2.0': 
    247     $options = get_option('mcm_options'); 
    248     $options['types'][]=$default_mcm_types; 
    249     $options['fields']=$default_mcm_fields; 
    250     $options['extras']=$default_mcm_extras; 
    251     update_option( 'mcm_options', $options ); 
     263        case version_compare( $from, '1.4.0', '<' ): 
     264            $options = get_option( 'mcm_options' ); 
     265            $mcm_fields = $options['fields']; 
     266            $simplified = array(); 
     267            if ( is_array( $mcm_fields ) ) { 
     268                foreach ( $mcm_fields as $key => $fields ) { 
     269                    foreach ( $fields as $k => $field ) { 
     270                        $simplified[] = array( 'key'=>$field[0], 'label'=>$field[1], 'description'=>$field[2], 'type'=>$field[3], 'repetition'=>$field[4], 'fieldset'=>$key ); 
     271                    } 
     272                } 
     273            } 
     274            $options['simplified'] = $simplified; 
     275            update_option( 'mcm_options', $options ); 
     276        break;  
    252277        default: 
    253278        break; 
     
    405430function mcm_add_scripts() { 
    406431    wp_register_script( 'addfields', plugins_url( 'js/jquery.addfields.js', __FILE__ ), array( 'jquery' ) ); 
     432    wp_register_script( 'mcm.tabs', plugins_url( 'js/tabs.js', __FILE__ ), array( 'jquery' ) ); 
    407433    wp_enqueue_script( 'addfields' ); 
    408 } 
     434    wp_enqueue_script( 'mcm.tabs' ); 
     435    global $mcm_types; 
     436    $keys = array_keys( $mcm_types ); 
     437    $mcm_selected = $keys[0].'-container'; 
     438    wp_localize_script( 'mcm.tabs', 'firstItem', $mcm_selected ); 
     439} 
     440 
    409441 
    410442function mcm_settings_page() { 
     
    571603            $option = get_option('mcm_options'); 
    572604            $ns = $_POST[$type]; 
     605            $supports = ( empty($ns['supports']) )?array():$ns['supports']; 
    573606            $new = array( $ns['pt1'],$ns['pt2'],$ns['pt3'],$ns['pt4'],array( 'public' => ( isset($ns['public']) && $ns['public'] == 1 )?true:false, 
    574607                    'publicly_queryable' => ( isset($ns['publicly_queryable']) && $ns['publicly_queryable'] == 1 )?true:false, 
     
    578611                    'hierarchical' => ( isset($ns['hierarchical']) && $ns['hierarchical'] == 1 )?true:false, 
    579612                    'menu_icon' => ( !isset($ns['menu_icon']) || $ns['menu_icon']=='')?null:$ns['menu_icon'], 
    580                     'supports' => $ns['supports'], 
     613                    'supports' => $supports, 
    581614                    'slug' => $ns['slug'] ) ); 
    582615            $option['types'][$type] = $new; 
     
    601634         
    602635        } 
     636        // refresh permalinks 
     637        flush_rewrite_rules(); 
    603638    } 
    604639    global $mcm_types; 
     
    743778        ); 
    744779    if ( is_array($enabled) ) { 
     780     
     781        $return = "<div class='postbox' id='mcm-template-settings'> 
     782        <h3><span>".__('Template Manager','my-content-management')."</span></h3> 
     783            <div class='inside'>"; 
     784            $tabs = "<ul class='tabs'>"; 
     785            foreach ( $enabled as $value ) { 
     786                $tabs .= "<li><a href='#$value-container'>".$types[$value][2]."</a></li>"; 
     787            } 
     788            $tabs .= "</ul>"; 
     789            $return .= $tabs; 
    745790        foreach ( $enabled as $value ) { 
    746791            if ( isset($types[$value] ) ) { 
     
    792837                $extension = ($extension != '')?"<div class='extra_fields'>$extension</div>":''; 
    793838                $return .= " 
    794         <div class='postbox' id='mcm-settings-$value'> 
    795         <div class='handlediv' title='Click to toggle'><br /></div><h3 class='hndle'><span>$label[2] ".__('Template Manager','my-content-management')."</span></h3> 
    796             <div class='inside'> 
     839            <div id='$value-container' class='wptab'> 
     840            <h4>".sprintf(__('%s Templates', 'my-content-management'),$types[$value][2] )."</h4> 
    797841            $show_fields 
    798842            $extension 
     
    803847                <fieldset> 
    804848                <legend>Full</legend> 
    805                 <p>Sample shortcode: <code>[my_content type='$display_value' display='full' taxonomy='mcm_category_$display_value' order='menu_order']</code></p> 
     849                <p>".__('Example shortcode:','my-content-management')."<br /><code>[my_content type='$display_value' display='full' taxonomy='mcm_category_$display_value' order='menu_order']</code></p> 
    806850                <p class='wrappers'> 
    807851                <label for='mcm_full_list_wrapper_$value'>".__('List Wrapper','my-content-management')."</label> <select name='templates[$value][wrapper][list][full]' id='mcm_full_list_wrapper_$value'>".mcm_option_list( $list, $template['wrapper']['list']['full'] )."</select><br /> 
     
    840884                <p>".__('Theme template for this taxonomy:','my-content-management')." <code>taxonomy-mcm_category_$display_value.php</code></p> 
    841885                <p>".__('Theme template for this custom post type:','my-content-management')." <code>single-mcm_$display_value.php</code></p> 
    842                 <p>".__('Theme template for archive pages with this post type:','my-content-management')." <code>archive-mcm_$display_value.php</code></p>       
    843                 </div>           
    844             </div>"; 
     886                <p>".__('Theme template for archive pages with this post type:','my-content-management')." <code>archive-mcm_$display_value.php</code></p> 
     887            </div> 
     888                "; 
    845889            } else { 
    846890                //unset here? JCD 
    847891            } 
    848892        } 
     893        $return .= "</div>           
     894            </div>"; 
    849895    } 
    850896    echo $return; 
     
    916962<style type='text/css'> 
    917963#normal-sortables .mcm_field { float: left; width:50%; } 
     964#normal-sortables .mcm_post_fields .wp-editor-wrap { float: none; clear: both; } 
     965.mcm_post_fields .mcm-chooser-image { display: inline-block; position: relative; } 
     966.mcm_post_fields .mcm-delete { display: inline-block; background-color: rgba( 255, 255, 255, .7 ); padding: 2px; outline: 1px solid #fff; line-height: 1; } 
     967.mcm_post_fields .mcm-delete:hover { background-color: #fff; outline: 1px solid #933; } 
     968.mcm_post_fields .mcm-delete input { margin-left: 2px; margin-top: -1px;} 
     969.mcm_post_fields .mcm-chooser-image .mcm-delete { position: absolute; left: 0; width: 100%; padding: 2px 0; } 
    918970</style> 
    919971<?php 
     
    10551107    } 
    10561108     
    1057     $form = $fieldset_title.'<table class="widefat"><thead><tr><th scope="col">'.__('Move','my-content-management').'</th><th scope="col">'.__('Field Label','my-content-management').'</th><th scope="col">'.__('Input Type','my-content-management').'</th><th scope="col">Description/Options</th><th scope="col">'.__('Delete','my-content-management').'</th></tr></thead><tbody>'; 
     1109    $form = $fieldset_title.'<table class="widefat"><thead><tr><th scope="col">'.__('Move','my-content-management').'</th><th scope="col">'.__('Field Label','my-content-management').'</th><th scope="col">'.__('Input Type','my-content-management').'</th><th scope="col">Description/Options</th><th scope="col">'.__('Repeatable','my-content-management').'</th><th scope="col">'.__('Delete','my-content-management').'</th></tr></thead><tbody>'; 
    10581110    $odd = 'odd';  
    10591111    if ( isset( $option['fields'][$fieldset] ) ) { 
     
    10651117            'select'=>__('Select dropdown','my-content-management'), 
    10661118            'upload'=>__('File upload','my-content-management'), 
     1119            'chooser'=>__('Media chooser', 'my-content-management' ), 
     1120            'richtext'=>__('Rich Text Editor', 'my-content-management' ), 
    10671121            'color'=>__('Color input / HTML5','my-content-management'), 
    10681122            'date'=>__('Date input / HTML5','my-content-management'), 
     
    10851139            } 
    10861140            if ( $value[3] == 'select' ) { $labeled = __("Options",'my-content-management'); } else { $labeled = __("Additional Text",'my-content-management'); } 
    1087             /* 
    1088         $form .= " 
    1089         <tr class='mcm_custom_fields_form $odd'> 
    1090             <td> 
    1091                 <a href='#' class='up'><span>Move Up</span></a> / <a href='#' class='down'><span>Move Down</span></a> 
    1092             </td>        
    1093             <td> 
    1094                 <input type='hidden' name='mcm_field_key[$key]'  value='$value[0]' /> 
    1095                 <label for='mcm_field_label$key'>".__('Label','my-content-management')."</label> <input type='text' name='mcm_field_label[$key]' id='mcm_field_label$key' value='".esc_attr(stripslashes($value[1]))."' /><br /><small>{<code>$value[0]</code>}</small> 
    1096             </td> 
    1097             <td> 
    1098                 <label for='mcm_field_type$key'>".__('Type','my-content-management')."</label>  
    1099                     <select name='mcm_field_type[$key]' id='mcm_field_type$key'> 
    1100                     $field_type_select 
    1101                     </select> 
    1102             </td> 
    1103             <td> 
    1104                 <label for='mcm_field_options$key'>$labeled</label> <input type='text' name='mcm_field_options[$key]' id='mcm_field_options$key' value='$choices' /> 
    1105             </td> 
    1106             <td> 
    1107                 <label for='mcm_field_delete$key'>".__('Delete','my-content-management')."</label> <input type='checkbox' name='mcm_field_delete[$key]' id='mcm_field_delete$key' value='delete' /> 
    1108             </td> 
    1109         </tr>"; 
    1110         */ 
     1141            if ( isset( $value[4] ) && $value[4] == 'true' ) { $repeatability = " checked='checked'"; } else { $repeatability = ''; } 
    11111142        $form .= " 
    11121143        <tr class='mcm_custom_fields_form $odd'> 
     
    11281159            </td> 
    11291160            <td> 
    1130                 <label for='mcm_field_delete$key'>".__('Delete','my-content-management')."</label> <input type='checkbox' name='mcm_field_delete[$key]' id='mcm_field_delete$key' value='delete' /> 
     1161                <label for='mcm_field_repeatable$key'>".__('Repeatable','my-content-management')."</label> <input type='checkbox' name='mcm_field_repeatable[$key]' id='mcm_field_repeatable$key' class='mcm-repeatable' value='true'$repeatability /> 
     1162            </td>            
     1163            <td> 
     1164                <label for='mcm_field_delete$key'>".__('Delete','my-content-management')."</label> <input type='checkbox' name='mcm_field_delete[$key]' id='mcm_field_delete$key' class='mcm-delete' value='delete' /> 
    11311165            </td> 
    11321166        </tr>";      
     
    11561190            <label for='mcm_field_options'>".__('Options/Additional Text','my-content-management')."</label> <input type='text' name='mcm_field_options[]' id='mcm_field_options' value='' /> 
    11571191        </td> 
     1192        <td> 
     1193            <label for='mcm_field_repeatable'>".__('Repeatable','my-content-management')."</label> <input type='checkbox' name='mcm_field_repeatable[]' id='mcm_field_repeatable' value='true' /> 
     1194        </td>        
    11581195        <td></td> 
    11591196    </tr>";  
     
    11721209function mcm_update_custom_fieldset( $post ) { 
    11731210    $option = get_option('mcm_options'); 
    1174     $array = array(); 
     1211    $array = $simplified = array(); 
    11751212    if ( !isset($post['mcm_field_delete']) ) { $post['mcm_field_delete'] = array(); } 
    11761213    $delete = @array_keys( $post['mcm_field_delete'] ); 
     
    11791216    $types = $post['mcm_field_type']; 
    11801217    $options = $post['mcm_field_options']; 
     1218    $repeatable = $post['mcm_field_repeatable']; 
    11811219    $count = count( $labels ); 
    11821220    $delete_count = count( $delete ); 
    1183         for ( $i=0;$i<$count;$i++ ) { 
    1184             if ( in_array( $i, $delete ) ) { } else { 
    1185                 if ( $keys[$i] != '' ) { 
    1186                 if ( $types[$i] == 'select' ) { $opt = explode( ',', $options[$i] ); } else { $opt = $options[$i]; } 
    1187                 $array[$i] = array(  
    1188                     $keys[$i],  
    1189                     $labels[$i],  
    1190                     $opt,  
    1191                     $types[$i]  
    1192                 ); 
    1193                 } else if ( $labels[$i] != '' ) { 
    1194                 if ( $types[$i] == 'select' ) { $opt = explode( ',', $options[$i] ); } else { $opt = $options[$i]; }         
    1195                 $k = '_'.sanitize_title($labels[$i]); 
    1196                 $array[$i] = array(  
    1197                     $k,  
    1198                     $labels[$i],  
    1199                     $opt,  
    1200                     $types[$i]  
    1201                 );   
    1202                 } else { 
    1203                     continue; 
    1204                 } 
    1205             } 
    1206         } 
     1221    // ID fieldset 
    12071222    $fieldset = ( isset($_GET['mcm_fields_edit']) )?$_GET['mcm_fields_edit']:false; 
    12081223    if ( isset( $post['mcm_new_fieldset'] ) ) { $fieldset = $post['mcm_new_fieldset']; $added = __('added','my-content-management'); } else { $added = __('updated','my-content-management'); } 
    12091224    if ( !empty( $option['extras'][$fieldset] ) && isset( $post['mcm_new_fieldset'] ) ) { $fieldset = $fieldset.' (2)'; } 
    12101225    if ( !$fieldset ) { return __("No custom field set was defined.",'my-content-management'); } else { $fieldset = urldecode( $fieldset ); } 
    1211     if ( isset( $post['mcm_new_fieldset'] ) ) { $mcm_assign_to = $post['mcm_assign_to']; $option['extras'][$fieldset] = array( $mcm_assign_to, 'side' ); } 
     1226    if ( isset( $post['mcm_new_fieldset'] ) ) { $mcm_assign_to = $post['mcm_assign_to']; $option['extras'][$fieldset] = array( $mcm_assign_to, 'side' ); }   
     1227        for ( $i=0;$i<$count;$i++ ) { 
     1228            if ( in_array( $i, $delete ) ) { } else { 
     1229                $repetition = ( isset( $repeatable[$i] ) )?'true':''; 
     1230                if ( $keys[$i] != '' ) { 
     1231                    if ( $types[$i] == 'select' ) { $opt = explode( ',', $options[$i] ); } else { $opt = $options[$i]; } 
     1232                    $array[$i] = array(  
     1233                        $keys[$i],  
     1234                        $labels[$i],  
     1235                        $opt,  
     1236                        $types[$i], 
     1237                        $repetition 
     1238                    ); 
     1239                    // for now, this is secondary. Prep for simplifying and fixing data format. 
     1240                    $simplified[] = array( 'key'=>$keys[$i], 'label'=>$labels[$i], 'description'=>$opt, 'type'=>$types[$i], 'repetition'=>$repetition, 'fieldset'=>$fieldset ); 
     1241                } else if ( $labels[$i] != '' ) { 
     1242                    if ( $types[$i] == 'select' ) { $opt = explode( ',', $options[$i] ); } else { $opt = $options[$i]; }         
     1243                    $k = '_'.sanitize_title($labels[$i]); 
     1244                    $array[$i] = array(  
     1245                        $k,  
     1246                        $labels[$i],  
     1247                        $opt,  
     1248                        $types[$i], 
     1249                        $repetition 
     1250                    ); 
     1251                    $simplified[] = array( 'key'=>$keys[$i], 'label'=>$labels[$i], 'description'=>$opt, 'type'=>$types[$i], 'repetition'=>$repetition, 'fieldset'=>$fieldset );              
     1252                } else { 
     1253                    continue; 
     1254                } 
     1255            } 
     1256        } 
    12121257    $option['fields'][$fieldset] = $array; 
     1258    // update simple array of fields. 
     1259    $simple = $option['simplified']; 
     1260    $simplified = (array) $simplified + (array) $simple; 
     1261    $option['simplified'] = $simplified; 
    12131262    if ( $count == $delete_count || $delete_count > $count || ( $count == 1 && !isset( $post['mcm_new_fieldset'] ) ) ) { unset( $option['fields'][$fieldset] ); unset( $option['extras'][$fieldset] ); } // if all fields are deleted, remove set. 
    12141263    update_option('mcm_options',$option); 
     
    12221271         add_action( 'admin_head-'. $plugin_page, 'mcm_styles' ); 
    12231272         add_action('admin_print_styles-'. $plugin_page, 'mcm_add_scripts'); 
    1224          $plugin_page = add_options_page( 'My Custom Fields', 'My Custom Fields', 'manage_options', 'mcm_custom_fields', 'mcm_configure_custom_fields' );     
     1273         $plugin_page = add_options_page( 'My Custom Fields', 'My Custom Fields', 'manage_options', 'mcm_custom_fields', 'mcm_configure_custom_fields' ); 
    12251274         add_action( 'admin_head-'. $plugin_page, 'mcm_styles' ); 
    1226          add_action('admin_print_styles-'. $plugin_page, 'mcm_add_scripts'); 
    1227           
    1228     } 
    1229 } 
    1230  
     1275         add_action('admin_print_styles-'. $plugin_page, 'mcm_add_scripts');  
     1276    } 
     1277} 
    12311278 
    12321279function mcm_configure_custom_fields() { 
  • my-content-management/trunk/readme.txt

    r719617 r766567  
    44Tags: custom post types, post types, faq, testimonials, staff, glossary, sidebars, content management 
    55Requires at least: 3.2.1 
    6 Tested up to: 3.5.1 
     6Tested up to: 3.6.0 
    77License: GPLv2 or later 
    8 Stable tag: trunk 
     8Stable tag: 1.3.4 
    99 
    1010Creates common custom post types for advanced content management: FAQ, Testimonials, people (staff, contributors, etc.), and others! 
     
    5656Irish, Spanish, Dutch 
    5757 
    58 Visit the [My Content Management translations site](http://translate.joedolson.com/projects/my-content-management/) to check how complete a translation is. 
     58Visit the [My Content Management translations site](http://translate.joedolson.com/projects/my-content-management/) to check the progress of a translation. 
    5959 
    6060Translating my plug-ins is always appreciated. Visit <a href="http://translate.joedolson.com">my translations site</a> to start getting your language into shape! 
     
    6363 
    6464== Changelog == 
     65 
     66= 1.4.0 = 
     67 
     68* Bug fix: custom post type search widget; could not select post type. 
     69* Bug fix: if all "supports" options were disabled, could not later select options. 
     70* Minor rewrite of custom meta saving process. 
     71* New template tag attribute: fallback (all template tags; set fallback content if field not supplied.) 
     72* New template tag attribute: size (chooser template tags; image size keyword) 
     73* Revised template tag replacement function. 
     74* Added fallback content parameter to mcm_custom_field function. 
     75* If taxonomy not specified, fall back to MCM created taxonomy when generating terms. 
     76* Added media chooser option for input. 
     77* Added rich text editor option for input. 
     78* Automatically refresh permalinks. 
     79* Minor UI Changes. 
     80* Performance improvements. 
    6581 
    6682= 1.3.4 = 
Note: See TracChangeset for help on using the changeset viewer.