home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 April / CMCD0404.ISO / Software / Freeware / Programare / dotproject / modules / forums / forums.class.php < prev    next >
Encoding:
PHP Script  |  2003-12-21  |  5.5 KB  |  217 lines

  1. <?php /* FORUMS $Id: forums.class.php,v 1.9 2003/12/21 11:55:49 gregorerhardt Exp $ */
  2.  
  3. require_once( $AppUI->getSystemClass( 'libmail' ) );
  4.  
  5. class CForum {
  6.     var $forum_id = NULL;
  7.     var $forum_project = NULL;
  8.     var $forum_status = NULL;
  9.     var $forum_owner = NULL;
  10.     var $forum_name = NULL;
  11.     var $forum_create_date = NULL;
  12.     var $forum_last_date = NULL;
  13.     var $forum_last_id = NULL;
  14.     var $forum_message_count = NULL;
  15.     var $forum_description = NULL;
  16.     var $forum_moderated = NULL;
  17.  
  18.     function CForum() {
  19.         // empty constructor
  20.     }
  21.  
  22.     function bind( $hash ) {
  23.         if (!is_array( $hash )) {
  24.             return "CForum::bind failed";
  25.         } else {
  26.             bindHashToObject( $hash, $this );
  27.             return NULL;
  28.         }
  29.     }
  30.  
  31.     function check() {
  32.         if ($this->forum_id === NULL) {
  33.             return 'forum_id is NULL';
  34.         }
  35.         // TODO MORE
  36.         return NULL; // object is ok
  37.     }
  38.  
  39.     function store() {
  40.         $msg = $this->check();
  41.         if( $msg ) {
  42.             return "CForum::store-check failed<br />$msg";
  43.         }
  44.         if( $this->forum_id ) {
  45.             $ret = db_updateObject( 'forums', $this, 'forum_id', false ); // ! Don't update null values
  46.             if($this->forum_name) {
  47.                 // when adding messages, this functon is called without first setting 'forum_name'
  48.                 addHistory("Updated forum '" . $this->forum_name . "'");
  49.             }
  50.         } else {
  51.             $this->forum_create_date = db_datetime( time() );
  52.             $ret = db_insertObject( 'forums', $this, 'forum_id' );
  53.             addHistory("Added new forum '" . $this->forum_name . "'");
  54.         }
  55.         if( !$ret ) {
  56.             return "CForum::store failed <br />" . db_error();
  57.         } else {
  58.             return NULL;
  59.         }
  60.     }
  61.  
  62.     function delete() {
  63.         $sql = "DELETE FROM forums WHERE forum_id = $this->forum_id";
  64.         if (!db_exec( $sql )) {
  65.             return db_error();
  66.         }
  67.         $sql = "DELETE FROM forum_messages WHERE message_forum = $this->forum_id";
  68.         if (!db_exec( $sql )) {
  69.             return db_error();
  70.         } else {
  71.             addHistory("Deleted forum '". $this->forum_name . "'");
  72.             return NULL;
  73.         }
  74.     }
  75. }
  76.  
  77. class CForumMessage {
  78.     var $message_id = NULL;
  79.     var $message_forum = NULL;
  80.     var $message_parent = NULL;
  81.     var $message_author = NULL;
  82.     var $message_editor = NULL;
  83.     var $message_title = NULL;
  84.     var $message_date = NULL;
  85.     var $message_body = NULL;
  86.     var $message_published = NULL;
  87.  
  88.     function CForumMessage() {
  89.         // empty constructor
  90.     }
  91.  
  92.     function bind( $hash ) {
  93.         if (!is_array( $hash )) {
  94.             return "CForumMessage::bind failed";
  95.         } else {
  96.             bindHashToObject( $hash, $this );
  97.             return NULL;
  98.         }
  99.     }
  100.  
  101.     function check() {
  102.         if ($this->message_id === NULL) {
  103.             return 'message_id is NULL';
  104.         }
  105.         // TODO MORE
  106.         return NULL; // object is ok
  107.     }
  108.  
  109.     function store() {
  110.         $msg = $this->check();
  111.         if( $msg ) {
  112.             return "CForumMessage::store-check failed<br />$msg";
  113.         }
  114.         if( $this->message_id ) {
  115.             $ret = db_updateObject( 'forum_messages', $this, 'message_id', false ); // ! Don't update null values
  116.         } else {
  117.             $this->message_date = db_datetime( time() );
  118.             $new_id = db_insertObject( 'forum_messages', $this, 'message_id' ); ## TODO handle error now
  119.             echo db_error(); ## TODO handle error better
  120.  
  121.             $sql = "SELECT count(message_id),
  122.             MAX(message_date)
  123.             FROM forum_messages
  124.             WHERE message_forum = $this->message_forum";
  125.  
  126.             $res = db_exec( $sql );
  127.             echo db_error(); ## TODO handle error better
  128.             $reply = db_fetch_row( $res );
  129.  
  130.             //update forum descriptor
  131.             $forum = new CForum();
  132.             $forum->forum_id = $this->message_forum;
  133.             $forum->forum_message_count = $reply[0];
  134.             $forum->forum_last_date = $reply[1];
  135.             $forum->forum_last_id = $this->message_id;
  136.  
  137.             $forum->store(); ## TODO handle error now
  138.  
  139.             return $this->sendWatchMail( false );
  140.         }
  141.  
  142.         if( !$ret ) {
  143.             return "CForumMessage::store failed <br />" . db_error();
  144.         } else {
  145.             return NULL;
  146.         }
  147.     }
  148.  
  149.     function delete() {
  150.         $sql = "DELETE FROM forum_messages WHERE message_id = $this->message_id";
  151.         if (!db_exec( $sql )) {
  152.             return db_error();
  153.         } else {
  154.             return NULL;
  155.         }
  156.     }
  157.  
  158.     function sendWatchMail( $debug=false ) {
  159.         GLOBAL $AppUI, $debug;
  160.         $subj_prefix = $AppUI->_('forumEmailSubj');
  161.         $body_msg = $AppUI->_('forumEmailBody');
  162.  
  163.         // SQL-Query to check if the message should be delivered to all users (forced)
  164.         // In positive case there will be a (0,0,0) row in the forum_watch table
  165.         $sql = "SELECT * FROM forum_watch WHERE watch_user = 0 AND watch_forum = 0 AND watch_topic = 0";
  166.         $resAll = db_exec( $sql );
  167.  
  168.         if (db_num_rows( $resAll ) >= 1)    // message has to be sent to all users
  169.         {
  170.             $sql = "
  171.             SELECT DISTINCT user_email, user_id, user_first_name, user_last_name
  172.             FROM users
  173.             ";
  174.         }
  175.         else                     //message is only delivered to users that checked the forum watch
  176.         {
  177.             $sql = "
  178.             SELECT DISTINCT user_email, user_id, user_first_name, user_last_name
  179.             FROM users, forum_watch
  180.             WHERE user_id = watch_user
  181.                 AND (watch_forum = $this->message_forum OR watch_topic = $this->message_parent)
  182.             ";
  183.         }
  184.  
  185.  
  186.     ##echo "<pre>$sql</pre>";##
  187.  
  188.         if (!($res = db_exec( $sql ))) {
  189.             return;
  190.         }
  191.         if (db_num_rows( $res ) < 1) {
  192.             return;
  193.         }
  194.  
  195.         $mail = new Mail;
  196.         $mail->Subject( "$subj_prefix $this->message_title", isset( $GLOBALS['locale_char_set']) ? $GLOBALS['locale_char_set'] : "");
  197.  
  198.         $body = "$body_msg";
  199.         $body .= "\n{$AppUI->cfg['base_url']}/index.php?m=forums&a=viewer&forum_id=$this->message_forum";
  200.         $body .= "\n\n$this->message_title";
  201.         $body .= "\n\n$this->message_body";
  202.  
  203.         $mail->Body( $body, isset( $GLOBALS['locale_char_set']) ? $GLOBALS['locale_char_set'] : ""  );
  204.         $mail->From( $AppUI->_('forumEmailFrom') );
  205.  
  206.         while ($row = db_fetch_assoc( $res )) {
  207.             if ($mail->ValidEmail( $row['user_email'] )) {
  208.                 $mail->To( $row['user_email'], true );
  209.                 $mail->Send();
  210.                 //echo '<textarea cols=80 rows=15>';print_r($mail);echo '</textarea>';die;
  211.             }
  212.         }
  213.         return;
  214.     }
  215. }
  216. ?>
  217.