채택완료

자기가 자기글에 댓글달면 관리자에게 알림

2014-11-12 (수) 03:11:20 6,344
Copy
<?php * 알리미 플러그인  * * @package net.lovelyus.g5.plugin.pushmsg * @author Chongmyung Park <[email protected]> * @copyright Chongmyung Park * @license GPLv2 License http://www.gnu.org/licenses/gpl-2.0.html * @link http://lovelyus.net */if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가 define('PUSHMSG_CONFIG_FILE', 'cfg.plugin.pushmsg.php');$luPushmsg = new LUPushmsg();$luPushmsg->hook($gp_scope);function psm_unreads() {  global $member;  $res = sql_query("SELECT * FROM gpf_pushmsg WHERE receiver='{$member['mb_id']}' AND checked IS NULL ");  $info = array('total'=>0, 'reply'=>0, 'comment'=>0, 'comment_reply'=>0, 'memo'=>0, 'list'=>array());  $info['push_list_link'] = GP_URL.'/do.php?id='.gp_plugin_id(__FILE__).'&act=psm_list';  while($row = sql_fetch_array($res))  {    $info[$row['push_type']]++;    $info['total']++;    $row['prop'] = $prop = unserialize($row['prop']);    $time = psm_time_ago($row['reg_date'], 1);    switch($row['push_type'])    {    case 'reply' :       $row['subject'] = '<b>'.$row['sender'].'</b>님이 내 BOOKING에 REMARKS을 남기셨습니다.';       $row['link'] = G5_BBS_URL.'/board.php?bo_table='.$prop['bo_table'].'&wr_id='.$prop['wr_id_from'];       break;    case 'comment' :       $row['subject'] = '<b>'.$row['sender'].'</b>님이 내 BOOKING에 REMARKS을 남기셨습니다.';       $row['link'] = G5_BBS_URL.'/board.php?bo_table='.$prop['bo_table'].'&wr_id='.$prop['wr_id_to'].'#c_'.$prop['cmt_id_from'];       break;    case 'comment_reply' :       $row['subject'] = '<b>'.$row['sender'].'</b>님이 내 REMARKS에 REPLY을 남기셨습니다.';       $row['link'] = G5_BBS_URL.'/board.php?bo_table='.$prop['bo_table'].'&wr_id='.$prop['wr_id_to'].'#c_'.$prop['cmt_id_from'];       break;    case 'memo' :      $row['subject'] = '<b>'.$row['sender'].'</b>님으로부터 쪽지가 도착했습니다.';      $row['link'] = G5_BBS_URL.'/memo_view.php?me_id='.$prop['me_id'].'&kind=recv';      break;    default:      $row['subject'] = gp_do_filter('pushmsg_subj', $row);      $row['link'] = gp_do_filter('pushmsg_link', $prop);    break;    }    array_push($info['list'], $row);  }  return $info;}function psm_time_ago($date,$granularity=2) {  $date = strtotime($date);  $difference = time() - $date;  $periods = array(    '십년' => 315360000,    '년' => 31536000,    '월' => 2628000,    '주' => 604800,     '일' => 86400,    '시간' => 3600,    '분' => 60,    '초' => 1);  foreach ($periods as $key => $value) {    if ($difference >= $value) {      $time = floor($difference/$value);      $difference %= $value;      $retval .= ($retval ? ' ' : '').$time.'';      $retval .= (($time > 1) ? $key.'' : $key);      $granularity--;    }    if ($granularity == '0') { break; }  }  return $retval.' 전';      }/** *  *  * @author Chongmyung Park <[email protected]>  * @copyright Chongmyung Park * @license GPLv2 License http://www.gnu.org/licenses/gpl-2.0.html * @link http://lovelyus.net */class LUPushmsg{  var $id;  var $scope;  var $plugin_url;  var $plugin_path;  var $plugin_config;  var $config_file = PUSHMSG_CONFIG_FILE;  var $do_url;  /**   * hook : gpf 후킹   *    * @access public   * @return void   */ function hook($gp_scope) {   $this->scope = $gp_scope;  $this->id = gp_plugin_id(__FILE__);    $this->plugin_path = dirname(__FILE__);    $this->plugin_url = gp_plugin_url(__FILE__);  $this->plugin_config = gp_read_config($this->config_file, array('uid'=>'mb_id'), $this->scope);    define('PUSHMSG_UID', $this->plugin_config['uid']);  $this->do_url = GP_URL . '/do.php?id='.$this->id.'&act=';  gp_add_filter('gpa_menu_plugin_'.$this->id, array($this, 'plugin_menu'));  gp_add_filter('gpa_settings', array($this, 'plugin_setting'), 10);  gp_add_action('pxa_psm_save_setting', array($this, 'plugin_save_setting'));  gp_add_action('pxa_psm_install', array($this, 'plugin_install'));  gp_add_action('pxa_psm_uninstall', array($this, 'plugin_uninstall'));    if(basename($_SERVER['SCRIPT_NAME']) == 'memo_form_update.php') set_session('gpf_pushmsg_memo_updated', true);    gp_add_action('post_write_update', array($this, 'on_write_update'));    gp_add_action('post_write_comment_update', array($this, 'on_write_comment_update'));    gp_add_action('post_memo', array($this, 'on_memo'));    foreach(glob($this->plugin_path."/pages/*.php") as $file)    {      $filename = basename($file);      if($filename{0} == '_') continue;      $px = str_replace('.php', '', $filename);      gp_add_action('px_psm_'.$px, array($this, 'on_px'));    } }  /**   * 설정페이지에 항목 추가   *    * @param mixed $gpa_settings    * @access public   * @return void   */ function plugin_setting($gpa_settings) {  array_push($gpa_settings, array('ID'=>$this->id, 'title'=>'알리미', 'print_contents'=>array($this, 'plugin_config_contents'), 'order'=>10) );  return $gpa_settings; }  /**   * 플러그인 설정 페이지   *    * @access public   * @return void   */ function plugin_config_contents() {  $plugin_config = $this->plugin_config;  $plugin_id = $this->id;  $plugin_path = $this->plugin_path;  $plugin_url = $this->plugin_url;  include_once $this->plugin_path."/tpl/config.form.php"; }  /**   * 설정 저장   *    * @access public   * @return void   */ function plugin_save_setting() {    global $id;    if($this->id != $id) return;  gp_write_config($this->config_file, gp_strip_slashes($_REQUEST['plugin_config']), $this->scope );  alert('알리미 플러그인 설정 저장 완료'); }  function on_px()  {    global $id;    if($this->id != $id) return;    extract($GLOBALS);    if($is_guest) alert('로그인 후 사용하세요');    $scope = $this->scope;    $plugin_id = $this->id;    $plugin_path = $this->plugin_path;    $plugin_url = $this->plugin_url;    $plugin_config = $this->plugin_config;  $px_url = GP_URL . '/do.php?id='.$this->id;    $inc_file = $this->plugin_path.DS.'pages'.DS.basename(str_replace('psm_', '', $act)).'.php';     if(!file_exists($inc_file)) {      gp_alert('알리미 : 잘못된 접근');    }    include_once $inc_file;  }  function on_memo()  {    global $list, $kind, $member;    $sess = get_session('gpf_pushmsg_memo_updated');    set_session('gpf_pushmsg_memo_updated', false);    if($kind != 'send' || empty($list) || !$sess) return;    foreach($list as $item)    {      if(substr($item['me_read_datetime'], 0, 1) != 0) continue;      $mb = get_member($item['me_send_mb_id']);      $sender = $mb[PUSHMSG_UID];      $receiver = $item['me_recv_mb_id'];      $me_id = $item['me_id'];      $prop = serialize(compact('me_id'));      if(sql_fetch("SELECT id FROM gpf_pushmsg WHERE push_type='memo' AND prop='{$prop}'")) continue;      sql_query("INSERT INTO gpf_pushmsg SET        push_type = 'memo'        ,sender = '{$sender}'        ,receiver = '{$receiver}'        ,prop = '{$prop}'        ,reg_date = '".G5_TIME_YMDHIS."'       ");      }  }  function on_write_update()  {    global $w, $bo_table, $wr_id, $wr_name, $write, $member;    if($w != 'r' || !$write['mb_id']) return;    $sender = ($member[PUSHMSG_UID] ? $member[PUSHMSG_UID] : $wr_name);    $receiver = $write['mb_id'];    if($member['mb_id'] == $receiver) return;    $wr_id_from = $_POST['wr_id'];    $wr_id_to = $wr_id;    $prop = serialize(compact('bo_table', 'wr_id_from', 'wr_id_to'));    sql_query("INSERT INTO gpf_pushmsg SET      push_type = 'reply'      ,sender = '{$sender}'      ,receiver = '{$receiver}'      ,prop = '{$prop}'      ,reg_date = '".G5_TIME_YMDHIS."'     ");  }  function on_write_comment_update()  {    global $w, $bo_table, $member, $comment_id, $write, $write_table, $wr_name;    if($w != 'c') return;    $mb_id_to = '';    // comment reply    if($_POST['comment_id'])     {      $type = 'comment_reply';      $reply = sql_fetch("select mb_id from $write_table where wr_id = '{$_POST['comment_id']}' ");      $receiver = $reply['mb_id'];    } else {      $type = 'comment';      $receiver = $write['mb_id'];    }    if(!$receiver) return;    $sender = ($member[PUSHMSG_UID] ? $member[PUSHMSG_UID] : $wr_name);    if($member['mb_id'] == $receiver) return;    $wr_id_to = $_POST['wr_id'];    $cmt_id_to = $_POST['comment_id'];    $cmt_id_from = $comment_id;    $prop = serialize(compact('bo_table', 'wr_id_to', 'cmt_id_to', 'cmt_id_from'));    sql_query("INSERT INTO gpf_pushmsg SET      push_type = '{$type}'      ,sender = '{$sender}'      ,receiver = '{$receiver}'      ,prop = '{$prop}'      ,reg_date = '".G5_TIME_YMDHIS."'     ");  }  /**   * plugins 페이지에 메뉴 추가   *    * @param mixed $menus    * @access public   * @return void   */ function plugin_menu($menus) {  global $bo_table;  if(gp_table_exists('gpf_pushmsg'))   {      array_push($menus, array('href'=>gp_url('setting.php', $this->scope, $noqm=false, $this->id), 'text'=>'설정'));   array_push($menus, array('href'=>gp_url('admin_do.php', $this->scope).'&id='.$this->id.'&act=psm_uninstall', 'attr'=>'onclick="return confirm(\'등록된 모든 DB 정보가 삭제됩니다.\\n진행하시겠습니까?\');"', 'text'=>'DB삭제'));      $res = sql_query("SHOW COLUMNS FROM gpf_pushmsg");      while ($row = sql_fetch_array($res)) {        if($row['Field'] == 'push_type' && strpos($row['Type'], 'enum') !== false)        {          sql_query("ALTER TABLE gpf_pushmsg CHANGE push_type push_type VARCHAR(20) NOT NULL");          break;        }      }  } else {   array_push($menus, array('href'=>gp_url('admin_do.php', $this->scope).'&id='.$this->id.'&act=psm_install', 'text'=>'DB생성', 'attr'=>''));  }  return $menus; }   /**   * 플러그인 설치   *    * @access public   * @return void   */ function plugin_install() {    global $id;    if($this->id != $id) return;  $install_script =<<<EOF  CREATE TABLE IF NOT EXISTS gpf_pushmsg (      id INT NOT NULL AUTO_INCREMENT,      push_type VARCHAR(20) NOT NULL,      sender VARCHAR(50) NOT NULL,      receiver VARCHAR(50) NOT NULL,      prop VARCHAR(255) NOT NULL,      checked BOOL NULL,      reg_date DATETIME NULL,      PRIMARY KEY(id)  ) ENGINE=MyISAM DEFAULT CHARSET=utf8;;EOF;  $f = explode(";", $install_script);  for ($i=0; $i<count($f); $i++) {   if (trim($f[$i]) == "") continue;   sql_query($f[$i]);  }  goto_url(gp_url('plugins.php', $this->scope)); }   /**   * 플러그인 제거   *    * @access public   * @return void   */ function plugin_uninstall() {    global $id;    if($this->id != $id) return;  sql_query("DROP TABLE gpf_pushmsg", false);  gp_deactivate_plugin($this->id, $this->scope);  goto_url(gp_url('plugins.php', $this->scope)); }}?>​

