t('Displays a full channel profile'), 'tagcloud' => t('Tag cloud of webpage categories'), 'collections' => t('List and filter by collection'), 'suggestions' => t('Show a couple of channel suggestion'), 'follow' => t('Provide a channel follow form') ); $arr = array('widgets' => $widgets); call_hooks('list_widgets',$arr); return $arr['widgets']; } function widget_profile($args) { $a = get_app(); $block = (((get_config('system','block_public')) && (! local_user()) && (! remote_user())) ? true : false); return profile_sidebar($a->profile, $block, true); } // FIXME The problem with the next widget is that we don't have a search function for webpages that we can send the links to. // Then we should also provide an option to search webpages and conversations. function widget_tagcloud($args) { $o = ''; $tab = 0; $a = get_app(); $uid = $a->profile_uid; $count = ((x($args,'count')) ? intval($args['count']) : 24); $flags = 0; $type = TERM_CATEGORY; $r = tagadelic($uid,$count,$authors,$flags,ITEM_WEBPAGE,$type); if($r) { $o = '
'; } return $o; } function widget_collections($args) { require_once('include/group.php'); $page = argv(0); $gid = $_REQUEST['gid']; return group_side($page,$page,true,$_REQUEST['gid'],'',0); } function widget_suggestions($arr) { require_once('include/socgraph.php'); $r = suggestion_query(local_user(),get_observer_hash(),0,20); if(! $r) { return; } $arr = array(); // Get two random entries from the top 20 returned. // We'll grab the first one and the one immediately following. // This will throw some entropy intot he situation so you won't // be looking at the same two mug shots every time the widget runs $index = ((count($r) > 2) ? mt_rand(0,count($r) - 2) : 0); for($x = $index; $x <= ($index+1); $x ++) { $rr = $r[$x]; if(! $rr['xchan_url']) break; $connlnk = z_root() . '/follow/?url=' . $rr['xchan_addr']; $arr[] = array( 'url' => chanlink_url($rr['xchan_url']), 'profile' => $rr['xchan_url'], 'name' => $rr['xchan_name'], 'photo' => $rr['xchan_photo_m'], 'ignlnk' => z_root() . '/suggest?ignore=' . $rr['xchan_hash'], 'conntxt' => t('Connect'), 'connlnk' => $connlnk, 'ignore' => t('Ignore/Hide') ); } $o = replace_macros(get_markup_template('suggest_widget.tpl'),array( '$title' => t('Suggestions'), '$more' => t('See more...'), '$entries' => $arr )); return $o; } function widget_follow($args) { if(! local_user()) return ''; $a = get_app(); $uid =$a->channel['channel_id']; $r = q("select count(*) as total from abook where abook_channel = %d and not (abook_flags & %d) ", intval($uid), intval(ABOOK_FLAG_SELF) ); if($r) $total_channels = $r[0]['total']; $limit = service_class_fetch($uid,'total_channels'); if($limit !== false) { $abook_usage_message = sprintf( t("You have %1$.0f of %2$.0f allowed connections."), $total_channels, $limit); } else { $abook_usage_message = ''; } return replace_macros(get_markup_template('follow.tpl'),array( '$connect' => t('Add New Connection'), '$desc' => t('Enter the channel address'), '$hint' => t('Example: bob@example.com, http://example.com/barbara'), '$follow' => t('Connect'), '$abook_usage_message' => $abook_usage_message )); } function widget_notes($arr) { if(! local_user()) return ''; if(! feature_enabled(local_user(),'private_notes')) return ''; $text = htmlspecialchars(get_pconfig(local_user(),'notes','text')); $o = replace_macros(get_markup_template('notes.tpl'), array( '$banner' => t('Notes'), '$text' => $text, '$save' => t('Save'), )); return $o; } function widget_savedsearch($arr) { if((! local_user()) || (! feature_enabled(local_user(),'savedsearch'))) return ''; $a = get_app(); $search = ((x($_GET,'search')) ? $_GET['search'] : ''); if(x($_GET,'searchsave') && $search) { $r = q("select * from `term` where `uid` = %d and `type` = %d and `term` = '%s' limit 1", intval(local_user()), intval(TERM_SAVEDSEARCH), dbesc($search) ); if(! $r) { q("insert into `term` ( `uid`,`type`,`term` ) values ( %d, %d, '%s') ", intval(local_user()), intval(TERM_SAVEDSEARCH), dbesc($search) ); } } if(x($_GET,'searchremove') && $search) { q("delete from `term` where `uid` = %d and `type` = %d and `term` = '%s' limit 1", intval(local_user()), intval(TERM_SAVEDSEARCH), dbesc($search) ); $search = ''; } $srchurl = $a->query_string; $srchurl = rtrim(preg_replace('/searchsave\=[^\&].*?(\&|$)/is','',$srchurl),'&'); $hasq = ((strpos($srchurl,'?') !== false) ? true : false); $srchurl = rtrim(preg_replace('/searchremove\=[^\&].*?(\&|$)/is','',$srchurl),'&'); $hasq = ((strpos($srchurl,'?') !== false) ? true : false); $srchurl = rtrim(preg_replace('/search\=[^\&].*?(\&|$)/is','',$srchurl),'&'); $srchurl = str_replace(array('?f=','&f='),array('',''),$srchurl); $hasq = ((strpos($srchurl,'?') !== false) ? true : false); $o = ''; $r = q("select `tid`,`term` from `term` WHERE `uid` = %d and `type` = %d ", intval(local_user()), intval(TERM_SAVEDSEARCH) ); $saved = array(); if(count($r)) { foreach($r as $rr) { $saved[] = array( 'id' => $rr['tid'], 'term' => $rr['term'], 'dellink' => z_root() . '/' . $srchurl . (($hasq) ? '' : '?f=') . '&searchremove=1&search=' . urlencode($rr['term']), 'srchlink' => z_root() . '/' . $srchurl . (($hasq) ? '' : '?f=') . '&search=' . urlencode($rr['term']), 'displayterm' => htmlspecialchars($rr['term']), 'encodedterm' => urlencode($rr['term']), 'delete' => t('Remove term'), 'selected' => ($search==$rr['term']), ); } } $tpl = get_markup_template("saved_searches.tpl"); $o = replace_macros($tpl, array( '$title' => t('Saved Searches'), '$add' => t('add'), '$searchbox' => searchbox('','netsearch-box',$srchurl . (($hasq) ? '' : '?f='),true), '$saved' => $saved, )); return $o; } function widget_filer($arr) { if(! local_user()) return ''; $a = get_app(); $selected = ((x($_REQUEST,'file')) ? $_REQUEST['file'] : ''); $terms = array(); $r = q("select distinct(term) from term where uid = %d and type = %d order by term asc", intval(local_user()), intval(TERM_FILE) ); if(! $r) return; foreach($r as $rr) $terms[] = array('name' => $rr['term'], 'selected' => (($selected == $rr['term']) ? 'selected' : '')); return replace_macros(get_markup_template('fileas_widget.tpl'),array( '$title' => t('Saved Folders'), '$desc' => '', '$sel_all' => (($selected == '') ? 'selected' : ''), '$all' => t('Everything'), '$terms' => $terms, '$base' => z_root() . '/' . $a->cmd )); } function widget_archive($arr) { $o = ''; $a = get_app(); if(! $a->profile_uid) { return ''; } $uid = $a->profile_uid; if(! feature_enabled($uid,'archives')) return ''; $wall = ((array_key_exists('wall', $arr)) ? intval($arr['wall']) : 0); $url = z_root() . '/' . $a->cmd; $ret = posted_dates($uid,$wall); if(! count($ret)) return ''; $o = replace_macros(get_markup_template('posted_date_widget.tpl'),array( '$title' => t('Archives'), '$size' => ((count($ret) > 6) ? 6 : count($ret)), '$url' => $url, '$dates' => $ret )); return $o; } function widget_fullprofile($arr) { $a = get_app(); if(! $a->profile['profile_uid']) return; $block = (((get_config('system','block_public')) && (! local_user()) && (! remote_user())) ? true : false); return profile_sidebar($a->profile, $block); } function widget_categories($arr) { $a = get_app(); $cat = ((x($_REQUEST,'cat')) ? htmlspecialchars($_REQUEST['cat']) : ''); $srchurl = $a->query_string; $srchurl = rtrim(preg_replace('/cat\=[^\&].*?(\&|$)/is','',$srchurl),'&'); $srchurl = str_replace(array('?f=','&f='),array('',''),$srchurl); return categories_widget($srchurl,$cat); } function widget_tagcloud_wall($arr) { $a = get_app(); if((! $a->profile['profile_uid']) || (! $a->profile['channel_hash'])) return ''; $limit = ((array_key_exists('limit',$arr)) ? intval($arr['limit']) : 50); if(feature_enabled($a->profile['profile_uid'],'tagadelic')) return tagblock('search',$a->profile['profile_uid'],$limit,$a->profile['channel_hash'],ITEM_WALL); return ''; }