/** * This tool renders all user sessions opened. * * @param {array} $options An associative array of parameters, containing: * @param {string} [$options.userId] * The user's id. Defaults to id of the logged-in user, if any. * @param {bool} [$options.editable=true] * Whether user can delete sessions * @param {bool} [$options.devices=true] * Whether to show devices info */ function Users_sessions_tool($options) { $options = array_merge(array('editable' => true, 'devices' => true), $options); if (empty($options['userId'])) { $options['userId'] = Users::loggedInUser(true)->id; } Q_Response::addStylesheet('plugins/Users/css/tools/sessions.css'); Q_Response::setToolOptions($options); $sessions = Users_Session::select("us.*, ud.deviceId, ud.platform, ud.version, ud.formFactor", "us")->join(Users_Device::table() . ' ud', array('us.userId' => 'ud.userId', 'us.id' => 'ud.sessionId'), "LEFT")->where(array('us.userId' => $options['userId']))->fetchDbRows(); $noDevicesClass = $options['devices'] ? '' : "Users_sessions_noDevices"; $html = "<table class='Users_sessions_container {$noDevicesClass}'><tr><th>Session Id</th><th class='Users_sessions_devicesData'>Platform</th><th class='Users_sessions_devicesData'>Version</th><th>Last Updated</th>"; if ($options["editable"]) { $html .= '<th class="Users_sessions_actions"></th>'; } $html .= '</tr>'; foreach ($sessions as $session) { $updatedTime = date("M j, Y g:i A", strtotime($session->updatedTime)); $html .= "<tr><td class='Users_sessions_sessionId'>{$session->id}</td>" . "<td class='Users_sessions_devicesData'>{$session->platform}</td>" . "<td class='Users_sessions_devicesData'>{$session->version}</td>" . "<td>{$updatedTime}</td>"; if ($options["editable"]) { $html .= "<td class='Users_sessions_actions'><button name='delete'>Delete</button></td>"; } $html .= '</tr>'; } $html .= "</table>"; return $html; }
function Users_0_9_2_Users_mysql() { $app = Q_Config::expect('Q', 'app'); $communityId = Users::communityId(); $rows = Users_Session::select('COUNT(1)')->where($criteria)->fetchAll(PDO::FETCH_NUM); $count = $rows[0][0]; $limit = 100; $offset = 0; $sessions = Users_Session::select('*')->orderBy('id')->limit($limit, $offset)->caching(false)->fetchDbRows(); echo "Adding userId to sessions..."; while ($sessions) { foreach ($sessions as $s) { $parsed = Q::json_decode($s->content, true); if (empty($parsed['Users']['loggedInUser']['id'])) { continue; } $s->userId = $parsed['Users']['loggedInUser']['id']; } Users_Session::insertManyAndExecute($sessions, array('onDuplicateKeyUpdate' => array('userId' => new Db_Expression("VALUES(userId)")))); $min = min($offset + $limit, $count); echo "[100D"; echo "Updated {$min} of {$count} sessions"; $offset += $limit; if ($offset > $count) { break; } $sessions = Users_Session::select('*')->orderBy('id')->limit($limit, $offset)->caching(false)->fetchDbRows(); } echo "\n"; }