diff --git a/boot.php b/boot.php index 0a2f5c50c..5cc349931 100644 --- a/boot.php +++ b/boot.php @@ -1509,6 +1509,9 @@ function killme() { * @brief Redirect to another URL and terminate this process. */ function goaway($s) { + if (!strstr(normalise_link($s), normalise_link(App::get_baseurl()))) + $s = App::get_baseurl()."/".$s; + header("Location: $s"); killme(); } diff --git a/doc/Accesskeys.md b/doc/Accesskeys.md index c49e79c0a..4f16ba253 100644 --- a/doc/Accesskeys.md +++ b/doc/Accesskeys.md @@ -37,10 +37,7 @@ General * o: Profile * t: Contacts * d: Common friends -* b: Toggle Blocked status -* i: Toggle Ignored status -* v: Toggle Archive status -* r: Repair +* r: Advanced /message -------- diff --git a/include/diaspora.php b/include/diaspora.php index 0e0a86031..78ba52079 100644 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -737,12 +737,10 @@ 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'])) { + $def_gid = get_default_group($importer['uid'], $ret["network"]); + if (intval($def_gid)) { require_once('include/group.php'); - group_add_member($importer['uid'],'',$contact_record['id'],$g[0]['def_gid']); + group_add_member($importer['uid'], '', $contact_record['id'], $def_gid); } if($importer['page-flags'] == PAGE_NORMAL) { diff --git a/include/follow.php b/include/follow.php index 410e0e58a..3af629536 100644 --- a/include/follow.php +++ b/include/follow.php @@ -258,12 +258,10 @@ function new_contact($uid,$url,$interactive = false) { $contact_id = $r[0]['id']; $result['cid'] = $contact_id; - $g = q("select def_gid from user where uid = %d limit 1", - intval($uid) - ); - if($g && intval($g[0]['def_gid'])) { + $def_gid = get_default_group($uid, $contact["network"]); + if (intval($def_gid)) { require_once('include/group.php'); - group_add_member($uid,'',$contact_id,$g[0]['def_gid']); + group_add_member($uid, '', $contact_id, $def_gid); } require_once("include/Photo.php"); diff --git a/include/group.php b/include/group.php index 2b872f16a..00b66ad58 100644 --- a/include/group.php +++ b/include/group.php @@ -188,7 +188,7 @@ function group_public_members($gid) { } -function mini_group_select($uid,$gid = 0) { +function mini_group_select($uid,$gid = 0, $label = "") { $grps = array(); $o = ''; @@ -205,8 +205,11 @@ function mini_group_select($uid,$gid = 0) { } logger('groups: ' . print_r($grps,true)); + if ($label == "") + $label = t('Default privacy group for new contacts'); + $o = replace_macros(get_markup_template('group_selection.tpl'), array( - '$label' => t('Default privacy group for new contacts'), + '$label' => $label, '$groups' => $grps )); return $o; @@ -375,3 +378,28 @@ function groups_count_unseen() { return $r; } + +/** + * @brief Returns the default group for a given user and network + * + * @param int $uid User id + * @param string $network network name + * + * @return int group id + */ +function get_default_group($uid, $network = "") { + + $default_group = 0; + + if ($network == NETWORK_OSTATUS) + $default_group = get_pconfig($uid, "ostatus", "default_group"); + + if ($default_group != 0) + return $default_group; + + $g = q("SELECT `def_gid` FROM `user` WHERE `uid` = %d LIMIT 1", intval($uid)); + if($g && intval($g[0]["def_gid"])) + $default_group = $g[0]["def_gid"]; + + return $default_group; +} diff --git a/include/ostatus.php b/include/ostatus.php index 5c5016d0f..54b70e6d6 100644 --- a/include/ostatus.php +++ b/include/ostatus.php @@ -537,7 +537,7 @@ function ostatus_import($xml,$importer,&$contact, &$hub) { } else $item["parent-uri"] = $item["uri"]; - $item_id = ostatus_completion($conversation, $importer["uid"], $item); + $item_id = ostatus_completion($conversation, $importer["uid"], $item, $self); if (!$item_id) { logger("Error storing item", LOGGER_DEBUG); @@ -676,17 +676,57 @@ function ostatus_conv_fetch_actor($actor) { update_gcontact($contact); } +/** + * @brief Fetches the conversation url for a given item link or conversation id + * + * @param string $self The link to the posting + * @param string $conversation_id The conversation id + * + * @return string The conversation url + */ +function ostatus_fetch_conversation($self, $conversation_id = "") { -function ostatus_completion($conversation_url, $uid, $item = array()) { + if ($conversation_id != "") { + $elements = explode(":", $conversation_id); + + if ((count($elements) <= 2) OR ($elements[0] != "tag")) + return $conversation_id; + } + + if ($self == "") + return ""; + + $json = str_replace(".atom", ".json", $self); + + $raw = fetch_url($json); + if ($raw == "") + return ""; + + $data = json_decode($raw); + if (!is_object($data)) + return ""; + + $conversation_id = $data->statusnet_conversation_id; + + $pos = strpos($self, "/api/statuses/show/"); + $base_url = substr($self, 0, $pos); + + return $base_url."/conversation/".$conversation_id; +} + +function ostatus_completion($conversation_url, $uid, $item = array(), $self = "") { $a = get_app(); $item_stored = -1; - $conversation_url = ostatus_convert_href($conversation_url); + //$conversation_url = ostatus_convert_href($conversation_url); + $conversation_url = ostatus_fetch_conversation($self, $conversation_url); // If the thread shouldn't be completed then store the item and go away - if ((intval(get_config('system','ostatus_poll_interval')) == -2) AND (count($item) > 0)) { + // Don't do a completion on liked content + if (((intval(get_config('system','ostatus_poll_interval')) == -2) AND (count($item) > 0)) OR + ($item["verb"] == ACTIVITY_LIKE) OR ($conversation_url == "")) { //$arr["app"] .= " (OStatus-NoCompletion)"; $item_stored = item_store($item, true); return($item_stored); @@ -725,7 +765,7 @@ function ostatus_completion($conversation_url, $uid, $item = array()) { $pageno = 1; $items = array(); - logger('fetching conversation url '.$conv.' for user '.$uid); + logger('fetching conversation url '.$conv.' (Self: '.$self.') for user '.$uid); do { $conv_arr = z_fetch_url($conv."?page=".$pageno); @@ -778,6 +818,8 @@ function ostatus_completion($conversation_url, $uid, $item = array()) { $r = q("SELECT `nurl` FROM `contact` WHERE `uid` = %d AND `self`", intval($uid)); $importer = $r[0]; + $new_parent = true; + foreach ($items as $single_conv) { // Update the gcontact table @@ -809,6 +851,9 @@ function ostatus_completion($conversation_url, $uid, $item = array()) { // 2. This first post is a post inside our thread // 3. This first post is a post inside another thread if (($first_id != $parent["uri"]) AND ($parent["uri"] != "")) { + + $new_parent = true; + $new_parents = q("SELECT `id`, `parent`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `id` IN (SELECT `parent` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s','%s')) LIMIT 1", @@ -909,12 +954,14 @@ function ostatus_completion($conversation_url, $uid, $item = array()) { if (isset($single_conv->actor->url)) $actor = $single_conv->actor->url; - $contact = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND `network` != '%s'", + $contact = q("SELECT `id`, `rel` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND `network` != '%s'", $uid, normalise_link($actor), NETWORK_STATUSNET); if (count($contact)) { logger("Found contact for url ".$actor, LOGGER_DEBUG); $contact_id = $contact[0]["id"]; + + $not_following = !in_array($contact[0]["rel"], array(CONTACT_IS_SHARING, CONTACT_IS_FRIEND)); } else { logger("No contact found for url ".$actor, LOGGER_DEBUG); @@ -925,6 +972,14 @@ function ostatus_completion($conversation_url, $uid, $item = array()) { logger("Global contact ".$global_contact_id." found for url ".$actor, LOGGER_DEBUG); $contact_id = $parent["contact-id"]; + + $not_following = true; + } + + // Do we only want to import threads that were started by our contacts? + if ($not_following AND $new_parent AND get_config('system','ostatus_full_threads')) { + logger("Don't import uri ".$first_id." because we don't follow the person ".$actor, LOGGER_DEBUG); + continue; } $arr = array(); diff --git a/mod/admin.php b/mod/admin.php index a98f464f8..e7c4f51b6 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -598,6 +598,7 @@ function admin_page_site_post(&$a) { $dfrn_only = ((x($_POST,'dfrn_only')) ? True : False); $ostatus_disabled = !((x($_POST,'ostatus_disabled')) ? True : False); $ostatus_poll_interval = ((x($_POST,'ostatus_poll_interval')) ? intval(trim($_POST['ostatus_poll_interval'])) : 0); + $ostatus_full_threads = ((x($_POST,'ostatus_full_threads')) ? True : False); $diaspora_enabled = ((x($_POST,'diaspora_enabled')) ? True : False); $ssl_policy = ((x($_POST,'ssl_policy')) ? intval($_POST['ssl_policy']) : 0); $force_ssl = ((x($_POST,'force_ssl')) ? True : False); @@ -746,6 +747,7 @@ function admin_page_site_post(&$a) { set_config('system','dfrn_only', $dfrn_only); set_config('system','ostatus_disabled', $ostatus_disabled); set_config('system','ostatus_poll_interval', $ostatus_poll_interval); + set_config('system','ostatus_full_threads', $ostatus_full_threads); set_config('system','diaspora_enabled', $diaspora_enabled); set_config('config','private_addons', $private_addons); @@ -947,6 +949,7 @@ function admin_page_site(&$a) { '$max_author_posts_community_page' => array('max_author_posts_community_page', t("Posts per user on community page"), get_config('system','max_author_posts_community_page'), t("The maximum number of posts per user on the community page. (Not valid for 'Global Community')")), '$ostatus_disabled' => array('ostatus_disabled', t("Enable OStatus support"), !get_config('system','ostatus_disabled'), t("Provide built-in OStatus \x28StatusNet, GNU Social etc.\x29 compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed.")), '$ostatus_poll_interval' => array('ostatus_poll_interval', t("OStatus conversation completion interval"), (string) intval(get_config('system','ostatus_poll_interval')), t("How often shall the poller check for new entries in OStatus conversations? This can be a very ressource task."), $ostatus_poll_choices), + '$ostatus_full_threads' => array('ostatus_full_threads', t("Only import OStatus threads from our contacts"), get_config('system','ostatus_full_threads'), t("Normally we import every content from our OStatus contacts. With this option we only store threads that are started by a contact that is known on our system.")), '$ostatus_not_able' => t("OStatus support can only be enabled if threading is enabled."), '$diaspora_able' => $diaspora_able, '$diaspora_not_able' => t("Diaspora support can't be enabled because Friendica was installed into a sub directory."), diff --git a/mod/contacts.php b/mod/contacts.php index 7f758b43c..4897663a0 100644 --- a/mod/contacts.php +++ b/mod/contacts.php @@ -565,6 +565,9 @@ function contacts_content(&$a) { ($contact['rel'] == CONTACT_IS_FOLLOWER)) $follow = $a->get_baseurl(true)."/follow?url=".urlencode($contact["url"]); + // Load contactact related actions like hide, suggest, delete and others + $contact_actions = contact_actions($contact); + $o .= replace_macros($tpl, array( //'$header' => t('Contact Editor'), @@ -584,7 +587,7 @@ function contacts_content(&$a) { '$lblcrepair' => t("Repair URL settings"), '$lblrecent' => t('View conversations'), '$lblsuggest' => $lblsuggest, - '$delete' => t('Delete contact'), + //'$delete' => t('Delete contact'), '$nettype' => $nettype, '$poll_interval' => $poll_interval, '$poll_enabled' => $poll_enabled, @@ -622,7 +625,11 @@ function contacts_content(&$a) { '$about' => bbcode($contact["about"], false, false), '$about_label' => t("About:"), '$keywords' => $contact["keywords"], - '$keywords_label' => t("Tags:") + '$keywords_label' => t("Tags:"), + '$contact_action_button' => t("Actions"), + '$contact_actions' => $contact_actions, + '$contact_status' => t("Status"), + '$contact_settings_label' => t('Contact Settings'), )); @@ -800,6 +807,17 @@ function contacts_content(&$a) { return $o; } +/** + * @brief List of pages for the Contact TabBar + * + * Available Pages are 'Status', 'Profile', 'Contacts' and 'Common Friends' + * + * @param app $a + * @param int $contact_id The ID of the contact + * @param int $active_tab 1 if tab should be marked as active + * + * @return array with with contact TabBar data + */ function contacts_tab($a, $contact_id, $active_tab) { // tabs $tabs = array( @@ -821,6 +839,7 @@ function contacts_tab($a, $contact_id, $active_tab) { ) ); + // Show this tab only if there is visible friend list $x = count_all_friends(local_user(), $contact_id); if ($x) $tabs[] = array('label'=>t('Contacts'), @@ -830,6 +849,7 @@ function contacts_tab($a, $contact_id, $active_tab) { 'id' => 'allfriends-tab', 'accesskey' => 't'); + // Show this tab only if there is visible common friend list $common = count_common_friends(local_user(),$contact_id); if ($common) $tabs[] = array('label'=>t('Common Friends'), @@ -839,35 +859,13 @@ function contacts_tab($a, $contact_id, $active_tab) { 'id' => 'common-loc-tab', 'accesskey' => 'd'); - $tabs[] = array('label' => t('Repair'), + $tabs[] = array('label' => t('Advanced'), 'url' => 'crepair/' . $contact_id, 'sel' => (($active_tab == 5)?'active':''), 'title' => t('Advanced Contact Settings'), - 'id' => 'repair-tab', + 'id' => 'advanced-tab', 'accesskey' => 'r'); - - $tabs[] = array('label' => (($contact['blocked']) ? t('Unblock') : t('Block') ), - 'url' => 'contacts/' . $contact_id . '/block', - 'sel' => '', - 'title' => t('Toggle Blocked status'), - 'id' => 'toggle-block-tab', - 'accesskey' => 'b'); - - $tabs[] = array('label' => (($contact['readonly']) ? t('Unignore') : t('Ignore') ), - 'url' => 'contacts/' . $contact_id . '/ignore', - 'sel' => '', - 'title' => t('Toggle Ignored status'), - 'id' => 'toggle-ignore-tab', - 'accesskey' => 'i'); - - $tabs[] = array('label' => (($contact['archive']) ? t('Unarchive') : t('Archive') ), - 'url' => 'contacts/' . $contact_id . '/archive', - 'sel' => '', - 'title' => t('Toggle Archive status'), - 'id' => 'toggle-archive-tab', - 'accesskey' => 'v'); - $tab_tpl = get_markup_template('common_tabs.tpl'); $tab_str = replace_macros($tab_tpl, array('$tabs' => $tabs)); @@ -954,3 +952,72 @@ function _contact_detail_for_template($rr){ ); } + +/** + * @brief Gives a array with actions which can performed to a given contact + * + * This includes actions like e.g. 'block', 'hide', 'archive', 'delete' and others + * + * @param array $contact Data about the Contact + * @return array with contact related actions + */ +function contact_actions($contact) { + + $poll_enabled = in_array($contact['network'], array(NETWORK_DFRN, NETWORK_OSTATUS, NETWORK_FEED, NETWORK_MAIL, NETWORK_MAIL2)); + $contact_action = array(); + + // Provide friend suggestion only for Friendica contacts + if($contact['network'] === NETWORK_DFRN) { + $contact_actions['suggest'] = array( + 'label' => t('Suggest friends'), + 'url' => 'fsuggest/' . $contact['id'], + 'title' => '', + 'sel' => '', + 'id' => 'suggest', + ); + } + + if($poll_enabled) { + $contact_actions['update'] = array( + 'label' => t('Update now'), + 'url' => 'contacts/' . $contact['id'] . '/update', + 'title' => '', + 'sel' => '', + 'id' => 'update', + ); + } + + $contact_actions['block'] = array( + 'label' => (intval($contact['blocked']) ? t('Unblock') : t('Block') ), + 'url' => 'contacts/' . $contact['id'] . '/block', + 'title' => t('Toggle Blocked status'), + 'sel' => (intval($contact['blocked']) ? 'active' : ''), + 'id' => 'toggle-block', + ); + + $contact_actions['ignore'] = array( + 'label' => (intval($contact['readonly']) ? t('Unignore') : t('Ignore') ), + 'url' => 'contacts/' . $contact['id'] . '/ignore', + 'title' => t('Toggle Ignored status'), + 'sel' => (intval($contact['readonly']) ? 'active' : ''), + 'id' => 'toggle-ignore', + ); + + $contact_actions['archive'] = array( + 'label' => (intval($contact['archive']) ? t('Unarchive') : t('Archive') ), + 'url' => 'contacts/' . $contact['id'] . '/archive', + 'title' => t('Toggle Archive status'), + 'sel' => (intval($contact['archive']) ? 'active' : ''), + 'id' => 'toggle-archive', + ); + + $contact_actions['delete'] = array( + 'label' => t('Delete'), + 'url' => 'contacts/' . $contact['id'] . '/drop', + 'title' => t('Delete contact'), + 'sel' => '', + 'id' => 'delete', + ); + + return $contact_actions; +} diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php index 27c04a908..68950ec28 100644 --- a/mod/dfrn_confirm.php +++ b/mod/dfrn_confirm.php @@ -489,13 +489,10 @@ function dfrn_confirm_post(&$a,$handsfree = null) { } } - - $g = q("select def_gid from user where uid = %d limit 1", - intval($uid) - ); - if($contact && $g && intval($g[0]['def_gid'])) { + $def_gid = get_default_group($uid, $contact["network"]); + if($contact && intval($def_gid)) { require_once('include/group.php'); - group_add_member($uid,'',$contact['id'],$g[0]['def_gid']); + group_add_member($uid, '', $contact['id'], $def_gid); } // Let's send our user to the contact editor in case they want to diff --git a/mod/dfrn_request.php b/mod/dfrn_request.php index 545599606..837eec2dd 100644 --- a/mod/dfrn_request.php +++ b/mod/dfrn_request.php @@ -174,18 +174,16 @@ function dfrn_request_post(&$a) { info( t("Introduction complete.") . EOL); } - $r = q("select id from contact where uid = %d and url = '%s' and `site-pubkey` = '%s' limit 1", + $r = q("SELECT `id`, `network` FROM `contact` WHERE `uid` = %d AND `url` = '%s' AND `site-pubkey` = '%s' LIMIT 1", intval(local_user()), dbesc($dfrn_url), $parms['key'] // this was already escaped ); if(count($r)) { - $g = q("select def_gid from user where uid = %d limit 1", - intval(local_user()) - ); - if($g && intval($g[0]['def_gid'])) { + $def_gid = get_default_group(local_user(), $r[0]["network"]); + if(intval($def_gid)) { require_once('include/group.php'); - group_add_member(local_user(),'',$r[0]['id'],$g[0]['def_gid']); + group_add_member(local_user(), '', $r[0]['id'], $def_gid); } $forwardurl = $a->get_baseurl()."/contacts/".$r[0]['id']; } else @@ -388,19 +386,17 @@ function dfrn_request_post(&$a) { intval($rel) ); - $r = q("select id from contact where poll = '%s' and uid = %d limit 1", + $r = q("SELECT `id`, `network` FROM `contact` WHERE `poll` = '%s' AND `uid` = %d LIMIT 1", dbesc($poll), intval($uid) ); 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'])) { + $def_gid = get_default_group($uid, $r[0]["network"]); + if (intval($def_gid)) { require_once('include/group.php'); - group_add_member($uid,'',$contact_id,$g[0]['def_gid']); + group_add_member($uid, '', $contact_id, $def_gid); } $photo = avatar_img($addr); diff --git a/mod/settings.php b/mod/settings.php index 905a5ed08..0c3b23a44 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -199,6 +199,7 @@ function settings_post(&$a) { if(x($_POST, 'general-submit')) { set_pconfig(local_user(), 'system', 'no_intelligent_shortening', intval($_POST['no_intelligent_shortening'])); set_pconfig(local_user(), 'system', 'ostatus_autofriend', intval($_POST['snautofollow'])); + set_pconfig(local_user(), 'ostatus', 'default_group', $_POST['group-selection']); set_pconfig(local_user(), 'ostatus', 'legacy_contact', $_POST['legacy_contact']); } elseif(x($_POST, 'imap-submit')) { @@ -797,8 +798,11 @@ function settings_content(&$a) { $settings_connectors .= ''.t('If you receive a message from an unknown OStatus user, this option decides what to do. If it is checked, a new contact will be created for every unknown user.').''; $settings_connectors .= ''; + $default_group = get_pconfig(local_user(), 'ostatus', 'default_group'); $legacy_contact = get_pconfig(local_user(), 'ostatus', 'legacy_contact'); + $settings_connectors .= mini_group_select(local_user(), $default_group, t("Default group for OStatus contacts")); + if ($legacy_contact != "") $a->page['htmlhead'] = ''; diff --git a/view/global.css b/view/global.css index 8646bf8e4..41af643ec 100644 --- a/view/global.css +++ b/view/global.css @@ -1,6 +1,32 @@ /* General style rules .*/ .pull-right { float: right } +/* General designing elements */ +.btn { + outline: none; + -moz-box-shadow: inset 0px 1px 0px 0px #ffffff; + -webkit-box-shadow: inset 0px 1px 0px 0px #ffffff; + box-shadow: inset 0px 1px 0px 0px #ffffff; + background-color: #ededed; + text-indent: 0; + border: 1px solid #dcdcdc; + display: inline-block; + color: #777777; + padding: 5px 10px; + text-align: center; +} +a.btn, a.btn:hover { + text-decoration: none; + color: inherit; +} + +.menu-popup .divider { + height: 1px; + margin: 3px 0; + overflow: hidden; + background-color: #2d2d2d; +} + /* List of social Networks */ img.connector, img.connector-disabled { height: 40px; @@ -277,20 +303,20 @@ a { margin: 10px 0 10px; } .version-match { - font-weight: bold; - color: #00a700; + font-weight: bold; + color: #00a700; } .federation-graph { - width: 400px; - height: 400px; - float: right; - margin: 20px; + width: 400px; + height: 400px; + float: right; + margin: 20px; } .federation-network-graph { - width: 240px; - height: 240px; - float: left; - margin: 20px; + width: 240px; + height: 240px; + float: left; + margin: 20px; } ul.federation-stats, ul.credits { @@ -302,10 +328,10 @@ ul.credits li { width: 240px; } table#federation-stats { - width: 100%; + width: 100%; } td.federation-data { - border-bottom: 1px solid #000; + border-bottom: 1px solid #000; } .contact-entry-photo img { @@ -329,25 +355,48 @@ td.federation-data { } .crepair-label { - margin-top: 10px; - float: left; - width: 250px; + margin-top: 10px; + float: left; + width: 250px; } .crepair-input { - margin-top: 10px; - float: left; - width: 200px; + margin-top: 10px; + float: left; + width: 200px; } .renderinfo { - clear: both; + clear: both; } .p-addr { - clear: both; + clear: both; } #live-community { - clear: both; + clear: both; +} + +/* contact-edit */ +#contact-edit-status-wrapper { + border: 1px solid; + padding: 10px; +} +#contact-edit-actions { + float: right; + display: inline-block; + position: relative; +} +#contact-edit-actions > .menu-popup { + right: 0; + left: auto; +} + +#contact-edit-settings-label:after { + content: ' ยป'; +} + +#contact-edit-settings { + display: none; } diff --git a/view/templates/admin_site.tpl b/view/templates/admin_site.tpl index b08e5f935..91957d016 100644 --- a/view/templates/admin_site.tpl +++ b/view/templates/admin_site.tpl @@ -87,6 +87,7 @@ {{if $thread_allow.2}} {{include file="field_checkbox.tpl" field=$ostatus_disabled}} {{include file="field_select.tpl" field=$ostatus_poll_interval}} + {{include file="field_checkbox.tpl" field=$ostatus_full_threads}} {{else}}
diff --git a/view/templates/contact_edit.tpl b/view/templates/contact_edit.tpl index 15863b6a2..93999a860 100644 --- a/view/templates/contact_edit.tpl +++ b/view/templates/contact_edit.tpl @@ -1,104 +1,98 @@ + {{if $header}}

{{$header}}

{{/if}}
+ {{* Insert Tab-Nav *}} {{$tab_str}} - - - -
-
-
+
{{* End of contact-edit-links *}} -
+ -
- +
-
- {{if $poll_enabled}} -
{{$lastupdtext}} {{$last_update}}
- {{if $poll_interval}} - {{$updpub}} {{$poll_interval}} + +
+ + + +
+ {{include file="field_checkbox.tpl" field=$notify}} + {{if $fetch_further_information}} + {{include file="field_select.tpl" field=$fetch_further_information}} + {{if $fetch_further_information.2 == 2 }} {{include file="field_textarea.tpl" field=$ffi_keyword_blacklist}} {{/if}} + {{/if}} + {{include file="field_checkbox.tpl" field=$hidden}} + +
+

{{$lbl_info1}}

+ + +
+
+ + {{if $profile_select}} +
+

{{$lbl_vis1}}

+

{{$lbl_vis2}}

+
+ {{$profile_select}} +
+ {{/if}} - {{$udnow}} - {{/if}} -
-
- {{include file="field_checkbox.tpl" field=$notify}} - {{if $fetch_further_information}} - {{include file="field_select.tpl" field=$fetch_further_information}} - {{if $fetch_further_information.2 == 2 }} {{include file="field_textarea.tpl" field=$ffi_keyword_blacklist}} {{/if}} - {{/if}} - {{include file="field_checkbox.tpl" field=$hidden}} - -
-

{{$lbl_info1}}

- - -
-
- -{{if $profile_select}} -
-

{{$lbl_vis1}}

-

{{$lbl_vis2}}

-
- {{$profile_select}} -
- -{{/if}} - + +
+
{{* End of contact-edit-nav-wrapper *}} diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index c004eb53d..787e52600 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -83,6 +83,26 @@ blockquote { margin-right: 5px; } +ul.menu-popup { + position: absolute; + display: none; + width: auto; + margin: 2px 0 0; + padding: 0px; + list-style: none; + z-index: 100000; + border: 2px solid #444444; + background: #FFFFFF; +} +.menu-popup li a { + padding: 2px; + white-space: nowrap; +} + +a.btn, a.btn:hover { + text-decoration: none; + color: inherit; +} /* nav */ @@ -140,12 +160,12 @@ nav #banner #logo-text a:hover { text-decoration: none; } .nav-commlink, .nav-login-link { - display: block; - height: 15px; + display: block; + height: 15px; margin-top: 67px; margin-right: 2px; - //padding: 6px 10px; - padding: 6px 3px; + /*padding: 6px 10px;*/ + padding: 6px 3px; float: left; bottom: 140px; border: 1px solid #babdb6; @@ -244,7 +264,7 @@ section { display:block; float:left; padding: 0.4em; - //margin-right: 1em; + /*margin-right: 1em;*/ margin-right: 3px ; } .tab.active { @@ -3371,17 +3391,6 @@ div.jGrowl div.info { .nav-notify.show { display: block; } -ul.menu-popup { - position: absolute; - display: none; - width: 10em; - margin: 0px; - padding: 0px; - list-style: none; - z-index: 100000; - top: 90px; - left: 200px; -} #nav-notifications-menu { width: 320px; max-height: 400px; @@ -3391,6 +3400,8 @@ ul.menu-popup { -webkit-border-radius: 5px; border-radius:5px; border: 1px solid #888; + top: 90px; + left: 200px; } #nav-notifications-menu .contactname { font-weight: bold; font-size: 0.9em; } #nav-notifications-menu img { float: left; margin-right: 5px; } diff --git a/view/theme/frost-mobile/js/main.js b/view/theme/frost-mobile/js/main.js index 9eac71be8..7e2880594 100644 --- a/view/theme/frost-mobile/js/main.js +++ b/view/theme/frost-mobile/js/main.js @@ -13,7 +13,6 @@ if($(listID).is(":visible")) { $(listID).hide(); $(listID+"-wrapper").show(); - alert($(listID+"-wrapper").attr("id")); } else { $(listID).show(); diff --git a/view/theme/frost-mobile/style.css b/view/theme/frost-mobile/style.css index 400b23c10..a99cc17a9 100644 --- a/view/theme/frost-mobile/style.css +++ b/view/theme/frost-mobile/style.css @@ -139,6 +139,47 @@ blockquote { margin-right: 5px; } +.btn { + outline: none; + -moz-box-shadow: inset 0px 1px 0px 0px #ffffff; + -webkit-box-shadow: inset 0px 1px 0px 0px #ffffff; + box-shadow: inset 0px 1px 0px 0px #ffffff; + background-color: #ededed; + text-indent: 0; + border: 1px solid #dcdcdc; + display: inline-block; + color: #777777; + padding: 5px 10px; + text-align: center; + border-radius: 8px; +} + +.menu-popup { + width: auto; + border: 2px solid #444444; + background: #FFFFFF; + position: absolute; + margin: 2px 0 0; + display: none; + z-index: 10000; +} + +.menu-popup li a { + display: block; + padding: 2px; +} + +.menu-popup li a:hover { + color: #FFFFFF; + background: #3465A4; + text-decoration: none; +} +ul.menu-popup li.divider { + height: 1px; + margin: 3px 0; + overflow: hidden; + background-color: #2d2d2d; +} /* nav */ @@ -2045,6 +2086,19 @@ input#profile-jot-email { margin-left: 15px; } +#contact-edit-status-wrapper { + padding: 10px; + border: 1px solid #aaa; + border-radius: 8px; +} + +#contact-edit-contact-status { + font-weight: bold; +} +#contact-edit-actions { + float: right; + display: inline-block; +} #contact-edit-wrapper { margin-top: 10px; } @@ -2059,14 +2113,10 @@ input#profile-jot-email { } #contact-edit-last-update-text { - float: left; - clear: left; margin-top: 30px; } #contact-edit-poll-text { - float: left; - clear: left; margin-top: 15px; margin-bottom: 0px; } diff --git a/view/theme/frost-mobile/templates/contact_edit.tpl b/view/theme/frost-mobile/templates/contact_edit.tpl index e6401de60..79dc7da40 100644 --- a/view/theme/frost-mobile/templates/contact_edit.tpl +++ b/view/theme/frost-mobile/templates/contact_edit.tpl @@ -6,12 +6,6 @@ {{$tab_str}} - - - -
{{$name}}
{{$name}}
@@ -20,41 +14,49 @@
@@ -63,12 +65,6 @@
- {{if $poll_enabled}} -
-
{{$lastupdtext}} {{$last_update}}
- {{$updpub}} {{$poll_interval}} {{$udnow}} -
- {{/if}}
{{include file="field_checkbox.tpl" field=$hidden}} diff --git a/view/theme/frost/style.css b/view/theme/frost/style.css index 3dd400c76..1054b55c1 100644 --- a/view/theme/frost/style.css +++ b/view/theme/frost/style.css @@ -113,6 +113,51 @@ blockquote { .pull-right { float: right } +.btn { + outline: none; + -moz-box-shadow: inset 0px 1px 0px 0px #ffffff; + -webkit-box-shadow: inset 0px 1px 0px 0px #ffffff; + box-shadow: inset 0px 1px 0px 0px #ffffff; + background-color: #ededed; + text-indent: 0; + border: 1px solid #dcdcdc; + display: inline-block; + color: #777777; + padding: 5px 10px; + text-align: center; + border-radius: 8px; +} +a.btn { + text-decoration: none; + color: inherit; +} + +.menu-popup { + width: auto; + border: 2px solid #444444; + background: #FFFFFF; + position: absolute; + margin: 2px 0 0; + display: none; + z-index: 10000; +} + +.menu-popup li a { + display: block; + padding: 2px; +} + +.menu-popup li a:hover { + color: #FFFFFF; + background: #3465A4; + text-decoration: none; +} +ul.menu-popup li.divider { + height: 1px; + margin: 3px 0; + overflow: hidden; + background-color: #2d2d2d; +} /* nav */ @@ -1952,6 +1997,20 @@ input#dfrn-url { margin-left: 15px; } +#contact-edit-status-wrapper { + padding: 10px; + border: 1px solid #aaa; + border-radius: 8px; +} + +#contact-edit-contact-status { + font-weight: bold; +} +#contact-edit-actions { + float: right; + display: inline-block; +} + #contact-edit-wrapper { margin-top: 10px; } @@ -1989,11 +2048,6 @@ input#dfrn-url { margin-top: 5px; } -#contact-edit-drop-link { - float: right; - margin-right: 20px; -} - #contact-edit-nav-end { clear: both; } diff --git a/view/theme/frost/templates/contact_edit.tpl b/view/theme/frost/templates/contact_edit.tpl index 731c5e0d4..44e55b1cd 100644 --- a/view/theme/frost/templates/contact_edit.tpl +++ b/view/theme/frost/templates/contact_edit.tpl @@ -6,50 +6,51 @@ {{$tab_str}} - - - - -
@@ -58,12 +59,6 @@ - {{if $poll_enabled}} -
-
{{$lastupdtext}} {{$last_update}}
- {{$updpub}} {{$poll_interval}} {{$udnow}} -
- {{/if}}
{{include file="field_checkbox.tpl" field=$hidden}} diff --git a/view/theme/quattro/dark/style.css b/view/theme/quattro/dark/style.css index 847017ee5..aed53fdac 100644 --- a/view/theme/quattro/dark/style.css +++ b/view/theme/quattro/dark/style.css @@ -463,7 +463,7 @@ a:hover { text-decoration: underline; } blockquote { - background: #FFFFFF; + background: #ffffff; padding: 1em; margin-left: 1em; border-left: 1em solid #e6e6e6; @@ -1655,6 +1655,9 @@ span[id^="showmore-wrap"] { overflow: hidden; text-overflow: ellipsis; } +#contact-edit-status-wrapper { + border-color: #364e59; +} /* editor */ .jothidden { display: none; diff --git a/view/theme/quattro/green/style.css b/view/theme/quattro/green/style.css index 4cfcb5927..74ab5b9cd 100644 --- a/view/theme/quattro/green/style.css +++ b/view/theme/quattro/green/style.css @@ -463,7 +463,7 @@ a:hover { text-decoration: underline; } blockquote { - background: #FFFFFF; + background: #ffffff; padding: 1em; margin-left: 1em; border-left: 1em solid #e6e6e6; @@ -1655,6 +1655,9 @@ span[id^="showmore-wrap"] { overflow: hidden; text-overflow: ellipsis; } +#contact-edit-status-wrapper { + border-color: #9ade00; +} /* editor */ .jothidden { display: none; diff --git a/view/theme/quattro/lilac/style.css b/view/theme/quattro/lilac/style.css index 2ff7cfcb0..327309fa5 100644 --- a/view/theme/quattro/lilac/style.css +++ b/view/theme/quattro/lilac/style.css @@ -420,7 +420,7 @@ body { font-family: Liberation Sans, helvetica, arial, clean, sans-serif; font-size: 11px; - background-color: #F6ECF9; + background-color: #f6ecf9; color: #2d2d2d; margin: 50px 0 0 0; display: table; @@ -463,7 +463,7 @@ a:hover { text-decoration: underline; } blockquote { - background: #FFFFFF; + background: #ffffff; padding: 1em; margin-left: 1em; border-left: 1em solid #e6e6e6; @@ -1655,6 +1655,9 @@ span[id^="showmore-wrap"] { overflow: hidden; text-overflow: ellipsis; } +#contact-edit-status-wrapper { + border-color: #86608e; +} /* editor */ .jothidden { display: none; @@ -1753,7 +1756,7 @@ span[id^="showmore-wrap"] { height: 20px; width: 500px; font-weight: bold; - border: 1px solid #F6ECF9; + border: 1px solid #f6ecf9; } #jot #jot-title:-webkit-input-placeholder { font-weight: normal; @@ -1780,7 +1783,7 @@ span[id^="showmore-wrap"] { margin: 0; height: 20px; width: 200px; - border: 1px solid #F6ECF9; + border: 1px solid #f6ecf9; } #jot #jot-category:hover { border: 1px solid #999999; diff --git a/view/theme/quattro/quattro.less b/view/theme/quattro/quattro.less index 681cfcc37..d81aedf41 100644 --- a/view/theme/quattro/quattro.less +++ b/view/theme/quattro/quattro.less @@ -408,19 +408,19 @@ aside { .group-delete-wrapper { float: right; margin-right: 50px; - .drophide { - background-image: url('../../../images/icons/22/delete.png'); - display: block; width: 22px; height: 22px; - opacity: 0.3; - position: relative; - top: -50px; - } - .drop { - background-image: url('../../../images/icons/22/delete.png'); - display: block; width: 22px; height: 22px; - position: relative; - top: -50px; - } + .drophide { + background-image: url('../../../images/icons/22/delete.png'); + display: block; width: 22px; height: 22px; + opacity: 0.3; + position: relative; + top: -50px; + } + .drop { + background-image: url('../../../images/icons/22/delete.png'); + display: block; width: 22px; height: 22px; + position: relative; + top: -50px; + } } /* #group-members { @@ -502,7 +502,7 @@ section { } .sparkle { - cursor: url('icons/lock.cur'), pointer; + cursor: url('icons/lock.cur'), pointer; } /* wall item */ @@ -959,6 +959,7 @@ span[id^="showmore-wrap"] { text-overflow: ellipsis; } +#contact-edit-status-wrapper { border-color: @JotToolsOverBackgroundColor;} /* editor */ .jothidden { display: none; } #jot { diff --git a/view/theme/smoothly/style.css b/view/theme/smoothly/style.css index b9f094932..87c7342c9 100644 --- a/view/theme/smoothly/style.css +++ b/view/theme/smoothly/style.css @@ -236,6 +236,39 @@ section { color: #efefef; } +ul.menu-popup { + position: absolute; + display: none; + width: auto; + margin: 2px 0 0; + padding: 0px; + list-style: none; + z-index: 100000; + color: #2e3436; + border-top: 1px; + background: #eeeeee; + border: 1px solid #7C7D7B; + border-radius: 0px 0px 5px 5px; + -webkit-border-radius: 0px 0px 5px 5px; + -moz-border-radius: 0px 0px 5px 5px; + box-shadow: 5px 5px 10px #242424; + -moz-box-shadow: 5px 5px 10px #242424; + -webkit-box-shadow: 5px 5px 10px #242424; +} +ul.menu-popup li a { + white-space: nowrap; + display: block; + padding: 5px 2px; + color: #2e3436; +} +ul.menu-popup li a:hover { + color: #efefef; + background: -webkit-gradient( linear, left top, left bottom, color-stop(0.05, #1873a2), color-stop(1, #6da6c4) ); + background: -moz-linear-gradient( center top, #1873a2 5%, #6da6c4 100% ); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#1873a2', endColorstr='#6da6c4'); + background-color: #1873a2; +} + /* ========= */ /* = Login = */ /* ========= */ @@ -4271,16 +4304,6 @@ a.active { .nav-notify.show { display: block; } -ul.menu-popup { - position: absolute; - display: none; - width: 10em; - margin: 0px; - padding: 0px; - list-style: none; - z-index: 100000; - top: 40px; -} #nav-notifications-menu { width: 320px; max-height: 400px; @@ -4298,6 +4321,7 @@ ul.menu-popup { box-shadow: 5px 5px 10px #242424; -moz-box-shadow: 5px 5px 10px #242424; -webkit-box-shadow: 5px 5px 10px #242424; + top: 40px; } #nav-notifications-menu .contactname { @@ -4406,6 +4430,10 @@ ul.menu-popup { background: #000000; } +.notify-seen a { + color: #efefef !important; +} + /* Pages profile widget ----------------------------------------------------------- */ #page-profile, diff --git a/view/theme/vier/dark.css b/view/theme/vier/dark.css index 023e41946..99850f282 100644 --- a/view/theme/vier/dark.css +++ b/view/theme/vier/dark.css @@ -8,6 +8,12 @@ hr { background-color: #343434 !important; } a, .wall-item-name, .fakelink { color: #989898 !important; } +.btn, .btn:hover{ + color: #989898; + border: 2px solid #0C1116; + background-color: #0C1116; + text-shadow: none; +} nav { color: #989898 !important; @@ -36,7 +42,7 @@ body, section, blockquote, blockquote.shared_content, #profile-jot-form, } #profile-jot-acl-wrapper, #event-notice, #event-wrapper, -#cboxLoadedContent, .contact-photo-menu { +#cboxLoadedContent, .contact-photo-menu, #contact-edit-status-wrapper { background-color: #252C33 !important; } diff --git a/view/theme/vier/style.css b/view/theme/vier/style.css index 3e91d6124..e08e103b8 100644 --- a/view/theme/vier/style.css +++ b/view/theme/vier/style.css @@ -24,72 +24,72 @@ img { } #pending-update { - float:right; - color: #ffffff; - font-weight: bold; - background-color: #FF0000; - padding: 0em 0.3em; + float:right; + color: #ffffff; + font-weight: bold; + background-color: #FF0000; + padding: 0em 0.3em; } .admin.linklist { - border: 0px; - padding: 0px; - list-style: none; - margin-top: 0px; + border: 0px; + padding: 0px; + list-style: none; + margin-top: 0px; } .admin.link { - list-style-position: inside; - font-size: 1em; -/* padding-left: 5px; - margin: 5px; */ + list-style-position: inside; + font-size: 1em; +/* padding-left: 5px; + margin: 5px; */ } #adminpage dl { - clear: left; - margin-bottom: 2px; - padding-bottom: 2px; - border-bottom: 1px solid black; + clear: left; + margin-bottom: 2px; + padding-bottom: 2px; + border-bottom: 1px solid black; } #adminpage dt { - width: 200px; - float: left; - font-weight: bold; + width: 200px; + float: left; + font-weight: bold; } #adminpage dd { - margin-left: 200px; + margin-left: 200px; } #adminpage h3 { - border-bottom: 1px solid #898989; - margin-bottom: 5px; - margin-top: 10px; + border-bottom: 1px solid #898989; + margin-bottom: 5px; + margin-top: 10px; } #adminpage .submit { - clear:left; + clear:left; } #adminpage #pluginslist { - margin: 0px; padding: 0px; + margin: 0px; padding: 0px; } #adminpage .plugin { - list-style: none; - display: block; - /* border: 1px solid #888888; */ - padding: 1em; - margin-bottom: 5px; - clear: left; + list-style: none; + display: block; + /* border: 1px solid #888888; */ + padding: 1em; + margin-bottom: 5px; + clear: left; } #adminpage .toggleplugin { - float:left; - margin-right: 1em; + float:left; + margin-right: 1em; } -#adminpage table {width:100%; border-bottom: 1p solid #000000; margin: 5px 0px;} +#adminpage table {width:100%; border-bottom: 1px solid #000000; margin: 5px 0px;} #adminpage table th { text-align: left;} #adminpage td .icon { float: left;} #adminpage table#users img { width: 16px; height: 16px; } @@ -247,15 +247,6 @@ div.pager { float: left; } -#contact-edit-drop-link-end { - /* clear: both; */ -} - -#contact-edit-links ul { - list-style: none; - list-style-type: none; -} - .hide-comments-outer { margin-left: 80px; margin-bottom: 5px; @@ -385,6 +376,14 @@ code { overflow: auto; padding: 0px; } +.menu-popup .divider { + width: 90%; + height: 1px; + margin: 3px auto; + overflow: hidden; + background-color: #737373; + opacity: 0.4; +} #saved-search-ul .tool:hover, #nets-sidebar .tool:hover, #sidebar-group-list .tool:hover { @@ -793,7 +792,8 @@ nav #nav-user-linklabel:hover #nav-user-menu, nav #nav-user-linkmenu:hover #nav-user-menu, nav #nav-apps-link:hover #nav-apps-menu, nav #nav-site-linkmenu:hover #nav-site-menu, -nav #nav-notifications-linkmenu:hover #nav-notifications-menu { +nav #nav-notifications-linkmenu:hover #nav-notifications-menu, +#contact-edit-actions:hover #contact-actions-menu { display:block; visibility:visible; opacity:1; @@ -2935,6 +2935,48 @@ a.mail-list-link { color: #999999; } +/* contact edit page */ +#contact-edit-nav-wrapper { + margin-top: 24px; +} +#contact-edit-status-wrapper { + border-color: #c9d8f6; + background-color: #e0e8fa; + border-radius: 3px; +} + +#contact-edit-contact-status { + font-weight: bold; +} + +#contact-edit-drop-link-end { + /* clear: both; */ +} + +#contact-edit-links ul { + list-style: none; + list-style-type: none; +} + +#contact-edit-settings { + margin-top: 10px; +} + +a.btn#contact-edit-actions-button { + cursor: pointer; + border-radius: 3px; + font-size: inherit; + font-weight: normal; + height: auto; + line-height: inherit; + padding: 5px 10px; +} + +#lost-contact-message, #insecure-message, +#block-message, #ignore-message, #archive-message { + color: #CB4437; +} + /* photo album page */ .photo-top-image-wrapper { position: relative; diff --git a/view/theme/vier/templates/contact_edit.tpl b/view/theme/vier/templates/contact_edit.tpl new file mode 100644 index 000000000..ce3cfbf80 --- /dev/null +++ b/view/theme/vier/templates/contact_edit.tpl @@ -0,0 +1,98 @@ + +{{if $header}}

{{$header}}

{{/if}} + +
+ + {{* Insert Tab-Nav *}} + {{$tab_str}} + + +
+ {{* End of contact-edit-links *}} + + + +
+ + +
+ + + +
+ {{include file="field_checkbox.tpl" field=$notify}} + {{if $fetch_further_information}} + {{include file="field_select.tpl" field=$fetch_further_information}} + {{if $fetch_further_information.2 == 2 }} {{include file="field_textarea.tpl" field=$ffi_keyword_blacklist}} {{/if}} + {{/if}} + {{include file="field_checkbox.tpl" field=$hidden}} + +
+

{{$lbl_info1}}

+ + +
+
+ + {{if $profile_select}} +
+

{{$lbl_vis1}}

+

{{$lbl_vis2}}

+
+ {{$profile_select}} +
+ + {{/if}} + +
+
{{* End of contact-edit-nav-wrapper *}} +