瀏覽代碼

计量支付附件、短信合并

创建文件夹时候文件夹名称前后会有空格生成,看似重名文件夹,通过过滤前后空格。
NoNZero 8 年之前
父節點
當前提交
b38e8eaac4
共有 2 個文件被更改,包括 422 次插入387 次删除
  1. 407 381
      protected/class/attachment.php
  2. 15 6
      protected/controller/ClientController.php

+ 407 - 381
protected/class/attachment.php

@@ -1,6 +1,7 @@
 <?php
 
-class attachment {
+class attachment
+{
 
     var $contentid;
     var $module;
@@ -18,20 +19,22 @@ class attachment {
     var $upload_dir;
     var $uploadeds;
 
-    function __construct($catid = 0, $upload_dir = 'data/') {
-	$this->catid = intval($catid);
+    function __construct($catid = 0, $upload_dir = 'data/')
+    {
+        $this->catid = intval($catid);
 //	$this->siteid = intval($siteid) == 0 ? 1 : intval($siteid);
 //	$this->module = $module ? $module : 'content';
 //	pc_base::load_sys_func('dir');
 //	pc_base::load_sys_class('image', '', '0');
-	$this->upload_root = Doo::conf()->SITE_PATH;
-	$this->upload_func = 'move_uploaded_file';
+        $this->upload_root = Doo::conf()->SITE_PATH;
+        $this->upload_func = 'move_uploaded_file';
 //	$this->upload_func = 'copy';
-	$this->upload_dir = $upload_dir;
+        $this->upload_dir = $upload_dir;
     }
 
-    function setUploadDir($upload_dir = 'files/') {
-	$this->upload_dir = $upload_dir;
+    function setUploadDir($upload_dir = 'files/')
+    {
+        $this->upload_dir = $upload_dir;
     }
 
     /**
@@ -43,88 +46,89 @@ class attachment {
      * @param $thumb_setting 缩略图设置
      * @param $watermark_enable  是否添加水印
      */
-    function upload($field, $alowexts = '', $maxsize = 0, $overwrite = 0, $thumb_setting = array(), $watermark_enable = 1, $ip = '') {
-	if (!isset($_FILES[$field])) {
-	    $this->error = UPLOAD_ERR_OK;
-	    return false;
-	}
-	$this->field = $field;
-	$this->savepath = $this->upload_root . $this->upload_dir . date('Y/md/');
-	$this->alowexts = $alowexts;
-	$this->maxsize = $maxsize;
-	$this->overwrite = $overwrite;
-	$uploadfiles = array();
-	$description = isset($GLOBALS[$field . '_description']) ? $GLOBALS[$field . '_description'] : array();
+    function upload($field, $alowexts = '', $maxsize = 0, $overwrite = 0, $thumb_setting = array(), $watermark_enable = 1, $ip = '')
+    {
+        if (!isset($_FILES[$field])) {
+            $this->error = UPLOAD_ERR_OK;
+            return false;
+        }
+        $this->field = $field;
+        $this->savepath = $this->upload_root . $this->upload_dir . date('Y/md/');
+        $this->alowexts = $alowexts;
+        $this->maxsize = $maxsize;
+        $this->overwrite = $overwrite;
+        $uploadfiles = array();
+        $description = isset($GLOBALS[$field . '_description']) ? $GLOBALS[$field . '_description'] : array();
 //	$this->uploads = count($_FILES[$field]['error']);
 //	if ($this->uploads >= 2) {
-	if (is_array($_FILES[$field]['error'])) {
-	    $this->uploads = count($_FILES[$field]['error']);
-	    foreach ($_FILES[$field]['error'] as $key => $error) {
-		if ($error === UPLOAD_ERR_NO_FILE)
-		    continue;
-		if ($error !== UPLOAD_ERR_OK) {
-		    $this->error = $error;
-		    return false;
-		}
-		$uploadfiles[$key] = array('tmp_name' => $_FILES[$field]['tmp_name'][$key], 'name' => $_FILES[$field]['name'][$key], 'type' => $_FILES[$field]['type'][$key], 'size' => $_FILES[$field]['size'][$key], 'error' => $_FILES[$field]['error'][$key], 'description' => $description[$key]);
-	    }
-	} else {
-	    $this->uploads = 1;
-	    if (!$description)
-		$description = '';
-	    $uploadfiles[0] = array('tmp_name' => $_FILES[$field]['tmp_name'], 'name' => $_FILES[$field]['name'], 'type' => $_FILES[$field]['type'], 'size' => $_FILES[$field]['size'], 'error' => $_FILES[$field]['error'], 'description' => $description);
-	}
-	if (!$this->dir_create($this->savepath)) {
-	    $this->error = '8';
-	    return false;
-	}
-	if (!is_dir($this->savepath)) {
-	    $this->error = '8';
-	    return false;
-	}
-	@chmod($this->savepath, 0777);
-
-	if (!is_writeable($this->savepath)) {
-	    $this->error = '9';
-	    return false;
-	}
+        if (is_array($_FILES[$field]['error'])) {
+            $this->uploads = count($_FILES[$field]['error']);
+            foreach ($_FILES[$field]['error'] as $key => $error) {
+                if ($error === UPLOAD_ERR_NO_FILE)
+                    continue;
+                if ($error !== UPLOAD_ERR_OK) {
+                    $this->error = $error;
+                    return false;
+                }
+                $uploadfiles[$key] = array('tmp_name' => $_FILES[$field]['tmp_name'][$key], 'name' => $_FILES[$field]['name'][$key], 'type' => $_FILES[$field]['type'][$key], 'size' => $_FILES[$field]['size'][$key], 'error' => $_FILES[$field]['error'][$key], 'description' => $description[$key]);
+            }
+        } else {
+            $this->uploads = 1;
+            if (!$description)
+                $description = '';
+            $uploadfiles[0] = array('tmp_name' => $_FILES[$field]['tmp_name'], 'name' => $_FILES[$field]['name'], 'type' => $_FILES[$field]['type'], 'size' => $_FILES[$field]['size'], 'error' => $_FILES[$field]['error'], 'description' => $description);
+        }
+        if (!$this->dir_create($this->savepath)) {
+            $this->error = '8';
+            return false;
+        }
+        if (!is_dir($this->savepath)) {
+            $this->error = '8';
+            return false;
+        }
+        @chmod($this->savepath, 0777);
+
+        if (!is_writeable($this->savepath)) {
+            $this->error = '9';
+            return false;
+        }
 //	if (!$this->is_allow_upload()) {
 //	    $this->error = '13';
 //	    return false;
 //	}
-	$aids = array();
-	foreach ($uploadfiles as $k => $file) {
-	    $fileext = $this->fileext($file['name']);
-	    if ($file['error'] != 0) {
-		$this->error = $file['error'];
-		return false;
-	    }
+        $aids = array();
+        foreach ($uploadfiles as $k => $file) {
+            $fileext = $this->fileext($file['name']);
+            if ($file['error'] != 0) {
+                $this->error = $file['error'];
+                return false;
+            }
 //	    if (!preg_match("/^(" . $this->alowexts . ")$/", $fileext)) {
 //		$this->error = '10';
 //		return false;
 //	    }
-	    if ($this->maxsize && $file['size'] > $this->maxsize) {
-		$this->error = '11';
-		return false;
-	    }
-	    if (!$this->isuploadedfile($file['tmp_name'])) {
-		$this->error = '12';
-		return false;
-	    }
-	    $temp_filename = $this->getname($fileext);
-	    $savefile = $this->savepath . $temp_filename;
-
-	    $savefile = preg_replace("/(php|phtml|php3|php4|jsp|exe|dll|asp|cer|asa|shtml|shtm|aspx|asax|cgi|fcgi|pl)(\.|$)/i", "_\\1\\2", $savefile);
-	    $filepath = preg_replace($this->new_addslashes("|^" . $this->upload_root . "|"), "", $savefile);
-	    if (!$this->overwrite && file_exists($savefile))
-		continue;
-	    $upload_func = $this->upload_func;
-	    if ($upload_func($file['tmp_name'], $savefile)) {
+            if ($this->maxsize && $file['size'] > $this->maxsize) {
+                $this->error = '11';
+                return false;
+            }
+            if (!$this->isuploadedfile($file['tmp_name'])) {
+                $this->error = '12';
+                return false;
+            }
+            $temp_filename = $this->getname($fileext);
+            $savefile = $this->savepath . $temp_filename;
+
+            $savefile = preg_replace("/(php|phtml|php3|php4|jsp|exe|dll|asp|cer|asa|shtml|shtm|aspx|asax|cgi|fcgi|pl)(\.|$)/i", "_\\1\\2", $savefile);
+            $filepath = preg_replace($this->new_addslashes("|^" . $this->upload_root . "|"), "", $savefile);
+            if (!$this->overwrite && file_exists($savefile))
+                continue;
+            $upload_func = $this->upload_func;
+            if ($upload_func($file['tmp_name'], $savefile)) {
 //		$this->uploadeds++;
-		@chmod($savefile, 0777);
-		@unlink($file['tmp_name']);
+                @chmod($savefile, 0777);
+                @unlink($file['tmp_name']);
 //		$file['name'] = iconv("utf-8", 'sdsdf', $file['name']);
-		$uploadedfile = array('filename' => $file['name'], 'filepath' => $filepath, 'filesize' => $file['size'], 'fileext' => $fileext, 'uploadip' => $ip, 'uploadtime' => time());
+                $uploadedfile = array('filename' => $file['name'], 'filepath' => $filepath, 'filesize' => $file['size'], 'fileext' => $fileext, 'uploadip' => $ip, 'uploadtime' => time());
 //                error_log(var_export($uploadedfile, TRUE), 3, '/opt/WebRoot/wenku/data/upArray.txt');
 //		$thumb_enable = is_array($thumb_setting) && ($thumb_setting[0] > 0 || $thumb_setting[1] > 0 ) ? 1 : 0;
 //		$image = new image($thumb_enable, $this->siteid);
@@ -135,9 +139,9 @@ class attachment {
 //		    $image->watermark($savefile, $savefile);
 //		}
 //		$aids[] = $this->add($uploadedfile);
-	    }
-	}
-	return $uploadedfile;
+            }
+        }
+        return $uploadedfile;
     }
 
     /**
@@ -147,89 +151,90 @@ class attachment {
      * @param $maxsize 最大上传大小
      * @param $overwrite 是否覆盖原有文件
      */
-    function uploadMut($field, $alowexts = '', $maxsize = 0, $overwrite = 0) {
-	if (!isset($_FILES[$field])) {
-	    $this->error = UPLOAD_ERR_OK;
-	    return false;
-	}
-	$this->field = $field;
-	$this->savepath = $this->upload_root . $this->upload_dir . date('Y/md/');
-	$this->alowexts = $alowexts;
-	$this->maxsize = $maxsize;
-	$this->overwrite = $overwrite;
-	$uploadfiles = array();
-	$description = isset($GLOBALS[$field . '_description']) ? $GLOBALS[$field . '_description'] : array();
-	if (is_array($_FILES[$field]['error'])) {
-	    $this->uploads = count($_FILES[$field]['error']);
-	    foreach ($_FILES[$field]['error'] as $key => $error) {
-		if ($error === UPLOAD_ERR_NO_FILE)
-		    continue;
-		if ($error !== UPLOAD_ERR_OK) {
-		    $this->error = $error;
-		    return false;
-		}
-		$uploadfiles[$key] = array('tmp_name' => $_FILES[$field]['tmp_name'][$key], 'name' => $_FILES[$field]['name'][$key], 'type' => $_FILES[$field]['type'][$key], 'size' => $_FILES[$field]['size'][$key], 'error' => $_FILES[$field]['error'][$key]);
-	    }
-	} else {
-	    $this->uploads = 1;
-	    if (!$description)
-		$description = '';
-	    $uploadfiles[0] = array('tmp_name' => $_FILES[$field]['tmp_name'], 'name' => $_FILES[$field]['name'], 'type' => $_FILES[$field]['type'], 'size' => $_FILES[$field]['size'], 'error' => $_FILES[$field]['error'], 'description' => $description);
-	}
-	if (!$this->dir_create($this->savepath)) {
-	    $this->error = '8';
-	    return false;
-	}
-	if (!is_dir($this->savepath)) {
-	    $this->error = '8';
-	    return false;
-	}
+    function uploadMut($field, $alowexts = '', $maxsize = 0, $overwrite = 0)
+    {
+        if (!isset($_FILES[$field])) {
+            $this->error = UPLOAD_ERR_OK;
+            return false;
+        }
+        $this->field = $field;
+        $this->savepath = $this->upload_root . $this->upload_dir . date('Y/md/');
+        $this->alowexts = $alowexts;
+        $this->maxsize = $maxsize;
+        $this->overwrite = $overwrite;
+        $uploadfiles = array();
+        $description = isset($GLOBALS[$field . '_description']) ? $GLOBALS[$field . '_description'] : array();
+        if (is_array($_FILES[$field]['error'])) {
+            $this->uploads = count($_FILES[$field]['error']);
+            foreach ($_FILES[$field]['error'] as $key => $error) {
+                if ($error === UPLOAD_ERR_NO_FILE)
+                    continue;
+                if ($error !== UPLOAD_ERR_OK) {
+                    $this->error = $error;
+                    return false;
+                }
+                $uploadfiles[$key] = array('tmp_name' => $_FILES[$field]['tmp_name'][$key], 'name' => $_FILES[$field]['name'][$key], 'type' => $_FILES[$field]['type'][$key], 'size' => $_FILES[$field]['size'][$key], 'error' => $_FILES[$field]['error'][$key]);
+            }
+        } else {
+            $this->uploads = 1;
+            if (!$description)
+                $description = '';
+            $uploadfiles[0] = array('tmp_name' => $_FILES[$field]['tmp_name'], 'name' => $_FILES[$field]['name'], 'type' => $_FILES[$field]['type'], 'size' => $_FILES[$field]['size'], 'error' => $_FILES[$field]['error'], 'description' => $description);
+        }
+        if (!$this->dir_create($this->savepath)) {
+            $this->error = '8';
+            return false;
+        }
+        if (!is_dir($this->savepath)) {
+            $this->error = '8';
+            return false;
+        }
 //	@chmod($this->savepath, 0777);
 
-	if (!is_writeable($this->savepath)) {
-	    $this->error = '9';
-	    return false;
-	}
-	$aids = array();
-	foreach ($uploadfiles as $k => $file) {
-	    $fileext = $this->fileext2($file['name']);
-	    if ($file['error'] != 0) {
-		$this->error = $file['error'];
+        if (!is_writeable($this->savepath)) {
+            $this->error = '9';
+            return false;
+        }
+        $aids = array();
+        foreach ($uploadfiles as $k => $file) {
+            $fileext = $this->fileext2($file['name']);
+            if ($file['error'] != 0) {
+                $this->error = $file['error'];
 //		echo $this->error;
-		return false;
-	    }
+                return false;
+            }
 //	    if (!preg_match("/^(" . $this->alowexts . ")$/", $fileext)) {
 //		$this->error = '10';
 //		echo $this->error;
 //		return false;
 //	    }
-	    if ($this->maxsize && $file['size'] > $this->maxsize) {
-		$this->error = '11';
+            if ($this->maxsize && $file['size'] > $this->maxsize) {
+                $this->error = '11';
 //		echo $this->error;
-		return false;
-	    }
-	    if (!$this->isuploadedfile($file['tmp_name'])) {
-		$this->error = '12';
+                return false;
+            }
+            if (!$this->isuploadedfile($file['tmp_name'])) {
+                $this->error = '12';
 //		echo $this->error;
-		return false;
-	    }
-	    $temp_filename = $this->getname($fileext);
-	    $savefile = $this->savepath . $temp_filename;
-	    $savefile = preg_replace("/(php|phtml|php3|php4|jsp|exe|dll|asp|cer|asa|shtml|shtm|aspx|asax|cgi|fcgi|pl)(\.|$)/i", "_\\1\\2", $savefile);
-	    $filepath = preg_replace($this->new_addslashes("|^" . $this->upload_root . "|"), "", $savefile);
-	    if (!$this->overwrite && file_exists($savefile))
-		continue;
-	    $upload_func = $this->upload_func;
-	    if (@$upload_func($file['tmp_name'], $savefile)) {
-		$this->uploadeds++;
-		@chmod($savefile, 0777);
-		@unlink($file['tmp_name']);
-		$file['name'] = $this->safe_replace($file['name']);
-		$uploadedfile = array('filename' => $file['name'], 'filepath' => $filepath, 'filesize' => $file['size'], 'fileext' => $fileext);
-		$aids[] = $uploadedfile;
-	    }
-	}
-	return $aids;
+                return false;
+            }
+            $temp_filename = $this->getname($fileext);
+            $savefile = $this->savepath . $temp_filename;
+            $savefile = preg_replace("/(php|phtml|php3|php4|jsp|exe|dll|asp|cer|asa|shtml|shtm|aspx|asax|cgi|fcgi|pl)(\.|$)/i", "_\\1\\2", $savefile);
+            $filepath = preg_replace($this->new_addslashes("|^" . $this->upload_root . "|"), "", $savefile);
+            if (!$this->overwrite && file_exists($savefile))
+                continue;
+            $upload_func = $this->upload_func;
+            if (@$upload_func($file['tmp_name'], $savefile)) {
+                $this->uploadeds++;
+                @chmod($savefile, 0777);
+                @unlink($file['tmp_name']);
+                $file['name'] = $this->safe_replace($file['name']);
+                $uploadedfile = array('filename' => trim($file['name']), 'filepath' => $filepath, 'filesize' => $file['size'], 'fileext' => $fileext);
+                $aids[] = $uploadedfile;
+            }
+        }
+        return $aids;
     }
 
     /**
@@ -238,8 +243,9 @@ class attachment {
      * @param $filename 文件名
      * @return 扩展名
      */
-    function fileext2($filename) {
-	return strtolower(trim(substr(strrchr($filename, '.'), 1, 10)));
+    function fileext2($filename)
+    {
+        return strtolower(trim(substr(strrchr($filename, '.'), 1, 10)));
     }
 
     /**
@@ -248,20 +254,21 @@ class attachment {
      * @param $string
      * @return string
      */
-    function safe_replace($string) {
-	$string = str_replace('%20', '', $string);
-	$string = str_replace('%27', '', $string);
-	$string = str_replace('%2527', '', $string);
-	$string = str_replace('*', '', $string);
-	$string = str_replace('"', '&quot;', $string);
-	$string = str_replace("'", '', $string);
-	$string = str_replace('"', '', $string);
-	$string = str_replace(';', '', $string);
-	$string = str_replace('<', '&lt;', $string);
-	$string = str_replace('>', '&gt;', $string);
-	$string = str_replace("{", '', $string);
-	$string = str_replace('}', '', $string);
-	return $string;
+    function safe_replace($string)
+    {
+        $string = str_replace('%20', '', $string);
+        $string = str_replace('%27', '', $string);
+        $string = str_replace('%2527', '', $string);
+        $string = str_replace('*', '', $string);
+        $string = str_replace('"', '&quot;', $string);
+        $string = str_replace("'", '', $string);
+        $string = str_replace('"', '', $string);
+        $string = str_replace(';', '', $string);
+        $string = str_replace('<', '&lt;', $string);
+        $string = str_replace('>', '&gt;', $string);
+        $string = str_replace("{", '', $string);
+        $string = str_replace('}', '', $string);
+        return $string;
     }
 
     /**
@@ -269,12 +276,13 @@ class attachment {
      * @param $string 需要处理的字符串或数组
      * @return mixed
      */
-    function new_addslashes($string) {
-	if (!is_array($string))
-	    return addslashes($string);
-	foreach ($string as $key => $val)
-	    $string[$key] = new_addslashes($val);
-	return $string;
+    function new_addslashes($string)
+    {
+        if (!is_array($string))
+            return addslashes($string);
+        foreach ($string as $key => $val)
+            $string[$key] = new_addslashes($val);
+        return $string;
     }
 
     /**
@@ -283,28 +291,30 @@ class attachment {
      * @param $filename 文件名
      * @return 扩展名
      */
-    function fileext($filename) {
-	$pathinfo = pathinfo($filename);
+    function fileext($filename)
+    {
+        $pathinfo = pathinfo($filename);
 //	return strtolower(trim(substr(mb_strrchr($filename, '.'), 1, 10)));
-	return $pathinfo['extension'];
+        return $pathinfo['extension'];
     }
 
     /**
      * 创建目录
      *
-     * @param	string	$path	路径
-     * @param	string	$mode	属性
-     * @return	string	如果已经存在则返回true,否则为flase
+     * @param    string $path 路径
+     * @param    string $mode 属性
+     * @return    string    如果已经存在则返回true,否则为flase
      */
-    function dir_create($path, $mode = 0777) {
-	if (is_dir($path))
-	    return TRUE;
+    function dir_create($path, $mode = 0777)
+    {
+        if (is_dir($path))
+            return TRUE;
 //	$ftp_enable = 0;
-	$path = $this->dir_path($path);
-	$parent = dirname($path);
-	if (!is_dir($parent))
-	    @mkdir($parent, 0777, true);
-	@mkdir($path, 0777, true);
+        $path = $this->dir_path($path);
+        $parent = dirname($path);
+        if (!is_dir($parent))
+            @mkdir($parent, 0777, true);
+        @mkdir($path, 0777, true);
 //	$temp = explode('/', $path);
 //	$cur_dir = '';
 //	$max = count($temp) - 1;
@@ -318,20 +328,21 @@ class attachment {
 //	    @mkdir($cur_dir, 0777, true);
 //	    @chmod($cur_dir, 0777);
 //	}
-	return is_dir($path);
+        return is_dir($path);
     }
 
     /**
      * 转化 \ 为 /
      *
-     * @param	string	$path	路径
-     * @return	string	路径
+     * @param    string $path 路径
+     * @return    string    路径
      */
-    function dir_path($path) {
-	$path = str_replace('\\', '/', $path);
-	if (substr($path, -1) != '/')
-	    $path = $path . '/';
-	return $path;
+    function dir_path($path)
+    {
+        $path = str_replace('\\', '/', $path);
+        if (substr($path, -1) != '/')
+            $path = $path . '/';
+        return $path;
     }
 
     /**
@@ -344,225 +355,236 @@ class attachment {
      * @param $absurl 绝对路径
      * @param $basehref
      */
-    function download($field, $value, $watermark = '0', $ext = 'gif|jpg|jpeg|bmp|png', $absurl = '', $basehref = '') {
-	global $image_d;
-	$this->att_db = pc_base::load_model('attachment_model');
-	$upload_url = pc_base::load_config('system', 'upload_url');
-	$this->field = $field;
-	$dir = date('Y/md/');
-	$uploadpath = $upload_url . $dir;
-	$uploaddir = $this->upload_root . $dir;
-	$string = new_stripslashes($value);
-	if (!preg_match_all("/(href|src)=([\"|']?)([^ \"'>]+\.($ext))\\2/i", $string, $matches))
-	    return $value;
-	$remotefileurls = array();
-	foreach ($matches[3] as $matche) {
-	    if (strpos($matche, '://') === false)
-		continue;
-	    dir_create($uploaddir);
-	    $remotefileurls[$matche] = $this->fillurl($matche, $absurl, $basehref);
-	}
-	unset($matches, $string);
-	$remotefileurls = array_unique($remotefileurls);
-	$oldpath = $newpath = array();
-	foreach ($remotefileurls as $k => $file) {
-	    if (strpos($file, '://') === false || strpos($file, $upload_url) !== false)
-		continue;
-	    $filename = fileext($file);
-	    $file_name = basename($file);
-	    $filename = $this->getname($filename);
-
-	    $newfile = $uploaddir . $filename;
-	    $upload_func = $this->upload_func;
-	    if ($upload_func($file, $newfile)) {
-		$oldpath[] = $k;
-		$GLOBALS['downloadfiles'][] = $newpath[] = $uploadpath . $filename;
-		@chmod($newfile, 0777);
-		$fileext = fileext($filename);
-		if ($watermark) {
-		    watermark($newfile, $newfile, $this->siteid);
-		}
-		$filepath = $dir . $filename;
-		$downloadedfile = array('filename' => $filename, 'filepath' => $filepath, 'filesize' => filesize($newfile), 'fileext' => $fileext);
-		$aid = $this->add($downloadedfile);
-		$this->downloadedfiles[$aid] = $filepath;
-	    }
-	}
-	return str_replace($oldpath, $newpath, $value);
+    function download($field, $value, $watermark = '0', $ext = 'gif|jpg|jpeg|bmp|png', $absurl = '', $basehref = '')
+    {
+        global $image_d;
+        $this->att_db = pc_base::load_model('attachment_model');
+        $upload_url = pc_base::load_config('system', 'upload_url');
+        $this->field = $field;
+        $dir = date('Y/md/');
+        $uploadpath = $upload_url . $dir;
+        $uploaddir = $this->upload_root . $dir;
+        $string = new_stripslashes($value);
+        if (!preg_match_all("/(href|src)=([\"|']?)([^ \"'>]+\.($ext))\\2/i", $string, $matches))
+            return $value;
+        $remotefileurls = array();
+        foreach ($matches[3] as $matche) {
+            if (strpos($matche, '://') === false)
+                continue;
+            dir_create($uploaddir);
+            $remotefileurls[$matche] = $this->fillurl($matche, $absurl, $basehref);
+        }
+        unset($matches, $string);
+        $remotefileurls = array_unique($remotefileurls);
+        $oldpath = $newpath = array();
+        foreach ($remotefileurls as $k => $file) {
+            if (strpos($file, '://') === false || strpos($file, $upload_url) !== false)
+                continue;
+            $filename = fileext($file);
+            $file_name = basename($file);
+            $filename = $this->getname($filename);
+
+            $newfile = $uploaddir . $filename;
+            $upload_func = $this->upload_func;
+            if ($upload_func($file, $newfile)) {
+                $oldpath[] = $k;
+                $GLOBALS['downloadfiles'][] = $newpath[] = $uploadpath . $filename;
+                @chmod($newfile, 0777);
+                $fileext = fileext($filename);
+                if ($watermark) {
+                    watermark($newfile, $newfile, $this->siteid);
+                }
+                $filepath = $dir . $filename;
+                $downloadedfile = array('filename' => $filename, 'filepath' => $filepath, 'filesize' => filesize($newfile), 'fileext' => $fileext);
+                $aid = $this->add($downloadedfile);
+                $this->downloadedfiles[$aid] = $filepath;
+            }
+        }
+        return str_replace($oldpath, $newpath, $value);
     }
 
     /**
      * 附件删除方法
      * @param $where 删除sql语句
      */
-    function delete($where) {
-	$this->att_db = pc_base::load_model('attachment_model');
-	$result = $this->att_db->select($where);
-	foreach ($result as $r) {
-	    $image = $this->upload_root . $r['filepath'];
-	    @unlink($image);
-	    $thumbs = glob(dirname($image) . '/*' . basename($image));
-	    if ($thumbs)
-		foreach ($thumbs as $thumb)
-		    @unlink($thumb);
-	}
-	return $this->att_db->delete($where);
+    function delete($where)
+    {
+        $this->att_db = pc_base::load_model('attachment_model');
+        $result = $this->att_db->select($where);
+        foreach ($result as $r) {
+            $image = $this->upload_root . $r['filepath'];
+            @unlink($image);
+            $thumbs = glob(dirname($image) . '/*' . basename($image));
+            if ($thumbs)
+                foreach ($thumbs as $thumb)
+                    @unlink($thumb);
+        }
+        return $this->att_db->delete($where);
     }
 
     /**
      * 附件添加如数据库
      * @param $uploadedfile 附件信息
      */
-    function add($Arrupfileinfo) {
-	Doo::loadModel('attachment');
-	$attaobj = new AttachmentModel();
-	$aid = $attaobj->add_attachment($Arrupfileinfo);
-	return $aid;
+    function add($Arrupfileinfo)
+    {
+        Doo::loadModel('attachment');
+        $attaobj = new AttachmentModel();
+        $aid = $attaobj->add_attachment($Arrupfileinfo);
+        return $aid;
     }
 
-    function set_userid($userid) {
-	$this->userid = $userid;
+    function set_userid($userid)
+    {
+        $this->userid = $userid;
     }
 
     /**
      * 获取缩略图地址..
      * @param $image 图片路径
      */
-    function get_thumb($image) {
-	return str_replace('.', '_thumb.', $image);
+    function get_thumb($image)
+    {
+        return str_replace('.', '_thumb.', $image);
     }
 
     /**
      * 获取附件名称
      * @param $fileext 附件扩展名
      */
-    function getname($fileext) {
-	return date('Ymdhis') . rand(100, 999) . '.' . $fileext;
+    function getname($fileext)
+    {
+        return date('Ymdhis') . rand(100, 999) . '.' . $fileext;
     }
 
     /**
      * 返回附件大小
      * @param $filesize 图片大小
      */
-    function size($filesize) {
-	if ($filesize >= 1073741824) {
-	    $filesize = round($filesize / 1073741824 * 100) / 100 . ' GB';
-	} elseif ($filesize >= 1048576) {
-	    $filesize = round($filesize / 1048576 * 100) / 100 . ' MB';
-	} elseif ($filesize >= 1024) {
-	    $filesize = round($filesize / 1024 * 100) / 100 . ' KB';
-	} else {
-	    $filesize = $filesize . ' Bytes';
-	}
-	return $filesize;
+    function size($filesize)
+    {
+        if ($filesize >= 1073741824) {
+            $filesize = round($filesize / 1073741824 * 100) / 100 . ' GB';
+        } elseif ($filesize >= 1048576) {
+            $filesize = round($filesize / 1048576 * 100) / 100 . ' MB';
+        } elseif ($filesize >= 1024) {
+            $filesize = round($filesize / 1024 * 100) / 100 . ' KB';
+        } else {
+            $filesize = $filesize . ' Bytes';
+        }
+        return $filesize;
     }
 
     /**
      * 判断文件是否是通过 HTTP POST 上传的
      *
-     * @param	string	$file	文件地址
-     * @return	bool	所给出的文件是通过 HTTP POST 上传的则返回 TRUE
+     * @param    string $file 文件地址
+     * @return    bool    所给出的文件是通过 HTTP POST 上传的则返回 TRUE
      */
-    function isuploadedfile($file) {
-	return is_uploaded_file($file) || is_uploaded_file(str_replace('\\\\', '\\', $file));
+    function isuploadedfile($file)
+    {
+        return is_uploaded_file($file) || is_uploaded_file(str_replace('\\\\', '\\', $file));
     }
 
     /**
      * 补全网址
      *
-     * @param	string	$surl		源地址
-     * @param	string	$absurl		相对地址
-     * @param	string	$basehref	网址
-     * @return	string	网址
+     * @param    string $surl 源地址
+     * @param    string $absurl 相对地址
+     * @param    string $basehref 网址
+     * @return    string    网址
      */
-    function fillurl($surl, $absurl, $basehref = '') {
-	if ($basehref != '') {
-	    $preurl = strtolower(substr($surl, 0, 6));
-	    if ($preurl == 'http://' || $preurl == 'ftp://' || $preurl == 'mms://' || $preurl == 'rtsp://' || $preurl == 'thunde' || $preurl == 'emule://' || $preurl == 'ed2k://')
-		return $surl;
-	    else
-		return $basehref . '/' . $surl;
-	}
-	$i = 0;
-	$dstr = '';
-	$pstr = '';
-	$okurl = '';
-	$pathStep = 0;
-	$surl = trim($surl);
-	if ($surl == '')
-	    return '';
-	$urls = @parse_url(SITE_URL);
-	$HomeUrl = $urls['host'];
-	$BaseUrlPath = $HomeUrl . $urls['path'];
-	$BaseUrlPath = preg_replace("/\/([^\/]*)\.(.*)$/", '/', $BaseUrlPath);
-	$BaseUrlPath = preg_replace("/\/$/", '', $BaseUrlPath);
-	$pos = strpos($surl, '#');
-	if ($pos > 0)
-	    $surl = substr($surl, 0, $pos);
-	if ($surl[0] == '/') {
-	    $okurl = 'http://' . $HomeUrl . '/' . $surl;
-	} elseif ($surl[0] == '.') {
-	    if (strlen($surl) <= 2)
-		return '';
-	    elseif ($surl[0] == '/') {
-		$okurl = 'http://' . $BaseUrlPath . '/' . substr($surl, 2, strlen($surl) - 2);
-	    } else {
-		$urls = explode('/', $surl);
-		foreach ($urls as $u) {
-		    if ($u == "..")
-			$pathStep++;
-		    else if ($i < count($urls) - 1)
-			$dstr .= $urls[$i] . '/';
-		    else
-			$dstr .= $urls[$i];
-		    $i++;
-		}
-		$urls = explode('/', $BaseUrlPath);
-		if (count($urls) <= $pathStep)
-		    return '';
-		else {
-		    $pstr = 'http://';
-		    for ($i = 0; $i < count($urls) - $pathStep; $i++) {
-			$pstr .= $urls[$i] . '/';
-		    }
-		    $okurl = $pstr . $dstr;
-		}
-	    }
-	} else {
-	    $preurl = strtolower(substr($surl, 0, 6));
-	    if (strlen($surl) < 7)
-		$okurl = 'http://' . $BaseUrlPath . '/' . $surl;
-	    elseif ($preurl == "http:/" || $preurl == 'ftp://' || $preurl == 'mms://' || $preurl == "rtsp://" || $preurl == 'thunde' || $preurl == 'emule:' || $preurl == 'ed2k:/')
-		$okurl = $surl;
-	    else
-		$okurl = 'http://' . $BaseUrlPath . '/' . $surl;
-	}
-	$preurl = strtolower(substr($okurl, 0, 6));
-	if ($preurl == 'ftp://' || $preurl == 'mms://' || $preurl == 'rtsp://' || $preurl == 'thunde' || $preurl == 'emule:' || $preurl == 'ed2k:/') {
-	    return $okurl;
-	} else {
-	    $okurl = preg_replace('/^(http:\/\/)/i', '', $okurl);
-	    $okurl = preg_replace('/\/{1,}/i', '/', $okurl);
-	    return 'http://' . $okurl;
-	}
+    function fillurl($surl, $absurl, $basehref = '')
+    {
+        if ($basehref != '') {
+            $preurl = strtolower(substr($surl, 0, 6));
+            if ($preurl == 'http://' || $preurl == 'ftp://' || $preurl == 'mms://' || $preurl == 'rtsp://' || $preurl == 'thunde' || $preurl == 'emule://' || $preurl == 'ed2k://')
+                return $surl;
+            else
+                return $basehref . '/' . $surl;
+        }
+        $i = 0;
+        $dstr = '';
+        $pstr = '';
+        $okurl = '';
+        $pathStep = 0;
+        $surl = trim($surl);
+        if ($surl == '')
+            return '';
+        $urls = @parse_url(SITE_URL);
+        $HomeUrl = $urls['host'];
+        $BaseUrlPath = $HomeUrl . $urls['path'];
+        $BaseUrlPath = preg_replace("/\/([^\/]*)\.(.*)$/", '/', $BaseUrlPath);
+        $BaseUrlPath = preg_replace("/\/$/", '', $BaseUrlPath);
+        $pos = strpos($surl, '#');
+        if ($pos > 0)
+            $surl = substr($surl, 0, $pos);
+        if ($surl[0] == '/') {
+            $okurl = 'http://' . $HomeUrl . '/' . $surl;
+        } elseif ($surl[0] == '.') {
+            if (strlen($surl) <= 2)
+                return '';
+            elseif ($surl[0] == '/') {
+                $okurl = 'http://' . $BaseUrlPath . '/' . substr($surl, 2, strlen($surl) - 2);
+            } else {
+                $urls = explode('/', $surl);
+                foreach ($urls as $u) {
+                    if ($u == "..")
+                        $pathStep++;
+                    else if ($i < count($urls) - 1)
+                        $dstr .= $urls[$i] . '/';
+                    else
+                        $dstr .= $urls[$i];
+                    $i++;
+                }
+                $urls = explode('/', $BaseUrlPath);
+                if (count($urls) <= $pathStep)
+                    return '';
+                else {
+                    $pstr = 'http://';
+                    for ($i = 0; $i < count($urls) - $pathStep; $i++) {
+                        $pstr .= $urls[$i] . '/';
+                    }
+                    $okurl = $pstr . $dstr;
+                }
+            }
+        } else {
+            $preurl = strtolower(substr($surl, 0, 6));
+            if (strlen($surl) < 7)
+                $okurl = 'http://' . $BaseUrlPath . '/' . $surl;
+            elseif ($preurl == "http:/" || $preurl == 'ftp://' || $preurl == 'mms://' || $preurl == "rtsp://" || $preurl == 'thunde' || $preurl == 'emule:' || $preurl == 'ed2k:/')
+                $okurl = $surl;
+            else
+                $okurl = 'http://' . $BaseUrlPath . '/' . $surl;
+        }
+        $preurl = strtolower(substr($okurl, 0, 6));
+        if ($preurl == 'ftp://' || $preurl == 'mms://' || $preurl == 'rtsp://' || $preurl == 'thunde' || $preurl == 'emule:' || $preurl == 'ed2k:/') {
+            return $okurl;
+        } else {
+            $okurl = preg_replace('/^(http:\/\/)/i', '', $okurl);
+            $okurl = preg_replace('/\/{1,}/i', '/', $okurl);
+            return 'http://' . $okurl;
+        }
     }
 
     /**
      * 是否允许上传
      */
-    function is_allow_upload() {
-	if ($_groupid == 1)
-	    return true;
-	$starttime = SYS_TIME - 86400;
-	$site_setting = $this->_get_site_setting($this->siteid);
-	return ($uploads < $site_setting['upload_maxsize']);
+    function is_allow_upload()
+    {
+        if ($_groupid == 1)
+            return true;
+        $starttime = SYS_TIME - 86400;
+        $site_setting = $this->_get_site_setting($this->siteid);
+        return ($uploads < $site_setting['upload_maxsize']);
     }
 
     /**
      * 返回错误信息
      */
-    function error() {
-	return $this->error;
+    function error()
+    {
+        return $this->error;
     }
 
     /**
@@ -571,42 +593,46 @@ class attachment {
      * @param $fileurl 路径
      * @param $message 显示信息
      */
-    function mkhtml($fn, $fileurl, $message) {
-	$str = '<script type="text/javascript">window.parent.CKEDITOR.tools.callFunction(' . $fn . ', \'' . $fileurl . '\', \'' . $message . '\');</script>';
-	exit($str);
+    function mkhtml($fn, $fileurl, $message)
+    {
+        $str = '<script type="text/javascript">window.parent.CKEDITOR.tools.callFunction(' . $fn . ', \'' . $fileurl . '\', \'' . $message . '\');</script>';
+        exit($str);
     }
 
     /**
      * flash上传调试方法
      * @param $id
      */
-    function uploaderror($id = 0) {
-	file_put_contents(PHPCMS_PATH . 'xxx.txt', $id);
+    function uploaderror($id = 0)
+    {
+        file_put_contents(PHPCMS_PATH . 'xxx.txt', $id);
     }
 
     /**
      * 获取站点配置信息
      * @param  $siteid 站点id
      */
-    private function _get_site_setting($siteid) {
-	$siteinfo = getcache('sitelist', 'commons');
-	return string2array($siteinfo[$siteid]['setting']);
+    private function _get_site_setting($siteid)
+    {
+        $siteinfo = getcache('sitelist', 'commons');
+        return string2array($siteinfo[$siteid]['setting']);
     }
 
     /**
      * Get client's IP
      * @return string
      */
-    public function clientIP() {
-	if (getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
-	    return getenv('HTTP_CLIENT_IP');
-	} elseif (getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
-	    return getenv('HTTP_X_FORWARDED_FOR');
-	} elseif (getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
-	    return getenv('REMOTE_ADDR');
-	} elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
-	    return $_SERVER['REMOTE_ADDR'];
-	}
+    public function clientIP()
+    {
+        if (getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
+            return getenv('HTTP_CLIENT_IP');
+        } elseif (getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
+            return getenv('HTTP_X_FORWARDED_FOR');
+        } elseif (getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
+            return getenv('REMOTE_ADDR');
+        } elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
+            return $_SERVER['REMOTE_ADDR'];
+        }
     }
 
 }

+ 15 - 6
protected/controller/ClientController.php

@@ -27,7 +27,7 @@ Doo::loadClass('sms');
 class ClientController extends DooController
 {
 
-    private $data, $client, $auth, $att, $file, $zip, $actmeasure, $contractact, $project, $profile, $numofperact, $measureauditact, $attfile, $users, $itemfile, $aconfig, $sms,$itemMeasureNum;
+    private $data, $client, $auth, $att, $file, $zip, $actmeasure, $contractact, $project, $profile, $numofperact, $measureauditact, $attfile, $users, $itemfile, $aconfig, $sms, $itemMeasureNum;
     private $statusArray = array('uncheck' => '1', 'checking' => '2', 'checked' => '3', 'checkno' => '4');
     private $fileTypeArray = array('台帐附件');
 
@@ -174,7 +174,16 @@ class ClientController extends DooController
                     $firstAuditor = $this->measureauditact->getFirstAuditor($this->params['tenderid'], $this->params['phaseno'], $iniTimes);
                     if (isset($firstAuditor)) {
                         if ($firstAuditor['mastatus'] == 'uncheck') {
-                            $this->measureauditact->updateMastatus($firstAuditor['maid']);
+                            $retVal = $this->measureauditact->updateMastatus($firstAuditor['maid']);
+                            if ($retVal > 0) {
+                                // SMS Start
+                                $verifyUserArray = $this->profile->getVerifiedMobile($firstAuditor['auditoruid']);
+                                $pmnameArray = $this->actmeasure->getRowByPmid($this->params['tenderid']);
+                                if (isset($verifyUserArray) && ($verifyUserArray['mobile'])) {// // XXXX(标段名),陈特,已审批通过。请您继续审批。
+                                    $this->__auditNotice($verifyUserArray['mobile'], $pmnameArray["pmname"] . Doo::conf()->SMS_TIPS["AUDIT_NOTICE_AUDITOR2"]);
+                                }
+                                // SMS End
+                            }
                         }
                     }
                 }
@@ -766,7 +775,7 @@ class ClientController extends DooController
                                         } else {
                                             $this->measureauditact->updateMastatus($auditUserArray[$k + 1]['maid']);//变更下一个状态
                                             // SMS Start
-                                             $verifyUserArray = $this->profile->getVerifiedMobile($auditUserArray[$k]['auditoruid']);
+                                            $verifyUserArray = $this->profile->getVerifiedMobile($auditUserArray[$k]['auditoruid']);
                                             $pmnameArray = $this->actmeasure->getRowByPmid($auditUserArray[$k + 1]['pmid']);
                                             if (isset($verifyUserArray) && ($verifyUserArray['mobile'])) {// // XXXX(标段名),陈特,已审批通过。请您继续审批。
                                                 $this->__auditNotice($verifyUserArray['mobile'], $pmnameArray["pmname"] . Doo::conf()->SMS_TIPS["AUDIT_NOTICE_AUDITOR2"]);
@@ -1353,9 +1362,9 @@ class ClientController extends DooController
 
     function dir_path($path)
     {
-        $path = str_replace('\\', ' / ', $path);
-        if (substr($path, -1) != ' / ')
-            $path = $path . ' / ';
+        $path = str_replace('\\', '/', $path);
+        if (substr($path, -1) != '/')
+            $path = $path . '/';
         return $path;
     }