fixed a bug with the topic visit order and another one with the anyUnread
function (it needs to ignore archived topics)
This commit is contained in:
		
							parent
							
								
									342a0041a5
								
							
						
					
					
						commit
						69e62acbb9
					
				
							
								
								
									
										36
									
								
								TODO
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								TODO
									
									
									
									
									
								
							@ -1,5 +1,41 @@
 | 
			
		||||
Lots!
 | 
			
		||||
 | 
			
		||||
- <SiteHelp.4.104>: Error messages that pop up because you haven't logged in
 | 
			
		||||
  should reflect that fact.
 | 
			
		||||
 | 
			
		||||
- <SiteHelp.4.101>: Enter key on Login activates Password Reminder, not
 | 
			
		||||
  Log In.  Fix.
 | 
			
		||||
 | 
			
		||||
- <SiteHelp.4.96>: Should there be a "Keep New" button for the last topic
 | 
			
		||||
  in a conference?
 | 
			
		||||
 | 
			
		||||
- <SiteHelp.4.84-85>: The fixseen and set pseud functions should really
 | 
			
		||||
  provide some visual feedback.
 | 
			
		||||
 | 
			
		||||
- <SiteHelp.7.51>: Check Venice conferencing functions against <dgrey>'s
 | 
			
		||||
  list at <http://www.voght.com/cgi-bin/pywiki?CollabSpecs>.
 | 
			
		||||
 | 
			
		||||
- <SiteHelp.7.46-48>: document the functioning of the Administrator account
 | 
			
		||||
  better somewhere
 | 
			
		||||
 | 
			
		||||
- <SiteHelp.7.22>: more system stats like memory pool utilization, number
 | 
			
		||||
  of current sessions, or ???
 | 
			
		||||
 | 
			
		||||
- <SiteHelp.7.19>: Make "New!" graphic hot, jump to first (unhidden) topic
 | 
			
		||||
  with new posts
 | 
			
		||||
 | 
			
		||||
- <SiteHelp.7.19>: make it easy for user to see his/her own profile as others
 | 
			
		||||
  see it
 | 
			
		||||
 | 
			
		||||
- <SiteHelp.7.5-6>: allow post attachments to be "linked" somehow to the
 | 
			
		||||
  topic or conference, so they don't get lost (call it the "topic infobase" or
 | 
			
		||||
  "conference infobase"?)
 | 
			
		||||
 | 
			
		||||
- <SiteHelp.3.50>: are some of the pages using TABLE WIDTH=100% (notably the
 | 
			
		||||
  conference list) when they shouldn't?
 | 
			
		||||
 | 
			
		||||
- <SiteHelp.3.38>: move topics from one conf to another?
 | 
			
		||||
 | 
			
		||||
