Support from Acquia helps fund testing for Drupal Acquia logo

Comments

NaheemSays’s picture

FileSize
3.38 KB

This patch does not rename the inbox but does the rest.

NaheemSays’s picture

Status: Active » Needs review
litwol’s picture

In teresting thought. i'll ask around IRC of peoplethat use PMSG to see what they think.

One thing to consider is that at a later date (when we feel we are ready to do this) i would like to enable message tagging. so instead of folders you can create tags to categorize messages (like google does). so the 'inbox' will list all converstions but you can then click on a message 'tag' to see only messages associated with that tag.

NaheemSays’s picture

That is the next step. What I think it may be like:

We would need a new table which stores the thread_id and the tag id (also another table storing tag name, tag id and uid). "view" is hardcoded and if the bit in the url is different, then that is a tag - a parameter to be passed to the alter function.

mrtoner’s picture

+1 for dumping the sent messages mailbox -- and "folders" as well.

NaheemSays’s picture

mrtoner’s picture

Status: Needs review » Needs work

There's an error when a user *without* "read all private messages" is reading his messages:

"user warning: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause query: SELECT MAX(pmi.mid) as id, pmi.thread_id, pm.subject, pmi.author, pmi.timestamp, pmi.new FROM pm_message pm INNER JOIN pm_index pmi ON pm.mid = pmi.mid WHERE (pmi.recipient = 3) AND (pmi.recipient_del = 0)UNION SELECT MAX(pm.mid) as id, pmi.thread_id, pm.subject, pmi.recipient, pmi.timestamp FROM pm_message pm INNER JOIN pm_index pmi ON pm.mid = pmi.mid WHERE (pmi.author = 3) AND (pmi.author_del = 0) GROUP BY pmi.thread_id ORDER BY pmi.new desc, MAX(pmi.mid) DESC"

Also, reconsider how the query is built: a user *with* "read all private messages" will see a different view of his own messages than he has previously.

NaheemSays’s picture

Thanks for the reviews, I'll try to look into this later today.

As for reconsidering behaviour, I would agree... any ideas on how to go about it?

mrtoner’s picture

Similar to the test before it, change the display only if the account doesn't belong to the user:

