From: cash Date: Sun, 19 Dec 2010 01:44:33 +0000 (+0000) Subject: rough widget profile plugin X-Git-Url: https://gitweb.fluxo.info/?a=commitdiff_plain;h=abf3fcae3f90b4c52e40d3ef8bb11f92c7a03d1c;p=lorea%2Felgg.git rough widget profile plugin git-svn-id: http://code.elgg.org/elgg/trunk@7676 36083f99-b078-4883-b0ff-0f9b5a30f544 --- diff --git a/mod/profile/start.php b/mod/profile/start.php index d7dd0e3e0..2f817b644 100644 --- a/mod/profile/start.php +++ b/mod/profile/start.php @@ -70,25 +70,21 @@ function profile_page_handler($page) { $action = $page[1]; } - switch ($action) { - case 'edit': - // use for the core profile edit page - require $CONFIG->path . 'pages/profile/edit.php'; - return; - break; - - default: - if (isset($page[1])) { - $section = $page[1]; - } else { - $section = 'activity'; - } - $content = profile_get_user_profile_html($user, $section); - $content = elgg_view_layout('one_column', array('content' => $content)); - break; + if ($action == 'edit') { + // use for the core profile edit page + require $CONFIG->path . 'pages/profile/edit.php'; + return; } - echo elgg_view_page($title, $content); + // main profile page + $params = array( + 'box' => elgg_view('profile/box'), + 'num_columns' => 3, + ); + $content = elgg_view_layout('widgets', $params); + + $body = elgg_view_layout('one_column', array('content' => $content)); + echo elgg_view_page($title, $body); } /** diff --git a/mod/profile/views/default/profile/box.php b/mod/profile/views/default/profile/box.php new file mode 100644 index 000000000..9d97ddc35 --- /dev/null +++ b/mod/profile/views/default/profile/box.php @@ -0,0 +1,12 @@ + +
+ elgg_get_page_owner())); +?> +
\ No newline at end of file diff --git a/mod/profile/views/default/profile/css.php b/mod/profile/views/default/profile/css.php index 812daf16d..4522f7f6e 100644 --- a/mod/profile/views/default/profile/css.php +++ b/mod/profile/views/default/profile/css.php @@ -8,6 +8,16 @@ /* *************************************** main layout blocks *************************************** */ +.profile { + float: left; + width: 625px; + margin: 0 5px 15px; + padding: 5px; + border: 2px solid #dedede; +} +#widget-col-1 { + min-height: 300px; +} #profile_content { float:right; width:700px; diff --git a/mod/profile/views/default/profile/tabs/details.php b/mod/profile/views/default/profile/details.php old mode 100755 new mode 100644 similarity index 100% rename from mod/profile/views/default/profile/tabs/details.php rename to mod/profile/views/default/profile/details.php diff --git a/mod/profile/actions/addcomment.php b/mod/tabbed_profile/actions/addcomment.php similarity index 100% rename from mod/profile/actions/addcomment.php rename to mod/tabbed_profile/actions/addcomment.php diff --git a/mod/profile/actions/deletecomment.php b/mod/tabbed_profile/actions/deletecomment.php similarity index 100% rename from mod/profile/actions/deletecomment.php rename to mod/tabbed_profile/actions/deletecomment.php diff --git a/mod/tabbed_profile/graphics/defaultlarge.gif b/mod/tabbed_profile/graphics/defaultlarge.gif new file mode 100644 index 000000000..6ea3bd4cd Binary files /dev/null and b/mod/tabbed_profile/graphics/defaultlarge.gif differ diff --git a/mod/tabbed_profile/graphics/defaultmaster.gif b/mod/tabbed_profile/graphics/defaultmaster.gif new file mode 100644 index 000000000..5bfd67a2d Binary files /dev/null and b/mod/tabbed_profile/graphics/defaultmaster.gif differ diff --git a/mod/tabbed_profile/graphics/defaultmedium.gif b/mod/tabbed_profile/graphics/defaultmedium.gif new file mode 100644 index 000000000..c6b2e6a6d Binary files /dev/null and b/mod/tabbed_profile/graphics/defaultmedium.gif differ diff --git a/mod/tabbed_profile/graphics/defaultsmall.gif b/mod/tabbed_profile/graphics/defaultsmall.gif new file mode 100644 index 000000000..661d72f04 Binary files /dev/null and b/mod/tabbed_profile/graphics/defaultsmall.gif differ diff --git a/mod/tabbed_profile/graphics/defaulttiny.gif b/mod/tabbed_profile/graphics/defaulttiny.gif new file mode 100644 index 000000000..1775346bc Binary files /dev/null and b/mod/tabbed_profile/graphics/defaulttiny.gif differ diff --git a/mod/tabbed_profile/graphics/defaulttopbar.gif b/mod/tabbed_profile/graphics/defaulttopbar.gif new file mode 100644 index 000000000..c3616aeb5 Binary files /dev/null and b/mod/tabbed_profile/graphics/defaulttopbar.gif differ diff --git a/mod/tabbed_profile/graphics/drag_handle.png b/mod/tabbed_profile/graphics/drag_handle.png new file mode 100644 index 000000000..2e9bc42be Binary files /dev/null and b/mod/tabbed_profile/graphics/drag_handle.png differ diff --git a/mod/tabbed_profile/graphics/speech_bubble_tail.gif b/mod/tabbed_profile/graphics/speech_bubble_tail.gif new file mode 100644 index 000000000..31d1bc90d Binary files /dev/null and b/mod/tabbed_profile/graphics/speech_bubble_tail.gif differ diff --git a/mod/tabbed_profile/graphics/twitter16px.png b/mod/tabbed_profile/graphics/twitter16px.png new file mode 100644 index 000000000..de51c6953 Binary files /dev/null and b/mod/tabbed_profile/graphics/twitter16px.png differ diff --git a/mod/tabbed_profile/icon.php b/mod/tabbed_profile/icon.php new file mode 100644 index 000000000..48ccc16c2 --- /dev/null +++ b/mod/tabbed_profile/icon.php @@ -0,0 +1,54 @@ +owner_guid = $user->getGUID(); +$filehandler->setFilename("profile/" . $user->getGUID() . $size . ".jpg"); + +$success = false; +if ($filehandler->open("read")) { + if ($contents = $filehandler->read($filehandler->size())) { + $success = true; + } +} + +if (!$success) { + global $CONFIG; + $path = elgg_view('icon/user/default/'.$size); + header("Location: {$path}"); + exit; +} + +header("Content-type: image/jpeg"); +header('Expires: ' . date('r',time() + 864000)); +header("Pragma: public"); +header("Cache-Control: public"); +header("Content-Length: " . strlen($contents)); + +$splitString = str_split($contents, 1024); + +foreach($splitString as $chunk) { + echo $chunk; +} \ No newline at end of file diff --git a/mod/tabbed_profile/icondirect.php b/mod/tabbed_profile/icondirect.php new file mode 100644 index 000000000..fe4726d1a --- /dev/null +++ b/mod/tabbed_profile/icondirect.php @@ -0,0 +1,71 @@ +dbhost,$CONFIG->dbuser,$CONFIG->dbpass, true); +if ($mysql_dblink) { + if (@mysql_select_db($CONFIG->dbname,$mysql_dblink)) { + + // get dataroot and simplecache_enabled in one select for efficiency + if ($result = mysql_query("select name, value from {$CONFIG->dbprefix}datalists where name in ('dataroot','simplecache_enabled')",$mysql_dblink)) { + $simplecache_enabled = true; + $row = mysql_fetch_object($result); + while ($row) { + if ($row->name == 'dataroot') { + $dataroot = $row->value; + } else if ($row->name == 'simplecache_enabled') { + $simplecache_enabled = $row->value; + } + $row = mysql_fetch_object($result); + } + } + + @mysql_close($mysql_dblink); + + // if the simplecache is enabled, we get icon directly + if ($simplecache_enabled) { + + // first try to read icon directly + $user_path = date('Y/m/d/', $joindate) . $guid; + $filename = "$dataroot$user_path/profile/{$guid}{$size}.jpg"; + $contents = @file_get_contents($filename); + if (!empty($contents)) { + header("Content-type: image/jpeg"); + header('Expires: ' . date('r',time() + 864000)); + header("Pragma: public"); + header("Cache-Control: public"); + header("Content-Length: " . strlen($contents)); + $splitString = str_split($contents, 1024); + foreach($splitString as $chunk) { + echo $chunk; + } + exit; + } + } + } + +} + +// simplecache is not turned on or something went wrong so load engine and try that way +require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); +$user = get_entity($guid); +set_input('username', $user->username); +require_once(dirname(__FILE__).'/icon.php'); diff --git a/mod/tabbed_profile/languages/en.php b/mod/tabbed_profile/languages/en.php new file mode 100644 index 000000000..6017a590c --- /dev/null +++ b/mod/tabbed_profile/languages/en.php @@ -0,0 +1,125 @@ + "Profile", + 'profile:edit:default' => 'Profile fields', + 'profile:preview' => 'Preview', + +/** + * Profile menu items and titles + */ + + 'profile:yours' => "My profile", + 'profile:user' => "%s's profile", + + 'profile:edit' => "Edit profile", + 'profile:profilepictureinstructions' => "Your avatar is the image that's displayed on your profile page.
You can change it as often as you'd like. (File formats accepted: GIF, JPG or PNG)", + 'profile:icon' => "Avatar", + 'profile:createicon' => "Create your avatar", + 'profile:currentavatar' => "Current avatar", + 'profile:createicon:header' => "Profile picture", + 'profile:profilepicturecroppingtool' => "Avatar cropping tool", + 'profile:createicon:instructions' => "Click and drag a square below to match how you want your avatar cropped. A preview will appear in the box on the right. When you are happy with the preview, click 'Create your avatar'. This cropped version will be used throughout the site as your avatar. ", + + 'profile:editdetails' => "Edit profile", + 'profile:editicon' => "Edit avatar", + + 'profile:aboutme' => "About me", + 'profile:description' => "About me", + 'profile:briefdescription' => "Brief description", + 'profile:location' => "Location", + 'profile:skills' => "Skills", + 'profile:interests' => "Interests", + 'profile:contactemail' => "Contact email", + 'profile:phone' => "Telephone", + 'profile:mobile' => "Mobile phone", + 'profile:website' => "Website", + + 'profile:banned' => 'This user account has been suspended.', + 'profile:deleteduser' => 'Deleted user', + + 'profile:river:update' => "%s updated their profile", + 'profile:river:iconupdate' => "%s updated their profile icon", + + 'profile:label' => "Profile label", + 'profile:type' => "Profile type", + 'profile:twitter' => "Twitter username", + 'twitter:visit' => "Visit this Twitter account", + 'profile:editdefault:fail' => 'Default profile could not be saved', + 'profile:editdefault:success' => 'Item successfully added to default profile', + + + 'profile:editdefault:delete:fail' => 'Removed default profile item field failed', + 'profile:editdefault:delete:success' => 'Default profile item deleted!', + + 'profile:defaultprofile:reset' => 'Default system profile reset', + + 'profile:resetdefault' => 'Reset default profile', + 'profile:explainchangefields' => 'You can replace the existing profile fields with your own using the form below.

Give the new profile field a label, for example, \'Favorite team\', then select the field type (eg. text, url, tags), and click the \'Add\' button. To re-order the fields drag on the handle next to the field label. To edit a field label - click on the label\'s text to make it editable.
At any time you can revert back to the default profile set up, but you will loose any information already entered into custom fields on profile pages.', + + +/** + * Profile status messages + */ + + 'profile:saved' => "Your profile was successfully saved.", + 'profile:icon:uploaded' => "Your profile picture was successfully uploaded.", + +/** + * Profile comment wall + **/ + 'profile:commentwall:add' => "Add to the wall", + 'profile:commentwall' => "Comment Wall", + 'profile:commentwall:posted' => "You successfully posted on the comment wall.", + 'profile:commentwall:deleted' => "You successfully deleted the message.", + 'profile:commentwall:blank' => "Sorry; you need to actually put something in the message area before we can save it.", + 'profile:commentwall:notfound' => "Sorry; we could not find the specified item.", + 'profile:commentwall:notdeleted' => "Sorry; we could not delete this message.", + 'profile:commentwall:none' => "No comment wall posts found.", + 'profile:commentwall:somethingwentwrong' => "Something went wrong when trying to save your message, make sure you actually wrote a message.", + 'profile:commentwall:failure' => "An unexpected error occurred when adding your message. Please try again.", + +/** + * Email messages commentwall + */ + + 'profile:comment:subject' => 'You have a new message on your comment wall!', + 'profile:comment:body' => "You have a new message on your comment wall from %s. It reads: + + +%s + + +To view your message board comments, click here: + + %s + +To view %s's profile, click here: + + %s + +You cannot reply to this email.", + +/** + * Profile error messages + */ + + 'profile:no_friends' => 'This person hasn\'t added any friends yet!', + 'profile:no_groups' => 'This user has not joined any groups yet.', + 'profile:noaccess' => "You do not have permission to edit this profile.", + 'profile:notfound' => "Sorry, we could not find the specified profile.", + 'profile:icon:notfound' => "Sorry, there was a problem uploading your profile picture.", + 'profile:icon:noaccess' => 'You cannot change this profile icon', + 'profile:field_too_long' => 'Cannot save your profile information because the "%s" section is too long.', + +); + +add_translation('en', $english); \ No newline at end of file diff --git a/mod/tabbed_profile/manifest.xml b/mod/tabbed_profile/manifest.xml new file mode 100644 index 000000000..a1307f24d --- /dev/null +++ b/mod/tabbed_profile/manifest.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/mod/tabbed_profile/start.php b/mod/tabbed_profile/start.php new file mode 100644 index 000000000..08b2ed5bd --- /dev/null +++ b/mod/tabbed_profile/start.php @@ -0,0 +1,138 @@ +pluginspath . "tabbed_profile/actions/addcomment.php"); + elgg_register_action("profile/deletecomment", $CONFIG->pluginspath . "tabbed_profile/actions/deletecomment.php"); + + elgg_register_event_handler('profileupdate', 'all', 'object_notifications'); + + // allow ECML in parts of the profile + elgg_register_plugin_hook_handler('get_views', 'ecml', 'profile_ecml_views_hook'); +} + +/** + * Profile page handler + * + * @param array $page Array of page elements, forwarded by the page handling mechanism + */ +function profile_page_handler($page) { + global $CONFIG; + + if (isset($page[0])) { + $username = $page[0]; + $user = get_user_by_username($username); + elgg_set_page_owner_guid($user->guid); + } + + // short circuit if invalid or banned username + if (!$user || ($user->isBanned() && !isadminloggedin())) { + register_error(elgg_echo('profile:notfound')); + forward(); + } + + $action = NULL; + if (isset($page[1])) { + $action = $page[1]; + } + + switch ($action) { + case 'edit': + // use for the core profile edit page + require $CONFIG->path . 'pages/profile/edit.php'; + return; + break; + + default: + if (isset($page[1])) { + $section = $page[1]; + } else { + $section = 'activity'; + } + $content = profile_get_user_profile_html($user, $section); + $content = elgg_view_layout('one_column', array('content' => $content)); + break; + } + + echo elgg_view_page($title, $content); +} + +/** + * Returns the html for a user profile. + * + * @param string $username The username of the profile to display + * @param string $section Which section is currently selected. + * + * @todo - This should really use a plugin hook to get the list of plugin tabs + * + * @return mixed FALSE or html for the profile. + */ +function profile_get_user_profile_html($user, $section = 'activity') { + $body = elgg_view('profile/tab_navigation', array('section' => $section, 'entity' => $user)); + $view_options = array('entity' => $user); + + $content = elgg_view("profile/tabs/$section", $view_options); + + $body .= elgg_view('profile/content_wrapper', array('content' => $content)); + + $body .= elgg_view('profile/sidebar', array('section' => $section)); + return $body; +} + +/** + * Profile URL generator for $user->getUrl(); + * + * @param ElggUser $user + * @return string User URL + */ +function profile_url($user) { + return elgg_get_site_url() . "pg/profile/" . $user->username; +} + +/** + * Parse ECML on parts of the profile + * + * @param unknown_type $hook + * @param unknown_type $entity_type + * @param unknown_type $return_value + * @param unknown_type $params + */ +function profile_ecml_views_hook($hook, $entity_type, $return_value, $params) { + $return_value['profile/profile_content'] = elgg_echo('profile'); + + return $return_value; +} diff --git a/mod/tabbed_profile/views/default/icon/user/default/large.php b/mod/tabbed_profile/views/default/icon/user/default/large.php new file mode 100644 index 000000000..ac28f8e9a --- /dev/null +++ b/mod/tabbed_profile/views/default/icon/user/default/large.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/mod/tabbed_profile/views/default/icon/user/default/master.php b/mod/tabbed_profile/views/default/icon/user/default/master.php new file mode 100644 index 000000000..129b0d375 --- /dev/null +++ b/mod/tabbed_profile/views/default/icon/user/default/master.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/mod/tabbed_profile/views/default/icon/user/default/medium.php b/mod/tabbed_profile/views/default/icon/user/default/medium.php new file mode 100644 index 000000000..8815a65bc --- /dev/null +++ b/mod/tabbed_profile/views/default/icon/user/default/medium.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/mod/tabbed_profile/views/default/icon/user/default/small.php b/mod/tabbed_profile/views/default/icon/user/default/small.php new file mode 100644 index 000000000..895aa15cc --- /dev/null +++ b/mod/tabbed_profile/views/default/icon/user/default/small.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/mod/tabbed_profile/views/default/icon/user/default/tiny.php b/mod/tabbed_profile/views/default/icon/user/default/tiny.php new file mode 100644 index 000000000..866c61533 --- /dev/null +++ b/mod/tabbed_profile/views/default/icon/user/default/tiny.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/mod/tabbed_profile/views/default/icon/user/default/topbar.php b/mod/tabbed_profile/views/default/icon/user/default/topbar.php new file mode 100644 index 000000000..0ff3dbaaa --- /dev/null +++ b/mod/tabbed_profile/views/default/icon/user/default/topbar.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/mod/tabbed_profile/views/default/profile/admin_menu.php b/mod/tabbed_profile/views/default/profile/admin_menu.php new file mode 100755 index 000000000..99ed3a4f5 --- /dev/null +++ b/mod/tabbed_profile/views/default/profile/admin_menu.php @@ -0,0 +1,42 @@ + + + diff --git a/mod/profile/views/default/profile/commentwall/commentwall.php b/mod/tabbed_profile/views/default/profile/commentwall/commentwall.php similarity index 100% rename from mod/profile/views/default/profile/commentwall/commentwall.php rename to mod/tabbed_profile/views/default/profile/commentwall/commentwall.php diff --git a/mod/profile/views/default/profile/commentwall/commentwall_content.php b/mod/tabbed_profile/views/default/profile/commentwall/commentwall_content.php similarity index 100% rename from mod/profile/views/default/profile/commentwall/commentwall_content.php rename to mod/tabbed_profile/views/default/profile/commentwall/commentwall_content.php diff --git a/mod/profile/views/default/profile/commentwall/commentwalladd.php b/mod/tabbed_profile/views/default/profile/commentwall/commentwalladd.php similarity index 100% rename from mod/profile/views/default/profile/commentwall/commentwalladd.php rename to mod/tabbed_profile/views/default/profile/commentwall/commentwalladd.php diff --git a/mod/profile/views/default/profile/content_wrapper.php b/mod/tabbed_profile/views/default/profile/content_wrapper.php similarity index 100% rename from mod/profile/views/default/profile/content_wrapper.php rename to mod/tabbed_profile/views/default/profile/content_wrapper.php diff --git a/mod/tabbed_profile/views/default/profile/css.php b/mod/tabbed_profile/views/default/profile/css.php new file mode 100644 index 000000000..812daf16d --- /dev/null +++ b/mod/tabbed_profile/views/default/profile/css.php @@ -0,0 +1,458 @@ + +/* *************************************** + main layout blocks +*************************************** */ +#profile_content { + float:right; + width:700px; + position: relative; +} +#profile_sidebar { + width:230px; + float:left; +} +.elgg-horizontal-tabbed-nav.profile { + margin-top:0px; + margin-bottom:25px; + position:relative; +} +.elgg-horizontal-tabbed-nav.profile .profile_name { + display:block; + width:265px; + position:absolute; +} +.elgg-horizontal-tabbed-nav.profile .profile_name h2 { + margin:0; + padding:0; + border:none; +} +.elgg-horizontal-tabbed-nav.profile ul { + margin-left:260px; +} + +/* *************************************** + default avatar icons +*************************************** */ +.usericon { + position:relative; +} +.usericon.tiny, +img.tiny { + width:25px; + height:25px; + /* remove the border-radius if you don't want rounded avatars in supported browsers */ + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -moz-background-clip: border; + + -o-background-size: 25px; + -webkit-background-size: 25px; + -khtml-background-size: 25px; + -moz-background-size: 25px; +} +.usericon.small, +img.small { + width:40px; + height:40px; + /* remove the border-radius if you don't want rounded avatars in supported browsers */ + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -moz-background-clip: border; + + -o-background-size: 40px; + -webkit-background-size: 40px; + -khtml-background-size: 40px; + -moz-background-size: 40px; +} +img.large { + width:200px; + height:200px; +} +img.medium { + width:100px; + height:100px; +} + +/* *************************************** + ownerblock in sidebar +*************************************** */ +#profile_sidebar #owner_block { + background-color: #eeeeee; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + padding:15px; + min-height:270px; +} +#elgg-sidebar #owner_block { + background-color: white; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + padding:5px; + margin-bottom:10px; +} +#owner_block .owner_block_icon { + float:left; + padding:0; + margin:0; +} +#owner_block .owner_block_icon.large { + width:200px; + height:200px; + overflow: hidden; + float:none; +} +#owner_block .owner_block_contents { + margin-left: 50px; +} +#elgg-sidebar #owner_block .owner_block_contents { + margin-left: 34px; +} +#owner_block .owner_block_contents h3 { + margin-top:-4px; + border-bottom:none; + margin-bottom:0; + padding-bottom:0; +} +#owner_block .owner_block_contents p.profile_info { + margin:0; + padding:0; + color: #666666; +} +#owner_block .owner_block_contents p.profile_info.briefdescription { + font-size: 90%; + line-height:1.2em; + font-style: italic; +} +#owner_block .owner_block_contents p.profile_info.location { + font-size: 90%; +} +#owner_block .profile_actions { + margin-top:10px; +} +#owner_block .profile_actions a.action-button { + margin-bottom:4px; + display: table; +} +/* ownerblock links to owners tools */ +#owner_block .owners_content_links { + border-top:1px dotted #cccccc; + margin-top:4px; + padding-top:2px; +} +#owner_block .owners_content_links ul { + margin:0; + padding:0; +} +#owner_block .owners_content_links ul li { + display:block; + float:left; + width:95px; + font-size: 90%; +} +/* profile pages - ownerblock links to owners tools */ +.owner_block_links { + margin-top:5px; +} +.owner_block_links ul { + margin:0; + padding:0; + list-style: none; +} +.owner_block_links ul li.selected a { + background: #4690D6; + color:white; +} +.owner_block_links ul li a { + display:block; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + background-color:white; + margin:3px 0 5px 0; + padding:2px 4px 2px 8px; +} +.owner_block_links ul li a:hover { + background:#0054A7; + color:white; + text-decoration:none; +} + + +/* *************************************** + admin menu in sidebar +*************************************** */ +.owner_block_links .admin_menu_options { + display: none; +} +.owner_block_links ul.admin_menu { + background-color:white; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + cursor:pointer; +} +.owner_block_links ul.admin_menu li a { + background-color: white; + color:red; + margin-bottom:0; +} +.owner_block_links ul.admin_menu li a:hover { + color:black; +} +.owner_block_links ul.admin_menu li ul.admin_menu_options li a { + color:red; + background-color:white; + display:block; + margin:0px; + padding:2px 4px 2px 13px; +} +.owner_block_links ul.admin_menu li ul.admin_menu_options li a:hover { + color:black; + background:none; + text-decoration: underline; +} + + +/* *************************************** + full profile info panel +*************************************** */ +#profile_content .odd { + background-color:#f4f4f4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + margin:0 0 7px 0; + padding:2px 4px 2px 4px; +} +#profile_content .even { + background-color:#f4f4f4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + margin:0 0 7px 0; + padding:2px 4px 2px 4px; +} +#profile_content .aboutme_title { + background-color:#f4f4f4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + margin:0 0 0px 0; + padding:2px 4px 2px 4px; +} +#profile_content .aboutme_contents { + padding:2px 0 0 3px; +} + + +/* *************************************** + friends panel within profile +*************************************** */ +#profile_content .entity-listing .entity-listing-info { + width:664px; +} + + +/* *************************************** + commentwall within profile +*************************************** */ +#comment_wall_add textarea { + width:685px; +} +#comment_wall_add #postit { + float:right; +} + + +/* *************************************** + twitter panel within profile +*************************************** */ +ul#twitter_update_list { + padding-left:0; +} +ul#twitter_update_list li { + background-image: url(mod/profile/graphics/speech_bubble_tail.gif); + background-position:right bottom; + background-repeat: no-repeat; + list-style-image:none; + list-style-position:outside; + list-style-type:none; + margin:0 0 5px 0; + padding:0; + overflow-x: hidden; +} +ul#twitter_update_list li span { + color:#666666; + background:#ececec; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + padding:3px 5px 4px 5px; + display:block; +} +ul#twitter_update_list li a { + display:block; + margin:-2px 0 0 4px; +} +ul#twitter_update_list li span a { + display:inline !important; +} +p.visit_twitter a { + background:url(mod/profile/graphics/twitter16px.png) left no-repeat; + padding:0 0 0 20px; + margin:0; +} +.visit_twitter { + padding:5px 0; + margin:0 0 0 0; + border-top:1px solid #dedede; +} + +/* *************************************** + banned user +*************************************** */ +/* banned user full profile panel */ +#profile_content .banned_user { + border:2px solid red; + padding:4px 8px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; +} +/* banned user in friends lists */ +.entity-listing-info p.entity-title.user.banned { + text-decoration: line-through; +} +.entity-listing-info p.entity-title.user.banned a { + color:red; +} + + +/* *************************************** + admin area - custom profile fields +*************************************** */ +.default_profile_reset { + border-top: 1px solid #dedede; + margin-top:30px; +} +.default_profile_reset .action-button { + float:right; +} +/* field re-order */ +#sortable_profile_fields { + list-style: none; + padding:0; + margin:0; + border-top:1px solid #cccccc; +} +#sortable_profile_fields li { + padding:5px 0 5px 0; + border-bottom:1px solid #cccccc; +} +#sortable_profile_fields li img.handle { + margin-right: 7px; + cursor: move; +} +#sortable_profile_fields .ui-sortable-helper { + background: #eeeeee; + color:#333333; + padding: 5px 0 5px 0; + margin: 0; + width:100%; +} + + +/* *************************************** + avatar drop-down menu +*************************************** */ +.avatar_menu_button { + width:15px; + height:15px; + position:absolute; + cursor:pointer; + display:none; + right:0; + bottom:0; +} +.avatar_menu_arrow { + background: url(_graphics/elgg_sprites.png) no-repeat -150px top; + width:15px; + height:15px; +} +.avatar_menu_arrow_on { + background: url(_graphics/elgg_sprites.png) no-repeat -150px -16px; + width:15px; + height:15px; +} +.avatar_menu_arrow_hover { + background: url(_graphics/elgg_sprites.png) no-repeat -150px -32px; + width:15px; + height:15px; +} +/* user avatar submenu options */ +.usericon .sub_menu { + display:none; + position:absolute; + padding:0; + margin:0; + border-top:solid 1px #E5E5E5; + border-left:solid 1px #E5E5E5; + border-right:solid 1px #999999; + border-bottom:solid 1px #999999; + width:164px; + background:#FFFFFF; + text-align:left; + -webkit-box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.50); + -moz-box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.50); + font-size:14px; +} +div.usericon a.icon img { + z-index:10; +} +.usericon .sub_menu a:link, +.usericon .sub_menu a:visited, +.usericon .sub_menu a:hover { + display:block; + font-weight: normal; +} +.usericon .sub_menu a:hover { + background:#cccccc; + text-decoration:none; +} +.usericon .sub_menu .displayname { + padding:0 !important; + margin:0 !important; + border-bottom:solid 1px #dddddd !important; + font-size:14px !important; +} +.usericon .sub_menu .displayname a { + padding:3px 3px 3px 8px; + font-size:14px; + font-weight: bold; +} +.usericon .sub_menu .displayname a .username { + display:block; + font-weight: normal; + font-size:12px; + text-align: left; + margin:0; +} +.sub_menu ul.sub_menu_list { + list-style: none; + margin-bottom:0; + padding-left:0; +} +.usericon .sub_menu a { + padding:2px 3px 2px 8px; + font-size:12px; +} +/* admin menu options in avatar submenu */ +.user_menu_admin { + border-top:solid 1px #dddddd; +} +.usericon .sub_menu li.user_menu_admin a { + color:red; +} +.usericon .sub_menu li.user_menu_admin a:hover { + color:white; + background:red; +} diff --git a/mod/tabbed_profile/views/default/profile/hoverover.php b/mod/tabbed_profile/views/default/profile/hoverover.php new file mode 100644 index 000000000..172ef5d3d --- /dev/null +++ b/mod/tabbed_profile/views/default/profile/hoverover.php @@ -0,0 +1,16 @@ + +
  • + name; ?> +
  • + \ No newline at end of file diff --git a/mod/tabbed_profile/views/default/profile/icon.php b/mod/tabbed_profile/views/default/profile/icon.php new file mode 100644 index 000000000..71b25fe6c --- /dev/null +++ b/mod/tabbed_profile/views/default/profile/icon.php @@ -0,0 +1,111 @@ +name, ENT_QUOTES, 'UTF-8'); + $username = $vars['entity']->username; + + if ($icontime = $vars['entity']->icontime) { + $icontime = "{$icontime}"; + } else { + $icontime = "default"; + } + + // Get size + if (!in_array($vars['size'],array('small','medium','large','tiny','master','topbar'))) { + $vars['size'] = 'medium'; + } + + // Get any align and js + if (!empty($vars['align'])) { + $align = " align=\"{$vars['align']}\" "; + } else { + $align = ''; + } + + // Override + if (isset($vars['override']) && $vars['override'] == true) { + $override = true; + } else { + $override = false; + } + // profile avatar drop-down menu + if (!$override) { + ?> +
    +
    + + isBanned())) { + ?> + alt="name, ENT_QUOTES, 'UTF-8'); ?>" title="name, ENT_QUOTES, 'UTF-8'); ?>" style="background: url(getIcon($vars['size']); ?>) no-repeat;" class="" /> + getIcon($vars['size'])); ?>" border="0" alt="name, ENT_QUOTES, 'UTF-8'); ?>" title="name, ENT_QUOTES, 'UTF-8'); ?>" /> + */ + + if (!$override) { + ?> +
    + + +var submenuLayer = 1000; + +function setup_avatar_menu(parent) { + if (!parent) { + parent = document; + } + + // avatar image menu link + $(parent).find("div.usericon img").mouseover(function() { + // find nested avatar_menu_button and show + $(this.parentNode.parentNode).children(".avatar_menu_button").show(); + $(this.parentNode.parentNode).children("div.avatar_menu_button").addClass("avatar_menu_arrow"); + //$(this.parentNode.parentNode).css("z-index", submenuLayer); + }) + .mouseout(function() { + if($(this).parent().parent().find("div.sub_menu").css('display')!="block") { + $(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow"); + $(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow_on"); + $(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow_hover"); + $(this.parentNode.parentNode).children(".avatar_menu_button").hide(); + } + else { + $(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow"); + $(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow_on"); + $(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow_hover"); + $(this.parentNode.parentNode).children(".avatar_menu_button").show(); + $(this.parentNode.parentNode).children("div.avatar_menu_button").addClass("avatar_menu_arrow"); + } + }); + + + // avatar contextual menu + $(".avatar_menu_button img").click(function(e) { + + var submenu = $(this).parent().parent().find("div.sub_menu"); + + // close submenu if arrow is clicked & menu already open + if(submenu.css('display') == "block") { + //submenu.hide(); + } + else { + // get avatar dimensions + var avatar = $(this).parent().parent().parent().find("div.usericon"); + //alert( "avatarWidth: " + avatar.width() + ", avatarHeight: " + avatar.height() ); + + // move submenu position so it aligns with arrow graphic + if (e.pageX < 840) { // popup menu to left of arrow if we're at edge of page + submenu.css("top",(avatar.height()) + "px") + .css("left",(avatar.width()-15) + "px") + .fadeIn('normal'); + } + else { + submenu.css("top",(avatar.height()) + "px") + .css("left",(avatar.width()-166) + "px") + .fadeIn('normal'); + } + + // force z-index - workaround for IE z-index bug + avatar.css("z-index", submenuLayer); + avatar.find("a.icon img").css("z-index", submenuLayer); + submenu.css("z-index", submenuLayer+1); + + submenuLayer++; + + // change arrow to 'on' state + $(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow"); + $(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow_hover"); + $(this.parentNode.parentNode).children("div.avatar_menu_button").addClass("avatar_menu_arrow_on"); + } + + // hide any other open submenus and reset arrows + $("div.sub_menu:visible").not(submenu).hide(); + $(".avatar_menu_button").removeClass("avatar_menu_arrow"); + $(".avatar_menu_button").removeClass("avatar_menu_arrow_on"); + $(".avatar_menu_button").removeClass("avatar_menu_arrow_hover"); + $(".avatar_menu_button").hide(); + $(this.parentNode.parentNode).children("div.avatar_menu_button").addClass("avatar_menu_arrow_on"); + $(this.parentNode.parentNode).children("div.avatar_menu_button").show(); + //alert("submenuLayer = " +submenu.css("z-index")); + }) + // hover arrow each time mouseover enters arrow graphic (eg. when menu is already shown) + .mouseover(function() { + $(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow_on"); + $(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow"); + $(this.parentNode.parentNode).children("div.avatar_menu_button").addClass("avatar_menu_arrow_hover"); + }) + // if menu not shown revert arrow, else show 'menu open' arrow + .mouseout(function() { + if($(this).parent().parent().find("div.sub_menu").css('display')!="block"){ + $(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow_hover"); + $(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow"); + $(this.parentNode.parentNode).children("div.avatar_menu_button").addClass("avatar_menu_arrow"); + } + else { + $(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow_hover"); + $(this.parentNode.parentNode).children("div.avatar_menu_button").removeClass("avatar_menu_arrow"); + $(this.parentNode.parentNode).children("div.avatar_menu_button").addClass("avatar_menu_arrow_on"); + } + }); + + // hide avatar menu if click occurs outside of menu + // and hide arrow button + $(document).click(function(event) { + var target = $(event.target); + if (target.parents(".usericon").length == 0) { + $(".usericon div.sub_menu").fadeOut(); + $(".avatar_menu_button").removeClass("avatar_menu_arrow"); + $(".avatar_menu_button").removeClass("avatar_menu_arrow_on"); + $(".avatar_menu_button").removeClass("avatar_menu_arrow_hover"); + $(".avatar_menu_button").hide(); + } + }); + + +} + +$(document).ready(function() { + + setup_avatar_menu(); + +}); diff --git a/mod/tabbed_profile/views/default/profile/listing.php b/mod/tabbed_profile/views/default/profile/listing.php new file mode 100644 index 000000000..0622264b8 --- /dev/null +++ b/mod/tabbed_profile/views/default/profile/listing.php @@ -0,0 +1,49 @@ + $vars['entity'], + 'size' => 'tiny', + ) +); + +$banned = $vars['entity']->isBanned(); + +// Simple XFN +$rel_type = ""; +if (get_loggedin_userid() == $vars['entity']->guid) { + $rel_type = 'me'; +} elseif (check_entity_relationship(get_loggedin_userid(), 'friend', $vars['entity']->guid)) { + $rel_type = 'friend'; +} + +if ($rel_type) { + $rel = "rel=\"$rel_type\""; +} + +if (!$banned) { + $info .= "

    getUrl() . "\" $rel>" . $vars['entity']->name . "

    "; + $location = $vars['entity']->location; + if (!empty($location)) { + $info .= "

    " . elgg_echo("profile:location") . ": " . elgg_view("output/tags",array('value' => $vars['entity']->location)) . "

    "; + } + //create a view that a status plugin could extend - in the default case, this is the wire + $info .= elgg_view("profile/status", array("entity" => $vars['entity'])); +}else{ + $info .= "

    "; + if (isadminloggedin()) + $info .= "getUrl() . "\">"; + $info .= $vars['entity']->name; + if (isadminloggedin()) + $info .= ""; + $info .= "

    "; +} + +echo elgg_view_listing($icon, $info); diff --git a/mod/tabbed_profile/views/default/profile/menu/adminlinks.php b/mod/tabbed_profile/views/default/profile/menu/adminlinks.php new file mode 100644 index 000000000..39807764a --- /dev/null +++ b/mod/tabbed_profile/views/default/profile/menu/adminlinks.php @@ -0,0 +1,28 @@ +guid){ +?> + +isBanned()) { + echo elgg_view('output/confirmlink', array('text' => elgg_echo("ban"), 'href' => "action/admin/user/ban?guid={$vars['entity']->guid}")); + } else { + echo elgg_view('output/confirmlink', array('text' => elgg_echo("unban"), 'href' => "action/admin/user/unban?guid={$vars['entity']->guid}")); + } + echo elgg_view('output/confirmlink', array('text' => elgg_echo("delete"), 'href' => "action/admin/user/delete?guid={$vars['entity']->guid}")); + echo elgg_view('output/confirmlink', array('text' => elgg_echo("resetpassword"), 'href' => "action/admin/user/resetpassword?guid={$vars['entity']->guid}")); + if (!$vars['entity']->isAdmin()) { + echo elgg_view('output/confirmlink', array('text' => elgg_echo("makeadmin"), 'href' => "action/admin/user/makeadmin?guid={$vars['entity']->guid}")); + } else { + echo elgg_view('output/confirmlink', array('text' => elgg_echo("removeadmin"), 'href' => "action/admin/user/removeadmin?guid={$vars['entity']->guid}")); + } + } + } diff --git a/mod/tabbed_profile/views/default/profile/menu/friendlinks.php b/mod/tabbed_profile/views/default/profile/menu/friendlinks.php new file mode 100644 index 000000000..ed13edb8b --- /dev/null +++ b/mod/tabbed_profile/views/default/profile/menu/friendlinks.php @@ -0,0 +1,23 @@ +isFriend()) { + echo elgg_view('output/confirmlink', array( + 'href' => "action/friends/remove?friend={$vars['entity']->getGUID()}", + 'text' => elgg_echo('friend:remove'), + 'class' => 'remove_friend' + )); +} else { + echo elgg_view('output/confirmlink', array( + 'href' => "action/friends/add?friend={$vars['entity']->getGUID()}", + 'text' => elgg_echo('friend:add'), + 'class' => 'add_friend' + )); +} \ No newline at end of file diff --git a/mod/tabbed_profile/views/default/profile/menu/links.php b/mod/tabbed_profile/views/default/profile/menu/links.php new file mode 100644 index 000000000..4233d7ec5 --- /dev/null +++ b/mod/tabbed_profile/views/default/profile/menu/links.php @@ -0,0 +1,9 @@ + diff --git a/mod/tabbed_profile/views/default/profile/metatags.php b/mod/tabbed_profile/views/default/profile/metatags.php new file mode 100644 index 000000000..1197a2e0a --- /dev/null +++ b/mod/tabbed_profile/views/default/profile/metatags.php @@ -0,0 +1,14 @@ + + +container_guid); + } else { + $user = get_entity($vars['entity']->guid); + } +} else { + $user = elgg_get_page_owner(); +} +if (!$user) { + // no user so we quit view + echo elgg_echo('viewfailure', array(__FILE__)); + return TRUE; +} + +$more_info = ''; + +$location = elgg_view("output/tags",array('value' => $user->location)); +$section = $vars['section']; +if ($section == 'details') { + $icon = elgg_view("profile/icon",array('entity' => $user, 'size' => 'large', 'override' => 'true')); + $icon_class = "large"; +} else { + $icon = elgg_view("profile/icon",array('entity' => $user, 'size' => 'small')); + $more_info = "
    "; + $more_info .= "

    {$user->name}

    "; + $more_info .= "

    {$user->briefdescription}

    "; + $more_info .= "

    {$location}

    "; + $more_info .= "
    "; +} +$profile_actions = ""; +if (isloggedin() && (get_loggedin_userid() == elgg_get_page_owner_guid())) { + $profile_actions = "
    "; + $profile_actions .= "". elgg_echo('profile:edit') .""; + $profile_actions .= "". elgg_echo('avatar:edit') .""; + $profile_actions .= "
    "; +} else { + $profile_actions = "
    "; + if (isloggedin()) { + if (get_loggedin_userid() != $user->getGUID()) { + if ($user->isFriend()) { + $url = elgg_get_site_url()."action/friends/remove?friend={$user->getGUID()}"; + $url = elgg_add_action_tokens_to_url($url); + $profile_actions .= "" . elgg_echo('friend:remove') . ""; + } else { + $url = elgg_get_site_url()."action/friends/add?friend={$user->getGUID()}"; + $url = elgg_add_action_tokens_to_url($url); + $profile_actions .= "" . elgg_echo('friend:add') . ""; + } + } + } + if (is_plugin_enabled('messages') && isloggedin()) { + $profile_actions .= "guid}\" class='action-button'>". elgg_echo('messages:send') .""; + } + $profile_actions .= "
    "; +} + +$username = $user->username; +$email = $user->email; +$phone = $user->phone; + + +//if admin display admin links +if (isadminloggedin()) { + $admin_links = elgg_view('profile/admin_menu'); +} else { + $admin_links = ''; +} + + +//check tools are enabled - hard-coded for phase1 +// @todo - provide a view to extend for profile pages ownerblock tool-links +if(is_plugin_enabled('blog')){ + $blog_link = "
  • Blog
  • "; +}else{ + $blog_link = ""; +} +if(is_plugin_enabled('bookmarks')){ + $bookmark_link = "
  • Bookmarks
  • "; +}else{ + $bookmark_link = ""; +} +if(is_plugin_enabled('document')){ + $docs_link = "
  • Documents
  • "; +}else{ + $docs_link = ""; +} +if(is_plugin_enabled('feeds')){ + $feeds_link = "
  • Feeds
  • "; +}else{ + $feeds_link = ""; +} +if(is_plugin_enabled('tidypics')){ + $tidypics_link = "
  • Photos
  • "; +}else{ + $tidypics_link = ""; +} +if(is_plugin_enabled('videolist')){ + $video_link = "
  • Videos
  • "; +}else{ + $video_link = ""; +} + +//contruct the display +$display = << +
    + {$icon} +
    + {$more_info} + {$profile_actions} + + + {$admin_links} + + +EOT; + +echo $display; diff --git a/mod/tabbed_profile/views/default/profile/sidebar.php b/mod/tabbed_profile/views/default/profile/sidebar.php new file mode 100644 index 000000000..525a2da81 --- /dev/null +++ b/mod/tabbed_profile/views/default/profile/sidebar.php @@ -0,0 +1,13 @@ + +
    + $section)); +?> +
    \ No newline at end of file diff --git a/mod/profile/views/default/profile/tab_navigation.php b/mod/tabbed_profile/views/default/profile/tab_navigation.php similarity index 100% rename from mod/profile/views/default/profile/tab_navigation.php rename to mod/tabbed_profile/views/default/profile/tab_navigation.php diff --git a/mod/profile/views/default/profile/tabs/activity.php b/mod/tabbed_profile/views/default/profile/tabs/activity.php similarity index 100% rename from mod/profile/views/default/profile/tabs/activity.php rename to mod/tabbed_profile/views/default/profile/tabs/activity.php diff --git a/mod/profile/views/default/profile/tabs/commentwall.php b/mod/tabbed_profile/views/default/profile/tabs/commentwall.php similarity index 100% rename from mod/profile/views/default/profile/tabs/commentwall.php rename to mod/tabbed_profile/views/default/profile/tabs/commentwall.php diff --git a/mod/tabbed_profile/views/default/profile/tabs/details.php b/mod/tabbed_profile/views/default/profile/tabs/details.php new file mode 100755 index 000000000..27b0f943b --- /dev/null +++ b/mod/tabbed_profile/views/default/profile/tabs/details.php @@ -0,0 +1,41 @@ +profile) && sizeof($vars['config']->profile) > 0) { + foreach($vars['config']->profile as $shortname => $valtype) { + if ($shortname != "description") { + $value = $vars['entity']->$shortname; + if (!empty($value)) { + //This function controls the alternating class + $even_odd = ( 'odd' != $even_odd ) ? 'odd' : 'even'; + ?> +

    + : + $vars['entity']->$shortname)); + ?> +

    + isBanned()) { + echo "
    "; + echo elgg_echo('profile:banned'); + echo "
    "; + } else { + if ($vars['entity']->description) { + echo "

    " . elgg_echo("profile:aboutme") . "

    "; + echo "
    " . elgg_view('output/longtext', array('value' => $vars['entity']->description)) . "
    "; + } + } +} diff --git a/mod/profile/views/default/profile/tabs/friends.php b/mod/tabbed_profile/views/default/profile/tabs/friends.php similarity index 100% rename from mod/profile/views/default/profile/tabs/friends.php rename to mod/tabbed_profile/views/default/profile/tabs/friends.php diff --git a/mod/profile/views/default/profile/tabs/groups.php b/mod/tabbed_profile/views/default/profile/tabs/groups.php similarity index 100% rename from mod/profile/views/default/profile/tabs/groups.php rename to mod/tabbed_profile/views/default/profile/tabs/groups.php diff --git a/mod/profile/views/default/profile/tabs/twitter.php b/mod/tabbed_profile/views/default/profile/tabs/twitter.php similarity index 100% rename from mod/profile/views/default/profile/tabs/twitter.php rename to mod/tabbed_profile/views/default/profile/tabs/twitter.php