diff --git a/privatemsg.info b/privatemsg.info index a7ab21a..48a5891 100644 --- a/privatemsg.info +++ b/privatemsg.info @@ -5,6 +5,9 @@ core = 7.x files[] = privatemsg.module files[] = privatemsg.test files[] = views/views_handler_field_privatemsg_link.inc +files[] = views/views_handler_field_pm_thread_link.inc +files[] = views/views_handler_field_pm_new.inc +files[] = views/views_handler_field_pm_markup.inc files[] = views/privatemsg.views.inc files[] = privatemsg.theme.inc files[] = privatemsg.pages.inc diff --git a/views/privatemsg.views.inc b/views/privatemsg.views.inc index 84d4807..53c24cf 100644 --- a/views/privatemsg.views.inc +++ b/views/privatemsg.views.inc @@ -18,6 +18,183 @@ function privatemsg_views_data() { 'handler' => 'views_handler_field_privatemsg_link', ), ); + + //*****PRIVATE MESSAGE TABLE + $data['pm_message']['table']['group'] = t('Privatemsg'); + + $data['pm_message']['table']['base'] = array( + 'field' => 'mid', + 'title' => t('Privatemsg Message'), + 'defaults' => array( + 'field' => 'privatemsg_body', + ), + ); + + $data['pm_message']['table']['entity type'] = 'privatemsg_message'; + + $data['pm_message']['table']['join'] = array( + 'users' => array( + 'handler' => 'views_join', + 'left_table' => 'users', + 'left_field' => 'uid', + 'field' => 'author', + ), + 'pm_index' => array( + 'handler' => 'views_join', + 'left_table' => 'pm_index', + 'left_field' => 'mid', + 'field' => 'mid', + ), + ); + + $data['pm_message']['privatemsg_id'] = array( + 'group' => t('Privatemsg'), + 'real field' => 'mid', + 'title' => t('The privatemsg message ID'), + 'field' => array( + 'title' => t('The ID of the privatemsg'), + 'help' => t('Displays the id of the privatemsg.'), + 'handler' => 'views_handler_field_numeric', + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + 'relationship' => array( + 'base' => 'pm_index', + 'title' => t('The privatemsg Thread ID'), + 'field' => 'mid', + 'handler' => 'views_handler_relationship', + 'label' => t('Threading'), + 'help' => t('Relate the message to threading info'), + ), + ); + + $data['pm_message']['privatemsg_author'] = array( + 'group' => t('Privatemsg'), + 'real field' => 'author', + 'title' => t('Message Author'), + 'field' => array( + 'title' => t('Message Author'), + 'help' => t('The UID of the privatemsg author.'), + 'handler' => 'views_handler_field_numeric', + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + 'relationship' => array( + 'base' => 'users', + 'field' => 'author', + 'handler' => 'views_handler_relationship', + 'label' => t('Privatemsg Sender'), + 'help' => t('Relate to the user who sent the privatemsg'), + ), + ); + + $data['pm_message']['privatemsg_subject'] = array( + 'group' => t('Privatemsg'), + 'real field' => 'subject', + 'title' => t('The subject of the privatemsg'), + 'field' => array( + 'title' => t('Subject'), + 'help' => t('Displays the text subject of the privatemsg.'), + 'handler' => 'views_handler_field_pm_markup', + 'format' => 'full_html', + ), + 'filter' => array( + 'handler' => 'views_handler_filter_string', + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + ); + $data['pm_message']['privatemsg_body'] = array( + 'group' => t('Privatemsg'), + 'real field' => 'body', + 'title' => t('The body of the privatemsg'), + 'field' => array( + 'title' => t('Message'), + 'help' => t('Displays the text of the body of the privatemsg.'), + 'handler' => 'views_handler_field_pm_markup', + 'format' => 'full_html', + ), + 'filter' => array( + 'handler' => 'views_handler_filter_string', + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + ); + + $data['pm_message']['privatemsg_senddate'] = array( + 'group' => t('Privatemsg'), + 'real field' => 'timestamp', + 'title' => t('Send Date'), + 'field' => array( + 'title' => t('Privatemsg Send Date'), + 'help' => t('Displays the date that the privatemsg was sent.'), + 'handler' => 'views_handler_field_date', + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + 'argument' => array( + 'handler' => 'views_handler_argument_date', + ), + ); + + //****PRIVATE MESSAGES INDEX TABLE + $data['pm_index']['table']['group'] = t('Privatemsg'); + + $data['pm_index']['table']['base'] = array( + 'field' => 'mid', + 'title' => t('Privatemsg Threading Index'), + 'defaults' => array( + 'field' => 'privatemsg_thread', + ), + ); + + $data['pm_index']['table']['entity type'] = 'privatemsg_message'; + + $data['pm_index']['thread_id'] = array( + 'group' => t('Privatemsg'), + 'real field' => 'thread_id', + 'title' => t('The Privatemsg thread id'), + 'field' => array( + 'title' => t('Link to Thread'), + 'help' => t('A link to the privatemsg thread'), + 'handler' => 'views_handler_field_pm_thread_link', + ), + ); + $data['pm_index']['privatemsg_recipient'] = array( + 'group' => t('Privatemsg'), + 'real field' => 'recipient', + 'title' => t('Recipient'), + 'field' => array( + 'title' => t('Privatemsg Recipient'), + 'help' => t('The UID of the privatemsg recipient'), + 'handler' => 'views_handler_field_numeric', + ), + 'argument' => array( + 'title' => t('Privatemsg Recipient'), + 'help' => t('Filter according to the recipient's uid'), + 'handler' => 'views_handler_argument_user_uid', + ), + ); + $data['pm_index']['privatemsg_is_new'] = array( + 'group' => t('Privatemsg'), + 'real field' => 'is_new', + 'title' => t('Privatemsg Is New'), + 'field' => array( + 'title' => t('Has Been Read'), + 'help' => t('Whether the privatemsg has been read'), + 'handler' => 'views_handler_field_pm_new', + ), + 'filter' => array( + 'title' => t('Has Been Read'), + 'help' => t('Filter to privatemsgs that have/have not been read'), + 'handler' => 'views_handler_filter_boolean_operator', + ), + ); return $data; } diff --git a/views/views_handler_field_pm_markup.inc b/views/views_handler_field_pm_markup.inc new file mode 100644 index 0000000..8f8fff2 --- /dev/null +++ b/views/views_handler_field_pm_markup.inc @@ -0,0 +1,62 @@ + {$field}) where $field is the field in this table + * used to control the format such as the 'format' field in the node, + * which goes with the 'body' field. + * + * @ingroup views_field_handlers + */ +class views_handler_field_pm_markup extends views_handler_field_markup { + /** + * Constructor; calls to base object constructor. + */ + function construct() { + parent::construct(); + } + + function option_definition() { + $options = parent::option_definition(); + $options['pmid'] = array('default' => ''); + return $options; + } + + function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + $form['pmid'] = array( + '#type' => 'textfield', + '#title' => t('ID of the Current Privatemsg (REQUIRED for token replacement)'), + '#description' => t('Enter the replacement-pattern (SEE THEM BELOW) for the field corresponding to the privatemsg id. If this field is not set correctly, then token replacement will not work for the private msg'), + '#default_value' => $this->options['pmid'], + ); + } + + function render($values) { + $value = $this->get_value($values); + if (is_array($this->format)) { + $format = $this->get_value($values, 'format'); + } + else { + $format = $this->format; + } + if ($value) { + // Only can do token replacement if there is an mid field + // exposed. + $pmid = $this->tokenize_value($this->options['pmid']); + if ($privatemsg = privatemsg_message_load($pmid)) { + $value = privatemsg_token_replace($value, array('privatemsg_message' => $privatemsg)); + } + $value = str_replace('', '', $value); + return check_markup($value, $format, ''); + } + } +} diff --git a/views/views_handler_field_pm_new.inc b/views/views_handler_field_pm_new.inc new file mode 100644 index 0000000..684c76b --- /dev/null +++ b/views/views_handler_field_pm_new.inc @@ -0,0 +1,44 @@ + 'New!', 'translatable' => true); + $options['not'] = array('definition bool' => 'reverse'); + + return $options; + } + + function options_form(&$form, &$form_state) { + $form['new_text'] = array( + '#type' => 'textfield', + '#title' => t('New Text'), + '#description' => t('Text to show if the message has not been read'), + '#default_value' => (isset($this->options['new_text'])) ? $this->options['new_text'] : '', + ); + $form['not'] = array( + '#type' => 'checkbox', + '#title' => t('Reverse'), + '#description' => t('If checked, true will be displayed as false.'), + '#default_value' => $this->options['not'], + ); + parent::options_form($form, $form_state); + } + + function render($values) { + $value = $this->get_value($values); + if (!empty($this->options['not'])) { + $value = !$value; + } + + return ($value == 0) ? $this->options['new_text'] : ''; + } +} diff --git a/views/views_handler_field_pm_thread_link.inc b/views/views_handler_field_pm_thread_link.inc new file mode 100644 index 0000000..00e2f07 --- /dev/null +++ b/views/views_handler_field_pm_thread_link.inc @@ -0,0 +1,39 @@ + t('View Thread'), 'translatable' => TRUE); + return $options; + } + + function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + $form['link_text'] = array( + '#type' => 'textfield', + '#title' => t('Link Text'), + '#description' => t('The text to show in the link'), + '#default_value' => isset($this->options['link_text']) ? $this->options['link_text'] : '', + ); + } + + function render($values) { + $value = $this->get_value($values); + if(privatemsg_user_access()) { + $data = l($this->options['link_text'], 'messages/view/' . $value); + return $data; + } + } +} }