/**
  * Populate the history of entries for the form field if the storage module handles history.
  * @param I2CE_FormField $form_field
  * @return boolean
  */
 public function FF_populateHistory($form_field)
 {
     if ($form_field->getName() == 'parent') {
         $sth = $this->db->prepare("SELECT last_modified AS date,0 AS who,0 AS change_type, CONCAT(parent_form,'|',parent_id) as value FROM record WHERE id = ? ", array("integer"), MDB2_PREPARE_RESULT);
         if (I2CE::pearError($sth, "Error preparing to populate history:")) {
             return false;
         }
         $result = $sth->execute(array($form_field->getContainer()->getId()));
     } else {
         if (!($formObj = $form_field->getContainer()) instanceof I2CE_Form) {
             return false;
         }
         $this->setupForm($formObj);
         $sth = $this->db->prepare("SELECT date,who,change_type," . $form_field->getTypeString() . "_value as value FROM entry WHERE record = ? AND form_field = ? ORDER BY date", array("integer", "integer"), MDB2_PREPARE_RESULT);
         if (I2CE::pearError($sth, "Error preparing to populate history:")) {
             return false;
         }
         $result = $sth->execute(array($form_field->getContainer()->getId(), $form_field->getStaticAttribute("DBEntry_form_field_id")));
         if (I2CE::pearError($result, "Error executing populate history: ")) {
             return false;
         }
     }
     $has_been_set = false;
     while ($data = $result->fetchRow()) {
         if (!$has_been_set && !isset($data->value)) {
             continue;
         }
         $has_been_set = true;
         $entry = new I2CE_Entry(I2CE_Date::fromDB($data->date), $data->who, $data->change_type, $form_field->getFromDB($data->value));
         $form_field->addHistory($entry);
     }
     $result->free();
     $sth->free();
     return true;
 }