replace the use of StringUtil.quote(String) with StringUtil.JDBCescapeStringLiteral...
[mir.git] / source / mircoders / module / ModuleContent.java
1 /*
2  * Copyright (C) 2001, 2002  The Mir-coders group
3  *
4  * This file is part of Mir.
5  *
6  * Mir is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Mir is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Mir; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  * In addition, as a special exception, The Mir-coders gives permission to link
21  * the code of this program with the com.oreilly.servlet library, any library
22  * licensed under the Apache Software License, The Sun (tm) Java Advanced
23  * Imaging library (JAI), The Sun JIMI library (or with modified versions of
24  * the above that use the same license as the above), and distribute linked
25  * combinations including the two.  You must obey the GNU General Public
26  * License in all respects for all of the code used other than the above
27  * mentioned libraries.  If you modify this file, you may extend this exception
28  * to your version of the file, but you are not obligated to do so.  If you do
29  * not wish to do so, delete this exception statement from your version.
30  */
31
32 package mircoders.module;
33
34 import java.io.*;
35 import java.util.*;
36 import java.sql.*;
37 import javax.servlet.*;
38 import javax.servlet.http.*;
39
40 import mir.servlet.*;
41 import mir.module.*;
42 import mir.entity.*;
43 import mir.misc.*;
44 import mir.storage.*;
45
46 import mircoders.entity.*;
47 import mircoders.storage.*;
48
49 /*
50  *  ContentObjekt -
51  *
52  * @version $Id: ModuleContent.java,v 1.7.4.4 2002/12/20 03:01:01 mh Exp $
53  *
54  * @author RK
55  *
56  * $Log: ModuleContent.java,v $
57  * Revision 1.7.4.4  2002/12/20 03:01:01  mh
58  * replace the use of StringUtil.quote(String) with StringUtil.JDBCescapeStringLiteral(String) to better escape single quotes and other JDBC stuff
59  *
60  * Revision 1.7.4.3  2002/11/01 05:38:20  mh
61  * Converted media Interface to use streams (Java IO) instead of byte buffers of
62  * the entire uplaoded files. These saves loads of unecessary memory use. JAI
63  * still consumes quite a bit though.
64  *
65  * A new temporary file (for JAI) parameter is necessary and is in the config.properties file.
66  *
67  * A nice side effect of this work is the FileHandler interface which is
68  * basically a call back mechanism for WebdbMultipartRequest which allows the
69  * uploaded file to handled by different classes. For example, for a media
70  * upload, the content-type, etc.. needs to be determined, but if say the
71  * FileEditor had a feature to upload static files... another handler wood be
72  * needed. Right now only the MediaRequest handler exists.
73  *
74  *
75  */
76
77 public class ModuleContent extends AbstractModule
78 {
79         static Logfile     theLog;
80
81         public ModuleContent() {
82                 super();
83                 if (theLog == null) theLog = Logfile.getInstance(MirConfig.getProp("Home") + MirConfig.getProp("Module.Content.Logfile"));
84         }
85
86         public ModuleContent(StorageObject theStorage) {
87                 this.theStorage = theStorage;
88                 if (theLog == null) theLog = Logfile.getInstance(MirConfig.getProp("Home") + MirConfig.getProp("Module.Content.Logfile"));
89         }
90
91         //
92         // methoden, um an ContentEntities zu kommen
93
94   public EntityList getFeatures(int offset, int limit) throws ModuleException
95   {
96     return getContent("is_published=true AND to_article_type=2", "webdb_create desc",
97                       offset, limit);
98   }
99
100   public EntityList getNewsWire(int offset, int limit) throws ModuleException
101   {
102     return getContent("is_published=true AND to_article_type = 1",
103                                     "webdb_create desc",offset,limit);
104   }
105
106   public EntityList getStartArticle() throws ModuleException
107   {
108     EntityList returnList = getContent("is_published=true AND to_article_type=4",
109                                         "webdb_create desc",0,1);
110     //if no startspecial exists
111     if (returnList==null || returnList.size()==0)
112       returnList = getContent("is_published=true AND to_article_type=3",
113                               "webdb_create desc",0,1);
114
115     return returnList;
116   }
117
118         public EntityList getContent(HashMap searchValues, boolean concat, int offset, EntityUsers user)
119                 throws ModuleException {
120
121                 try {
122
123                         String whereClause ="", aField, aValue;
124                         boolean first = true;
125
126                         Set set = searchValues.keySet();
127                         Iterator it = set.iterator();
128                                                 for (int i=0;i<set.size();i++) {
129                         aField = (String)it.next();
130                         aValue = (String)searchValues.get(aField);
131
132                         if (first == false)
133                                 whereClause +=  (concat) ? " and " : " or ";
134                         else
135                                 first = false;
136
137                         whereClause += "(";
138
139                         // default: hier splitten der eintraege und verknupfung mit AND OR NOT
140                         StringTokenizer st = new StringTokenizer(aValue);
141                         boolean firstToken = true;
142                         while(st.hasMoreTokens()) {
143                                 String notString = "";
144                                 String tokenConcat = " OR ";
145                                 String nextToken = st.nextToken();
146
147                                 if (nextToken.startsWith("+")) {
148                                         nextToken = nextToken.substring(1);
149                                         tokenConcat = " AND ";
150                                 }
151                                 if (nextToken.startsWith("-")) {
152                                                 nextToken = nextToken.substring(1);
153                                                 tokenConcat = " AND ";
154                                                 notString = " NOT ";
155                                 }
156                                 if (firstToken == true) {
157                                         tokenConcat = "";
158                                         firstToken = false;
159                                 }
160
161
162                                 whereClause += tokenConcat + aField + notString + " like '";
163                                 whereClause += nextToken + "%'";
164                         }
165                         whereClause += ") ";
166                         }
167                         return theStorage.selectByWhereClause(whereClause, offset);
168         }
169         catch (StorageObjectException e){
170                         throw new ModuleException(e.toString());
171         }
172
173                 }
174
175         public EntityList getContentByField(String aField, String aValue, String orderBy, int offset,
176                                 EntityUsers user) throws ModuleException
177         {
178                 String whereClause = "lower("+aField + ") like lower('%" + StringUtil.JDBCescapeStringLiteral(aValue) + "%')";
179                 return getContent(whereClause, orderBy, offset, user);
180         }
181
182         public EntityList getContent(String whereClause, String orderBy, int offset,
183     int limit, EntityUsers user) throws ModuleException {
184
185                 try {
186                         if (user!=null){
187                                 if (!user.isAdmin())
188                                         whereClause += " and to_publisher='" + user.getId()+"'";
189                                 }
190                                 return theStorage.selectByWhereClause(whereClause, orderBy, offset, limit);
191                         }
192                 catch (StorageObjectException e){       throw new ModuleException(e.toString()); }
193         }
194
195         public EntityList getContent(String whereClause, String orderBy,int offset, int limit)
196                 throws ModuleException {
197                 try {
198                         return theStorage.selectByWhereClause(whereClause, orderBy, offset, limit);
199                 } catch (StorageObjectException e){
200                         throw new ModuleException(e.toString());
201                 }
202         }
203
204         public EntityList getContent(String whereClause, String orderBy, int offset, EntityUsers user)
205                 throws ModuleException
206         {
207                 try {
208                         if (whereClause !=null) {
209
210                                 // for the different article_types
211                                 if(whereClause.equals("newswire")) {
212                                         whereClause="is_published='1' and to_article_type='1'";
213                                         orderBy = "webdb_create desc";
214                                 }
215                                 if(whereClause.equals("feature")) {
216                                         whereClause="is_published='1' and to_article_type='2'";
217                                         orderBy = "webdb_create desc";
218                                 }
219                                 if(whereClause.equals("themenspecial")) {
220                                         whereClause="is_published='1' and to_article_type='3'";
221                                         orderBy = "webdb_create desc";
222                                 }
223                                 if(whereClause.equals("special")) {
224                                         whereClause="is_published='1' and to_article_type='4'";
225                                         orderBy = "webdb_create desc";
226                                 }
227
228                                 if(whereClause.equals("comments")) {
229                                         whereClause="not (comment is null or comment like '')";
230                                         orderBy = "webdb_lastchange desc";
231                                 }
232
233                                 if(whereClause.equals("nfrei")) {
234                                         whereClause="is_published='0'"; orderBy="webdb_create desc";
235                                 }
236
237                                 if(whereClause.equals("lastchange")) {
238                                         whereClause=""; orderBy="webdb_lastchange desc";
239                                 }
240
241                                 if(whereClause.equals("media")) {
242                                         return DatabaseContentToMedia.getInstance().getContent();
243                                 }
244                         }
245                         return theStorage.selectByWhereClause(whereClause, orderBy, offset);
246                 }
247                 catch (StorageObjectException e){       throw new ModuleException(e.toString()); }
248         }
249
250
251 }
252
253