. */ namespace SP\Core\Upgrade; use SP\Core\Exceptions\SPException; use SP\Core\TaskFactory; use SP\Storage\DbWrapper; use SP\Storage\QueryData; /** * Class Group * @package SP\Core\Upgrade */ class Group { /** * @var int */ protected static $orphanGroupId; /** * Actualizar registros con grupos no existentes * @param int $groupId Id de grupo por defecto * @return bool */ public static function fixGroupId($groupId) { TaskFactory::$Message->setTask(__FUNCTION__); TaskFactory::$Message->setMessage(__('Actualizando IDs de grupos')); TaskFactory::update(); try { DbWrapper::beginTransaction(); if ($groupId === 0){ $groupId = self::$orphanGroupId ?: self::createOrphanGroup(); } $Data = new QueryData(); $Data->addParam($groupId); $query = /** @lang SQL */ 'UPDATE Account SET account_userGroupId = ? WHERE account_userGroupId NOT IN (SELECT usergroup_id FROM usrGroups ORDER BY usergroup_id) OR account_userGroupId IS NULL'; $Data->setQuery($query); DbWrapper::getQuery($Data); $query = /** @lang SQL */ 'UPDATE accHistory SET acchistory_userGroupId = ? WHERE acchistory_userGroupId NOT IN (SELECT usergroup_id FROM usrGroups ORDER BY usergroup_id) OR acchistory_userGroupId IS NULL'; $Data->setQuery($query); DbWrapper::getQuery($Data); $query = /** @lang SQL */ 'UPDATE usrData SET user_groupId = ? WHERE user_groupId NOT IN (SELECT usergroup_id FROM usrGroups ORDER BY usergroup_id) OR user_groupId IS NULL'; $Data->setQuery($query); DbWrapper::getQuery($Data); $query = /** @lang SQL */ 'DELETE FROM UserToUserGroup WHERE usertogroup_groupId NOT IN (SELECT usergroup_id FROM usrGroups ORDER BY usergroup_id) OR usertogroup_groupId IS NULL'; $Data->setQuery($query); $Data->setParams([]); DbWrapper::getQuery($Data); DbWrapper::endTransaction(); return true; } catch (SPException $e) { DbWrapper::rollbackTransaction(); return false; } } /** * Crear un grupo para elementos huérfanos * * @return int * @throws \SP\Core\Exceptions\QueryException * @throws \SP\Core\Exceptions\ConstraintException */ public static function createOrphanGroup() { $query = /** @lang SQL */ 'INSERT INTO usrGroups SET usergroup_name = \'Orphan group\', usergroup_description = \'Created by the upgrade process\''; $Data = new QueryData(); $Data->setQuery($query); $Data->setOnErrorMessage(__('Error al crear el grupo', false)); DbWrapper::getQuery($Data); self::$orphanGroupId = DbWrapper::getLastId(); return self::$orphanGroupId; } }