FE-User sollen tt_news-Beiträge erstellen
Ein User muss sich erst mal registrieren und dann anmelden um einen Beitrag erstellen zu können. Da die Registrierung außer einer email-Verifikation nicht weiter eingeschränkt ist, könnte die Option News-Beiträge zu erstellen sicher auch zu SPAM und Code-Injection benutzt werden.
Damit kein Missbrauch möglich wird, werden die Beiträge erst mal versteckt gespeichert und ein Admin per Mail benachrichtigt, dass er einen neuer Beitrag freigeschalten muss.
Weitere Besonderheiten:
jede News soll einer von sechs Themenkategorien zugeordnet sein. Außerdem gibt es Redaktionskategorien: eine für News, die über das FE angelegt werden und eine für News von BE-Redakteuren.
Das ist die Vorgabe, die mit folgender Konfiguration mit der formhandler Extrension gelöst wurde:
HTML
mastertemplate.html
erweitert um:
<!-- ###master_category### --> ###error_category### <div class="type-text"> <label for="category" ###is_error_category###>###LLL:category### ###required_category###</label> <select id="category" name="###formValuesPrefix###[category]" class="select"> <option value="">---</option> <option value="3" ###selected_category_3###>###LLL:cat_1###</option> <option value="4" ###selected_category_4###>###LLL:cat_2###</option> <option value="5" ###selected_category_5###>###LLL:cat_3###</option> <option value="6" ###selected_category_6###>###LLL:cat_4###</option> <option value="7" ###selected_category_7###>###LLL:cat_5###</option> <option value="8" ###selected_category_8###>###LLL:cat_6###</option> </select> ###validate_category### </div> <!-- ###master_category### --> <!-- ###master_checkbox### --> ###error_###fieldname###### <div class="type-check"> <input type="checkbox" id="###fieldname###" name="###formValuesPrefix###[###fieldname###]" value="1" ###checked_###fieldname###_1### /> <label for="###fieldname###" ###is_error_###fieldname######>###LLL:###fieldname###### ###required_###fieldname###### </div> <!-- ###master_checkbox### -->
Die Values entsprechen den UIds der Kategoriendatensätze.
leider habe ich noch keine Möglichkeit gefunden diese Werte einfach aus der Datenbank auszulesen.
step-1.html
<!-- ###TEMPLATE_FORM1### begin-->
###master_multipart-form-start_globalo_news-form###
###master_section-start###
###master_input_title###
###master_textarea_short###
###master_textarea_bodytext###
###FORM_RTE_ENTRY###
###master_section-end###
###master_section-start###
###master_category###
###master_input_author###
###master_input_keywords### Maximal 4 Begriffe kommagetrennt eingeben
###master_section-end###
###master_section-start###
###master_file_image###
###master_input_imagecaption###
###master_section-end###
###master_section-start###
<p class="annotation">Hinweise an den System-Administrator:</p>
###master_textarea_annotation###
<br />
###master_checkbox_agb###
<br />
###master_submit###
###master_section-end###
###master_form-end###
<!-- ###TEMPLATE_FORM1### end -->
<!-- ###TEMPLATE_SUBMITTEDOK### begin -->
Vielen Dank für ihren Beitrag.<br>
Wenn alles überprüft wurde wird ihr Beitrag veröffentlicht.
<!-- ###TEMPLATE_SUBMITTEDOK### end -->
<!-- ###TEMPLATE_EMAIL_ADMIN_PLAIN### begin -->
Eine neue News mit dem Titel "###value_title###" wurde eingetragen. Bitte überprüfen und frei schalten.
zusätzliche Anmerkungen:
###value_annotation###
<!-- ###TEMPLATE_EMAIL_ADMIN_PLAIN### end -->
<!-- ###TEMPLATE_EMAIL_ADMIN_HTML### begin -->
<p>Eine neue News mit dem Titel "###value_title###" wurde eingetragen. Bitte überprüfen und frei schalten.</p>
<p>zusätzliche Anmerkungen:</p>
<div style="border:2px solid #800; padding:10px;">###value_annotation###</div>
<!-- ###TEMPLATE_EMAIL_ADMIN_HTML### end -->
Typoscript
nach
includeLibs.rte = fileadmin/formhandler/scripts/rte.php
plugin.Tx_Formhandler.settings.predef.default.finishers.1 >
plugin.Tx_Formhandler.settings.predef.default.finishers.2 >
plugin.Tx_Formhandler.settings {
additionalIncludePaths = fileadmin/templates/scripts
masterTemplateFile = fileadmin/formhandler/html/mastertemplate.html
langFile = fileadmin/formhandler/lang/lang.xml
cssFile = fileadmin/formhandler/css/formhandler.css
jsFile = fileadmin/formhandler/js/formhandler.js
#debug = 1
requiredSign = *
// attachments:
files.uploadFolder = uploads/tx_ttnews/
// images:
files {
uploadFolder = uploads/pics/
search = ä,ö,ü,ß,Ä,Ö,Ü
replace = ae,oe,ue,ss,Ae,Oe,Ue
}
validators {
1 {
class = Validator_Default
#disable = 1
config.fieldConf {
title.errorCheck.1 = required
bodytext.errorCheck.1 = required
author.errorCheck.1 = required
image.errorCheck {
1 = fileAllowedTypes
1.allowedTypes = jpg,jpeg,png,gif,tiff
2 = fileMaxCount
2.maxCount = 1
3 = fileMaxSize
# 5 MB
3.maxSize = 5242880
}
agb.errorCheck.1 = required
}
}
1.config {
fieldConf {
}
}
}
predef.default.finishers {
#disable = 1
1 >
1.class = Finisher_DB
1.config {
table = tt_news
key = uid
fields {
#<db_field>.mapping = <form_field>
title.mapping = title
short.mapping = short
bodytext.mapping = bodytext
author.mapping = author
keywords.mapping = keywords
image.mapping = image
imagecaption.mapping = imagecaption
# es werden zwei Kategorien eingetragen sein:
category.postProcessing = TEXT
category.postProcessing.value = 2
pid.postProcessing = TEXT
pid.postProcessing.value = 433
hidden.postProcessing = TEXT
hidden.postProcessing.value = 1
tstamp.special = sub_tstamp
crdate.special = sub_tstamp
datetime.special = sub_tstamp
}
}
2.class = Finisher_DB
2.config {
table = tt_news_cat_mm
fields {
uid_local.special = inserted_uid
uid_local.special.table = tt_news
uid_foreign.postProcessing = TEXT
# 10 = Kategorie uid - FE user erstellte news
uid_foreign.postProcessing.value = 10
sorting.postProcessing = TEXT
# 1 = erste eingetragene kategorie
sorting.postProcessing.value = 1
}
}
3.class = Finisher_DB
3.config {
table = tt_news_cat_mm
fields {
uid_local.special = inserted_uid
uid_local.special.table = tt_news
# Kategorie aus dem Formular
uid_foreign.mapping = category
sorting.postProcessing = TEXT
# 2 = zweite eingetragene kategorie
sorting.postProcessing.value = 2
}
}
4.class = Finisher_Mail
4.config {
admin {
subject = TEXT
subject.data = LLL:fileadmin/formhandler/lang/lang.xml:email_admin_subject
sender_email = website@example.com
attachment =
#attachment = image
}
# user bekommt keine Mail
user >
#user {
# to_email = email
# subject = TEXT
# subject.data = LLL:fileadmin/formhandler/lang/lang.xml:email_user_subject
# sender_email = email@example.tld
#}
}
5.class = Finisher_SubmittedOK
5.config {
returns = 1
}
}
}

