mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-12 17:50:42 +01:00
117b559a5e
- Writable share is now a checkbox - Add Sharing -> Merge entry into email template, share gets selected options - Add {{share}} placeholder which creates (by default) read only share
118 lines
2.9 KiB
PHP
118 lines
2.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* EGroupware entry sharing
|
|
*
|
|
* @link http://www.egroupware.org
|
|
* @author Nathan Gray
|
|
* @package api
|
|
* @subpackage Link
|
|
* @copyright (c) 2018 Nathan Gray
|
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
|
*/
|
|
|
|
namespace EGroupware\Api\Link;
|
|
|
|
/**
|
|
* Description of Sharing
|
|
*
|
|
* @author nathan
|
|
*/
|
|
class Sharing extends \EGroupware\Api\Sharing
|
|
{
|
|
|
|
/**
|
|
* Create sharing session
|
|
*
|
|
* Certain cases:
|
|
* a) there is not session $keep_session === null
|
|
* --> create new anon session with just specified application rights
|
|
* b) there is a session $keep_session === true
|
|
* b1) current user is share owner (eg. checking the link)
|
|
* --> Show entry, preferrably not destroying current session
|
|
* b2) current user not share owner
|
|
* --> Need a limited UI to show entry
|
|
*
|
|
* @param boolean $keep_session =null null: create a new session, true: try mounting it into existing (already verified) session
|
|
* @return string with sessionid
|
|
*/
|
|
public static function create_session($keep_session=null)
|
|
{
|
|
$share = array();
|
|
$success = static::check_token($keep_session, $share);
|
|
if($success)
|
|
{
|
|
static::setup_entry($share);
|
|
return static::login($keep_session, $share);
|
|
}
|
|
return '';
|
|
}
|
|
|
|
protected static function setup_entry(&$share)
|
|
{
|
|
|
|
}
|
|
|
|
/**
|
|
* The anonymous user probably doesn't have the needed permissions to access
|
|
* the record, so we should set that up to avoid permission errors
|
|
*/
|
|
protected function after_login()
|
|
{
|
|
list($app) = explode('::', $this->share['share_path']);
|
|
|
|
// allow app (gets overwritten by session::create)
|
|
$GLOBALS['egw_info']['flags']['currentapp'] = $app;
|
|
$GLOBALS['egw_info']['user']['apps'] = array(
|
|
$app => $GLOBALS['egw_info']['apps'][$app]
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get actions for sharing an entry from the given app
|
|
*
|
|
* @param string $appname
|
|
* @param int $group Current menu group
|
|
*/
|
|
public static function get_actions($appname, $group = 6)
|
|
{
|
|
$actions = parent::get_actions($appname, $group);
|
|
|
|
// Add in merge to mail document
|
|
if ($GLOBALS['egw_info']['user']['apps']['mail'] && class_exists($appname.'_merge'))
|
|
{
|
|
$documents = call_user_func(array($appname.'_merge', 'document_action'),
|
|
$GLOBALS['egw_info']['user']['preferences']['addressbook']['document_dir'],
|
|
1, 'Insert in document', 'shareDocument_'
|
|
);
|
|
$documents['order'] = 20;
|
|
|
|
// Mail only
|
|
foreach($documents['children'] as $key => &$document)
|
|
{
|
|
if(strpos($document['target'],'compose_') === FALSE)
|
|
{
|
|
unset($documents['children'][$key]);
|
|
continue;
|
|
}
|
|
|
|
$document['allowOnMultiple'] = true;
|
|
$document['onExecute'] = "javaScript:app.$appname.share_merge";
|
|
}
|
|
$documents['enabled'] = !!($GLOBALS['egw_info']['user']['apps']['stylite']);
|
|
$actions['share']['children']['shareDocuments'] = $documents;
|
|
}
|
|
|
|
return $actions;
|
|
}
|
|
|
|
/**
|
|
* Get a user interface for shared directories
|
|
*/
|
|
public function get_ui()
|
|
{
|
|
echo lang('EPL Only');
|
|
}
|
|
|
|
}
|