Changeset 580809c76656c03d41c381ab69c7a996bbb3a12e
- Timestamp:
- 08/05/07 16:25:37 (1 year ago)
- git-parent:
- Files:
-
- src/net/driftingsouls/ds2/server/comm/Ordner.java (modified) (15 diffs)
- src/net/driftingsouls/ds2/server/comm/PM.java (modified) (4 diffs)
- src/net/driftingsouls/ds2/server/framework/db/HibernateFacade.java (modified) (2 diffs)
- src/net/driftingsouls/ds2/server/modules/CommController.java (modified) (20 diffs)
- web/WEB-INF/cfg/hibernatemappings.xml (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
src/net/driftingsouls/ds2/server/comm/Ordner.java
r7cb4eda r580809c 21 21 import java.util.ArrayList; 22 22 import java.util.HashMap; 23 import java.util.Iterator; 23 24 import java.util.List; 24 25 import java.util.Map; 25 26 27 import javax.persistence.Entity; 28 import javax.persistence.FetchType; 29 import javax.persistence.GeneratedValue; 30 import javax.persistence.Id; 31 import javax.persistence.JoinColumn; 32 import javax.persistence.ManyToOne; 33 import javax.persistence.Table; 34 35 import net.driftingsouls.ds2.server.entities.User; 26 36 import net.driftingsouls.ds2.server.framework.Common; 27 37 import net.driftingsouls.ds2.server.framework.Context; … … 29 39 import net.driftingsouls.ds2.server.framework.db.Database; 30 40 import net.driftingsouls.ds2.server.framework.db.SQLQuery; 31 import net.driftingsouls.ds2.server.framework.db.SQLResultRow;32 41 33 42 /** … … 41 50 * @author Christopher Jung 42 51 */ 52 @Entity 53 @Table(name="ordner") 43 54 public class Ordner { 44 55 /** … … 51 62 public static final int FLAG_TRASH = 1; 52 63 53 private SQLResultRow data; 54 55 private Ordner(SQLResultRow data) { 56 this.data = data; 64 @Id @GeneratedValue 65 private int id; 66 private String name; 67 @ManyToOne(fetch=FetchType.LAZY) 68 @JoinColumn(name="playerid", nullable=false) 69 private User owner; 70 private int flags; 71 private int parent; 72 73 /** 74 * Konstruktor 75 */ 76 public Ordner() { 77 // EMPTY 78 } 79 80 private Ordner(String name, User owner, Ordner parent) { 81 this.name = name; 82 this.owner = owner; 83 this.parent = parent.getID(); 84 } 85 86 /** 87 * Gibt den Ordner mit der angegebenen ID zurueck. 88 * Sollte kein solcher Ordner existieren, so wird <code>null</code> zurueckgegeben. 89 * 90 * @param id Die ID des Ordners 91 * @return Der Ordner 92 */ 93 public static Ordner getOrdnerByID( int id ) { 94 return getOrdnerByID(id, null); 57 95 } 58 96 … … 62 100 * 63 101 * @param id Die ID des Ordners 64 * @param user _id Die ID des Benutzers102 * @param user Der Benutzer 65 103 * @return Der Ordner 66 104 */ 67 public static Ordner getOrdnerByID( int id, int user_id ) { //findet den Ordner mit der einer bestimmten ID 105 public static Ordner getOrdnerByID( int id, User user ) { 106 org.hibernate.Session db = ContextMap.getContext().getDB(); 107 68 108 if( id != 0 ) { 69 Database db = ContextMap.getContext().getDatabase(); 70 String userstatement = ""; 71 if( user_id != 0 ) { 72 userstatement = " AND playerid="+user_id; 73 } 74 75 SQLResultRow data = db.first("SELECT * FROM ordner WHERE id=",id,userstatement); 76 if( !data.isEmpty() ) { 77 return new Ordner( data ); 109 Ordner ordner = (Ordner)db.get(Ordner.class, id); 110 111 if( ordner == null ) { 112 return null; 78 113 } 79 return null; 80 } 81 SQLResultRow row = new SQLResultRow(); 82 row.put("id", 0); 83 row.put("name", "Hauptverzeichnis"); 84 row.put("flags", 0); 85 return new Ordner( row ); 114 115 if( (user != null) && (ordner.getOwner() != user) ) { 116 return null; 117 } 118 119 return ordner; 120 } 121 122 Ordner ordner = new Ordner(); 123 ordner.id = 0; 124 ordner.name = "Hauptverzeichnis"; 125 ordner.flags = 0; 126 ordner.owner = user; 127 128 return ordner; 86 129 } 87 130 88 131 /** 89 132 * Gibt den Papierkorb eines Benutzers zurueck. Jeder Benutzer hat einen Papierkorb... 90 * @param user _id Die ID des Benutzers133 * @param user Der Benutzer 91 134 * @return Der Papierkorb 92 135 */ 93 public static Ordner getTrash ( int user_id) {136 public static Ordner getTrash ( User user ) { 94 137 Context context = ContextMap.getContext(); 95 Object trash = context.getVariable(Ordner.class, "trash"+user _id);138 Object trash = context.getVariable(Ordner.class, "trash"+user.getID()); 96 139 if( trash == null ) { 97 Database db = context.getDatabase(); 98 trash = new Ordner(db.first("SELECT * FROM ordner WHERE playerid='",user_id,"' AND (flags & ",Ordner.FLAG_TRASH,")")); 99 context.putVariable(Ordner.class, "trash"+user_id, trash); 140 org.hibernate.Session db = ContextMap.getContext().getDB(); 141 142 trash = db.createQuery("from Ordner where owner=? and bit_and(flags,?)!=0") 143 .setEntity(0, user) 144 .setInteger(1, Ordner.FLAG_TRASH) 145 .uniqueResult(); 146 147 context.putVariable(Ordner.class, "trash"+user.getID(), trash); 100 148 } 101 149 return (Ordner)trash; … … 103 151 104 152 /** 105 * Loescht einen bestimmten Ordner eines Users. Alle im Ordner enthaltenen153 * Loescht den Ordner. Alle im Ordner enthaltenen 106 154 * Unterordner und Pms werden ebenfalls geloescht. 107 * @param ordner_id Die ID des Ordners108 * @param user_id Die ID des Besitzers109 155 * @return <code>0</code>, falls das Loeschen erfolgreich war, <code>1</code>, falls erst noch eine PM gelesen werden muss 110 156 * und <code>2</code>, bei sonstigen Fehlern 111 157 */ 112 public static int deleteOrdnerByID( int ordner_id, int user_id) {113 Database db = ContextMap.getContext().getDatabase();158 public int deleteOrdner() { 159 org.hibernate.Session db = ContextMap.getContext().getDB(); 114 160 int result = 0; 115 if( ordner_id == getTrash(user_id).getID()) {161 if( (this.flags & Ordner.FLAG_TRASH) != 0 ) { 116 162 return 2; 117 163 } 118 if( (result = PM.deleteAllInOrdner( ordner_id, user_id)) != 0 ){164 if( (result = PM.deleteAllInOrdner( this, this.owner )) != 0 ){ 119 165 return result; 120 166 } 121 SQLQuery subordner_id = db.query("SELECT id FROM ordner WHERE parent=",ordner_id," AND playerid=",user_id); 122 while( subordner_id.next() ){ 123 if( (result = deleteOrdnerByID( subordner_id.getInt("id"), user_id )) != 0 ){ 124 subordner_id.free(); 167 List ordnerlist = db.createQuery("from Ordner where parent=? and owner=?") 168 .setInteger(0, this.id) 169 .setEntity(1, this.owner) 170 .list(); 171 172 for( Iterator iter=ordnerlist.iterator(); iter.hasNext(); ) { 173 Ordner subordner = (Ordner)iter.next(); 174 175 if( (result = subordner.deleteOrdner()) != 0 ){ 125 176 return result; 126 177 } 127 178 } 128 subordner_id.free(); 129 db.update("DELETE FROM ordner WHERE id=",ordner_id); 179 180 db.delete(this); 181 130 182 return 0; 131 183 } … … 134 186 * Erstellt einen neuen Ordner fuer einen bestimmten Spieler 135 187 * @param name Der Name des neuen Ordners 136 * @param parent_id Die ID des Elternordners 137 * @param user_id Die ID des Besitzers 138 */ 139 public static void createNewOrdner( String name, int parent_id, int user_id ) { 140 Database db = ContextMap.getContext().getDatabase(); 141 int trash = Ordner.getTrash( user_id ).getID(); 142 if( trash != parent_id ) { 143 db.update("INSERT INTO ordner SET name='",name,"', parent=",parent_id,", playerid=",user_id); 144 } 145 } 146 147 /** 148 * Prueft, ob der Ordner mit der angegebenen ID eines bestimmten Besitzers 149 * existiert 150 * @param ordner_id Die ID des Ordners 151 * @param user_id Die ID des Spielers 152 * @return <code>true</code>, falls der Ordner existiert 153 */ 154 public static boolean existsOrdnerWithID( int ordner_id, int user_id ) { 155 Database db = ContextMap.getContext().getDatabase(); 156 if( ordner_id != 0 ) { 157 return !db.first("SELECT id FROM ordner WHERE id=",ordner_id," AND playerid=",user_id).isEmpty(); 158 } 159 return true; 160 } 161 162 /** 163 * Gibt die IDs aller Kindordner, ob direkt oder indirekt, eines bestimmten Ordners 164 * eines Spielers zurueck 165 * @param parent_id Die Ordner-ID 166 * @param user_id Die Spieler-ID 188 * @param parent Der Elternordner 189 * @param user Der Besitzer 190 * @return Der neue Ordner 191 * @throws IllegalArgumentException Falls der Elternordner der Papierkorb ist 192 */ 193 public static Ordner createNewOrdner( String name, Ordner parent, User user ) throws IllegalArgumentException { 194 org.hibernate.Session db = ContextMap.getContext().getDB(); 195 196 if( (parent.getFlags() & Ordner.FLAG_TRASH) != 0 ) { 197 throw new IllegalArgumentException("Ordnererstellung im Papierkorb nicht moeglich"); 198 } 199 Ordner ordner = new Ordner(name, user, parent); 200 db.save(ordner); 201 202 return ordner; 203 } 204 205 /** 206 * Gibt alle Kindordner, ob direkt oder indirekt, des Ordners zurueck 167 207 * @return Liste mit Ordner-IDs 168 208 */ 169 public static List<Integer> getAllChildIDs ( int parent_id, int user_id ) { 170 Database db = ContextMap.getContext().getDatabase(); 171 172 List<Integer> childs = new ArrayList<Integer>(); 173 174 SQLQuery child = db.query("SELECT id FROM ordner WHERE parent=",parent_id," AND playerid=",user_id); 175 while( child.next() ){ 176 childs.add(child.getInt("id")); 177 } 178 179 child.free(); 180 181 for( int i=0; i < childs.size(); i++ ){ 182 childs.addAll( getAllChildIDs( childs.get(i), user_id ) ); 183 } 184 185 return childs; 186 } 187 188 /** 189 * Gibt alle Kindordner, ob direkt oder indirekt, eines bestimmten Ordners 190 * eines Spielers zurueck 191 * @param parent_id Die Ordner-ID 192 * @param user_id Die Spieler-ID 193 * @return Liste mit Ordner-IDs 194 */ 195 public static List<Ordner> getAllChildren( int parent_id, int user_id ) { 196 Database db = ContextMap.getContext().getDatabase(); 209 public List<Ordner> getAllChildren() { 210 org.hibernate.Session db = ContextMap.getContext().getDB(); 197 211 198 212 List<Ordner> children = new ArrayList<Ordner>(); 199 213 200 SQLQuery child = db.query("SELECT * FROM ordner WHERE parent=",parent_id," AND playerid=",user_id); 201 while( child.next() ){ 202 children.add(new Ordner(child.getRow())); 203 } 204 205 child.free(); 214 List ordnerlist = db.createQuery("from Ordner where parent=? and owner=?") 215 .setInteger(0, this.id) 216 .setEntity(1, this.owner) 217 .list(); 218 for( Iterator iter=ordnerlist.iterator(); iter.hasNext(); ) { 219 children.add((Ordner)iter.next()); 220 } 206 221 207 222 for( int i=0; i < children.size(); i++ ){ 208 children.addAll( getAllChildren( children.get(i).getID(), user_id) );223 children.addAll( children.get(i).getAllChildren() ); 209 224 } 210 225 … … 215 230 * Gibt die Anzahl der im Ordner vorhandenen PMs zurueck. 216 231 * Unterordner werden nicht beruecksichtigt. 217 * @param ordner_id Die ID des Ordners218 * @param user_id Der Besitzer des Ordners219 232 * @return Die Anzahl der PMs 220 233 */ 221 public static int countPMInOrdner( int ordner_id, int user_id) {234 public int countPMInOrdner() { 222 235 Database db = ContextMap.getContext().getDatabase(); 223 int trash = getTrash( user_id ).getID();224 236 225 237 int gelesen = 2; 226 if( ordner_id == trash){238 if( (this.flags & Ordner.FLAG_TRASH) != 0 ){ 227 239 gelesen = 10; 228 240 } 229 return db.first("SELECT count(*) count FROM transmissionen WHERE empfaenger='",user_id,"' AND ordner=",ordner_id," AND gelesen<",gelesen).getInt("count");230 }231 232 /**233 * Gibt die Anzahl der PMs in allen Ordnern unterhalb eines bestimmten Ordners234 * eines Spielers zurueck.241 242 return db.first("SELECT count(*) count FROM transmissionen WHERE empfaenger='",this.owner.getID(),"' AND ordner=",this.id," AND gelesen<",gelesen).getInt("count"); 243 } 244 245 /** 246 * Gibt die Anzahl der PMs in allen Ordnern unterhalb des Ordners zurueck. 235 247 * PMs in Unterordnern erhoehen die Anzahl der PMs im uebergeordneten Ordner. 236 248 * Zurueckgegeben wird eine Map, in der die Ordner-ID der Schluessel ist. Der Wert 237 249 * ist die Anzahl der PMs 238 * @param parent_id Die OrdnerID239 * @param user_id Die Spieler-ID240 250 * @return Map mit der Anzahl der PMs in den jeweiligen Unterordnern 241 251 */ 242 public static Map<Integer,Integer> countPMInAllOrdner( int parent_id, int user_id) {252 public Map<Integer,Integer> countPMInAllOrdner() { 243 253 Database db = ContextMap.getContext().getDatabase(); 244 254 Map<Integer,Integer> result = new HashMap<Integer,Integer>(); 245 255 246 List<Ordner> ordners = getAllChildren( parent_id, user_id);256 List<Ordner> ordners = this.getAllChildren(); 247 257 248 258 // Wenn der Ordner keine Unterordner hat, dann eine leere Map zurueckgeben … … 261 271 262 272 // Map mit der Anzahl der PMs fuellen, die sich direkt im Ordner befinden 263 int trash = getTrash( user_id).getID();273 int trash = getTrash( this.owner ).getID(); 264 274 265 275 SQLQuery pmcount = db.query( 266 276 "SELECT ordner, count(*) count " + 267 277 "FROM transmissionen " + 268 "WHERE empfaenger="+ user_id+" AND " +278 "WHERE empfaenger="+this.owner.getID()+" AND " + 269 279 "ordner IN ("+Common.implode(",",ordnerIDs)+") AND " + 270 280 "gelesen < CASE WHEN ordner="+trash+" THEN 10 ELSE 2 END " + … … 279 289 while( (childCount.size() > 0) && (maxloops-- > 0) ) { 280 290 for( int i=0; i < ordners.size(); i++ ) { 281 Ordner ordner = ordners.get(i);282 if( childCount.get( ordner.getID()) != null ) {291 Ordner aOrdner = ordners.get(i); 292 if( childCount.get(aOrdner.getID()) != null ) { 283 293 continue; 284 294 } 285 295 286 int parent = ordner.getParent();296 int parent = aOrdner.getParent(); 287 297 // Die Anzahl der PMs des Elternordners um die 288 298 // des aktuellen Ordners erhoehen. Anschliessend … … 291 301 result.put(parent, 0); 292 302 } 293 Integer child = result.get( ordner.getID());303 Integer child = result.get(aOrdner.getID()); 294 304 result.put(parent, result.get(parent)+ (child != null ? child : 0) ); 295 305 296 306 childCount.put(parent, childCount.get(parent)-1); 297 childCount.remove( ordner.getID());307 childCount.remove(aOrdner.getID()); 298 308 299 309 ordners.remove(i); … … 310 320 */ 311 321 public int getID() { 312 return this. data.getInt("id");322 return this.id; 313 323 } 314 324 … … 318 328 */ 319 329 public String getName() { 320 return this.data.getString("name"); 321 } 330 return this.name; 331 } 332 333 /** 334 * Setzt den Namen des Ordners 335 * @param name der neue Name 336 */ 337 public void setName( String name ) { 338 Database db = ContextMap.getContext().getDatabase(); 339 db.prepare("UPDATE ordner SET name= ? WHERE id= ?").update(name, this.id); 340 this.name = name; 341 } 342 322 343 323 344 /** … … 326 347 */ 327 348 public int getParent() { 328 return this.data.getInt("parent"); 329 } 330 331 /** 332 * Setzt den Namen des Ordners 333 * @param name der neue Name 334 */ 335 public void setName( String name ) { 336 Database db = ContextMap.getContext().getDatabase(); 337 db.prepare("UPDATE ordner SET name= ? WHERE id= ?").update(name, this.data.getInt("id")); 338 this.data.put("name", name); 339 } 340 349 return this.parent; 350 } 351 352 /** 353 * Setzt den Elternordner 354 * @param parent Der Elternordner 355 */ 356 public void setParent(Ordner parent) { 357 this.parent = parent.getID(); 358 } 359 341 360 /** 342 361 * Gibt die Flags des Ordners zurueck … … 344 363 */ 345 364 public int getFlags() { 346 return this.data.getInt("flags"); 365 return this.flags; 366 } 367 368 /** 369 * Setzt die Flags des Ordners 370 * @param flags Die Flags 371 */ 372 public void setFlags(int flags) { 373 this.flags = flags; 374 } 375 376 /** 377 * Gibt den Besitzer des Ordners zurueck 378 * @return Der Besitzer 379 */ 380 public User getOwner() { 381 return this.owner; 382 } 383 384 /** 385 * Setzt den Besitzer des Ordners 386 * @param owner Der Besitzer 387 */ 388 public void setOwner(User owner) { 389 this.owner = owner; 347 390 } 348 391 } src/net/driftingsouls/ds2/server/comm/PM.java
r6e0b642 r580809c 174 174 * Loescht alle PMs aus einem Ordner eines bestimmten Spielers. 175 175 * Der Vorgang schlaegt fehl, wenn noch nicht alle wichtigen PMs gelesen wurden 176 * @param ordner _idDer Ordner, dessen Inhalt geloescht werden soll177 * @param user _id Die ID des Besitzersdes Ordners176 * @param ordner Der Ordner, dessen Inhalt geloescht werden soll 177 * @param user Der Besitzer des Ordners 178 178 * @return 0, falls der Vorgang erfolgreich war. 1, wenn ein Fehler aufgetreten ist und 2, falls nicht alle PMs gelesen wurden 179 179 */ 180 public static int deleteAllInOrdner( int ordner_id, int user_id ){180 public static int deleteAllInOrdner( Ordner ordner, User user ) { 181 181 Database db = ContextMap.getContext().getDatabase(); 182 182 183 int trash = Ordner.getTrash( user _id).getID();183 int trash = Ordner.getTrash( user ).getID(); 184 184 185 SQLQuery pm = db.query("SELECT id,empfaenger,flags,gelesen FROM transmissionen WHERE ordner="+ordner _id);185 SQLQuery pm = db.query("SELECT id,empfaenger,flags,gelesen FROM transmissionen WHERE ordner="+ordner.getID()); 186 186 while( pm.next() ){ 187 if( pm.getInt("empfaenger") == user _id) {187 if( pm.getInt("empfaenger") == user.getID() ) { 188 188 if( ((pm.getInt("flags") & PM.FLAGS_IMPORTANT) != 0) && (pm.getInt("gelesen") < 1) ) { 189 189 return 1; //PM muss gelesen werden … … 202 202 * Loescht die PM eines Benutzers 203 203 * @param pm_id Die ID der PM 204 * @param user _id Die ID des Emfpaengersder PM204 * @param user Der Emfpaenger der PM 205 205 * @return 0, falls der Vorgang erfolgreich war. 1, wenn ein Fehler aufgetreten ist und 2, falls nicht alle PMs gelesen wurden 206 206 */ 207 public static int deleteByID( int pm_id, int user_id ){207 public static int deleteByID( int pm_id, User user ) { 208 208 Database db = ContextMap.getContext().getDatabase(); 209 209 210 int trash = Ordner.getTrash( user _id).getID();210 int trash = Ordner.getTrash( user ).getID(); 211 211 SQLResultRow pm = db.first("SELECT empfaenger,flags,gelesen FROM transmissionen WHERE id="+pm_id); 212 if( pm.getInt("empfaenger") == user _id) {212 if( pm.getInt("empfaenger") == user.getID() ) { 213 213 if( ((pm.getInt("flags") & PM.FLAGS_IMPORTANT) != 0) && (pm.getInt("gelesen") < 1) ) { 214 214 return 1; //PM muss gelesen werden … … 224 224 /** 225 225 * Verschiebt alle PMs von einem Ordner in einen anderen 226 * @param source D ie ID des Ausgangsordners227 * @param dest D ie ID des Zielordners228 * @param user _id Die ID des Besitzersder PM229 */ 230 public static void moveAllToOrdner( int source, int dest , int user_id){231 Database db = ContextMap.getContext().getDatabase(); 232 int trash = Ordner.getTrash( user_id ).getID();233 234 SQLQuery pm = db.query("SELECT id,gelesen FROM transmissionen WHERE ordner="+source +" AND empfaenger="+user_id);226 * @param source Der Ausgangsordner 227 * @param dest Der Zielordner 228 * @param user Der Besitzer der PM 229 */ 230 public static void moveAllToOrdner( Ordner source, Ordner dest , User user) { 231 Database db = ContextMap.getContext().getDatabase(); 232 Ordner trash = Ordner.getTrash( user ); 233 234 SQLQuery pm = db.query("SELECT id,gelesen FROM transmissionen WHERE ordner="+source.getID()+" AND empfaenger="+user.getID()); 235 235 while( pm.next() ){ 236 236 int gelesen = (trash == source) ? 1 : pm.getInt("gelesen"); 237 237 gelesen = (trash == dest) ? 2 : gelesen; 238 db.update("UPDATE transmissionen SET ordner="+dest +", gelesen='"+gelesen+"' WHERE id="+pm.getInt("id"));238 db.update("UPDATE transmissionen SET ordner="+dest.getID()+", gelesen='"+gelesen+"' WHERE id="+pm.getInt("id")); 239 239 } 240 240 pm.free(); … … 244 244 * Stellt eine geloeschte PM wieder her 245 245 * @param pm_id Die ID der PM 246 * @param user _id Die ID des Empfaengersder PM247 */ 248 public static void recoverByID( int pm_id, int user_id ){249 Database db = ContextMap.getContext().getDatabase(); 250 int trash = Ordner.getTrash( user _id).getID();251 252 db.update("UPDATE transmissionen SET ordner=0,gelesen=1 WHERE ordner='"+trash+"' AND empfaenger='"+user _id+"' AND id='"+pm_id+"'");246 * @param user Der Empfaenger der PM 247 */ 248 public static void recoverByID( int pm_id, User user ) { 249 Database db = ContextMap.getContext().getDatabase(); 250 int trash = Ordner.getTrash( user ).getID(); 251 252 db.update("UPDATE transmissionen SET ordner=0,gelesen=1 WHERE ordner='"+trash+"' AND empfaenger='"+user.getID()+"' AND id='"+pm_id+"'"); 253 253 } 254 254 255 255 /** 256 256 * Stelllt alle geloeschten PMs eines Spielers wieder her 257 * @param user _id Die ID des Spielers258 */ 259 public static void recoverAll( int user_id ){260 Database db = ContextMap.getContext().getDatabase(); 261 int trash = Ordner.getTrash( user _id).getID();257 * @param user Der Spieler 258 */ 259 public static void recoverAll( User user ) { 260 Database db = ContextMap.getContext().getDatabase(); 261 int trash = Ordner.getTrash( user ).getID(); 262 262 263 263 db.update("UPDATE transmissionen SET ordner=0,gelesen=1 WHERE ordner='"+trash+"'"); src/net/driftingsouls/ds2/server/framework/db/HibernateFacade.java
r61674f4 r580809c 29 29 import org.hibernate.SessionFactory; 30 30 import org.hibernate.cfg.AnnotationConfiguration; 31 import org.hibernate.dialect.function.SQLFunctionTemplate; 31 32 import org.hibernate.dialect.function.StandardSQLFunction; 32 33 import org.hibernate.stat.Statistics; … … 51 52 conf.addSqlFunction("floor", new StandardSQLFunction("floor", Hibernate.LONG)); 52 53 conf.addSqlFunction("ncp", new NullCompFunction()); 54 conf.addSqlFunction("bit_and", new SQLFunctionTemplate(Hibernate.INTEGER, "?1 & ?2")); 55 conf.addSqlFunction("bit_or", new SQLFunctionTemplate(Hibernate.INTEGER, "?1 | ?2")); 53 56 54 57 try { src/net/driftingsouls/ds2/server/modules/CommController.java
r283e6c7 r580809c 108 108 int ordner = getInteger("ordner"); 109 109 110 int trash = Ordner.getTrash( user .getID()).getID();110 int trash = Ordner.getTrash( user ).getID(); 111 111 112 112 db.update("UPDATE transmissionen SET gelesen=2, ordner='",trash,"' WHERE empfaenger='",user.getID(),"' AND ordner='",ordner,"' AND (gelesen=1 OR !(flags & ",PM.FLAGS_IMPORTANT,"))"); … … 129 129 parameterNumber("delord"); 130 130 int delete = getInteger("delete"); 131 int ordner = getInteger("delord");131 Ordner ordner = Ordner.getOrdnerByID(getInteger("delord"), user); 132 132 133 133 int result = 0; 134 if( (ordner != 0) && (delete == 0) ) {135 result = Ordner.deleteOrdnerByID( ordner, user.getID());134 if( (ordner != null) && (delete == 0) ) { 135 result = ordner.deleteOrdner(); 136 136 } else { 137 result = PM.deleteByID( delete, user .getID());137 result = PM.deleteByID( delete, user ); 138 138 } 139 139 … … 160 160 */ 161 161 public void newOrdnerAction() { 162 User user = (User)getUser(); 162 163 parameterString("ordnername"); 163 164 parameterNumber("ordner"); 164 165 String name = getString("ordnername"); 165 int parent = getInteger("ordner"); 166 167 Ordner.createNewOrdner(name, parent, getUser().getID()); 166 Ordner parent = Ordner.getOrdnerByID(getInteger("ordner"), user); 167 168 if( parent == null ) { 169 redirect("showInbox"); 170 return; 171 } 172 173 Ordner.createNewOrdner(name, parent, user); 168 174 169 175 redirect("showInbox"); … … 182 188 parameterNumber("ordner"); 183 189 184 int moveto = getInteger("moveto");185 int ordner = getInteger("ordner");186 187 if( Ordner.existsOrdnerWithID( moveto, user.getID() ) ){188 PM.moveAllToOrdner( ordner, moveto, user .getID());190 Ordner moveto = Ordner.getOrdnerByID(getInteger("moveto"), user); 191 Ordner ordner = Ordner.getOrdnerByID(getInteger("ordner"), user); 192 193 if( (moveto != null) && (ordner != null) ) { 194 PM.moveAllToOrdner( ordner, moveto, user ); 189 195 } 190 196 … … 200 206 public void renameAction() { 201 207 User user = (User)getUser(); 202 Database db = getDatabase();203 208 204 209 parameterString("ordnername"); … … 207 212 int subject = getInteger("subject"); 208 213 209 newname = db.prepareString(newname); 210 211 Ordner ordner = Ordner.getOrdnerByID( subject, user.getID() ); 212 214 Ordner ordner = Ordner.getOrdnerByID( subject, user ); 213 215 ordner.setName( newname ); 214 216 … … 295 297 int ordner = getInteger("ordner"); 296 298 297 Ordner moveto = Ordner.getOrdnerByID( movetoID, user .getID());298 Ordner trash = Ordner.getTrash( user .getID());299 Ordner moveto = Ordner.getOrdnerByID( movetoID, user ); 300 Ordner trash = Ordner.getTrash( user ); 299 301 300 302 if( moveto == null ) { … … 303 305 } 304 306 305 if( trash .getID() == moveto.getID()){307 if( trash == moveto ) { 306 308 getContext().getResponse().getContent().append("ERROR: Es duerfen keine Nachrichten/Ordner in den Papierkorb verschoben werden"); 307 309 return; … … 329 331 for(int i = 0; i < count_ordner; i++ ) { 330 332 parameterNumber("ordner_"+ordners.get(i)); 331 int tomove = getInteger("ordner_"+ordners.get(i)); 332 if( (tomove != 0) && Ordner.getAllChildIDs(tomove, user.getID()).contains(moveto.getID())) { 333 Ordner tomove = Ordner.getOrdnerByID(getInteger("ordner_"+ordners.get(i)), user); 334 if( tomove == null ) { 335 continue; 336 } 337 338 if( tomove.getAllChildren().contains(moveto)) { 333 339 getContext().getResponse().getContent().append("ERROR: Es duerfen keine Ordner in ihre eignen Unterordner verschoben werden"); 334 340 return ; … … 336 342 337 343 338 if( tomove == ordners.get(i) ){344 if( tomove.getID() == ordners.get(i) ){ 339 345 counter++; 340 db.update("UPDATE ordner SET parent='",moveto.getID(),"' WHERE id='",tomove,"'");346 tomove.setParent(moveto); 341 347 } 342 348 } … … 373 379 int ordner = getInteger("ordner"); 374 380 375 Ordner moveto = Ordner.getOrdnerByID( movetoID, user .getID());376 Ordner trash = Ordner.getTrash( user .getID());381 Ordner moveto = Ordner.getOrdnerByID( movetoID, user ); 382 Ordner trash = Ordner.getTrash( user ); 377 383 378 384 if( moveto == null ) { … … 408 414 for(int i = 0; i < count_ordner; i++ ) { 409 415 parameterNumber("ordner_"+ordners.get(i)); 410 int tomove = getInteger("ordner_"+ordners.get(i)); 411 if( (tomove != 0) && Ordner.getAllChildIDs(tomove, user.getID()).contains(moveto.getID())) { 416 Ordner tomove = Ordner.getOrdnerByID(getInteger("ordner_"+ordners.get(i)), user); 417 if( tomove == null ) { 418 continue; 419 } 420 421 if( tomove.getAllChildren().contains(moveto)) { 412 422 t.set_var("show.message", "<span style=\"color:red\">Es dürfen keine Ordner in ihre eignen Unterordner verschoben werden.</span>"); 413 423 redirect("showInbox"); … … 416 426 417 427 418 if( tomove == ordners.get(i) ){419 db.update("UPDATE ordner SET parent='",moveto.getID(),"' WHERE id='",tomove,"'");428 if( tomove.getID() == ordners.get(i) ) { 429 tomove.setParent(moveto); 420 430 } 421 431 } … … 465 475 for( int i = 0; i < count_ordner; i++ ) { 466 476 parameterNumber("ordner_"+ordners.get(i)); 467 int delordner = getInteger("ordner_"+ordners.get(i));468 469 if( delordner == ordners.get(i) ) {470 Ordner.deleteOrdnerByID( delordner, user.getID());477 Ordner delordner = Ordner.getOrdnerByID(getInteger("ordner_"+ordners.get(i)), user); 478 479 if( delordner.getID() == ordners.get(i) ) { 480 delordner.deleteOrdner(); 471 481 } 472 482 } … … 477 487 478 488 if( pm_id == pms.get(i) ) { 479 PM.deleteByID( pm_id, user .getID());489 PM.deleteByID( pm_id, user ); 480 490 } 481 491 } … … 692 702 int recover = getInteger("recover"); 693 703 694 PM.recoverByID( recover, user .getID());704 PM.recoverByID( recover, user ); 695 705 696 706 redirect("showInbox"); … … 705 715 TemplateEngine t = getTemplateEngine(); 706 716 707 PM.recoverAll( user .getID());717 PM.recoverAll( user ); 708 718 709 719 t.set_var("show.message", "<span style=\"color:red\">Nachrichten wiederhergestellt</span>"); … … 733 743 734 744 // Liste aller vorhandenen Ordner generieren 735 SQLQuery ordner = db.query("SELECT * FROM ordner WHERE playerid=",user.getID()," ORDER BY name ASC");745 SQLQuery ordnerRow = db.query("SELECT * FROM ordner WHERE playerid=",user.getID()," ORDER BY name ASC"); 736 746 737 747
