Merge remote-tracking branch 'upstream/master'

pull/91/head
Michael Vogel 2012-12-30 21:32:41 +01:00
commit 52a2a800cf
78 changed files with 823 additions and 640 deletions

18
INSTALL.txt Normal file
View File

@ -0,0 +1,18 @@
*********************
* Install Using Git *
*********************
To install all addons using git, cd into your top level Friendica directory and
git clone https://github.com/friendica/friendica-addons.git addon
This will clone the entire repository in a directory called addon. They can now be activated in the plugins section of your admin panel.
********************
* Install Manually *
********************
1. Download the archive (AddonName.tgz) containing the addon you want to install.
2. Unzip the contents of the archive to your harddrive.
3. Upload the extracted directory and all it's contents to /path/to/friendica/addon. You will need to create the addon directory if this is the first addon you have installed.
4. Activate the addon in the plugins section of your admin panel.

Binary file not shown.

View File

@ -93,7 +93,7 @@ function altpager_settings(&$a,&$s) {
}
function altpager_plugin_admin(&$a, &$o){
$t = file_get_contents( "addon/altpager/admin.tpl" );
$t = get_markup_template( "admin.tpl", "addon/altpager/" );
$o = replace_macros($t, array(
'$submit' => t('Submit'),
'$global' => array('altpagerchoice', t('Global'), 1, t('Force global use of the alternate pager'), get_config('alt_pager', 'global') == 1),
@ -106,3 +106,4 @@ function altpager_plugin_admin_post(&$a){
set_config('alt_pager','global',($choice == 1 ? 1 : 0));
info( t('Settings updated.'). EOL );
}

0
altpager/admin.tpl → altpager/view/admin.tpl Executable file → Normal file
View File

View File

View File

@ -0,0 +1,3 @@
{{include file="field_radio.tpl" field=$global}}
{{include file="field_radio.tpl" field=$individual}}
<div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div>

Binary file not shown.

View File

@ -93,8 +93,9 @@ function blackout_plugin_admin(&$a, &$o) {
if (! is_string($myend)) { $myend = "YYYY-MM-DD:hhmm"; }
$myurl = get_config('blackout','url');
if (! is_string($myurl)) { $myurl = "http://www.example.com"; }
$t = file_get_contents( dirname(__file__)."/admin.tpl" );
$o = replace_macros($t, array(
$t = get_markup_template( "admin.tpl", "addon/blackout/" );
$o = replace_macros($t, array(
'$submit' => t('Submit'),
'$rurl' => array("rurl", "Redirect URL", $myurl, "all your visitors from the web will be redirected to this URL"),
'$startdate' => array("startdate", "Begin of the Blackout<br />(YYYY-MM-DD hh:mm)", $mystart, "format is <em>YYYY</em> year, <em>MM</em> month, <em>DD</em> day, <em>hh</em> hour and <em>mm</em> minute"),

View File

@ -0,0 +1,11 @@
{{include file="field_input.tpl" field=$startdate}}
{{include file="field_input.tpl" field=$enddate}}
{{include file="field_input.tpl" field=$rurl}}
<div style="border: 2px solid #f00; padding: 10px; margin:
10px;font-size: 1.2em;"><strong>Note</strong>: The redirect will be active from the moment you
press the submit button. Users currently logged in will <strong>not</strong> be
thrown out but can't login again after logging out should the blackout is
still in place.</div>
<div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div>

Binary file not shown.

View File

@ -9,3 +9,26 @@ choosed to be in site directory), last ten public photos and last ten
In main content is shown the community stream. This plugin doesn't
honour your community page visibility site setting: the community
stream is shown also if you have choose to not show the community page.
If 'home.html' is found in your friendica root, its content is inserted
before community stream
Each elements can be show or not. At the moment, there is no admin page
for settings, so this settings must be added to yout .htconfig.php
$a->config['communityhome']['showcommunitystream'] = true;
$a->config['communityhome']['showlastlike'] = true;
$a->config['communityhome']['showlastphotos'] = true;
$a->config['communityhome']['showactiveusers'] = true;
$a->config['communityhome']['showlastusers'] = true;
If you don't want to show something, set it to false.
Note:
-----
- Default is "false". With no settings in .htconfig.php, nothing is
shown, except login form and content of 'home.html'
- Active users query can be heavy for db, and on some system don't work

View File

@ -39,4 +39,5 @@ aside .directory-photo-img { max-width: 48px; max-height: 48px; }
aside #likes { margin: 0px; padding: 0px; list-style: none; }
aside #login-extra-links { overflow: auto; width: 100%; padding-top:120px;}
aside #div_id_remember { overflow: auto; width: 100%; padding-top:120px;}
#login_openid input { width: 160px; }

View File

@ -2,7 +2,7 @@
/**
* Name: Community home
* Description: Show last community activity in homepage
* Version: 1.0
* Version: 2.0
* Author: Fabio Comuni <http://kirgroup.com/profile/fabrixxm>
*/
@ -35,151 +35,166 @@ function communityhome_home(&$a, &$o){
$aside['$login_form'] = login(($a->config['register_policy'] == REGISTER_CLOSED) ? false : true);
// last 12 users
$aside['$lastusers_title'] = t('Latest users');
$aside['$lastusers_items'] = array();
$sql_extra = "";
$publish = (get_config('system','publish_all') ? '' : " AND `publish` = 1 " );
$order = " ORDER BY `register_date` DESC ";
if (get_config('communityhome','showlastusers')===true){
$aside['$lastusers_title'] = t('Latest users');
$aside['$lastusers_items'] = array();
$sql_extra = "";
$publish = (get_config('system','publish_all') ? '' : " AND `publish` = 1 " );
$order = " ORDER BY `register_date` DESC ";
$r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`
FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid`
WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 $sql_extra $order LIMIT %d , %d ",
0,
12
);
$tpl = file_get_contents( dirname(__file__).'/directory_item.tpl');
if(count($r)) {
$photo = 'thumb';
foreach($r as $rr) {
$profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']);
$entry = replace_macros($tpl,array(
'$id' => $rr['id'],
'$profile-link' => $profile_link,
'$photo' => $a->get_cached_avatar_image($rr[$photo]),
'$alt-text' => $rr['name'],
));
$aside['$lastusers_items'][] = $entry;
$r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`
FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid`
WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 $sql_extra $order LIMIT %d , %d ",
0,
12
);
# $tpl = file_get_contents( dirname(__file__).'/directory_item.tpl');
$tpl = get_markup_template( 'directory_item.tpl', 'addon/communityhome/' );
if(count($r)) {
$photo = 'thumb';
foreach($r as $rr) {
$profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']);
$entry = replace_macros($tpl,array(
'$id' => $rr['id'],
'$profile_link' => $profile_link,
'$photo' => $a->get_cached_avatar_image($rr[$photo]),
'$alt_text' => $rr['name'],
));
$aside['$lastusers_items'][] = $entry;
}
}
}
// 12 most active users (by posts and contacts)
// this query don't work on some mysql versions
$r = q("SELECT `uni`.`contacts`,`uni`.`items`, `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname` FROM
(SELECT COUNT(`id`) as `contacts`, `uid` FROM `contact` WHERE `self`=0 GROUP BY `uid`) AS `con`,
(SELECT COUNT(`id`) as `items`, `uid` FROM `item` WHERE `item`.`changed` > DATE(NOW() - INTERVAL 1 MONTH) AND `item`.`wall` = 1 GROUP BY `uid`) AS `ite`,
(
SELECT `contacts`,`items`,`ite`.`uid` FROM `con` RIGHT OUTER JOIN `ite` ON `con`.`uid`=`ite`.`uid`
UNION ALL
SELECT `contacts`,`items`,`con`.`uid` FROM `con` LEFT OUTER JOIN `ite` ON `con`.`uid`=`ite`.`uid`
) AS `uni`, `user`, `profile`
WHERE `uni`.`uid`=`user`.`uid`
AND `uni`.`uid`=`profile`.`uid` AND `profile`.`publish`=1
GROUP BY `uid`
ORDER BY `items` DESC,`contacts` DESC
LIMIT 0,10");
if($r && count($r)) {
$aside['$activeusers_title'] = t('Most active users');
$aside['$activeusers_items'] = array();
$photo = 'thumb';
foreach($r as $rr) {
$profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']);
$entry = replace_macros($tpl,array(
'$id' => $rr['id'],
'$profile-link' => $profile_link,
'$photo' => $rr[$photo],
'$alt-text' => sprintf("%s (%s posts, %s contacts)",$rr['name'], ($rr['items']?$rr['items']:'0'), ($rr['contacts']?$rr['contacts']:'0'))
));
$aside['$activeusers_items'][] = $entry;
if (get_config('communityhome','showactiveusers')===true){
$r = q("SELECT `uni`.`contacts`,`uni`.`items`, `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname` FROM
(SELECT COUNT(`id`) as `contacts`, `uid` FROM `contact` WHERE `self`=0 GROUP BY `uid`) AS `con`,
(SELECT COUNT(`id`) as `items`, `uid` FROM `item` WHERE `item`.`changed` > DATE(NOW() - INTERVAL 1 MONTH) AND `item`.`wall` = 1 GROUP BY `uid`) AS `ite`,
(
SELECT `contacts`,`items`,`ite`.`uid` FROM `con` RIGHT OUTER JOIN `ite` ON `con`.`uid`=`ite`.`uid`
UNION ALL
SELECT `contacts`,`items`,`con`.`uid` FROM `con` LEFT OUTER JOIN `ite` ON `con`.`uid`=`ite`.`uid`
) AS `uni`, `user`, `profile`
WHERE `uni`.`uid`=`user`.`uid`
AND `uni`.`uid`=`profile`.`uid` AND `profile`.`publish`=1
GROUP BY `uid`
ORDER BY `items` DESC,`contacts` DESC
LIMIT 0,10");
if($r && count($r)) {
$aside['$activeusers_title'] = t('Most active users');
$aside['$activeusers_items'] = array();
$photo = 'thumb';
foreach($r as $rr) {
$profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']);
$entry = replace_macros($tpl,array(
'$id' => $rr['id'],
'$profile_link' => $profile_link,
'$photo' => $rr[$photo],
'$alt_text' => sprintf("%s (%s posts, %s contacts)",$rr['name'], ($rr['items']?$rr['items']:'0'), ($rr['contacts']?$rr['contacts']:'0'))
));
$aside['$activeusers_items'][] = $entry;
}
}
}
// last 12 photos
$aside['$photos_title'] = t('Latest photos');
$aside['$photos_items'] = array();
$r = q("SELECT `photo`.`id`, `photo`.`resource-id`, `photo`.`scale`, `photo`.`desc`, `user`.`nickname`, `user`.`username` FROM
(SELECT `resource-id`, MAX(`scale`) as maxscale FROM `photo`
WHERE `profile`=0 AND `contact-id`=0 AND `album` NOT IN ('Contact Photos', '%s', 'Profile Photos', '%s')
AND `allow_cid`='' AND `allow_gid`='' AND `deny_cid`='' AND `deny_gid`='' GROUP BY `resource-id`) AS `t1`
INNER JOIN `photo` ON `photo`.`resource-id`=`t1`.`resource-id` AND `photo`.`scale` = `t1`.`maxscale`,
`user`
WHERE `user`.`uid` = `photo`.`uid`
AND `user`.`blockwall`=0
ORDER BY `photo`.`edited` DESC
LIMIT 0, 12",
dbesc(t('Contact Photos')),
dbesc(t('Profile Photos'))
);
if (get_config('communityhome','showlastphotos')===true){
$aside['$photos_title'] = t('Latest photos');
$aside['$photos_items'] = array();
$r = q("SELECT `photo`.`id`, `photo`.`resource-id`, `photo`.`scale`, `photo`.`desc`, `user`.`nickname`, `user`.`username` FROM
(SELECT `resource-id`, MAX(`scale`) as maxscale FROM `photo`
WHERE `profile`=0 AND `contact-id`=0 AND `album` NOT IN ('Contact Photos', '%s', 'Profile Photos', '%s')
AND `allow_cid`='' AND `allow_gid`='' AND `deny_cid`='' AND `deny_gid`='' GROUP BY `resource-id`) AS `t1`
INNER JOIN `photo` ON `photo`.`resource-id`=`t1`.`resource-id` AND `photo`.`scale` = `t1`.`maxscale`,
`user`
WHERE `user`.`uid` = `photo`.`uid`
AND `user`.`blockwall`=0
AND `user`.`hidewall` = 0
ORDER BY `photo`.`edited` DESC
LIMIT 0, 12",
dbesc(t('Contact Photos')),
dbesc(t('Profile Photos'))
);
if(count($r)) {
$tpl = file_get_contents( dirname(__file__).'/directory_item.tpl');
foreach($r as $rr) {
$photo_page = $a->get_baseurl() . '/photos/' . $rr['nickname'] . '/image/' . $rr['resource-id'];
$photo_url = $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['scale'] .'.jpg';
$entry = replace_macros($tpl,array(
'$id' => $rr['id'],
'$profile-link' => $photo_page,
'$photo' => $photo_url,
'$alt-text' => $rr['username']." : ".$rr['desc'],
));
if(count($r)) {
# $tpl = file_get_contents( dirname(__file__).'/directory_item.tpl');
$tpl = get_markup_template( 'directory_item.tpl', 'addon/communityhome/' );
foreach($r as $rr) {
$photo_page = $a->get_baseurl() . '/photos/' . $rr['nickname'] . '/image/' . $rr['resource-id'];
$photo_url = $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['scale'] .'.jpg';
$entry = replace_macros($tpl,array(
'$id' => $rr['id'],
'$profile_link' => $photo_page,
'$photo' => $photo_url,
'$alt_text' => $rr['username']." : ".$rr['desc'],
));
$aside['$photos_items'][] = $entry;
$aside['$photos_items'][] = $entry;
}
}
}
// last 10 liked items
$aside['$like_title'] = t('Latest likes');
$aside['$like_items'] = array();
$r = q("SELECT `T1`.`created`, `T1`.`liker`, `T1`.`liker-link`, `item`.* FROM
(SELECT `parent-uri`, `created`, `author-name` AS `liker`,`author-link` AS `liker-link`
FROM `item` WHERE `verb`='http://activitystrea.ms/schema/1.0/like' GROUP BY `parent-uri` ORDER BY `created` DESC) AS T1
INNER JOIN `item` ON `item`.`uri`=`T1`.`parent-uri`
WHERE `T1`.`liker-link` LIKE '%s%%' OR `item`.`author-link` LIKE '%s%%'
GROUP BY `uri`
ORDER BY `T1`.`created` DESC
LIMIT 0,10",
$a->get_baseurl(),$a->get_baseurl()
);
if (get_config('communityhome','showlastlike')===true){
$aside['$like_title'] = t('Latest likes');
$aside['$like_items'] = array();
$r = q("SELECT `T1`.`created`, `T1`.`liker`, `T1`.`liker-link`, `item`.* FROM
(SELECT `parent-uri`, `created`, `author-name` AS `liker`,`author-link` AS `liker-link`
FROM `item` WHERE `verb`='http://activitystrea.ms/schema/1.0/like' GROUP BY `parent-uri` ORDER BY `created` DESC) AS T1
INNER JOIN `item` ON `item`.`uri`=`T1`.`parent-uri`
WHERE `T1`.`liker-link` LIKE '%s%%' OR `item`.`author-link` LIKE '%s%%'
GROUP BY `uri`
ORDER BY `T1`.`created` DESC
LIMIT 0,10",
$a->get_baseurl(),$a->get_baseurl()
);
foreach ($r as $rr) {
$author = '<a href="' . $rr['liker-link'] . '">' . $rr['liker'] . '</a>';
$objauthor = '<a href="' . $rr['author-link'] . '">' . $rr['author-name'] . '</a>';
//var_dump($rr['verb'],$rr['object-type']); killme();
switch($rr['verb']){
case 'http://activitystrea.ms/schema/1.0/post':
switch ($rr['object-type']){
case 'http://activitystrea.ms/schema/1.0/event':
$post_type = t('event');
break;
default:
foreach ($r as $rr) {
$author = '<a href="' . $rr['liker-link'] . '">' . $rr['liker'] . '</a>';
$objauthor = '<a href="' . $rr['author-link'] . '">' . $rr['author-name'] . '</a>';
//var_dump($rr['verb'],$rr['object-type']); killme();
switch($rr['verb']){
case 'http://activitystrea.ms/schema/1.0/post':
switch ($rr['object-type']){
case 'http://activitystrea.ms/schema/1.0/event':
$post_type = t('event');
break;
default:
$post_type = t('status');
}
break;
default:
if ($rr['resource-id']){
$post_type = t('photo');
$m=array(); preg_match("/\[url=([^]]*)\]/", $rr['body'], $m);
$rr['plink'] = $m[1];
} else {
$post_type = t('status');
}
break;
default:
if ($rr['resource-id']){
$post_type = t('photo');
$m=array(); preg_match("/\[url=([^]]*)\]/", $rr['body'], $m);
$rr['plink'] = $m[1];
} else {
$post_type = t('status');
}
}
$plink = '<a href="' . $rr['plink'] . '">' . $post_type . '</a>';
}
}
$plink = '<a href="' . $rr['plink'] . '">' . $post_type . '</a>';
$aside['$like_items'][] = sprintf( t('%1$s likes %2$s\'s %3$s'), $author, $objauthor, $plink);
$aside['$like_items'][] = sprintf( t('%1$s likes %2$s\'s %3$s'), $author, $objauthor, $plink);
}
}
$tpl = file_get_contents(dirname(__file__).'/communityhome.tpl');
# $tpl = file_get_contents(dirname(__file__).'/communityhome.tpl');
$tpl = get_markup_template('communityhome.tpl', 'addon/communityhome/');
$a->page['aside'] = replace_macros($tpl, $aside);
$o = '<h1>' . ((x($a->config,'sitename')) ? sprintf( t("Welcome to %s") ,$a->config['sitename']) : "" ) . '</h1>';
$oldset = get_config('system','no_community_page');
set_config('system','no_community_page', false);
$o .= community_content($a,1);
set_config('system','no_community_page', $oldset);
if(file_exists('home.html'))
$o = file_get_contents('home.html');
if (get_config('communityhome','showcommunitystream')===true){
$oldset = get_config('system','no_community_page');
set_config('system','no_community_page', false);
$o .= community_content($a,1);
set_config('system','no_community_page', $oldset);
}
}

View File

@ -1,3 +0,0 @@
This is a variant of the community home. Instead of displaying the community tab in the front page, we still use home.html, but we also add the latest users to the sidebar.
Simply replace addon/communityhome/communityhome.php with this version then enable community home in your admin panel as usual.

View File

@ -1,107 +0,0 @@
<?php
/**
* Name: Community home
* Description: Show last community activity in homepage
* Version: 1.0
* Author: Fabio Comuni <http://kirgroup.com/profile/fabrixxm>
*/
require_once('mod/community.php');
function communityhome_install() {
register_hook('home_content', 'addon/communityhome/communityhome.php', 'communityhome_home');
logger("installed communityhome");
}
function communityhome_uninstall() {
unregister_hook('home_content', 'addon/communityhome/communityhome.php', 'communityhome_home');
logger("removed communityhome");
}
function communityhome_home(&$a, &$o){
// custom css
$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="'.$a->get_baseurl().'/addon/communityhome/communityhome.css" media="all" />';
$aside = array(
'$tab_1' => t('Login'),
'$tab_2' => t('OpenID'),
'$noOid' => get_config('system','no_openid'),
);
// login form
$aside['$login_title'] = t('Login');
$aside['$login_form'] = login(($a->config['register_policy'] == REGISTER_CLOSED) ? false : true);
// last 12 users
$aside['$lastusers_title'] = t('Latest users');
$aside['$lastusers_items'] = array();
$sql_extra = "";
$publish = (get_config('system','publish_all') ? '' : " AND `publish` = 1 " );
$order = " ORDER BY `register_date` DESC ";
$r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`
FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid`
WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 $sql_extra $order LIMIT %d , %d ",
0,
12
);
$tpl = file_get_contents( dirname(__file__).'/directory_item.tpl');
if(count($r)) {
$photo = 'thumb';
foreach($r as $rr) {
$profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']);
$entry = replace_macros($tpl,array(
'$id' => $rr['id'],
'$profile-link' => $profile_link,
'$photo' => $rr[$photo],
'$alt-text' => $rr['name'],
));
$aside['$lastusers_items'][] = $entry;
}
}
// 12 most active users (by posts and contacts)
// this query don't work on some mysql versions
$r = q("SELECT `uni`.`contacts`,`uni`.`items`, `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname` FROM
(SELECT COUNT(`id`) as `contacts`, `uid` FROM `contact` WHERE `self`=0 GROUP BY `uid`) AS `con`,
(SELECT COUNT(`id`) as `items`, `uid` FROM `item` WHERE `item`.`changed` > DATE(NOW() - INTERVAL 1 MONTH) AND `item`.`wall` = 1 GROUP BY `uid`) AS `ite`,
(
SELECT `contacts`,`items`,`ite`.`uid` FROM `con` RIGHT OUTER JOIN `ite` ON `con`.`uid`=`ite`.`uid`
UNION ALL
SELECT `contacts`,`items`,`con`.`uid` FROM `con` LEFT OUTER JOIN `ite` ON `con`.`uid`=`ite`.`uid`
) AS `uni`, `user`, `profile`
WHERE `uni`.`uid`=`user`.`uid`
AND `uni`.`uid`=`profile`.`uid` AND `profile`.`publish`=1
GROUP BY `uid`
ORDER BY `items` DESC,`contacts` DESC
LIMIT 0,10");
if($r && count($r)) {
$aside['$activeusers_title'] = t('Most active users');
$aside['$activeusers_items'] = array();
$photo = 'thumb';
foreach($r as $rr) {
$profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']);
$entry = replace_macros($tpl,array(
'$id' => $rr['id'],
'$profile-link' => $profile_link,
'$photo' => $rr[$photo],
'$alt-text' => sprintf("%s (%s posts, %s contacts)",$rr['name'], ($rr['items']?$rr['items']:'0'), ($rr['contacts']?$rr['contacts']:'0'))
));
$aside['$activeusers_items'][] = $entry;
}
}
$tpl = file_get_contents(dirname(__file__).'/communityhome.tpl');
$a->page['aside'] = replace_macros($tpl, $aside);
$o = '';
if(file_exists('home.html'))
$o .= file_get_contents('home.html');
}

View File

@ -2,8 +2,8 @@
<div class="directory-item" id="directory-item-$id" >
<div class="directory-photo-wrapper" id="directory-photo-wrapper-$id" >
<div class="directory-photo" id="directory-photo-$id" >
<a href="$profile-link" class="directory-profile-link" id="directory-profile-link-$id" >
<img class="directory-photo-img" src="$photo" alt="$alt-text" title="$alt-text" />
<a href="$profile_link" class="directory-profile-link" id="directory-profile-link-$id" >
<img class="directory-photo-img" src="$photo" alt="$alt_text" title="$alt_text" />
</a>
</div>
</div>

View File

@ -0,0 +1,70 @@
<script>
$(function(){
$("#tab_1 a").click(function(e){
$("#login_standard").show();
$("#login_openid").hide();
$("#tab_1").addClass("active");
$("#tab_2").removeClass("active");
e.preventDefault();
return false;
});
$("#tab_2 a").click(function(e){
$("#login_openid").show();
$("#login_standard").hide();
$("#tab_2").addClass("active");
$("#tab_1").removeClass("active");
e.preventDefault();
return false;
});
});
</script>
{{if $noOid}}
<h3>{{$login_title}}</h3>
{{else}}
<ul class="tabs">
<li id="tab_1" class="tab button active"><a href="#">{{$tab_1}}</a></li>
<li id="tab_2" class="tab button"><a href="#">{{$tab_2}}</a></li>
</ul>
{{/if}}
{{$login_form}}
{{if $lastusers_title}}
<h3>{{$lastusers_title}}</h3>
<div class='items-wrapper'>
{{foreach $lastusers_items as $i}}
{{$i}}
{{/foreach}}
</div>
{{/if}}
{{if $activeusers_title}}
<h3>{{$activeusers_title}}</h3>
<div class='items-wrapper'>
{{foreach $activeusers_items as $i}}
{{$i}}
{{/foreach}}
</div>
{{/if}}
{{if $photos_title}}
<h3>{{$photos_title}}</h3>
<div class='items-wrapper'>
{{foreach $photos_items as $i}}
{{$i}}
{{/foreach}}
</div>
{{/if}}
{{if $like_title}}
<h3>{{$like_title}}</h3>
<ul id='likes'>
{{foreach $like_items as $i}}
<li>{{$i}}</li>
{{/foreach}}
</ul>
{{/if}}

View File

@ -0,0 +1,10 @@
<div class="directory-item" id="directory-item-{{$id}}" >
<div class="directory-photo-wrapper" id="directory-photo-wrapper-{{$id}}" >
<div class="directory-photo" id="directory-photo-{{$id}}" >
<a href="{{$profile}}-link" class="directory-profile-link" id="directory-profile-link-{{$id}}" >
<img class="directory-photo-img" src="{{$photo}}" alt="{{$alt}}-text" title="{{$alt}}-text" />
</a>
</div>
</div>
</div>

Binary file not shown.

View File

@ -163,7 +163,8 @@ function forumdirectory_content(&$a) {
$about = ((x($profile,'about') == 1) ? t('About:') : False);
$tpl = file_get_contents( dirname(__file__).'/forumdirectory_item.tpl');
# $tpl = file_get_contents( dirname(__file__).'/forumdirectory_item.tpl');
$tpl = get_markup_template( 'forumdirectory_item.tpl', 'addon/forumdirectory/' );
$entry = replace_macros($tpl,array(
'$id' => $rr['id'],

View File

@ -0,0 +1,42 @@
<div class="forumdirectory-item" id="forumdirectory-item-{{$id}}" >
<div class="forumdirectory-photo-wrapper" id="forumdirectory-photo-wrapper-{{$id}}" >
<div class="forumdirectory-photo" id="forumdirectory-photo-{{$id}}" >
<a href="{{$profile}}-link" class="forumdirectory-profile-link" id="forumdirectory-profile-link-{{$id}}" >
<img class="forumdirectory-photo-img photo" src="{{$photo}}" alt="{{$alt}}-text" title="{{$alt}}-text" />
</a>
</div>
</div>
<div class="forumdirectory-profile-wrapper" id="forumdirectory-profile-wrapper-{{$id}}" >
<div class="contact-name" id="forumdirectory-name-{{$id}}">{{$name}}</div>
<div class="page-type">{{$page}}-type</div>
{{if $pdesc}}<div class="forumdirectory-profile-title">{{$profile.pdesc}}</div>{{/if}}
<div class="forumdirectory-detailcolumns-wrapper" id="forumdirectory-detailcolumns-wrapper-{{$id}}">
<div class="forumdirectory-detailscolumn-wrapper" id="forumdirectory-detailscolumn1-wrapper-{{$id}}">
{{if $location}}
<dl class="location"><dt class="location-label">{{$location}}</dt>
<dd class="adr">
{{if $profile.address}}<div class="street-address">{{$profile.address}}</div>{{/if}}
<span class="city-state-zip">
<span class="locality">{{$profile.locality}}</span>{{if $profile.locality}}, {{/if}}
<span class="region">{{$profile.region}}</span>
<span class="postal-code">{{$profile.postal-code}}</span>
</span>
{{if $profile.country-name}}<span class="country-name">{{$profile.country-name}}</span>{{/if}}
</dd>
</dl>
{{/if}}
{{if $gender}}<dl class="mf"><dt class="gender-label">{{$gender}}</dt> <dd class="x-gender">{{$profile.gender}}</dd></dl>{{/if}}
</div>
<div class="forumdirectory-detailscolumn-wrapper" id="forumdirectory-detailscolumn2-wrapper-{{$id}}">
{{if $marital}}<dl class="marital"><dt class="marital-label"><span class="heart">&hearts;</span>{{$marital}}</dt><dd class="marital-text">{{$profile.marital}}</dd></dl>{{/if}}
{{if $homepage}}<dl class="homepage"><dt class="homepage-label">{{$homepage}}</dt><dd class="homepage-url"><a href="{{$profile.homepage}}" target="external-link">{{$profile.homepage}}</a></dd></dl>{{/if}}
</div>
</div>
<div class="forumdirectory-copy-wrapper" id="forumdirectory-copy-wrapper-{{$id}}" >
{{if $about}}<dl class="forumdirectory-copy"><dt class="forumdirectory-copy-label">{{$about}}</dt><dd class="forumdirectory-copy-data">{{$profile.about}}</dd></dl>{{/if}}
</div>
</div>
</div>

Binary file not shown.

Binary file not shown.

View File

@ -55,7 +55,7 @@ function gravatar_lookup($a, &$b) {
* Display admin settings for this addon
*/
function gravatar_plugin_admin (&$a, &$o) {
$t = file_get_contents( dirname(__file__)."/admin.tpl");
$t = get_markup_template( "admin.tpl", "addon/gravatar/" );
$default_avatar = get_config('gravatar', 'default_img');
$rating = get_config('gravatar', 'rating');

View File

@ -0,0 +1,3 @@
{{include file="field_select.tpl" field=$default_avatar}}
{{include file="field_select.tpl" field=$rating}}
<div class="submit"><input type="submit" value="{{$submit}}" /></div>

Binary file not shown.

View File

@ -78,7 +78,7 @@ function impressum_plugin_admin_post (&$a) {
info( t('Settings updated.'). EOL );
}
function impressum_plugin_admin (&$a, &$o) {
$t = file_get_contents( dirname(__file__). "/admin.tpl" );
$t = get_markup_template( "admin.tpl", "addon/impressum/" );
$o = replace_macros($t, array(
'$submit' => t('Submit'),
'$owner' => array('owner', t('Site Owner'), get_config('impressum','owner'), t('The page operators name.')),

0
impressum/admin.tpl → impressum/view/admin.tpl Executable file → Normal file
View File

View File

@ -0,0 +1,7 @@
{{include file="field_input.tpl" field=$owner}}
{{include file="field_input.tpl" field=$ownerprofile}}
{{include file="field_textarea.tpl" field=$postal}}
{{include file="field_textarea.tpl" field=$notes}}
{{include file="field_input.tpl" field=$email}}
{{include file="field_textarea.tpl" field=$footer_text}}
<div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div>

Binary file not shown.

View File

@ -60,7 +60,7 @@ function libravatar_lookup($a, &$b) {
* Display admin settings for this addon
*/
function libravatar_plugin_admin (&$a, &$o) {
$t = file_get_contents( dirname(__file__)."/admin.tpl");
$t = get_markup_template( "admin.tpl", "addon/libravatar" );
$default_avatar = get_config('libravatar', 'default_img');

View File

@ -0,0 +1,2 @@
{{include file="field_select.tpl" field=$default_avatar}}
<div class="submit"><input type="submit" value="{{$submit}}" /></div>

Binary file not shown.

View File

@ -66,11 +66,12 @@ function mathjax_plugin_admin_post (&$a) {
info( t('Settings updated.'). EOL);
}
function mathjax_plugin_admin (&$a, &$o) {
$t = file_get_contents( dirname(__file__)."/admin.tpl");
if (get_config('mathjax','baseurl','') == '') {
set_config('mathjax','baseurl','http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML');
}
$o = replace_macros( $t, array(
$t = get_markup_template( "admin.tpl", "addon/mathjax/" );
if (get_config('mathjax','baseurl','') == '') {
set_config('mathjax','baseurl','http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML');
}
$o = replace_macros( $t, array(
'$baseurl' => array('baseurl', t('MathJax Base URL'), get_config('mathjax','baseurl' ), t('The URL for the javascript file that should be included to use MathJax. Can be either the MathJax CDN or another installation of MathJax.')),
));
));
}

View File

@ -0,0 +1,2 @@
{{include file="field_input.tpl" field=$baseurl}}
<div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div>

Binary file not shown.

View File

@ -58,7 +58,7 @@ function openstreetmap_location($a, &$item) {
function openstreetmap_plugin_admin (&$a, &$o) {
$t = file_get_contents( dirname(__file__)."/admin.tpl");
$t = get_markup_template( "admin.tpl", "addon/openstreetmap/" );
$tmsserver = get_config('openstreetmap','tmsserver');
if(! $tmsserver)
$tmsserver = 'http://openstreetmap.org';

View File

@ -0,0 +1,3 @@
{{include file="field_input.tpl" field=$tmsserver}}
{{include file="field_input.tpl" field=$zoom}}
<div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div>

BIN
page.tgz

Binary file not shown.

BIN
piwik.tgz

Binary file not shown.

View File

@ -84,7 +84,7 @@ function piwik_analytics($a,&$b) {
}
}
function piwik_plugin_admin (&$a, &$o) {
$t = file_get_contents( dirname(__file__)."/admin.tpl");
$t = get_markup_template( "admin.tpl", "addon/piwik/" );
$o = replace_macros( $t, array(
'$submit' => t('Submit'),
'$baseurl' => array('baseurl', t('Piwik Base URL'), get_config('piwik','baseurl' ), t('Absolute path to your Piwik installation. (without protocol (http/s), with trailing slash)')),

0
piwik/admin.tpl → piwik/view/admin.tpl Executable file → Normal file
View File

View File

@ -0,0 +1,5 @@
{{include file="field_input.tpl" field=$baseurl}}
{{include file="field_input.tpl" field=$siteid}}
{{include file="field_checkbox.tpl" field=$optout}}
{{include file="field_checkbox.tpl" field=$async}}
<div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div>

Binary file not shown.

Binary file not shown.

View File

@ -39,7 +39,8 @@ function remote_permissions_settings(&$a,&$o) {
/* Add some HTML to the existing form */
$t = file_get_contents("addon/remote_permissions/settings.tpl" );
// $t = file_get_contents("addon/remote_permissions/settings.tpl" );
$t = get_markup_template("settings.tpl", "addon/remote_permissions/" );
$o .= replace_macros($t, array(
'$remote_perms_title' => t('Remote Permissions Settings'),
'$remote_perms_label' => t('Allow recipients of your private posts to see the other recipients of the posts'),
@ -190,7 +191,7 @@ function remote_permissions_content($a, $item_copy) {
}
function remote_permissions_plugin_admin(&$a, &$o){
$t = file_get_contents( "addon/remote_permissions/admin.tpl" );
$t = get_markup_template( "admin.tpl", "addon/remote_permissions/" );
$o = replace_macros($t, array(
'$submit' => t('Submit'),
'$global' => array('remotepermschoice', t('Global'), 1, t('The posts of every user on this server show the post recipients'), get_config('remote_perms', 'global') == 1),

View File

@ -0,0 +1,3 @@
{{ inc field_radio.tpl with $field=$global }}{{ endinc }}
{{ inc field_radio.tpl with $field=$individual }}{{ endinc }}
<div class="submit"><input type="submit" name="page_site" value="$submit" /></div>

View File

@ -0,0 +1,3 @@
{{include file="field_radio.tpl" field=$global}}
{{include file="field_radio.tpl" field=$individual}}
<div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div>

View File

@ -0,0 +1,8 @@
<div class="settings-block">
<h3>{{$remote_perms_title}}</h3>
<div id="remote-perms-wrapper">
<label id="remote-perms-label" for="remote-perms">{{$remote_perms_label}}</label>
<input id="remote-perms-input" type="checkbox" name="remote-perms" value="1" {{$checked}} />
</div><div class="clear"></div>
<div class="settings-submit-wrapper" ><input type="submit" name="remote-perms-submit" class="settings-submit" value="{{$submit}}" /></div></div>

Binary file not shown.

View File

@ -698,7 +698,7 @@ function statusnet_plugin_admin(&$a, &$o){
);
$t = file_get_contents( dirname(__file__). "/admin.tpl" );
$t = get_markup_template( "admin.tpl", "addon/statusnet/" );
$o = replace_macros($t, array(
'$submit' => t('Submit'),

0
statusnet/admin.tpl → statusnet/view/admin.tpl Executable file → Normal file
View File

View File

@ -0,0 +1,16 @@
{{foreach $sites as $s}}
{{include file="field_input.tpl" field=$s.sitename}}
{{include file="field_input.tpl" field=$s.apiurl}}
{{include file="field_input.tpl" field=$s.secret}}
{{include file="field_input.tpl" field=$s.key}}
{{if $s.delete}}
{{include file="field_checkbox.tpl" field=$s.delete}}
<hr>
{{else}}
<p>Fill this form to add a new site</p>
{{/if}}
{{/foreach}}
<div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div>

Binary file not shown.

View File

@ -1,379 +1,380 @@
<?php
/**
* Name: Tumblr Post Connector
* Description: Post to Tumblr
* Version: 1.0
* Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
*/
require_once('library/OAuth1.php');
require_once('addon/tumblr/tumblroauth/tumblroauth.php');
function tumblr_install() {
register_hook('post_local', 'addon/tumblr/tumblr.php', 'tumblr_post_local');
register_hook('notifier_normal', 'addon/tumblr/tumblr.php', 'tumblr_send');
register_hook('jot_networks', 'addon/tumblr/tumblr.php', 'tumblr_jot_nets');
register_hook('connector_settings', 'addon/tumblr/tumblr.php', 'tumblr_settings');
register_hook('connector_settings_post', 'addon/tumblr/tumblr.php', 'tumblr_settings_post');
}
function tumblr_uninstall() {
unregister_hook('post_local', 'addon/tumblr/tumblr.php', 'tumblr_post_local');
unregister_hook('notifier_normal', 'addon/tumblr/tumblr.php', 'tumblr_send');
unregister_hook('jot_networks', 'addon/tumblr/tumblr.php', 'tumblr_jot_nets');
unregister_hook('connector_settings', 'addon/tumblr/tumblr.php', 'tumblr_settings');
unregister_hook('connector_settings_post', 'addon/tumblr/tumblr.php', 'tumblr_settings_post');
}
function tumblr_module() {}
function tumblr_content(&$a) {
if(! local_user()) {
notice( t('Permission denied.') . EOL);
return '';
}
if (isset($a->argv[1]))
switch ($a->argv[1]) {
case "connect":
$o = tumblr_connect($a);
break;
case "callback":
$o = tumblr_callback($a);
break;
default:
$o = print_r($a->argv, true);
break;
}
else
$o = tumblr_connect($a);
return $o;
}
function tumblr_connect($a) {
// Start a session. This is necessary to hold on to a few keys the callback script will also need
session_start();
// Include the TumblrOAuth library
//require_once('addon/tumblr/tumblroauth/tumblroauth.php');
// Define the needed keys
$consumer_key = get_config('tumblr','consumer_key');
$consumer_secret = get_config('tumblr','consumer_secret');
// The callback URL is the script that gets called after the user authenticates with tumblr
// In this example, it would be the included callback.php
$callback_url = $a->get_baseurl()."/tumblr/callback";
// Let's begin. First we need a Request Token. The request token is required to send the user
// to Tumblr's login page.
// Create a new instance of the TumblrOAuth library. For this step, all we need to give the library is our
// Consumer Key and Consumer Secret
$tum_oauth = new TumblrOAuth($consumer_key, $consumer_secret);
// Ask Tumblr for a Request Token. Specify the Callback URL here too (although this should be optional)
$request_token = $tum_oauth->getRequestToken($callback_url);
// Store the request token and Request Token Secret as out callback.php script will need this
$_SESSION['request_token'] = $token = $request_token['oauth_token'];
$_SESSION['request_token_secret'] = $request_token['oauth_token_secret'];
// Check the HTTP Code. It should be a 200 (OK), if it's anything else then something didn't work.
switch ($tum_oauth->http_code) {
case 200:
// Ask Tumblr to give us a special address to their login page
$url = $tum_oauth->getAuthorizeURL($token);
// Redirect the user to the login URL given to us by Tumblr
header('Location: ' . $url);
// That's it for our side. The user is sent to a Tumblr Login page and
// asked to authroize our app. After that, Tumblr sends the user back to
// our Callback URL (callback.php) along with some information we need to get
// an access token.
break;
default:
// Give an error message
$o = 'Could not connect to Tumblr. Refresh the page or try again later.';
}
return($o);
}
function tumblr_callback($a) {
// Start a session, load the library
session_start();
//require_once('addon/tumblr/tumblroauth/tumblroauth.php');
// Define the needed keys
$consumer_key = get_config('tumblr','consumer_key');
$consumer_secret = get_config('tumblr','consumer_secret');
// Once the user approves your app at Tumblr, they are sent back to this script.
// This script is passed two parameters in the URL, oauth_token (our Request Token)
// and oauth_verifier (Key that we need to get Access Token).
// We'll also need out Request Token Secret, which we stored in a session.
// Create instance of TumblrOAuth.
// It'll need our Consumer Key and Secret as well as our Request Token and Secret
$tum_oauth = new TumblrOAuth($consumer_key, $consumer_secret, $_SESSION['request_token'], $_SESSION['request_token_secret']);
// Ok, let's get an Access Token. We'll need to pass along our oauth_verifier which was given to us in the URL.
$access_token = $tum_oauth->getAccessToken($_REQUEST['oauth_verifier']);
// We're done with the Request Token and Secret so let's remove those.
unset($_SESSION['request_token']);
unset($_SESSION['request_token_secret']);
// Make sure nothing went wrong.
if (200 == $tum_oauth->http_code) {
// good to go
} else {
return('Unable to authenticate');
}
// What's next? Now that we have an Access Token and Secret, we can make an API call.
set_pconfig(local_user(), "tumblr", "oauth_token", $access_token['oauth_token']);
set_pconfig(local_user(), "tumblr", "oauth_token_secret", $access_token['oauth_token_secret']);
$o = t("You are now authenticated to tumblr.");
$o .= '<br /><a href="'.$a->get_baseurl().'/settings/connectors">'.t("return to the connector page").'</a>';
return($o);
}
function tumblr_jot_nets(&$a,&$b) {
if(! local_user())
return;
$tmbl_post = get_pconfig(local_user(),'tumblr','post');
if(intval($tmbl_post) == 1) {
$tmbl_defpost = get_pconfig(local_user(),'tumblr','post_by_default');
$selected = ((intval($tmbl_defpost) == 1) ? ' checked="checked" ' : '');
$b .= '<div class="profile-jot-net"><input type="checkbox" name="tumblr_enable"' . $selected . ' value="1" /> '
. t('Post to Tumblr') . '</div>';
}
}
function tumblr_settings(&$a,&$s) {
if(! local_user())
return;
/* Add our stylesheet to the page so we can make our settings look nice */
$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/addon/tumblr/tumblr.css' . '" media="all" />' . "\r\n";
/* Get the current state of our config variables */
$enabled = get_pconfig(local_user(),'tumblr','post');
$checked = (($enabled) ? ' checked="checked" ' : '');
$def_enabled = get_pconfig(local_user(),'tumblr','post_by_default');
$def_checked = (($def_enabled) ? ' checked="checked" ' : '');
/* Add some HTML to the existing form */
$s .= '<div class="settings-block">';
$s .= '<h3>' . t('Tumblr Post Settings') . '</h3>';
$s .= '<div id="tumblr-username-wrapper">';
$s .= '<a href="'.$a->get_baseurl().'/tumblr/connect">'.t("(Re-)Authenticate your tumblr page").'</a>';
$s .= '</div><div class="clear"></div>';
$s .= '<div id="tumblr-enable-wrapper">';
$s .= '<label id="tumblr-enable-label" for="tumblr-checkbox">' . t('Enable Tumblr Post Plugin') . '</label>';
$s .= '<input id="tumblr-checkbox" type="checkbox" name="tumblr" value="1" ' . $checked . '/>';
$s .= '</div><div class="clear"></div>';
$s .= '<div id="tumblr-bydefault-wrapper">';
$s .= '<label id="tumblr-bydefault-label" for="tumblr-bydefault">' . t('Post to Tumblr by default') . '</label>';
$s .= '<input id="tumblr-bydefault" type="checkbox" name="tumblr_bydefault" value="1" ' . $def_checked . '/>';
$s .= '</div><div class="clear"></div>';
$oauth_token = get_pconfig(local_user(), "tumblr", "oauth_token");
$oauth_token_secret = get_pconfig(local_user(), "tumblr", "oauth_token_secret");
$s .= '<div id="tumblr-password-wrapper">';
if (($oauth_token != "") and ($oauth_token_secret != "")) {
$page = get_pconfig(local_user(),'tumblr','page');
$consumer_key = get_config('tumblr','consumer_key');
$consumer_secret = get_config('tumblr','consumer_secret');
$tum_oauth = new TumblrOAuth($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret);
$userinfo = $tum_oauth->get('user/info');
$blogs = array();
$s .= t("Post to page:")."<select name='tumblr_page'>";
foreach($userinfo->response->user->blogs as $blog) {
$blogurl = substr(str_replace(array("http://", "https://"), array("", ""), $blog->url), 0, -1);
if ($page == $blogurl)
$s .= "<option value='".$blogurl."' selected>".$blogurl."</option>";
else
$s .= "<option value='".$blogurl."'>".$blogurl."</option>";
}
$s .= "</select>";
} else
$s .= t("You are not authenticated to tumblr");
$s .= '</div><div class="clear"></div>';
/* provide a submit button */
$s .= '<div class="settings-submit-wrapper" ><input type="submit" id="tumblr-submit" name="tumblr-submit" class="settings-submit" value="' . t('Submit') . '" /></div></div>';
}
function tumblr_settings_post(&$a,&$b) {
if(x($_POST,'tumblr-submit')) {
set_pconfig(local_user(),'tumblr','post',intval($_POST['tumblr']));
set_pconfig(local_user(),'tumblr','page',$_POST['tumblr_page']);
set_pconfig(local_user(),'tumblr','post_by_default',intval($_POST['tumblr_bydefault']));
}
}
function tumblr_post_local(&$a,&$b) {
// This can probably be changed to allow editing by pointing to a different API endpoint
if($b['edit'])
return;
if((! local_user()) || (local_user() != $b['uid']))
return;
if($b['private'] || $b['parent'])
return;
$tmbl_post = intval(get_pconfig(local_user(),'tumblr','post'));
$tmbl_enable = (($tmbl_post && x($_REQUEST,'tumblr_enable')) ? intval($_REQUEST['tumblr_enable']) : 0);
if($_REQUEST['api_source'] && intval(get_pconfig(local_user(),'tumblr','post_by_default')))
$tmbl_enable = 1;
if(! $tmbl_enable)
return;
if(strlen($b['postopts']))
$b['postopts'] .= ',';
$b['postopts'] .= 'tumblr';
}
function tumblr_send(&$a,&$b) {
if($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited']))
return;
if(! strstr($b['postopts'],'tumblr'))
return;
if($b['parent'] != $b['id'])
return;
$oauth_token = get_pconfig($b['uid'], "tumblr", "oauth_token");
$oauth_token_secret = get_pconfig($b['uid'], "tumblr", "oauth_token_secret");
$page = get_pconfig($b['uid'], "tumblr", "page");
$tmbl_blog = 'blog/'.$page.'/post';
if($oauth_token && $oauth_token_secret && $tmbl_blog) {
require_once('include/bbcode.php');
$tag_arr = array();
$tags = '';
$x = preg_match_all('/\#\[(.*?)\](.*?)\[/',$b['tag'],$matches,PREG_SET_ORDER);
if($x) {
foreach($matches as $mtch) {
$tag_arr[] = $mtch[2];
}
}
if(count($tag_arr))
$tags = implode(',',$tag_arr);
$link = "";
$video = false;
$title = trim($b['title']);
// Checking for a bookmark
if(preg_match("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/is",$b['body'],$matches)) {
$link = $matches[1];
if ($title == '')
$title = html_entity_decode($matches[2],ENT_QUOTES,'UTF-8');
$body = $b['body'];
// splitting the text in two parts:
// before and after the bookmark
$pos = strpos($body, "[bookmark");
$body1 = substr($body, 0, $pos);
$body2 = substr($body, $pos);
// Removing the bookmark
$body2 = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",'',$body2);
$body = $body1.$body2;
$video = ((stristr($link,'youtube')) || (stristr($link,'youtu.be')) || (stristr($mtch[1],'vimeo')));
}
$params = array(
'format' => 'html',
'tweet' => 'off',
'tags' => $tags);
if (($link != '') and $video) {
$params['type'] = "video";
$params['embed'] = $link;
if ($title != '')
$params['caption'] = '<h1><a href="'.$link.'">'.$title.
"</a></h1><p>".bbcode($body, false, false)."</p>";
else
$params['caption'] = bbcode($body, false, false);
} else if (($link != '') and !$video) {
$params['type'] = "link";
$params['title'] = $title;
$params['url'] = $link;
$params['description'] = bbcode($b["body"], false, false);
} else {
$params['type'] = "text";
$params['title'] = $title;
$params['body'] = bbcode($b['body'], false, false);
}
$consumer_key = get_config('tumblr','consumer_key');
$consumer_secret = get_config('tumblr','consumer_secret');
$tum_oauth = new TumblrOAuth($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret);
// Make an API call with the TumblrOAuth instance.
$x = $tum_oauth->post($tmbl_blog,$params);
$ret_code = $tum_oauth->http_code;
if($ret_code == 201)
logger('tumblr_send: success');
elseif($ret_code == 403)
logger('tumblr_send: authentication failure');
else
logger('tumblr_send: general error: ' . print_r($x,true));
}
}
<?php
/**
* Name: Tumblr Post Connector
* Description: Post to Tumblr
* Version: 1.0
* Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
*/
require_once('library/OAuth1.php');
require_once('addon/tumblr/tumblroauth/tumblroauth.php');
function tumblr_install() {
register_hook('post_local', 'addon/tumblr/tumblr.php', 'tumblr_post_local');
register_hook('notifier_normal', 'addon/tumblr/tumblr.php', 'tumblr_send');
register_hook('jot_networks', 'addon/tumblr/tumblr.php', 'tumblr_jot_nets');
register_hook('connector_settings', 'addon/tumblr/tumblr.php', 'tumblr_settings');
register_hook('connector_settings_post', 'addon/tumblr/tumblr.php', 'tumblr_settings_post');
}
function tumblr_uninstall() {
unregister_hook('post_local', 'addon/tumblr/tumblr.php', 'tumblr_post_local');
unregister_hook('notifier_normal', 'addon/tumblr/tumblr.php', 'tumblr_send');
unregister_hook('jot_networks', 'addon/tumblr/tumblr.php', 'tumblr_jot_nets');
unregister_hook('connector_settings', 'addon/tumblr/tumblr.php', 'tumblr_settings');
unregister_hook('connector_settings_post', 'addon/tumblr/tumblr.php', 'tumblr_settings_post');
}
function tumblr_module() {}
function tumblr_content(&$a) {
if(! local_user()) {
notice( t('Permission denied.') . EOL);
return '';
}
if (isset($a->argv[1]))
switch ($a->argv[1]) {
case "connect":
$o = tumblr_connect($a);
break;
case "callback":
$o = tumblr_callback($a);
break;
default:
$o = print_r($a->argv, true);
break;
}
else
$o = tumblr_connect($a);
return $o;
}
function tumblr_connect($a) {
// Start a session. This is necessary to hold on to a few keys the callback script will also need
session_start();
// Include the TumblrOAuth library
//require_once('addon/tumblr/tumblroauth/tumblroauth.php');
// Define the needed keys
$consumer_key = get_config('tumblr','consumer_key');
$consumer_secret = get_config('tumblr','consumer_secret');
// The callback URL is the script that gets called after the user authenticates with tumblr
// In this example, it would be the included callback.php
$callback_url = $a->get_baseurl()."/tumblr/callback";
// Let's begin. First we need a Request Token. The request token is required to send the user
// to Tumblr's login page.
// Create a new instance of the TumblrOAuth library. For this step, all we need to give the library is our
// Consumer Key and Consumer Secret
$tum_oauth = new TumblrOAuth($consumer_key, $consumer_secret);
// Ask Tumblr for a Request Token. Specify the Callback URL here too (although this should be optional)
$request_token = $tum_oauth->getRequestToken($callback_url);
// Store the request token and Request Token Secret as out callback.php script will need this
$_SESSION['request_token'] = $token = $request_token['oauth_token'];
$_SESSION['request_token_secret'] = $request_token['oauth_token_secret'];
// Check the HTTP Code. It should be a 200 (OK), if it's anything else then something didn't work.
switch ($tum_oauth->http_code) {
case 200:
// Ask Tumblr to give us a special address to their login page
$url = $tum_oauth->getAuthorizeURL($token);
// Redirect the user to the login URL given to us by Tumblr
header('Location: ' . $url);
// That's it for our side. The user is sent to a Tumblr Login page and
// asked to authroize our app. After that, Tumblr sends the user back to
// our Callback URL (callback.php) along with some information we need to get
// an access token.
break;
default:
// Give an error message
$o = 'Could not connect to Tumblr. Refresh the page or try again later.';
}
return($o);
}
function tumblr_callback($a) {
// Start a session, load the library
session_start();
//require_once('addon/tumblr/tumblroauth/tumblroauth.php');
// Define the needed keys
$consumer_key = get_config('tumblr','consumer_key');
$consumer_secret = get_config('tumblr','consumer_secret');
// Once the user approves your app at Tumblr, they are sent back to this script.
// This script is passed two parameters in the URL, oauth_token (our Request Token)
// and oauth_verifier (Key that we need to get Access Token).
// We'll also need out Request Token Secret, which we stored in a session.
// Create instance of TumblrOAuth.
// It'll need our Consumer Key and Secret as well as our Request Token and Secret
$tum_oauth = new TumblrOAuth($consumer_key, $consumer_secret, $_SESSION['request_token'], $_SESSION['request_token_secret']);
// Ok, let's get an Access Token. We'll need to pass along our oauth_verifier which was given to us in the URL.
$access_token = $tum_oauth->getAccessToken($_REQUEST['oauth_verifier']);
// We're done with the Request Token and Secret so let's remove those.
unset($_SESSION['request_token']);
unset($_SESSION['request_token_secret']);
// Make sure nothing went wrong.
if (200 == $tum_oauth->http_code) {
// good to go
} else {
return('Unable to authenticate');
}
// What's next? Now that we have an Access Token and Secret, we can make an API call.
set_pconfig(local_user(), "tumblr", "oauth_token", $access_token['oauth_token']);
set_pconfig(local_user(), "tumblr", "oauth_token_secret", $access_token['oauth_token_secret']);
$o = t("You are now authenticated to tumblr.");
$o .= '<br /><a href="'.$a->get_baseurl().'/settings/connectors">'.t("return to the connector page").'</a>';
return($o);
}
function tumblr_jot_nets(&$a,&$b) {
if(! local_user())
return;
$tmbl_post = get_pconfig(local_user(),'tumblr','post');
if(intval($tmbl_post) == 1) {
$tmbl_defpost = get_pconfig(local_user(),'tumblr','post_by_default');
$selected = ((intval($tmbl_defpost) == 1) ? ' checked="checked" ' : '');
$b .= '<div class="profile-jot-net"><input type="checkbox" name="tumblr_enable"' . $selected . ' value="1" /> '
. t('Post to Tumblr') . '</div>';
}
}
function tumblr_settings(&$a,&$s) {
if(! local_user())
return;
/* Add our stylesheet to the page so we can make our settings look nice */
$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/addon/tumblr/tumblr.css' . '" media="all" />' . "\r\n";
/* Get the current state of our config variables */
$enabled = get_pconfig(local_user(),'tumblr','post');
$checked = (($enabled) ? ' checked="checked" ' : '');
$def_enabled = get_pconfig(local_user(),'tumblr','post_by_default');
$def_checked = (($def_enabled) ? ' checked="checked" ' : '');
/* Add some HTML to the existing form */
$s .= '<div class="settings-block">';
$s .= '<h3>' . t('Tumblr Post Settings') . '</h3>';
$s .= '<div id="tumblr-username-wrapper">';
$s .= '<a href="'.$a->get_baseurl().'/tumblr/connect">'.t("(Re-)Authenticate your tumblr page").'</a>';
$s .= '</div><div class="clear"></div>';
$s .= '<div id="tumblr-enable-wrapper">';
$s .= '<label id="tumblr-enable-label" for="tumblr-checkbox">' . t('Enable Tumblr Post Plugin') . '</label>';
$s .= '<input id="tumblr-checkbox" type="checkbox" name="tumblr" value="1" ' . $checked . '/>';
$s .= '</div><div class="clear"></div>';
$s .= '<div id="tumblr-bydefault-wrapper">';
$s .= '<label id="tumblr-bydefault-label" for="tumblr-bydefault">' . t('Post to Tumblr by default') . '</label>';
$s .= '<input id="tumblr-bydefault" type="checkbox" name="tumblr_bydefault" value="1" ' . $def_checked . '/>';
$s .= '</div><div class="clear"></div>';
$oauth_token = get_pconfig(local_user(), "tumblr", "oauth_token");
$oauth_token_secret = get_pconfig(local_user(), "tumblr", "oauth_token_secret");
$s .= '<div id="tumblr-password-wrapper">';
if (($oauth_token != "") and ($oauth_token_secret != "")) {
$page = get_pconfig(local_user(),'tumblr','page');
$consumer_key = get_config('tumblr','consumer_key');
$consumer_secret = get_config('tumblr','consumer_secret');
$tum_oauth = new TumblrOAuth($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret);
$userinfo = $tum_oauth->get('user/info');
$blogs = array();
$s .= t("Post to page:")."<select name='tumblr_page'>";
foreach($userinfo->response->user->blogs as $blog) {
$blogurl = substr(str_replace(array("http://", "https://"), array("", ""), $blog->url), 0, -1);
if ($page == $blogurl)
$s .= "<option value='".$blogurl."' selected>".$blogurl."</option>";
else
$s .= "<option value='".$blogurl."'>".$blogurl."</option>";
}
$s .= "</select>";
} else
$s .= t("You are not authenticated to tumblr");
$s .= '</div><div class="clear"></div>';
/* provide a submit button */
$s .= '<div class="settings-submit-wrapper" ><input type="submit" id="tumblr-submit" name="tumblr-submit" class="settings-submit" value="' . t('Submit') . '" /></div></div>';
}
function tumblr_settings_post(&$a,&$b) {
if(x($_POST,'tumblr-submit')) {
set_pconfig(local_user(),'tumblr','post',intval($_POST['tumblr']));
set_pconfig(local_user(),'tumblr','page',$_POST['tumblr_page']);
set_pconfig(local_user(),'tumblr','post_by_default',intval($_POST['tumblr_bydefault']));
}
}
function tumblr_post_local(&$a,&$b) {
// This can probably be changed to allow editing by pointing to a different API endpoint
if($b['edit'])
return;
if((! local_user()) || (local_user() != $b['uid']))
return;
if($b['private'] || $b['parent'])
return;
$tmbl_post = intval(get_pconfig(local_user(),'tumblr','post'));
$tmbl_enable = (($tmbl_post && x($_REQUEST,'tumblr_enable')) ? intval($_REQUEST['tumblr_enable']) : 0);
if($_REQUEST['api_source'] && intval(get_pconfig(local_user(),'tumblr','post_by_default')))
$tmbl_enable = 1;
if(! $tmbl_enable)
return;
if(strlen($b['postopts']))
$b['postopts'] .= ',';
$b['postopts'] .= 'tumblr';
}
function tumblr_send(&$a,&$b) {
if($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited']))
return;
if(! strstr($b['postopts'],'tumblr'))
return;
if($b['parent'] != $b['id'])
return;
$oauth_token = get_pconfig($b['uid'], "tumblr", "oauth_token");
$oauth_token_secret = get_pconfig($b['uid'], "tumblr", "oauth_token_secret");
$page = get_pconfig($b['uid'], "tumblr", "page");
$tmbl_blog = 'blog/'.$page.'/post';
if($oauth_token && $oauth_token_secret && $tmbl_blog) {
require_once('include/bbcode.php');
$tag_arr = array();
$tags = '';
$x = preg_match_all('/\#\[(.*?)\](.*?)\[/',$b['tag'],$matches,PREG_SET_ORDER);
if($x) {
foreach($matches as $mtch) {
$tag_arr[] = $mtch[2];
}
}
if(count($tag_arr))
$tags = implode(',',$tag_arr);
$link = "";
$video = false;
$title = trim($b['title']);
// Checking for a bookmark
if(preg_match("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/is",$b['body'],$matches)) {
$link = $matches[1];
if ($title == '')
$title = html_entity_decode($matches[2],ENT_QUOTES,'UTF-8');
$body = $b['body'];
// splitting the text in two parts:
// before and after the bookmark
$pos = strpos($body, "[bookmark");
$body1 = substr($body, 0, $pos);
$body2 = substr($body, $pos);
// Removing the bookmark
$body2 = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",'',$body2);
$body = $body1.$body2;
$video = ((stristr($link,'youtube')) || (stristr($link,'youtu.be')) || (stristr($mtch[1],'vimeo')));
}
$params = array(
'format' => 'html',
'tweet' => 'off',
'tags' => $tags);
if (($link != '') and $video) {
$params['type'] = "video";
$params['embed'] = $link;
if ($title != '')
$params['caption'] = '<h1><a href="'.$link.'">'.$title.
"</a></h1><p>".bbcode($body, false, false)."</p>";
else
$params['caption'] = bbcode($body, false, false);
} else if (($link != '') and !$video) {
$params['type'] = "link";
$params['title'] = $title;
$params['url'] = $link;
$params['description'] = bbcode($b["body"], false, false);
} else {
$params['type'] = "text";
$params['title'] = $title;
$params['body'] = bbcode($b['body'], false, false);
}
$consumer_key = get_config('tumblr','consumer_key');
$consumer_secret = get_config('tumblr','consumer_secret');
$tum_oauth = new TumblrOAuth($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret);
// Make an API call with the TumblrOAuth instance.
$x = $tum_oauth->post($tmbl_blog,$params);
$ret_code = $tum_oauth->http_code;
if($ret_code == 201)
logger('tumblr_send: success');
elseif($ret_code == 403)
logger('tumblr_send: authentication failure');
else
logger('tumblr_send: general error: ' . print_r($x,true));
}
}

Binary file not shown.

View File

@ -504,8 +504,14 @@ function twitter_plugin_admin_post(&$a){
info( t('Settings updated.'). EOL );
}
function twitter_plugin_admin(&$a, &$o){
$t = file_get_contents( dirname(__file__). "/admin.tpl" );
$o = replace_macros($t, array(
$t = get_markup_template( "admin.tpl", "addon/twitter/" );
$includes = array(
'$field_input' => 'field_input.tpl',
);
$includes = set_template_includes($a->theme['template_engine'], $includes);
$o = replace_macros($t, $includes + array(
'$submit' => t('Submit'),
// name, label, value, help, [extra values]
'$consumerkey' => array('consumerkey', t('Consumer key'), get_config('twitter', 'consumerkey' ), ''),

0
twitter/admin.tpl → twitter/view/admin.tpl Executable file → Normal file
View File

View File

@ -0,0 +1,3 @@
{{include file="field_input.tpl" field=$consumerkey}}
{{include file="field_input.tpl" field=$consumersecret}}
<div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div>

Binary file not shown.

View File

@ -78,7 +78,7 @@ function uhremotestorage_settings($a, &$s){
'Dropbox' => 'Dropbox',
);
*/
$tpl = file_get_contents(dirname(__file__)."/settings.tpl");
$tpl = get_markup_template("settings.tpl", "addon/uhremotestorage/");
$s .= replace_macros($tpl, array(
'$title' => 'Unhosted remote storage',
'$desc' => sprintf( t('Allow to use your friendica id (%s) to connecto to external unhosted-enabled storage (like ownCloud). See <a href="http://www.w3.org/community/unhosted/wiki/RemoteStorage#WebFinger">RemoteStorage WebFinger</a>'), $uid ),

View File

View File

@ -0,0 +1,9 @@
<div class="settings-block">
<h3>{{$title}}</h3>
<p>{{$desc}}</p>
{{include file="field_input.tpl" field=$url}}
{{include file="field_input.tpl" field=$auth}}
{{include file="field_select.tpl" field=$api}}
<div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div>
</div>

Binary file not shown.

View File

@ -0,0 +1,19 @@
<div class="settings-block">
<h3 class="settings-heading">{{$title}}</h3>
<div class='field noedit'>
<label>{{$label}}</label>
<tt>{{$key}}</tt>
</div>
<div class="settings-submit-wrapper">
<input type="submit" value="{{$submit}}" class="settings-submit" name="widgets-submit" />
</div>
<h4>{{$widgets_h}}</h4>
<ul>
{{foreach $widgets as $w}}
<li><a href="{{$baseurl}}/widgets/{{$w.0}}/?k={{$key}}&p=1">{{$w.1}}</a></li>
{{/foreach}}
</ul>
</div>

View File

@ -0,0 +1,3 @@
<style>body {font-size: 0.8em; margin: 0px; padding: 0px;}</style>
<span class='f9k_like' title="{{$strlike}}">{{$like}} <img src="{{$baseurl}}/images/like.gif" alt="like"/></span>
<span class='f9k_dislike' title="{{$strdislike}}">{{$dislike}} <img src="{{$baseurl}}/images/dislike.gif" alt="dislike"/></span>

View File

@ -52,7 +52,8 @@ function like_widget_content(&$a, $conf){
$o = "";
$t = file_get_contents( dirname(__file__). "/widget_like.tpl" );
# $t = file_get_contents( dirname(__file__). "/widget_like.tpl" );
$t = get_markup_template("widget_like.tpl", "addon/widgets/");
$o .= replace_macros($t, array(
'$like' => $likes,
'$strlike' => sprintf( tt("%d person likes this", "%d people like this", $likes), $likes),

View File

@ -51,7 +51,8 @@ function widgets_settings(&$a,&$o) {
$t = file_get_contents( dirname(__file__). "/settings.tpl" );
# $t = file_get_contents( dirname(__file__). "/settings.tpl" );
$t = get_markup_template("settings.tpl", "addon/widgets/");
$o .= replace_macros($t, array(
'$submit' => t('Generate new key'),
'$baseurl' => $a->get_baseurl(),