Plugin Directory

Changeset 2961342


Ignore:
Timestamp:
08/31/2023 07:44:33 PM (2 years ago)
Author:
parselearn
Message:

Update to V1.2

Location:
meta-optimizer
Files:
41 added
7 edited

Legend:

Unmodified
Added
Removed
  • meta-optimizer/trunk/WPMetaOptimizer.php

    r2960316 r2961342  
    33/*!
    44 * Plugin Name: Meta Optimizer
    5  * Version: 1.1
     5 * Version: 1.2
    66 * Plugin URI: https://parsakafi.github.io/wp-meta-optimizer
    77 * Description: You can use Meta Optimizer to make your WordPress website load faster if you use meta information, for example Post/Comment/User/Term metas.
     
    310310     *               Null if the value does not exist.
    311311     */
    312     function getMeta( $value, $objectID, $metaKey, $single, $metaType ) {
     312    function getMetaRaw( $value, $objectID, $metaKey, $metaType ) {
    313313        global $wpdb;
    314314
     
    338338            return $value;
    339339
     340        $debugBacktrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS & DEBUG_BACKTRACE_PROVIDE_OBJECT, 5 );
     341        if ( isset( $debugBacktrace[3] ) && isset( $debugBacktrace[4] ) && $debugBacktrace[3]['function'] == 'get_metadata_raw' && $debugBacktrace[4]['function'] == 'update_metadata' )
     342            return $value;
     343
    340344        $metaRow = wp_cache_get( $tableName . '_' . $metaType . '_' . $objectID . '_row', WPMETAOPTIMIZER_PLUGIN_KEY );
     345
    341346        if ( $metaRow === false ) {
    342347            $tableColumns = $this->Helpers->getTableColumns( $tableName, $metaType, true );
     
    348353
    349354        if ( is_array( $metaRow ) && isset( $metaRow[ $metaKey ] ) ) {
    350             $metaValue = maybe_unserialize( $metaRow[ $metaKey ] );
     355            return maybe_unserialize( $metaRow[ $metaKey ] );
     356        }
     357
     358        return $value;
     359    }
     360
     361    /**
     362     * Retrieves raw metadata value for the specified object.
     363     *
     364     * @param mixed  $value     The value to return, either a single metadata value or an array
     365     *                          of values depending on the value of `$single`. Default null.
     366     * @param int    $objectID  ID of the object metadata is for.
     367     * @param string $metaKey   Metadata key.
     368     * @param bool   $single    Whether to return only the first value of the specified `$metaKey`.
     369     * @param string $metaType  Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
     370     *                          or any other object type with an associated meta table.
     371     *
     372     * @return mixed An array of values if `$single` is false.
     373     *               The value of the meta field if `$single` is true.
     374     *               False for an invalid `$objectID` (non-numeric, zero, or negative value),
     375     *               or if `$metaType` is not specified.
     376     *               Null if the value does not exist.
     377     */
     378    function getMeta( $value, $objectID, $metaKey, $single, $metaType ) {
     379        $metaValue = $this->getMetaRaw( $value, $objectID, $metaKey, $metaType );
     380
     381        if ( ! is_null( $metaValue ) ) {
     382            $metaValue = maybe_unserialize( $metaValue );
     383            if ( is_array( $metaValue ) && isset( $metaValue['wpmoai0'] ) )
     384                $metaValue = array_values( $metaValue );
    351385
    352386            if ( $single && is_array( $metaValue ) && isset( $metaValue[0] ) )
     
    483517
    484518        if ( ! $deleteAll && '' !== $metaValue && null !== $metaValue && false !== $metaValue ) {
    485             $metaValue = maybe_unserialize( $metaValue );
    486             $newValue  = $currentValue = $this->getMeta( $newValue, $objectID, $metaKey, false, $metaType );
     519            $metaValue    = maybe_unserialize( $metaValue );
     520            $metaRawValue = $this->getMetaRaw( $newValue, $objectID, $metaKey, $metaType );
     521            $newValue     = $currentValue = $this->getMeta( $newValue, $objectID, $metaKey, false, $metaType );
     522
    487523            if ( is_array( $currentValue ) && ( $indexValue = array_search( $metaValue, $currentValue, false ) ) !== false ) {
    488524                unset( $currentValue[ $indexValue ] );
    489525                $newValue = $currentValue;
    490             }
    491 
     526
     527                if ( is_array( $metaRawValue ) && isset( $metaRawValue['wpmoai0'] ) )
     528                    $newValue = array_values( $newValue );
     529
     530            } elseif ( is_array( $currentValue ) )
     531                return false;
     532
     533            $newValue = $this->Helpers->reIndexMetaValue( $newValue );
    492534            $newValue = maybe_serialize( $newValue );
    493535        }
  • meta-optimizer/trunk/assets/style.min.css

    r2802191 r2961342  
    1 .wpmo-wrap{line-height:2em}.wpmo-wrap .wp-heading-inline{margin-bottom:30px;display:flex !important;align-items:center}.wpmo-wrap .wp-heading-inline span{line-height:1;font-size:2em;width:45px;height:45px;margin-right:10px;background-color:#000;background-image:linear-gradient(65deg, #0aaee1, #7d0d74);background-size:100%;background-repeat:repeat;-webkit-background-clip:text;-webkit-text-fill-color:rgba(0,0,0,0);-moz-background-clip:text;-moz-text-fill-color:rgba(0,0,0,0)}.wpmo-wrap table{border-collapse:collapse;width:100%}.wpmo-wrap table.table-sticky-head{position:relative}.wpmo-wrap table.table-sticky-head thead{position:sticky;top:32px;z-index:1;background-color:#fff;-webkit-box-shadow:0px 1px 0px 0px #e2e2e2;box-shadow:0px 1px 0px 0px #e2e2e2}.wpmo-wrap table td,.wpmo-wrap table th{padding:15px 10px;vertical-align:top;text-align:start}.wpmo-wrap table td:first-child,.wpmo-wrap table th:first-child{width:200px}.wpmo-wrap table td label+label{margin-left:15px}.wpmo-wrap table tr.black-list-column{opacity:.7;border-left:2px solid #a108f9}.wpmo-wrap table .column-name{direction:ltr;text-align:left;display:inline-block}.wpmo-wrap table .translated-column-name{font-weight:bold}.wpmo-wrap a,.wpmo-wrap span{display:inline-block}.wpmo-wrap strong{font-weight:700}.wpmo-wrap select{min-width:300px}.wpmo-wrap select[multiple]{min-width:300px;max-height:200px}.wpmo-wrap textarea{max-width:100%}.wpmo-wrap input.small-text{width:100px}.wpmo-wrap .nav-tab-wrapper{border-bottom:none}.wpmo-wrap .nav-tab-wrapper .nav-tab{border:1px solid #e0e0e0;border-bottom:none;color:#787878;border-radius:5px 5px 0 0}.wpmo-wrap .nav-tab-wrapper .nav-tab:not(.nav-tab-active){background-color:#f1f1f1;cursor:pointer}.wpmo-wrap .nav-tab-wrapper .nav-tab:focus{box-shadow:none}.wpmo-wrap .nav-tab-wrapper .nav-tab-active,.wpmo-wrap .nav-tab-wrapper .nav-tab-active:focus,.wpmo-wrap .nav-tab-wrapper .nav-tab-active:focus:active,.wpmo-wrap .nav-tab-wrapper .nav-tab-active:hover{background-color:#fff;border-bottom-color:#fff;cursor:default}.wpmo-wrap .wpmo-tab-content{padding:20px;background-color:#fff;margin-bottom:20px}.wpmo-wrap .description{color:#8a8a8a}.wpmo-wrap .description .description-notice{padding:5px 5px 5px 8px;border-left:3px solid #feb93a;background-color:#fffbf6;border-radius:3px}.wpmo-wrap .change-icons span{cursor:pointer}.wpmo-wrap .change-icons span:not(:last-child){margin-right:15px}.wpmo-wrap .dashicons-trash{color:#fe3a3a}.wpmo-wrap .dashicons-edit{color:#1c7f1f}.wpmo-wrap .dashicons-remove{color:#a108f9}.wpmo-wrap .dashicons-insert{color:#f97008}.wpmo-wrap .color-red{color:#fe3a3a}.wpmo-wrap .success-blink{animation:successBlinking 250ms infinite}.wpmo-wrap .error-blink{animation:errorBlinking 250ms infinite}body.rtl .wpmo-wrap .wp-heading-inline span{margin-left:10px;margin-right:0}body.rtl .wpmo-wrap table tr.black-list-column{border-left:none;border-right:2px solid #a108f9}body.rtl .wpmo-wrap table td label+label{margin-right:15px;margin-left:0}body.rtl .wpmo-wrap .change-icons span:not(:last-child){margin-left:15px;margin-right:0}body.rtl .wpmo-wrap .description .description-notice{border-right:3px solid #feb93a;border-left:none}.wpmo-tooltip{display:none;position:absolute;padding:10px;color:#2f2f2f;background:#f6f7f7;background:linear-gradient(0deg, rgb(246, 247, 247) 0%, rgb(253, 255, 229) 100%);box-shadow:2px 2px 0px 0px rgba(184,184,184,.75);-webkit-box-shadow:2px 2px 0px 0px rgba(184,184,184,.75);-moz-box-shadow:2px 2px 0px 0px rgba(184,184,184,.75);border-radius:2px;max-width:250px;z-index:999999}@keyframes successBlinking{0%{background-color:initial}100%{background-color:#d6ffe6}}@keyframes errorBlinking{0%{background-color:initial}100%{background-color:#fbdfdf}}/*# sourceMappingURL=style.min.css.map */
     1.wpmo-wrap{line-height:2em}.wpmo-wrap .wp-heading-inline{margin-bottom:30px;display:flex !important;align-items:center}.wpmo-wrap .wp-heading-inline span{line-height:1;font-size:2em;width:45px;height:45px;margin-right:10px;background-color:#000;background-image:linear-gradient(65deg, #0aaee1, #7d0d74);background-size:100%;background-repeat:repeat;-webkit-background-clip:text;-webkit-text-fill-color:rgba(0,0,0,0);-moz-background-clip:text;-moz-text-fill-color:rgba(0,0,0,0)}.wpmo-wrap table{border-collapse:collapse;width:100%}.wpmo-wrap table.table-sticky-head{position:relative}.wpmo-wrap table.table-sticky-head thead{position:sticky;top:32px;z-index:1;background-color:#fff;-webkit-box-shadow:0 1px 0 0 #e2e2e2;box-shadow:0 1px 0 0 #e2e2e2}.wpmo-wrap table td,.wpmo-wrap table th{padding:15px 10px;vertical-align:top;text-align:start}.wpmo-wrap table td:first-child,.wpmo-wrap table th:first-child{width:200px}.wpmo-wrap table td label+label{margin-left:15px}.wpmo-wrap table tr.black-list-column{opacity:.7;border-left:2px solid #a108f9}.wpmo-wrap table .column-name{direction:ltr;text-align:left;display:inline-block}.wpmo-wrap table .translated-column-name{font-weight:bold}.wpmo-wrap a,.wpmo-wrap span{display:inline-block}.wpmo-wrap strong{font-weight:700}.wpmo-wrap select{min-width:300px}.wpmo-wrap select[multiple]{min-width:300px;max-height:200px}.wpmo-wrap textarea{max-width:100%}.wpmo-wrap input.small-text{width:100px}.wpmo-wrap .nav-tab-wrapper{border-bottom:none}.wpmo-wrap .nav-tab-wrapper .nav-tab{border:1px solid #e0e0e0;border-bottom:none;color:#787878;border-radius:5px 5px 0 0}.wpmo-wrap .nav-tab-wrapper .nav-tab:not(.nav-tab-active){background-color:#f1f1f1;cursor:pointer}.wpmo-wrap .nav-tab-wrapper .nav-tab:focus{box-shadow:none}.wpmo-wrap .nav-tab-wrapper .nav-tab-active,.wpmo-wrap .nav-tab-wrapper .nav-tab-active:focus,.wpmo-wrap .nav-tab-wrapper .nav-tab-active:focus:active,.wpmo-wrap .nav-tab-wrapper .nav-tab-active:hover{background-color:#fff;border-bottom-color:#fff;cursor:default}.wpmo-wrap .wpmo-tab-content{padding:20px;background-color:#fff;margin-bottom:20px}.wpmo-wrap .description{color:#8a8a8a}.wpmo-wrap .description .description-notice{padding:5px 5px 5px 8px;border-left:3px solid #feb93a;background-color:#fffbf6;border-radius:3px}.wpmo-wrap .change-icons span{cursor:pointer}.wpmo-wrap .change-icons span:not(:last-child){margin-right:15px}.wpmo-wrap .dashicons-trash{color:#fe3a3a}.wpmo-wrap .dashicons-edit{color:#1c7f1f}.wpmo-wrap .dashicons-remove{color:#a108f9}.wpmo-wrap .dashicons-insert{color:#f97008}.wpmo-wrap .color-red{color:#fe3a3a}.wpmo-wrap .success-blink{animation:successBlinking 250ms infinite}.wpmo-wrap .error-blink{animation:errorBlinking 250ms infinite}body.rtl .wpmo-wrap .wp-heading-inline span{margin-left:10px;margin-right:0}body.rtl .wpmo-wrap table tr.black-list-column{border-left:none;border-right:2px solid #a108f9}body.rtl .wpmo-wrap table td label+label{margin-right:15px;margin-left:0}body.rtl .wpmo-wrap .change-icons span:not(:last-child){margin-left:15px;margin-right:0}body.rtl .wpmo-wrap .description .description-notice{padding:5px 8px 5px 5px;border-right:3px solid #feb93a;border-left:none}.wpmo-tooltip{display:none;position:absolute;padding:10px;color:#2f2f2f;background:#f6f7f7;background:linear-gradient(0deg, rgb(246, 247, 247) 0%, rgb(253, 255, 229) 100%);box-shadow:2px 2px 0 0 rgba(184,184,184,.75);-webkit-box-shadow:2px 2px 0 0 rgba(184,184,184,.75);-moz-box-shadow:2px 2px 0 0 rgba(184,184,184,.75);border-radius:2px;max-width:250px;z-index:999999}@keyframes successBlinking{0%{background-color:initial}100%{background-color:#d6ffe6}}@keyframes errorBlinking{0%{background-color:initial}100%{background-color:#fbdfdf}}/*# sourceMappingURL=style.min.css.map */
  • meta-optimizer/trunk/inc/Actions.php

    r2960316 r2961342  
    202202            $latestObjectID = $this->Options->getOption( 'import_' . $type . '_latest_id', null, false );
    203203
     204            if ( empty( $latestObjectID ) && $this->Helpers->getTableRowsCount( $this->Helpers->getWPMetaTableName( $type ) ) == 0 ) {
     205                $this->Options->setOption( 'import_' . $type . '_latest_id', 'finished' );
     206                $this->Options->setOption( 'import_' . $type . '_checked_date', date( 'Y-m-d H:i:s' ) );
     207                continue;
     208            }
     209
    204210            if ( $latestObjectID === 'finished' )
    205211                continue;
     
    209215                $objectID = $this->Helpers->getLatestObjectID( $type, $c == 1 ? $latestObjectID : $objectID );
    210216
    211                 if ( ! is_null( $objectID ) ) {
    212                     $objectID = $objectID_ = intval( $objectID );
     217                if ( $objectID ) {
     218                    $objectID = $objectID_ = $objectID;
    213219
    214220                    $objectMetas = get_metadata( $type, $objectID );
     
    221227                        $metaValue = maybe_unserialize( $metaValue );
    222228
    223                         if ( is_array( $metaValue ) && count( $metaValue ) === 1 )
     229                        if ( is_array( $metaValue ) && count( $metaValue ) === 1 && isset( $metaValue[0] ) )
    224230                            $metaValue = maybe_unserialize( current( $metaValue ) );
     231
     232                        if ( is_array( $metaValue ) ) {
     233                            $metaValue = [ $metaValue ];
     234                            $metaValue = array_map( 'maybe_unserialize', $metaValue );
     235                            $metaValue = $this->Helpers->reIndexMetaValue( $metaValue );
     236                        }
    225237
    226238                        $this->Helpers->insertMeta(
  • meta-optimizer/trunk/inc/Helpers.php

    r2960316 r2961342  
    6767            $wpMetaTable = $this->getWPMetaTableName( $metaType );
    6868            $idColumn    = 'user' === $metaType ? 'umeta_id' : 'meta_id';
    69             $meta_ids    = $wpdb->get_col( $wpdb->prepare( "SELECT $idColumn FROM $wpMetaTable WHERE meta_key = %s AND $column = %d", $_metaKey, $objectID ) );
    70 
    71             if ( empty( $meta_ids ) )
     69            $metaIDs     = $wpdb->get_col( $wpdb->prepare( "SELECT $idColumn FROM $wpMetaTable WHERE meta_key = %s AND $column = %d", $_metaKey, $objectID ) );
     70
     71            if ( empty( $metaIDs ) )
    7272                return null;
    7373        }
     
    8383            )
    8484        ) );
     85
     86        $originMetaValue = $metaValue;
    8587
    8688        if ( is_bool( $metaValue ) )
     
    102104
    103105                elseif ( ! $unique && empty( $prevValue ) && $addMeta ) {
    104                     if ( is_array( $currentValue ) )
     106                    if ( is_array( $currentValue ) && isset( $currentValue['wpmoai0'] ) )
     107                        $currentValue = array_values( $currentValue );
     108
     109                    if ( is_array( $metaValue ) )
     110                        $metaValue = [ $metaValue ];
     111
     112                    if ( is_array( $currentValue ) && ! is_array( $metaValue ) ) {
    105113                        $metaValue = array_merge( $currentValue, [ $metaValue ] );
    106                     elseif ( ! is_null( $currentValue ) )
    107                         $metaValue = [ $currentValue, $metaValue ];
    108                     //
     114
     115                    } elseif ( is_array( $currentValue ) && is_array( $metaValue ) ) {
     116                        $metaValue = array_merge( $currentValue, $metaValue );
     117
     118                    } elseif ( ! is_null( $currentValue ) ) {
     119                        $metaValue = [ $currentValue, $originMetaValue ];
     120                    }
     121
     122                    $metaValue = $this->reIndexMetaValue( $metaValue );
     123
    109124                } elseif ( ! $unique && ! empty( $prevValue ) && $currentValue !== null ) {
    110125                    if ( is_array( $currentValue ) ) {
     126                        if ( isset( $currentValue['wpmoai0'] ) )
     127                            $currentValue = array_values( $currentValue );
     128
    111129                        $indexValue = array_search( $prevValue, $currentValue, false );
    112130
     
    117135                            $metaValue                   = $currentValue;
    118136                        }
     137
     138                        $metaValue = $this->reIndexMetaValue( $metaValue, false );
     139
    119140                    } elseif ( $prevValue !== $currentValue )
    120141                        return null;
     142
     143                } elseif ( is_array( $metaValue ) ) {
     144                    $metaValue = $this->reIndexMetaValue( [ $metaValue ] );
    121145                }
    122146
     
    157181            return $wpdb->insert_id;
    158182        }
     183    }
     184
     185    public function reIndexMetaValue( $metaValue, $checkZeroIndex = true ) {
     186        if ( is_array( $metaValue ) && ( ! $checkZeroIndex || isset( $metaValue[0] ) ) ) {
     187            $metaValue  = array_values( $metaValue );
     188            $_metaValue = [];
     189            for ( $i = 0; $i <= count( $metaValue ) - 1; $i ++ ) {
     190                $_metaValue[ 'wpmoai' . $i ] = $metaValue[ $i ];
     191            }
     192            $metaValue = $_metaValue;
     193        }
     194
     195        return $metaValue;
    159196    }
    160197
     
    562599     * @param boolean $findItemsLeft  Find items left for an import process
    563600     *
    564      * @return int|null
     601     * @return int
    565602     */
    566603    public function getLatestObjectID( $type, $latestObjectID = null, $findItemsLeft = false ) {
     
    600637            $query = "SELECT $primaryColumn FROM $table $wheres ORDER BY $primaryColumn DESC LIMIT 1";
    601638
    602         return $wpdb->get_var( $query );
     639        return intval( $wpdb->get_var( $query ) );
    603640    }
    604641
  • meta-optimizer/trunk/inc/Install.php

    r2960316 r2961342  
    4343        }
    4444
    45         $currentPluginOptions = get_option( 'wp_meta_optimizer', false );
     45        $newPluginOptions = $currentPluginOptions = get_option( 'wp_meta_optimizer', false );
    4646        if ( ! is_array( $currentPluginOptions ) ) {
    4747            $defaultPluginOptions = array(
     
    7272            $oldVersion = get_option( 'wp_meta_optimizer_version', '1.0' );
    7373
    74             if ( version_compare( $oldVersion, '1.1', '<' ) ) {
    75                 $currentPluginOptions['import']['post']        = 1;
    76                 $currentPluginOptions['import_post_latest_id'] = null;
     74            if ( version_compare( $oldVersion, '1.2', '<' ) ) {
     75                $newPluginOptions['import'] = [
     76                    'post'    => 1,
     77                    'comment' => 1,
     78                    'user'    => 1,
     79                    'term'    => 1,
     80                ];
     81                foreach ( $tables as $type => $table ) {
     82                    $newPluginOptions[ 'import_' . $type . '_latest_id' ] = null;
     83                }
    7784
    78                 update_option( 'wp_meta_optimizer', $currentPluginOptions );
     85                update_option( 'wp_meta_optimizer', $newPluginOptions );
    7986            }
    8087        }
  • meta-optimizer/trunk/inc/Options.php

    r2960316 r2961342  
    230230                                              value="1" <?php checked( $this->getOption( 'support_wp_query_deactive_while_import', false ) == 1 ) ?>><?php _e( 'Deactive while import process is run', 'meta-optimizer' ) ?>
    231231                                </label>
    232                                 <p class="description"><span
    233                                             class="description-notice"><?php _e( 'Apply a filter to the WordPress query. You can disable this option if you experience any problems with the results of your display posts.', 'meta-optimizer' ) ?></span>
     232                                <p class="description">
     233                                    <span class="description-notice">
     234                                        <?php _e( 'Apply a filter to the WordPress query. You can disable this option if you experience any problems with the results of your display posts.', 'meta-optimizer' ) ?>
     235                                    </span>
    234236                                </p>
    235237                            </td>
     
    242244                                foreach ( $this->tables as $type => $table ) {
    243245                                    ?>
    244                                     <label><input type="checkbox"
    245                                                   name="meta_save_types[<?php echo esc_attr( $type ) ?>]"
    246                                                   value="1" <?php checked( isset( $metaSaveTypes[ $type ] ) ) ?>> <?php echo esc_html( $table['name'] ) ?>
     246                                    <label>
     247                                        <input type="checkbox" name="meta_save_types[<?php echo esc_attr( $type ) ?>]"
     248                                               value="1" <?php checked( isset( $metaSaveTypes[ $type ] ) ) ?>>
     249                                        <?php echo esc_html( $table['name'] ) ?>
    247250                                    </label>
    248251                                    <?php
     
    267270                                ?>
    268271                                <p class="description">
     272                                    <span class="description-notice">
     273                                        <?php _e( 'It is not recommended to activate this options.', 'meta-optimizer' ) ?>
     274                                    </span>
     275                                </p>
     276                                <p class="description">
    269277                                    <?php _e( 'You can choose the Meta types if you do not want Meta saved in the default tables.', 'meta-optimizer' ) ?>
    270278                                    <a href="https://developer.wordpress.org/plugins/metadata/" target="_blank">
     
    312320                            <td colspan="2">
    313321                                <?php _e( 'Set White/Black list for custom meta fields', 'meta-optimizer' ) ?>
    314                                 <p class="description"><?php _e( 'Write each item on a new line', 'meta-optimizer' ) ?></p>
     322                                <p class="description"><?php _e( 'You can\'t use the White list and Black list at the same time for each meta type, Write each item on a new line.', 'meta-optimizer' ) ?></p>
    315323                            </td>
    316324                        </tr>
     
    345353                        ?>
    346354                        <tr>
    347                             <td colspan="3"><input type="submit" class="button button-primary"
    348                                                    value="<?php _e( 'Save' ) ?>"></td>
     355                            <td colspan="3">
     356                                <input type="submit" class="button button-primary" value="<?php _e( 'Save' ) ?>">
     357                            </td>
    349358                        </tr>
    350359                        </tbody>
  • meta-optimizer/trunk/readme.txt

    r2960316 r2961342  
    55Requires at least: 5.0
    66Tested up to: 6.3.1
    7 Stable tag: 1.1
     7Stable tag: 1.2
    88Requires PHP: 7.0
    99License: GPLv2 or later
     
    9898== Changelog ==
    9999
     100= 1.2 =
     101* Fix bugs effected on save meta array value
     102* Improve the import process
     103
    100104= 1.1 =
    101 * Fix some bugs effected on save array meta value
     105* Fix bugs effected on save meta array value
    102106
    103107= 1.0 =
Note: See TracChangeset for help on using the changeset viewer.