[Isocial-svn] SF.net SVN: isocial: [93]
Status: Pre-Alpha
Brought to you by:
aguidrevitch
From: <di...@us...> - 2008-03-18 11:02:12
|
Revision: 93 http://isocial.svn.sourceforge.net/isocial/?rev=93&view=rev Author: dim0s77 Date: 2008-03-18 04:02:18 -0700 (Tue, 18 Mar 2008) Log Message: ----------- mark thread as read/unread by click on thread icon Modified Paths: -------------- app/controllers/message_controller.php app/views/message/_rows.tpl app/views/message/inbox.tpl public/stylesheets/Message.css Modified: app/controllers/message_controller.php =================================================================== --- app/controllers/message_controller.php 2008-03-17 20:05:51 UTC (rev 92) +++ app/controllers/message_controller.php 2008-03-18 11:02:18 UTC (rev 93) @@ -18,8 +18,10 @@ $this->last_box = 'outbox'; } - function _getBoxMessages ($box_message) { - $messages = $this->current_user->$box_message->load(); + function _getBoxMessages ($box_message, $thread_id = '') { + $messages = $thread_id ? + $this->current_user->$box_message->find('all', array('conditions' => array("thread_id = ?", $thread_id))) : + $this->current_user->$box_message->load(); $box_messages = array(); if(!empty($messages)) { foreach ($messages as $message_loop_key => $message) { @@ -129,12 +131,12 @@ } function mark_unread () { - $this->last_box = 'inbox'; // there is no way message can be read/unread in outbox + $this->last_box = 'inbox'; return $this->_mark_messages(0); } function mark_read () { - $this->last_box = 'inbox'; // there is no way message can be read/unread in outbox + $this->last_box = 'inbox'; return $this->_mark_messages(1); } @@ -148,10 +150,7 @@ ) ); if ($messages) { - foreach ($messages as $message_loop_key => $message) { - $message->is_read = $is_read; - $message->save(); - } + $this->_update_messages($messages, "is_read = $is_read"); } } return $this->render(array('partial' => 'rows', @@ -159,6 +158,47 @@ 'target' => 'sender'))); } + function _update_messages ($messages, $updates) { + $ids = array(); + foreach ($messages as $message_loop_key => $message) { + $ids[] = $message->getId(); + } + $this->Message->updateAll($updates, + "id IN (" . $this->Message->_make_in_statement_from_array('id', $ids) . ")" + ); + } + + function mark_unread_row () { + $this->last_box = 'inbox'; + return $this->_mark_message_row(0); + } + + function mark_read_row () { + $this->last_box = 'inbox'; + return $this->_mark_message_row(1); + } + + function _mark_message_row ($is_read) { + if (!empty($this->params['row_id'])) { + list ($row_name, $thread_id) = explode("-", $this->params['row_id']); + if ($row_name == "thread" && $thread_id) { + $messages = $this->Message->find('all', + array('conditions' => + array("thread_id = ? AND (recipient_id = ?)", + $thread_id, $this->current_user->getId() + ) + ) + ); + if ($messages) { + $this->_update_messages($messages, "is_read = $is_read"); + return $this->render(array('partial' => 'row', + 'locals' => array('messages' => $this->_getBoxMessages('inbox_message', $thread_id)) + )); + } + } + } + } + function delete_inbox_thread () { $this->_delete_thread(); return $this->render(array('partial' => 'rows', Modified: app/views/message/_rows.tpl =================================================================== --- app/views/message/_rows.tpl 2008-03-17 20:05:51 UTC (rev 92) +++ app/views/message/_rows.tpl 2008-03-18 11:02:18 UTC (rev 93) @@ -2,18 +2,11 @@ <tbody> {loop messages} <? $sender = $message['message']->$target->load() ?> -<tr class="<? if ($target == 'sender' && !$message['message']->is_read) { echo 'new_message'; } ?>"> +<tr id="thread-{message-message.thread_id}" class="<? if ($target == 'sender' && !$message['message']->is_read) { echo 'new_message'; } ?>"> <td class="msg_icon"> - <? if ($target == 'sender') { - if ($message['message']->is_read) { - echo '<a class="email_open" href="#" onclick="oncheck(this, 1)"></a>'; - } else { - echo '<a class="email_closed" href="#" onclick="oncheck(this, 0)"></a>'; - } - } else { - echo '<span> </span>'; - } - ?> + <? if ($target == 'sender') { ?> + <a class="email_img" href="#" onclick="on{?message-message.is_read}un{end}read('thread-{message-message.thread_id}')"></a> + <? } else { echo '<span> </span>'; } ?> </td> <td class="checkbox"><input onclick="oncheck(this, {?message-message.is_read}{message-message.is_read}{else}0{end})" type="checkbox" class="check{?message-message.is_read}read{else}unread{end}" id="{message-message.thread_id}" name="check_messages[]" value="{message-message.thread_id}"></td> <td class="profile_photo"><a href="/profile/show/{sender.id}"><img src="/images/nophoto_men_sm.gif" alt="" class=""></a></td> Modified: app/views/message/inbox.tpl =================================================================== --- app/views/message/inbox.tpl 2008-03-17 20:05:51 UTC (rev 92) +++ app/views/message/inbox.tpl 2008-03-18 11:02:18 UTC (rev 93) @@ -148,4 +148,29 @@ $("delete_link").addClassName('disabled'); } +function onread (row_id) { + new Ajax.Updater(row_id, + '/message/mark_read_row', + { method:'post', + asynchronous: true, + parameters: 'row_id=' + row_id, + onSuccess: function () { + $(row_id).removeClassName('new_message'); + } + }); + return false; +} + +function onunread (row_id) { + new Ajax.Updater(row_id, + '/message/mark_unread_row', + { method:'post', + asynchronous: true, + parameters: 'row_id=' + row_id, + onSuccess: function () { + $(row_id).addClassName('new_message'); + } + }); +} + </script> Modified: public/stylesheets/Message.css =================================================================== --- public/stylesheets/Message.css 2008-03-17 20:05:51 UTC (rev 92) +++ public/stylesheets/Message.css 2008-03-18 11:02:18 UTC (rev 93) @@ -23,6 +23,14 @@ font-weight: bold; } +.message_row .new_message .email_img { + background: url('/images/email.png') no-repeat 10px; +} + +.message_row .email_img { + background: url('/images/email_open.png') no-repeat 10px; +} + .message_row tr td { border-bottom: 1px solid #e1e1e1; padding: 5px 0px 5px 0px; @@ -229,10 +237,3 @@ color: #999999; } -.email_closed { - background: url('/images/email.png') no-repeat 10px; -} - -.email_open { - background: url('/images/email_open.png') no-repeat 10px; -} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |