1 28 29 30 package com.opencms.workplace; 31 32 import org.opencms.file.CmsFile; 33 import org.opencms.file.CmsObject; 34 import org.opencms.file.CmsPropertyDefinition; 35 import org.opencms.file.CmsResource; 36 import org.opencms.i18n.CmsEncoder; 37 import org.opencms.main.CmsException; 38 import org.opencms.main.CmsLog; 39 40 import com.opencms.core.I_CmsSession; 41 import com.opencms.legacy.CmsXmlTemplateLoader; 42 import com.opencms.template.A_CmsXmlContent; 43 44 import java.util.Hashtable ; 45 import java.util.List ; 46 import java.util.Vector ; 47 48 60 61 public class CmsPictureBrowser extends A_CmsGalleryBrowser { 62 63 74 75 public byte[] getContent(CmsObject cms, String templateFile, String elementName, Hashtable parameters, String templateSelector) throws CmsException { 76 if(CmsLog.getLog(this).isDebugEnabled() && C_DEBUG) { 77 CmsLog.getLog(this).debug("Getting content of element " + ((elementName==null)?"<root>":elementName)); 78 CmsLog.getLog(this).debug("Template file is: " + templateFile); 79 CmsLog.getLog(this).debug("Selected template section is: " + ((templateSelector==null)?"<default>":templateSelector)); 80 } 81 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 82 CmsXmlWpTemplateFile xmlTemplateDocument = (CmsXmlWpTemplateFile)getOwnTemplateFile(cms, 83 templateFile, elementName, parameters, templateSelector); 84 85 try { 87 cms.readResource(getConfigFile(cms).getPicGalleryPath()); 88 } 89 catch(CmsException e) { 90 xmlTemplateDocument.setData("ERRORDETAILS", CmsException.getStackTraceAsString(e)); 91 templateSelector = "error"; 92 } 93 if(!"error".equals(templateSelector)) { 94 if(parameters.get(CmsWorkplaceDefault.C_PARA_INITIAL) != null) { 95 session.removeValue(CmsWorkplaceDefault.C_PARA_FOLDER); 96 session.removeValue("picBrowser_for_ext_nav"); 97 } 98 String setOnClick = (String )parameters.get("setonclick"); 99 if(setOnClick != null){ 100 session.putValue("picBrowser_for_ext_nav", setOnClick); 101 } 102 setOnClick = (String )session.getValue("picBrowser_for_ext_nav"); 103 String folder = (String )parameters.get(CmsWorkplaceDefault.C_PARA_FOLDER); 104 if(folder != null) { 105 session.putValue(CmsWorkplaceDefault.C_PARA_FOLDER, folder); 106 } 107 folder = (String )session.getValue(CmsWorkplaceDefault.C_PARA_FOLDER); 108 if(folder == null || "".equals(folder)) { 109 folder = getConfigFile(cms).getPicGalleryPath(); 110 List galleries = cms.getSubFolders(folder); 111 if(galleries.size() > 0) { 112 113 folder = cms.getSitePath((CmsResource)galleries.get(0)); 115 session.putValue(CmsWorkplaceDefault.C_PARA_FOLDER, folder); 116 } 117 else { 118 119 templateSelector = "error_no_gallery"; 121 } 122 } 123 if(!"error_no_gallery".equals(templateSelector)) { 124 String pageText = (String )parameters.get(CmsWorkplaceDefault.C_PARA_PAGE); 125 String filter = (String )parameters.get(CmsWorkplaceDefault.C_PARA_FILTER); 126 127 String deleteAction = (String )parameters.get("action"); 129 if ("delete".equals(deleteAction)) { 130 String deleteResource = (String )parameters.get("resource"); 131 if (deleteResource != null && !"".equals(deleteResource)) { 132 try { 133 CmsResource res = cms.readResource(deleteResource); 135 if (cms.getLock(res).isNullLock()) { 136 cms.lockResource(deleteResource); 137 } 138 cms.deleteResource(deleteResource, CmsResource.DELETE_PRESERVE_SIBLINGS); 139 } catch (CmsException e) { 140 xmlTemplateDocument.setData("ERRORDETAILS", CmsException.getStackTraceAsString(e)); 141 templateSelector = "error"; 142 return startProcessing(cms, xmlTemplateDocument, elementName, parameters, templateSelector); 143 } 144 } 145 } 146 147 if(pageText == null || "".equals(pageText)) { 149 pageText = "1"; 150 parameters.put(CmsWorkplaceDefault.C_PARA_PAGE, pageText); 151 } 152 153 if(filter == null) { 155 filter = ""; 156 parameters.put(CmsWorkplaceDefault.C_PARA_FILTER, filter); 157 } 158 159 Vector filteredPics = getFilteredPicList(cms, folder, filter); 161 int maxpage = ((filteredPics.size() - 1) / CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES) + 1; 162 163 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_FOLDER, CmsEncoder.escape(folder, 165 cms.getRequestContext().getEncoding())); 166 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_PAGE, pageText); 167 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_FILTER, filter); 168 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_MAXPAGE, "" + maxpage); 169 if(setOnClick == null || !"true".equals(setOnClick)){ 170 xmlTemplateDocument.setData("setonclick", ""); 171 }else{ 172 xmlTemplateDocument.setData("setonclick", "true"); 173 } 174 parameters.put("_PICLIST_", filteredPics); 175 } 176 } 177 178 return startProcessing(cms, xmlTemplateDocument, elementName, parameters, templateSelector); 180 } 181 182 190 191 protected Vector getFilteredPicList(CmsObject cms, String folder, String filter) throws CmsException { 192 193 List allPics = cms.getFilesInFolder(folder); 195 196 Vector filteredPics = new Vector (); 198 for(int i = 0;i < allPics.size();i++) { 199 CmsFile file = (CmsFile)allPics.get(i); 200 if (file.getState() != CmsResource.STATE_DELETED) { 201 String filename = file.getName(); 202 String title = cms.readProperty(cms.getSitePath(file), CmsPropertyDefinition.PROPERTY_TITLE); 203 boolean filenameFilter = inFilter(filename, filter); 204 boolean titleFilter = ((title == null) || ("".equals(title))) ? false : inFilter(title, filter); 205 if((filenameFilter || titleFilter) && isImage(filename)) { 206 filteredPics.addElement(file); 207 } 208 } 209 } 210 return filteredPics; 211 } 212 213 227 public Integer getPicGalleryNames(CmsObject cms, CmsXmlLanguageFile lang, 228 Vector names, Vector values, Hashtable parameters) throws CmsException { 229 return getGalleryNames(cms, getConfigFile(cms).getPicGalleryPath(), lang, names, values, parameters); 230 } 231 232 242 243 public boolean isCacheable(CmsObject cms, String templateFile, String elementName, 244 Hashtable parameters, String templateSelector) { 245 return false; 246 } 247 248 253 254 protected boolean isImage(String filename) { 255 if(filename.toLowerCase().endsWith("gif") || filename.toLowerCase().endsWith("jpg") 256 || filename.toLowerCase().endsWith("jpeg")) { 257 return true; 258 } 259 else { 260 return false; 261 } 262 } 263 264 280 281 public Object pictureList(CmsObject cms, String tagcontent, A_CmsXmlContent doc, 282 Object userObj) throws CmsException { 283 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 284 Hashtable parameters = (Hashtable )userObj; 285 CmsXmlWpTemplateFile xmlTemplateDocument = (CmsXmlWpTemplateFile)doc; 286 CmsXmlLanguageFile lang = new CmsXmlLanguageFile(cms); 287 StringBuffer result = new StringBuffer (); 288 String pageText = (String )parameters.get(CmsWorkplaceDefault.C_PARA_PAGE); 289 290 Vector filteredPics = (Vector )parameters.get("_PICLIST_"); 292 int numPics = filteredPics.size(); 293 294 int page = new Integer (pageText).intValue(); 296 int from = (page - 1) * CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES; 297 int to = ((from + CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES) > numPics) ? numPics : (from + CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES); 298 String folder = (String )parameters.get(CmsWorkplaceDefault.C_PARA_FOLDER); 299 if(folder == null) { 300 folder = (String )session.getValue(CmsWorkplaceDefault.C_PARA_FOLDER); 301 } 302 if(folder == null || "".equals(folder)) { 303 folder = getConfigFile(cms).getPicGalleryPath(); 304 parameters.put(CmsWorkplaceDefault.C_PARA_FOLDER, folder); 305 } 306 307 String picsUrl = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getServletUrl() + folder; 308 309 for(int i = from;i < to;i++) { 311 CmsFile file = (CmsFile)filteredPics.elementAt(i); 312 String filename = file.getName(); 313 String title = cms.readProperty(cms.getSitePath(file), CmsPropertyDefinition.PROPERTY_TITLE); 314 315 int dotIndex = filename.lastIndexOf("."); 318 if(title == null) { 319 if(dotIndex > 0) { 320 title = filename.substring(0, dotIndex); 321 } 322 else { 323 title = filename; 324 } 325 } 326 327 String type; 329 if(dotIndex > 0) { 330 type = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase() + "-Bild"; 331 } 332 else { 333 type = lang.getLanguageValue("input.unknown"); 334 } 335 336 337 xmlTemplateDocument.setData("picsource", picsUrl + file.getName()); 339 xmlTemplateDocument.setData("filepath", cms.getSitePath(file)); 340 xmlTemplateDocument.setData("title", CmsEncoder.escapeXml(title)); 341 xmlTemplateDocument.setData("filename", filename); 342 xmlTemplateDocument.setData("size", file.getLength() + " Byte"); 343 xmlTemplateDocument.setData("type", type); 344 if ((cms.getPermissions(cms.getSitePath(file)).getPermissions() & com.opencms.core.I_CmsConstants.C_ACCESS_WRITE) > 0 ) { 345 xmlTemplateDocument.setData("delete", xmlTemplateDocument.getProcessedDataValue("deleteentry", this)); 346 } else { 347 xmlTemplateDocument.setData("delete", " "); 348 } 349 String paraSetOnClick = (String )session.getValue("picBrowser_for_ext_nav"); 352 String setOnClick = ""; 353 if ("true".equals(paraSetOnClick)){ 354 setOnClick = xmlTemplateDocument.getProcessedDataValue("clickentry"); 355 } 356 xmlTemplateDocument.setData("toclickornot", setOnClick); 357 result.append(xmlTemplateDocument.getProcessedDataValue("piclistentry", this, userObj)); 358 359 if(i < (to - 1)) { 362 result.append(xmlTemplateDocument.getProcessedDataValue("part", this, userObj)); 363 } 364 } 365 return result.toString(); 366 } 367 368 381 382 public Boolean showBackButton(CmsObject cms, CmsXmlLanguageFile lang, Hashtable parameters) { 383 384 String pageText = (String )parameters.get(CmsWorkplaceDefault.C_PARA_PAGE); 386 int page = new Integer (pageText).intValue(); 387 return new Boolean (page > 1); 388 } 389 390 403 404 public Boolean showNextButton(CmsObject cms, CmsXmlLanguageFile lang, Hashtable parameters) { 405 406 String pageText = (String )parameters.get(CmsWorkplaceDefault.C_PARA_PAGE); 408 int page = new Integer (pageText).intValue(); 409 410 Vector filteredPics = (Vector )parameters.get("_PICLIST_"); 412 int numPics = filteredPics.size(); 413 414 int maxpage = ((numPics - 1) / CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES) + 1; 416 return new Boolean (page < maxpage); 417 } 418 } 419
| Popular Tags
|