* @package chamilo.plugin.createDrupalUser */ class CreateDrupalUser extends Plugin implements HookPluginInterface { const EXTRAFIELD_VARIABLE_NAME = 'drupal_user_id'; /** * Class constructor */ protected function __construct() { $parameters = array( 'drupal_domain' => 'text' ); parent::__construct('1.0', 'Angel Fernando Quiroz Campos', $parameters); } /** * Instance the plugin * @staticvar null $result * @return CreateDrupalUser */ static function create() { static $result = null; return $result ? $result : $result = new self(); } /** * Install the plugin */ public function install() { $this->createExtraField(); $this->installHook(); } /** * Uninstall the plugin * @return void */ public function uninstall() { $this->uninstallHook(); $this->deleteExtraField(); } /** * Install the Create User hook */ public function installHook() { /** @var HookCreateDrupalUser $observer */ $observer = HookCreateDrupalUser::create(); HookCreateUser::create()->attach($observer); } /** * Uninstall the Create User hook */ public function uninstallHook() { /** @var HookCreateDrupalUser $observer */ $observer = HookCreateDrupalUser::create(); $event = HookCreateUser::create(); if ($event) { $event->detach($observer); } } /** * Get the drupal_user_id extra field information * @return array The info */ private function getExtraFieldInfo() { $extraField = new ExtraField('user'); $extraFieldHandler = $extraField->get_handler_field_info_by_field_variable( self::EXTRAFIELD_VARIABLE_NAME ); return $extraFieldHandler; } /** * Create the drupal_user_id when it not exists */ private function createExtraField() { $extraFieldExists = $this->getExtraFieldInfo() !== false; if (!$extraFieldExists) { $extraField = new ExtraField('user'); $extraField->save( [ 'field_type' => ExtraField::FIELD_TYPE_INTEGER, 'variable' => self::EXTRAFIELD_VARIABLE_NAME, 'display_text' => get_plugin_lang('DrupalUserId', 'CreateDrupalUser'), 'default_value' => null, 'field_order' => null, 'visible' => false, 'changeable' => false, 'filter' => null ] ); } } /** * Delete the drupal_user_id and values */ private function deleteExtraField() { $extraFieldInfo = $this->getExtraFieldInfo(); $extraFieldExists = $extraFieldInfo !== false; if ($extraFieldExists) { $extraField = new ExtraField('user'); $extraField->delete($extraFieldInfo['id']); } } }