<?php
/**
 * @copyright ONE/DEPO Project
 * @license   PHP License 3.01 <http://www.php.net/license/3_01.txt>
 */

/**
 * 画像アップローダ関連
 *
 * @package     Onedepo_Logic_Imgupload
 * @author      netnee <>
 * @access      public
 */
class Onedepo_Logic_Imgupload
    {
    var $image;
    
    
    /**
    * 任意の画像の URL を返す
    *
    * @param $imgtypediv    int     取得する画像タイプ区分
    * @param $typedivnm     string  取得する画像タイプ区分名称
    * @param $generalcd     int     取得する画像のコード
    * @param $generalsub    int     取得する画像のサブコード
    */
    function getImageUrl($imgtypediv, $typedivnm, $generalcd, $generalsub)
    {
        $log =& LogFactory::getLog();
        $log->debug("debug", "Onedepo_Logic_Imgupload#getImageUrl");
        
        $imagenm = array();
        
        $tmpcd = $generalcd;
        $tmpurl = "c=". $generalcd;
        if (!empty($generalsub)){
            $tmpcd .= "-" . $generalsub;
            $tmpurl .= "&sc=". $generalsub;
        }
        
        if ( !empty($generalcd) ){
            if (is_file(IMAGE_DIR ."/". $imgtypediv ."/". $tmpcd . "S.jpg")){
                $imagenm[$tmpcd]['S'] = "img.php?". $tmpurl ."&d=". $imgtypediv ."&s=S";
            }

            if (is_file(IMAGE_DIR ."/". $imgtypediv ."/". $tmpcd . "M.jpg")){
                $imagenm[$tmpcd]['M'] = "img.php?". $tmpurl ."&d=". $imgtypediv ."&s=M";
            }

            if (is_file(IMAGE_DIR ."/". $imgtypediv ."/". $tmpcd . "L.jpg")){
                $imagenm[$tmpcd]['L'] = "img.php?". $tmpurl ."&d=". $imgtypediv ."&s=L";
            }

            if ($generalcd=="shop") {
                if (is_file(IMAGE_DIR ."/". $imgtypediv ."/". $tmpcd ."logo.jpg")){
                    $imagenm[$tmpcd]['logo'] = "img.php?". $tmpurl ."&s=logo&d=". $imgtypediv;
                }
                if (is_file(IMAGE_DIR ."/". $imgtypediv ."/". $tmpcd . "main.jpg")){
                    $imagenm[$tmpcd]['main'] = "img.php?". $tmpurl ."&s=main&d=". $imgtypediv;
                }
            }
        }

        return $imagenm;
    }
    
    /**
    * User用 任意の画像の URL を返す
    *
    * @param $imgtypediv    int     取得する画像タイプ区分
    * @param $typedivnm     string  取得する画像タイプ区分名称
    * @param $generalcd     int     取得する画像のコード
    * @param $generalsub    int     取得する画像のサブコード
    */
    function UserImageUrl($typediv, $itemcd, $structcd, $sellercd, $stockcd)
    {
        $log =& LogFactory::getLog();
        $log->debug("debug", "Onedepo_Logic_Imgupload#UserImageUrl");
        
        $imagenm = array();

            $tmpcd = $itemcd . "-" . $structcd. "-" . "$sellercd". "-" . "$stockcd";
            $tmpurl = "c=". $itemcd ."&sc=". $structcd. "&slc=". $sellercd. "&st=". $stockcd;
           

        //url
        $result = $this->image->SelectKey($typediv, 'o', $itemcd, $structcd, $sellercd, $stockcd);
        

        //img
        if ( !empty($result["generalcd"]) ){
            if (is_file(IMAGE_DIR ."/". $typediv ."/". $tmpcd . ".jpg")){
                $imagenm[$tmpcd] = "img.php?". $tmpurl;
            }
        }

        $log->debug(print_r($imagenm, true), "Onedepo_Logic_Imgupload#getImageUrl");
        
        return $imagenm;
    }
    
    /**
    * 動画の URL を返す
    *
    * @param $generalcd     int     取得する動画のコード
    * @param $generalsub    int     取得する動画のサブコード
    */
    function getMovieUrl($generalcd, $generalsub)
    {
        $log =& LogFactory::getLog();
        $log->debug("debug", "Onedepo_Logic_Imgupload#getMovieUrl");

        $location = "";

        if (!empty($generalcd) && !empty($generalsub)){
            $mov = IMAGE_DIR ."/8/". $generalcd ."_". $generalsub;
            foreach (glob($mov ."*", GLOB_NOSORT) as $movfile);
            if (is_file($movfile)){
                $dirname = dirname($_SERVER['SCRIPT_NAME']); 
                $dirname = ($dirname=="/") ? "" : $dirname; 
                $location  = URL_ROOT .$dirname ."/movie_". $generalcd ."_". $generalsub .".flv"; 
            }
        }

        return $location;
    }

    /**
    * 画像のコード Max+1を返す
    *
    * @param $imgtypediv    int     取得する画像タイプ区分
    * @param $typedivnm     string  取得する画像タイプ区分名称
    */
    function getImageMaxCode($imgtypediv, $typedivnm)
    {
        $log =& LogFactory::getLog();

        $max = 1;
        $code = array();

        $Dir = IMAGE_DIR ."/". $imgtypediv ."/";
        foreach (glob($Dir ."*". $typedivnm .".*", GLOB_NOSORT) as $filename) {
            if (preg_match("@^(?:".$Dir.")([0-9]*)\.*+@i", $filename, $cd)) {
                $code[] = intval($cd[1]);
            }
        }

        sort($code,SORT_NUMERIC);
        $e = array_pop($code);

        $max = (!empty($e)) ? ++$e : $max;

        return $max;
    }
    
    
    /**
    * 画像の URL のリストを返す
    *
    * @param $imgtypediv    int     取得する画像タイプ区分
    * @param $typedivnm     string  取得する画像タイプ区分名称
    */
    function getImageUrlList($imgtypediv, $typedivnm)
    {
        $log =& LogFactory::getLog();
        
        $imagelist = array();

        $Dir = IMAGE_DIR ."/". $imgtypediv ."/";
        foreach (glob($Dir ."*". $typedivnm .".*", GLOB_NOSORT) as $filename) {
            if (preg_match("@^(?:".$Dir.")([0-9]*)\.*+@i", $filename, $cd)) {
                $imagelist[$cd[1]] = "img.php?c=". $cd[1] . "&d=". $imgtypediv ."&s=". $typedivnm;
            }
        }
        krsort($imagelist);

        return $imagelist;
    }
    
    
    /**
    * work ディレクトリにある画像を削除
    *
    * @param cd int 削除対象のコード
    */
    function delWorkImage($cd)
    {
        $log =& LogFactory::getLog();
        $log->debug("debug", "Onedepo_Logic_Imgupload#delWorkImage");
        
        foreach (glob(IMAGE_WORKDIR ."/".$cd."*", GLOB_NOSORT) as $filename) {
            @unlink($filename);
        }
    }
    
    /**
    * work ディレクトリから任意のディレクトリに画像をコピー
    *
    * @param $mode  int     処理区分
    * @param $cd    int     移動対象のコード
    * @param $sub   int     移動対象のサブコード
    * @param $tdiv  int     移動対象の画像タイプ区分
    * @param $size  string  移動対象のサイズ文字
    * @param $user  string  更新ユーザ
    */
    function setItemImage($mode, $cd, $sub, $tdiv, $size, $user)
    {
        $log =& LogFactory::getLog();
        $log->debug("debug", "Onedepo_Logic_Imgupload#setItemImage");
        
        $tmpcd = $cd;
        $tmpcd .= (!empty($sub)) ? "-".$sub : "";
        
        $work = IMAGE_WORKDIR ."/". $tmpcd . $size . ".jpg";
        $to = IMAGE_DIR ."/". $tdiv ."/". $tmpcd . $size . ".jpg";

        $log->debug("debug : img " .$to, "Onedepo_Logic_Imgupload#setItemImage");

//echo "work[" . $work ."]<br />";
//echo "to[" . $to ."]<br />";
        $work_dir = IMAGE_WORKDIR;
        if (!dir($work_dir)) mkdir($work_dir,0777);
        $to_dir = IMAGE_DIR ."/". $tdiv;
        if (!dir($to_dir)) mkdir($to_dir,0777);

        if( file_exists($work) ) {
            if( copy($work, $to) ) {
                if ($mode == "ins" && is_numeric($cd)){
                    if (!$this->image->insert($tdiv, $cd, $size, 0, $user, $sub)){
                        return false;
                    }
                }
            }
        }
        $log->debug("debug : execute true", "Onedepo_Logic_Imgupload#setItemImage");
        return true;
    }
    
    /**
    * User出品商品 画像登録
    *
    * @param $mode  int     処理区分
    * @param $cd    int     移動対象のコード(itemcd)
    * @param $sub   int     移動対象のサブコード(structcd)
    * @param $tdiv  int     移動対象の画像タイプ区分
    * @param $size  string  移動対象のサイズ文字(S)
    * @param $user  string  更新ユーザ
    */
    function setUserItemImage($mode, $cd, $sub, $seller, $tdiv, $size, $user, $stock)
    {
          
        $log =& LogFactory::getLog();
        $log->debug("debug", "Onedepo_Logic_Imgupload#setUserItemImage");
        
        $failname= $cd. "-" . $sub. "-" . $seller. "-" . $stock ;        
        $work = IMAGE_WORKDIR ."/". $failname . ".jpg";
        $to = IMAGE_DIR ."/". $tdiv ."/". $failname . ".jpg";

        
        if( file_exists($work) ) {
            if( copy($work, $to) ) {
                if ($mode == "ins"){
                    if (!$this->image->insert_stockcd($tdiv, $cd, $size, $seller, $user, $sub ,$stock)){
//                        @unlink($to);
                        $log->debug("debug : execute false", "Onedepo_Logic_Imgupload#setUserItemImage");
                        return false;
                    }
                }
            }
        }
        $log->debug("debug : execute true", "Onedepo_Logic_Imgupload#setUserItemImage");
        return true;
    }
    
    /**
    * work ディレクトリから任意のディレクトリに動画をコピー
    *
    * @param $mode  int     処理区分
    * @param $cd    int     移動対象のコード
    * @param $sub   int     移動対象のサブコード
    * @param $user  string  更新ユーザ
    */
    function setItemMovie($mode, $cd, $sub, $user)
    {
        $log =& LogFactory::getLog();
        $log->debug("debug", "Onedepo_Logic_Imgupload#setItemMovie");
        
        
        $mov = IMAGE_WORKDIR ."/". $cd ."_". $sub .".";
        foreach (glob($mov ."*", GLOB_NOSORT) as $work);
        if (is_file($work)) {
            $pathinfo = pathInfo($work);
            $extension = $pathinfo['extension'];
        }

        $to = IMAGE_DIR ."/8/". $cd ."_". $sub .".". $extension;

        $log->debug("debug : img " .$to, "Onedepo_Logic_Imgupload#setItemMovie");
        
        if( file_exists($work) ) {
            if( copy($work, $to) ) {
                if ($mode == "ins"){
                    if (!$this->image->insert(4, $cd, "O", 0, $user, $sub)){
                        return false;
                    }
                }
            }
        }
        $log->debug("debug : execute true", "Onedepo_Logic_Imgupload#setItemMovie");
        return true;
    }
    
    
    /**
    * キャッシュディレクトリにある画像を削除
    *
    * @param $cd    int 削除対象のコード
    * @param $div   int 画像区分
    */
    function delCacheImage($cd, $div)
    {
        $log =& LogFactory::getLog();
        $log->debug("debug", "Onedepo_Logic_Imgupload#delCacheImage");
        
        foreach (glob(IMAGE_CACHEDIR ."/". $div . "/". $cd . "*", GLOB_NOSORT) as $filename) {
            @unlink($filename);
        }
    }


    /**
    * User出品商品 画像削除
    *
    * @param $mode  int     処理区分
    * @param $cd    int     移動対象のコード(itemcd)
    * @param $sub   int     移動対象のサブコード(structcd)
    * @param $tdiv  int     移動対象の画像タイプ区分
    * @param $size  string  移動対象のサイズ文字(S)
    * @param $user  string  更新ユーザ
    */
    function DeleteUserItemImage($mode, $cd, $sub, $seller, $tdiv, $size, $user, $stock)
    {
          
        $log =& LogFactory::getLog();
        $log->debug("debug", "Onedepo_Logic_Imgupload#DeleteUserItemImage");
        
        $failname= $cd. "-" . $sub. "-" . $seller. "-" . $stock;
        $to = IMAGE_DIR ."/". $tdiv ."/". $failname . ".jpg";

        
        if( file_exists($to) ) {
            if ($mode == "del"){
                if (!$this->image->delete_stockcd($tdiv, $cd, $size, $seller, $user, $sub ,$stock)){
                    $log->debug("debug : execute false", "Onedepo_Logic_Imgupload#setUserItemImage");
                    return false;
                }
            }
        }
        $log->debug("debug : execute true", "Onedepo_Logic_Imgupload#setUserItemImage");
        return true;
    }

    /**
    * キャッシュディレクトリにある画像を削除
    *
    * @param $cd    int 削除対象のコード
    * @param $div   int 画像区分
    */
    function delImage($cd, $div)
    {
        $log =& LogFactory::getLog();
        $log->debug("debug", "Onedepo_Logic_Imgupload#delImage");

        if ($div <= 4) {
            foreach (glob(IMAGE_DIR ."/". $div . "/". $cd . "[SMLo]*", GLOB_NOSORT) as $filename) {
                @unlink($filename);
            }
        } else {
            foreach (glob(IMAGE_DIR ."/". $div . "/". $cd . "*", GLOB_NOSORT) as $filename) {
                @unlink($filename);
            }
        }
    }

    /**
    * 画像データ、動画データを削除
    *
    * @param $cd    int 削除対象のコード
    * @param $scd   int 削除対象のサブコード
    * @param $type  int 削除対象のファイルサイズ
    * @param $div   int 画像区分
    */
    function delData($cd, $scd, $type, $div)
    {
        $log =& LogFactory::getLog();
        $log->debug("debug", "Onedepo_Logic_Imgupload#delData");

        $file  = IMAGE_DIR ."/". $div . "/". $cd ;
        if ($div==8) {
            $file .= (!empty($scd)) ? "_". $scd : "";
        } else {
            $file .= (!empty($scd)) ? "-". $scd : "";
            $file .= $type;
        }

        foreach (glob($file. "*", GLOB_NOSORT) as $filename) {
            $log->debug($filename ,"");
            if ($div==8) {
                $this->image->delete_stockcd(4, $cd, $type, 0, $user, $scd ,0);
            } else {
                $this->image->delete_stockcd($div, $cd, $type, 0, $user, $scd ,0);
            }
            @unlink($filename);
        }
    }
}
?>