public function actionEditField() { $id = (int) Yii::$app->request->get('id'); // Get Base Field $field = ProfileField::findOne(['id' => $id]); if ($field == null) { $field = new ProfileField(); } // Get all Available Field Class Instances, also bind current profilefield to the type $profileFieldTypes = new BaseType(); $fieldTypes = $profileFieldTypes->getTypeInstances($field); // Build Form Definition $definition = array(); $definition['elements'] = array(); // Add all sub forms $definition['elements'] = array_merge($definition['elements'], $field->getFormDefinition()); foreach ($fieldTypes as $fieldType) { $definition['elements'] = array_merge($definition['elements'], $fieldType->getFormDefinition()); } // Add Form Buttons $definition['buttons'] = array('save' => array('type' => 'submit', 'label' => Yii::t('AdminModule.controllers_UserprofileController', 'Save'), 'class' => 'btn btn-primary')); if (!$field->isNewRecord && !$field->is_system) { $definition['buttons']['delete'] = array('type' => 'submit', 'label' => Yii::t('AdminModule.controllers_UserprofileController', 'Delete'), 'class' => 'btn btn-danger pull-right'); } // Create Form Instance $form = new HForm($definition); // Add used models to the CForm, so we can validate it $form->models['ProfileField'] = $field; foreach ($fieldTypes as $fieldType) { $form->models[get_class($fieldType)] = $fieldType; } // Form Submitted? if ($form->submitted('save') && $form->validate()) { // Use ProfileField Instance from Form with new Values $field = $form->models['ProfileField']; $fieldType = $form->models[$field->field_type_class]; if ($field->save() && $fieldType->save()) { return $this->redirect(Url::to(['/admin/user-profile'])); } } if ($form->submitted('delete')) { $field->delete(); return $this->redirect(Url::to(['/admin/user-profile'])); } return $this->render('editField', array('hForm' => $form, 'field' => $field)); }
public function getFields() { $query = $this->hasMany(ProfileField::className(), ['profile_field_category_id' => 'id']); $query->orderBy('sort_order'); return $query; }
/** * Validator which checks the fieldtype * * Also ensures that field_type_class could not be changed on existing records. */ public function checkType() { if (!$this->isNewRecord) { // Dont allow changes of internal_name - Maybe not the best way to check it. $currentProfileField = ProfileField::findOne(['id' => $this->id]); if ($this->field_type_class != $currentProfileField->field_type_class) { $this->addError('field_type_class', Yii::t('UserModule.models_ProfileField', 'Field Type could not be changed!')); } } else { $profileFieldTypes = new fieldtype\BaseType(); if (!key_exists($this->field_type_class, $profileFieldTypes->getFieldTypes())) { $this->addError('field_type_class', Yii::t('UserModule.models_ProfileField', 'Invalid field type!')); } } }
/** * Returns all profile fields with user data by given category * * @todo Optimize me * @param ProfileFieldCategory $category * @return Array ProfileFields */ public function getProfileFields(ProfileFieldCategory $category = null) { if ($this->user === null) { return []; } $fields = []; $query = ProfileField::find(); $query->where(['visible' => 1]); $query->orderBy('sort_order'); if ($category !== null) { $query->andWhere(['profile_field_category_id' => $category->id]); } foreach ($query->all() as $field) { if ($field->getUserValue($this->user) != "") { $fields[] = $field; } } return $fields; }
/** * Updates or creates user by given ldap node * * @param Zend_Ldap_Node $node * @return User User Object */ public function handleLdapUser($node) { $usernameAttribute = Setting::Get('usernameAttribute', 'authentication_ldap'); if ($usernameAttribute == '') { $usernameAttribute = 'sAMAccountName'; } $emailAttribute = Setting::Get('emailAttribute', 'authentication_ldap'); if ($emailAttribute == '') { $emailAttribute = 'mail'; } $username = $node->getAttribute($usernameAttribute, 0); $email = $node->getAttribute($emailAttribute, 0); $guid = $this->binToStrGuid($node->getAttribute('objectGUID', 0)); // Try to load User: $userChanged = false; $user = null; if ($guid != "") { $user = User::findOne(array('guid' => $guid, 'auth_mode' => User::AUTH_MODE_LDAP)); } else { // Fallback use e-mail $user = User::findOne(array('email' => $email, 'auth_mode' => User::AUTH_MODE_LDAP)); } if ($user === null) { $user = new User(); if ($guid != "") { $user->guid = $guid; } $user->status = User::STATUS_ENABLED; $user->auth_mode = User::AUTH_MODE_LDAP; $user->group_id = 1; Yii::info('Create ldap user ' . $username . '!'); } // Update Users Field if ($user->username != $username) { $userChanged = true; $user->username = $username; } if ($user->email != $email) { $userChanged = true; $user->email = $email; } if ($user->validate()) { // Only Save user when something is changed if ($userChanged || $user->isNewRecord) { $user->save(); } // Update Profile Fields foreach (ProfileField::find()->andWhere(['!=', 'ldap_attribute', ''])->all() as $profileField) { $ldapAttribute = $profileField->ldap_attribute; $profileFieldName = $profileField->internal_name; $user->profile->{$profileFieldName} = $node->getAttribute($ldapAttribute, 0); } if ($user->profile->validate() && $user->profile->save()) { $this->trigger(self::EVENT_UPDATE_USER, new ParameterEvent(['user' => $user, 'node' => $node])); } else { Yii::error('Could not create or update ldap user profile! (' . print_r($user->profile->getErrors(), true) . ")"); } } else { Yii::error('Could not create or update ldap user! (' . print_r($user->getErrors(), true) . ")"); } return $user; }
/** * @inheritdoc */ public function getSyncAttributes() { $attributes = ['username', 'email']; foreach (ProfileField::find()->andWhere(['!=', 'ldap_attribute', ''])->all() as $profileField) { $attributes[] = $profileField->internal_name; } return $attributes; }
public static function bootstrap() { // Seems database is already initialized if (Setting::Get('paginationSize') == 10) { return; } //Yii::$app->search->rebuild(); Setting::Set('baseUrl', \yii\helpers\BaseUrl::base(true)); Setting::Set('paginationSize', 10); Setting::Set('displayNameFormat', '{profile.firstname} {profile.lastname}'); // Authentication Setting::Set('authInternal', '1', 'authentication'); Setting::Set('authLdap', '0', 'authentication'); Setting::Set('refreshUsers', '1', 'authentication_ldap'); Setting::Set('needApproval', '0', 'authentication_internal'); Setting::Set('anonymousRegistration', '1', 'authentication_internal'); Setting::Set('internalUsersCanInvite', '1', 'authentication_internal'); // Mailing Setting::Set('transportType', 'php', 'mailing'); Setting::Set('systemEmailAddress', '*****@*****.**', 'mailing'); Setting::Set('systemEmailName', 'My Social Network', 'mailing'); Setting::Set('receive_email_activities', User::RECEIVE_EMAIL_DAILY_SUMMARY, 'mailing'); Setting::Set('receive_email_notifications', User::RECEIVE_EMAIL_WHEN_OFFLINE, 'mailing'); // File Setting::Set('maxFileSize', '1048576', 'file'); Setting::Set('maxPreviewImageWidth', '200', 'file'); Setting::Set('maxPreviewImageHeight', '200', 'file'); Setting::Set('hideImageFileInfo', '0', 'file'); // Caching Setting::Set('type', 'CFileCache', 'cache'); Setting::Set('expireTime', '3600', 'cache'); Setting::Set('installationId', md5(uniqid("", true)), 'admin'); // Design Setting::Set('theme', "HumHub"); Setting::Set('spaceOrder', 0, 'space'); // Basic Setting::Set('enable', 1, 'tour'); Setting::Set('defaultLanguage', Yii::$app->language); // Notification Setting::Set('enable_html5_desktop_notifications', 0, 'notification'); // Add Categories $cGeneral = new ProfileFieldCategory(); $cGeneral->title = "General"; $cGeneral->sort_order = 100; $cGeneral->visibility = 1; $cGeneral->is_system = 1; $cGeneral->description = ''; if (!$cGeneral->save()) { throw new Exception(print_r($cGeneral->getErrors(), true)); } $cCommunication = new ProfileFieldCategory(); $cCommunication->title = "Communication"; $cCommunication->sort_order = 200; $cCommunication->visibility = 1; $cCommunication->is_system = 1; $cCommunication->description = ''; $cCommunication->save(); $cSocial = new ProfileFieldCategory(); $cSocial->title = "Social bookmarks"; $cSocial->sort_order = 300; $cSocial->visibility = 1; $cSocial->is_system = 1; $cSocial->description = ''; $cSocial->save(); // Add Fields $field = new ProfileField(); $field->internal_name = "firstname"; $field->title = 'Firstname'; $field->sort_order = 100; $field->profile_field_category_id = $cGeneral->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->ldap_attribute = 'givenName'; $field->is_system = 1; $field->required = 1; $field->show_at_registration = 1; if ($field->save()) { $field->fieldType->maxLength = 20; $field->fieldType->save(); } else { throw new Exception(print_r($field->getErrors(), true)); } $field = new ProfileField(); $field->internal_name = "lastname"; $field->title = 'Lastname'; $field->sort_order = 200; $field->profile_field_category_id = $cGeneral->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->ldap_attribute = 'sn'; $field->show_at_registration = 1; $field->required = 1; $field->is_system = 1; if ($field->save()) { $field->fieldType->maxLength = 30; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "title"; $field->title = 'Title'; $field->sort_order = 300; $field->ldap_attribute = 'title'; $field->profile_field_category_id = $cGeneral->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->maxLength = 50; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "gender"; $field->title = 'Gender'; $field->sort_order = 300; $field->profile_field_category_id = $cGeneral->id; $field->field_type_class = 'ProfileFieldTypeSelect'; $field->is_system = 1; if ($field->save()) { $field->fieldType->options = "male=>Male\nfemale=>Female\ncustom=>Custom"; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "street"; $field->title = 'Street'; $field->sort_order = 400; $field->profile_field_category_id = $cGeneral->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->maxLength = 150; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "zip"; $field->title = 'Zip'; $field->sort_order = 500; $field->profile_field_category_id = $cGeneral->id; $field->is_system = 1; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); if ($field->save()) { $field->fieldType->maxLength = 10; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "city"; $field->title = 'City'; $field->sort_order = 600; $field->profile_field_category_id = $cGeneral->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->maxLength = 100; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "country"; $field->title = 'Country'; $field->sort_order = 700; $field->profile_field_category_id = $cGeneral->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->maxLength = 100; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "state"; $field->title = 'State'; $field->sort_order = 800; $field->profile_field_category_id = $cGeneral->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->maxLength = 100; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "birthday"; $field->title = 'Birthday'; $field->sort_order = 900; $field->profile_field_category_id = $cGeneral->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Birthday::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "about"; $field->title = 'About'; $field->sort_order = 900; $field->profile_field_category_id = $cGeneral->id; $field->field_type_class = 'ProfileFieldTypeTextArea'; $field->is_system = 1; if ($field->save()) { #$field->fieldType->maxLength = 100; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "phone_private"; $field->title = 'Phone Private'; $field->sort_order = 100; $field->profile_field_category_id = $cCommunication->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->maxLength = 100; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "phone_work"; $field->title = 'Phone Work'; $field->sort_order = 200; $field->profile_field_category_id = $cCommunication->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->maxLength = 100; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "mobile"; $field->title = 'Mobile'; $field->sort_order = 300; $field->profile_field_category_id = $cCommunication->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->maxLength = 100; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "fax"; $field->title = 'Fax'; $field->sort_order = 400; $field->profile_field_category_id = $cCommunication->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->maxLength = 100; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "im_skype"; $field->title = 'Skype Nickname'; $field->sort_order = 500; $field->profile_field_category_id = $cCommunication->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->maxLength = 100; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "im_msn"; $field->title = 'MSN'; $field->sort_order = 600; $field->profile_field_category_id = $cCommunication->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->maxLength = 100; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "im_icq"; $field->title = 'ICQ Number'; $field->sort_order = 700; $field->profile_field_category_id = $cCommunication->id; $field->field_type_class = 'ProfileFieldTypeNumber'; $field->is_system = 1; if ($field->save()) { $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "im_xmpp"; $field->title = 'XMPP Jabber Address'; $field->sort_order = 800; $field->profile_field_category_id = $cCommunication->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->validator = 'email'; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "url"; $field->title = 'Url'; $field->sort_order = 100; $field->profile_field_category_id = $cSocial->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->validator = 'url'; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "url_facebook"; $field->title = 'Facebook URL'; $field->sort_order = 200; $field->profile_field_category_id = $cSocial->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->validator = 'url'; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "url_linkedin"; $field->title = 'LinkedIn URL'; $field->sort_order = 300; $field->profile_field_category_id = $cSocial->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->validator = 'url'; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "url_xing"; $field->title = 'Xing URL'; $field->sort_order = 400; $field->profile_field_category_id = $cSocial->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->validator = 'url'; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "url_youtube"; $field->title = 'Youtube URL'; $field->sort_order = 500; $field->profile_field_category_id = $cSocial->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->validator = 'url'; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "url_vimeo"; $field->title = 'Vimeo URL'; $field->sort_order = 600; $field->profile_field_category_id = $cSocial->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->validator = 'url'; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "url_flickr"; $field->title = 'Flickr URL'; $field->sort_order = 700; $field->profile_field_category_id = $cSocial->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->validator = 'url'; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "url_myspace"; $field->title = 'MySpace URL'; $field->sort_order = 800; $field->profile_field_category_id = $cSocial->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->validator = 'url'; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "url_googleplus"; $field->title = 'Google+ URL'; $field->sort_order = 900; $field->profile_field_category_id = $cSocial->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->validator = 'url'; $field->fieldType->save(); } $field = new ProfileField(); $field->internal_name = "url_twitter"; $field->title = 'Twitter URL'; $field->sort_order = 1000; $field->profile_field_category_id = $cSocial->id; $field->field_type_class = \humhub\modules\user\models\fieldtype\Text::className(); $field->is_system = 1; if ($field->save()) { $field->fieldType->validator = 'url'; $field->fieldType->save(); } $group = new Group(); $group->name = "Users"; $group->description = "Example Group by Installer"; $group->save(); }
/** * Updates or creates user by given ldap node * * @param Zend_Ldap_Node $node * @return User User Object */ public function handleLdapUser($node) { $username = $node->getAttribute(Setting::Get('usernameAttribute', 'authentication_ldap'), 0); $email = $node->getAttribute('mail', 0); $guid = $this->binToStrGuid($node->getAttribute('objectGUID', 0)); // Try to load User: $userChanged = false; $user = null; if ($guid != "") { $user = User::findOne(array('guid' => $guid, 'auth_mode' => User::AUTH_MODE_LDAP)); } else { // Fallback use e-mail $user = User::findOne(array('email' => $email, 'auth_mode' => User::AUTH_MODE_LDAP)); } if ($user === null) { $user = new User(); if ($guid != "") { $user->guid = $guid; } $user->status = User::STATUS_ENABLED; $user->auth_mode = User::AUTH_MODE_LDAP; $user->group_id = 1; Yii::info('Create ldap user ' . $username . '!'); } // Update Group Mapping foreach (Group::find()->andWhere(['!=', 'ldap_dn', ""])->all() as $group) { if (in_array($group->ldap_dn, $node->getAttribute('memberOf'))) { if ($user->group_id != $group->id) { $userChanged = true; $user->group_id = $group->id; } } } // Update Users Field if ($user->username != $username) { $userChanged = true; $user->username = $username; } if ($user->email != $email) { $userChanged = true; $user->email = $email; } if ($user->validate()) { // Only Save user when something is changed if ($userChanged || $user->isNewRecord) { $user->save(); } // Update Profile Fields foreach (ProfileField::find()->andWhere(['!=', 'ldap_attribute', ''])->all() as $profileField) { $ldapAttribute = $profileField->ldap_attribute; $profileFieldName = $profileField->internal_name; $user->profile->{$profileFieldName} = $node->getAttribute($ldapAttribute, 0); } if ($user->profile->validate()) { $user->profile->save(); // Update Space Mapping foreach (Space::find()->andWhere(['!=', 'ldap_dn', ''])->all() as $space) { if (in_array($space->ldap_dn, $node->getAttribute('memberOf'))) { $space->addMember($user->id); } } } else { Yii::error('Could not create or update ldap user profile! (' . print_r($user->profile->getErrors(), true) . ")"); } } else { Yii::error('Could not create or update ldap user! (' . print_r($user->getErrors(), true) . ")"); } return $user; }