Merge branch 'dev' into perms
This commit is contained in:
commit
6424bac47c
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
if(class_exists('PermissionDescription')) return;
|
namespace Zotlabs\Lib;
|
||||||
|
|
||||||
require_once("include/permissions.php");
|
require_once("include/permissions.php");
|
||||||
require_once("include/language.php");
|
require_once("include/language.php");
|
@ -9,7 +9,6 @@ require_once('include/security.php');
|
|||||||
require_once('include/conversation.php');
|
require_once('include/conversation.php');
|
||||||
require_once('include/acl_selectors.php');
|
require_once('include/acl_selectors.php');
|
||||||
require_once('include/permissions.php');
|
require_once('include/permissions.php');
|
||||||
require_once('include/PermissionDescription.php');
|
|
||||||
|
|
||||||
class Channel extends \Zotlabs\Web\Controller {
|
class Channel extends \Zotlabs\Web\Controller {
|
||||||
|
|
||||||
@ -133,7 +132,7 @@ class Channel extends \Zotlabs\Web\Controller {
|
|||||||
'default_location' => (($is_owner) ? \App::$profile['channel_location'] : ''),
|
'default_location' => (($is_owner) ? \App::$profile['channel_location'] : ''),
|
||||||
'nickname' => \App::$profile['channel_address'],
|
'nickname' => \App::$profile['channel_address'],
|
||||||
'lockstate' => (((strlen(\App::$profile['channel_allow_cid'])) || (strlen(\App::$profile['channel_allow_gid'])) || (strlen(\App::$profile['channel_deny_cid'])) || (strlen(\App::$profile['channel_deny_gid']))) ? 'lock' : 'unlock'),
|
'lockstate' => (((strlen(\App::$profile['channel_allow_cid'])) || (strlen(\App::$profile['channel_allow_gid'])) || (strlen(\App::$profile['channel_deny_cid'])) || (strlen(\App::$profile['channel_deny_gid']))) ? 'lock' : 'unlock'),
|
||||||
'acl' => (($is_owner) ? populate_acl($channel_acl,true, \PermissionDescription::fromGlobalPermission('view_stream'), get_post_aclDialogDescription(), 'acl_dialog_post') : ''),
|
'acl' => (($is_owner) ? populate_acl($channel_acl,true, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_stream'), get_post_aclDialogDescription(), 'acl_dialog_post') : ''),
|
||||||
'showacl' => (($is_owner) ? 'yes' : ''),
|
'showacl' => (($is_owner) ? 'yes' : ''),
|
||||||
'bang' => '',
|
'bang' => '',
|
||||||
'visitor' => (($is_owner || $observer) ? true : false),
|
'visitor' => (($is_owner || $observer) ? true : false),
|
||||||
|
@ -4,7 +4,6 @@ namespace Zotlabs\Module;
|
|||||||
require_once('include/channel.php');
|
require_once('include/channel.php');
|
||||||
require_once('include/acl_selectors.php');
|
require_once('include/acl_selectors.php');
|
||||||
require_once('include/conversation.php');
|
require_once('include/conversation.php');
|
||||||
require_once('include/PermissionDescription.php');
|
|
||||||
|
|
||||||
|
|
||||||
class Editwebpage extends \Zotlabs\Web\Controller {
|
class Editwebpage extends \Zotlabs\Web\Controller {
|
||||||
@ -151,7 +150,7 @@ class Editwebpage extends \Zotlabs\Web\Controller {
|
|||||||
'body' => undo_post_tagging($itm[0]['body']),
|
'body' => undo_post_tagging($itm[0]['body']),
|
||||||
'post_id' => $post_id,
|
'post_id' => $post_id,
|
||||||
'visitor' => ($is_owner) ? true : false,
|
'visitor' => ($is_owner) ? true : false,
|
||||||
'acl' => populate_acl($itm[0],false,\PermissionDescription::fromGlobalPermission('view_pages')),
|
'acl' => populate_acl($itm[0],false,\Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_pages')),
|
||||||
'showacl' => ($is_owner) ? true : false,
|
'showacl' => ($is_owner) ? true : false,
|
||||||
'mimetype' => $mimetype,
|
'mimetype' => $mimetype,
|
||||||
'mimeselect' => true,
|
'mimeselect' => true,
|
||||||
|
@ -6,7 +6,6 @@ require_once('include/bbcode.php');
|
|||||||
require_once('include/datetime.php');
|
require_once('include/datetime.php');
|
||||||
require_once('include/event.php');
|
require_once('include/event.php');
|
||||||
require_once('include/items.php');
|
require_once('include/items.php');
|
||||||
require_once('include/PermissionDescription.php');
|
|
||||||
|
|
||||||
|
|
||||||
class Events extends \Zotlabs\Web\Controller {
|
class Events extends \Zotlabs\Web\Controller {
|
||||||
@ -471,7 +470,7 @@ class Events extends \Zotlabs\Web\Controller {
|
|||||||
'$permissions' => t('Permission settings'),
|
'$permissions' => t('Permission settings'),
|
||||||
// populating the acl dialog was a permission description from view_stream because Cal.php, which
|
// populating the acl dialog was a permission description from view_stream because Cal.php, which
|
||||||
// displays events, says "since we don't currently have an event permission - use the stream permission"
|
// displays events, says "since we don't currently have an event permission - use the stream permission"
|
||||||
'$acl' => (($orig_event['event_xchan']) ? '' : populate_acl(((x($orig_event)) ? $orig_event : $perm_defaults), false, \PermissionDescription::fromGlobalPermission('view_stream'))),
|
'$acl' => (($orig_event['event_xchan']) ? '' : populate_acl(((x($orig_event)) ? $orig_event : $perm_defaults), false, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_stream'))),
|
||||||
'$submit' => t('Submit'),
|
'$submit' => t('Submit'),
|
||||||
'$advanced' => t('Advanced Options')
|
'$advanced' => t('Advanced Options')
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@ namespace Zotlabs\Module;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
require_once('include/attach.php');
|
require_once('include/attach.php');
|
||||||
require_once('include/PermissionDescription.php');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -134,7 +133,7 @@ class Filestorage extends \Zotlabs\Web\Controller {
|
|||||||
$cloudpath = get_cloudpath($f) . (intval($f['is_dir']) ? '?f=&davguest=1' : '');
|
$cloudpath = get_cloudpath($f) . (intval($f['is_dir']) ? '?f=&davguest=1' : '');
|
||||||
$parentpath = get_parent_cloudpath($channel['channel_id'], $channel['channel_address'], $f['hash']);
|
$parentpath = get_parent_cloudpath($channel['channel_id'], $channel['channel_address'], $f['hash']);
|
||||||
|
|
||||||
$aclselect_e = populate_acl($f, false, \PermissionDescription::fromGlobalPermission('view_storage'));
|
$aclselect_e = populate_acl($f, false, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_storage'));
|
||||||
$is_a_dir = (intval($f['is_dir']) ? true : false);
|
$is_a_dir = (intval($f['is_dir']) ? true : false);
|
||||||
|
|
||||||
$lockstate = (($f['allow_cid'] || $f['allow_gid'] || $f['deny_cid'] || $f['deny_gid']) ? 'lock' : 'unlock');
|
$lockstate = (($f['allow_cid'] || $f['allow_gid'] || $f['deny_cid'] || $f['deny_gid']) ? 'lock' : 'unlock');
|
||||||
|
@ -6,8 +6,6 @@ require_once('include/group.php');
|
|||||||
require_once('include/contact_widgets.php');
|
require_once('include/contact_widgets.php');
|
||||||
require_once('include/conversation.php');
|
require_once('include/conversation.php');
|
||||||
require_once('include/acl_selectors.php');
|
require_once('include/acl_selectors.php');
|
||||||
require_once('include/PermissionDescription.php');
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Network extends \Zotlabs\Web\Controller {
|
class Network extends \Zotlabs\Web\Controller {
|
||||||
@ -171,7 +169,7 @@ class Network extends \Zotlabs\Web\Controller {
|
|||||||
'default_location' => $channel['channel_location'],
|
'default_location' => $channel['channel_location'],
|
||||||
'nickname' => $channel['channel_address'],
|
'nickname' => $channel['channel_address'],
|
||||||
'lockstate' => (($private_editing || $channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'),
|
'lockstate' => (($private_editing || $channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'),
|
||||||
'acl' => populate_acl((($private_editing) ? $def_acl : $channel_acl), true, \PermissionDescription::fromGlobalPermission('view_stream'), get_post_aclDialogDescription(), 'acl_dialog_post'),
|
'acl' => populate_acl((($private_editing) ? $def_acl : $channel_acl), true, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_stream'), get_post_aclDialogDescription(), 'acl_dialog_post'),
|
||||||
'bang' => (($private_editing) ? '!' : ''),
|
'bang' => (($private_editing) ? '!' : ''),
|
||||||
'visitor' => true,
|
'visitor' => true,
|
||||||
'profile_uid' => local_channel(),
|
'profile_uid' => local_channel(),
|
||||||
|
@ -9,8 +9,6 @@ require_once('include/bbcode.php');
|
|||||||
require_once('include/security.php');
|
require_once('include/security.php');
|
||||||
require_once('include/attach.php');
|
require_once('include/attach.php');
|
||||||
require_once('include/text.php');
|
require_once('include/text.php');
|
||||||
require_once('include/PermissionDescription.php');
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Photos extends \Zotlabs\Web\Controller {
|
class Photos extends \Zotlabs\Web\Controller {
|
||||||
@ -633,7 +631,7 @@ class Photos extends \Zotlabs\Web\Controller {
|
|||||||
$lockstate = (($acl->is_private()) ? 'lock' : 'unlock');
|
$lockstate = (($acl->is_private()) ? 'lock' : 'unlock');
|
||||||
}
|
}
|
||||||
|
|
||||||
$aclselect = (($_is_owner) ? populate_acl($channel_acl,false, \PermissionDescription::fromGlobalPermission('view_storage')) : '');
|
$aclselect = (($_is_owner) ? populate_acl($channel_acl,false, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_storage')) : '');
|
||||||
|
|
||||||
// this is wrong but is to work around an issue with js_upload wherein it chokes if these variables
|
// this is wrong but is to work around an issue with js_upload wherein it chokes if these variables
|
||||||
// don't exist. They really should be set to a parseable representation of the channel's default permissions
|
// don't exist. They really should be set to a parseable representation of the channel's default permissions
|
||||||
@ -1023,7 +1021,7 @@ class Photos extends \Zotlabs\Web\Controller {
|
|||||||
if($can_post) {
|
if($can_post) {
|
||||||
$album_e = $ph[0]['album'];
|
$album_e = $ph[0]['album'];
|
||||||
$caption_e = $ph[0]['description'];
|
$caption_e = $ph[0]['description'];
|
||||||
$aclselect_e = (($_is_owner) ? populate_acl($ph[0], true, \PermissionDescription::fromGlobalPermission('view_storage')) : '');
|
$aclselect_e = (($_is_owner) ? populate_acl($ph[0], true, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_storage')) : '');
|
||||||
$albums = ((array_key_exists('albums', \App::$data)) ? \App::$data['albums'] : photos_albums_list(\App::$data['channel'],\App::$data['observer']));
|
$albums = ((array_key_exists('albums', \App::$data)) ? \App::$data['albums'] : photos_albums_list(\App::$data['channel'],\App::$data['observer']));
|
||||||
|
|
||||||
$_SESSION['album_return'] = bin2hex($ph[0]['album']);
|
$_SESSION['album_return'] = bin2hex($ph[0]['album']);
|
||||||
|
@ -7,7 +7,6 @@ require_once('include/items.php');
|
|||||||
require_once('include/taxonomy.php');
|
require_once('include/taxonomy.php');
|
||||||
require_once('include/conversation.php');
|
require_once('include/conversation.php');
|
||||||
require_once('include/zot.php');
|
require_once('include/zot.php');
|
||||||
require_once('include/PermissionDescription.php');
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* remote post
|
* remote post
|
||||||
@ -116,7 +115,7 @@ class Rpost extends \Zotlabs\Web\Controller {
|
|||||||
'default_location' => $channel['channel_location'],
|
'default_location' => $channel['channel_location'],
|
||||||
'nickname' => $channel['channel_address'],
|
'nickname' => $channel['channel_address'],
|
||||||
'lockstate' => (($acl->is_private()) ? 'lock' : 'unlock'),
|
'lockstate' => (($acl->is_private()) ? 'lock' : 'unlock'),
|
||||||
'acl' => populate_acl($channel_acl, true, \PermissionDescription::fromGlobalPermission('view_stream'), get_post_aclDialogDescription(), 'acl_dialog_post'),
|
'acl' => populate_acl($channel_acl, true, Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_stream'), get_post_aclDialogDescription(), 'acl_dialog_post'),
|
||||||
'bang' => '',
|
'bang' => '',
|
||||||
'visitor' => true,
|
'visitor' => true,
|
||||||
'profile_uid' => local_channel(),
|
'profile_uid' => local_channel(),
|
||||||
|
@ -2,8 +2,6 @@
|
|||||||
namespace Zotlabs\Module; /** @file */
|
namespace Zotlabs\Module; /** @file */
|
||||||
|
|
||||||
require_once('include/zot.php');
|
require_once('include/zot.php');
|
||||||
require_once('include/PermissionDescription.php');
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Settings extends \Zotlabs\Web\Controller {
|
class Settings extends \Zotlabs\Web\Controller {
|
||||||
@ -1060,7 +1058,7 @@ class Settings extends \Zotlabs\Web\Controller {
|
|||||||
'$maxreq' => array('maxreq', t('Maximum Friend Requests/Day:'), intval($channel['channel_max_friend_req']) , t('May reduce spam activity')),
|
'$maxreq' => array('maxreq', t('Maximum Friend Requests/Day:'), intval($channel['channel_max_friend_req']) , t('May reduce spam activity')),
|
||||||
'$permissions' => t('Default Post and Publish Permissions'),
|
'$permissions' => t('Default Post and Publish Permissions'),
|
||||||
'$permdesc' => t("\x28click to open/close\x29"),
|
'$permdesc' => t("\x28click to open/close\x29"),
|
||||||
'$aclselect' => populate_acl($perm_defaults, false, \PermissionDescription::fromDescription(t('Use my default audience setting for the type of object published'))),
|
'$aclselect' => populate_acl($perm_defaults, false, \Zotlabs\Lib\PermissionDescription::fromDescription(t('Use my default audience setting for the type of object published'))),
|
||||||
'$suggestme' => $suggestme,
|
'$suggestme' => $suggestme,
|
||||||
'$group_select' => $group_select,
|
'$group_select' => $group_select,
|
||||||
'$role' => array('permissions_role' , t('Channel permissions category:'), $permissions_role, '', get_roles()),
|
'$role' => array('permissions_role' , t('Channel permissions category:'), $permissions_role, '', get_roles()),
|
||||||
|
@ -4,7 +4,6 @@ namespace Zotlabs\Module;
|
|||||||
require_once('include/channel.php');
|
require_once('include/channel.php');
|
||||||
require_once('include/conversation.php');
|
require_once('include/conversation.php');
|
||||||
require_once('include/acl_selectors.php');
|
require_once('include/acl_selectors.php');
|
||||||
require_once('include/PermissionDescription.php');
|
|
||||||
|
|
||||||
|
|
||||||
class Webpages extends \Zotlabs\Web\Controller {
|
class Webpages extends \Zotlabs\Web\Controller {
|
||||||
@ -105,7 +104,7 @@ class Webpages extends \Zotlabs\Web\Controller {
|
|||||||
'is_owner' => true,
|
'is_owner' => true,
|
||||||
'nickname' => \App::$profile['channel_address'],
|
'nickname' => \App::$profile['channel_address'],
|
||||||
'lockstate' => (($channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'),
|
'lockstate' => (($channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'),
|
||||||
'acl' => (($is_owner) ? populate_acl($channel_acl,false, \PermissionDescription::fromGlobalPermission('view_pages')) : ''),
|
'acl' => (($is_owner) ? populate_acl($channel_acl,false, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_pages')) : ''),
|
||||||
'showacl' => (($is_owner) ? true : false),
|
'showacl' => (($is_owner) ? true : false),
|
||||||
'visitor' => true,
|
'visitor' => true,
|
||||||
'hide_location' => true,
|
'hide_location' => true,
|
||||||
|
@ -7,8 +7,6 @@
|
|||||||
* @package acl_selectors
|
* @package acl_selectors
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once("include/PermissionDescription.php");
|
|
||||||
|
|
||||||
function group_select($selname,$selclass,$preselected = false,$size = 4) {
|
function group_select($selname,$selclass,$preselected = false,$size = 4) {
|
||||||
|
|
||||||
$o = '';
|
$o = '';
|
||||||
@ -231,7 +229,7 @@ function populate_acl($defaults = null,$show_jotnets = true, $emptyACL_descripti
|
|||||||
if(! $emptyACL_description) {
|
if(! $emptyACL_description) {
|
||||||
$showall_caption = t('Visible to your default audience');
|
$showall_caption = t('Visible to your default audience');
|
||||||
|
|
||||||
} else if (is_a($emptyACL_description, 'PermissionDescription')) {
|
} else if (is_a($emptyACL_description, '\\Zotlabs\\Lib\\PermissionDescription')) {
|
||||||
$showall_caption = $emptyACL_description->get_permission_description();
|
$showall_caption = $emptyACL_description->get_permission_description();
|
||||||
$showall_origin = (($role === 'custom') ? $emptyACL_description->get_permission_origin_description() : '');
|
$showall_origin = (($role === 'custom') ? $emptyACL_description->get_permission_origin_description() : '');
|
||||||
$showall_icon = $emptyACL_description->get_permission_icon();
|
$showall_icon = $emptyACL_description->get_permission_icon();
|
||||||
|
@ -4154,32 +4154,19 @@ function update_remote_id($channel,$post_id,$webpage,$pagetitle,$namespace,$remo
|
|||||||
}
|
}
|
||||||
|
|
||||||
if($page_type) {
|
if($page_type) {
|
||||||
|
|
||||||
// store page info as an alternate message_id so we can access it via
|
// store page info as an alternate message_id so we can access it via
|
||||||
// https://sitename/page/$channelname/$pagetitle
|
// https://sitename/page/$channelname/$pagetitle
|
||||||
// if no pagetitle was given or it couldn't be transliterated into a url, use the first
|
// if no pagetitle was given or it couldn't be transliterated into a url, use the first
|
||||||
// sixteen bytes of the mid - which makes the link portable and not quite as daunting
|
// sixteen bytes of the mid - which makes the link portable and not quite as daunting
|
||||||
// as the entire mid. If it were the post_id the link would be less portable.
|
// as the entire mid. If it were the post_id the link would be less portable.
|
||||||
|
|
||||||
$r = q("select * from item_id where iid = %d and uid = %d and service = '%s' limit 1",
|
\Zotlabs\Lib\IConfig::Set(
|
||||||
intval($post_id),
|
intval($post_id),
|
||||||
intval($channel['channel_id']),
|
'system',
|
||||||
dbesc($page_type)
|
$page_type,
|
||||||
|
($pagetitle) ? $pagetitle : substr($mid,0,16),
|
||||||
|
false
|
||||||
);
|
);
|
||||||
if($r) {
|
|
||||||
q("update item_id set sid = '%s' where id = %d",
|
|
||||||
dbesc(($pagetitle) ? $pagetitle : substr($mid,0,16)),
|
|
||||||
intval($r[0]['id'])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
q("insert into item_id ( iid, uid, sid, service ) values ( %d, %d, '%s','%s' )",
|
|
||||||
intval($post_id),
|
|
||||||
intval($channel['channel_id']),
|
|
||||||
dbesc(($pagetitle) ? $pagetitle : substr($mid,0,16)),
|
|
||||||
dbesc($page_type)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@ function change_channel($change_channel) {
|
|||||||
);
|
);
|
||||||
if($x) {
|
if($x) {
|
||||||
$_SESSION['my_url'] = $x[0]['xchan_url'];
|
$_SESSION['my_url'] = $x[0]['xchan_url'];
|
||||||
$_SESSION['my_address'] = $r[0]['channel_address'] . '@' . substr(z_root(), strpos(z_root(), '://') + 3);
|
$_SESSION['my_address'] = $r[0]['channel_address'] . '@' . App::get_hostname();
|
||||||
|
|
||||||
App::set_observer($x[0]);
|
App::set_observer($x[0]);
|
||||||
App::set_perms(get_all_perms(local_channel(), $hash));
|
App::set_perms(get_all_perms(local_channel(), $hash));
|
||||||
|
@ -2952,7 +2952,12 @@ function build_sync_packet($uid = 0, $packet = null, $groups_changed = false) {
|
|||||||
if($x['hubloc_host'] == App::get_hostname())
|
if($x['hubloc_host'] == App::get_hostname())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
$synchubs[] = $x;
|
$y = q("select site_dead from site where site_url = '%s' limit 1",
|
||||||
|
dbesc($x['hubloc_url'])
|
||||||
|
);
|
||||||
|
|
||||||
|
if((! $y) || ($y[0]['site_dead'] == 0))
|
||||||
|
$synchubs[] = $x;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(! $synchubs)
|
if(! $synchubs)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `abconfig` (
|
CREATE TABLE IF NOT EXISTS `abconfig` (
|
||||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
`chan` int(10) unsigned NOT NULL DEFAULT '',
|
`chan` int(10) unsigned NOT NULL DEFAULT '0',
|
||||||
`xchan` char(255) NOT NULL DEFAULT '',
|
`xchan` char(255) NOT NULL DEFAULT '',
|
||||||
`cat` char(255) NOT NULL DEFAULT '',
|
`cat` char(255) NOT NULL DEFAULT '',
|
||||||
`k` char(255) NOT NULL DEFAULT '',
|
`k` char(255) NOT NULL DEFAULT '',
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
CREATE TABLE "abconfig" (
|
CREATE TABLE "abconfig" (
|
||||||
"id" serial NOT NULL,
|
"id" serial NOT NULL,
|
||||||
"chan" bigint NOT NULL,
|
"chan" bigint NOT NULL DEFAULT '0',
|
||||||
"xchan" text NOT NULL,
|
"xchan" text NOT NULL,
|
||||||
"cat" text NOT NULL,
|
"cat" text NOT NULL,
|
||||||
"k" text NOT NULL,
|
"k" text NOT NULL,
|
||||||
|
Reference in New Issue
Block a user