attachment_model.class.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. defined('IN_PHPCMS') or exit('No permission resources.');
  3. pc_base::load_sys_class('model', '', 0);
  4. class attachment_model extends model {
  5. private $att_index_db;
  6. public function __construct() {
  7. $this->db_config = pc_base::load_config('database');
  8. $this->db_setting = 'default';
  9. $this->table_name = 'attachment';
  10. parent::__construct();
  11. }
  12. public function api_add($uploadedfile) {
  13. $uploadfield = array();
  14. $uploadfield = $uploadedfile;
  15. unset($uploadfield['fn']);
  16. $uploadfield = new_addslashes($uploadfield);
  17. $this->insert($uploadfield);
  18. $aid = $this->insert_id();
  19. $uploadedfile['aid'] = $aid;
  20. return $aid;
  21. }
  22. /**
  23. * 附件更新接口.
  24. * @param string $content 可传入空,html,数组形式url,url地址,传入空时,以cookie方式记录。
  25. * @param string 传入附件关系表中的组装id
  26. * @isurl intval 为本地地址时设为1,以cookie形式管理时设置为2
  27. */
  28. public function api_update($content, $keyid, $isurl = 0) {
  29. if(pc_base::load_config('system','attachment_stat') == 0) return false;
  30. $keyid = trim($keyid);
  31. $isurl = intval($isurl);
  32. if($isurl==2 || empty($content)) {
  33. $this->api_update_cookie($keyid);
  34. } else {
  35. $att_index_db = pc_base::load_model('attachment_index_model');
  36. $upload_url = pc_base::load_config('system','upload_url');
  37. if(strpos($upload_url,'://')!==false) {
  38. $pos = strpos($upload_url,"/",8);
  39. $domain = substr($upload_url,0,$pos).'/';
  40. $dir_name = substr($upload_url,$pos+1);
  41. }
  42. if($isurl == 0) {
  43. $pattern = '/(href|src)=\"(.*)\"/isU';
  44. preg_match_all($pattern,$content,$matches);
  45. if(is_array($matches) && !empty($matches)) {
  46. $att_arr = array_unique($matches[2]);
  47. foreach ($att_arr as $_k=>$_v) $att_arrs[$_k] = md5(str_replace(array($domain,$dir_name), '', $_v));
  48. }
  49. } elseif ($isurl == 1) {
  50. if(is_array($content)) {
  51. $att_arr = array_unique($content);
  52. foreach ($att_arr as $_k=>$_v) $att_arrs[$_k] = md5(str_replace(array($domain,$dir_name), '', $_v));
  53. } else {
  54. $att_arrs[] = md5(str_replace(array($domain,$dir_name), '', $content));
  55. }
  56. }
  57. $att_index_db->delete(array('keyid'=>$keyid));
  58. if(is_array($att_arrs) && !empty($att_arrs)) {
  59. foreach ($att_arrs as $r) {
  60. $infos = $this->get_one(array('authcode'=>$r),'aid');
  61. if($infos){
  62. $this->update(array('status'=>1),array('aid'=>$infos['aid']));
  63. $att_index_db->insert(array('keyid'=>$keyid,'aid'=>$infos['aid']));
  64. }
  65. }
  66. }
  67. }
  68. param::set_cookie('att_json','');
  69. return true;
  70. }
  71. /*
  72. * cookie 方式关联附件
  73. */
  74. private function api_update_cookie($keyid) {
  75. if(pc_base::load_config('system','attachment_stat') == 0) return false;
  76. $att_index_db = pc_base::load_model('attachment_index_model');
  77. $att_json = param::get_cookie('att_json');
  78. if($att_json) {
  79. $att_cookie_arr = explode('||', $att_json);
  80. $att_cookie_arr = array_unique($att_cookie_arr);
  81. } else {
  82. return false;
  83. }
  84. foreach ($att_cookie_arr as $_att_c) $att[] = json_decode($_att_c,true);
  85. foreach ($att as $_v) {
  86. $this->update(array('status'=>1),array('aid'=>$_v['aid']));
  87. $att_index_db->insert(array('keyid'=>$keyid,'aid'=>$_v['aid']));
  88. }
  89. }
  90. /*
  91. * 附件删除接口
  92. * @param string 传入附件关系表中的组装id
  93. */
  94. public function api_delete($keyid) {
  95. if(pc_base::load_config('system','attachment_stat') == 0) return false;
  96. $keyid = trim($keyid);
  97. if($keyid=='') return false;
  98. $att_index_db = pc_base::load_model('attachment_index_model');
  99. $attachment = pc_base::load_sys_class('attachment');
  100. $info = $att_index_db->select(array('keyid'=>$keyid),'aid');
  101. if($info) {
  102. $att_index_db->delete(array('keyid'=>$keyid));
  103. foreach ($info as $_v) {
  104. if(!$att_index_db->get_one(array('aid'=>$_v['aid']))) {
  105. $attachment->delete(array('aid'=>$_v['aid']));
  106. }
  107. }
  108. return true;
  109. } else {
  110. return false;
  111. }
  112. }
  113. }
  114. ?>