]> git.mxchange.org Git - friendica.git/commitdiff
more private forums, default privacy group for new contacts
authorfriendica <info@friendica.com>
Fri, 18 May 2012 05:44:52 +0000 (22:44 -0700)
committerfriendica <info@friendica.com>
Fri, 18 May 2012 05:44:52 +0000 (22:44 -0700)
13 files changed:
boot.php
database.sql
include/diaspora.php
include/group.php
include/items.php
include/notifier.php
mod/dfrn_request.php
mod/follow.php
mod/settings.php
update.php
view/group_selection.tpl [new file with mode: 0644]
view/pagetypes.tpl
view/settings.tpl

index 4032f26626c5fbba3eaf608afadf49ba97cd1c75..95f296d414d817fa29f780fd20d9e8d8701dc34b 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -11,7 +11,7 @@ require_once('include/cache.php');
 define ( 'FRIENDICA_PLATFORM',     'Friendica');
 define ( 'FRIENDICA_VERSION',      '3.0.1345' );
 define ( 'DFRN_PROTOCOL_VERSION',  '2.23'    );
-define ( 'DB_UPDATE_VERSION',      1143      );
+define ( 'DB_UPDATE_VERSION',      1144      );
 
 define ( 'EOL',                    "<br />\r\n"     );
 define ( 'ATOM_TIME',              'Y-m-d\TH:i:s\Z' );
