開発メモ

開発用のメモです。

EC CUBE SC_UTIL を使いやすくする

<?php

require_once CLASS_REALDIR . 'util/SC_Utils.php';

class SC_Utils_Ex extends SC_Utils {

    public static function sfPrintR( $obj ) {
        if( DEBUG_MODE === true ) {

            $uid = uniqid( "debug_" );

            echo '<div style="font-size: 12px;color: #00FF00;">' . "\n";
            echo '<a href="#" onclick="$(\'#' . $uid . '\').toggle();">**デバッグ中**</a><br />' . "\n";
            echo '<pre style="display :none;" id="' . $uid . '">' . "\n";
            echo var_dump( $obj, true );
            echo '</pre>' . "\n";
            echo '<hr /></div>' . "\n";
        }
    }

    public static function sfCopyDir( $src, $des, $mess = '', $override = false ) {
        if( ! is_dir( $src ) ) {
            return false;
        }
        $mess .= "\n[" . $src . "]\n";

        $oldmask = umask( 0 );
        $mod = stat( $src );

        // ディレクトリがなければ作成する
        if( ! file_exists( $des ) ) {
            if( ! mkdir( $des, $mod[ 2 ] ) ) {
                GC_Utils_Ex::gfPrintLog( "mkdir " . $des, PLUGIN_LOG_REALFILE );
            }
        }

        $fileArray = glob( $src . '*' );
        if( is_array( $fileArray ) ) {
            foreach( $fileArray as $data_ ) {
                // CVS管理ファイルはコピーしない
                if( strpos( $data_, '/CVS/' ) !== false ) {
                    GC_Utils_Ex::gfPrintLog( "skip " . $data_, PLUGIN_LOG_REALFILE );
                    continue;
                }

                $matches = array( );
                mb_ereg( "^(.*[\/])(.*)", $data_, $matches );
                $data = $matches[ 2 ];
                if( is_dir( $data_ ) ) {
                    $mess = SC_Utils_Ex::sfCopyDir( $data_ . '/', $des . $data . '/', $mess, $override );
                    $mess .= "\n[" . $src . "]\n";
                } else {
                    if( ! $override && file_exists( $des . $data ) ) {
                        GC_Utils_Ex::gfPrintLog( $data . ":ファイルが存在します\n", PLUGIN_LOG_REALFILE );
                        continue;
                    } else {
                        $src_time = filemtime( $src . $data );
                        $des_time = filemtime( $des . $data );

                        if( $src_time == $des_time ) {
                            GC_Utils_Ex::gfPrintLog( $data . ":ファイルの更新日付が同じです。[" . date( "Y-m-d H:i:s", $des_time ) . "]\n", PLUGIN_LOG_REALFILE );
                            continue;
                        } else if( $src_time < $des_time ) {
                            GC_Utils_Ex::gfPrintLog( $data . ":ファイルの更新日付が古いです[" . date( "Y-m-d H:i:s", $src_time ) . " < " . date( "Y-m-d H:i:s", $des_time ) . "]\n", PLUGIN_LOG_REALFILE );
                            continue;
                        } else if( @copy( $data_, $des . $data ) ) {
                            touch( $des . $data, $src_time );
                            $mess .= $data . ":コピー成功\n";
                            continue;
                        } else {
                            $mess .= $data . ":コピー失敗\n";
                            GC_Utils_Ex::gfPrintLog( $data . ":コピー失敗\n", PLUGIN_LOG_REALFILE );
                            continue;
                        }
                    }
                    $mod = stat( $data_ );
                }
            }
        }
        umask( $oldmask );

        return $mess;
    }

}

sfPrintR デバッグモードがtrueの場合表示しなくした。 sfCopyDir ファイルの上書きができないバグ修正 sfCopyDir コピー元ファイルがコピー先ファイルより古い場合にコピー抑止

Twitter: @asahina_alice