그누보드 사이트처럼 다른사람이 자기글에 댓글을 달면 알림이 뜨는 플러그인 입니다.

여기서 추가해야 하는 기능이 자기글에 자기가 댓글을 달면 관리자에게 알림이 뜨게해야 합니다.

어떤 소스를 추가해야 가능할까요?

|

답변 2개 / 댓글 1개

채택된 답변
+20 포인트

아래 코드처럼 한줄을 주석처리 하시면, 자신이 자신의 글에 댓글을 달아도 알림이 올겁니다.

Copy
function on_write_comment_update()
  {       ....     // if($member['mb_id'] == $receiver) return;    ....}
 

답변에 대한 댓글 1개

앗 자기가 자신의글에 댓글을 달면 관리자에게 뜨게할 수는 없을까요?

아래처럼 하면 될듯 합니다

Copy
function on_write_comment_update()
  {    ....    ....
    sql_query("INSERT INTO gpf_pushmsg SET
      push_type = '{$type}'
      ,sender = '{$sender}'
      ,receiver = '{$receiver}'
      ,prop = '{$prop}'
      ,reg_date = '".G5_TIME_YMDHIS."'
     ");    // 다음 추가    ​if($member['mb_id'] == $receiver) {    ​    $receiver = '관리자 아이디';    ​    sql_query("INSERT INTO gpf_pushmsg SET
          push_type = '{$type}'
          ,sender = '{$sender}'
          ,receiver = '{$receiver}'
          ,prop = '{$prop}'
          ,reg_date = '".G5_TIME_YMDHIS."'
         ");    } }
 

답변을 작성하려면 로그인이 필요합니다.