2013-07-19 18:52:52 +03:00
< ? php
2013-08-08 00:22:21 +03:00
/**
* ownCloud - Office App
*
* @ author Victor Dubiniuk
* @ copyright 2013 Victor Dubiniuk victor . dubiniuk @ gmail . com
*
* This file is licensed under the Affero General Public License version 3 or
* later .
*/
2013-07-19 18:52:52 +03:00
namespace OCA\Office ;
class Session {
2013-08-07 18:02:20 +03:00
2013-08-17 19:42:50 +03:00
public static function add ( $genesis , $hash , $fileId ){
$query = \OCP\DB :: prepare ( 'INSERT INTO `*PREFIX*office_session` (`es_id`, `genesis_url`, `genesis_hash`, `owner`, `file_id`) VALUES (?, ?, ?, ?, ?) ' );
2013-08-07 02:22:21 +03:00
$data = array (
2013-08-08 18:31:47 +03:00
'es_id' => self :: getUniqueSessionId (),
2013-08-08 14:44:13 +03:00
'genesis_url' => $genesis ,
'genesis_hash' => $hash ,
2013-08-09 17:29:18 +03:00
'owner' => \OCP\User :: getUser (),
2013-08-17 19:42:50 +03:00
'file_id' => $fileId
2013-08-07 02:22:21 +03:00
);
2013-08-08 14:44:13 +03:00
$result = $query -> execute ( array_values ( $data ));
2013-08-07 02:22:21 +03:00
if ( $result ){
return $data ;
}
return false ;
}
2013-08-09 18:29:36 +03:00
public static function getAll (){
$query = \OCP\DB :: prepare ( 'SELECT * FROM `*PREFIX*office_session`' );
$result = $query -> execute ();
return $result -> fetchAll ();
}
public static function getSession ( $id ){
$query = \OCP\DB :: prepare ( 'SELECT * FROM `*PREFIX*office_session` WHERE `es_id`= ?' );
$result = $query -> execute ( array ( $id ));
return $result -> fetchRow ();
}
2013-08-18 17:11:22 +03:00
public static function getInfo ( $esId ){
$query = \OCP\DB :: prepare ( 'SELECT s.*, COUNT(`m`.`member_id`) AS users FROM `*PREFIX*office_session` AS s LEFT JOIN `*PREFIX*office_member` AS m ON `s`.`es_id`=`m`.`es_id` AND `m`.`status`=' . Member :: MEMBER_STATUS_ACTIVE . ' AND `m`.`uid` != ? WHERE `s`.`es_id` = ? GROUP BY `m`.`es_id`' );
$result = $query -> execute (
array (
\OCP\User :: getUser (),
$esId
)
);
$info = $result -> fetchRow ();
if ( ! is_array ( $info )){
$info = array ();
}
return $info ;
}
2013-08-18 22:16:35 +03:00
2013-08-18 17:11:22 +03:00
public static function getSessionByFileId ( $fileId ){
$query = \OCP\DB :: prepare ( 'SELECT * FROM `*PREFIX*office_session` WHERE `file_id`= ?' );
$result = $query -> execute ( array ( $fileId ));
2013-08-09 18:29:36 +03:00
return $result -> fetchRow ();
}
2013-08-18 17:11:22 +03:00
public static function getInfoByFileid ( $fileIds ){
$fileIdCount = count ( $fileIds );
if ( ! $fileIdCount || ! is_array ( $fileIds )){
return array ();
}
$placeholders = array_fill ( 0 , $fileIdCount , '?' );
$stmt = implode ( ', ' , $placeholders );
$query = \OCP\DB :: prepare ( 'SELECT s.*, COUNT(`m`.`member_id`) AS users FROM `*PREFIX*office_session` AS s LEFT JOIN `*PREFIX*office_member` AS m ON `s`.`es_id`=`m`.`es_id` AND `m`.`status`=' . Member :: MEMBER_STATUS_ACTIVE . ' AND `m`.`uid` != ? WHERE `s`.`file_id` IN (' . $stmt . ') GROUP BY `m`.`es_id`' );
$result = $query -> execute (
array_merge ( array ( \OCP\User :: getUser ()), $fileIds )
);
$info = $result -> fetchAll ();
if ( ! is_array ( $info )){
$info = array ();
}
return $info ;
}
2013-08-08 18:31:47 +03:00
protected static function getUniqueSessionId (){
do {
$id = \OC_Util :: generate_random_bytes ( 30 );
} while ( self :: getSession ( $id ));
return $id ;
2013-08-07 02:22:21 +03:00
}
2013-07-19 18:52:52 +03:00
}