public function executeEdit() { /** @var \myUser $sfUser */ $sfUser = sfContext::getInstance()->getUser(); $userId = $sfUser->getSubscriberId(); $schemaObj = $this->getCurrentSchema(); $CurrentCulture = $sfUser->getCulture(); //FIXME: If the user is an admin, set the available languages to all of the schema languages //FIXME: if the user has no languages set, silently set their language to the default (?) if ($userId) { $c = new Criteria(); $c->add(SchemaHasUserPeer::USER_ID, $userId); $c->add(SchemaHasUserPeer::SCHEMA_ID, $schemaObj->getId()); $schemaUser = SchemaHasUserPeer::doSelectOne($c); if ($sfUser->hasObjectCredential($schemaObj->getId(), 'schema', array(0 => array(0 => 'administrator', 2 => 'schemaadmin')))) { $UserLanguages = $schemaObj->getLanguages(); $DefaultLanguage = $schemaObj->getLanguage(); } else { if ($schemaUser) { $UserLanguages = $schemaUser->getLanguages(); $DefaultLanguage = $schemaUser->getDefaultLanguage(); } else { //set the languages from the schema $UserLanguages = $schemaObj->getLanguages(); $DefaultLanguage = $schemaObj->getLanguage(); } } if (is_array($UserLanguages) && !in_array($CurrentCulture, $UserLanguages)) { //save the current culture $UserCulture = $sfUser->getCulture(); $this->getUser()->setAttribute("UserCulture", $UserCulture); //reset the current culture for edit $sfUser->setCulture($DefaultLanguage); $this->getUser()->setAttribute("CurrentLanguage", $DefaultLanguage); $culture = new sfCultureInfo($this->getUser()->getCulture()); $this->setFlash('notice', 'Current language is not available for edit! Current editing language has been reset to: ' . $culture->getNativeName()); } $this->getUser()->setAttribute("languages", $UserLanguages); } parent::executeEdit(); /** @var $schemaProperty SchemaProperty */ $schemaProperty = $this->schema_property; if ($schemaProperty) { $schemaObj = $this->getCurrentSchema(); $schemaProperty->setSchemaUri($schemaObj->getNamespace()); $lexUri = $schemaProperty->getLexicalAlias(); if (empty($lexUri)) { $newURI = $schemaObj->getNamespace(); $this->setDefaultLexicalAlias($schemaProperty, $newURI); } } }
/** * @return SchemaHasUser */ public function getSchemaForUser() { $schemaId = $this->getSchemaId(); $userId = sfContext::getInstance()->getUser()->getSubscriberId(); $c = new Criteria(); $c->add(SchemaHasUserPeer::SCHEMA_ID, $schemaId); $c->add(SchemaHasUserPeer::USER_ID, $userId); return SchemaHasUserPeer::doSelectOne($c); }