W.I.P. collab editor:

- Implement check last active member
This commit is contained in:
Hadi Nategh 2016-08-25 12:51:59 +02:00
parent 043c079f80
commit 21700cde7a
4 changed files with 66 additions and 15 deletions

View File

@ -78,6 +78,7 @@ class filemanager_collab extends filemanager_collab_bo {
function leave_session ($es_id, $member_id) function leave_session ($es_id, $member_id)
{ {
if (!$this->is_sessionValid($es_id) || !$this->is_memberValid($es_id, $member_id)) throw new Exception ('Session is not valid!'); if (!$this->is_sessionValid($es_id) || !$this->is_memberValid($es_id, $member_id)) throw new Exception ('Session is not valid!');
$this->MEMBER_UpdateActiveMember($es_id, $member_id, 0);
return array ( return array (
'session_id' => $es_id, 'session_id' => $es_id,
'memberid' => $member_id, 'memberid' => $member_id,
@ -247,24 +248,28 @@ class filemanager_collab extends filemanager_collab_bo {
* Ajax function to handle actions called by client-side * Ajax function to handle actions called by client-side
* types: save, delete, discard * types: save, delete, discard
* *
* @param type $es_id * @param array $params
* @param type $action * @param string $action
* @param string $file_path
*/ */
function ajax_actions ($es_id, $action, $file_path) function ajax_actions ($params, $action)
{ {
$response = Api\Json\Response::get();
switch ($action) switch ($action)
{ {
case 'save': case 'save':
$this->SESSION_Save($es_id); $this->SESSION_Save($params['es_id']);
//update genesis file after save happened //update genesis file after save happened
if ($file_path) self::generateGenesis ($file_path, $es_id); if ($params['file_path']) self::generateGenesis ($params['file_path'], $params['es_id']);
break; break;
case 'delete': case 'delete':
$this->SESSION_cleanup($es_id); $this->SESSION_cleanup($params['es_id']);
break; break;
case 'discard': case 'discard':
$this->OP_Discard($es_id); $this->OP_Discard($params['es_id']);
break;
case 'checkLastMember':
$activeMembers = $this->MEMBER_getActiveMembers($params['es_id']);
$response->data(is_array($activeMembers) && count($activeMembers) > 1?false:true);
break; break;
default: default:
// //

View File

@ -250,7 +250,7 @@ class filemanager_collab_bo
{ {
$this->db->update( $this->db->update(
self::MEMBER_TABLE, self::MEMBER_TABLE,
array('collab_status' => 0), array('collab_status' => 0, 'collab_is_active' => 0),
array('collab_es_id' => $es_id), array('collab_es_id' => $es_id),
__LINE__, __LINE__,
__FILE__, __FILE__,
@ -385,20 +385,66 @@ class filemanager_collab_bo
/** /**
* Add member data into member table in database * Add member data into member table in database
* *
* @param type $es_id session id * @param string $es_id session id
* @param type $user_id user id * @param int $user_id user id
* @param type $color user color code * @param string $color user color code
*/ */
protected function MEMBER_add2Db ($es_id, $user_id, $color) protected function MEMBER_add2Db ($es_id, $user_id, $color)
{ {
$data = array ( $data = array (
'collab_es_id' => $es_id, 'collab_es_id' => $es_id,
'collab_uid' => $user_id, 'collab_uid' => $user_id,
'collab_color' => $color 'collab_color' => $color,
'collab_is_active' => 1
); );
$this->db->insert(self::MEMBER_TABLE, $data,false,__LINE__, __FILE__,'filemanager'); $this->db->insert(self::MEMBER_TABLE, $data,false,__LINE__, __FILE__,'filemanager');
} }
/**
* Function to update is_active field in member table
*
* @param string $es_id session id
* @param string $member_id member id
* @param int $is_active = 0 flag to show if member is active or not
*
* @throws Exception throws exception if no es_id or member id is given
*/
protected function MEMBER_UpdateActiveMember ($es_id, $member_id, $is_active = 0)
{
if (!$es_id || !$member_id) throw new Exception (self::EXCEPTION_MESSAGE_NO_SESSION);
$this->db->update(
self::MEMBER_TABLE,
array('collab_is_active' => $is_active),
'collab_es_id ="'.$es_id.'" AND collab_member_id="'.$member_id.'"',
__LINE__,
__FILE__,
'filemanager'
);
}
/**
* Function to get active members
*
* @param string $es_id session id
*
* @return array returns array of members records
* @throws Exception throws exception if no es_id is given
*/
protected function MEMBER_getActiveMembers ($es_id)
{
if (!$es_id) throw new Exception (self::EXCEPTION_MESSAGE_NO_SESSION);
$query = $this->db->select(
self::MEMBER_TABLE,
'*',
array('collab_es_id' => $es_id, 'collab_is_active' => 1),
__LINE__,
__FILE__,
'filemanager'
);
$members = $query->getRows();
return is_array($members)?self::db2id($members):true;
}
/** /**
* Function to get member record of specific member id * Function to get member record of specific member id
* *

View File

@ -18,7 +18,7 @@ $phpgw_baseline = array(
'collab_es_id' => array('type' => 'varchar','precision' => '64','nullable' => False, 'comment' => 'Related editing session id'), 'collab_es_id' => array('type' => 'varchar','precision' => '64','nullable' => False, 'comment' => 'Related editing session id'),
'collab_uid' => array('type' => 'varchar','precision' => '64'), 'collab_uid' => array('type' => 'varchar','precision' => '64'),
'collab_color' => array('type' => 'varchar','precision' => '32'), 'collab_color' => array('type' => 'varchar','precision' => '32'),
'collab_last_activity' => array('type' => 'int','precision' => '4'), 'collab_is_active' => array('type' => 'int','precision' => '2', 'default'=>'0','nullable' => False),
'collab_is_guest' => array('type' => 'int','precision' => '2','default' => '0','nullable' => False), 'collab_is_guest' => array('type' => 'int','precision' => '2','default' => '0','nullable' => False),
'collab_token' => array('type' => 'varchar','precision' => '32'), 'collab_token' => array('type' => 'varchar','precision' => '32'),
'collab_status' => array('type' => 'int','precision' => '2','default' => '1','nullable' => False) 'collab_status' => array('type' => 'int','precision' => '2','default' => '1','nullable' => False)

View File

@ -21,7 +21,7 @@ function filemanager_upgrade16_1()
'collab_es_id' => array('type' => 'varchar','precision' => '64','nullable' => False, 'comment' => 'Related editing session id'), 'collab_es_id' => array('type' => 'varchar','precision' => '64','nullable' => False, 'comment' => 'Related editing session id'),
'collab_uid' => array('type' => 'varchar','precision' => '64'), 'collab_uid' => array('type' => 'varchar','precision' => '64'),
'collab_color' => array('type' => 'varchar','precision' => '32'), 'collab_color' => array('type' => 'varchar','precision' => '32'),
'collab_last_activity' => array('type' => 'int','precision' => '4'), 'collab_is_active' => array('type' => 'int','precision' => '2', 'default'=>'0','nullable' => False),
'collab_is_guest' => array('type' => 'int','precision' => '2','default' => '0','nullable' => False), 'collab_is_guest' => array('type' => 'int','precision' => '2','default' => '0','nullable' => False),
'collab_token' => array('type' => 'varchar','precision' => '32'), 'collab_token' => array('type' => 'varchar','precision' => '32'),
'collab_status' => array('type' => 'int','precision' => '2','default' => '1','nullable' => False) 'collab_status' => array('type' => 'int','precision' => '2','default' => '1','nullable' => False)