Request for new myxwiki "Ehrenfelder Zipfelmützen e.V."

  • description: I want to create a wiki for our kindergarten which is organized by the parenst as a non-profit organisation

  • owner name: Ehrenfelder Zipfelmutzen

  • wiki name: Zipfelmuetzen

You can access your new wiki on https://zipfelmuetzen.myxwiki.org.

Enjoy !

1 Like

Is it possible that an Admin can create a scheduled job with the following groovy script?

import java.util.Calendar

// ----------------------------------------------------
// Parameter: bitte an Deine Umgebung anpassen
// ----------------------------------------------------

// Voll qualifizierter Klassenname Deiner Application
// → “SpaceName.ClassName” genau so, wie im Klassen-Editor angezeigt
final String CLASS_NAME = “DeinSpace.MassnahmenplanClass”

// Wert in staticList2, der bedeutet: “Erinnerung wurde bereits verschickt”
final String REMINDER_SENT_VALUE = “REMINDER_SENT”

// ----------------------------------------------------
// Logger
// ----------------------------------------------------
def log = services.logging.getLogger(“MassnahmenplanReminderJob”)

// ----------------------------------------------------
// 1) Heutigen Tag bestimmen [heute 00:00; morgen 00:00)
// ----------------------------------------------------
Calendar cal = Calendar.getInstance()
cal.set(Calendar.HOUR_OF_DAY, 0)
cal.set(Calendar.MINUTE, 0)
cal.set(Calendar.SECOND, 0)
cal.set(Calendar.MILLISECOND, 0)
Date startOfDay = cal.getTime()
cal.add(Calendar.DATE, 1)
Date endOfDay = cal.getTime()

// ----------------------------------------------------
// 2) Alle Maßnahmen mit Zieltermin = heute,
// bei denen staticList2 NICHT auf “REMINDER_SENT” steht
// ----------------------------------------------------

// ACHTUNG: CLASS_NAME muss hier als Literal eingetragen werden
// Beispiel nach Anpassung: from doc.object(Zipfelmuetzen.MassnahmenplanClass) obj
def query = services.query.xwql(
“from doc.object(” + CLASS_NAME + ") obj " +
"where obj.date1 >= :start and obj.date1 < :end " +
“and (obj.staticList2 is null or obj.staticList2 <> :1)”
)
.bindValue(“start”, startOfDay)
.bindValue(“end”, endOfDay)
.bindValue(“reminderValue”, REMINDER_SENT_VALUE)

List docNames = query.execute()

log.info(“MassnahmenplanReminderJob: found ${docNames.size()} due items for today”)

// ----------------------------------------------------
// 3) Über alle gefundenen Maßnahmen iterieren
// ----------------------------------------------------
docNames.each { docName →
def doc = xwiki.getDocument(docName)
def obj = doc.getObject(CLASS_NAME)

if (obj == null) {
    log.warn("No MassnahmenplanClass object on doc ${docName}")
    return
}

// 3a) Zieltermin (optional für Logging)
def dueDate = obj.getProperty("date1")?.value

// 3b) Zuständigen User ermitteln (Feld user1)
def userRef = obj.getProperty("user1")?.value   // meist ein DocumentReference oder String
if (!userRef) {
    log.warn("No user1 set on ${docName}")
    return
}

def userDoc = xwiki.getDocument(userRef)
def userObj = userDoc.getObject("XWiki.XWikiUsers")
def to = userObj?.getProperty("email")?.value

if (!to) {
    log.warn("User ${userRef} has no email")
    return
}

// 3c) Betreff und Nachrichtentext
String subject = "Erinnerung: Maßnahme '${doc.displayTitle}' ist heute fällig"
String body = """\

Guten Tag,

dies ist eine automatische Erinnerung aus dem Maßnahmenplan.

Die Maßnahme “${doc.displayTitle}” hat den Zieltermin ${dueDate} und ist am heutigen Tag fällig.

Direkter Link zur Maßnahme:
${doc.getExternalURL(“view”)}

Beste Grüße
Ihr Maßnahmenplan
“”"

// 3d) Mail über Mail Sender API versenden
def message = services.mail.sender.createMessage(null, to, subject)
message.addPart("text/plain", body)

def result = services.mail.sender.send(message)

if (result?.statusResult?.getAllErrors()?.hasNext()) {
    log.error("Error sending reminder mail for ${docName}")
} else {
    log.info("Reminder mail sent to ${to} for ${docName}")
N
    // 3e) Reminder-Flag setzen, damit nicht mehrfach erinnert wird
    obj.set("staticList2", 1)
    doc.save("Reminder sent by MassnahmenplanReminderJob")
}

}