From: zapata Date: Sun, 25 Dec 2005 21:38:45 +0000 (+0000) Subject: added the possibility to search for articles by topic X-Git-Tag: LATEST_MERGED_1_1~75 X-Git-Url: http://erislabs.net/gitweb/?a=commitdiff_plain;ds=sidebyside;h=4a893bc2a122c246763bad4b5dc4d4f51a83e80b;p=mir.git added the possibility to search for articles by topic --- diff --git a/bundles/admin_en.properties b/bundles/admin_en.properties index bb55f119..d2f2f874 100755 --- a/bundles/admin_en.properties +++ b/bundles/admin_en.properties @@ -1,6 +1,6 @@ ########## admin ########## # language: english -# $Id: admin_en.properties,v 1.48.2.26 2005/11/09 14:08:56 zapata Exp $ +# $Id: admin_en.properties,v 1.48.2.27 2005/12/25 21:38:45 zapata Exp $ languagename=English @@ -236,6 +236,7 @@ content.operation.newswire=newswire content.preview.default = Preview +contentsearch.topic = Topic contentsearch.value = search contentsearch.field = field contentsearch.field.title = Title diff --git a/source/mir/entity/adapter/EntityAdapterEngine.java b/source/mir/entity/adapter/EntityAdapterEngine.java index 04e99898..ea29caf3 100755 --- a/source/mir/entity/adapter/EntityAdapterEngine.java +++ b/source/mir/entity/adapter/EntityAdapterEngine.java @@ -26,18 +26,25 @@ */ package mir.entity.adapter; -import java.util.List; - import mir.entity.EntityBrowser; import mir.storage.DatabaseFailure; +import java.util.List; + public class EntityAdapterEngine { private EntityAdapterEngine() { } - public static List retrieveAdapterList(EntityAdapterModel aModel, String aDefinition, String aQualifier, String anOrder, int aLimit, int anOffset) { + public static List retrieveAdapterList(EntityAdapterModel aModel, String aDefinition, + String aQualifier, String anOrder, int aLimit, int anOffset) { + return retrieveAdapterList(aModel, aDefinition, "", null, aQualifier, anOrder, aLimit, anOffset); + } + + public static List retrieveAdapterList(EntityAdapterModel aModel, String aDefinition, String aMainTablePrefix, List someExtraTables, + String aQualifier, String anOrder, int aLimit, int anOffset) { try { - EntityBrowser browser = new EntityBrowser(aModel.getMappingForName(aDefinition).getDatabase(), aQualifier, anOrder, 30, aLimit, anOffset); + EntityBrowser browser = new EntityBrowser(aModel.getMappingForName(aDefinition).getDatabase(), + aMainTablePrefix, someExtraTables, aQualifier, anOrder, 30, aLimit, anOffset); return new EntityListAdapter(aModel, aDefinition, browser, aLimit); } diff --git a/source/mir/servlet/AdminServletModule.java b/source/mir/servlet/AdminServletModule.java index 4c790408..60389f47 100755 --- a/source/mir/servlet/AdminServletModule.java +++ b/source/mir/servlet/AdminServletModule.java @@ -36,6 +36,7 @@ import mir.module.ModuleExc; import mir.storage.Database; import mir.util.HTTPRequestParser; import mir.util.URLBuilder; +import mir.util.StringRoutines; import mircoders.global.MirGlobal; import mircoders.localizer.MirLocalizerExc; import mircoders.servlet.ServletHelper; @@ -130,8 +131,10 @@ public abstract class AdminServletModule extends ServletModule { String where = requestParser.getParameter("where"); String order = requestParser.getParameterWithDefault("order", getDefaultListOrdering()); int offset = requestParser.getIntegerWithDefault("offset", 0); + String mainTablePrefix = requestParser.getParameter("mainTablePrefix"); + String extraTables = requestParser.getParameter("extraTables"); - returnList(aRequest, aResponse, where, order, offset); + returnList(aRequest, aResponse, where, order, offset, Collections.EMPTY_MAP, mainTablePrefix, extraTables); } @@ -143,14 +146,24 @@ public abstract class AdminServletModule extends ServletModule { public void returnList(HttpServletRequest aRequest, HttpServletResponse aResponse, String aWhereClause, String anOrderByClause, int anOffset, Map anOverridingRequestParameters) throws ServletModuleExc { + returnList(aRequest, aResponse, aWhereClause, anOrderByClause, anOffset, anOverridingRequestParameters, "", null); + } + public void returnList(HttpServletRequest aRequest, HttpServletResponse aResponse, + String aWhereClause, String anOrderByClause, int anOffset, + Map anOverridingRequestParameters, String aMainTablePrefix, String someExtraTables) throws ServletModuleExc { HTTPRequestParser requestParser = new HTTPRequestParser(aRequest, anOverridingRequestParameters); URLBuilder urlBuilder = new URLBuilder(); try { Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, getLocales(aRequest)); + List extraTables = null; + if (someExtraTables!=null && someExtraTables.length() > 0) { + extraTables = StringRoutines.splitString(someExtraTables, ","); + } + List list = - EntityAdapterEngine.retrieveAdapterList(model, definition, aWhereClause, anOrderByClause, nrEntitiesPerListPage, anOffset); + EntityAdapterEngine.retrieveAdapterList(model, definition, aMainTablePrefix, extraTables, aWhereClause, anOrderByClause, nrEntitiesPerListPage, anOffset); responseData.put("nexturl", null); responseData.put("prevurl", null); @@ -160,6 +173,8 @@ public abstract class AdminServletModule extends ServletModule { urlBuilder.setValue("do", "list"); urlBuilder.setValue("where", aWhereClause); urlBuilder.setValue("order", anOrderByClause); + urlBuilder.setValue("extraTables", someExtraTables); + urlBuilder.setValue("mainTablePrefix", aMainTablePrefix); urlBuilder.setValue("offset", anOffset); diff --git a/source/mircoders/localizer/basic/MirBasicProducerAssistantLocalizer.java b/source/mircoders/localizer/basic/MirBasicProducerAssistantLocalizer.java index 6d31d17a..db4bdf6b 100755 --- a/source/mircoders/localizer/basic/MirBasicProducerAssistantLocalizer.java +++ b/source/mircoders/localizer/basic/MirBasicProducerAssistantLocalizer.java @@ -72,7 +72,7 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL private RE regularExpressionWhitespace; public MirBasicProducerAssistantLocalizer() throws MirLocalizerFailure { - try{ + try { regularExpressionLT = new RE("<"); regularExpressionGT = new RE(">"); regularExpressionWhitespace = new RE("\\s+"); @@ -82,7 +82,7 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL } } - public void initializeGenerationValueSet(Map aValueSet) throws MirLocalizerExc, MirLocalizerFailure { + public void initializeGenerationValueSet(Map aValueSet) throws MirLocalizerExc, MirLocalizerFailure { try { Iterator i; @@ -110,13 +110,13 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL aValueSet.put("config", configMap); - aValueSet.put("utility", new Utility()); + aValueSet.put("utility", new Utility()); aValueSet.put("languages", - new EntityIteratorAdapter("", "", 20, MirGlobal.localizer().dataModel().adapterModel(), "language")); + new EntityIteratorAdapter("", "", 20, MirGlobal.localizer().dataModel().adapterModel(), "language")); aValueSet.put("topics", - new EntityIteratorAdapter("", "", 20, MirGlobal.localizer().dataModel().adapterModel(), "topic")); + new EntityIteratorAdapter("", "", 20, MirGlobal.localizer().dataModel().adapterModel(), "topic")); Map articleTypeMap = new HashMap(); articleTypeMap.put("openposting", "0"); @@ -150,7 +150,7 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL } } - + public static class getLanguageIdFunction implements Generator.Function { private Map languageCodeToId; private String otherLanguageId; @@ -180,12 +180,14 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL public Object perform(List aParameters) throws GeneratorExc, GeneratorFailure { try { - if (aParameters.size() != 1) + if (aParameters.size() != 1) { throw new GeneratorExc("getLanguageIdFunction: 1 parameter expected: language-code"); + } String result = (String) languageCodeToId.get(aParameters.get(0)); - if (result == null) + if (result == null) { result = otherLanguageId; + } return result; } @@ -205,11 +207,11 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL try { String result = StringUtil.createHTML( - StringUtil.removeHTMLTags(aText), - MirGlobal.config().getString("Producer.ImageRoot"), - MirGlobal.config().getString("Producer.MailLinkName"), - MirGlobal.config().getString("Producer.ExtLinkName"), - MirGlobal.config().getString("Producer.IntLinkName")); + StringUtil.removeHTMLTags(aText), + MirGlobal.config().getString("Producer.ImageRoot"), + MirGlobal.config().getString("Producer.MailLinkName"), + MirGlobal.config().getString("Producer.ExtLinkName"), + MirGlobal.config().getString("Producer.IntLinkName")); logger.debug("done filtering non-HTML text "); return result; } @@ -291,53 +293,81 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL } - private String[] badAttributeValuePrefixes= {"javascript","vbscript","about","wysiwyg","data","view-source","ms-its","mhtml","shell","lynxexec","lynxcgi","hcp","ms-help","help","disk","vnd.ms.radio","opera","res","resource","chrome","mocha","livescript"}; - - - private String[] badAttributes = {"onabort", "onblur", "onchange", "onclick", "ondblclick", "onerror", "onfocus", "onkeydown", "onKeypress", "onkeyup", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onreset", "onselect", "onsubmit", "onunload","onload","onclick","onfocus","onblur","FSCommand","onAbort","onActivate","onAfterPrint","onAfterUpdate","onBeforeActivate","onBeforeCopy","onBeforeCut","onBeforeDeactivate","onBeforeEditFocus","onBeforePaste","onBeforePrint","onBeforeUnload","onBegin","onBlur","onBounce","onCellChange","onChange","onClick","onContextMenu","onControlSelect","onCopy","onCut","onDataAvailible","onDataSetChanged","onDataSetComplete","onDblClick","onDeactivate","onDrag","onDragEnd","onDragLeave","onDragEnter","onDragOver","onDragDrop","onDrop","onEnd","onError","onErrorUpdate","onExit","onFilterChange","onFinish","onFocus","onFocusIn","onFocusOut","onHelp","onKeyDown","onKeyPress","onKeyUp","onLayoutComplete","onLoad","onLoseCapture","onMediaComplete","onMediaError","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOut","onMouseOver","onMouseUp","onMouseWheel","onMove","onMoveEnd","onMoveStart","onOutOfSync","onPaste","onPause","onProgress","onPropertyChange","onReadyStateChange","onRepeat","onReset","onResize","onResizeEnd","onResizeStart","onResume","onReverse","onRowEnter","onRowExit","onRowDelete","onRowInserted","onScroll","onSeek","onSelect","onSelectionChange","onSelectStart","onStart","onStop","onSynchRestored","onSubmit","onTimeError","onTrackChange","onUnload","onURLFlip","seekSegmentTime","style","height","width"}; - - private boolean isBadAttr(String attrName){ - for (int i=0;i'); @@ -392,21 +422,21 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL break; case Node.TEXT_NODE: - String value=node.getNodeValue(); - try{ - value=regularExpressionLT.substituteAll(value, "<"); - value=regularExpressionGT.substituteAll(value, ">"); - } - catch (Throwable t){ - value=""; - } - out.write(value); + String value = node.getNodeValue(); + try { + value = regularExpressionLT.substituteAll(value, "<"); + value = regularExpressionGT.substituteAll(value, ">"); + } + catch (Throwable t) { + value = ""; + } + out.write(value); break; } - if (type == Node.ELEMENT_NODE && canOutput && node.getChildNodes()!=null && node.getChildNodes().getLength()>0) { + if (type == Node.ELEMENT_NODE && canOutput && node.getChildNodes() != null && node.getChildNodes().getLength() > 0) { out.write("'); @@ -416,13 +446,13 @@ public class MirBasicProducerAssistantLocalizer implements MirProducerAssistantL } public static class Utility extends ReflectionGeneratorFunctionsAdapter { - public Utility () { + public Utility() { super(new MirBasicUtilityFunctions()); } public Object getDatetime() { return new GeneratorDateTimeFunctions.DateTimeFunctions( - MirPropertiesConfiguration.instance().getString("Mir.DefaultTimezone")); + MirPropertiesConfiguration.instance().getString("Mir.DefaultTimezone")); } public Object getCompressWhitespace() { diff --git a/source/mircoders/servlet/ServletModuleAdmin.java b/source/mircoders/servlet/ServletModuleAdmin.java index 737bc01c..aa1d8799 100755 --- a/source/mircoders/servlet/ServletModuleAdmin.java +++ b/source/mircoders/servlet/ServletModuleAdmin.java @@ -125,6 +125,7 @@ public class ServletModuleAdmin extends AdminServletModule { templateData.put("searchispublished", null); templateData.put("searcharticletype", null); templateData.put("searchorder", null); + templateData.put("searchtopic", null); templateData.put("selectarticleurl", null); templateData.put("recipes", MirGlobal.localizer().producers().getRecipeNames()); diff --git a/source/mircoders/servlet/ServletModuleContent.java b/source/mircoders/servlet/ServletModuleContent.java index 563fde8c..39b6b0fe 100755 --- a/source/mircoders/servlet/ServletModuleContent.java +++ b/source/mircoders/servlet/ServletModuleContent.java @@ -70,12 +70,15 @@ public class ServletModuleContent extends AdminServletModule { public ServletModuleContent() { addPropagatedParameter("selectarticleurl"); + addPropagatedParameter("searchtopic"); + definition = "content"; mainModule = contentModule; } public void search(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc, ServletModuleFailure { try { + String extraTables = ""; HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); SQLQueryBuilder queryBuilder = new SQLQueryBuilder(); String searchField = requestParser.getParameterWithDefault("searchfield", ""); @@ -83,6 +86,7 @@ public class ServletModuleContent extends AdminServletModule { String searchOrder = requestParser.getParameterWithDefault("searchorder", ""); String searchispublished = requestParser.getParameterWithDefault("searchispublished", ""); String searchArticleType = requestParser.getParameterWithDefault("searcharticletype", ""); + String searchTopic = requestParser.getParameterWithDefault("searchtopic", ""); if (searchValue.length()>0) { if ("id".equals(searchField)) { @@ -129,7 +133,15 @@ public class ServletModuleContent extends AdminServletModule { } } - returnList(aRequest, aResponse, queryBuilder.getWhereClause(), queryBuilder.getOrderByClause(), 0); + if (searchTopic.length() > 0) { + queryBuilder.appendAndCondition("cxt.content_id = id"); + queryBuilder.appendAndCondition("cxt.topic_id = " + JDBCStringRoutines.escapeStringLiteral(searchTopic)); + + extraTables = "content_x_topic cxt"; + } + + returnList(aRequest, aResponse, queryBuilder.getWhereClause(), queryBuilder.getOrderByClause(), 0, + Collections.EMPTY_MAP, null, extraTables); } catch (Throwable e) { throw new ServletModuleFailure(e); diff --git a/templates/admin/FUNCTIONS.template b/templates/admin/FUNCTIONS.template index 759ad875..a5e957ab 100755 --- a/templates/admin/FUNCTIONS.template +++ b/templates/admin/FUNCTIONS.template @@ -15,7 +15,7 @@
-
+ @@ -37,17 +37,17 @@ - ${i} + ${i}   - + - + @@ -56,8 +56,8 @@ - - + + ${utility.prettyEncodeHTML(entry[i])} @@ -68,7 +68,7 @@ ${lang("delete")} - | + | ${lang("edit")} @@ -77,14 +77,14 @@ - - - + + + ${aCount} ${lang("records")} / ${lang("show_from_to", aFrom, aTo)} - + @@ -132,7 +132,7 @@ - + @@ -147,11 +147,11 @@ - + - + @@ -175,7 +175,7 @@ ${label}: - + @@ -187,7 +187,7 @@ ${label}: - + ${utility.encodeHTML(fieldcontent)} @@ -199,7 +199,7 @@ ${label}: - + @@ -211,7 +211,7 @@ ${label}: - + @@ -220,7 +220,7 @@ - + @@ -228,7 +228,7 @@ - + @@ -243,10 +243,10 @@ ${label}:
- ${hint} + ${hint}
- + ${utility.prettyEncodeHTML(fieldcontent)} @@ -258,10 +258,10 @@ ${label}:
- ${hint} + ${hint}
- + @@ -275,10 +275,10 @@ ${label}:
- ${hint} + ${hint}
- + @@ -294,13 +294,14 @@ - + class="bg-neutral"> + @@ -332,6 +333,14 @@ + - + - +
class="table-head"class="small bg-neutral" valign="bottom"> ${lang("contentsearch.value")} class="table-head"class="small bg-neutral" valign="bottom"> ${lang("contentsearch.field")} class="table-head"class="small bg-neutral" valign="bottom"> ${lang("contentsearch.publishedstate")} class="table-head"class="small bg-neutral" valign="bottom"> ${lang("contentsearch.articletype")}class="table-head"class="small bg-neutral" valign="bottom"> ${lang("contentsearch.topic")} class="table-head"class="small bg-neutral" valign="bottom"> ${lang("contentsearch.order")} class="table_head"class="small bg_neutral" valign="bottom">  
class="listrow2"> + + class="listrow2">
- ${lang("content.images")}: + ${lang("content.images")}: @@ -493,7 +502,7 @@
@@ -509,7 +518,7 @@
- edit  + edit  @@ -520,7 +529,7 @@
${lang("content.other")}: @@ -535,7 +544,7 @@
- edit  + edit  @@ -546,7 +555,7 @@
-
+