- Unimplemented functions on the SIG Administration page:
 | 
			
		||||
  Set SIG Features (sigadmin, command=F)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -834,16 +834,17 @@ class ConferenceUserContextImpl implements ConferenceContext, ConferenceBackend
 | 
			
		||||
      conn = datapool.getConnection();
 | 
			
		||||
 | 
			
		||||
      // Build a query.  The idea here is that we want to see the topic IDs of all topics within the
 | 
			
		||||
      // conference which (a) are not hidden and (b) have one or more messages unread by this user.
 | 
			
		||||
      // The need for the user's settings for both (a) and (b) necessitates the use of the LEFT JOIN
 | 
			
		||||
      // to topicsettings, which in turn necessitates the IFNULL guards on references to topicsettings
 | 
			
		||||
      // conference which (a) are not archived, (b) are not hidden and (c) have one or more messages unread
 | 
			
		||||
      // by this user. The need for the user's settings for both (b) and (c) necessitates the use of the LEFT
 | 
			
		||||
      // JOIN to topicsettings, which in turn necessitates the IFNULL guards on references to topicsettings
 | 
			
		||||
      // columns in the WHERE clause (as there's only a topicsettings row if the user has read anything
 | 
			
		||||
      // in this topic or otherwise set it).
 | 
			
		||||
      Statement stmt = conn.createStatement();
 | 
			
		||||
      StringBuffer sql = new StringBuffer("SELECT t.topicid FROM topics t LEFT JOIN topicsettings s "
 | 
			
		||||
					  + "ON t.topicid = s.topicid AND s.uid = ");
 | 
			
		||||
      sql.append(sig.realUID()).append(" WHERE t.confid = ").append(confid);
 | 
			
		||||
      sql.append(" AND IFNULL(s.hidden,0) = 0 AND (t.top_message - IFNULL(s.last_message,-1)) > 0 LIMIT 1;");
 | 
			
		||||
      sql.append(" AND t.archived = 0 AND IFNULL(s.hidden,0) = 0 "
 | 
			
		||||
		 + "AND (t.top_message - IFNULL(s.last_message,-1)) > 0 LIMIT 1;");
 | 
			
		||||
      if (logger.isDebugEnabled())
 | 
			
		||||
	logger.debug("SQL: " + sql.toString());
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -250,14 +250,14 @@ public class ConfDisplay extends VeniceServlet
 | 
			
		||||
 | 
			
		||||
  } // end getInterval
 | 
			
		||||
 | 
			
		||||
  private static void restorePosts(ServletRequest request, ConferenceContext conf)
 | 
			
		||||
  private static boolean restorePosts(ServletRequest request, ConferenceContext conf, TopicContext curr_topic)
 | 
			
		||||
  {
 | 
			
		||||
    String xtopic = request.getParameter("rtop");
 | 
			
		||||
    if (StringUtil.isStringEmpty(xtopic))
 | 
			
		||||
      return;
 | 
			
		||||
      return true;
 | 
			
		||||
    String xcount = request.getParameter("rct");
 | 
			
		||||
    if (StringUtil.isStringEmpty(xcount))
 | 
			
		||||
      return;
 | 
			
		||||
      return true;
 | 
			
		||||
    
 | 
			
		||||
    TopicContext topic;
 | 
			
		||||
    try
 | 
			
		||||
@ -268,19 +268,19 @@ public class ConfDisplay extends VeniceServlet
 | 
			
		||||
    catch (NumberFormatException nfe)
 | 
			
		||||
    { // the topic number was invalid - forget it
 | 
			
		||||
      logger.warn("restorePosts: error translating topic number");
 | 
			
		||||
      return;
 | 
			
		||||
      return true;
 | 
			
		||||
 | 
			
		||||
    } // end catch
 | 
			
		||||
    catch (DataException de)
 | 
			
		||||
    { // could not get the topic...
 | 
			
		||||
      logger.warn("restorePosts: DataException getting topic - " + de.getMessage(),de);
 | 
			
		||||
      return;
 | 
			
		||||
      return true;
 | 
			
		||||
 | 
			
		||||
    } // end catch
 | 
			
		||||
    catch (AccessError ae)
 | 
			
		||||
    { // no access to the topic
 | 
			
		||||
      logger.warn("restorePosts: AccessError getting topic - " + ae.getMessage(),ae);
 | 
			
		||||
      return;
 | 
			
		||||
      return true;
 | 
			
		||||
 | 
			
		||||
    } // end catch
 | 
			
		||||
 | 
			
		||||
@ -291,7 +291,7 @@ public class ConfDisplay extends VeniceServlet
 | 
			
		||||
      if ((nunread<=0) || (nunread>topic.getTotalMessages()))
 | 
			
		||||
      { // must be in the range [1, #messages]...
 | 
			
		||||
	logger.warn("restorePosts: unread post count out of range");
 | 
			
		||||
	return;
 | 
			
		||||
	return true;
 | 
			
		||||
 | 
			
		||||
      } // end if
 | 
			
		||||
 | 
			
		||||
@ -299,7 +299,7 @@ public class ConfDisplay extends VeniceServlet
 | 
			
		||||
    catch (NumberFormatException nfe)
 | 
			
		||||
    { // the number of unread posts was invalid - forget it
 | 
			
		||||
      logger.warn("restorePosts: error translating unread post count");
 | 
			
		||||
      return;
 | 
			
		||||
      return true;
 | 
			
		||||
 | 
			
		||||
    } // end catch
 | 
			
		||||
 | 
			
		||||
@ -314,6 +314,8 @@ public class ConfDisplay extends VeniceServlet
 | 
			
		||||
 | 
			
		||||
    } // end catch
 | 
			
		||||
 | 
			
		||||
    return (topic.getTopicID()!=curr_topic.getTopicID());
 | 
			
		||||
 | 
			
		||||
  } // end restorePosts
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
@ -356,11 +358,11 @@ public class ConfDisplay extends VeniceServlet
 | 
			
		||||
      setMyLocation(request,on_error + "&topic=" + topic.getTopicNumber());
 | 
			
		||||
 | 
			
		||||
      // if this request is restoring the number of unread posts in another topic, try to do so
 | 
			
		||||
      restorePosts(request,conf);
 | 
			
		||||
      boolean do_readnew = restorePosts(request,conf,topic);
 | 
			
		||||
 | 
			
		||||
      // determine what the post interval is we want to display
 | 
			
		||||
      PostInterval piv = getInterval(engine,request,topic,on_error);
 | 
			
		||||
      boolean read_new = !(StringUtil.isStringEmpty(request.getParameter("rnm")));
 | 
			
		||||
      boolean read_new = do_readnew && !(StringUtil.isStringEmpty(request.getParameter("rnm")));
 | 
			
		||||
      boolean show_adv = !(StringUtil.isStringEmpty(request.getParameter("shac")));
 | 
			
		||||
 | 
			
		||||
      // Create the post display.
 | 
			
		||||
 | 
			
		||||
