streams/include/perm_upgrade.php
2021-12-03 14:01:39 +11:00

290 lines
11 KiB
PHP

<?php
function perm_limits_upgrade($channel)
{
set_pconfig($channel['channel_id'], 'perm_limits', 'view_stream', $channel['channel_r_stream']);
set_pconfig($channel['channel_id'], 'perm_limits', 'view_profile', $channel['channel_r_profile']);
set_pconfig($channel['channel_id'], 'perm_limits', 'view_contacts', $channel['channel_r_abook']);
set_pconfig($channel['channel_id'], 'perm_limits', 'view_storage', $channel['channel_r_storage']);
set_pconfig($channel['channel_id'], 'perm_limits', 'view_pages', $channel['channel_r_pages']);
set_pconfig($channel['channel_id'], 'perm_limits', 'send_stream', $channel['channel_w_stream']);
set_pconfig($channel['channel_id'], 'perm_limits', 'post_wall', $channel['channel_w_wall']);
set_pconfig($channel['channel_id'], 'perm_limits', 'post_comments', $channel['channel_w_comment']);
set_pconfig($channel['channel_id'], 'perm_limits', 'post_mail', $channel['channel_w_mail']);
set_pconfig($channel['channel_id'], 'perm_limits', 'post_like', $channel['channel_w_like']);
set_pconfig($channel['channel_id'], 'perm_limits', 'tag_deliver', $channel['channel_w_tagwall']);
set_pconfig($channel['channel_id'], 'perm_limits', 'chat', $channel['channel_w_chat']);
set_pconfig($channel['channel_id'], 'perm_limits', 'write_storage', $channel['channel_w_storage']);
set_pconfig($channel['channel_id'], 'perm_limits', 'write_pages', $channel['channel_w_pages']);
set_pconfig($channel['channel_id'], 'perm_limits', 'republish', $channel['channel_a_republish']);
set_pconfig($channel['channel_id'], 'perm_limits', 'delegate', $channel['channel_a_delegate']);
}
function perms_int_to_array($p)
{
$ret = [];
$ret['view_stream'] = (($p & PERMS_R_STREAM) ? 1 : 0);
$ret['view_profile'] = (($p & PERMS_R_PROFILE) ? 1 : 0);
$ret['view_contacts'] = (($p & PERMS_R_ABOOK) ? 1 : 0);
$ret['view_storage'] = (($p & PERMS_R_STORAGE) ? 1 : 0);
$ret['view_pages'] = (($p & PERMS_R_PAGES) ? 1 : 0);
$ret['send_stream'] = (($p & PERMS_W_STREAM) ? 1 : 0);
$ret['post_wall'] = (($p & PERMS_W_WALL) ? 1 : 0);
$ret['post_comments'] = (($p & PERMS_W_COMMENT) ? 1 : 0);
$ret['post_mail'] = (($p & PERMS_W_MAIL) ? 1 : 0);
$ret['post_like'] = (($p & PERMS_W_LIKE) ? 1 : 0);
$ret['tag_deliver'] = (($p & PERMS_W_TAGWALL) ? 1 : 0);
$ret['chat'] = (($p & PERMS_W_CHAT) ? 1 : 0);
$ret['write_storage'] = (($p & PERMS_W_STORAGE) ? 1 : 0);
$ret['write_pages'] = (($p & PERMS_W_PAGES) ? 1 : 0);
$ret['republish'] = (($p & PERMS_A_REPUBLISH) ? 1 : 0);
$ret['delegate'] = (($p & PERMS_A_DELEGATE) ? 1 : 0);
return $ret;
}
function autoperms_upgrade($channel)
{
$x = get_pconfig($channel['channel_id'], 'system', 'autoperms');
if (intval($x)) {
$y = perms_int_to_array($x);
if ($y) {
foreach ($y as $k => $v) {
set_pconfig($channel['channel_id'], 'autoperms', $k, $v);
}
}
}
}
function perm_abook_upgrade($abook)
{
$x = perms_int_to_array($abook['abook_their_perms']);
if ($x) {
foreach ($x as $k => $v) {
set_abconfig($abook['abook_channel'], $abook['abook_xchan'], 'their_perms', $k, $v);
}
}
$x = perms_int_to_array($abook['abook_my_perms']);
if ($x) {
foreach ($x as $k => $v) {
set_abconfig($abook['abook_channel'], $abook['abook_xchan'], 'my_perms', $k, $v);
}
}
}
function translate_channel_perms_outbound(&$channel)
{
$r = q(
"select * from pconfig where uid = %d and cat = 'perm_limits' ",
intval($channel['channel_id'])
);
if ($r) {
foreach ($r as $rr) {
if ($rr['k'] === 'view_stream') {
$channel['channel_r_stream'] = $rr['v'];
}
if ($rr['k'] === 'view_profile') {
$channel['channel_r_profile'] = $rr['v'];
}
if ($rr['k'] === 'view_contacts') {
$channel['channel_r_abook'] = $rr['v'];
}
if ($rr['k'] === 'view_storage') {
$channel['channel_r_storage'] = $rr['v'];
}
if ($rr['k'] === 'view_pages') {
$channel['channel_r_pages'] = $rr['v'];
}
if ($rr['k'] === 'send_stream') {
$channel['channel_w_stream'] = $rr['v'];
}
if ($rr['k'] === 'post_wall') {
$channel['channel_w_wall'] = $rr['v'];
}
if ($rr['k'] === 'post_comments') {
$channel['channel_w_comment'] = $rr['v'];
}
if ($rr['k'] === 'post_mail') {
$channel['channel_w_mail'] = $rr['v'];
}
if ($rr['k'] === 'post_like') {
$channel['channel_w_like'] = $rr['v'];
}
if ($rr['k'] === 'tag_deliver') {
$channel['channel_w_tagwall'] = $rr['v'];
}
if ($rr['k'] === 'chat') {
$channel['channel_w_chat'] = $rr['v'];
}
if ($rr['k'] === 'write_storage') {
$channel['channel_w_storage'] = $rr['v'];
}
if ($rr['k'] === 'write_pages') {
$channel['channel_w_pages'] = $rr['v'];
}
if ($rr['k'] === 'republish') {
$channel['channel_a_republish'] = $rr['v'];
}
if ($rr['k'] === 'delegate') {
$channel['channel_a_delegate'] = $rr['v'];
}
}
$channel['perm_limits'] = $r;
}
}
function translate_channel_perms_inbound($channel)
{
if ($channel['perm_limits']) {
foreach ($channel['perm_limits'] as $p) {
set_pconfig($channel['channel_id'], 'perm_limits', $p['k'], $p['v']);
}
} else {
perm_limits_upgrade($channel);
}
}
function translate_abook_perms_outbound(&$abook)
{
$my_perms = 0;
$their_perms = 0;
if (! $abook) {
return;
}
if (array_key_exists('abconfig', $abook) && is_array($abook['abconfig']) && $abook['abconfig']) {
foreach ($abook['abconfig'] as $p) {
if ($p['cat'] === 'their_perms') {
if ($p['k'] === 'view_stream' && intval($p['v'])) {
$their_perms += PERMS_R_STREAM;
}
if ($p['k'] === 'view_profile' && intval($p['v'])) {
$their_perms += PERMS_R_PROFILE;
}
if ($p['k'] === 'view_contacts' && intval($p['v'])) {
$their_perms += PERMS_R_ABOOK;
}
if ($p['k'] === 'view_storage' && intval($p['v'])) {
$their_perms += PERMS_R_STORAGE;
}
if ($p['k'] === 'view_pages' && intval($p['v'])) {
$their_perms += PERMS_R_PAGES;
}
if ($p['k'] === 'send_stream' && intval($p['v'])) {
$their_perms += PERMS_W_STREAM;
}
if ($p['k'] === 'post_wall' && intval($p['v'])) {
$their_perms += PERMS_W_WALL;
}
if ($p['k'] === 'post_comments' && intval($p['v'])) {
$their_perms += PERMS_W_COMMENT;
}
if ($p['k'] === 'post_mail' && intval($p['v'])) {
$their_perms += PERMS_W_MAIL;
}
if ($p['k'] === 'post_like' && intval($p['v'])) {
$their_perms += PERMS_W_LIKE;
}
if ($p['k'] === 'tag_deliver' && intval($p['v'])) {
$their_perms += PERMS_W_TAGWALL;
}
if ($p['k'] === 'chat' && intval($p['v'])) {
$their_perms += PERMS_W_CHAT;
}
if ($p['k'] === 'write_storage' && intval($p['v'])) {
$their_perms += PERMS_W_STORAGE;
}
if ($p['k'] === 'write_pages' && intval($p['v'])) {
$their_perms += PERMS_W_PAGES;
}
if ($p['k'] === 'republish' && intval($p['v'])) {
$their_perms += PERMS_A_REPUBLISH;
}
if ($p['k'] === 'delegate' && intval($p['v'])) {
$their_perms += PERMS_A_DELEGATE;
}
}
if ($p['cat'] === 'my_perms') {
if ($p['k'] === 'view_stream' && intval($p['v'])) {
$my_perms += PERMS_R_STREAM;
}
if ($p['k'] === 'view_profile' && intval($p['v'])) {
$my_perms += PERMS_R_PROFILE;
}
if ($p['k'] === 'view_contacts' && intval($p['v'])) {
$my_perms += PERMS_R_ABOOK;
}
if ($p['k'] === 'view_storage' && intval($p['v'])) {
$my_perms += PERMS_R_STORAGE;
}
if ($p['k'] === 'view_pages' && intval($p['v'])) {
$my_perms += PERMS_R_PAGES;
}
if ($p['k'] === 'send_stream' && intval($p['v'])) {
$my_perms += PERMS_W_STREAM;
}
if ($p['k'] === 'post_wall' && intval($p['v'])) {
$my_perms += PERMS_W_WALL;
}
if ($p['k'] === 'post_comments' && intval($p['v'])) {
$my_perms += PERMS_W_COMMENT;
}
if ($p['k'] === 'post_mail' && intval($p['v'])) {
$my_perms += PERMS_W_MAIL;
}
if ($p['k'] === 'post_like' && intval($p['v'])) {
$my_perms += PERMS_W_LIKE;
}
if ($p['k'] === 'tag_deliver' && intval($p['v'])) {
$my_perms += PERMS_W_TAGWALL;
}
if ($p['k'] === 'chat' && intval($p['v'])) {
$my_perms += PERMS_W_CHAT;
}
if ($p['k'] === 'write_storage' && intval($p['v'])) {
$my_perms += PERMS_W_STORAGE;
}
if ($p['k'] === 'write_pages' && intval($p['v'])) {
$my_perms += PERMS_W_PAGES;
}
if ($p['k'] === 'republish' && intval($p['v'])) {
$my_perms += PERMS_A_REPUBLISH;
}
if ($p['k'] === 'delegate' && intval($p['v'])) {
$my_perms += PERMS_A_DELEGATE;
}
}
}
$abook['abook_their_perms'] = $their_perms;
$abook['abook_my_perms'] = $my_perms;
}
}
function translate_abook_perms_inbound($channel, $abook)
{
$new_perms = false;
$abook['abook_channel'] = $channel['channel_id'];
if (array_key_exists('abconfig', $abook) && is_array($abook['abconfig']) && $abook['abconfig']) {
foreach ($abook['abconfig'] as $p) {
if ($p['cat'] == 'their_perms' || $p['cat'] == 'my_perms') {
$new_perms = true;
break;
}
}
}
if ($new_perms == false) {
perm_abook_upgrade($abook);
}
}