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.

Customising the CMS /

complex data model


Reply


2 Posts   939 Views

Avatar
jsaade

Community Member, 18 Posts

16 May 2011 at 9:47am

Edited: 17/05/2011 9:27am

Hi,
I have searched the forums for this scenario and I cannot find it, here is my data model:

- User A
   - Project 1
      - Specimen a
      - Specimen b
   - Project 2
      - Specimen a'
      - Specimen b'

Each user has many projects, each project has many specimens.
I am using $has_many and in the getCMSFields, I use HasManyComplexTableField.
My problem is that if you go to the user, you can add/edit the "Projects"
if you click on a project you can only edit the Specimens, you cannot add.
The add button is simply missing.

Translated into code:
Member Object:

<?php
class Member_Object extends DataObject
{
static $db = array (
"UserName"=>"Text",
      "Password"=>"Text"
);
   
static $has_many = array (
'Projects' => 'Projects_Object'
);

public function getCMSFields()
{
      $mng_records = new HasManyComplexTableField(
$this,
'Projects',
'Projects_Object',
array(
'Title' => 'Title',
),
'getCMSFields'
);
       $fields = parent::getCMSFields();

//Main Tab
$fields->addFieldToTab("Root.Main", new UniqueTextField('UserName', 'User Name'));
$fields->addFieldToTab("Root.Main", new TextField('Password',"Password"));
$fields->addFieldToTab("Root.Projects", $mng_records);

return $fields;
}
   

static $summary_fields = array(
'UserName' => 'User Name'
);
}
?>

Projects Object:

<?php
class Projects_Object extends DataObject
{
static $db = array (
"Title"=>"Text",
    "ASTM"=>"Text",
    "Project"=>"Text",
    "Client"=>"Text",
    "Consultant"=>"Text",
    "DateOfTesting"=>"Text",
    "DateOfCasting"=>"Text",
    "AgeOfSpecimen"=>"Text",
    "Structure"=>"Text",
    "Formula"=>"Text",
    "StrengthRequired"=>"Text",
    "Slump"=>"Text",
    "TypeOfCuring"=>"Text",
    "TestedBy"=>"Text",
    "CheckedBy"=>"Text",
    "ClientRepresentative"=>"Text"
);
   
   static $has_many = array (
'Specimens' => 'Specimens_Object'
);
   
static $has_one = array (
'ParentMember' => 'Member_Object'
);
   function getCMSFields() {
    $mng_records = new HasManyComplexTableField(
$this,
'Specimens',
'Specimens_Object',
array(
'SpecimenReference' => 'Specimen Reference',
),
'getCMSFields'
);
    $fields = parent::getCMSFields();

//Main Tab
$fields->addFieldToTab("Root.Main", new TextField( 'Title', 'Title'));
$fields->addFieldToTab("Root.Main", new TextField( 'ASTM', 'ASTM'));
$fields->addFieldToTab("Root.Specimens", $mng_records);
      return $fields;
}
static $summary_fields = array(
'Title' => 'Title'
);
}
?>

Specimens Object:

<?php
class Specimens_Object extends DataObject
{
static $db = array (
    "SpecimenReference"=>"Text",
    "Height"=>"Text",
    "Diameter"=>"Text",
    "Weight"=>"Text",
    "Density"=>"Text",
    "MaxLoad"=>"Text",
    "CompressiveStrength"=>"Text",
"TypicalFracturePatterns"=>"Enum('Type I,Type II,Type III,Type IV,Type V,Type VI')",
);
   
static $has_one = array (
'ParentProject' => 'Projects_Object'
);
   function getCMSFields() {
    $category = new DropdownField('TypicalFracturePatterns','Typical Fracture Patterns',singleton('Specimens_Object')->dbObject('TypicalFracturePatterns')->enumValues());
    $fields = parent::getCMSFields();

//Main Tab
$fields->addFieldToTab("Root.Main", new TextField( 'SpecimenReference', 'Specimen Reference'));
      $fields->addFieldToTab("Root.Main", new TextField( 'Height', 'Height'));
      $fields->addFieldToTab("Root.Main", new TextField( 'Diameter', 'Diameter'));
      $fields->addFieldToTab("Root.Main", new TextField( 'Weight', 'Weight'));
      $fields->addFieldToTab("Root.Main", new TextField( 'Density', 'Density'));
      $fields->addFieldToTab("Root.Main", new TextField( 'MaxLoad', 'Max Load'));
$fields->addFieldToTab("Root.Main",$category);
      return $fields;

static $summary_fields = array(
'SpecimenReference' => 'Specimen Reference'
);
}
?>

So I can add a member, the go to that member, go to the projects tab, add a project but I cannot add specimens although
according to my login it should work.

What Am I doing wrong?

Thank you.

Avatar
jsaade

Community Member, 18 Posts

17 May 2011 at 9:25am

I am beginning to think it is a bug in nested has_many relations.
it definitely relates to showing the nested relation.