@ -36,7 +36,6 @@ public class TopicVisitOrder
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private int confid;
 | 
			
		||||
  private short[] topics;
 | 
			
		||||
  private boolean[] unread;
 | 
			
		||||
  private int ndx_next;
 | 
			
		||||
@ -46,9 +45,8 @@ public class TopicVisitOrder
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  protected TopicVisitOrder(int confid, List topiclist)
 | 
			
		||||
  protected TopicVisitOrder(List topiclist)
 | 
			
		||||
  {
 | 
			
		||||
    this.confid = confid;
 | 
			
		||||
    this.topics = new short[topiclist.size()];
 | 
			
		||||
    this.unread = new boolean[topiclist.size()];
 | 
			
		||||
 | 
			
		||||
@ -65,6 +63,25 @@ public class TopicVisitOrder
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Internal functions
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private static Map getInternalMap(HttpSession session)
 | 
			
		||||
  {
 | 
			
		||||
    Map rc = (Map)(session.getAttribute(ATTRIBUTE));
 | 
			
		||||
    if (rc==null)
 | 
			
		||||
    { // create a new HashMap 
 | 
			
		||||
      rc = Collections.synchronizedMap(new HashMap());
 | 
			
		||||
      session.setAttribute(ATTRIBUTE,rc);
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    return rc;
 | 
			
		||||
 | 
			
		||||
  } // end getInternalMap
 | 
			
		||||
 | 
			
		||||
  private int moveNext()
 | 
			
		||||
  {
 | 
			
		||||
    int i = ndx_next;
 | 
			
		||||
@ -88,23 +105,17 @@ public class TopicVisitOrder
 | 
			
		||||
 | 
			
		||||
  public static TopicVisitOrder initialize(HttpSession session, int confid, List topic_list)
 | 
			
		||||
  {
 | 
			
		||||
    TopicVisitOrder tvo = new TopicVisitOrder(confid,topic_list);
 | 
			
		||||
    session.setAttribute(ATTRIBUTE,tvo);
 | 
			
		||||
    TopicVisitOrder tvo = new TopicVisitOrder(topic_list);
 | 
			
		||||
    Map tvo_map = getInternalMap(session);
 | 
			
		||||
    tvo_map.put(new Integer(confid),tvo);
 | 
			
		||||
    return tvo;
 | 
			
		||||
 | 
			
		||||
  } // end initialize
 | 
			
		||||
 | 
			
		||||
  public static TopicVisitOrder retrieve(HttpSession session, int confid)
 | 
			
		||||
  {
 | 
			
		||||
    TopicVisitOrder tvo = (TopicVisitOrder)(session.getAttribute(ATTRIBUTE));
 | 
			
		||||
    if (tvo!=null)
 | 
			
		||||
    { // make sure the conference is OK
 | 
			
		||||
      if (tvo.confid!=confid) // wrong conference - remove this
 | 
			
		||||
	tvo = null;
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    return tvo;
 | 
			
		||||
    Map tvo_map = getInternalMap(session);
 | 
			
		||||
    return (TopicVisitOrder)(tvo_map.get(new Integer(confid)));
 | 
			
		||||
 | 
			
		||||
  } // end retrieve
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user