Skip to:
Content

BuddyPress.org

Ticket #9: patch

File patch, 9.3 KB (added by jbasdf, 12 years ago)
  • bp-xprofile/bp-xprofile-classes.php

     
    276276                                        $parent_id = $wpdb->insert_id; 
    277277                                }
    278278
    279                                 if ( $this->type == "radio" ) {
    280                                         $options = $_POST['radio_option'];
    281                                 } else {
    282                                         $options = $_POST['select_option'];
    283                                 }
     279                                if ( !empty( $_POST['field_file'] ) )   {
     280                                        // Add a prebuilt field from a csv file
     281                                        $field_file = $_POST['field_file'];
     282                                        if ( $fp = fopen($field_file, 'r') ) {
     283                                                $start_reading = false;
     284                                                while ( ! feof($fp) && !$start_reading) {
     285                                                        if ( $s = fgets ($fp, 1024) ) {
     286                                                                if ( preg_match ( '/\*\//', $s ) ) {
     287                                                                                $start_reading = true;
     288                                                                }
     289                                                        }                                                               
     290                                                }
     291                                               
     292                                                while ( ( $data = fgetcsv( $fp ) ) ) {
     293                                                        $num = count($data);
     294                                                        $name = '';
     295                                                        $description = '';
     296                                                        if ( $num >= 1 ) { $name = $data[0]; }
     297                                                        if ( $num >= 2 ) { $description = $data[1]; }
     298                                                        if ( $num > 0 ) {
     299                                                                $sql = $wpdb->prepare("INSERT INTO $this->table_name_fields     (group_id, parent_id, type, name, description, is_required)     VALUES (%d, %d, 'option', %s, %s, 0)", $this->group_id, $parent_id, $name, $description);
     300                                                                $wpdb->query($sql);
     301                                                        }
     302                                                }
     303                                                fclose($fp);
     304                                        }       
     305                                }       else {
     306                                        if ( $this->type == "radio" ) {
     307                                                $options = $_POST['radio_option'];
     308                                        } else {
     309                                                $options = $_POST['select_option'];
     310                                        }
    284311
    285                                 for ( $i = 0; $i < count($options); $i++ ) {
    286                                         $option_value = $options[$i];
     312                                        for ( $i = 0; $i < count($options); $i++ ) {
     313                                                $option_value = $options[$i];
    287314
    288                                         if ( $option_value != "" ) {
    289                                                 // don't insert an empty option.
    290                                                 $sql = $wpdb->prepare("INSERT INTO $this->table_name_fields     (group_id, parent_id, type, name, description, is_required)     VALUES (%d, %d, 'option', %s, '', 0)", $this->group_id, $parent_id, $option_value);
     315                                                if ( $option_value != "" ) {
     316                                                        // don't insert an empty option.
     317                                                        $sql = $wpdb->prepare("INSERT INTO $this->table_name_fields     (group_id, parent_id, type, name, description, is_required)     VALUES (%d, %d, 'option', %s, '', 0)", $this->group_id, $parent_id, $option_value);
    291318
    292                                                 if ( $wpdb->query($sql) === false ) {
    293                                                         return false;
     319                                                        if ( $wpdb->query($sql) === false ) {
     320                                                                return false;
    294321                                                       
    295                                                         // @TODO
    296                                                         // Need to go back and reverse what has been entered here.
    297                                                 }
    298                                         }                                               
     322                                                                // @TODO
     323                                                                // Need to go back and reverse what has been entered here.
     324                                                        }
     325                                                }                                               
     326                                        }
    299327                                }
    300328                                return true;
    301329                       
     
    577605                        <div class="clear"></div>
    578606                       
    579607                </form>
    580 
     608               
     609                <div class="clear"></div>
     610               
     611                <h2>Add Prebuilt Field</h2>
     612                <?php $this->render_prebuilt_fields(); ?>
     613               
    581614        </div>
    582615       
    583616        <?php
    584617        }
    585618       
    586619        /** Static Functions **/
     620        function render_prebuilt_fields() {
     621                $action = "admin.php?page=xprofile_settings&amp;group_id=" . $this->group_id . "&amp;mode=add_field";
     622               
     623                // Files in wp-content/themes directory and one subdir down
     624                $prebuilt_fields_path = ABSPATH . MUPLUGINDIR . '/bp-xprofile/prebuilt-fields';
     625                if( !empty( $prebuilt_fields_path ) ){
     626                        $prebuilt_fields_dir = @opendir($prebuilt_fields_path);         
     627                        if ( $prebuilt_fields_dir ){
     628                                ?><table class="form-table"><?php
     629                                $counter = 0;
     630                                while ( ($field_file = readdir( $prebuilt_fields_dir )) !== false ) {
     631                               
     632                                        if ( $field_file{0} == '.' || $field_file == '..' || $field_file == 'CVS' || $field_file == '.svn' )
     633                                                continue;
     634                                       
     635                                        $field_file_path = $prebuilt_fields_path . '/' . $field_file;
     636                                                                       
     637                                        if ( is_readable( $field_file_path ) ) {
     638                                                $field_data  = $this->get_prebuilt_field_data( $field_file_path ); ?>
     639                                                <tr>
     640                                                        <td style="vertical-align:top;">
     641                                                                <h3>
     642                                                                        <?php echo $field_data['Name'] . $field_data['Version']; ?> by <a href="<?php echo $field_data['URI'];?>">
     643                                                                                <?php echo $field_data['Author'];?></a>
     644                                                                </h3>
     645                                                        </td>
     646                                                        <td>
     647                                                                <form action="<?php echo $action ?>" method="post">
     648                                                                       
     649                                                                        <label for="title">* <?php _e("Field Title") ?></label>
     650                                                                        <div>
     651                                                                                <input type="text" name="title" id="title" value="<?php echo $field_data['Name']; ?>" style="width:50%" />
     652                                                                        </div>
     653                                                                        <p></p>
     654                                                                        <label for="description"><?php _e("Field Description") ?></label>
     655                                                                        <div>
     656                                                                                <textarea name="description" id="description" rows="5" cols="60"><?php echo $field_data['Description']; ?></textarea>
     657                                                                        </div>
     658                                                                        <p></p>
     659                                                                        <label for="required">* <?php _e("Is This Field Required?") ?></label>
     660                                                                        <div>
     661                                                                                <select name="required" id="required">
     662                                                                                        <option value="0"<?php if ( $this->is_required == '0' ) { ?> selected="selected"<?php } ?>>Not Required</option>
     663                                                                                        <option value="1"<?php if ( $this->is_required == '1' ) { ?> selected="selected"<?php } ?>>Required</option>
     664                                                                                </select>
     665                                                                        </div>
     666                                                                        <p></p>
     667                                                                        <label for="fieldtype">* <?php _e("Field Type") ?></label>
     668                                                                        <div>
     669                                                                                <select name="fieldtype" id="fieldtype" onchange="show_options(this.value)">
     670                                                                                        <?php if (in_array('textbox', $field_data['Types'])) { ?>
     671                                                                                                <option value="textbox"<?php if ( $this->type == 'textbox' ) {?> selected="selected"<?php } ?>>Text Box</option>
     672                                                                                        <?php } if (in_array('textarea', $field_data['Types'])) { ?>
     673                                                                                                <option value="textarea"<?php if ( $this->type == 'textarea' ) {?> selected="selected"<?php } ?>>Multi-line Text Box</option>
     674                                                                                        <?php } if (in_array('datebox', $field_data['Types'])) { ?>
     675                                                                                                <option value="datebox"<?php if ( $this->type == 'datebox' ) {?> selected="selected"<?php } ?>>Date Selector</option>
     676                                                                                        <?php } if (in_array('radio', $field_data['Types'])) { ?>
     677                                                                                                <option value="radio"<?php if ( $this->type == 'radio' ) {?> selected="selected"<?php } ?>>Radio Buttons</option>
     678                                                                                        <?php } if (in_array('selectbox', $field_data['Types'])) { ?>
     679                                                                                                <option value="selectbox"<?php if ( $this->type == 'selectbox' ) {?> selected="selected"<?php } ?>>Drop-down Select Box</option>
     680                                                                                        <?php } ?>
     681                                                                                </select>
     682                                                                        </div>
     683                                                                       
     684                                                                        <p class="submit">                                                                     
     685                                                                          <input type="submit" value="<?php _e("Add") ?> &raquo;" name="saveField" id="saveField<?php echo $counter;?>" class="button" />
     686                                                                          <input type="hidden" name="field_file" value="<?php echo $field_file_path; ?>">
     687                                                                        </p>
     688                                                          </form>
     689                                                        </td>
     690                                                </tr>
     691                                                <?php
     692                                        }
     693                                        $counter++;
     694                                }
     695                                ?></table><?php
     696                        }
     697                        @closedir( $prebuilt_fields_dir );
     698                }       
     699        }
     700       
     701        function get_prebuilt_field_data( $field_file ) {
     702                $allowed_tags = array(
     703                        'a' => array(
     704                                'href' => array(),'title' => array()
     705                                ),
     706                        'abbr' => array(
     707                                'title' => array()
     708                                ),
     709                        'acronym' => array(
     710                                'title' => array()
     711                                ),
     712                        'code' => array(),
     713                        'em' => array(),
     714                        'strong' => array()
     715                );
     716               
     717                $field_data = implode( '', file( $field_file ) );
     718                $field_data = str_replace ( '\r', '\n', $field_data );
     719                preg_match( '|Field Name:(.*)$|mi', $field_data, $field_name );
     720                preg_match( '|URI:(.*)$|mi', $field_data, $uri );
     721                preg_match( '|Description:(.*)$|mi', $field_data, $description );
     722                preg_match( '|Types:(.*)$|mi', $field_data, $types );
    587723
     724                if ( preg_match( '|Version:(.*)|i', $field_data, $version ) )
     725                        $version = wp_kses( trim( $version[1] ), $allowed_tags );
     726                else
     727                        $version = '';
     728
     729                $name = wp_kses( trim( $field_name[1] ), $allowed_tags );
     730                $description = wptexturize( wp_kses( trim( $description[1] ), $allowed_tags ) );
     731                $types = split( ",", wptexturize( wp_kses( trim( $types[1] ), $allowed_tags ) ) );
     732
     733                if ( preg_match( '|Author:(.*)$|mi', $field_data, $author_name ) ) {
     734                        if ( empty( $author_uri ) ) {
     735                                $author = wp_kses( trim( $author_name[1] ), $allowed_tags );
     736                        } else {
     737                                $author = sprintf( '<a href="%1$s" title="%2$s">%3$s</a>', $author_uri, __( 'Visit author homepage' ),
     738                                        wp_kses( trim( $author_name[1] ), $allowed_tags ) );
     739                        }
     740                } else {
     741                        $author = __('Anonymous');
     742                }
     743
     744                return array( 'Name' => $name, 'URI' => $uri, 'Description' => $description, 'Author' => $author, 'Version' => $version, 'Types' => $types);
     745        }
     746       
    588747        function get_signup_fields() {
    589748                global $wpdb, $bp_xprofile_table_name_fields, $bp_xprofile_table_name_groups;
    590749               
     
    607766                if ( $_POST['title'] == '' || $_POST['required'] == '' || $_POST['fieldtype'] == '' ) {
    608767                        $message = __('Please make sure you fill out all required fields.');
    609768                        return false;
    610                 } else if ($_POST['fieldtype'] == 'radio' && empty($_POST['radio_option'][0]) ) {
     769                } else if ( empty($_POST['field_file']) && $_POST['fieldtype'] == 'radio' && empty($_POST['radio_option'][0]) ) {
    611770                        $message = __('Radio button field types require at least one option. Please add options below.');       
    612771                        return false;
    613                 } else if ( $_POST['fieldtype'] == 'selectbox' && empty($_POST['select_option'][0]) ) {
     772                } else if ( empty($_POST['field_file']) && $_POST['fieldtype'] == 'selectbox' && empty($_POST['select_option'][0]) ) {
    614773                        $message = __('Select box field types require at least one option. Please add options below.');
    615774                        return false;                   
    616775                } else {