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, simon_w

Policy agreement


Go to End
Reply

10 Posts   865 Views

Avatar
cumquat

1 May 2012 at 10:16pm Community Member, 198 Posts

Hi there,

I have a requirement for members of a site to annually agree a confidentiality policy as well as a few others. The thought is for this process to be come electronic and part of the website. Currently team members login to a team site where information is stored what i want to do is to come up with a way of them agreeing a policy by ticking a box and then re entering their password this will then log the tick box and the date it was ticked. Has anyone done something similar and how do you get a logged in member to have to log in again?

Any help or pointers please.

Mick

Avatar
swaiba

1 May 2012 at 11:51pm Forum Moderator, 1796 Posts

I would suggest you have a normal form, with a validator that using the checkpassword (http://api.silverstripe.org/2.4/sapphire/security/Member.html#methodcheckPassword) to validate the it is the memeber and then in the form action can updat the relelvant boolean field on the member/decorated member object

Avatar
cumquat

2 May 2012 at 1:07am Community Member, 198 Posts

Nice that seems like a nice way, will give that a go.

Cheers

Mick

Avatar
cumquat

2 May 2012 at 8:36am Community Member, 198 Posts

Ok its late and the brain isnt working very well, i have my form but i have no idea how to call the checkpassword validator or function. below is my form code, anyone able to give me some direction please?

Mick.

function PolicyForm() {
   
   Requirements::javascript(THIRDPARTY_DIR .'/jquery/jquery.js');
   Requirements::javascript(THIRDPARTY_DIR .'/jquery-ui/jquery.ui.core.js');
   Requirements::javascript(THIRDPARTY_DIR .'/jquery-ui/jquery.ui.datepicker.js');
   
   
      $fields = new FieldSet(
         
         new DatePickerField('DateTaken', 'Date Agreed'),
         new TextField('password'),
         new HiddenField('SkillID','', 24),
         new HiddenField('MemberID','', 1)
         );
      
      $validator = new RequiredFields(
'password'
);
      
      $actions = new FieldSet(
         new FormAction('doPolicyinfo', 'Submit')
      );
      
      return new Form($this, 'PolicyForm', $fields, $actions, $validator);
      
      }
         
   function doPolicyinfo($data, $form) {
      $Course = new Course();
      $form->saveInto($Course);
      $Course->write();
      
      
      Director::redirectBack();
      }

Avatar
swaiba

2 May 2012 at 7:43pm Forum Moderator, 1796 Posts

change

$validator = new RequiredFields( 'password' );

for

$validator = new PolicyForm_Validator( 'password');

and add...

class PolicyForm_Validator extends RequiredFields {
   function php($data) {
      $bRet = parent::php($data);

      $doMember = Member::currentUser();

      if (!$doMember->checkPassword($data['password'])) {      
         $this->validationError('password','wrong password',"required");
         $bRet = false;
      }
      
      return $bRet;
   }
}

Avatar
cumquat

3 May 2012 at 12:06am Community Member, 198 Posts

Hi there,

Many thanks for the code. I have had a play but im guessing im missing something fundamental, although the form saves the data it does it even if the password entered is incorrect. I have pasted my full code below.

<?php
class Policy extends Page {

   static $db = array(
          
   );
   static $has_many = array(
   
   );

function getCMSFields() {
      $fields = parent::getCMSFields();
      return $fields;
   }
}
class Policy_Controller extends Page_Controller {

   public function init() {
      parent::init();
         Requirements::css('sar/css/sar.css');
   }

   
   function PolicyForm() {
   
   Requirements::javascript(THIRDPARTY_DIR .'/jquery/jquery.js');
   Requirements::javascript(THIRDPARTY_DIR .'/jquery-ui/jquery.ui.core.js');
   Requirements::javascript(THIRDPARTY_DIR .'/jquery-ui/jquery.ui.datepicker.js');
   
   
      $fields = new FieldSet(
         
         new DatePickerField('DateTaken', 'Date Agreed'),
         new TextField('password'),
         new HiddenField('SkillID','', 24),
         new HiddenField('MemberID','', 1)
         );
      
      $validator = new PolicyForm_Validator(
'password'
);
      
      $actions = new FieldSet(
         new FormAction('doPolicyinfo', 'Submit')
      );
      
      return new Form($this, 'PolicyForm', $fields, $actions, $validator);
      
      }
         
   function doPolicyinfo($data, $form) {
      $Course = new Course();
      $form->saveInto($Course);
      $Course->write();
      Director::redirectBack();
      }

}

class PolicyForm_Validator extends RequiredFields {
function php($data) {
$bRet = parent::php($data);

$doMember = Member::currentUser();

if (!$doMember->checkPassword($data['password'])) {
$this->validationError('password','wrong password',"required");
$bRet = false;
}

return $bRet;
}
}

?>

The template page.

iv class="twoCol">

<% include Sidebar %>

<div id="content" class="typography">
      
         $PolicyForm
      
      
      
      
   </div> <!-- /Content -->

<div class="clear">&nbsp;</div>

</div><!-- /Two Column Layout -->

regards Mick

Avatar
swaiba

3 May 2012 at 12:37am Forum Moderator, 1796 Posts

can you use log statements / debugger to check if the validators php function is being called?

Avatar
cumquat

3 May 2012 at 1:28am Community Member, 198 Posts

Ok the function is being called, i've placed

die($bRet);


both before the

if (!$doMember->checkPassword($data['password'])) {
$this->validationError('password','wrong password',"required");
$bRet = false;
}

and after and it always responds with a 1 whether the password is correct or false.

Go to Top