. */ namespace SP\Core\Upgrade; use SP\Core\Exceptions\SPException; use SP\Core\TaskFactory; use SP\DataModel\ProfileData; use SP\Storage\DbWrapper; use SP\Storage\QueryData; /** * Class Profile * * @package SP\Core\Upgrade */ class Profile { protected static $orphanProfileId; /** * Actualizar registros con perfiles no existentes * * @param int $profileId Id de perfil por defecto * @return bool */ public static function fixProfilesId($profileId) { $Data = new QueryData(); try { TaskFactory::$Message->setTask(__FUNCTION__); TaskFactory::$Message->setMessage(__('Actualizando IDs de perfil')); TaskFactory::sendTaskMessage(); DbWrapper::beginTransaction(); if ($profileId === 0){ $profileId = self::$orphanProfileId ?: self::createOrphanProfile(); } $query = /** @lang SQL */ 'UPDATE usrData SET user_profileId = ? WHERE user_profileId NOT IN (SELECT id FROM usrProfiles ORDER BY id) OR user_profileId IS NULL'; $Data->setQuery($query); $Data->addParam($profileId); DbWrapper::getQuery($Data); DbWrapper::endTransaction(); return true; } catch (SPException $e) { DbWrapper::rollbackTransaction(); return false; } } /** * Crear un perfil para elementos huérfanos * * @return int * @throws \SP\Core\Exceptions\QueryException * @throws \SP\Core\Exceptions\ConstraintException */ public static function createOrphanProfile() { $query = /** @lang SQL */ ', userProfile_profile = ?\''; $Data = new QueryData(); $Data->setQuery($query); $Data->addParam(serialize(new ProfileData())); $Data->setOnErrorMessage(__('Error al crear perfil', false)); DbWrapper::getQuery($Data); self::$orphanProfileId = DbWrapper::getLastId(); return self::$orphanProfileId; } }