/**
  * @param Form $form
  *
  * @return string
  */
 public function generateFormID($form)
 {
     if ($id = $form->getHTMLID()) {
         return Convert::raw2htmlid($id);
     }
     $reflection = new ReflectionClass($form);
     $shortName = str_replace(array('.', '/'), '', $form->getName());
     return Convert::raw2htmlid($reflection->getShortName() . '_' . $shortName);
 }
 /**
  * Gets the schema for this form as a nested array.
  *
  * @param Form $form
  * @return array
  */
 public function getSchema(Form $form)
 {
     $schema = ['name' => $form->getName(), 'id' => $form->FormName(), 'action' => $form->FormAction(), 'method' => $form->FormMethod(), 'attributes' => $form->getAttributes(), 'data' => [], 'fields' => [], 'actions' => []];
     /** @var FormField $action */
     foreach ($form->Actions() as $action) {
         $schema['actions'][] = $action->getSchemaData();
     }
     /** @var FormField $field */
     foreach ($form->Fields() as $field) {
         $schema['fields'][] = $field->getSchemaData();
     }
     return $schema;
 }
 /**
  * Get link to schema url for a given form
  *
  * @param Form $form
  * @return string
  */
 protected function getSchemaLinkForForm(Form $form)
 {
     $parts = [$this->Link('schema'), $form->getName()];
     if (($record = $form->getRecord()) && $record->isInDB()) {
         $parts[] = $record->ID;
     } elseif (($data = $form->getData()) && !empty($data['ID'])) {
         $parts[] = $data['ID'];
     }
     return Controller::join_links($parts);
 }