xwiki.store.attachment.hint = file
xwiki.store.attachment.versioning.hint = file
xwiki.store.attachment.recyclebin.hint = file
storage.attachment.recyclebin = 0
xwiki.store.attachment.versioning = 0
openoffice.autoStart = true
openoffice.homePath = C: / Users / {user} /AppData/Roaming/openOffice.org/3
openoffice.profilePath = C: / Program Files / OpenOffice.org 3
set XWIKI_OPTS =% XWIKI_OPTS% -Doffice.home = "C: \ Program Files \ LibreOffice 3.4"
set XWIKI_OPTS =% XWIKI_OPTS% -Doffice.path = / usr / lib / libreoffice /
=Export Attachments=
{{info}}
By default, the export is made from the **current database** and from **all spaces**.
{{/info}}
{{velocity}}
{{html}}
; Database:
: />
; Space name:
: />
; Path to directory to write to:
: />
; /> Confirm
: />
{{/html}}
{{/velocity}}
{{groovy}}
import com.xpn.xwiki.*;
import com.xpn.xwiki.api.*;
import com.xpn.xwiki.doc.*;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.net.URL;
class ExportedAttachments {
static attachmentsNo = 0;
}
// Export attachments
def void exportAttachments(XWikiContext context) {
def dirPath = request.dirpath + "/";
def dir = new File(dirPath);
String hqlDocCount = "select distinct count(doc.name) from XWikiDocument as doc";
String hqlDocList = "select doc.fullName from XWikiDocument as doc";
if(request.spaceName && request.spaceName != ''){
hqlDocCount += " where doc.web='" + request.spaceName + "'";
hqlDocList += " where doc.web='" + request.spaceName + "'";
}
XWiki wiki = context.getWiki();
int total = wiki.getStore().search(hqlDocCount, 0, 0, context).get(0);
println "**" + total + "** documents to search for attachments";
List documentNames = null;
int offset = 0;
while (documentNames == null || documentNames.size() == 100) {
documentNames = wiki.getStore().search(hqlDocList, 100, offset, context);
for (docName in documentNames) {
try {
XWikiDocument doc = context.getWiki().getDocument(docName, context);
exportDocAttachments(doc, dir, context);
} catch (Exception e) {
println "{{error}} Error : " + e + "{{/error}}";
}
}
offset += documentNames.size();
}
println "";
println "((({{info}}Export done.{{/info}})))";
println "**" + ExportedAttachments.attachmentsNo + "** attachments exported.";
}
// Export attachments for the given document
def void exportDocAttachments(XWikiDocument doc, File dir, XWikiContext context) {
if(doc.getAttachmentList().size() > 0){
println "* **" + doc.fullName + "**";
for (XWikiAttachment attach in doc.getAttachmentList()) {
println "** " + attach.filename;
try {
// Create file
File spaceDir = new File(dir, java.net.URLEncoder.encode(doc.web));
File docDir = new File(spaceDir, java.net.URLEncoder.encode(doc.name));
File destinationFile = new File(docDir, java.net.URLEncoder.encode(attach.filename));
def attachmentURL = doc.getExternalAttachmentURL(attach.filename, 'download', context);
// Copy attachment from URL
URL url = new URL(attachmentURL);
FileUtils.copyURLToFile(url, destinationFile);
ExportedAttachments.attachmentsNo++;
}catch(Exception e){
println "{{error}} Error: Could not create file: " + e + "{{/error}}";
}
}
}
}
// Handle request
if(request.confirm && request.dirpath){
// Set database
def currentDatabase = xcontext.getDatabase();
def newDatabase = currentDatabase;
if(request.dbName && request.dbName != ''){
newDatabase = request.dbName
}
xcontext.setDatabase(newDatabase);
println "=Exporting attachments from **" + newDatabase + "** wiki=";
// Export
exportAttachments(xcontext.context);
// Reset database
xcontext.setDatabase(currentDatabase);
}
{{/groovy}}
{{velocity}}
#set ($discard = $services.localization.use('document', 'TaskManager.TaskManagerTranslations'))
#set ($discard = $xwiki.ssfx.use('uicomponents/widgets/userpicker/userPicker.css'))
#set ($columnsProperties = {
'number': {"type":"number","size":10},
'name': {"type":"text","size":10, "link":"view"},
'project': {"type":"list","size":10},
'status': {"type":"list","size":10,"html":true},
'severity': {"type":"list","size":10,"html":true},
'reporter': {"type":"text","size":10,"html":true},
'assignee': {"type":"text","size":10,"html":true},
'duedate': {"type":"text","size":10},
'progress': {"type":"number","size":10, "html":true},
'_actions': {"sortable":false,"filterable":false,"html":true,"actions":["edit","delete"]}
})
#set ($options = {
'className': 'TaskManager.TaskManagerClass',
'resultPage': 'TaskManager.TaskManagerLiveTableResults',
'translationPrefix': 'taskmanager.livetable.',
'tagCloud': true,
'rowCount': 1000,
'maxPages': 100,
'selectedColumn': 'number',
'defaultOrder': 'asc'
})
#set ($columns = ['number', 'name', 'project', 'progress', 'status', 'severity', 'reporter', 'assignee', 'duedate', '_actions'])
#livetable('taskmanager' $columns $columnsProperties $options)
{{/velocity}}
{{tabs idsToLabels='tabId11=My xwiki-wide tabs, tabId12=My working tabs :)' /}}
(%id="tabId11"%)((({{box cssClass="tabId11div"}}
First tab!
{{/box}}
I can post any content here
)))
(%id="tabId12"%)((({{box cssClass="tabId12div"}}
Second tab!
{{/box}}
And here too
)))
Source: https://habr.com/ru/post/279101/