public static function getOptions($owner, $name, $options)
 {
     if (!is_array($options)) {
         $type = $options;
         $options = array();
         $options['assoc_type'] = $type;
     }
     if (!isset($options['assoc_type'])) {
         throw new SException('Type of relationship is required.');
     }
     if (!isset($options['class_name'])) {
         if ($options['assoc_type'] == 'has_many' || $options['assoc_type'] == 'many_to_many') {
             $options['class_name'] = SInflection::singularize($name);
         } else {
             $options['class_name'] = $name;
         }
     }
     $dest = $options['class_name'];
     // we instanciate the dest class without associations to avoid an infinite loop
     if (!class_exists($dest)) {
         SDependencies::requireDependency('models', $dest, get_class($owner));
     }
     $destInstance = new $dest(Null, True);
     $options['table_name'] = $destInstance->tableName;
     $options['primary_key'] = $destInstance->identityField;
     $assocMethod = SInflection::camelize($options['assoc_type']);
     return self::$assocMethod($owner, $name, $dest, $options);
 }
 protected function modelExists($className)
 {
     if (class_exists($className)) {
         return true;
     } else {
         try {
             SDependencies::requireDependency('models', $className, get_class($this->record));
         } catch (Exception $e) {
             return false;
         }
     }
     return true;
 }
 private function requireDependencies()
 {
     SLocale::loadStrings(APP_DIR . '/i18n/' . SDependencies::subDirectory(get_class($this)));
     SUrlRewriter::initialize($this->request);
     foreach ($this->helpers as $k => $helper) {
         $this->helpers[$k] = $helper . 'Helper';
     }
     SDependencies::requireDependencies('models', $this->models, get_class($this));
     SDependencies::requireDependencies('helpers', $this->helpers, get_class($this));
 }