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
    }
  }
}

Plugin

 
Ihre aktuelle Seitenauswahl:  
>>>