Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba

SOLVED Trouble with $allowed_actions in SS3.1


Go to End
Reply


3 Posts   710 Views

Avatar
Harley

Community Member, 156 Posts

28 October 2013 at 2:02pm

Hi there,

I've done this a ton of times and never had the problem before although I have updated to SS3.1. I have a home page type with a contact form within it. When I submit the form I am getting a blank page. Here is my code

<?php
class HomePage extends SiteTree {

	private static $db = array(
		'Mailto' => 'Varchar(100)',
		'Telephone' => 'Varchar(100)',
		'SubmitText' => 'HTMLText',
		"AddToFooterMenu" => "Boolean",
		"MissionStatement" => "HTMLText",
		"ContactContent" => "HTMLText"
	);

	private static $has_one = array(
		"CVPDF" => "File"
	);

	private static $defaults = array(
		'ContactContent' => '<p>If you would like to get in touch please leave your details and we will get back to you.</p><p>Alternatively you can call me on +44 (0) xxxxxxxxx</p><p>I look forward to hearing from you.</p>',
		'SubmitText' => 'Thank you for your email! You will recieve a reply shortly.'

	);

	function getSettingsFields() {
		$fields = parent::getSettingsFields();
		$fields->addFieldToTab("Root.Settings",
			new CheckboxField(
				'AddToFooterMenu',
				_t('Page.ADDTOFOOTERMENU', 'Add this page to the footer menu')
			)
		);
		return $fields;
	}

	public function getCMSFields(){
		$fields = parent::getCMSFields();

		$fields->addFieldToTab("Root.Contact.OnSubmission", new TextField('Mailto', 'Email submissions to'));
		$fields->addFieldToTab("Root.Contact.Telephone", new TextField('Telephone', 'Telephone number'));
		$fields->addFieldToTab("Root.Contact.OnSubmission", new HTMLEditorField('SubmitText', 'Text on Submission'));

		$fields->removeFieldFromTab("Root.Main", "Content");
		$fields->insertBefore(new Tab("ItemContentTop", 'Item content top'), 'Metadata');
        $fields->addFieldToTab("Root.Main.ItemContentTop", new UploadField("CVPDF","Upload a CV"));
		$fields->addFieldToTab("Root.Main.ItemContentTop", new HTMLEditorField("MissionStatement", "Mission statement"));
		$fields->addFieldToTab("Root.Main.ItemContentTop", new HTMLEditorField("ContactContent", "Contact content"));

		return $fields;
	}
}

class HomePage_Controller extends PageController {

	static $allowed_actions = array(
		"ContactForm" => true,
		"SendContactForm" => true,
		"Success" => true
	);

	public function init() {
		parent::init();

		// ******************** concatonate all javascript and css ******************** //

		$theme_folder = sprintf('themes/%s', SSViewer::current_theme());

		$js_files = array(
			sprintf('%s/js/jquery-1.10.2.min.js', $theme_folder),
			sprintf('%s/js/jquery-ui-1.10.3.custom.min.js', $theme_folder),
			sprintf('%s/js/helper.js', $theme_folder),
			sprintf('%s/js/common.js', $theme_folder),
		);

		$css_files = array(
			sprintf('%s/css/core.css', $theme_folder),
		);
		foreach($js_files as $js) {
			Requirements::javascript($js);
		}

		foreach($css_files as $css) {
			Requirements::css($css);
		}

		Requirements::combine_files("js.js", $js_files);
		Requirements::insertHeadTags("<!--[if lt IE 9]><script type='text/javascript' src='" . $theme_folder . "/js/selectivizr.js'></script><![endif]-->");

		Requirements::combine_files("css.css", $css_files);
		Requirements::css($theme_folder.'css/print.css', 'print');
		Requirements::insertHeadTags("<!--[if lt IE 9]><style type='text/css'>@import url(" . $theme_folder . "/css/ie.css);</style><![endif]-->");
		Requirements::process_combined_files();
	}

	function footerMenu() {
		$whereStatement = "AddToFooterMenu = 1";
		return DataObject::get("Page", $whereStatement);
	}

	public function ContactForm() {

      	// create fields
	    $fields = new FieldList(
		    new TextField('Name', 'Name'),
			new EmailField('Email', 'Email'),
			new TextField('Company', 'Company'),
			new TextareaField(
				$name = "Comments",
				$title = "Message",
				$value = ""
			)
		);

	    // create action
	    $actions = new FieldList(
	    	new FormAction('SendContactForm', 'Send')
	    );
		// required fields
		$validator = new RequiredFields('Name', 'Email', 'Comments');

		// return the form
	    return new Form($this, 'ContactForm', $fields, $actions, $validator);
	}

	public function SendContactForm($data) {

	 	// set data
		$From = $data['Email'];
		$To = $this->Mailto;
		$Subject = "Website Contact message";
		$email = new Email($From, $To, $Subject);
		// set template
		$email->setTemplate('ContactEmail');
		// populate template
		$email->populateTemplate($data);
		// send mail
		$email->send();
	  	// return to submitted message
		Director::redirect(Director::baseURL(). $this->URLSegment . "/?success=1");
	}

	public function Success(){
		return isset($_REQUEST['success']) && $_REQUEST['success'] == "1";
	}
}

Can anyone spot where it is going wrong?

Cheers

Avatar
Bereusei

Community Member, 94 Posts

30 October 2013 at 12:19am

Try this: instead of

static $allowed_actions = array( 
      "ContactForm" => true, 
      "SendContactForm" => true, 
      "Success" => true 
   );

use this:

private static $allowed_actions = array(
     'ContactForm'
);

SS3 is a little bit pedantic with "private", "public" things.

Avatar
Harley

Community Member, 156 Posts

30 October 2013 at 3:42pm

I cracked it!

The culprit was in fact the redirect. Instead of

Director::redirect(Director::baseURL(). $this->URLSegment . "/?success=1"); 

I needed to have

$this->redirect($this->URLSegment . "/?success=1");

Thanks for the help anyway!