I'm having a bit of a problem with this.
Basically, I want to have a dataobject, "Trainer". Each trainer has their own page on the site. The trainers must be able to log in, so I thought to extend the Member class.
When the Trainer record is created, a Page would be created for the trainer as well. And yet, I can't get it to work. I always get
ERROR [User Error]: Uncaught Exception: Object->__call(): the method 'parent' does not exist on 'TrainerPage'
IN POST /allactive/admin/Data/Trainer/16/EditForm?action_doSave=Save
Line 724 in /var/www/allactive/sapphire/core/Object.php
Can anybody tell me what I've done wrong?
Here's the code for TrainerPage.
<?php
class TrainerPage extends SiteTree{
static $has_one = array(
"Trainer" => "Trainer"
);
}
class TrainerPage_Controller extends Page_Controller{
}
and Trainer:
<?php
class Trainer extends Member{
static $db = array(
"TR_LandlineNumber" => "Varchar(20)",
"TR_MobileNumber" => "Varchar(20)",
"TR_Notes" => "Text"
);
static $has_one = array(
"TR_Area" => "Area",
"TR_Region" => "Region"
);
static $has_many = array(
"Client" => "Client"
);
function getCMSFields() {
$sqlQuery = new SQLQuery(array("ID", "AreaDescription"), "Area");
$AreaMap = $sqlQuery->execute()->map();
$sqlQuery = new SQLQuery(array("ID", "RegionDescription"), "Region");
$RegionMap = $sqlQuery->execute()->map();
$fields = parent::getCMSFields();
$fields->RemoveFieldFromTab( 'Root.Main', "DateFormat");
$fields->RemoveFieldFromTab( 'Root.Main', "TimeFormat");
$fields->RemoveFieldFromTab( 'Root.Main', "TR_AreaID");
$fields->RemoveFieldFromTab( 'Root.Main', "TR_RegionID");
$fields->RemoveFieldFromTab( 'Root.Main', "TR_Notes");
$fields->RemoveFieldFromTab( 'Root.Main', "TR_LandlineNumber");
$fields->RemoveFieldFromTab( 'Root.Main', "TR_MobileNumber");
$fields->addFieldToTab( 'Root.Main', new TextField("TR_LandlineNumber", "Landline Number"));
$fields->addFieldToTab( 'Root.Main', new TextField("TR_MobileNumber", "Mobile Number"));
$fields->addFieldToTab( 'Root.Main', new TextareaField("TR_Notes", "Notes"));
$fields->addFieldToTab( 'Root.Main', new ListboxField("TR_RegionID", "Region", $RegionMap));
$fields->addFieldToTab( 'Root.Main', new ListboxField("TR_AreaID", "Area", $AreaMap));
return $fields;
}
function onBeforeWrite(){
// TODO: check if the page already exists
parent::onBeforeWrite();
$newTrainerPage = new Page();
$newTrainerPage->ClassName = "TrainerPage";
$newTrainerPage->Created = time();
$newTrainerPage->LastEdited = time();
$newTrainerPage->Title = $this->Surname . " " . $this->FirstName;
$newTrainerPage->URLSegment = strtolower($this->Surname . "-" . $this->FirstName);
$newTrainerPage->ShowInMenus = 1;
$newTrainerPage->ShowInSearch = 1;
$newTrainerPage->CanEditType = "Inherit";
$newTrainerPage->CanViewType = "Inherit";
$newTrainerPage->Status = "Published";
$ID = $newTrainerPage->write();
$newTrainerPage->publish("Stage", "Live");
}
}