Jump to content
ngrmm

set checkbox value inside a table

Recommended Posts

I have a page with a table. Each table row has a page-reference field and a checkbox.
The Page sends emails to all users (page-refrence->email-field) and change the value of the checkbox in a row to 1.

It works with this:

<?php

	// event ID fron url query
	$eventID = $input->get('eventID','int');

	// get event-page
	$event = $pages->get($eventID);

	// config
	$fromEmail = $event->event_mail_from;
	$fromName = $event->event_mail_from_name;
	$emailSubject = $event->event_subject;

	// email html body
	ob_start();
	include('./_inc/emailbody.inc');
	$emailBody = ob_get_clean();

	// make event-page editable
	$event->of(false); 

	// loop through table and send out emails
	foreach($event->event_clients_list as $event_table_row) {
		
		// get client page
		$clientPage = $event_table_row->client_name;
      
      	// get client email
		$clientEmail = $clientPage->email;
		
		// if client isn't invited yet (checkbox not checked)
		if($event_table_row->client_invited == '') {

			// send email
			$m = new WireMail();
			$m->to($clientEmail);
			$m->from($fromEmail, $fromName);
			$m->subject($emailSubject);
			$m->bodyHTML($emailBody);
			$m->send();

			// mark client as invited
			$event_table_row->client_invited = 1;
			$event->save('event_clients_list');	
		}
	}
?>

But i have to use a variable in my emailbody.inc which i'm able to get in the table-loop.
So i do the including of the body inside my loop. But this doesn't work anymore. Page sends out the emails but is unable to change the value of the checkbox.
I get no errors!
I'm using ProTable

<?php

	// event ID fron url query
	$eventID = $input->get('eventID','int');

	// get event-page
	$event = $pages->get($eventID);

	// config
	$fromEmail = $event->event_mail_from;
	$fromName = $event->event_mail_from_name;
	$emailSubject = $event->event_subject;

	// loop through table and send out emails
	foreach($event->event_clients_list as $event_table_row) {
		
		// get client page
		$clientPage = $event_table_row->client_name;
      
      	// get client email
		$clientEmail = $clientPage->email;

		// email html body
		ob_start();
		include('./_inc/emailbody.inc');
		$emailBody = ob_get_clean();

		// make event-page editable
		$event->of(false); 
  
		// if client isn't invited yet (checkbox not checked)
		if($event_table_row->client_invited == '') {

			// send email
			$m = new WireMail();
			$m->to($clientEmail);
			$m->from($fromEmail, $fromName);
			$m->subject($emailSubject);
			$m->bodyHTML($emailBody);
			$m->send();

			// mark client as invited
			$event_table_row->client_invited = 1;
			$event->save('event_clients_list');	
		}
	}
?>

 

Share this post


Link to post
Share on other sites

Got it working by using two loops. One for sending out emails and the other for changing the value.
 

	
	
	// loop through table and send out emails
	foreach($event->event_clients_list as $event_table_row) {
		
		// get client page
		$clientPage = $event_table_row->client_name;
      
      	// get client email
		$clientEmail = $clientPage->email;

		// email html body
		ob_start();
		include('./_inc/emailbody.inc');
		$emailBody = ob_get_clean();

		if($event_table_row->client_invited == '') {

			// send email
			$m = new WireMail();
			$m->to($clientEmail);
			$m->from($fromEmail, $fromName);
			$m->subject($emailSubject);
			$m->bodyHTML($emailBody);
			$m->send();		

		}
	}

	// make event-page editable
	$event->of(false); 
	
	// loop through table and change value
	foreach($event->event_clients_list as $event_table_row) {

		// if client isn't invited yet (checkbox not checked)
		if($event_table_row->client_invited == '') {
			$event_table_row->client_invited = 1;
			$event->save('event_clients_list');	
		}
		
	}

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By SwimToWin
      As an admin I want to use the API to ask if a page is published - using the $page->isPublished() method - so that I know it's published - as opposed to unpublished or trashed pages. That includes hidden pages.
      This method will correspond to Settings -> Status when editing pages:

      (Published is also mentioned explicitly where the edit page says "Published on [?]".)
      I would expect the API - and specifically the $page->hasStatus() method - to ask if a page has status published.
      But as I can see, it's only possible to ask for exceptions such as isUnpublished() and isHidden().
      <?php // This fails with "Fatal Error: Uncaught Error: Undefined class constant 'statusPublished'" if($page->hasStatus(Page::statusPublished)) { echo 1; } ?> PS: My current use case is that I want to count number of published vs. unpublished pages. I can only do that by getting all pages (include=all), then subtract any unpublished pages.
    • By ngrmm
      My clients wants a modal to show up on every page. But when a user clicks inside the modal -> a session-cookie is set and the modal gets a class.
      // user clicks on modal button $('.modal_button').click(function(){ // 1. set PW session cookie // 2. toggle class $('.modal').toggleClass('off'); }); I know how to set a cookie on page-load via PW-API. But the click on the modal button does not force a page-load. So i have to set the cookie through javascript. Is there a way to do that?
    • By VeiJari
      Hello,
      I'm trying to create a page via api and populate values to it. I can populate everything except user pages to a page reference array.
      Code: 
      $dataUsers = $data->project->users; foreach($dataUsers as $dataUser) { $newProject->projectUsers->add(wire()->pages->find('template=user, id=' . $dataUser->id)); } I'm receiving my data via JSON.
      Is there something I'm missing?
      Thanks for help
    • By VeiJari
      Hi, this is the first we are trying to make a page that has only one type of user that has access to every page. 
      The other users should only have a given access to specific pages, not to the whole template.
      My structure
      -Field -Organisation -Project -Report I want that the "measurer" role only has access to "project x" and it's children, but no view access to every project, organisation or field. I've tried to do this with https://modules.processwire.com/modules/page-edit-per-user/ but it still needs a view access to the whole tree to see the "project x" page. Or is there something I haven't figured out?
      Maybe I have to make it via the API: a select field in the "organisation" template where the admins could add the users and then I use hook to update the privileges?
      Have you done something like this and how did you accomplish it?
      Any help would be appreciated.
       
    • By cosmicsafari
      Hi all,
      Before I go potentially wasting time trying to achieve the impossible.
      Can anyone confirm if its possible to have a Page Reference field on a modules config page?
      I'm wanting to essentially just output a list of select able pages based on the a given selector (likely by template at this stage), wherein the select is the pages that the module should apply to etc. I was thinking a simple checkbox list would suffice is asmSelect isn't available.
      Essentially have it display the same way a Page Reference field would display on a template, where you can easily select a bunch of them.
      public function getInputfields() { $inputfields = parent::getInputfields(); $f = $this->modules->get('InputfieldPage'); $f->attr('name', 'testSelect'); $f->setAttribute('multiple', 'checkboxes'); $f->setAttribute('findPagesSelector', 'template=development'); $f->label = 'Test'; $inputfields->add($f); return $inputfields; } Figured something akin to the above would work but can't seem to get rid of this warning on the modules config screen though.

×
×
  • Create New...