index cf086796a66f4538b8580f4269607b7f1d203583..ed97cd4aa7edd1820e571f4f9741e5a859407031 100644 (file)
@@ -1028,6 +1028,7 @@ CREATE TABLE IF NOT EXISTS `user` (
   `account_expires_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
   `expire_notification_sent` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
   `service_class` char(32) NOT NULL,
+  `def_gid` int(11) NOT NULL DEFAULT '0',
   `allow_cid` mediumtext NOT NULL,
   `allow_gid` mediumtext NOT NULL,
   `deny_cid` mediumtext NOT NULL,
index 2051de5fc88b39d426d3c5099a72f7e21b7d8002..3f2cdf8e4691c34a721b7b86fe4947cda909d271 100644 (file)
@@ -569,6 +569,14 @@ function diaspora_request($importer,$xml) {
                return;
        }
 
+       $g = q("select def_gid from user where uid = %d limit 1",
+               intval($importer['uid'])
+       );
+       if($g && intval($g[0]['def_gid'])) {
+               require_once('include/group.php');
+               group_add_member($importer['uid'],'',$contact_record['id'],$g[0]['def_gid']);
+       }
+
        if($importer['page-flags'] == PAGE_NORMAL) {
 
                $hash = random_string() . (string) time();   // Generate a confirm_key
index edb547de6d8f00ea31561efebf63c7a3b84dbf4c..cc6540b31b97f9731cfdaf13385cfe1505ff7692 100644 (file)
@@ -97,8 +97,9 @@ function group_rmv_member($uid,$name,$member) {
 }
 
 
-function group_add_member($uid,$name,$member) {
-       $gid = group_byname($uid,$name);
+function group_add_member($uid,$name,$member,$gid = 0) {
+       if(! $gid)
+               $gid = group_byname($uid,$name);
        if((! $gid) || (! $uid) || (! $member))
                return false;
 
@@ -154,6 +155,29 @@ function group_public_members($gid) {
 }
 
 
+function mini_group_select($uid,$gid = 0) {
+       
+       $grps = array();
+       $o = '';
+
+       $r = q("SELECT * FROM `group` WHERE `deleted` = 0 AND `uid` = %d ORDER BY `name` ASC",
+               intval($uid)
+       );
+       $grps[] = array('name' => '', 'id' => '0', 'selected' => '');
+       if(count($r)) {
+               foreach($r as $rr) {
+                       $grps[] = array('name' => $rr['name'], 'id' => $rr['id'], 'selected' => (($gid == $rr['id']) ? 'true' : ''));
+               }
+
+       }
+       logger('groups: ' . print_r($grps,true));
+
+       $o = replace_macros(get_markup_template('group_selection.tpl'), array('$groups' => $grps ));
+       return $o;
+}
+
+
+
 
 function group_side($every="contacts",$each="group",$edit = false, $group_id = 0, $cid = 0) {
 
index ac7580cc1510b5947a33184faa5ce03e69a6256c..91c9056fe872084e1d050d3dc7f146d3bf5fd41a 100644 (file)
@@ -988,33 +988,31 @@ function tag_deliver($uid,$item_id) {
                }
        }
 
-       if((! $mention) && (! $prvgroup))
+       if(! $mention)
                return;
 
-       if($mention) {
+       // send a notification
+
+       require_once('include/enotify.php');
+       notification(array(
+               'type'         => NOTIFY_TAGSELF,
+               'notify_flags' => $u[0]['notify-flags'],
+               'language'     => $u[0]['language'],
+               'to_name'      => $u[0]['username'],
+               'to_email'     => $u[0]['email'],
+               'uid'          => $u[0]['uid'],
+               'item'         => $item,
+               'link'         => $a->get_baseurl() . '/display/' . $u[0]['nickname'] . '/' . $item['id'],
+               'source_name'  => $item['author-name'],
+               'source_link'  => $item['author-link'],
+               'source_photo' => $item['author-avatar'],
+               'verb'         => ACTIVITY_TAG,
+               'otype'        => 'item'
+       ));
 
-               // send a notification
+       if((! $community_page) && (! prvgroup))
+               return;
 
-               require_once('include/enotify.php');
-               notification(array(
-                       'type'         => NOTIFY_TAGSELF,
-                       'notify_flags' => $u[0]['notify-flags'],
-                       'language'     => $u[0]['language'],
-                       'to_name'      => $u[0]['username'],
-                       'to_email'     => $u[0]['email'],
-                       'uid'          => $u[0]['uid'],
-                       'item'         => $item,
-                       'link'         => $a->get_baseurl() . '/display/' . $u[0]['nickname'] . '/' . $item['id'],
-                       'source_name'  => $item['author-name'],
-                       'source_link'  => $item['author-link'],
-                       'source_photo' => $item['author-avatar'],
-                       'verb'         => ACTIVITY_TAG,
-                       'otype'        => 'item'
-               ));
-
-               if(! $community_page)
-                       return;
-       }
 
        // tgroup delivery - setup a second delivery chain
        // prevent delivery looping - only proceed
@@ -1036,8 +1034,11 @@ function tag_deliver($uid,$item_id) {
 
        $private = ($u[0]['allow_cid'] || $u[0]['allow_gid'] || $u[0]['deny_cid'] || $u[0]['deny_gid']) ? 1 : 0;
 
-       q("update item set wall = 1, origin = 1, forum_mode = 1, `owner-name` = '%s', `owner-link` = '%s', `owner-avatar` = '%s', 
+       $forum_mode = (($prvgroup) ? 2 : 1);
+
+       q("update item set wall = 1, origin = 1, forum_mode = %d, `owner-name` = '%s', `owner-link` = '%s', `owner-avatar` = '%s', 
                `private` = %d, `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s'  where id = %d limit 1",
+               intval($forum_mode),
                dbesc($c[0]['name']),
                dbesc($c[0]['url']),
                dbesc($c[0]['thumb']),
@@ -2716,6 +2717,12 @@ function new_follower($importer,$contact,$datarray,$item,$sharing = false) {
                );
                $a = get_app();
                if(count($r)) {
+
+                       if(intval($r[0]['def_gid'])) {
+                               require_once('include/group.php');
+                               group_add_member($r[0]['uid'],'',$contact_record['id'],$r[0]['def_gid']);
+                       }
+
                        if(($r[0]['notify-flags'] & NOTIFY_INTRO) && ($r[0]['page-flags'] == PAGE_NORMAL)) {
                                $email_tpl = get_intltext_template('follow_notify_eml.tpl');
                                $email = replace_macros($email_tpl, array(
index 6ce281372b1c0afdb5f4b7073a996ea1a5ccac00..ea4a1bea84fc0f50ac24e586020c8673f4fb1cfb 100644 (file)
@@ -220,7 +220,7 @@ function notifier_run($argv, $argc){
                }
 
 
-               if(($cmd === 'uplink') && (intval($parent['forum_mode'])) && (! $top_level)) {
+               if(($cmd === 'uplink') && (intval($parent['forum_mode']) == 1) && (! $top_level)) {
                        $relay_to_owner = true;                 
                } 
 
@@ -265,10 +265,10 @@ function notifier_run($argv, $argc){
                        $deny_people  = expand_acl($parent['deny_cid']);
                        $deny_groups  = expand_groups(expand_acl($parent['deny_gid']));
 
-                       // if our parent is a forum, uplink to the origional author causing
-                       // a delivery fork
+                       // if our parent is a public forum (forum_mode == 1), uplink to the origional author causing
+                       // a delivery fork. private groups (forum_mode == 2) do not uplink
 
-                       if(intval($parent['forum_mode']) && (! $top_level) && ($cmd !== 'uplink')) {
+                       if((intval($parent['forum_mode']) == 1) && (! $top_level) && ($cmd !== 'uplink')) {
                                proc_run('php','include/notifier','uplink',$item_id);
                        }
 
index 2169c494c31c1bfab6be591604947089f4f9c2ef..b809929d7e14b4b506348b3200b437534b35e63f 100644 (file)
@@ -370,6 +370,14 @@ function dfrn_request_post(&$a) {
                        if(count($r)) {
                                $contact_id = $r[0]['id'];
 
+                               $g = q("select def_gid from user where uid = %d limit 1",
+                                       intval($uid)
+                               );
+                               if($g && intval($g[0]['def_gid'])) {
+                                       require_once('include/group.php');
+                                       group_add_member($uid,'',$contact_id,$g[0]['def_gid']);
+                               }
+
                                $photo = avatar_img($addr);
 
                                $r = q("UPDATE `contact` SET 
index 4a7f99bf09f3d1eb61d7bd20ab905265dcbdc55d..cdecd5f2a2db3557f73e59697a4ddeedfcccd69a 100644 (file)
@@ -109,6 +109,7 @@ function follow_init(&$a) {
                dbesc($ret['poll'])
        );                      
 
+
        if(count($r)) {
                // update contact
                if($r[0]['rel'] == CONTACT_IS_FOLLOWER || ($network === NETWORK_DIASPORA && $r[0]['rel'] == CONTACT_IS_SHARING)) {
@@ -165,6 +166,15 @@ function follow_init(&$a) {
        $contact = $r[0];
        $contact_id  = $r[0]['id'];
 
+
+       $g = q("select def_gid from user where uid = %d limit 1",
+               intval($uid)
+       );
+       if($g && intval($g[0]['def_gid'])) {
+               require_once('include/group.php');
+               group_add_member($uid,'',$contact_id,$g[0]['def_gid']);
+       }
+
        require_once("Photo.php");
 
        $photos = import_profile_photo($ret['photo'],$uid,$contact_id);
index 5f5b2ab2e97e1831740a8446b18e1dd4ac16f071..23dde3f2a3176f6cbcf3cd89e93ad3fca391415a 100644 (file)
@@ -330,6 +330,7 @@ function settings_post(&$a) {
        $openid           = ((x($_POST,'openid_url')) ? notags(trim($_POST['openid_url']))   : '');
        $maxreq           = ((x($_POST,'maxreq'))     ? intval($_POST['maxreq'])             : 0);
        $expire           = ((x($_POST,'expire'))     ? intval($_POST['expire'])             : 0);
+       $def_gid          = ((x($_POST,'group-selection')) ? intval($_POST['group-selection']) : 0);
 
 
        $expire_items     = ((x($_POST,'expire_items')) ? intval($_POST['expire_items'])         : 0);
@@ -355,6 +356,9 @@ function settings_post(&$a) {
        $post_joingroup   = (($_POST['post_joingroup'] == 1) ? 1: 0);
        $post_profilechange   = (($_POST['post_profilechange'] == 1) ? 1: 0);
 
+       if($page_flags == PAGE_PRVGROUP) {
+               $hidewall = 1;
+       }
 
        $notify = 0;
 
@@ -441,7 +445,7 @@ function settings_post(&$a) {
        set_pconfig(local_user(),'system','post_profilechange', $post_profilechange);
 
 
-       $r = q("UPDATE `user` SET `username` = '%s', `email` = '%s', `openid` = '%s', `timezone` = '%s',  `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `notify-flags` = %d, `page-flags` = %d, `default-location` = '%s', `allow_location` = %d, `maxreq` = %d, `expire` = %d, `openidserver` = '%s', `blockwall` = %d, `hidewall` = %d, `blocktags` = %d, `unkmail` = %d, `cntunkmail` = %d  WHERE `uid` = %d LIMIT 1",
+       $r = q("UPDATE `user` SET `username` = '%s', `email` = '%s', `openid` = '%s', `timezone` = '%s',  `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `notify-flags` = %d, `page-flags` = %d, `default-location` = '%s', `allow_location` = %d, `maxreq` = %d, `expire` = %d, `openidserver` = '%s', `def_gid` = %d, `blockwall` = %d, `hidewall` = %d, `blocktags` = %d, `unkmail` = %d, `cntunkmail` = %d  WHERE `uid` = %d LIMIT 1",
                        dbesc($username),
                        dbesc($email),
                        dbesc($openid),
@@ -457,6 +461,7 @@ function settings_post(&$a) {
                        intval($maxreq),
                        intval($expire),
                        dbesc($openidserver),
+                       intval($def_gid),
                        intval($blockwall),
                        intval($hidewall),
                        intval($blocktags),
@@ -833,6 +838,13 @@ function settings_content(&$a) {
                '$page_freelove'        => array('page-flags', t('Automatic Friend Account'), PAGE_FREELOVE, 
                                                                        t('Automatically approve all connection/friend requests as friends'), 
                                                                        ($a->user['page-flags'] == PAGE_FREELOVE)),
+
+               '$page_prvgroup'        => array('page-flags', t('Private Forum'), PAGE_PRVGROUP, 
+                                                                       t('Private forum - approved members only [Experimental]'), 
+                                                                       ($a->user['page-flags'] == PAGE_PRVGROUP)),
+
+               '$experimental' => ( (intval(get_config('system','prvgroup_testing'))) ? 'true' : ''),
+
        ));
 
        $noid = get_config('system','no_openid');
@@ -934,6 +946,9 @@ function settings_content(&$a) {
                'photos' => array('expire_photos',  t("Expire photos:"), $expire_photos, '', array(t('No'),t('Yes'))),          
        );
 
+       require_once('include/group.php');
+       $group_select = mini_group_select(local_user(),$a->user['def_gid']);
+
        $o .= replace_macros($stpl,array(
                '$ptitle'       => t('Account Settings'),
 
@@ -941,7 +956,6 @@ function settings_content(&$a) {
                '$baseurl' => $a->get_baseurl(true),
                '$uid' => local_user(),
                '$form_security_token' => get_form_security_token("settings"),
-               
                '$nickname_block' => $prof_addr,
                
                '$h_pass'       => t('Password Settings'),
@@ -968,6 +982,10 @@ function settings_content(&$a) {
                '$suggestme' => $suggestme,
                '$blockwall'=> $blockwall, // array('blockwall', t('Allow friends to post to your profile page:'), !$blockwall, ''),
                '$blocktags'=> $blocktags, // array('blocktags', t('Allow friends to tag your posts:'), !$blocktags, ''),
+               '$group_lbl_select' => t('Default privacy group for new contacts'),
+               '$group_select' => $group_select,
+
+
                '$expire'       => $expire_arr,
 
                '$profile_in_dir' => $profile_in_dir,
index e363aa942e2157124a08f986057ad02c6cbadf76..f25d16f9df13e6411381181a0f32725c7e606363 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-define( 'UPDATE_VERSION' , 1143 );
+define( 'UPDATE_VERSION' , 1144 );
 
 /**
  *
@@ -1246,5 +1246,12 @@ function update_1142() {
        return UPDATE_SUCCESS ;
 }
 
+function update_1143() {
+       $r = q("alter table user add def_gid int(11) not null default '0' after service_class");
+       if(! $r)
+               return UPDATE_FAILED ;
+       return UPDATE_SUCCESS ;
+}
+
 
 
diff --git a/view/group_selection.tpl b/view/group_selection.tpl
new file mode 100644 (file)
index 0000000..d09ba67
--- /dev/null
@@ -0,0 +1,5 @@
+<select name="group-selection" id="group-selection">
+{{ for $groups as $group }}
+<option value="$group.id" {{ if $group.selected }}selected="selected"{{ endif }} >$group.name</option>
+{{ endfor }}
+</select>
index d9f873ea03e6ca9eec4aa82be08cf96b9e4371b3..924fc47ac4075954e052f2a364572705809f6be8 100644 (file)
@@ -2,3 +2,6 @@
        {{inc field_radio.tpl with $field=$page_soapbox }}{{endinc}}
        {{inc field_radio.tpl with $field=$page_community }}{{endinc}}
        {{inc field_radio.tpl with $field=$page_freelove }}{{endinc}}
+       {{ if $experimental }}
+       {{inc field_radio.tpl with $field=$page_prvgroup }}{{endinc}}
+       {{ endif }}
\ No newline at end of file
index cec3c6f6455ba2cbc24588ca684d4224e72523c3..e25d67463d9c518a49a532f1b172ef811cbb653f 100644 (file)
@@ -56,9 +56,12 @@ $suggestme
 
 $unkmail
 
+
 {{inc field_input.tpl with $field=$cntunkmail }}{{endinc}}
 
 {{inc field_input.tpl with $field=$expire.days }}{{endinc}}
+
+
 <div class="field input">
        <span class="field_help"><a href="#advanced-expire-popup" id="advanced-expire" class='popupbox' title="$expire.advanced">$expire.label</a></span>
        <div style="display: none;">
@@ -90,6 +93,9 @@ $unkmail
 <br/>
 <div id="settings-default-perms-end"></div>
 
+<label name="group-selection-lbl" for="group-selection">$group_lbl_select</label>
+$group_select
+
 
 <div class="settings-submit-wrapper" >
 <input type="submit" name="submit" class="settings-submit" value="Submit" />