Merge branch 'dev' of https://framagit.org/hubzilla/core into dev
This commit is contained in:
commit
28043726e6
@ -164,7 +164,7 @@ Make the directory for apache and change diretory to it
|
||||
|
||||
Clone hubzilla from git ("git pull" will update it later)
|
||||
|
||||
git clone https://github.com/redmatrix/hubzilla html
|
||||
git clone https://framagit.org/hubzilla/core html
|
||||
|
||||
Change to the install script
|
||||
|
||||
|
@ -572,7 +572,7 @@ function check_https {
|
||||
function install_hubzilla {
|
||||
print_info "installing hubzilla addons..."
|
||||
cd /var/www/html/
|
||||
util/add_addon_repo https://github.com/redmatrix/hubzilla-addons.git hzaddons
|
||||
util/add_addon_repo https://framagit.org/hubzilla/addons.git hzaddons
|
||||
mkdir -p "store/[data]/smarty3"
|
||||
chmod -R 777 store
|
||||
touch .htconfig.php
|
||||
|
@ -107,7 +107,7 @@ class Share {
|
||||
}
|
||||
|
||||
public function bbcode() {
|
||||
$bb = NULL_STR;
|
||||
$bb = EMPTY_STR;
|
||||
|
||||
if(! $this->item)
|
||||
return $bb;
|
||||
@ -140,4 +140,4 @@ class Share {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -16,7 +16,13 @@ class Security {
|
||||
|
||||
$block_public = ((x($_POST,'block_public')) ? True : False);
|
||||
set_config('system','block_public',$block_public);
|
||||
|
||||
|
||||
$cloud_noroot = ((x($_POST,'cloud_noroot')) ? 1 : 0);
|
||||
set_config('system','cloud_disable_siteroot',1 - $cloud_noroot);
|
||||
|
||||
$cloud_disksize = ((x($_POST,'cloud_disksize')) ? 1 : 0);
|
||||
set_config('system','cloud_report_disksize',$cloud_disksize);
|
||||
|
||||
$ws = $this->trim_array_elems(explode("\n",$_POST['whitelisted_sites']));
|
||||
set_config('system','whitelisted_sites',$ws);
|
||||
|
||||
@ -87,6 +93,8 @@ class Security {
|
||||
'$page' => t('Security'),
|
||||
'$form_security_token' => get_form_security_token('admin_security'),
|
||||
'$block_public' => array('block_public', t("Block public"), get_config('system','block_public'), t("Check to block public access to all otherwise public personal pages on this site unless you are currently authenticated.")),
|
||||
'$cloud_noroot' => [ 'cloud_noroot', t('Provide a cloud root directory'), 1 - intval(get_config('system','cloud_disable_siteroot')), t('The cloud root directory lists all channel names which provide public files') ],
|
||||
'$cloud_disksize' => [ 'cloud_disksize', t('Show total disk space available to cloud uploads'), intval(get_config('system','cloud_report_disksize')), '' ],
|
||||
'$transport_security' => array('transport_security', t('Set "Transport Security" HTTP header'),intval(get_config('system','transport_security_header')),''),
|
||||
'$content_security' => array('content_security', t('Set "Content Security Policy" HTTP header'),intval(get_config('system','content_security_policy')),''),
|
||||
'$allowed_email' => array('allowed_email', t("Allowed email domains"), get_config('system','allowed_email'), t("Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains")),
|
||||
|
@ -344,8 +344,8 @@ class Channel extends \Zotlabs\Web\Controller {
|
||||
'$uid' => ((\App::$profile['profile_uid']) ? \App::$profile['profile_uid'] : '0'),
|
||||
'$gid' => '0',
|
||||
'$cid' => '0',
|
||||
'$cmin' => '0',
|
||||
'$cmax' => '0',
|
||||
'$cmin' => '(-1)',
|
||||
'$cmax' => '(-1)',
|
||||
'$star' => '0',
|
||||
'$liked' => '0',
|
||||
'$conv' => '0',
|
||||
|
@ -35,11 +35,20 @@ class Cloud extends \Zotlabs\Web\Controller {
|
||||
if (argc() > 1)
|
||||
$which = argv(1);
|
||||
|
||||
|
||||
if (argc() < 2 && intval(get_config('system','cloud_disable_siteroot'))) {
|
||||
notice( t('Permission denied.') . EOL);
|
||||
construct_page();
|
||||
killme();
|
||||
}
|
||||
|
||||
$profile = 0;
|
||||
|
||||
if ($which)
|
||||
profile_load( $which, $profile);
|
||||
|
||||
|
||||
|
||||
$auth = new \Zotlabs\Storage\BasicAuth();
|
||||
|
||||
$ob_hash = get_observer_hash();
|
||||
|
@ -213,8 +213,8 @@ class Display extends \Zotlabs\Web\Controller {
|
||||
'$uid' => '0',
|
||||
'$gid' => '0',
|
||||
'$cid' => '0',
|
||||
'$cmin' => '0',
|
||||
'$cmax' => '99',
|
||||
'$cmin' => '(-1)',
|
||||
'$cmax' => '(-1)',
|
||||
'$star' => '0',
|
||||
'$liked' => '0',
|
||||
'$conv' => '0',
|
||||
|
@ -9,7 +9,7 @@ require_once('include/conversation.php');
|
||||
class Home extends \Zotlabs\Web\Controller {
|
||||
|
||||
function init() {
|
||||
|
||||
|
||||
$ret = array();
|
||||
|
||||
call_hooks('home_init',$ret);
|
||||
|
@ -113,7 +113,7 @@ class Invite extends \Zotlabs\Web\Controller {
|
||||
$invite_code = autoname(8) . rand(1000,9999);
|
||||
$nmessage = str_replace('$invite_code',$invite_code,$message);
|
||||
|
||||
$r = q("INSERT INTO register (hash,created) VALUES ('%s', '%s') ",
|
||||
$r = q("INSERT INTO register (hash,created,uid,password,lang) VALUES ('%s', '%s',0,'','') ",
|
||||
dbesc($invite_code),
|
||||
dbesc(datetime_convert())
|
||||
);
|
||||
|
@ -123,8 +123,8 @@ class Network extends \Zotlabs\Web\Controller {
|
||||
$def_acl = array('allow_gid' => '<' . $r[0]['hash'] . '>');
|
||||
}
|
||||
|
||||
$default_cmin = ((feature_enabled(local_channel(),'affinity')) ? get_pconfig(local_channel(),'affinity','cmin',0) : 0);
|
||||
$default_cmax = ((feature_enabled(local_channel(),'affinity')) ? get_pconfig(local_channel(),'affinity','cmax',99) : 99);
|
||||
$default_cmin = ((feature_enabled(local_channel(),'affinity')) ? get_pconfig(local_channel(),'affinity','cmin',0) : (-1));
|
||||
$default_cmax = ((feature_enabled(local_channel(),'affinity')) ? get_pconfig(local_channel(),'affinity','cmax',99) : (-1));
|
||||
|
||||
$cid = ((x($_GET,'cid')) ? intval($_GET['cid']) : 0);
|
||||
$star = ((x($_GET,'star')) ? intval($_GET['star']) : 0);
|
||||
@ -140,6 +140,7 @@ class Network extends \Zotlabs\Web\Controller {
|
||||
|
||||
$deftag = '';
|
||||
|
||||
|
||||
if(x($_GET,'search') || $file || (!$pf && $cid))
|
||||
$nouveau = true;
|
||||
|
||||
@ -334,8 +335,8 @@ class Network extends \Zotlabs\Web\Controller {
|
||||
'$uid' => ((local_channel()) ? local_channel() : '0'),
|
||||
'$gid' => (($gid) ? $gid : '0'),
|
||||
'$cid' => (($cid) ? $cid : '0'),
|
||||
'$cmin' => (($cmin) ? $cmin : '0'),
|
||||
'$cmax' => (($cmax) ? $cmax : '0'),
|
||||
'$cmin' => (($cmin) ? $cmin : '(-1)'),
|
||||
'$cmax' => (($cmax) ? $cmax : '(-1)'),
|
||||
'$star' => (($star) ? $star : '0'),
|
||||
'$liked' => (($liked) ? $liked : '0'),
|
||||
'$conv' => (($conv) ? $conv : '0'),
|
||||
@ -420,8 +421,9 @@ class Network extends \Zotlabs\Web\Controller {
|
||||
$pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(\App::$pager['itemspage']), intval(\App::$pager['start']));
|
||||
}
|
||||
|
||||
|
||||
if(($cmin != 0) || ($cmax != 99)) {
|
||||
// cmin and cmax are both -1 when the affinity tool is disabled
|
||||
|
||||
if(($cmin != (-1)) || ($cmax != (-1))) {
|
||||
|
||||
// Not everybody who shows up in the network stream will be in your address book.
|
||||
// By default those that aren't are assumed to have closeness = 99; but this isn't
|
||||
|
@ -118,8 +118,8 @@ class Pubstream extends \Zotlabs\Web\Controller {
|
||||
'$uid' => ((local_channel()) ? local_channel() : '0'),
|
||||
'$gid' => '0',
|
||||
'$cid' => '0',
|
||||
'$cmin' => '0',
|
||||
'$cmax' => '99',
|
||||
'$cmin' => '(-1)',
|
||||
'$cmax' => '(-1)',
|
||||
'$star' => '0',
|
||||
'$liked' => '0',
|
||||
'$conv' => '0',
|
||||
|
@ -121,8 +121,8 @@ class Search extends \Zotlabs\Web\Controller {
|
||||
'$uid' => ((\App::$profile['profile_uid']) ? \App::$profile['profile_uid'] : '0'),
|
||||
'$gid' => '0',
|
||||
'$cid' => '0',
|
||||
'$cmin' => '0',
|
||||
'$cmax' => '0',
|
||||
'$cmin' => '(-1)',
|
||||
'$cmax' => '(-1)',
|
||||
'$star' => '0',
|
||||
'$liked' => '0',
|
||||
'$conv' => '0',
|
||||
|
@ -333,6 +333,7 @@ class Browser extends DAV\Browser\Plugin {
|
||||
|
||||
$aclselect = null;
|
||||
$lockstate = '';
|
||||
$limit = 0;
|
||||
|
||||
if($this->auth->owner_id) {
|
||||
$channel = channelx_by_n($this->auth->owner_id);
|
||||
@ -343,10 +344,15 @@ class Browser extends DAV\Browser\Plugin {
|
||||
|
||||
$aclselect = ((local_channel() == $this->auth->owner_id) ? populate_acl($channel_acl,false, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_storage')) : '');
|
||||
}
|
||||
|
||||
// Storage and quota for the account (all channels of the owner of this directory)!
|
||||
$limit = engr_units_to_bytes(service_class_fetch($this->auth->owner_id, 'attach_upload_limit'));
|
||||
}
|
||||
|
||||
if((! $limit) && get_config('system','cloud_report_disksize')) {
|
||||
$limit = engr_units_to_bytes(disk_free_space('store'));
|
||||
}
|
||||
|
||||
// Storage and quota for the account (all channels of the owner of this directory)!
|
||||
$limit = engr_units_to_bytes(service_class_fetch($owner, 'attach_upload_limit'));
|
||||
$r = q("SELECT SUM(filesize) AS total FROM attach WHERE aid = %d",
|
||||
intval($this->auth->channel_account_id)
|
||||
);
|
||||
|
@ -571,39 +571,6 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota, DAV\IMo
|
||||
return datetime_convert('UTC', 'UTC', $r[0]['edited'], 'U');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Return quota usage.
|
||||
*
|
||||
* @fixme Should guests relly see the used/free values from filesystem of the
|
||||
* complete store directory?
|
||||
*
|
||||
* @return array with used and free values in bytes.
|
||||
*/
|
||||
public function getQuotaInfo() {
|
||||
// values from the filesystem of the complete <i>store/</i> directory
|
||||
$limit = disk_total_space('store');
|
||||
$free = disk_free_space('store');
|
||||
|
||||
if ($this->auth->owner_id) {
|
||||
$c = q("select * from channel where channel_id = %d and channel_removed = 0 limit 1",
|
||||
intval($this->auth->owner_id)
|
||||
);
|
||||
|
||||
$ulimit = engr_units_to_bytes(service_class_fetch($c[0]['channel_id'], 'attach_upload_limit'));
|
||||
$limit = (($ulimit) ? $ulimit : $limit);
|
||||
|
||||
$x = q("select sum(filesize) as total from attach where aid = %d",
|
||||
intval($c[0]['channel_account_id'])
|
||||
);
|
||||
$free = (($x) ? $limit - $x[0]['total'] : 0);
|
||||
}
|
||||
|
||||
return array(
|
||||
$limit - $free,
|
||||
$free
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Array with all Directory and File DAV\\Node items for the given path.
|
||||
@ -895,4 +862,48 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota, DAV\IMo
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getQuotaInfo() {
|
||||
|
||||
/**
|
||||
* Returns the quota information
|
||||
*
|
||||
* This method MUST return an array with 2 values, the first being the total used space,
|
||||
* the second the available space (in bytes)
|
||||
*/
|
||||
|
||||
$used = 0;
|
||||
$limit = 0;
|
||||
$free = 0;
|
||||
|
||||
if ($this->auth->owner_id) {
|
||||
$channel = channelx_by_n($this->auth->owner_id);
|
||||
if($channel) {
|
||||
$r = q("SELECT SUM(filesize) AS total FROM attach WHERE aid = %d",
|
||||
intval($channel['channel_account_id'])
|
||||
);
|
||||
$used = (($r) ? (float) $r[0]['total'] : 0);
|
||||
$limit = (float) service_class_fetch($this->auth->owner_id, 'attach_upload_limit');
|
||||
if($limit) {
|
||||
// Don't let the result go negative
|
||||
$free = (($limit > $used) ? $limit - $used : 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(! $limit) {
|
||||
$free = disk_free_space('store');
|
||||
$used = disk_total_space('store') - $free;
|
||||
}
|
||||
|
||||
// prevent integer overflow on 32-bit systems
|
||||
|
||||
if($used > (float) PHP_INT_MAX)
|
||||
$used = PHP_INT_MAX;
|
||||
if($free > (float) PHP_INT_MAX)
|
||||
$free = PHP_INT_MAX;
|
||||
|
||||
return [ (int) $used, (int) $free ];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -106,7 +106,7 @@ For these reasons we [b]strongly recommend[/b] that you do NOT install addons fr
|
||||
We also recognise that some developers prefer working on their own and do not wish their code to be mingled with the project repository for a variety of reasons. These developers can ease troubleshooting and debugging by providing a README file in their respective code repository outlining the process for submitting patches and bug fixes. It is also recommended that these projects provide both a 'dev' (development) and 'master' (production) branch which tracks the current project branches of those names. This is because dev and master are often not compatible from the viewpoint of library interfaces. It is also highly recommended that your repository versions are tagged and moved forward within 24 hours of project releases. This is a major inconvenience for everybdy involved, and can present downtime for production sites while this process is being carried out; which is one more reason why we [b]strongly recommend[/b] that addons be submitted to the project addon repository and that you do NOT install such third-party addons.
|
||||
|
||||
|
||||
[url=https://framagit.org/hubzilla/core/-addons]https://framagit.org/hubzilla/core/-addons[/url] Main project addon repository
|
||||
[url=https://framagit.org/hubzilla/addons]https://framagit.org/hubzilla/addons[/url] Main project addon repository
|
||||
|
||||
[url=https://github.com/23n/red-addons]https://github.com/23n/red-addons[/url] Oliver's repository (mayan_places and flip)
|
||||
|
||||
|
@ -396,7 +396,7 @@ To immediately clear out all the extra logging stuff you added. Use the informa
|
||||
|
||||
##### Rotating log files
|
||||
|
||||
1. Enable the **logrot** addon in the official [hubzilla-addons](https://framagit.org/hubzilla/core/-addons) repo
|
||||
1. Enable the **logrot** addon in the official [hubzilla-addons](https://framagit.org/hubzilla/addons) repo
|
||||
1. Create a directory in your web root called `log` with webserver write permissions
|
||||
1. Go to the **logrot** admin settings and enter this folder name as well as the max size and number of retained log files.
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
[url=https://framagit.org/hubzilla/core/]Lloc Web Principal[/url]
|
||||
|
||||
[url=https://framagit.org/hubzilla/core/-addons]Complements del Lloc Web[/url]
|
||||
[url=https://framagit.org/hubzilla/addons]Complements del Lloc Web[/url]
|
||||
|
||||
[url=[baseurl]/help/credits]Credits en $Projectname[/url]
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
[zrl=[baseurl]/help/external-resource-links]Links zu externen Ressourcen[/zrl]
|
||||
|
||||
[url=https://framagit.org/hubzilla/core/]Haupt-Website[/url]
|
||||
[url=https://framagit.org/hubzilla/core/-addons]Addons-Website[/url]
|
||||
[url=https://framagit.org/hubzilla/addons]Addons-Website[/url]
|
||||
|
||||
[url=[baseurl]/help/credits]$Projectname Credits[/url]
|
||||
|
||||
|
@ -174,8 +174,8 @@ It is a good idea to read the whole manual! Git is different to other version co
|
||||
Now you should
|
||||
[list]
|
||||
[*] create an account at github.com
|
||||
[*] fork https://framagit.org/hubzilla/core/
|
||||
[*] fork https://framagit.org/hubzilla/core/-addons
|
||||
[*] fork https://framagit.org/hubzilla/core
|
||||
[*] fork https://framagit.org/hubzilla/addons
|
||||
[/list]
|
||||
|
||||
If you not want to use GIT from the command line - there is a usefull Eclipse plugin named ""Eclipse Mylyn to GitHub connector".
|
||||
@ -416,4 +416,4 @@ surfer@debian:/var/www$ git push
|
||||
[/code]
|
||||
|
||||
|
||||
#include doc/macros/main_footer.bb;
|
||||
#include doc/macros/main_footer.bb;
|
||||
|
@ -7,7 +7,7 @@
|
||||
[h3]External resources[/h3]
|
||||
[zrl=[baseurl]/help/external-resource-links]List of external resources[/zrl]
|
||||
[url=https://framagit.org/hubzilla/core/]Main Website[/url]
|
||||
[url=https://framagit.org/hubzilla/core/-addons]Addon Website[/url]
|
||||
[url=https://framagit.org/hubzilla/addons]Addon Website[/url]
|
||||
[url=[baseurl]/help/credits]$Projectname Credits[/url]
|
||||
[h3]About this $Projectname hub[/h3]
|
||||
[zrl=[baseurl]/help/TermsOfService]Terms of Service For This Hub[/zrl]
|
||||
|
@ -2359,6 +2359,7 @@ function channel_store_lowlevel($arr) {
|
||||
'channel_dirdate' => ((array_key_exists('channel_dirdate',$arr)) ? $arr['channel_dirdate'] : NULL_DATE),
|
||||
'channel_lastpost' => ((array_key_exists('channel_lastpost',$arr)) ? $arr['channel_lastpost'] : NULL_DATE),
|
||||
'channel_deleted' => ((array_key_exists('channel_deleted',$arr)) ? $arr['channel_deleted'] : NULL_DATE),
|
||||
'channel_active' => ((array_key_exists('channel_active',$arr)) ? $arr['channel_active'] : NULL_DATE),
|
||||
'channel_max_anon_mail' => ((array_key_exists('channel_max_anon_mail',$arr)) ? $arr['channel_max_anon_mail'] : '10'),
|
||||
'channel_max_friend_req' => ((array_key_exists('channel_max_friend_req',$arr)) ? $arr['channel_max_friend_req'] : '10'),
|
||||
'channel_expire_days' => ((array_key_exists('channel_expire_days',$arr)) ? $arr['channel_expire_days'] : '0'),
|
||||
|
@ -3697,10 +3697,7 @@ function delete_item_lowlevel($item, $stage = DROPITEM_NORMAL, $force = false) {
|
||||
);
|
||||
}
|
||||
else {
|
||||
$r = q("UPDATE item SET item_deleted = 1, body = '', title = '',
|
||||
changed = '%s', edited = '%s' WHERE id = %d",
|
||||
dbesc(datetime_convert()),
|
||||
dbesc(datetime_convert()),
|
||||
$r = q("DELETE FROM item WHERE id = %d",
|
||||
intval($item['id'])
|
||||
);
|
||||
}
|
||||
|
@ -242,7 +242,7 @@ function tt($singular, $plural, $count, $ctx = ''){
|
||||
if (! function_exists($f))
|
||||
$f = 'string_plural_select_default';
|
||||
|
||||
$k = $f($count);
|
||||
$k = $f(intval($count));
|
||||
|
||||
return is_array($t) ? $t[$k] : $t;
|
||||
}
|
||||
|
@ -81,6 +81,10 @@ function menu_render($menu, $class='', $edit = false, $var = array()) {
|
||||
if ((! $channel_id) && (local_channel()))
|
||||
$channel_id = local_channel();
|
||||
|
||||
$chan = channelx_by_n($channel_id);
|
||||
if(! $chan)
|
||||
return '';
|
||||
|
||||
$menu_list = menu_list($channel_id);
|
||||
$menu_names = array();
|
||||
|
||||
@ -110,6 +114,7 @@ function menu_render($menu, $class='', $edit = false, $var = array()) {
|
||||
$ret = replace_macros(get_markup_template('usermenu.tpl'),array(
|
||||
'$menu' => $menu['menu'],
|
||||
'$class' => $class,
|
||||
'$nick' => $chan['channel_address'],
|
||||
'$edit' => (($edit) ? t("Edit") : ''),
|
||||
'$id' => $menu['menu']['menu_id'],
|
||||
'$items' => $menu['items'],
|
||||
|
@ -55,6 +55,7 @@ pre code {
|
||||
padding: 1em 1.5em;
|
||||
display: block;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
code {
|
||||
@ -64,6 +65,7 @@ code {
|
||||
display: inline;
|
||||
padding: 0.2em 0.2em;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
#wiki-content-container code {
|
||||
|
@ -7,6 +7,8 @@
|
||||
|
||||
|
||||
{{include file="field_checkbox.tpl" field=$block_public}}
|
||||
{{include file="field_checkbox.tpl" field=$cloud_noroot}}
|
||||
{{include file="field_checkbox.tpl" field=$cloud_disksize}}
|
||||
{{include file="field_checkbox.tpl" field=$transport_security}}
|
||||
{{include file="field_checkbox.tpl" field=$content_security}}
|
||||
{{include file="field_checkbox.tpl" field=$embed_sslonly}}
|
||||
|
@ -36,8 +36,8 @@
|
||||
var udargs = ((page_load) ? "/load" : "");
|
||||
var bCmd = bParam_cmd + udargs + "?f=" ;
|
||||
if(bParam_uid) bCmd = bCmd + "&p=" + bParam_uid;
|
||||
if(bParam_cmin != 0) bCmd = bCmd + "&cmin=" + bParam_cmin;
|
||||
if(bParam_cmax != 99) bCmd = bCmd + "&cmax=" + bParam_cmax;
|
||||
if(bParam_cmin != (-1)) bCmd = bCmd + "&cmin=" + bParam_cmin;
|
||||
if(bParam_cmax != (-1)) bCmd = bCmd + "&cmax=" + bParam_cmax;
|
||||
if(bParam_gid != 0) { bCmd = bCmd + "&gid=" + bParam_gid; } else
|
||||
if(bParam_cid != 0) { bCmd = bCmd + "&cid=" + bParam_cid; }
|
||||
if(bParam_static != 0) { bCmd = bCmd + "&static=" + bParam_static; }
|
||||
|
@ -2,7 +2,7 @@
|
||||
<div id="pmenu-{{$id}}" class="pmenu{{if !$class}} widget{{else}} {{$class}}{{/if}}">
|
||||
{{/if}}
|
||||
{{if $menu.menu_desc}}
|
||||
<h3 class="pmenu-title">{{$menu.menu_desc}}{{if $edit}} <a href="mitem/{{$menu.menu_id}}" title="{{$edit}}"><i class="fa fa-pencil fakelink" title="{{$edit}}"></i></a>{{/if}}</h3>
|
||||
<h3 class="pmenu-title">{{$menu.menu_desc}}{{if $edit}} <a href="mitem/{{$nick}}/{{$menu.menu_id}}" title="{{$edit}}"><i class="fa fa-pencil fakelink" title="{{$edit}}"></i></a>{{/if}}</h3>
|
||||
{{/if}}
|
||||
{{if $items}}
|
||||
<ul class="pmenu-body{{if $wrap || !$class}} nav nav-pills flex-column{{elseif !$wrap || $class}} {{$class}}{{/if}}">
|
||||
|
Reference in New Issue
Block a user