if ($account->uid != $GLOBALS['user']->uid) {

If I'm not mistaken, at that point in the code the user must have already passed an access check for those to be different.

mrtoner’s picture

Also, privatemsg_block() needs to be updated to remove the Sent messages link.

NaheemSays’s picture

Status: Needs work » Needs review
FileSize
10.29 KB

There is a cosmetic problem with the listing (which I do not know how to fix... how do you unset a NULL column?), apart from that everything is good to go (I had to make more changes to the querybuilder).

I also got rid of the order_by code and reinstated what we had before - I've been thinking that ordering by new at the top may not really be the best idea, and this (older) way also uses the core functions. comments?

I also got rid of author/recipient columns as they do not work too well in a conversation context(multiple authors/recipients).

EDIT - I will happily admit that some of this should go into earlier patches (as a portion of this fixes mistakes I made in the querybuilder, and another selects the right timestamp/new status to show for conversations), but they are now rtbc, and I do not want to disturb them.

mrtoner’s picture

I believe you can get rid of this whole section:

   switch (arg(1)) {
-    case 'sent':
-      $query = _privatemsg_assemble_query('privatemsg_list_sent', $account);
-      break;
     case 'inbox':
     default:

and the if() wrapper here:

     if (arg(1) == 'inbox') {
       $query = _privatemsg_assemble_query('privatemsg_list', $account);
     }
I also got rid of author/recipient columns as they do not work too well in a conversation context(multiple authors/recipients).

Makes sense...

I also got rid of the order_by code and reinstated what we had before - I've been thinking that ordering by new at the top may not really be the best idea, and this (older) way also uses the core functions. comments?

...but this doesn't. You're removing the ability to sort by clicking on the remaining column headers, which the user expects to be able to do -- since core makes them clickable and gives them sort indicators.

how do you unset a NULL column?

By number instead of by key?

There's also a comment (#38) at #299491: Put a reply form on the message page that you might address as long as we're making changes to the list view.

NaheemSays’s picture

yeah that comment in number 38 is covered by this patch... should I move it over?

As for "order by", have you tested it? I am pretty sure it worked when I made the changes...

I may not get a chance to make any changes to this patch til tomorrow.

mrtoner’s picture

Status: Needs review » Needs work

As for "order by", have you tested it? I am pretty sure it worked when I made the changes...

Didn't think I needed to when I looked at the patch. What's handling the clicks on the column headers?

Okay, so I applied the patch. Looking at privatemsg_privatemsg_list_alter() I can see that there are no ORDER BY clauses. As a result there is no default sort when the list is viewed. Since the column header for "received" indicates there's a descending sort on this column, we need to at least actually perform the sort.

And I oppose removing the sort for "new" -- users -- this user, at least -- want to easily access new messages.

"received" no longer makes sense as a column header, since sent messages are also in the list. Perhaps "date"? Or "latest"?

I'm seeing multiple messages from a single thread in the list. Seems to be one line for sent messages, another for received messages in the same thread.

privatemsg_unread_count() gives a count of unread messages, rather than a count of threads with unread messages. This is confusing to users who see two threads with unread messages in the list, while seeing "Read Messages (3)" in the block.

And I'd sure like to see some indication in the list of at least one of the other participants.

Finally, unset($row['new']); needs to be put back to remove that column from the list.

NaheemSays’s picture

Didn't think I needed to when I looked at the patch. What's handling the clicks on the column headers?

the $tablesort in

+    $tablesort = tablesort_sql($head);
     if (arg(1) == 'inbox') {
       $query = _privatemsg_assemble_query('privatemsg_list', $account);
     }
-    else if (arg(1) == 'sent') {
-      $query = _privatemsg_assemble_query('privatemsg_list_sent', $account);
-    }
-
+    $query .= $tablesort;

Just checked and this works for me... as for also sorting by new, using the old method with this method results in the following syntax: "ORDER BY NEW ORDER BY {Whatever}".

In the short term, I will revert this.

I'm seeing multiple messages from a single thread in the list. Seems to be one line for sent messages, another for received messages in the same thread.

Yeah, just noticed this too. No idea why as from what I read, this should not be the case with a UNION...

And I'd sure like to see some indication in the list of at least one of the other participants.

Just had a look at Gmail and the way it does it is to list participants first, followed by the subject, followed by the time. Something to think about as that feels natural to me. No idea how to do that in the querybuilder though.

Finally, unset($row['new']); needs to be put back to remove that column from the list.

?

Is it not there?

as for the problems with the threading and related stuff, I think I will need to go back and add the stuff there.

mrtoner’s picture

What's handling the clicks on the column headers?

the $tablesort...

No, what I mean is: what does the actual sorting when you click on a column header? Is this something that core handles? I had added the additional sorting code because it didn't appear that anything was responding to the clicks. api.drupal.org doesn't -- at least as far as I can find -- indicate that core handles this.

using the old method with this method results in the following syntax: "ORDER BY NEW ORDER BY {Whatever}

I really ought to completely check this out before I comment. I was partially wrong; the clause I get by default is: ORDER BY new DESC -- the list doesn't sort by "received." (And I forgot that tablesort_sql() adds that ORDER BY clause.)

Finally, unset($row['new']); needs to be put back to remove that column from the list.

Is it not there?

Nope!

I hope this patch and the others gets in soon, as I need to update my access control patch and work on a couple other areas.

NaheemSays’s picture

Status: Needs work » Postponed

I think this patch has got a little big and I plan to break a few things into their smaller patches first.

Also, I amstuck with the actual problem of how to only show each thread once... (and I have suddenly got a reduced amount of time to play with things...)

You may as well go ahead and get the access control patch ready first as the other stuff I am planning is less invasive (fixing the menu item to show unread posts and to only take distinct threads into account, per message actions and also a couple of things that have left my mind.).

NaheemSays’s picture

Status: Postponed » Needs review
FileSize
3.86 KB

Updated to new HEAD. I would like this in for the beta - it will let us know if there is a demand for the (IMO semi useless) Sent Messages menu item. If there is, we can then revert it.

NaheemSays’s picture

Status: Needs review » Needs work

pre-empting the status change due to a dix in #315325: Userblocking architecture + other fixes which will force a reroll of this patch.

litwol’s picture

whats the news with this one ?

NaheemSays’s picture

needs to be rerolled... I have added the ability (but not the UI) to filter by author into #314327: Tagging architecture.

NaheemSays’s picture

Status: Needs work » Needs review
FileSize
3.47 KB

rerolled patch.

dawehner’s picture

FileSize
3.64 KB

i tested the patch and got

Hunk #2 succeeded at 256 (offset 1 line).
Hunk #3 succeeded at 640 (offset -11 lines).
Hunk #4 succeeded at 664 (offset -11 lines).
Hunk #5 succeeded at 837 (offset -11 lines).

So here is a rerole of the patch

The patch works perfect here

NaheemSays’s picture

FileSize
4.35 KB

replaced inbox in menu items with list - its not really an inbox.

NaheemSays’s picture

FileSize
4.35 KB

and anotehr minute change - replaced "1" with "an" in a string.

NaheemSays’s picture

FileSize
4.05 KB

Updated patch.

NaheemSays’s picture

Title: Get rid of Sent Messages? » Move "Sent Messages" to privatemsg_filter, Add inbox, improve user filtering.
Status: Needs review » Needs work
FileSize
8 KB

This patch also includes the patch in #378138: Change "filter by author" to "filter by participant"? and #367745: permissions for privatemsg_filter need to be improved..

I realise that this will also need to be rerolled after #348907: Per thread/Multiple thread actions goes in, but I think the attached patch goes the right way to improve things.

What it does:

1. It removes "Sent Messages" from the privatemsg module.
2. It adds both a sent messages AND an inbox to the privatemsg_filter.module. - there are problems with the author/participants column that will need fixing.
3. It changes the author filter into a participant filter.
4. The filters will work on the current page instead of always going back to the " all messages" page.

Comments?

NaheemSays’s picture

Here is a manually edited patch file to go on top of #348907: Per thread/Multiple thread actions - but it does not work for the inbox/sent messages. Just putting up for others to look at if they wish, give pointers.

One thing that I have done is remove array('privatemsg_list', 'list') from the menu and $query_name from privatemsg_list and others as that should no longer be needed. comments?

Any ideas why the inbox/sent messages are showing "array" instead of the message list?

Berdir’s picture

Not looked at the patch yet, but "Array" is either because page callback => drupal_get_form is missing or the menu has not been rebuilt.

NaheemSays’s picture

oh yes, it was be the drupal_get form. Now I get a blank page, so I will leave it til the other patch is ready and final and work off that again, rerolling patch on comment 27.

Liam McDermott’s picture

Version: » 6.x-1.x-dev

Firstly, is there any reason why this has to wait for #348907: Per thread/Multiple thread actions; are you just anticipating that patch will go in first?

I very much like using filters instead of a monolithic switch/case construct in the message list code, filters are far more elegant. Aesthetically, Inbox/Sent messages look better in secondary tabs, under 'All Messages', than as primary tabs, in my opinion.

I only reviewed the patch in #27, but couldn't find anything wrong with it. However, the patch in #27 does include the code from #367745: permissions for privatemsg_filter need to be improved., so that will need to go in before this can be RTBC.

One question:

-      '#title' => t('Authors'),
+      '#title' => t('Participants'),

In the message list the header is 'Authors', yet in the message thread display it's 'Participants'. Which should this be?

NaheemSays’s picture

Firstly, is there any reason why this has to wait for #348907: Per thread/Multiple thread actions; are you just anticipating that patch will go in first?

Yes, just anticipating that. Should I just let the two race each other? that could cause other issues when implementations differ.

As for the switching, this patch should eliminate the need for a switch in privatemsg_list.

One question:

-      '#title' => t('Authors'),
+      '#title' => t('Participants'),

In the message list the header is 'Authors', yet in the message thread display it's 'Participants'. Which should this be?

I have changed the search to filter by participant (which will also be in addition to additional filtering by inbox, sent messages etc, so while in inbox it should be the same as the current behaviour). I do not like the word participants in this context either, so maybe just change it to "users"? I had done that in the patch that did not work.

Liam McDermott’s picture

Just did some more testing of this. Tried switching off the filter permissions for authenticated users, then used a standard user to access 'Inbox' and 'Sent messages'. This allowed the use of these special filters, but hid the filter form, and is exactly the behaviour I would expect. Switching the filter module off also didn't break anything, just quietly switched off the Inbox and Sent messages menu items.

Two small problems with this patch, however:

  1. selecting 'All messages' doesn't select 'Inbox' automatically, this makes the user feel like they are in limbo somewhat;
  2. are users going to be confused that they have to switch the Privatemsg filter to get the Inbox / Sent messages menu items? Not sure what could be done about this, however.

*** EDIT ***

Yes, just anticipating that. Should I just let the two race each other?

Fair enough, I was just wondering. :)

If #367745: permissions for privatemsg_filter need to be improved. is committed shortly, this patch may get in before #348907: Per thread/Multiple thread actions (I could be wrong of course, but this patch seems to be nearly ready).

I do not like the word participants in this context either, so maybe just change it to "users"?

I was thinking that we should just pick either 'participants' or 'authors' and use it for everything. Maybe litwol would like to chime in, or perhaps we should just leave it as 'participants' for now and create a separate issue or discuss it in IRC.

NaheemSays’s picture

Status: Needs review » Needs work
FileSize
9.39 KB

Slight modification of patch in comment 27 (so racing with the per node actions).

Setting to cnr as I would like more comments etc - I think the patch is done, but if positioned after the per thread actions, it will need to have more work done on it.

Comments by others on what to do?

@ comment 26 - I find this a cleaner way to add an inbox and a sent messages - and the end users will not notice any problems. The admins will ned to familiarise themselves with the code anyway, so I see no problem with having such things in the filter module because the two are filters. (also the old way slightly irritated me as it seemed not as elegant).

Also #367745: permissions for privatemsg_filter need to be improved. has been rolled into this patch, so if that goes in first, this will need to eb rerolled. a simple reroll, so I am willing to see which goes in first.

NaheemSays’s picture

Status: Needs work » Needs review
Berdir’s picture

Status: Needs work » Needs review

I haven't looked at the code or output yet, just a few comments to the discussion

- The switch statement is killed in my patch (thread actions) anyway, in favor of a argument which is defined in hook_menu. ($query_name). That could either be removed or instead added as a argument to the list query function. This would allow to change the query based on a unified solution instead on relying on the url or something "outside". Just an idea..

- There is imho a difference between author and participant. Participants are users which recieved a message while authors are only those that wrote a message inside that thread (maybe a sub-group of the participants, maybe all of them). Currently, the list only displays authors, not participants. I didn't define that, just adopted it as I understood it.

- About the placement of the url's/pages/listings, the ultimative goal is to make this configurable. I'm not sure what's the best default placement. Need to try the patch first.

- I don't care which patch goes in first, both need to be adapted.

Berdir’s picture

Another thing about $query_name. I used it to set the header in an older patch (this was the main reason I implemented it), this is now based on the actual query.

NaheemSays’s picture

Status: Needs review » Needs work

There is imho a difference between author and participant.

There is, but with the changes the filter will also work with the inbox - where your messages are filtered out, so that will be the same as filter by author. running the query in "sent messages" will be the same as filter by recipient. Just if tis run in all messages, then its like filter by participant.

Setting to cnw as will need to be rerolled as #367745: permissions for privatemsg_filter need to be improved. is being committed separately and this patch includes that.

- The switch statement is killed in my patch (thread actions) anyway, in favor of a argument which is defined in hook_menu. ($query_name). That could either be removed or instead added as a argument to the list query function. This would allow to change the query based on a unified solution instead on relying on the url or something "outside". Just an idea..

yeah. instead of getting the argument in the sql alter function, just check what the query_name is. if its inbox or sent, then do their extra filtering.

NaheemSays’s picture

FileSize
12.8 KB

New patch applies on top of/after #348907: Per thread/Multiple thread actions

NaheemSays’s picture

Status: Needs work » Needs review
Berdir’s picture

A few comments, just looking throug the patch..

- no need to use a subquery for mysql, just group_concat should work fine
- Not sure about the autor/participants stuff, we need to think/discuss about this. IRC would be nice, we should also include litwol in that discussion
- I like the $argument thing. Thinking about ilo's work for tags and filters, I'm wondering if we could even use two variables.. something like $argument_type and $argument. $argument type could be filter, tag, fixed or whatever. So a module could distinguish between the fixed sent display, and a user tag or filter called sent. Just an idea and we don't need to do that in that patch.
- An idea to shorten the code a bit. The menu definitions in privatemgs_filter_menu are the same, except of the page arguments. You could create a $default menu defnition, and use something l.ike:

$items['messages/list/inbox'] = $default + array('page arguments' => array(''privatemsg_list', 'inbox')));

- That part might not work for everything, but I haven't tested it.

  if ($argument == 'inbox') {
    $fragments['where'][]       = "pm.author <> %d";
    $fragments['query_args'][]   = $account->uid;
  }

For example, when I send a message and recieve an answer, it should show up in the inbox. Because we use group by, distinct and other crazy stuff, this might not work as expected. I need to test this (on mysql and pgsql)

NaheemSays’s picture

Status: Needs review » Needs work

no need to use a subquery for mysql, just group_concat should work fine

I am just using the query that was in the list_sent here - afaik no changes to what was there apart from changing recipient to participants.

The user/participant/recipient does need more thought and the above query may also need to be modified to include the current user.

I have just tested the inbox with a message to self and you were right. Any ideas on how to fix? (Should it be fixed?)

Another thing to consider is the ability to make inbox the default listing instead of "all messages", but for that, setting it to the default local task does not seem to be enough.

Berdir’s picture

      $fragments['select'][]      = 'GROUP_CONCAT(DISTINCT author SEPARATOR ",") as author';

This is the current GROUP_CONCAT, in your patch, you used a SELECT GROUP CONCAT... which does add a unecessary complexity.

About the inbox stuff, I used HAVING in my patch at #351542-4: user interface (there is a better (actually working) implementation of HAVING in the flush patch), It was the only working way I got working. However, your and my implementation has a pretty big flaw. It is not possible or atleast very hard to do a "Archive"-Feature (aka: remove from inbox)). A way to easily add a archive feature would be to use a "Inbox" tag instead, which is auto-added when the message is sent. This tag can be removed and then the thread removed from the inbox. (a new message would re-add it automatically).

The basic part of this should not be hard to implement (it just needs a privatemsg_message_insert hook), but there are several things to consider, like upgrade path, "system tags" and their handling, and so on...

Sophia’s picture

Status: Needs work » Needs review

I have tested it, and so far all went well. So far, the only thing I noticed is the "Sent messages" is still in the Private Messages Block, which is not only superfluous now, but also points to the wrong link. I have manually deleted it, but perhaps something for you to consider in a future version.

We seem to have misplaced the filter though... but that could have happened with the Per thread/Multiple thread actions actually.

Edit: I didn't mean to change the status... no idea how that happened!

NaheemSays’s picture

Status: Needs review » Needs work

Setting back to CNW.

@ Berdir - thanks, will look into it.

@ Sophia - I will remove that bit from the patch.

NaheemSays’s picture

FileSize
13.44 KB

Updated patch that has not had a look at the subquery that Berdir mentioned - just covering the changes in the latest threading patch, and removing the "sent messages" link from the block, and a slight update to the apidoc (has it been done correctly? Do I need to reposition it? How is it supposed to look?)

NaheemSays’s picture

FileSize
13.84 KB

and rerolled again to match changes in #348907: Per thread/Multiple thread actions.

Still need to make changes to some sql.

Berdir’s picture

About the apidoc format, it should be like:

@param $form_state
  Form state array

No type and the description should be on the next line.

And, the patch still depends on the theme functions, I forgot these :-/.

Still haven't actually tested the patch. When privatemsg_filter is enabled, is it correct that there is Messages, Inbox, Sent and "All messages"?. Maybe, you could instead rename Messages to All messages with http://api.drupal.org/api/function/hook_menu_link_alter/6.

NaheemSays’s picture

FileSize
17.69 KB

Updated patch with updated queries - this one now pulls in the HAVING query_builder changes from #371861: Flush deleted messages, however there seems to be a problem with the HAVING approach as copied from there - it breaks in the count query.

On the current patch, on the inbox page the following error message is shown:

user warning: Unknown column 'first_author' in 'having clause' query: SELECT COUNT(DISTINCT pmi.thread_id) FROM pm_message pm INNER JOIN pm_index pmi ON pm.mid = pmi.mid WHERE (pmi.uid = 3) AND (pmi.deleted = 0) HAVING ((first_author = 3 AND COUNT(pmi.thread_id) > 1) OR first_author <> 3) in C:\wamp\www\therevival\sites\all\modules\privatemsg\privatemsg.module on line 388.

but the page listing still works as expected.

Leaving as CNW due to error message, but apart from that I think I have everything covered (apart from the subquery as mentioned in comment 43 - I tried a few different combinations and they seemed to not give the same results...).

Berdir’s picture

I had that problem too. AFAIK, that's not a limitation of the query builder but the database. Try calling the subquery in HAVING directly, like:

$fragments['having'][] = '(SELECT ....) = %d OR (SELECT ...) <>...';

You need to specify it twice then, but the db should be intelligent enough to only execute it once. Or maybe the <> check could be moved the where. I'll try to get it working on mysql and pgsql.

A big problem of having is that this will change the order of query_args. If another module adds more query_args to where statements, the order isn't correct anymore. The only way around this is having multiple query_args arrays for where and having.

NaheemSays’s picture

FileSize
17.65 KB

Updated to match latest changes in #348907: Per thread/Multiple thread actions, but not fixed the query builder problem.

NaheemSays’s picture

The last patch does not show the participants as expected... Need to figure out why yet.

NaheemSays’s picture

FileSize
17.57 KB
NaheemSays’s picture

FileSize
17.65 KB

This patch should now work on mysql with no errors. there are going to be more things to fix for pgsql if I understand what was mentioned on irc.

Set to CNR as it works for me and I do not know what will need to be changed.

NaheemSays’s picture

Status: Needs work » Needs review
Berdir’s picture

Ok, I can see what your problem was now :)

The subqueries reference to thread_id, but that column is not available in the count query. And I was not able to get it working on pgsql either so far :(.

However, there is a really easy solution which works on both databases, but is slow. Bot databases support the following syntax: SELECT COUNT(*) FROM (some_query).

This means that all we need to do is to add the following line and we can forget about all that special handling of the count query.

$count = 'SELECT COUNT(*) FROM ('. $query .') as count';

We could optimize this a bit, because we don't need ORDER BY and so on (which is the slowest part of that query) for the inner query, but it will remain slow.

Also, there is still the possibility to use a tag-based approach for the inbox, but the hard part there is the upgrade path.

NaheemSays’s picture

FileSize
17.14 KB
NaheemSays’s picture

hm, just noticed that the text I has written along with the patch on #57 seems to have gone missing. Can't remember it all, but I will try to list what this patch does:

1. Remove "Sent messages" menu item and sql alter query from privatemsg.module
2. Modify privatemsg_list and the menu calling to it to pass an additional argument forward which is passed onto the query builder.
3. In the header titles etc, replace recipients and author with participant.
4. Change the querybuilder to use the approach as outlined by Berdir in #56 for the count query (but "optimised" to keep the ORDER BY outside of the count query).
5. In privatemsg_filter add three menu items - all messages, inbox and sent messages along with corresponding changes to the sql_alter
6. Change the widget to work on whatever page it is shown instead of just on the main listing page.

NaheemSays’s picture

Rerolled to match current HEAD.

Also fixes #429770: #348907 follow-up: extra spaces in privatemsg.theme.inc as that area of code is replaced.

NaheemSays’s picture

FileSize
17.3 KB
NaheemSays’s picture

FileSize
15.66 KB

Rerolled the patch to match commits in latest dev branch.

WHat this patch is the same as mentioned in comment 59, but the main change is that I have modified the query builder to use the subquery method fo9r counting ONLY when there is a HAVING in the query - otherwise use the normal count we already have which should be faster and work on both mysql ans pgsql.

NaheemSays’s picture

FileSize
15.58 KB

rerolled

litwol’s picture

Title: Move "Sent Messages" to privatemsg_filter, Add inbox, improve user filtering. » 2Move "Sent Messages" to privatemsg_filter, Add inbox, improve user filtering.
Status: Needs review » Needs work

1) Participants listing column doesn't show the participants.
2) Answers count is incorrect. - if i send a new msg to myself, it lists as if there is 1 reply

litwol’s picture

Title: 2Move "Sent Messages" to privatemsg_filter, Add inbox, improve user filtering. » Move "Sent Messages" to privatemsg_filter, Add inbox, improve user filtering.

oops ..

NaheemSays’s picture

FileSize
15.62 KB
NaheemSays’s picture

Status: Needs work » Needs review

There was an oops in the reroll. re rerolled.

litwol’s picture

Status: Needs review » Fixed

Great work. its in :)

Status: Fixed » Closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.