This commit is contained in:
marijus 2014-02-20 08:33:55 +01:00
commit 5939da8b09
12 changed files with 185 additions and 81 deletions

View File

@ -1,7 +1,8 @@
<?php /** @file */ <?php
/* /** @file
* File/attach API with the potential for revision control. *
* @brief File/attach API with the potential for revision control.
* *
* TODO: a filesystem storage abstraction which maintains security (and 'data' contains a system filename * TODO: a filesystem storage abstraction which maintains security (and 'data' contains a system filename
* which is inaccessible from the web). This could get around PHP storage limits and store videos and larger * which is inaccessible from the web). This could get around PHP storage limits and store videos and larger
@ -12,6 +13,15 @@
require_once('include/permissions.php'); require_once('include/permissions.php');
require_once('include/security.php'); require_once('include/security.php');
/**
* @brief Guess the mimetype from file ending.
*
* This function takes a file name and guess the mimetype from the
* filename extension.
*
* @param $filename a string filename
* @return string The mimetype according to a file ending.
*/
function z_mime_content_type($filename) { function z_mime_content_type($filename) {
$mime_types = array( $mime_types = array(
@ -80,8 +90,6 @@ function z_mime_content_type($filename) {
if (array_key_exists($ext, $mime_types)) { if (array_key_exists($ext, $mime_types)) {
return $mime_types[$ext]; return $mime_types[$ext];
} }
} }
return 'application/octet-stream'; return 'application/octet-stream';
@ -89,7 +97,20 @@ function z_mime_content_type($filename) {
} }
/**
* @brief Count files/attachments.
*
*
* @param $channel_id
* @param $observer
* @param $hash (optional)
* @param $filename (optional)
* @param $filetype (optional)
* @return array
* $ret['success'] boolean
* $ret['results'] amount of found results, or false
* $ret['message'] string with error messages if any
*/
function attach_count_files($channel_id, $observer, $hash = '', $filename = '', $filetype = '') { function attach_count_files($channel_id, $observer, $hash = '', $filename = '', $filetype = '') {
$ret = array('success' => false); $ret = array('success' => false);
@ -121,6 +142,22 @@ function attach_count_files($channel_id, $observer, $hash = '', $filename = '',
} }
/**
* @brief Returns a list of files/attachments.
*
* @param $channel_id
* @param $observer
* @param $hash (optional)
* @param $filename (optional)
* @param $filetype (optional)
* @param $orderby
* @param $start
* @param $entries
* @return array
* $ret['success'] boolean
* $ret['results'] array with results, or false
* $ret['message'] string with error messages if any
*/
function attach_list_files($channel_id, $observer, $hash = '', $filename = '', $filetype = '', $orderby = 'created desc', $start = 0, $entries = 0) { function attach_list_files($channel_id, $observer, $hash = '', $filename = '', $filetype = '', $orderby = 'created desc', $start = 0, $entries = 0) {
$ret = array('success' => false); $ret = array('success' => false);
@ -157,10 +194,17 @@ function attach_list_files($channel_id, $observer, $hash = '', $filename = '', $
} }
// Find an attachment by hash and revision. Returns the entire attach structure including data. /**
// This could exhaust memory so most useful only when immediately sending the data. * @brief Find an attachment by hash and revision.
*
function attach_by_hash($hash,$rev = 0) { * Returns the entire attach structure including data.
*
* This could exhaust memory so most useful only when immediately sending the data.
*
* @param $hash
* @param $rev
*/
function attach_by_hash($hash, $rev = 0) {
$ret = array('success' => false); $ret = array('success' => false);
@ -181,7 +225,7 @@ function attach_by_hash($hash,$rev = 0) {
return $ret; return $ret;
} }
if(! perm_is_allowed($r[0]['uid'],get_observer_hash(),'view_storage')) { if(! perm_is_allowed($r[0]['uid'], get_observer_hash(), 'view_storage')) {
$ret['message'] = t('Permission denied.'); $ret['message'] = t('Permission denied.');
return $ret; return $ret;
} }
@ -190,14 +234,13 @@ function attach_by_hash($hash,$rev = 0) {
// Now we'll see if we can access the attachment // Now we'll see if we can access the attachment
$r = q("SELECT * FROM attach WHERE hash = '%s' and uid = %d $sql_extra LIMIT 1", $r = q("SELECT * FROM attach WHERE hash = '%s' and uid = %d $sql_extra LIMIT 1",
dbesc($hash), dbesc($hash),
intval($r[0]['uid']) intval($r[0]['uid'])
); );
if(! $r) { if(! $r) {
$ret['message'] = t('Permission denied.'); $ret['message'] = t('Permission denied.');
return $ret; return $ret;
} }
@ -207,9 +250,16 @@ function attach_by_hash($hash,$rev = 0) {
} }
/**
* @brief Find an attachment by hash and revision.
function attach_by_hash_nodata($hash,$rev = 0) { *
* Returns the entire attach structure excluding data.
*
* @see attach_by_hash()
* @param $hash
* @param $ref
*/
function attach_by_hash_nodata($hash, $rev = 0) {
$ret = array('success' => false); $ret = array('success' => false);
@ -244,7 +294,7 @@ function attach_by_hash_nodata($hash,$rev = 0) {
); );
if(! $r) { if(! $r) {
$ret['message'] = t('Permission denied.'); $ret['message'] = t('Permission denied.');
return $ret; return $ret;
} }
@ -254,17 +304,21 @@ function attach_by_hash_nodata($hash,$rev = 0) {
} }
/**
* @brief
*
function attach_store($channel,$observer_hash,$options = '',$arr = null) { * @param $channel channel array of owner
* @param $observer_hash hash of current observer
* @param $options (optional)
* @param $arr (optional)
*/
function attach_store($channel, $observer_hash, $options = '', $arr = null) {
$ret = array('success' => false); $ret = array('success' => false);
$channel_id = $channel['channel_id']; $channel_id = $channel['channel_id'];
$sql_options = ''; $sql_options = '';
if(! perm_is_allowed($channel_id,get_observer_hash(),'write_storage')) { if(! perm_is_allowed($channel_id,get_observer_hash(), 'write_storage')) {
$ret['message'] = t('Permission denied.'); $ret['message'] = t('Permission denied.');
return $ret; return $ret;
} }
@ -308,7 +362,7 @@ function attach_store($channel,$observer_hash,$options = '',$arr = null) {
if($options === 'update' && $arr && array_key_exists('revision',$arr)) if($options === 'update' && $arr && array_key_exists('revision',$arr))
$sql_options = " and revision = " . intval($arr['revision']) . " "; $sql_options = " and revision = " . intval($arr['revision']) . " ";
$x =q("select id, aid, uid, filename, filetype, filesize, hash, revision, folder, flags, created, edited, allow_cid, allow_gid, deny_cid, deny_gid from attach where hash = '%s' and uid = %d $sql_options limit 1", $x = q("select id, aid, uid, filename, filetype, filesize, hash, revision, folder, flags, created, edited, allow_cid, allow_gid, deny_cid, deny_gid from attach where hash = '%s' and uid = %d $sql_options limit 1",
dbesc($arr['hash']), dbesc($arr['hash']),
intval($channel_id) intval($channel_id)
); );
@ -329,14 +383,14 @@ function attach_store($channel,$observer_hash,$options = '',$arr = null) {
return $ret; return $ret;
} }
$limit = service_class_fetch($channel_id,'attach_upload_limit'); $limit = service_class_fetch($channel_id, 'attach_upload_limit');
if($limit !== false) { if($limit !== false) {
$r = q("select sum(filesize) as total from attach where aid = %d ", $r = q("select sum(filesize) as total from attach where aid = %d ",
intval($channel['channel_account_id']) intval($channel['channel_account_id'])
); );
if(($r) && (($r[0]['total'] + $filesize) > ($limit - $existing_size))) { if(($r) && (($r[0]['total'] + $filesize) > ($limit - $existing_size))) {
$ret['message'] = upgrade_message(true).sprintf(t("You have reached your limit of %1$.0f Mbytes attachment storage."),$limit / 1024000); $ret['message'] = upgrade_message(true) . sprintf(t("You have reached your limit of %1$.0f Mbytes attachment storage."), $limit / 1024000);
@unlink($src); @unlink($src);
return $ret; return $ret;
} }
@ -379,7 +433,6 @@ function attach_store($channel,$observer_hash,$options = '',$arr = null) {
dbesc($x[0]['deny_gid']) dbesc($x[0]['deny_gid'])
); );
} }
elseif($options === 'update') { elseif($options === 'update') {
$r = q("update attach set filename = '%s', filetype = '%s', edited = '%s', $r = q("update attach set filename = '%s', filetype = '%s', edited = '%s',
allow_cid = '%s', allow_gid = '%s', deny_cid = '%s', deny_gid = '%s' where id = %d and uid = %d limit 1", allow_cid = '%s', allow_gid = '%s', deny_cid = '%s', deny_gid = '%s' where id = %d and uid = %d limit 1",
@ -394,7 +447,6 @@ function attach_store($channel,$observer_hash,$options = '',$arr = null) {
intval($x[0]['uid']) intval($x[0]['uid'])
); );
} }
else { else {
$r = q("INSERT INTO attach ( aid, uid, hash, creator, filename, filetype, filesize, revision, data, created, edited, allow_cid, allow_gid,deny_cid, deny_gid ) $r = q("INSERT INTO attach ( aid, uid, hash, creator, filename, filetype, filesize, revision, data, created, edited, allow_cid, allow_gid,deny_cid, deny_gid )
VALUES ( %d, %d, '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s' ) ", VALUES ( %d, %d, '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s' ) ",
@ -441,12 +493,11 @@ function attach_store($channel,$observer_hash,$options = '',$arr = null) {
return $ret; return $ret;
} }
/** /**
* Read a virtual directory and return contents, checking permissions of all parent components. * Read a virtual directory and return contents, checking permissions of all parent components.
* @function z_readdir * @function z_readdir
* @param integer $channel_id * @param integer $channel_id
* @param string $observer_hash * @param string $observer_hash hash of current observer
* @param string $pathname * @param string $pathname
* @param string $parent_hash (optional) * @param string $parent_hash (optional)
* *
@ -455,18 +506,16 @@ function attach_store($channel,$observer_hash,$options = '',$arr = null) {
* $ret['message'] = error message if success is false * $ret['message'] = error message if success is false
* $ret['data'] = array of attach DB entries without data component * $ret['data'] = array of attach DB entries without data component
*/ */
function z_readdir($channel_id, $observer_hash, $pathname, $parent_hash = '') {
function z_readdir($channel_id,$observer_hash,$pathname, $parent_hash = '') {
$ret = array('success' => false); $ret = array('success' => false);
if(! perm_is_allowed($r[0]['uid'],get_observer_hash(),'view_storage')) { if(! perm_is_allowed($r[0]['uid'], get_observer_hash(), 'view_storage')) {
$ret['message'] = t('Permission denied.'); $ret['message'] = t('Permission denied.');
return $ret; return $ret;
} }
if(strpos($pathname, '/')) {
if(strpos($pathname,'/')) { $paths = explode('/', $pathname);
$paths = explode('/',$pathname);
if(count($paths) > 1) { if(count($paths) > 1) {
$curpath = array_shift($paths); $curpath = array_shift($paths);
@ -480,7 +529,7 @@ function z_readdir($channel_id,$observer_hash,$pathname, $parent_hash = '') {
return $ret; return $ret;
} }
return z_readdir($channel_id,$observer_hash,implode('/',$paths),$r[0]['hash']); return z_readdir($channel_id, $observer_hash, implode('/', $paths), $r[0]['hash']);
} }
} }
else else
@ -501,20 +550,17 @@ function z_readdir($channel_id,$observer_hash,$pathname, $parent_hash = '') {
return $ret; return $ret;
} }
/** /**
* @function attach_mkdir($channel,$observer_hash,$arr); * @function attach_mkdir($channel,$observer_hash,$arr);
* *
* Create directory * @brief Create directory.
* *
* @param $channel channel array of owner * @param $channel channel array of owner
* @param $observer_hash hash of current observer * @param $observer_hash hash of current observer
* @param $arr parameter array to fulfil request * @param $arr parameter array to fulfil request
*
* Required: * Required:
* $arr['filename'] * $arr['filename']
* $arr['folder'] // hash of parent directory, empty string for root directory * $arr['folder'] // hash of parent directory, empty string for root directory
*
* Optional: * Optional:
* $arr['hash'] // precumputed hash for this node * $arr['hash'] // precumputed hash for this node
* $arr['allow_cid'] * $arr['allow_cid']
@ -522,8 +568,7 @@ function z_readdir($channel_id,$observer_hash,$pathname, $parent_hash = '') {
* $arr['deny_cid'] * $arr['deny_cid']
* $arr['deny_gid'] * $arr['deny_gid']
*/ */
function attach_mkdir($channel, $observer_hash, $arr = null) {
function attach_mkdir($channel,$observer_hash,$arr = null) {
$ret = array('success' => false); $ret = array('success' => false);
$channel_id = $channel['channel_id']; $channel_id = $channel['channel_id'];
@ -534,10 +579,9 @@ function attach_mkdir($channel,$observer_hash,$arr = null) {
logger('attach_mkdir: basepath: ' . $basepath); logger('attach_mkdir: basepath: ' . $basepath);
if(! is_dir($basepath)) if(! is_dir($basepath))
mkdir($basepath,STORAGE_DEFAULT_PERMISSIONS,true); mkdir($basepath,STORAGE_DEFAULT_PERMISSIONS, true);
if(! perm_is_allowed($channel_id, $observer_hash, 'write_storage')) {
if(! perm_is_allowed($channel_id, $observer_hash,'write_storage')) {
$ret['message'] = t('Permission denied.'); $ret['message'] = t('Permission denied.');
return $ret; return $ret;
} }
@ -547,10 +591,8 @@ function attach_mkdir($channel,$observer_hash,$arr = null) {
return $ret; return $ret;
} }
$arr['hash'] = (($arr['hash']) ? $arr['hash'] : random_string()); $arr['hash'] = (($arr['hash']) ? $arr['hash'] : random_string());
// Check for duplicate name. // Check for duplicate name.
// Check both the filename and the hash as we will be making use of both. // Check both the filename and the hash as we will be making use of both.
@ -576,7 +618,6 @@ function attach_mkdir($channel,$observer_hash,$arr = null) {
$sql_options = permissions_sql($channel['channel_id']); $sql_options = permissions_sql($channel['channel_id']);
do { do {
$r = q("select filename, hash, flags, folder from attach where uid = %d and hash = '%s' and ( flags & %d ) $r = q("select filename, hash, flags, folder from attach where uid = %d and hash = '%s' and ( flags & %d )
$sql_options limit 1", $sql_options limit 1",
intval($channel['channel_id']), intval($channel['channel_id']),
@ -594,7 +635,6 @@ function attach_mkdir($channel,$observer_hash,$arr = null) {
$lfile = $r[0]['folder']; $lfile = $r[0]['folder'];
} while ( ($r[0]['folder']) && ($r[0]['flags'] & ATTACH_FLAG_DIR)) ; } while ( ($r[0]['folder']) && ($r[0]['flags'] & ATTACH_FLAG_DIR)) ;
$path = $basepath . '/' . $lpath; $path = $basepath . '/' . $lpath;
} }
else else
$path = $basepath . '/'; $path = $basepath . '/';
@ -625,7 +665,7 @@ function attach_mkdir($channel,$observer_hash,$arr = null) {
); );
if($r) { if($r) {
if(mkdir($path,STORAGE_DEFAULT_PERMISSIONS,true)) { if(mkdir($path,STORAGE_DEFAULT_PERMISSIONS, true)) {
$ret['success'] = true; $ret['success'] = true;
$ret['data'] = $arr; $ret['data'] = $arr;
} }
@ -641,9 +681,18 @@ function attach_mkdir($channel,$observer_hash,$arr = null) {
} }
/**
* @brief Changes permissions of a file.
function attach_change_permissions($channel_id,$resource,$allow_cid,$allow_gid,$deny_cid,$deny_gid,$recurse = false) { *
* @param $channel_id
* @param $resource
* @param $allow_cid
* @param $allow_gid
* @param $deny_cid
* @param $deny_gid
* @param $recurse
*/
function attach_change_permissions($channel_id, $resource, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $recurse = false) {
$r = q("select hash, flags from attach where hash = '%s' and uid = %d limit 1", $r = q("select hash, flags from attach where hash = '%s' and uid = %d limit 1",
dbesc($resource), dbesc($resource),
@ -661,7 +710,7 @@ function attach_change_permissions($channel_id,$resource,$allow_cid,$allow_gid,$
); );
if($r) { if($r) {
foreach($r as $rr) { foreach($r as $rr) {
attach_change_permissions($channel_id,$resource,$allow_cid,$allow_gid,$deny_cid,$deny_gid,$recurse); attach_change_permissions($channel_id, $resource, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $recurse);
} }
} }
} }
@ -679,9 +728,13 @@ function attach_change_permissions($channel_id,$resource,$allow_cid,$allow_gid,$
return; return;
} }
/**
* @brief Delete a file.
function attach_delete($channel_id,$resource) { *
* @param $channel_id
* @param $resource
*/
function attach_delete($channel_id, $resource) {
$c = q("select channel_address from channel where channel_id = %d limit 1", $c = q("select channel_address from channel where channel_id = %d limit 1",
@ -706,7 +759,7 @@ function attach_delete($channel_id,$resource) {
); );
if($x) { if($x) {
foreach($x as $xx) { foreach($x as $xx) {
attach_delete($channel_id,$xx['hash']); attach_delete($channel_id, $xx['hash']);
} }
} }
} }
@ -733,8 +786,12 @@ function attach_delete($channel_id,$resource) {
return; return;
} }
/**
* @brief Returns path to file in cloud/.
*
* @param $arr
* @return string with the path the file to cloud/
*/
function get_cloudpath($arr) { function get_cloudpath($arr) {
$basepath = 'cloud/'; $basepath = 'cloud/';
@ -746,7 +803,6 @@ function get_cloudpath($arr) {
$basepath .= $r[0]['channel_address'] . '/'; $basepath .= $r[0]['channel_address'] . '/';
} }
$path = $basepath; $path = $basepath;
if($arr['folder']) { if($arr['folder']) {
@ -772,20 +828,20 @@ function get_cloudpath($arr) {
} while ( ($r[0]['folder']) && ($r[0]['flags'] & ATTACH_FLAG_DIR)) ; } while ( ($r[0]['folder']) && ($r[0]['flags'] & ATTACH_FLAG_DIR)) ;
$path .= $lpath; $path .= $lpath;
} }
$path .= $arr['filename']; $path .= $arr['filename'];
return $path; return $path;
} }
/**
*
* @param $in
* @param $out
*/
function pipe_streams($in, $out) { function pipe_streams($in, $out) {
$size = 0; $size = 0;
while (!feof($in)) while (!feof($in))
$size += fwrite($out,fread($in,8192)); $size += fwrite($out, fread($in,8192));
return $size; return $size;
} }

View File

@ -261,7 +261,7 @@ function settings_post(&$a) {
$maxreq = ((x($_POST,'maxreq')) ? intval($_POST['maxreq']) : 0); $maxreq = ((x($_POST,'maxreq')) ? intval($_POST['maxreq']) : 0);
$expire = ((x($_POST,'expire')) ? intval($_POST['expire']) : 0); $expire = ((x($_POST,'expire')) ? intval($_POST['expire']) : 0);
$def_group = ((x($_POST,'group-selection')) ? notags(trim($_POST['group-selection'])) : ''); $def_group = ((x($_POST,'group-selection')) ? notags(trim($_POST['group-selection'])) : '');
$channel_menu = ((x($_POST['channel_menu'])) ? htmlspecialchars_decode(trim($_POST['channel_menu'])) : '');
$expire_items = ((x($_POST,'expire_items')) ? intval($_POST['expire_items']) : 0); $expire_items = ((x($_POST,'expire_items')) ? intval($_POST['expire_items']) : 0);
$expire_starred = ((x($_POST,'expire_starred')) ? intval($_POST['expire_starred']) : 0); $expire_starred = ((x($_POST,'expire_starred')) ? intval($_POST['expire_starred']) : 0);
@ -403,7 +403,7 @@ function settings_post(&$a) {
set_pconfig(local_user(),'system','post_profilechange', $post_profilechange); set_pconfig(local_user(),'system','post_profilechange', $post_profilechange);
set_pconfig(local_user(),'system','blocktags',$blocktags); set_pconfig(local_user(),'system','blocktags',$blocktags);
set_pconfig(local_user(),'system','hide_online_status',$hide_presence); set_pconfig(local_user(),'system','hide_online_status',$hide_presence);
set_pconfig(local_user(),'system','channel_menu',$channel_menu);
$r = q("update channel set channel_name = '%s', channel_pageflags = %d, channel_timezone = '%s', channel_location = '%s', channel_notifyflags = %d, channel_max_anon_mail = %d, channel_max_friend_req = %d, channel_expire_days = %d, channel_default_group = '%s', channel_r_stream = %d, channel_r_profile = %d, channel_r_photos = %d, channel_r_abook = %d, channel_w_stream = %d, channel_w_wall = %d, channel_w_tagwall = %d, channel_w_comment = %d, channel_w_mail = %d, channel_w_photos = %d, channel_w_chat = %d, channel_a_delegate = %d, channel_r_storage = %d, channel_w_storage = %d, channel_r_pages = %d, channel_w_pages = %d, channel_a_republish = %d, channel_a_bookmark = %d, channel_allow_cid = '%s', channel_allow_gid = '%s', channel_deny_cid = '%s', channel_deny_gid = '%s' where channel_id = %d limit 1", $r = q("update channel set channel_name = '%s', channel_pageflags = %d, channel_timezone = '%s', channel_location = '%s', channel_notifyflags = %d, channel_max_anon_mail = %d, channel_max_friend_req = %d, channel_expire_days = %d, channel_default_group = '%s', channel_r_stream = %d, channel_r_profile = %d, channel_r_photos = %d, channel_r_abook = %d, channel_w_stream = %d, channel_w_wall = %d, channel_w_tagwall = %d, channel_w_comment = %d, channel_w_mail = %d, channel_w_photos = %d, channel_w_chat = %d, channel_a_delegate = %d, channel_r_storage = %d, channel_w_storage = %d, channel_r_pages = %d, channel_w_pages = %d, channel_a_republish = %d, channel_a_bookmark = %d, channel_allow_cid = '%s', channel_allow_gid = '%s', channel_deny_cid = '%s', channel_deny_gid = '%s' where channel_id = %d limit 1",
dbesc($username), dbesc($username),
@ -758,7 +758,7 @@ function settings_content(&$a) {
'$ajaxint' => array('browser_update', t("Update browser every xx seconds"), $browser_update, t('Minimum of 10 seconds, no maximum')), '$ajaxint' => array('browser_update', t("Update browser every xx seconds"), $browser_update, t('Minimum of 10 seconds, no maximum')),
'$itemspage' => array('itemspage', t("Maximum number of conversations to load at any time:"), $itemspage, t('Maximum of 100 items')), '$itemspage' => array('itemspage', t("Maximum number of conversations to load at any time:"), $itemspage, t('Maximum of 100 items')),
'$nosmile' => array('nosmile', t("Don't show emoticons"), $nosmile, ''), '$nosmile' => array('nosmile', t("Don't show emoticons"), $nosmile, ''),
'$chanview_full' => array('chanview_full', t('View remote profiles as webpages'), $chanview, t('By default open in a sub-window of your own site')), '$chanview_full' => array('chanview_full', t('Do not view remote profiles in frames'), $chanview, t('By default open in a sub-window of your own site')),
'$theme_config' => $theme_config, '$theme_config' => $theme_config,
)); ));
@ -911,6 +911,18 @@ function settings_content(&$a) {
require_once('include/group.php'); require_once('include/group.php');
$group_select = mini_group_select(local_user(),$channel['channel_default_group']); $group_select = mini_group_select(local_user(),$channel['channel_default_group']);
require_once('include/menu.php');
$m1 = menu_list(local_user());
$menu = false;
if($m1) {
$menu = array();
$current = get_pconfig(local_user(),'system','channel_menu');
$menu[] = array('name' => '', 'selected' => ((! $current) ? true : false));
foreach($m1 as $m) {
$menu[] = array('name' => htmlspecialchars($m['menu_name'],ENT_COMPAT,'UTF-8'), 'selected' => (($m['menu_name'] === $current) ? ' selected="selected" ' : false));
}
}
$o .= replace_macros($stpl,array( $o .= replace_macros($stpl,array(
'$ptitle' => t('Channel Settings'), '$ptitle' => t('Channel Settings'),
@ -981,7 +993,9 @@ function settings_content(&$a) {
'$pagetype' => $pagetype, '$pagetype' => $pagetype,
'$expert' => feature_enabled(local_user(),'expert'), '$expert' => feature_enabled(local_user(),'expert'),
'$hint' => t('Please enable expert mode (in <a href="settings/features">Settings > Additional features</a>) to adjust!'), '$hint' => t('Please enable expert mode (in <a href="settings/features">Settings > Additional features</a>) to adjust!'),
'$lbl_misc' => t('Miscellaneous Settings'),
'$menus' => $menu,
'$menu_desc' => t('Personal menu to display in your channel pages'),
)); ));
call_hooks('settings_form',$o); call_hooks('settings_form',$o);

View File

@ -5979,7 +5979,7 @@ msgid "Don't show emoticons"
msgstr "" msgstr ""
#: ../../mod/settings.php:761 #: ../../mod/settings.php:761
msgid "View remote profiles as webpages" msgid "Do not view remote profiles in frames"
msgstr "" msgstr ""
#: ../../mod/settings.php:761 #: ../../mod/settings.php:761

View File

@ -1 +1 @@
2014-02-18.592 2014-02-19.593

View File

@ -35,3 +35,17 @@
margin-bottom: 15px; margin-bottom: 15px;
} }
#settings-menu-desc {
font-weight: bold;
float: left;
width: 350px;
}
#settings-channel-menu-div select {
float: left;
}
#settings-channel-menu-end {
clear: both;
margin-bottom: 15px;
}

View File

@ -5994,7 +5994,7 @@ msgid "Don't show emoticons"
msgstr "Emoticons nicht zeigen" msgstr "Emoticons nicht zeigen"
#: ../../mod/settings.php:761 #: ../../mod/settings.php:761
msgid "View remote profiles as webpages" msgid "Do not view remote profiles in frames"
msgstr "" msgstr ""
#: ../../mod/settings.php:761 #: ../../mod/settings.php:761

View File

@ -1410,7 +1410,7 @@ $a->strings["Minimum of 10 seconds, no maximum"] = "Minimum 10 Sekunden, kein Ma
$a->strings["Maximum number of conversations to load at any time:"] = "Maximale Anzahl von Unterhaltungen, die auf einmal geladen werden sollen:"; $a->strings["Maximum number of conversations to load at any time:"] = "Maximale Anzahl von Unterhaltungen, die auf einmal geladen werden sollen:";
$a->strings["Maximum of 100 items"] = "Maximum: 100 Beiträge"; $a->strings["Maximum of 100 items"] = "Maximum: 100 Beiträge";
$a->strings["Don't show emoticons"] = "Emoticons nicht zeigen"; $a->strings["Don't show emoticons"] = "Emoticons nicht zeigen";
$a->strings["View remote profiles as webpages"] = ""; $a->strings["Do not view remote profiles in frames"] = "";
$a->strings["By default open in a sub-window of your own site"] = ""; $a->strings["By default open in a sub-window of your own site"] = "";
$a->strings["Nobody except yourself"] = "Niemand außer Dir selbst"; $a->strings["Nobody except yourself"] = "Niemand außer Dir selbst";
$a->strings["Only those you specifically allow"] = "Nur die, denen Du es explizit erlaubst"; $a->strings["Only those you specifically allow"] = "Nur die, denen Du es explizit erlaubst";

View File

@ -5988,7 +5988,7 @@ msgid "Don't show emoticons"
msgstr "Non mostrare le emoticons" msgstr "Non mostrare le emoticons"
#: ../../mod/settings.php:761 #: ../../mod/settings.php:761
msgid "View remote profiles as webpages" msgid "Do not view remote profiles in frames"
msgstr "Visualizza gli altri profili come normali pagine web" msgstr "Visualizza gli altri profili come normali pagine web"
#: ../../mod/settings.php:761 #: ../../mod/settings.php:761

View File

@ -1410,7 +1410,7 @@ $a->strings["Minimum of 10 seconds, no maximum"] = "Minimo 10 secondi, nessun li
$a->strings["Maximum number of conversations to load at any time:"] = "Massimo numero di conversazioni da mostrare ogni volta:"; $a->strings["Maximum number of conversations to load at any time:"] = "Massimo numero di conversazioni da mostrare ogni volta:";
$a->strings["Maximum of 100 items"] = "Massimo 100"; $a->strings["Maximum of 100 items"] = "Massimo 100";
$a->strings["Don't show emoticons"] = "Non mostrare le emoticons"; $a->strings["Don't show emoticons"] = "Non mostrare le emoticons";
$a->strings["View remote profiles as webpages"] = "Visualizza gli altri profili come normali pagine web"; $a->strings["Do not view remote profiles in frames"] = "Visualizza gli altri profili come normali pagine web";
$a->strings["By default open in a sub-window of your own site"] = "Se non selezionato, i profili degli altri utenti sono mostrati dentro un riquadro nella pagina"; $a->strings["By default open in a sub-window of your own site"] = "Se non selezionato, i profili degli altri utenti sono mostrati dentro un riquadro nella pagina";
$a->strings["Nobody except yourself"] = "Nessuno tranne te"; $a->strings["Nobody except yourself"] = "Nessuno tranne te";
$a->strings["Only those you specifically allow"] = "Solo chi riceve il mio permesso"; $a->strings["Only those you specifically allow"] = "Solo chi riceve il mio permesso";

View File

@ -52,4 +52,5 @@ $(document).ready(function() {
$('.icon-circle-blank').addClass(''); $('.icon-circle-blank').addClass('');
$('.icon-circle').addClass(''); $('.icon-circle').addClass('');
$('.icon-bookmark').addClass(''); $('.icon-bookmark').addClass('');
$('.icon-fullscreen').addClass('');
}); });

View File

@ -1,2 +1,2 @@
<div id="chanview-iframe-border" class="fakelink" onclick="chanviewFull(); return true;" title="{{$full}}" >&#x2610;</div> <div id="chanview-iframe-border" class="fakelink" onclick="chanviewFull(); return true;" title="{{$full}}" ><i class="icon-fullscreen"></i></div>
<iframe id="remote-channel" width="100%" src="{{$url}}" onload="resize_iframe()"></iframe> <iframe id="remote-channel" width="100%" src="{{$url}}" onload="resize_iframe()"></iframe>

View File

@ -127,4 +127,23 @@
<input type="submit" name="submit" class="settings-submit" value="{{$submit}}"{{if !$expert}} onclick="$('select').prop('disabled', false);"{{/if}} /> <input type="submit" name="submit" class="settings-submit" value="{{$submit}}"{{if !$expert}} onclick="$('select').prop('disabled', false);"{{/if}} />
</div> </div>
{{if $menus}}
<h3 class="settings-heading">{{$lbl_misc}}</h3>
<div id="settings-menu-desc">{{$menu_desc}}</div>
<div class="settings-channel-menu-div">
<select name="channel_menu" class="settings-channel-menu-sel">
{{foreach $menus as $menu }}
<option value="{{$menu.name}}" {{$menu.selected}} >{{$menu.name}} </option>
{{/foreach}}
</select>
</div>
<div class="settings-submit-wrapper" >
<input type="submit" name="submit" class="settings-submit" value="{{$submit}}"{{if !$expert}} onclick="$('select').prop('disabled', false);"{{/if}} />
</div>
<div id="settings-channel-menu-end"></div>
{{/if}}
</div> </div>