Merge pull request #7 from redmatrix/master

updating from original codebase
This commit is contained in:
mrjive 2015-10-26 21:55:47 +01:00
commit a4c3058f84
124 changed files with 26577 additions and 24539 deletions

View file

@ -1,3 +1,92 @@
#Hubzilla on OpenShift
You will notice a new .openshift folder when you fetch from upstream, i.e. from https://github.com/redmatrix/hubzilla.git , which contains a deploy script to set up Hubzilla on OpenShift.
Create an account on OpenShift, then use the registration e-mail and password to create your first Hubzilla instance. Install git and RedHat's command line tools - rhc - if you have not already done so.
```
rhc app-create your_app_name php-5.4 mysql-5.5 cron phpmyadmin --namespace your_domain --from-code https://github.com/redmatrix/hubzilla.git -l your@email.address -p your_account_password
```
Make a note of the database username and password OpenShift creates for your instance, and use these at https://your_app_name-your_domain.rhcloud.com/ to complete the setup.
NOTE: PostgreSQL is NOT supported by the deploy script yet.
Update
To update, consider your own workflow first. I have forked Hubzilla code into my GitHub account to be able to try things out, this remote repo is called origin. Here is how I fetch new code from upstream, merge into my local repo, then push the updated code both into origin and the remote repo called openshift.
```
git fetch upstream;git checkout master;git merge upstream/master;git push origin;git push openshift HEAD
```
##Administration
Symptoms of need for MySQL database administration are:
- you can visit your domain and see the Hubzilla frontpage, but trying to login throws you back to login. This can mean your session table is marked as crashed.
- you can login, but your channel posts are not visible. This can mean your item table is marked as crashed.
- you can login and you can see your channel posts, but apparently nobody is getting your posts, comments, likes and so on. This can mean your outq table is marked as crashed.
You can check your OpenShift logs by doing
```
rhc tail -a your_app_name -n your_domain -l your@email.address -p your_account_password
```
and you might be able to confirm the above suspicions about crashed tables, or other problems you need to fix.
###How to fix crashed tables in MySQL
Using MySQL and the MyISAM database engine can result in table indexes coming out of sync, and you have at least two options for fixing tables marked as crashed.
- Use the database username and password OpenShift creates for your instance at https://your_app_name-your_domain.rhcloud.com/phpmyadmin/ to login via the web into your phpMyAdmin web interface, click your database in the left column, in the right column scroll down to the bottom of the list of tables and click the checkbox for marking all tables, then select Check tables from the drop down menu. This will check the tables for problems, and you can then checkmark only those tables with problems, and select Repair table from the same drop down menu at the bottom.
- You can login to your instance with SSH - see OpenShift for details - then
```
cd mysql/data/your_database
myisamchk -r *.MYI
```
or if you get
```
Can't create new tempfile
```
check your OpenShift's gear quota with
```
quota -gus
```
and if you are short on space, then locally (not SSH) do
```
rhc app-tidy your_app_name -l your_login -p your_password
```
to have rhc delete temporary files and OpenShift logs to free space first, then check the size of your local repo dir and execute
```
git gc
```
against it and check the size again, and then to minimize your remote repo connect via SSH to your application gear and execute the same command against it by changing to the remote repo directory - your repo should be in
```
~/git/your_app_name.git
```
(if not, do find -size +1M to find it), then do
```
cd ~/mysql/data/yourdatabase
myisamchk -r -v -f*.MYI
```
and hopefully your database tables are now okay.
##NOTES
Note 1: definitely DO turn off feeds and discovery by default if you are on the Free or Bronze plan on OpenShift with a single 1Gb gear by visiting https://your-app-name.rhcloud.com/admin/site when logged in as administrator of your Hubzilla site.
Note 2: DO add the above defaults into the deploy script.
Note 3: DO add git gc to the deploy script to clean up git.
Note 4: MAYBE DO add myisamchk - only checking? to the end of the deploy script.
The OpenShift `php` cartridge documentation can be found at:
http://openshift.github.io/documentation/oo_cartridge_guide.html#php

View file

@ -155,7 +155,7 @@ fi
echo "Now chmod 777 -R poller"
chmod -R 777 ${OPENSHIFT_REPO}.openshift/cron/minutely/poller
chmod -R 777 ${OPENSHIFT_REPO_DIR}.openshift/cron/minutely/poller
echo "chmod done, permissions set to 777 on poller script."
@ -176,3 +176,21 @@ echo "chmod done, permissions set to 777 on poller script."
### fi
####
# Hubzilla configuration - changes to default settings
# to make Hubzilla on OpenShift a more pleasant experience
echo "Changing default configuration to conserve space"
cd ${OPENSHIFT_REPO_DIR}
util/config system expire_delivery_reports 3
util/config system feed_contacts 0
util/config system disable_discover_tab 1
# Hubzill addons
echo "Try to add or update Hubzilla addons"
cd ${OPENSHIFT_REPO_DIR}
util/add_addon_repo https://github.com/redmatrix/hubzilla-addons.git HubzillaAddons
# Hubzilla themes
echo "Try to add or update Hubzilla themes"
cd ${OPENSHIFT_REPO_DIR}
util/add_theme_repo https://github.com/DeadSuperHero/redmatrix-themes.git DeadSuperHeroThemes

View file

@ -1,3 +1,4 @@
![Hubzilla](images/hubzilla-banner.png)
Hubzilla - Community Server
===========================
@ -5,7 +6,6 @@ Hubzilla - Community Server
Help us redefine the web - using integrated and united community websites.
--------------------------------------------------------------------------
![Hubzilla](images/hubzilla_house_arrows.png)
**What are Hubs?**

4
app/grid.apd Normal file
View file

@ -0,0 +1,4 @@
url: $baseurl/network
requires: local_channel
name: Grid
photo: $baseurl/images/hubzilla_logo_6.png

View file

@ -1,4 +0,0 @@
url: $baseurl/network
requires: local_channel
name: Matrix
photo: $baseurl/app/matrix.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

View file

@ -50,7 +50,7 @@ define ( 'PLATFORM_NAME', 'hubzilla' );
define ( 'RED_VERSION', trim(file_get_contents('version.inc')) . 'H');
define ( 'ZOT_REVISION', 1 );
define ( 'DB_UPDATE_VERSION', 1156 );
define ( 'DB_UPDATE_VERSION', 1158 );
/**
* @brief Constant with a HTML line break.

View file

@ -0,0 +1,103 @@
[b]Hubzilla on OpenShift[/b]
You will notice a new .openshift folder when you fetch from upstream, i.e. from [url=https://github.com/redmatrix/hubzilla.git]https://github.com/redmatrix/hubzilla.git[/url] , which contains a deploy script to set up Hubzilla on OpenShift with plugins and extra themes.
Create an account on OpenShift, then use the registration e-mail and password to create your first Hubzilla instance. Install git and RedHat's command line tools - rhc - if you have not already done so.
[code]rhc app-create your_app_name php-5.4 mysql-5.5 cron phpmyadmin --namespace your_domain --from-code https://github.com/redmatrix/hubzilla.git -l your@email.address -p your_account_password
[/code]
Make a note of the database username and password OpenShift creates for your instance, and use these at [url=https://your_app_name-your_domain.rhcloud.com/]https://your_app_name-your_domain.rhcloud.com/[/url] to complete the setup.
NOTE: PostgreSQL is NOT supported by the deploy script yet, see [zrl=https://zot-mor.rhcloud.com/display/3c7035f2a6febf87057d84ea0ae511223e9b38dc27913177bc0df053edecac7c@zot-mor.rhcloud.com?zid=haakon%40zot-mor.rhcloud.com]this thread[/zrl].
[b]Update[/b]
To update, consider your own workflow first. I have forked Hubzilla code into my GitHub account to be able to try things out, this remote repo is called origin. Here is how I fetch new code from upstream, merge into my local repo, then push the updated code both into origin and the remote repo called openshift.
[code]git fetch upstream;git checkout master;git merge upstream/master;git push origin;git push openshift HEAD
[/code]
[b]Administration[/b]
Symptoms of need for MySQL database administration are:
[list]
[*] you can visit your domain and see the Hubzilla frontpage, but trying to login throws you back to login. This can mean your session table is marked as crashed.
[*] you can login, but your channel posts are not visible. This can mean your item table is marked as crashed.
[*] you can login and you can see your channel posts, but apparently nobody is getting your posts, comments, likes and so on. This can mean your outq table is marked as crashed.
[/list]
You can check your OpenShift logs by doing
[code]
rhc tail -a your_app_name -n your_domain -l your@email.address -p your_account_password
[/code]
and you might be able to confirm the above suspicions about crashed tables, or other problems you need to fix.
[b]How to fix crashed tables in MySQL[/b]
Using MySQL and the MyISAM database engine can result in table indexes coming out of sync, and you have at least two options for fixing tables marked as crashed.
[list]
[*] Use the database username and password OpenShift creates for your instance at [url=https://your_app_name-your_domain.rhcloud.com/phpmyadmin/]https://your_app_name-your_domain.rhcloud.com/phpmyadmin/[/url] to login via the web into your phpMyAdmin web interface, click your database in the left column, in the right column scroll down to the bottom of the list of tables and click the checkbox for marking all tables, then select Check tables from the drop down menu. This will check the tables for problems, and you can then checkmark only those tables with problems, and select Repair table from the same drop down menu at the bottom.
[*] You can port-forward the MySQL database service to your own machine and use the MySQL client called mysqlcheck to check, repair and optimize your database or individual database tables without stopping the MySQL service on OpenShift. Run the following in two separate console windows.
To port-forward do
[code]rhc port-forward -a your_app_name -n your_domain -l your@email.address -p your_password[/code]
in one console window, then do either -o for optimize, -c for check or -r for repair, like this
[code]mysqlcheck -h 127.0.0.1 -r your_app_name -u your_app_admin_name -p[/code]
and give the app's password at the prompt. If all goes well you should see a number of table names with an OK behind them.
You can now
[code]Press CTRL-C to terminate port forwarding[/code]
[*] You can do
[code]rhc cartridge stop mysql-5.5 -a your_app_name[/code]
to stop the MySQL service running in your app on OpenShift before running myisamchk - which should only be run when MySQL is stopped, and then
login to your instance with SSH - see OpenShift for details - and do
[code]cd mysql/data/your_database
myisamchk -r *.MYI[/code]
or if you get
[code]Can't create new tempfile[/code]
check your OpenShift's gear quota with
[code]quota -gus[/code]
and if you are short on space, then locally (not SSH) do
[code]rhc app-tidy your_app_name -l your_login -p your_password[/code]
to have rhc delete temporary files and OpenShift logs to free space first, then check the size of your local repo dir and execute
[code]git gc[/code]
against it and check the size again, and then to minimize your remote repo connect via SSH to your application gear and execute the same command against it by changing to the remote repo directory - your repo should be in
[code]~/git/your_app_name.git[/code]
(if not, do find -size +1M to find it), then do
[code]
cd
cd mysql/data/yourdatabase
myisamchk -r -v -f*.MYI[/code]
and hopefully your database tables are now okay.
You can now start the MySQL service on OpenShift by locally doing
[code]rhc cartridge start mysql-5.5 -a your_app_name[/code]
[/list]
[b]Notes[/b]
[list]
[*] definitely DO turn off feeds and discovery by default and limit delivery reports from 30 days to 3 days if you are on the Free or Bronze plan on OpenShift with a single 1Gb gear by visiting [observer.baseurl]/admin/site when logged in as administrator of your Hubzilla site.
[*] The above defaults have been added into the deploy script.
[*] DO add git gc to the deploy script
[*] MAYBE DO add myisamchk - only checking? to the end of the deploy script.
[*] mysqlcheck is similar in function to myisamchk, but works differently. The main operational difference is that mysqlcheck must be used when the mysqld server is running, whereas myisamchk should be used when it is not. The benefit of using mysqlcheck is that you do not have to stop the server to perform table maintenance - this means this documenation should be fixed.
[/list]

View file

@ -5,7 +5,7 @@ Hubzilla
###Websites. Redefined.
![Hubzilla](images/ghash-32.png)
![Hubzilla](../images/hz-32.png)
**What are Hubs?**

View file

@ -88,7 +88,7 @@ Some/many of these widgets have restrictions which may restrict the type of page
* photo_rand - display a random photo from one of your photo albums. Photo permissions are honoured
* args:
* album - album name (very strongly recommended if you have lots of photos)
* scale - typically 0 (original size), 1 (640px), or 2 (320px)
* scale - typically 0 (original size), 1 (1024px), 2, (640px), or 3 (320px)
* style - CSS style string
* channel_id - if not your own
<br />&nbsp;<br />

View file

@ -4,9 +4,11 @@
[zrl=[baseurl]/help/install]Install[/zrl]
[zrl=[baseurl]/help/red2pi]Installing $Projectname on the Raspberry Pi[/zrl]
[zrl=[baseurl]/help/Hubzilla_on_OpenShift]$Projectname on OpenShift[/zrl]
[zrl=[baseurl]/help/troubleshooting]Troubleshooting Tips[/zrl]
[zrl=[baseurl]/help/hidden_configs]Tweaking $Projectname's Hidden Configurations[/zrl]
[zrl=[baseurl]/help/faq_admins]FAQ For Admins[/zrl]
[zrl=[baseurl]/help/service_classes]Service Classes[/zrl]
[zrl=[baseurl]/help/theme_management]Theme Management[/zrl]

View file

@ -4,19 +4,20 @@ The API allows you to post to the red# by HTTP POST request. Below you see an ex
[code]curl -ssl -u [color=blue]$E-Mail[/color]:[color=blue]$Password[/color] -d "[color=blue]$Parameters[/color]" [url][observer=1][observer.baseurl][/observer][observer=0]example.com[/observer]/api/statuses/update
[/url][/code]
[table][tr][td]$E-Mail:[/td][td]The E-Mail Adress you use to login[/td][/tr]
[table][tr][td]$E-Mail:[/td][td]The E-Mail Address you use to login, or the channel nickname (without the hostname)[/td][/tr]
[tr][td]$Password:[/td][td]The Password you use to login[/td][/tr]
[tr][td]$Parameters:[/td][td]That's the interesting part, here you insert the content you want to send using the following parameters:[/td][/tr][/table]
[ul]
[*]title: the title of the posting
[*]channel: the channel you want to post to
[*]channel: the channel you want to post to (do not use this parameter with HTTP Basic auth)
[*]category: a comma-seperated list of categories for the posting
[*]status: the content of the posting, formatted with BBCode
OR
[*]htmlstatus:the content of the posting, formatted in HTML.
[/ul]
To post to a specific channel, replace the email address with the channel nickname. If you supply the channel parameter, it has to match the "email", but is superfluous anyway.
Instead of calling [observer=1][observer.baseurl][/observer][observer=0]example.com[/observer]/api/statuses/update which returns a json (you could also add .json on the end to clarify) output, you can use [observer.baseurl]/api/statuses/update.xml to get an xml formatted return.

View file

@ -85,11 +85,9 @@ Share and save/manage bookmarks from links provided in conversations.
[b]Private Message Encryption and Privacy Concerns[/b]
Messages marked [b]private[/b] are encrypted with AES-CBC 256-bit symmetric cipher, which is then protected (encrypted in turn) by public key cryptography, based on 4096-bit RSA keys, associated with the channel that is sending the message.
Private mail is stored in an obscured format. While this is not bullet-proof it typically prevents casual snooping by the site administrator or ISP.
These private messages are also stored in an encrypted form on remote systems.
Each$Projectname channel has it's own unique set of private and associated public RSA 4096-bit keys, generated when the channels is first created.
Each $Projectname channel has it's own unique set of private and associated public RSA 4096-bit keys, generated when the channels is first created. This is used to protect private messages and posts in transit.
Additionally, messages may be created utilising "end-to-end encryption" which cannot be read by $Projectname operators or ISPs or anybody who does not know the passcode.

View file

@ -1,17 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<<<<<<< HEAD
<title>Hubzilla Doxygen API Documentation</title>
</head>
<body>
<h1>Hubzilla Doxygen API Documentation not rendered</h1>
=======
<title>$Projectname Doxygen API Documentation</title>
</head>
<body>
<h1>$Projectname Doxygen API Documentation not rendered</h1>
>>>>>>> f866a42a42b9e12756353f5bb39a0f31a64bb26a
To get the Doxygen API Documentation you must render it with the program <a href="http://www.doxygen.org">Doxygen</a> (included in most distributions).
<pre>
$ doxygen util/Doxyfile

10
doc/theme_management.bb Normal file
View file

@ -0,0 +1,10 @@
[h1]Theme Management[/h1]
$Projectname allows hub admins to easily add and update themes hosted in common git repositories.
[h2]Add new theme repo to your hub[/h2]
1. Navigate to your hub web root
[code]root@hub:~# cd /var/www[/code]
2. Add the theme repo and give it a name
[code][nobb]root@hub:/var/www# util/add_theme_repo https://github.com/username/theme-repo.git UniqueThemeRepoName[/nobb][/code]
[h2]Update existing theme repo[/h2]
Update the repo by using
[code]root@hub:/var/www# util/update_theme_repo UniqueThemeRepoName[/code]

View file

@ -5,8 +5,8 @@ We need much more than this, but here are areas where developers can help. Pleas
[li]Documentation - see Red Documentation Project To-Do List[/li]
[li]Include TOS link in registration/verification email[/li]
[li]Auto preview posts/comments (configurable timer kicks in the preview if not 0)[/li]
[li]SAML 2.0 and OpenID Connect provider functionality[/li]
[li]Create bug tracker module[/li]
[li]delivery tracking/reporting[/li]
[li]Filing posts - provide a dropdown menu integrated with the 'post actions menu'[/li]
[li]integrate Mozilla Persona (possibly via plugin) https://github.com/mozilla/id-specs/blob/prod/browserid/index.md and become an idP[/li]
[li]translation plugins - moses or apertium[/li]
@ -15,9 +15,9 @@ We need much more than this, but here are areas where developers can help. Pleas
[li]Finish the anti-spam bayesian engine[/li]
[li]implement an email permission denied bounce message from the sys channel[/li]
[li]provide a way for xchans with a certain network type to upgrade (unknown to rss, rss to statusnet, friendica-over-diaspora to friendica, for instance) based on new knowledge and/or redmatrix ability[/li]
[li](done - HZ) If DAV folders exist, add an option to the Settings page to set a default folder for attachment uploads.[/li]
[li]Integrate the &quot;open site&quot; list with the register page[/li]
[li]Support comments and member notes on documentation pages (to achieve an effect similar to php.net)[/li]
[li]Support comments on webpages[/li]
[li]implement oembed provider interface[/li]
[li]refactor the oembed client interface so that we can safely sandbox remote content[/li]
[li]Many modern social apps now have both a profile photo and a "cover photo". Add support for this. [/li]
@ -26,21 +26,17 @@ We need much more than this, but here are areas where developers can help. Pleas
[li]restricted access OAuth clients[/li]
[li](Advanced) create a UI for building Comanche pages[/li]
[li](less advanced) create a way to preview Comanche results on a preview page while editing on another page[/li]
[li](done - HZ) Extend WebDAV to provide desktop access to photo albums[/li]
[li]External post connectors - create standard interface[/li]
[li]External post connectors, add popular services[/li]
[li](in progress Habeas Codice) service classes - provide a pluggable subscription payment gateway for premium accounts[/li]
[li](in progress Habeas Codice) service classes - account overview page showing resources consumed by channel. With special consideration this page can also be accessed at a meta level by the site admin to drill down on problematic accounts/channels.[/li]
[li]implement CalDAV/CardDAV sync[/li]
[li]Uploads - integrate #^[url=https://github.com/blueimp/jQuery-File-Upload]https://github.com/blueimp/jQuery-File-Upload[/url][/li]
[li]Import/export - include events, things, etc.[/li]
[li]API extensions, for Twitter API - search, friending, threading. For Red API, lots of stuff[/li]
[li]OAuth permission extensions[/li]
[li]Import channel from Diaspora/Friendica (Diaspora partially done)[/li]
[li]MediaGoblin photo "crosspost" connector[/li]
[li]Create management page/UI for extensible profile fields[/li]
[li]Create interface to include/exclude and re-order standard profile fields[/li]
[li]Provide a mechanism to share page design elements in posts (just like apps) (done)[/li]
[li]App taxonomy[/li]
[li]Customisable App collection pages[/li]
[li]replace the tinymce visual editor and/or make the visual editor pluggable and responsive to different output formats. We probably want library/bbedit for bbcode. This needs a fair bit of work to catch up with our &quot;enhanced bbcode&quot;, but start with images, links, bold and highlight and work from there.[/li]

BIN
images/hubzilla-banner.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
images/hz-white-16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

BIN
images/hz-white-32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 B

BIN
images/hz-white-64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 874 B

View file

@ -278,13 +278,19 @@ class Item extends BaseObject {
$children = $this->get_children();
$has_tags = (($body['tags'] || $body['categories'] || $body['mentions'] || $body['attachments'] || $body['folders']) ? true : false);
$tmp_item = array(
'template' => $this->get_template(),
'mode' => $mode,
'type' => implode("",array_slice(explode("/",$item['verb']),-1)),
'tags' => array(),
'body' => $body,
'text' => strip_tags($body),
'body' => $body['html'],
'tags' => $body['tags'],
'categories' => $body['categories'],
'mentions' => $body['mentions'],
'attachments' => $body['attachments'],
'folders' => $body['folders'],
'text' => strip_tags($body['html']),
'id' => $this->get_id(),
'mid' => $item['mid'],
'isevent' => $isevent,
@ -325,6 +331,8 @@ class Item extends BaseObject {
'owner_url' => $this->get_owner_url(),
'owner_photo' => $this->get_owner_photo(),
'owner_name' => $this->get_owner_name(),
'photo' => $body['photo'],
'has_tags' => $has_tags,
// Item toolbar buttons
'like' => $like,

View file

@ -217,31 +217,6 @@ class RedBrowser extends DAV\Browser\Plugin {
$f[] = $ft;
}
// Storage and quota for the account (all channels of the owner of this directory)!
$limit = service_class_fetch($owner, 'attach_upload_limit');
$r = q("SELECT SUM(filesize) AS total FROM attach WHERE aid = %d",
intval($this->auth->channel_account_id)
);
$used = $r[0]['total'];
if ($used) {
$quotaDesc = t('%1$s used');
$quotaDesc = sprintf($quotaDesc,
userReadableSize($used));
}
if ($limit && $used) {
$quotaDesc = t('%1$s used of %2$s (%3$s&#37;)');
$quotaDesc = sprintf($quotaDesc,
userReadableSize($used),
userReadableSize($limit),
round($used / $limit, 1));
}
// prepare quota for template
$quota = array();
$quota['used'] = $used;
$quota['limit'] = $limit;
$quota['desc'] = $quotaDesc;
$output = '';
if ($this->enablePost) {
$this->server->broadcastEvent('onHTMLActionsPanel', array($parent, &$output));
@ -249,7 +224,6 @@ class RedBrowser extends DAV\Browser\Plugin {
$html .= replace_macros(get_markup_template('cloud.tpl'), array(
'$header' => t('Files') . ": " . $this->escapeHTML($path) . "/",
'$quota' => $quota,
'$total' => t('Total'),
'$actionspanel' => $output,
'$shared' => t('Shared'),
@ -298,11 +272,38 @@ class RedBrowser extends DAV\Browser\Plugin {
if (get_class($node) === 'Sabre\\DAV\\SimpleCollection')
return;
// Storage and quota for the account (all channels of the owner of this directory)!
$limit = service_class_fetch($owner, 'attach_upload_limit');
$r = q("SELECT SUM(filesize) AS total FROM attach WHERE aid = %d",
intval($this->auth->channel_account_id)
);
$used = $r[0]['total'];
if ($used) {
$quotaDesc = t('You are using %1$s of your available file storage.');
$quotaDesc = sprintf($quotaDesc,
userReadableSize($used));
}
if ($limit && $used) {
$quotaDesc = t('You are using %1$s of %2$s available file storage. (%3$s&#37;)');
$quotaDesc = sprintf($quotaDesc,
userReadableSize($used),
userReadableSize($limit),
round($used / $limit, 1) * 100);
}
// prepare quota for template
$quota = array();
$quota['used'] = $used;
$quota['limit'] = $limit;
$quota['desc'] = $quotaDesc;
$quota['warning'] = ((($limit) && ((round($used / $limit, 1) * 100) >= 90)) ? t('WARNING:') : ''); // 10485760 bytes = 100MB
$output .= replace_macros(get_markup_template('cloud_actionspanel.tpl'), array(
'$folder_header' => t('Create new folder'),
'$folder_submit' => t('Create'),
'$upload_header' => t('Upload file'),
'$upload_submit' => t('Upload')
'$upload_submit' => t('Upload'),
'$quota' => $quota
));
}

View file

@ -8,6 +8,7 @@ require_once("html2plain.php");
require_once('include/security.php');
require_once('include/photos.php');
require_once('include/items.php');
require_once('include/attach.php');
/*
*
@ -619,6 +620,36 @@ require_once('include/items.php');
}
api_register_func('api/red/channel/stream','api_channel_stream', true);
function api_attach_list(&$a,$type) {
logger('api_user: ' . api_user());
json_return_and_die(attach_list_files(api_user(),get_observer_hash(),'','','','created asc'));
}
api_register_func('api/red/files','api_attach_list', true);
function api_file_detail(&$a,$type) {
if (api_user()===false) return false;
if(! $_REQUEST['file_id']) return false;
$r = q("select * from attach where uid = %d and hash = '%s' limit 1",
intval(api_user()),
dbesc($_REQUEST['file_id'])
);
if($r) {
if($r[0]['is_dir'])
$r[0]['data'] = '';
elseif(intval($r[0]['os_storage']))
$r[0]['data'] = base64_encode(file_get_contents(dbunescbin($r[0]['data'])));
else
$r[0]['data'] = base64_encode(dbunescbin($r[0]['data']));
$ret = array('attach' => $r[0]);
json_return_and_die($ret);
}
killme();
}
api_register_func('api/red/file', 'api_file_detail', true);
function api_albums(&$a,$type) {
json_return_and_die(photos_albums_list($a->get_channel(),$a->get_observer()));
@ -1456,7 +1487,7 @@ require_once('include/items.php');
*
*/
// FIXME
function api_statuses_mentions(&$a, $type){
if (api_user()===false) return false;
@ -1481,39 +1512,25 @@ require_once('include/items.php');
$myurl = str_replace(array('www.','.'),array('','\\.'),$myurl);
$diasp_url = str_replace('/channel/','/u/',$myurl);
if (get_config('system','use_fulltext_engine'))
$sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where (MATCH(`author-link`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(`tag`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(tag) AGAINST ('".'"%s"'."' in boolean mode))) ",
dbesc(protect_sprintf($myurl)),
dbesc(protect_sprintf($myurl)),
dbesc(protect_sprintf($diasp_url))
);
else
$sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where ( `author-link` like '%s' or `tag` like '%s' or tag like '%s' )) ",
dbesc(protect_sprintf('%' . $myurl)),
dbesc(protect_sprintf('%' . $myurl . ']%')),
dbesc(protect_sprintf('%' . $diasp_url . ']%'))
);
$sql_extra .= " AND item_mentionsme = 1 ";
if ($max_id > 0)
$sql_extra .= ' AND `item`.`id` <= '.intval($max_id);
$sql_extra .= " AND item.id <= " . intval($max_id) . " ";
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn_id`, `contact`.`self`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
FROM `item`, `contact`
WHERE `item`.`uid` = %d
AND `item`.`visible` = 1 and `item`.`moderated` = 0 AND `item`.`deleted` = 0
AND `contact`.`id` = `item`.`contact-id`
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
$sql_extra
AND `item`.`id`>%d
ORDER BY `item`.`received` DESC LIMIT %d ,%d ",
intval($user_info['uid']),
require_once('include/security.php');
$item_normal = item_normal();
$r = q("select * from item where uid = " . intval(api_user()) . "
$item_normal $sql_extra
AND id > %d group by mid
order by received desc LIMIT %d OFFSET %d ",
intval($since_id),
intval($start), intval($count)
intval($count),
intval($start)
);
xchan_query($r,true);
$ret = api_format_items($r,$user_info);

View file

@ -130,7 +130,7 @@ function translate_system_apps(&$arr) {
'Address Book' => t('Address Book'),
'Login' => t('Login'),
'Channel Manager' => t('Channel Manager'),
'Matrix' => t('Matrix'),
'Grid' => t('Grid'),
'Settings' => t('Settings'),
'Files' => t('Files'),
'Webpages' => t('Webpages'),
@ -176,14 +176,19 @@ function app_render($papp,$mode = 'view') {
$installed = false;
if(! $papp['photo'])
$papp['photo'] = z_root() . '/' . get_default_profile_photo(80);
if(! $papp)
return;
if(! $papp['photo'])
$papp['photo'] = z_root() . '/' . get_default_profile_photo(80);
$papp['papp'] = papp_encode($papp);
if(! strstr($papp['url'],'://'))
$papp['url'] = z_root() . ((strpos($papp['url'],'/') === 0) ? '' : '/') . $papp['url'];
foreach($papp as $k => $v) {
if(strpos($v,'http') === 0 && $k != 'papp')
$papp[$k] = zid($v);

View file

@ -181,7 +181,7 @@ function attach_list_files($channel_id, $observer, $hash = '', $filename = '', $
$ret = array('success' => false);
if(! perm_is_allowed($channel_id,$observer, 'read_storage')) {
if(! perm_is_allowed($channel_id,$observer, 'view_storage')) {
$ret['message'] = t('Permission denied.');
return $ret;
}
@ -203,7 +203,7 @@ function attach_list_files($channel_id, $observer, $hash = '', $filename = '', $
// Retrieve all columns except 'data'
$r = q("select id, aid, uid, hash, filename, filetype, filesize, revision, folder, os_storage, is_dir, is_photo, flags, created, edited, allow_cid, allow_gid, deny_cid, deny_gid from attach where uid = %d $sql_extra $orderby $limit",
$r = q("select id, aid, uid, hash, filename, filetype, filesize, revision, folder, os_storage, is_dir, is_photo, flags, created, edited, allow_cid, allow_gid, deny_cid, deny_gid from attach where uid = %d $sql_extra ORDER BY $orderby $limit",
intval($channel_id)
);
@ -405,7 +405,6 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
require_once('include/photos.php');
call_hooks('photo_upload_begin',$arr);
$ret = array('success' => false);
@ -416,6 +415,7 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
$newalbum = (($arr) ? $arr['newalbum'] : '');
$hash = (($arr && $arr['hash']) ? $arr['hash'] : null);
$upload_path = (($arr && $arr['directory']) ? $arr['directory'] : '');
$visible = (($arr && $arr['visible']) ? $arr['visible'] : '');
$observer = array();
@ -447,11 +447,33 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
// revise or update must provide $arr['hash'] of the thing to revise/update
// By default remove $src when finished
$remove_when_processed = true;
if($options === 'import') {
$src = $arr['src'];
$filename = $arr['filename'];
$filesize = @filesize($src);
$hash = $arr['resource_id'];
if(array_key_exists('hash',$arr))
$hash = $arr['hash'];
if(array_key_exists('type',$arr))
$type = $arr['type'];
if($arr['preserve_original'])
$remove_when_processed = false;
// if importing a directory, just do it now and go home - we're done.
if(array_key_exists('is_dir',$arr) && intval($arr['is_dir'])) {
$x = attach_mkdir($channel,$observer_hash,$arr);
if($x['message'])
logger('import_directory: ' . $x['message']);
return;
}
}
elseif($options !== 'update') {
$f = array('src' => '', 'filename' => '', 'filesize' => 0, 'type' => '');
@ -530,10 +552,20 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
$pathname = '';
if($is_photo) {
if($newalbum)
if($newalbum) {
$pathname = filepath_macro($newalbum);
else
}
elseif(array_key_exists('folder',$arr)) {
$x = q("select filename from attach where hash = '%s' and uid = %d limit 1",
dbesc($arr['folder']),
intval($channel['channel_id'])
);
if($x)
$pathname = $x[0]['filename'];
}
else {
$pathname = filepath_macro($album);
}
}
else {
$pathname = filepath_macro($upload_path);
@ -563,7 +595,7 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
}
}
else {
$folder_hash = '';
$folder_hash = ((($arr) && array_key_exists('folder',$arr)) ? $arr['folder'] : '');
}
if((! $options) || ($options === 'import')) {
@ -630,7 +662,8 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
if(($maxfilesize) && ($filesize > $maxfilesize)) {
$ret['message'] = sprintf( t('File exceeds size limit of %d'), $maxfilesize);
@unlink($src);
if($remove_when_processed)
@unlink($src);
call_hooks('photo_upload_end',$ret);
return $ret;
}
@ -643,7 +676,9 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
);
if(($r) && (($r[0]['total'] + $filesize) > ($limit - $existing_size))) {
$ret['message'] = upgrade_message(true) . sprintf(t("You have reached your limit of %1$.0f Mbytes attachment storage."), $limit / 1024000);
@unlink($src);
if($remove_when_processed)
@unlink($src);
call_hooks('photo_upload_end',$ret);
return $ret;
}
@ -757,7 +792,7 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
if($is_photo) {
$args = array( 'source' => $source, 'visible' => 0, 'resource_id' => $hash, 'album' => basename($pathname), 'os_path' => $os_basepath . $os_relpath, 'filename' => $filename, 'getimagesize' => $gis, 'directory' => $direct);
$args = array( 'source' => $source, 'visible' => $visible, 'resource_id' => $hash, 'album' => basename($pathname), 'os_path' => $os_basepath . $os_relpath, 'filename' => $filename, 'getimagesize' => $gis, 'directory' => $direct);
if($arr['contact_allow'])
$args['contact_allow'] = $arr['contact_allow'];
if($arr['group_allow'])
@ -780,13 +815,19 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
if($arr['item'])
$args['item'] = $arr['item'];
if($arr['body'])
$args['body'] = $arr['body'];
if($arr['description'])
$args['description'] = $arr['description'];
$p = photo_upload($channel,$observer,$args);
if($p['success']) {
$ret['body'] = $p['body'];
}
}
if($options !== 'update')
if(($options !== 'update') && ($remove_when_processed))
@unlink($src);
if(! $r) {
@ -959,7 +1000,6 @@ function attach_mkdir($channel, $observer_hash, $arr = null) {
intval($channel['channel_id']),
dbesc($lfile)
);
if(! $r) {
logger('attach_mkdir: hash ' . $lfile . ' not found in ' . $lpath);
$ret['message'] = t('Path not found.');
@ -1195,7 +1235,7 @@ function attach_delete($channel_id, $resource, $is_photo = 0) {
$channel_address = (($c) ? $c[0]['channel_address'] : 'notfound');
$photo_sql = (($is_photo) ? " and is_photo = 1 " : '');
$r = q("SELECT hash, flags, is_dir, folder FROM attach WHERE hash = '%s' AND uid = %d $photo_sql limit 1",
$r = q("SELECT hash, flags, is_dir, is_photo, folder FROM attach WHERE hash = '%s' AND uid = %d $photo_sql limit 1",
dbesc($resource),
intval($channel_id)
);
@ -1241,6 +1281,20 @@ function attach_delete($channel_id, $resource, $is_photo = 0) {
intval($channel_id)
);
if($r[0]['is_photo']) {
$x = q("select id, item_hidden from item where resource_id = '%s' and resource_type = 'photo' and uid = %d",
dbesc($resource),
intval($channel_id)
);
if($x) {
drop_item($x[0]['id'],false,(($x[0]['item_hidden']) ? DROPITEM_NORMAL : DROPITEM_PHASE1),true);
}
q("DELETE FROM photo WHERE uid = %d AND resource_id = '%s'",
intval($channel_id),
dbesc($resource)
);
}
// update the parent folder's lastmodified timestamp
$e = q("UPDATE attach SET edited = '%s' WHERE hash = '%s' AND uid = %d",
dbesc(datetime_convert()),

View file

@ -305,6 +305,16 @@ function bb2diaspora_itembody($item, $force_update = false) {
$matches = array();
//if we have a photo item just prepend the photo bbcode to item['body']
$is_photo = (($item['obj_type'] == ACTIVITY_OBJ_PHOTO) ? true : false);
if($is_photo) {
$object = json_decode($item['object'],true);
if($object['link'][2]) {
$photo_bb = '[zrl=' . rawurldecode($object['id']) . ']' . '[zmg=' . $object['link'][2]['width'] . 'x' . $object['link'][2]['height'] . ']' . rawurldecode($object['link'][2]['href']) . '[/zmg]' . '[/zrl]';
$item['body'] = (($item['body']) ? $photo_bb . $item['body'] : $photo_bb);
}
}
if(($item['diaspora_meta']) && (! $force_update)) {
$diaspora_meta = json_decode($item['diaspora_meta'],true);
if($diaspora_meta) {

View file

@ -570,7 +570,7 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $cache = false)
$urlchars = '[a-zA-Z0-9\:\/\-\?\&\;\.\=\@\_\~\#\%\$\!\+\,\@]';
if (strpos($Text,'http') !== false) {
$Text = preg_replace("/([^\]\='".'"'."\/]|^|\#\^)(https?\:\/\/$urlchars+)/ism", '$1<a href="$2" >$2</a>', $Text);
$Text = preg_replace("/([^\]\='".'"'."\/]|^|\#\^)(https?\:\/\/$urlchars+)/ism", '$1<a href="$2" target="_newwin" >$2</a>', $Text);
}
if (strpos($Text,'[/share]') !== false) {
@ -582,21 +582,21 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $cache = false)
}
}
if (strpos($Text,'[/url]') !== false) {
$Text = preg_replace("/\#\^\[url\]([$URLSearchString]*)\[\/url\]/ism", '<span class="bookmark-identifier">#^</span><a class="bookmark" href="$1" >$1</a>', $Text);
$Text = preg_replace("/\#\^\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '<span class="bookmark-identifier">#^</span><a class="bookmark" href="$1" >$2</a>', $Text);
$Text = preg_replace("/\[url\]([$URLSearchString]*)\[\/url\]/ism", '<a href="$1" >$1</a>', $Text);
$Text = preg_replace("/\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '<a href="$1" >$2</a>', $Text);
$Text = preg_replace("/\#\^\[url\]([$URLSearchString]*)\[\/url\]/ism", '<span class="bookmark-identifier">#^</span><a class="bookmark" href="$1" target="_newwin" >$1</a>', $Text);
$Text = preg_replace("/\#\^\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '<span class="bookmark-identifier">#^</span><a class="bookmark" href="$1" target="_newwin" >$2</a>', $Text);
$Text = preg_replace("/\[url\]([$URLSearchString]*)\[\/url\]/ism", '<a href="$1" target="_newwin" >$1</a>', $Text);
$Text = preg_replace("/\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '<a href="$1" target="_newwin" >$2</a>', $Text);
}
if (strpos($Text,'[/zrl]') !== false) {
$Text = preg_replace("/\#\^\[zrl\]([$URLSearchString]*)\[\/zrl\]/ism", '<span class="bookmark-identifier">#^</span><a class="zrl bookmark" href="$1" >$1</a>', $Text);
$Text = preg_replace("/\#\^\[zrl\=([$URLSearchString]*)\](.*?)\[\/zrl\]/ism", '<span class="bookmark-identifier">#^</span><a class="zrl bookmark" href="$1" >$2</a>', $Text);
$Text = preg_replace("/\[zrl\]([$URLSearchString]*)\[\/zrl\]/ism", '<a class="zrl" href="$1" >$1</a>', $Text);
$Text = preg_replace("/\[zrl\=([$URLSearchString]*)\](.*?)\[\/zrl\]/ism", '<a class="zrl" href="$1" >$2</a>', $Text);
$Text = preg_replace("/\#\^\[zrl\]([$URLSearchString]*)\[\/zrl\]/ism", '<span class="bookmark-identifier">#^</span><a class="zrl bookmark" href="$1" target="_newwin" >$1</a>', $Text);
$Text = preg_replace("/\#\^\[zrl\=([$URLSearchString]*)\](.*?)\[\/zrl\]/ism", '<span class="bookmark-identifier">#^</span><a class="zrl bookmark" href="$1" target="_newwin" >$2</a>', $Text);
$Text = preg_replace("/\[zrl\]([$URLSearchString]*)\[\/zrl\]/ism", '<a class="zrl" href="$1" target="_newwin" >$1</a>', $Text);
$Text = preg_replace("/\[zrl\=([$URLSearchString]*)\](.*?)\[\/zrl\]/ism", '<a class="zrl" href="$1" target="_newwin" >$2</a>', $Text);
}
// Perform MAIL Search
if (strpos($Text,'[/mail]') !== false) {
$Text = preg_replace("/\[mail\]([$MAILSearchString]*)\[\/mail\]/", '<a href="mailto:$1">$1</a>', $Text);
$Text = preg_replace("/\[mail\=([$MAILSearchString]*)\](.*?)\[\/mail\]/", '<a href="mailto:$1">$2</a>', $Text);
$Text = preg_replace("/\[mail\]([$MAILSearchString]*)\[\/mail\]/", '<a href="mailto:$1" target="_newwin" >$1</a>', $Text);
$Text = preg_replace("/\[mail\=([$MAILSearchString]*)\](.*?)\[\/mail\]/", '<a href="mailto:$1" target="_newwin" >$2</a>', $Text);
}
// leave open the posibility of [map=something]
@ -885,17 +885,17 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $cache = false)
// if video couldn't be embedded, link to it instead.
if (strpos($Text,'[/video]') !== false) {
$Text = preg_replace("/\[video\](.*?)\[\/video\]/", '<a href="$1">$1</a>', $Text);
$Text = preg_replace("/\[video\](.*?)\[\/video\]/", '<a href="$1" target="_newwin" >$1</a>', $Text);
}
if (strpos($Text,'[/audio]') !== false) {
$Text = preg_replace("/\[audio\](.*?)\[\/audio\]/", '<a href="$1">$1</a>', $Text);
$Text = preg_replace("/\[audio\](.*?)\[\/audio\]/", '<a href="$1" target="_newwin" >$1</a>', $Text);
}
if (strpos($Text,'[/zvideo]') !== false) {
$Text = preg_replace("/\[zvideo\](.*?)\[\/zvideo\]/", '<a class="zid" href="$1">$1</a>', $Text);
$Text = preg_replace("/\[zvideo\](.*?)\[\/zvideo\]/", '<a class="zid" href="$1" target="_newwin" >$1</a>', $Text);
}
if (strpos($Text,'[/zaudio]') !== false) {
$Text = preg_replace("/\[zaudio\](.*?)\[\/zaudio\]/", '<a class="zid" href="$1">$1</a>', $Text);
$Text = preg_replace("/\[zaudio\](.*?)\[\/zaudio\]/", '<a class="zid" href="$1" target="_newwin" >$1</a>', $Text);
}
if ($tryoembed){
@ -904,7 +904,7 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $cache = false)
}
} else {
if (strpos($Text,'[/iframe]') !== false) {
$Text = preg_replace("/\[iframe\](.*?)\[\/iframe\]/ism", '<a href="$1">$1</a>', $Text);
$Text = preg_replace("/\[iframe\](.*?)\[\/iframe\]/ism", '<a href="$1" target="_newwin" >$1</a>', $Text);
}
}

View file

@ -629,11 +629,6 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional', $
if($item['author-link'] && (! $item['author-name']))
$profile_name = $item['author-link'];
$tags=array();
$hashtags = array();
$mentions = array();
$sp = false;
$profile_link = best_link_url($item,$sp);
if($sp)
@ -678,14 +673,17 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional', $
$unverified = '';
$tags=array();
$terms = get_terms_oftype($item['term'],array(TERM_HASHTAG,TERM_MENTION,TERM_UNKNOWN));
if(count($terms))
foreach($terms as $tag)
$tags[] = format_term_for_display($tag);
// $tags=array();
// $terms = get_terms_oftype($item['term'],array(TERM_HASHTAG,TERM_MENTION,TERM_UNKNOWN));
// if(count($terms))
// foreach($terms as $tag)
// $tags[] = format_term_for_display($tag);
$body = prepare_body($item,true);
$is_photo = ((($item['resource_type'] == 'photo') && (feature_enabled($profile_owner,'large_photos'))) ? true : false);
$has_tags = (($body['tags'] || $body['categories'] || $body['mentions'] || $body['attachments'] || $body['folders']) ? true : false);
$tmp_item = array(
'template' => $tpl,
'toplevel' => 'toplevel_item',
@ -699,10 +697,12 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional', $
'lock' => $lock,
'thumb' => $profile_avatar,
'title' => $item['title'],
'body' => $body,
'tags' => $tags,
'hashtags' => $hashtags,
'mentions' => $mentions,
'body' => $body['html'],
'tags' => $body['tags'],
'categories' => $body['categories'],
'mentions' => $body['mentions'],
'attachments' => $body['attachments'],
'folders' => $body['folders'],
'verified' => $verified,
'unverified' => $unverified,
'forged' => $forged,
@ -712,7 +712,7 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional', $
'has_folders' => ((count($folders)) ? 'true' : ''),
'categories' => $categories,
'folders' => $folders,
'text' => strip_tags($body),
'text' => strip_tags($body['html']),
'ago' => relative_date($item['created']),
'app' => $item['app'],
'str_app' => sprintf( t('from %s'), $item['app']),
@ -738,6 +738,8 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional', $
'previewing' => $previewing,
'wait' => t('Please wait'),
'thread_level' => 1,
'is_photo' => $is_photo,
'has_tags' => $has_tags,
);
$arr = array('item' => $item, 'output' => $tmp_item);
@ -1164,6 +1166,10 @@ function status_editor($a, $x, $popup = false) {
if($defexpire)
$defexpire = datetime_convert('UTC',date_default_timezone_get(),$defexpire,'Y-m-d H:i');
$defpublish = ((($z = get_pconfig($x['profile_uid'], 'system', 'default_post_publish')) && (! $webpage)) ? $z : '');
if($defpublish)
$defpublish = datetime_convert('UTC',date_default_timezone_get(),$defpublish,'Y-m-d H:i');
$cipher = get_pconfig($x['profile_uid'], 'system', 'default_cipher');
if(! $cipher)
$cipher = 'aes256';
@ -1235,6 +1241,9 @@ function status_editor($a, $x, $popup = false) {
'$defexpire' => $defexpire,
'$feature_expire' => ((feature_enabled($x['profile_uid'], 'content_expire') && (! $webpage)) ? true : false),
'$expires' => t('Set expiration date'),
'$defpublish' => $defpublish,
'$feature_future' => ((feature_enabled($x['profile_uid'], 'delayed_posting') && (! $webpage)) ? true : false),
'$future_txt' => t('Set publish date'),
'$feature_encrypt' => ((feature_enabled($x['profile_uid'], 'content_encrypt') && (! $webpage)) ? true : false),
'$encrypt' => t('Encrypt text'),
'$cipher' => $cipher,
@ -1414,7 +1423,7 @@ function prepare_page($item) {
'$auth_url' => (($naked) ? '' : zid($item['author']['xchan_url'])),
'$date' => (($naked) ? '' : datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'Y-m-d H:i')),
'$title' => smilies(bbcode($item['title'])),
'$body' => $body,
'$body' => $body['html'],
'$preview' => $preview,
'$link' => $link,
));

View file

@ -138,14 +138,16 @@ function deliver_run($argv, $argc) {
if($dresult && is_array($dresult)) {
foreach($dresult as $xx) {
if(is_array($xx) && array_key_exists('message_id',$xx)) {
q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_result, dreport_time, dreport_xchan ) values ( '%s', '%s','%s','%s','%s','%s' ) ",
dbesc($xx['message_id']),
dbesc($xx['location']),
dbesc($xx['recipient']),
dbesc($xx['status']),
dbesc(datetime_convert($xx['date'])),
dbesc($xx['sender'])
);
if(delivery_report_is_storable($xx)) {
q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_result, dreport_time, dreport_xchan ) values ( '%s', '%s','%s','%s','%s','%s' ) ",
dbesc($xx['message_id']),
dbesc($xx['location']),
dbesc($xx['recipient']),
dbesc($xx['status']),
dbesc(datetime_convert($xx['date'])),
dbesc($xx['sender'])
);
}
}
}
}

View file

@ -178,9 +178,10 @@ function sync_directories($dirmode) {
'site_directory' => DIRECTORY_FALLBACK_MASTER . '/dirsearch',
'site_realm' => DIRECTORY_REALM,
'site_valid' => 1
);
$x = q("insert into site ( site_url, site_flags, site_update, site_directory, site_realm, site_valid )
values ( '%s', %d', '%s', '%s', '%s' ) ",
values ( '%s', %d, '%s', '%s', '%s', %d ) ",
dbesc($r[0]['site_url']),
intval($r[0]['site_flags']),
dbesc($r[0]['site_update']),

View file

@ -97,7 +97,7 @@ function notification($params) {
if ($params['type'] == NOTIFY_MAIL) {
logger('notification: mail');
$subject = sprintf( t('[Red:Notify] New mail received at %s'),$sitename);
$subject = sprintf( t('[Hubzilla:Notify] New mail received at %s'),$sitename);
$preamble = sprintf( t('%1$s, %2$s sent you a new private message at %3$s.'),$recip['channel_name'], $sender['xchan_name'],$sitename);
$epreamble = sprintf( t('%1$s sent you %2$s.'),'[zrl=' . $sender['xchan_url'] . ']' . $sender['xchan_name'] . '[/zrl]', '[zrl=$itemlink]' . t('a private message') . '[/zrl]');
@ -183,7 +183,7 @@ function notification($params) {
// Before this we have the name of the replier on the subject rendering
// differents subjects for messages on the same thread.
$subject = sprintf( t('[Red:Notify] Comment to conversation #%1$d by %2$s'), $parent_id, $sender['xchan_name']);
$subject = sprintf( t('[Hubzilla:Notify] Comment to conversation #%1$d by %2$s'), $parent_id, $sender['xchan_name']);
$preamble = sprintf( t('%1$s, %2$s commented on an item/conversation you have been following.'), $recip['channel_name'], $sender['xchan_name']);
$epreamble = $dest_str;
@ -193,7 +193,7 @@ function notification($params) {
}
if($params['type'] == NOTIFY_WALL) {
$subject = sprintf( t('[Red:Notify] %s posted to your profile wall') , $sender['xchan_name']);
$subject = sprintf( t('[Hubzilla:Notify] %s posted to your profile wall') , $sender['xchan_name']);
$preamble = sprintf( t('%1$s, %2$s posted to your profile wall at %3$s') , $recip['channel_name'], $sender['xchan_name'], $sitename);
@ -221,7 +221,7 @@ function notification($params) {
return;
}
$subject = sprintf( t('[Red:Notify] %s tagged you') , $sender['xchan_name']);
$subject = sprintf( t('[Hubzilla:Notify] %s tagged you') , $sender['xchan_name']);
$preamble = sprintf( t('%1$s, %2$s tagged you at %3$s') , $recip['channel_name'], $sender['xchan_name'], $sitename);
$epreamble = sprintf( t('%1$s, %2$s [zrl=%3$s]tagged you[/zrl].') ,
$recip['channel_name'],
@ -235,7 +235,7 @@ function notification($params) {
}
if ($params['type'] == NOTIFY_POKE) {
$subject = sprintf( t('[Red:Notify] %1$s poked you') , $sender['xchan_name']);
$subject = sprintf( t('[Hubzilla:Notify] %1$s poked you') , $sender['xchan_name']);
$preamble = sprintf( t('%1$s, %2$s poked you at %3$s') , $recip['channel_name'], $sender['xchan_name'], $sitename);
$epreamble = sprintf( t('%1$s, %2$s [zrl=%2$s]poked you[/zrl].') ,
$recip['channel_name'],
@ -253,7 +253,7 @@ function notification($params) {
}
if ($params['type'] == NOTIFY_TAGSHARE) {
$subject = sprintf( t('[Red:Notify] %s tagged your post') , $sender['xchan_name']);
$subject = sprintf( t('[Hubzilla:Notify] %s tagged your post') , $sender['xchan_name']);
$preamble = sprintf( t('%1$s, %2$s tagged your post at %3$s') , $recip['channel_name'],$sender['xchan_name'], $sitename);
$epreamble = sprintf( t('%1$s, %2$s tagged [zrl=%3$s]your post[/zrl]') ,
$recip['channel_name'],
@ -267,7 +267,7 @@ function notification($params) {
}
if ($params['type'] == NOTIFY_INTRO) {
$subject = sprintf( t('[Red:Notify] Introduction received'));
$subject = sprintf( t('[Hubzilla:Notify] Introduction received'));
$preamble = sprintf( t('%1$s, you\'ve received an new connection request from \'%2$s\' at %3$s'), $recip['channel_name'], $sender['xchan_name'], $sitename);
$epreamble = sprintf( t('%1$s, you\'ve received [zrl=%2$s]a new connection request[/zrl] from %3$s.'),
$recip['channel_name'],
@ -282,7 +282,7 @@ function notification($params) {
}
if ($params['type'] == NOTIFY_SUGGEST) {
$subject = sprintf( t('[Red:Notify] Friend suggestion received'));
$subject = sprintf( t('[Hubzilla:Notify] Friend suggestion received'));
$preamble = sprintf( t('%1$s, you\'ve received a friend suggestion from \'%2$s\' at %3$s'), $recip['channel_name'], $sender['xchan_name'], $sitename);
$epreamble = sprintf( t('%1$s, you\'ve received [zrl=%2$s]a friend suggestion[/zrl] for %3$s from %4$s.'),
$recip['channel_name'],
@ -508,7 +508,7 @@ function notification($params) {
$private_activity = true;
case NOTIFY_MAIL:
$datarray['textversion'] = $datarray['htmlversion'] = $datarray['title'] = '';
$datarray['subject'] = preg_replace('/' . preg_quote(t('[Red:Notify]')) . '/','$0*',$datarray['subject']);
$datarray['subject'] = preg_replace('/' . preg_quote(t('[Hubzilla:Notify]')) . '/','$0*',$datarray['subject']);
break;
default:
break;

View file

@ -55,10 +55,11 @@ function get_features() {
t('Post Composition Features'),
// array('richtext', t('Richtext Editor'), t('Enable richtext editor'),false),
array('markdown', t('Use Markdown'), t('Allow use of "Markdown" to format posts'),false),
array('large_photos', t('Large Photos'), t('Include large (640px) photo thumbnails in posts. If not enabled, use small (320px) photo thumbnails'),false),
array('large_photos', t('Large Photos'), t('Include large (1024px) photo thumbnails in posts. If not enabled, use small (640px) photo thumbnails'),false),
array('channel_sources', t('Channel Sources'), t('Automatically import channel content from other channels or feeds'),false),
array('content_encrypt', t('Even More Encryption'), t('Allow optional encryption of content end-to-end with a shared secret key'),false),
array('consensus_tools', t('Enable voting tools'), t('Provide a class of post which others can vote on'),false),
array('consensus_tools', t('Enable Voting Tools'), t('Provide a class of post which others can vote on'),false),
array('delayed_posting', t('Delayed Posting'), t('Allow posts to be published at a later date'),false),
),

View file

@ -133,27 +133,27 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false)
$their_perms = 0;
$xchan_hash = '';
$r = q("select * from xchan where xchan_hash = '%s' or xchan_url = '%s' limit 1",
dbesc($url),
dbesc($url)
);
if(! $r) {
// attempt network auto-discovery
if(strpos($url,'@') && (! $is_http)) {
$r = discover_by_webbie($url);
$d = discover_by_webbie($url);
}
elseif($is_http) {
$r = discover_by_url($url);
$r['allowed'] = intval(get_config('system','feed_contacts'));
}
if($r) {
$r['channel_id'] = $uid;
call_hooks('follow_allow',$r);
if(! $r['allowed']) {
if(get_config('system','feed_contacts'))
$d = discover_by_url($url);
else {
$result['message'] = t('Protocol disabled.');
return $result;
}
}
if($d) {
$r = q("select * from xchan where xchan_hash = '%s' or xchan_url = '%s' limit 1",
dbesc($url),
dbesc($url)
@ -172,6 +172,16 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false)
return $result;
}
$x = array('channel_id' => $uid, 'follow_address' => $url, 'xchan' => $r[0], 'allowed' => 1);
call_hooks('follow_allow',$x);
if(! $x['allowed']) {
$result['message'] = t('Protocol disabled.');
return $result;
}
if((local_channel()) && $uid == local_channel()) {
$aid = get_account_id();
$hash = get_observer_hash();
@ -251,7 +261,7 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false)
);
if($r) {
$result['abook'] = $r[0];
proc_run('php', 'include/notifier.php', 'permission_update', $result['abook']['abook_id']);
proc_run('php', 'include/notifier.php', 'permission_create', $result['abook']['abook_id']);
}
$arr = array('channel_id' => $uid, 'abook' => $result['abook']);

View file

@ -631,6 +631,30 @@ function identity_basic_export($channel_id, $items = false) {
if($r)
$ret['likes'] = $r;
$r = q("select * from conv where uid = %d",
intval($channel_id)
);
if($r) {
for($x = 0; $x < count($r); $x ++) {
$r[$x]['subject'] = base64url_decode(str_rot47($r[$x]['subject']));
}
$ret['conv'] = $r;
}
$r = q("select * from mail where mail.uid = %d",
intval($channel_id)
);
if($r) {
$m = array();
foreach($r as $rr) {
xchan_mail_query($rr);
$m[] = mail_encode($rr,true);
}
$ret['mail'] = $m;
}
$r = q("select item_id.*, item.mid from item_id left join item on item_id.iid = item.id where item_id.uid = %d",
intval($channel_id)
);

View file

@ -790,7 +790,7 @@ function import_likes($channel,$likes) {
if($r)
continue;
dbesc_array($config);
dbesc_array($like);
$r = dbq("INSERT INTO likes (`"
. implode("`, `", array_keys($like))
. "`) VALUES ('"
@ -800,6 +800,71 @@ function import_likes($channel,$likes) {
}
}
function import_conv($channel,$convs) {
if($channel && $convs) {
foreach($convs as $conv) {
if($conv['deleted']) {
q("delete from conv where guid = '%s' and uid = %d limit 1",
dbesc($conv['guid']),
intval($channel['channel_id'])
);
continue;
}
unset($conv['id']);
$conv['uid'] = $channel['channel_id'];
$conv['subject'] = str_rot47(base64url_encode($conv['subject']));
$r = q("select id from conv where guid = '%s' and uid = %d limit 1",
dbesc($conv['guid']),
intval($channel['channel_id'])
);
if($r)
continue;
dbesc_array($conv);
$r = dbq("INSERT INTO conv (`"
. implode("`, `", array_keys($conv))
. "`) VALUES ('"
. implode("', '", array_values($conv))
. "')" );
}
}
}
function import_mail($channel,$mails) {
if($channel && $mails) {
foreach($mails as $mail) {
if(array_key_exists('flags',$mail) && in_array('deleted',$mail['flags'])) {
q("delete from mail where mid = '%s' and uid = %d limit 1",
dbesc($mail['message_id']),
intval($channel['channel_id'])
);
continue;
}
if(array_key_exists('flags',$mail) && in_array('recalled',$mail['flags'])) {
q("update mail set mail_recalled = 1 where mid = '%s' and uid = %d limit 1",
dbesc($mail['message_id']),
intval($channel['channel_id'])
);
continue;
}
$m = get_mail_elements($mail);
if(! $m)
continue;
$m['aid'] = $channel['channel_account_id'];
$m['uid'] = $channel['channel_id'];
mail_store($m);
}
}
}

View file

@ -1559,7 +1559,7 @@ function encode_item_flags($item) {
return $ret;
}
function encode_mail($item) {
function encode_mail($item,$extended = false) {
$x = array();
$x['type'] = 'mail';
$x['encoding'] = 'zot';
@ -1592,6 +1592,18 @@ function encode_mail($item) {
$x['body'] = '';
}
if($extended) {
$x['conv_guid'] = $item['conv_guid'];
if(intval($item['mail_deleted']))
$x['flags'][] = 'deleted';
if(intval($item['mail_replied']))
$x['flags'][] = 'replied';
if(intval($item['mail_isreply']))
$x['flags'][] = 'isreply';
if(intval($item['mail_seen']))
$x['flags'][] = 'seen';
}
return $x;
}
@ -1604,6 +1616,8 @@ function get_mail_elements($x) {
$arr['body'] = (($x['body']) ? htmlspecialchars($x['body'], ENT_COMPAT,'UTF-8',false) : '');
$arr['title'] = (($x['title'])? htmlspecialchars($x['title'],ENT_COMPAT,'UTF-8',false) : '');
$arr['conv_guid'] = (($x['conv_guid'])? htmlspecialchars($x['conv_guid'],ENT_COMPAT,'UTF-8',false) : '');
$arr['created'] = datetime_convert('UTC','UTC',$x['created']);
if((! array_key_exists('expires',$x)) || ($x['expires'] === NULL_DATE))
$arr['expires'] = NULL_DATE;
@ -1616,6 +1630,18 @@ function get_mail_elements($x) {
if(in_array('recalled',$x['flags'])) {
$arr['mail_recalled'] = 1;
}
if(in_array('replied',$x['flags'])) {
$arr['mail_replied'] = 1;
}
if(in_array('isreply',$x['flags'])) {
$arr['mail_isreply'] = 1;
}
if(in_array('seen',$x['flags'])) {
$arr['mail_seen'] = 1;
}
if(in_array('deleted',$x['flags'])) {
$arr['mail_deleted'] = 1;
}
}
$key = get_config('system','pubkey');
@ -1630,6 +1656,7 @@ function get_mail_elements($x) {
if($arr['created'] > datetime_convert())
$arr['created'] = datetime_convert();
$arr['mid'] = (($x['message_id']) ? htmlspecialchars($x['message_id'], ENT_COMPAT,'UTF-8',false) : '');
$arr['parent_mid'] = (($x['message_parent']) ? htmlspecialchars($x['message_parent'], ENT_COMPAT,'UTF-8',false) : '');
@ -3510,6 +3537,7 @@ function mail_store($arr) {
$arr['title'] = ((x($arr,'title')) ? trim($arr['title']) : '');
$arr['parent_mid'] = ((x($arr,'parent_mid')) ? notags(trim($arr['parent_mid'])) : '');
$arr['body'] = ((x($arr,'body')) ? trim($arr['body']) : '');
$arr['conv_guid'] = ((x($arr,'conv_guid')) ? trim($arr['conv_guid']) : '');
$arr['mail_flags'] = ((x($arr,'mail_flags')) ? intval($arr['mail_flags']) : 0 );

View file

@ -28,8 +28,6 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto='
// $expires = datetime_convert(date_default_timezone_get(),'UTC',$expires);
if($uid) {
$r = q("select * from channel where channel_id = %d limit 1",
intval($uid)
@ -49,18 +47,20 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto='
// look for any existing conversation structure
$conv_guid = '';
if(strlen($replyto)) {
$r = q("select convid from mail where channel_id = %d and ( mid = '%s' or parent_mid = '%s' ) limit 1",
$r = q("select conv_guid from mail where channel_id = %d and ( mid = '%s' or parent_mid = '%s' ) limit 1",
intval(local_channel()),
dbesc($replyto),
dbesc($replyto)
);
if($r)
$convid = $r[0]['convid'];
if($r) {
$conv_guid = $r[0]['conv_guid'];
}
}
if(! $convid) {
if(! $conv_guid) {
// create a new conversation
@ -93,16 +93,28 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto='
dbesc($conv_guid),
intval(local_channel())
);
if($r)
$convid = $r[0]['id'];
if($r) {
$retconv = $r[0];
$retconv['subject'] = base64url_decode(str_rot47($retconv['subject']));
}
}
if(! $convid) {
if(! $retconv) {
$r = q("select * from conv where guid = '%s' and uid = %d limit 1",
dbesc($conv_guid),
intval(local_channel())
);
if($r) {
$retconv = $r[0];
$retconv['subject'] = base64url_decode(str_rot47($retconv['subject']));
}
}
if(! $retconv) {
$ret['message'] = 'conversation not found';
return $ret;
}
// generate a unique message_id
do {
@ -174,10 +186,10 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto='
$r = q("INSERT INTO mail ( account_id, convid, mail_obscured, channel_id, from_xchan, to_xchan, title, body, attach, mid, parent_mid, created, expires )
VALUES ( %d, %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )",
$r = q("INSERT INTO mail ( account_id, conv_guid, mail_obscured, channel_id, from_xchan, to_xchan, title, body, attach, mid, parent_mid, created, expires )
VALUES ( %d, '%s', %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )",
intval($channel['channel_account_id']),
intval($convid),
dbesc($conv_guid),
intval(1),
intval($channel['channel_id']),
dbesc($channel['channel_hash']),
@ -197,8 +209,11 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto='
dbesc($mid),
intval($channel['channel_id'])
);
if($r)
if($r) {
$post_id = $r[0]['id'];
$retmail = $r[0];
xchan_mail_query($retmail);
}
else {
$ret['message'] = t('Stored post could not be verified.');
return $ret;
@ -242,6 +257,9 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto='
$ret['success'] = true;
$ret['message_item'] = intval($post_id);
$ret['conv'] = $retconv;
$ret['mail'] = $retmail;
return $ret;
}
@ -367,30 +385,67 @@ function private_messages_fetch_message($channel_id, $messageitem_id, $updatesee
function private_messages_drop($channel_id, $messageitem_id, $drop_conversation = false) {
if($drop_conversation) {
// find the parent_id
$p = q("SELECT parent_mid FROM mail WHERE id = %d AND channel_id = %d LIMIT 1",
intval($messageitem_id),
$x = q("select * from mail where id = %d and channel_id = %d limit 1",
intval($messageitem_id),
intval($channel_id)
);
if(! $x)
return false;
$conversation = null;
if($x[0]['conv_guid']) {
$y = q("select * from conv where guid = '%s' and uid = %d limit 1",
dbesc($x[0]['conv_guid']),
intval($channel_id)
);
if($p) {
$r = q("DELETE FROM mail WHERE parent_mid = '%s' AND channel_id = %d ",
dbesc($p[0]['parent_mid']),
intval($channel_id)
);
if($r)
return true;
if($y) {
$conversation = $y[0];
$conversation['subject'] = base64url_decode(str_rot47($conversation['subject']));
}
}
if($drop_conversation) {
$m = array();
$m['conv'] = array($conversation);
$m['conv'][0]['deleted'] = 1;
$z = q("select * from mail where parent_mid = '%s' and channel_id = %d",
dbesc($x[0]['parent_mid']),
intval($channel_id)
);
if($z) {
q("delete from conv where guid = '%s' and uid = %d limit 1",
dbesc($x[0]['conv_guid']),
intval($channel_id)
);
$m['mail'] = array();
foreach($z as $zz) {
xchan_mail_query($zz);
$zz['mail_deleted'] = 1;
$m['mail'][] = encode_mail($zz,true);
}
q("DELETE FROM mail WHERE parent_mid = '%s' AND channel_id = %d ",
dbesc($x[0]['parent_mid']),
intval($channel_id)
);
}
build_sync_packet($channel_id,$m);
return true;
}
else {
xchan_mail_query($x[0]);
$x[0]['mail_deleted'] = true;
$r = q("DELETE FROM mail WHERE id = %d AND channel_id = %d",
intval($messageitem_id),
intval($channel_id)
);
if($r)
return true;
build_sync_packet($channel_id,array('mail' => array(encode_mail($x,true))));
return true;
}
return false;
}

View file

@ -586,7 +586,7 @@ function scale_external_images($s, $include_link = true, $scale_replace = false)
if(substr($mtch[1],0,1) == '=') {
$owidth = intval(substr($mtch[2],1));
if(intval($owidth) > 0 && intval($owidth) < 640)
if(intval($owidth) > 0 && intval($owidth) < 1024)
continue;
}
@ -624,9 +624,9 @@ function scale_external_images($s, $include_link = true, $scale_replace = false)
$orig_width = $ph->getWidth();
$orig_height = $ph->getHeight();
if($orig_width > 640 || $orig_height > 640) {
if($orig_width > 1024 || $orig_height > 1024) {
$tag = (($match[1] == 'z') ? 'zmg' : 'img');
$ph->scaleImage(640);
$ph->scaleImage(1024);
$new_width = $ph->getWidth();
$new_height = $ph->getHeight();
logger('scale_external_images: ' . $orig_width . '->' . $new_width . 'w ' . $orig_height . '->' . $new_height . 'h' . ' match: ' . $mtch[0], LOGGER_DEBUG);
@ -1677,13 +1677,40 @@ function format_and_send_email($sender,$xchan,$item) {
'additionalMailHeader' => '',
));
}
function do_delivery($deliveries) {
if(! (is_array($deliveries) && count($deliveries)))
return;
$interval = ((get_config('system','delivery_interval') !== false)
? intval(get_config('system','delivery_interval')) : 2 );
$deliveries_per_process = intval(get_config('system','delivery_batch_count'));
if($deliveries_per_process <= 0)
$deliveries_per_process = 1;
$deliver = array();
foreach($deliveries as $d) {
$deliver[] = $d;
if(count($deliver) >= $deliveries_per_process) {
proc_run('php','include/deliver.php',$deliver);
$deliver = array();
if($interval)
@time_sleep_until(microtime(true) + (float) $interval);
}
}
// catch any stragglers
if($deliver)
proc_run('php','include/deliver.php',$deliver);
}

View file

@ -96,7 +96,19 @@ function notifier_run($argv, $argc){
require_once('include/identity.php');
$sys = get_sys_channel();
if($cmd == 'permission_update') {
$deliveries = array();
$dead_hubs = array();
$dh = q("select site_url from site where site_dead = 1");
if(dh) {
foreach($dh as $dead) {
$dead_hubs[] = $dead['site_url'];
}
}
if($cmd == 'permission_update' || $cmd == 'permission_create') {
// Get the recipient
$r = q("select abook.*, hubloc.* from abook
left join hubloc on hubloc_hash = abook_xchan
@ -113,8 +125,16 @@ function notifier_run($argv, $argc){
intval($r[0]['abook_channel'])
);
if($s) {
$perm_update = array('sender' => $s[0], 'recipient' => $r[0], 'success' => false);
call_hooks('permissions_update',$perm_update);
$perm_update = array('sender' => $s[0], 'recipient' => $r[0], 'success' => false, 'deliveries' => '');
if($cmd == 'permission_create')
call_hooks('permissions_create',$perm_update);
else
call_hooks('permissions_update',$perm_update);
if($perm_update['success'] && $perm_update['deliveries'])
$deliveries[] = $perm_update['deliveries'];
if(! $perm_update['success']) {
// send a refresh message to each hub they have registered here
$h = q("select * from hubloc where hubloc_hash = '%s'
@ -125,36 +145,40 @@ function notifier_run($argv, $argc){
);
if($h) {
foreach($h as $hh) {
if(in_array($hh['hubloc_url'],$dead_hubs)) {
logger('skipping dead hub: ' . $hh['hubloc_url'], LOGGER_DEBUG);
continue;
}
$data = zot_build_packet($s[0],'refresh',array(array(
'guid' => $hh['hubloc_guid'],
'guid_sig' => $hh['hubloc_guid_sig'],
'url' => $hh['hubloc_url'])
));
if($data) {
$result = zot_zot($hh['hubloc_callback'],$data);
// if immediate delivery failed, stick it in the queue to try again later.
if(! $result['success']) {
$hash = random_string();
q("insert into outq ( outq_hash, outq_account, outq_channel, outq_driver, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg )
values ( '%s', %d, %d, '%s', '%s', %d, '%s', '%s', '%s', '%s' )",
dbesc($hash),
intval($s[0]['channel_account_id']),
intval($s[0]['channel_id']),
dbesc('zot'),
dbesc($hh['hubloc_callback']),
intval(1),
dbesc(datetime_convert()),
dbesc(datetime_convert()),
dbesc($data),
dbesc('')
);
}
$hash = random_string();
q("insert into outq ( outq_hash, outq_account, outq_channel, outq_driver, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg )
values ( '%s', %d, %d, '%s', '%s', %d, '%s', '%s', '%s', '%s' )",
dbesc($hash),
intval($s[0]['channel_account_id']),
intval($s[0]['channel_id']),
dbesc('zot'),
dbesc($hh['hubloc_callback']),
intval(1),
dbesc(datetime_convert()),
dbesc(datetime_convert()),
dbesc($data),
dbesc('')
);
$deliveries[] = $hash;
}
}
}
}
if($deliveries)
do_delivery($deliveries);
}
}
return;
@ -342,7 +366,7 @@ function notifier_run($argv, $argc){
logger('notifier: target item not forwardable: type ' . $target_item['item_type'], LOGGER_DEBUG);
return;
}
if(intval($target_item['item_unpublished']) || intval($target_item['item_delayed_publish'])) {
if(intval($target_item['item_unpublished']) || intval($target_item['item_delayed'])) {
logger('notifier: target item not published, so not forwardable', LOGGER_DEBUG);
return;
}
@ -524,14 +548,6 @@ function notifier_run($argv, $argc){
$hubs = $r;
$dead_hubs = array();
$dh = q("select site_url from site where site_dead = 1");
if(dh) {
foreach($dh as $dead) {
$dead_hubs[] = $dead['site_url'];
}
}
/**
@ -571,15 +587,6 @@ function notifier_run($argv, $argc){
logger('notifier: will notify/deliver to these hubs: ' . print_r($hublist,true), LOGGER_DEBUG);
$interval = ((get_config('system','delivery_interval') !== false)
? intval(get_config('system','delivery_interval')) : 2 );
$deliveries_per_process = intval(get_config('system','delivery_batch_count'));
if($deliveries_per_process <= 0)
$deliveries_per_process = 1;
$deliveries = array();
foreach($dhubs as $hub) {
@ -687,29 +694,11 @@ function notifier_run($argv, $argc){
if($normal_mode) {
$x = q("select * from hook where hook = 'notifier_normal'");
if($x)
proc_run('php','deliver_hooks.php', $target_item['id']);
proc_run('php','include/deliver_hooks.php', $target_item['id']);
}
if($deliveries) {
$deliver = array();
foreach($deliveries as $d) {
$deliver[] = $d;
if(count($deliver) >= $deliveries_per_process) {
proc_run('php','include/deliver.php',$deliver);
$deliver = array();
if($interval)
@time_sleep_until(microtime(true) + (float) $interval);
}
}
}
// catch any stragglers
if($deliver)
proc_run('php','include/deliver.php',$deliver);
if($deliveries)
do_delivery($deliveries);
logger('notifier: basic loop complete.', LOGGER_DEBUG);

View file

@ -7,6 +7,7 @@
require_once('include/permissions.php');
require_once('include/items.php');
require_once('include/photo/photo_driver.php');
require_once('include/text.php');
/**
* @brief
@ -18,6 +19,8 @@ require_once('include/photo/photo_driver.php');
*/
function photo_upload($channel, $observer, $args) {
$a = get_app();
$ret = array('success' => false);
$channel_id = $channel['channel_id'];
$account_id = $channel['channel_account_id'];
@ -185,31 +188,66 @@ function photo_upload($channel, $observer, $args) {
if($args['description'])
$p['description'] = $args['description'];
$r1 = $ph->save($p);
if(! $r1)
$errors = true;
$link = array();
$r0 = $ph->save($p);
$link[0] = array(
'rel' => 'alternate',
'type' => 'text/html',
'href' => $url = rawurlencode(z_root() . '/photo/' . $photo_hash . '-0.' . $ph->getExt()),
'width' => $ph->getWidth(),
'height' => $ph->getHeight()
);
if(! $r0)
$errors = true;
unset($p['os_storage']);
unset($p['os_path']);
if(($width > 640 || $height > 640) && (! $errors)) {
$ph->scaleImage(640);
$p['scale'] = 1;
$r2 = $ph->save($p);
$smallest = 1;
if(! $r2)
$errors = true;
}
if(($width > 1024 || $height > 1024) && (! $errors))
$ph->scaleImage(1024);
if(($width > 320 || $height > 320) && (! $errors)) {
$p['scale'] = 1;
$r1 = $ph->save($p);
$link[1] = array(
'rel' => 'alternate',
'type' => 'text/html',
'href' => $url = rawurlencode(z_root() . '/photo/' . $photo_hash . '-1.' . $ph->getExt()),
'width' => $ph->getWidth(),
'height' => $ph->getHeight()
);
if(! $r1)
$errors = true;
if(($width > 640 || $height > 640) && (! $errors))
$ph->scaleImage(640);
$p['scale'] = 2;
$r2 = $ph->save($p);
$link[2] = array(
'rel' => 'alternate',
'type' => 'text/html',
'href' => $url = rawurlencode(z_root() . '/photo/' . $photo_hash . '-2.' . $ph->getExt()),
'width' => $ph->getWidth(),
'height' => $ph->getHeight()
);
if(! $r2)
$errors = true;
if(($width > 320 || $height > 320) && (! $errors))
$ph->scaleImage(320);
$p['scale'] = 2;
$r3 = $ph->save($p);
$smallest = 2;
if(! $r3)
$errors = true;
}
$p['scale'] = 3;
$r3 = $ph->save($p);
$link[3] = array(
'rel' => 'alternate',
'type' => 'text/html',
'href' => $url = rawurlencode(z_root() . '/photo/' . $photo_hash . '-3.' . $ph->getExt()),
'width' => $ph->getWidth(),
'height' => $ph->getHeight()
);
if(! $r3)
$errors = true;
if($errors) {
q("delete from photo where resource_id = '%s' and uid = %d",
@ -222,12 +260,6 @@ function photo_upload($channel, $observer, $args) {
return $ret;
}
// This will be the width and height of the smallest representation
$width_x_height = $ph->getWidth() . 'x' . $ph->getHeight();
// Create item container
$item_hidden = (($visible) ? 0 : 1 );
$lat = $lon = null;
@ -239,6 +271,40 @@ function photo_upload($channel, $observer, $args) {
}
}
$title = (($args['description']) ? $args['description'] : $args['filename']);
$large_photos = feature_enabled($channel['channel_id'], 'large_photos');
linkify_tags($a, $args['body'], $channel_id);
if($large_photos) {
$scale = 1;
$width = $link[1]['width'];
$height = $link[1]['height'];
$tag = (($r1) ? '[zmg=' . $width . 'x' . $height . ']' : '[zmg]');
}
else {
$scale = 2;
$width = $link[2]['width'];
$height = $link[2]['height'];
$tag = (($r2) ? '[zmg=' . $width . 'x' . $height . ']' : '[zmg]');
}
// Create item object
$object = array(
'type' => ACTIVITY_OBJ_PHOTO,
'title' => $title,
'id' => rawurlencode(z_root() . '/photos/' . $channel['channel_address'] . '/image/' . $photo_hash),
'link' => $link
);
$body = '[zrl=' . z_root() . '/photos/' . $channel['channel_address'] . '/image/' . $photo_hash . ']'
. $tag . z_root() . "/photo/{$photo_hash}-{$scale}." . $ph->getExt() . '[/zmg]'
. '[/zrl]';
// Create item container
if($args['item']) {
foreach($args['item'] as $i) {
@ -247,13 +313,13 @@ function photo_upload($channel, $observer, $args) {
if($item['mid'] === $item['parent_mid']) {
$item['body'] = '[zrl=' . z_root() . '/photos/' . $channel['channel_address'] . '/image/' . $photo_hash . ']'
. $tag . z_root() . "/photo/{$photo_hash}-{$smallest}.".$ph->getExt() . '[/zmg]'
. '[/zrl]';
$item['body'] = (($object) ? $args['body'] : $body . "\r\n" . $args['body']);
$item['obj_type'] = (($object) ? ACTIVITY_OBJ_PHOTO : '');
$item['object'] = (($object) ? json_encode($object) : '');
if($item['author_xchan'] === $channel['channel_hash']) {
$item['sig'] = base64url_encode(rsa_sign($item['body'],$channel['channel_prvkey']));
$item['item_verified'] = 1;
$item['sig'] = base64url_encode(rsa_sign($item['body'],$channel['channel_prvkey']));
$item['item_verified'] = 1;
}
else {
$item['sig'] = '';
@ -281,7 +347,6 @@ function photo_upload($channel, $observer, $args) {
}
}
else {
$title = '';
$mid = item_message_id();
$arr = array();
@ -304,33 +369,14 @@ function photo_upload($channel, $observer, $args) {
$arr['deny_cid'] = $ac['deny_cid'];
$arr['deny_gid'] = $ac['deny_gid'];
$arr['verb'] = ACTIVITY_POST;
$arr['obj_type'] = (($object) ? ACTIVITY_OBJ_PHOTO : '');
$arr['object'] = (($object) ? json_encode($object) : '');
$arr['item_wall'] = 1;
$arr['item_origin'] = 1;
$arr['item_thread_top'] = 1;
$arr['item_private'] = intval($acl->is_private());
$arr['plink'] = z_root() . '/channel/' . $channel['channel_address'] . '/?f=&mid=' . $arr['mid'];
// We should also put a width_x_height on large photos. Left as an exercise for
// devs looking for simple stuff to fix.
$larger = feature_enabled($channel['channel_id'], 'large_photos');
if($larger) {
$tag = '[zmg]';
if($r2)
$smallest = 1;
else
$smallest = 0;
}
else {
if ($width_x_height)
$tag = '[zmg=' . $width_x_height. ']';
else
$tag = '[zmg]';
}
$arr['body'] = '[zrl=' . z_root() . '/photos/' . $channel['channel_address'] . '/image/' . $photo_hash . ']'
. $tag . z_root() . "/photo/{$photo_hash}-{$smallest}.".$ph->getExt() . '[/zmg]'
. '[/zrl]';
$arr['body'] = (($object) ? $args['body'] : $body . "\r\n" . $args['body']);
$result = item_store($arr);
$item_id = $result['item_id'];
@ -341,7 +387,7 @@ function photo_upload($channel, $observer, $args) {
$ret['success'] = true;
$ret['item'] = $arr;
$ret['body'] = $arr['body'];
$ret['body'] = $body;
$ret['resource_id'] = $photo_hash;
$ret['photoitem_id'] = $item_id;

View file

@ -505,17 +505,20 @@ function script_path() {
else
$scheme = 'http';
if(x($_SERVER,'SERVER_NAME')) {
$hostname = $_SERVER['SERVER_NAME'];
// Some proxy setups may require using http_host
if(intval(get_app()->config['system']['script_path_use_http_host']))
$server_var = 'HTTP_HOST';
else
$server_var = 'SERVER_NAME';
if(x($_SERVER,$server_var)) {
$hostname = $_SERVER[$server_var];
}
else {
return z_root();
}
if(x($_SERVER,'SERVER_PORT') && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) {
$hostname .= ':' . $_SERVER['SERVER_PORT'];
}
return $scheme . '://' . $hostname;
}

View file

@ -1216,36 +1216,15 @@ function theme_attachments(&$item) {
if(is_array($arr) && count($arr)) {
$attaches = array();
foreach($arr as $r) {
$icon = '';
$icontype = substr($r['type'],0,strpos($r['type'],'/'));
/**
* @FIXME This should probably be a giant "if" statement in the
* template so that we don't have icon names embedded in php code.
*/
$icon = getIconFromType($r['type']);
$label = (($r['title']) ? urldecode(htmlspecialchars($r['title'], ENT_COMPAT, 'UTF-8')) : t('Unknown Attachment'));
switch($icontype) {
case 'video':
$icon = 'icon-facetime-video';
break;
case 'audio':
$icon = 'icon-volume-up';
break;
case 'image':
$icon = 'icon-picture';
break;
case 'text':
$icon = 'icon-align-justify';
break;
default:
$icon = 'icon-question';
break;
}
//some feeds provide an attachment where title an empty space
if($label == ' ')
$label = t('Unknown Attachment');
$title = htmlspecialchars($r['title'], ENT_COMPAT,'UTF-8');
if(! $title)
$title = t('unknown.???');
$title .= ' ' . (($r['length']) ? $r['length'] . ' ' . t('bytes') : '');
$title = t('Attachment') . ' - ' . (($r['length']) ? userReadableSize($r['length']) : t('Size Unknown'));
require_once('include/identity.php');
if(is_foreigner($item['author_xchan']))
@ -1253,14 +1232,14 @@ function theme_attachments(&$item) {
else
$url = z_root() . '/magic?f=&hash=' . $item['author_xchan'] . '&dest=' . $r['href'] . '/' . $r['revision'];
$s .= '<a href="' . $url . '" title="' . $title . '" class="attachlink" >' . $icon . '</a>';
$attaches[] = array('title' => $title, 'url' => $url, 'icon' => $icon );
//$s .= '<a href="' . $url . '" title="' . $title . '" class="attachlink" >' . $icon . '</a>';
$attaches[] = array('label' => $label, 'url' => $url, 'icon' => $icon, 'title' => $title);
}
}
$s = replace_macros(get_markup_template('item_attach.tpl'), array(
'$attaches' => $attaches
));
$s = replace_macros(get_markup_template('item_attach.tpl'), array(
'$attaches' => $attaches
));
}
return $s;
}
@ -1279,11 +1258,12 @@ function format_categories(&$item,$writeable) {
$removelink = (($writeable) ? z_root() . '/filerm/' . $item['id'] . '?f=&cat=' . urlencode($t['term']) : '');
$categories[] = array('term' => $term, 'writeable' => $writeable, 'removelink' => $removelink, 'url' => zid($t['url']));
}
$s = replace_macros(get_markup_template('item_categories.tpl'),array(
'$remove' => t('remove category'),
'$categories' => $categories
));
}
$s = replace_macros(get_markup_template('item_categories.tpl'),array(
'$remove' => t('remove category'),
'$categories' => $categories
));
return $s;
}
@ -1294,6 +1274,7 @@ function format_categories(&$item,$writeable) {
* @param[in] array &$item
* @return string HTML link of hashtag
*/
function format_hashtags(&$item) {
$s = '';
@ -1354,11 +1335,12 @@ function format_filer(&$item) {
$removelink = z_root() . '/filerm/' . $item['id'] . '?f=&term=' . urlencode($t['term']);
$categories[] = array('term' => $term, 'removelink' => $removelink);
}
$s = replace_macros(get_markup_template('item_filer.tpl'),array(
'$remove' => t('remove from file'),
'$categories' => $categories
));
}
$s = replace_macros(get_markup_template('item_filer.tpl'),array(
'$remove' => t('remove from file'),
'$categories' => $categories
));
return $s;
}
@ -1381,6 +1363,7 @@ function generate_named_map($location) {
function prepare_body(&$item,$attach = false) {
require_once('include/identity.php');
// if($item['html']) {
// $s = bb_observer($item['html']);
@ -1391,9 +1374,35 @@ function prepare_body(&$item,$attach = false) {
$s = prepare_text($item['body'],$item['mimetype'], false);
// }
$prep_arr = array('item' => $item, 'html' => $s);
$photo = '';
$is_photo = (($item['obj_type'] === ACTIVITY_OBJ_PHOTO) ? true : false);
if($is_photo) {
$object = json_decode($item['object'],true);
// if original photo width is <= 640px prepend it to item body
if($object['link'][0]['width'] && $object['link'][0]['width'] <= 640) {
$s = '<div class="inline-photo-item-wrapper"><a href="' . zid(rawurldecode($object['id'])) . '" target="_newwin"><img class="inline-photo-item" style="max-width:' . $object['link'][0]['width'] . 'px; width:100%; height:auto;" src="' . zid(rawurldecode($object['link'][0]['href'])) . '"></a></div>' . $s;
}
// if original photo width is > 640px make it a cover photo
if($object['link'][0]['width'] && $object['link'][0]['width'] > 640) {
$scale = ((($object['link'][1]['width'] == 1024) || ($object['link'][1]['height'] == 1024)) ? 1 : 0);
$photo = '<a href="' . zid(rawurldecode($object['id'])) . '" target="_newwin"><img style="max-width:' . $object['link'][$scale]['width'] . 'px; width:100%; height:auto;" src="' . zid(rawurldecode($object['link'][$scale]['href'])) . '"></a>';
}
}
$prep_arr = array(
'item' => $item,
'html' => $s,
'photo' => $photo
);
call_hooks('prepare_body', $prep_arr);
$s = $prep_arr['html'];
$photo = $prep_arr['photo'];
// q("update item set html = '%s' where id = %d",
// dbesc($s),
@ -1411,19 +1420,19 @@ function prepare_body(&$item,$attach = false) {
}
}
$s .= theme_attachments($item);
$attachments = theme_attachments($item);
$writeable = ((get_observer_hash() == $item['owner_xchan']) ? true : false);
$s .= format_hashtags($item);
$tags = format_hashtags($item);
if($item['resource_type'])
$s .= format_mentions($item);
$mentions = format_mentions($item);
$s .= format_categories($item,$writeable);
$categories = format_categories($item,$writeable);
if(local_channel() == $item['uid'])
$s .= format_filer($item);
$filer = format_filer($item);
$s = sslify($s);
@ -1456,9 +1465,22 @@ function prepare_body(&$item,$attach = false) {
$s = substr($s, 0, $pos).$authorreplace.substr($s, $pos+strlen($authorsearch));
}
$prep_arr = array('item' => $item, 'html' => $s);
$prep_arr = array(
'item' => $item,
'photo' => $photo,
'html' => $s,
'categories' => $categories,
'folders' => $filer,
'tags' => $tags,
'mentions' => $mentions,
'attachments' => $attachments
);
call_hooks('prepare_body_final', $prep_arr);
return $prep_arr['html'];
unset($prep_arr['item']);
return $prep_arr;
}
/**
@ -1975,15 +1997,15 @@ function xchan_query(&$items,$abook = true,$effective_uid = 0) {
if(count($arr)) {
if($abook) {
$chans = q("select * from xchan left join hubloc on hubloc_hash = xchan_hash left join abook on abook_xchan = xchan_hash and abook_channel = %d
where xchan_hash in (" . implode(',', $arr) . ") and hubloc_primary = 1",
where xchan_hash in (" . protect_sprintf(implode(',', $arr)) . ") and hubloc_primary = 1",
intval($item['uid'])
);
}
else {
$chans = q("select xchan.*,hubloc.* from xchan left join hubloc on hubloc_hash = xchan_hash
where xchan_hash in (" . implode(',', $arr) . ") and hubloc_primary = 1");
where xchan_hash in (" . protect_sprintf(implode(',', $arr)) . ") and hubloc_primary = 1");
}
$xchans = q("select * from xchan where xchan_hash in (" . implode(',',$arr) . ") and xchan_network in ('rss','unknown')");
$xchans = q("select * from xchan where xchan_hash in (" . protect_sprintf(implode(',',$arr)) . ") and xchan_network in ('rss','unknown')");
if(! $chans)
$chans = $xchans;
else
@ -2221,7 +2243,7 @@ function handle_tag($a, &$body, &$access_tag, &$str_tags, $profile_uid, $tag, $d
}
if($tag == '#getzot') {
$basetag = 'getzot';
$url = 'https://redmatrix.me';
$url = 'http://hubzilla.org';
$newtag = '#[zrl=' . $url . ']' . $basetag . '[/zrl]';
$body = str_replace($tag,$newtag,$body);
$replaced = true;
@ -2490,6 +2512,7 @@ function linkify_tags($a, &$body, $uid, $diaspora = false) {
*
* @param string $type mime type
* @return string
* @todo rename to get_icon_from_type()
*/
function getIconFromType($type) {
$iconMap = array(
@ -2542,6 +2565,7 @@ function getIconFromType($type) {
*
* @param int $size filesize in bytes
* @return string human readable formatted filesize
* @todo rename to user_readable_size()
*/
function userReadableSize($size) {
$ret = '';
@ -2564,3 +2588,47 @@ function str_rot47($str) {
'!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~',
'PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO');
}
function string_replace($old,$new,&$s) {
$x = str_replace($old,$new,$s);
$replaced = false;
if($x !== $s) {
$replaced = true;
}
$s = $x;
return $replaced;
}
function json_url_replace($old,$new,&$s) {
$old = str_replace('/','\\/',$old);
$new = str_replace('/','\\/',$new);
$x = str_replace($old,$new,$s);
$replaced = false;
if($x !== $s) {
$replaced = true;
}
$s = $x;
return $replaced;
}
function item_url_replace($channel,&$item,$old,$new) {
if($item['attach'])
json_url_replace($old,$new,$item['attach']);
if($item['object'])
json_url_replace($old,$new,$item['object']);
if($item['target'])
json_url_replace($old,$new,$item['target']);
if(string_replace($old,$new,$item['body'])) {
$item['sig'] = base64url_encode(rsa_sign($item['body'],$channel['channel_prvkey']));
$item['item_verified'] = 1;
}
}

View file

@ -565,12 +565,6 @@ function widget_mailmenu($arr) {
return replace_macros(get_markup_template('message_side.tpl'), array(
'$title' => t('Private Mail Menu'),
'$check'=>array(
'label' => t('Check Mail'),
'url' => $a->get_baseurl(true) . '/mail/combined',
'sel' => (argv(1) == ''),
),
'$combined'=>array(
'label' => t('Combined View'),
'url' => $a->get_baseurl(true) . '/mail/combined',

View file

@ -503,7 +503,7 @@ function zot_refresh($them, $channel = null, $force = false) {
if($new_connection) {
if($new_perms != $previous_perms)
proc_run('php','include/notifier.php','permission_update',$new_connection[0]['abook_id']);
proc_run('php','include/notifier.php','permission_create',$new_connection[0]['abook_id']);
require_once('include/enotify.php');
notification(array(
'type' => NOTIFY_INTRO,
@ -965,7 +965,7 @@ function zot_process_response($hub, $arr, $outq) {
if(is_array($x) && array_key_exists('delivery_report',$x) && is_array($x['delivery_report'])) {
foreach($x['delivery_report'] as $xx) {
if(is_array($xx) && array_key_exists('message_id',$xx)) {
if(is_array($xx) && array_key_exists('message_id',$xx) && delivery_report_is_storable($xx)) {
q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_result, dreport_time, dreport_xchan ) values ( '%s', '%s','%s','%s','%s','%s' ) ",
dbesc($xx['message_id']),
dbesc($xx['location']),
@ -2739,6 +2739,7 @@ function import_site($arr, $pubkey) {
$sellpage = htmlspecialchars($arr['sellpage'],ENT_COMPAT,'UTF-8',false);
$site_location = htmlspecialchars($arr['location'],ENT_COMPAT,'UTF-8',false);
$site_realm = htmlspecialchars($arr['realm'],ENT_COMPAT,'UTF-8',false);
$site_project = htmlspecialchars($arr['project'],ENT_COMPAT,'UTF-8',false);
// You can have one and only one primary directory per realm.
// Downgrade any others claiming to be primary. As they have
@ -2757,13 +2758,15 @@ function import_site($arr, $pubkey) {
|| ($siterecord['site_sellpage'] != $sellpage)
|| ($siterecord['site_location'] != $site_location)
|| ($siterecord['site_register'] != $register_policy)
|| ($siterecord['site_project'] != $site_project)
|| ($siterecord['site_realm'] != $site_realm)) {
$update = true;
// logger('import_site: input: ' . print_r($arr,true));
// logger('import_site: stored: ' . print_r($siterecord,true));
$r = q("update site set site_dead = 0, site_location = '%s', site_flags = %d, site_access = %d, site_directory = '%s', site_register = %d, site_update = '%s', site_sellpage = '%s', site_realm = '%s', site_type = %d
$r = q("update site set site_dead = 0, site_location = '%s', site_flags = %d, site_access = %d, site_directory = '%s', site_register = %d, site_update = '%s', site_sellpage = '%s', site_realm = '%s', site_type = %d, site_project = '%s'
where site_url = '%s'",
dbesc($site_location),
intval($site_directory),
@ -2774,6 +2777,7 @@ function import_site($arr, $pubkey) {
dbesc($sellpage),
dbesc($site_realm),
intval(SITE_TYPE_ZOT),
dbesc($site_project),
dbesc($url)
);
if(! $r) {
@ -2790,8 +2794,9 @@ function import_site($arr, $pubkey) {
}
else {
$update = true;
$r = q("insert into site ( site_location, site_url, site_access, site_flags, site_update, site_directory, site_register, site_sellpage, site_realm, site_type )
values ( '%s', '%s', %d, %d, '%s', '%s', %d, '%s', '%s', %d )",
$r = q("insert into site ( site_location, site_url, site_access, site_flags, site_update, site_directory, site_register, site_sellpage, site_realm, site_type, site_project )
values ( '%s', '%s', %d, %d, '%s', '%s', %d, '%s', '%s', %d, '%s' )",
dbesc($site_location),
dbesc($url),
intval($access_policy),
@ -2801,7 +2806,8 @@ function import_site($arr, $pubkey) {
intval($register_policy),
dbesc($sellpage),
dbesc($site_realm),
intval(SITE_TYPE_ZOT)
intval(SITE_TYPE_ZOT),
dbesc($site_project)
);
if(! $r) {
logger('import_site: record create failed. ' . print_r($arr,true));
@ -3002,6 +3008,12 @@ function process_channel_sync_delivery($sender, $arr, $deliveries) {
if(array_key_exists('chatroom',$arr) && $arr['chatroom'])
sync_chatrooms($channel,$arr['chatroom']);
if(array_key_exists('conv',$arr) && $arr['conv'])
import_conv($channel,$arr['conv']);
if(array_key_exists('mail',$arr) && $arr['mail'])
import_mail($channel,$arr['mail']);
if(array_key_exists('event',$arr) && $arr['event'])
sync_events($channel,$arr['event']);
@ -3804,6 +3816,7 @@ function zotinfo($arr) {
$ret['site']['sellpage'] = get_config('system','sellpage');
$ret['site']['location'] = get_config('system','site_location');
$ret['site']['realm'] = get_directory_realm();
$ret['site']['project'] = PLATFORM_NAME;
}
@ -3876,3 +3889,45 @@ function check_zotinfo($channel,$locations,&$ret) {
}
}
}
function delivery_report_is_storable($dr) {
call_hooks('dreport_is_storable',$dr);
// let plugins accept or reject - if neither, continue on
if(array_key_exists('accept',$dr) && intval($dr['accept']))
return true;
if(array_key_exists('reject',$dr) && intval($dr['reject']))
return false;
if(! ($dr['sender']))
return false;
// Is the sender one of our channels?
$c = q("select channel_id from channel where channel_hash = '%s' limit 1",
dbesc($dr['sender'])
);
if(! $c)
return false;
// is the recipient one of our connections, or do we want to store every report?
$r = explode(' ', $dr['recipient']);
$rxchan = $r[0];
$pcf = get_pconfig($c[0]['channel_id'],'system','dreport_store_all');
if($pcf)
return true;
$r = q("select abook_id from abook where abook_xchan = '%s' and abook_channel = %d limit 1",
dbesc($rxchan),
intval($c[0]['channel_id'])
);
if($r)
return true;
return false;
}

View file

@ -147,7 +147,12 @@ use SSL, your webserver must not listen on port 443 at all.
3. Create an empty database and note the access details (hostname, username,
password, database name).
password, database name). The MySQL client libraries will fallback to socket
communication if the hostname is 'localhost' and some people have reported
issues with the socket implementation. Use it if your requirements mandate.
Otherwise if the database is served on the local server, use '127.0.0.1' for
the hostname. See https://dev.mysql.com/doc/refman/5.0/en/connecting.html
for more information.
4. If you know in advance that it will be impossible for the web server to
write or create files in your web directory, create an empty file called

View file

@ -731,6 +731,7 @@ CREATE TABLE IF NOT EXISTS `likes` (
CREATE TABLE IF NOT EXISTS `mail` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`convid` int(10) unsigned NOT NULL DEFAULT '0',
`conv_guid` char(255) NOT NULL DEFAULT '',
`mail_flags` int(10) unsigned NOT NULL DEFAULT '0',
`from_xchan` char(255) NOT NULL DEFAULT '',
`to_xchan` char(255) NOT NULL DEFAULT '',
@ -761,6 +762,7 @@ CREATE TABLE IF NOT EXISTS `mail` (
KEY `parent_mid` (`parent_mid`),
KEY `expires` (`expires`),
KEY `convid` (`convid`),
KEY `conv_guid` (`conv_guid`),
KEY `mail_deleted` (`mail_deleted`),
KEY `mail_replied` (`mail_replied`),
KEY `mail_isreply` (`mail_isreply`),
@ -1132,6 +1134,7 @@ CREATE TABLE IF NOT EXISTS `site` (
`site_valid` smallint NOT NULL DEFAULT '0',
`site_dead` smallint NOT NULL DEFAULT '0',
`site_type` smallint NOT NULL DEFAULT '0',
`site_project` char(255) NOT NULL DEFAULT '',
PRIMARY KEY (`site_url`),
KEY `site_flags` (`site_flags`),
KEY `site_update` (`site_update`),
@ -1143,7 +1146,8 @@ CREATE TABLE IF NOT EXISTS `site` (
KEY `site_realm` (`site_realm`),
KEY `site_valid` (`site_valid`),
KEY `site_dead` (`site_dead`),
KEY `site_type` (`site_type`)
KEY `site_type` (`site_type`),
KEY `site_project` (`site_project`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `source` (

View file

@ -728,6 +728,7 @@ create index "likes_target_id" on likes ("target_id");
CREATE TABLE "mail" (
"id" serial NOT NULL,
"convid" bigint NOT NULL DEFAULT '0',
"conv_guid" text NOT NULL,
"mail_flags" bigint NOT NULL DEFAULT '0',
"from_xchan" text NOT NULL DEFAULT '',
"to_xchan" text NOT NULL DEFAULT '',
@ -750,6 +751,7 @@ CREATE TABLE "mail" (
PRIMARY KEY ("id")
);
create index "mail_convid" on mail ("convid");
create index "mail_conv_guid" on mail ("conv_guid");
create index "mail_created" on mail ("created");
create index "mail_flags" on mail ("mail_flags");
create index "mail_account_id" on mail ("account_id");
@ -1123,6 +1125,7 @@ CREATE TABLE "site" (
"site_valid" smallint NOT NULL DEFAULT '0',
"site_dead" smallint NOT NULL DEFAULT '0',
"site_type" smallint NOT NULL DEFAULT '0',
"site_project" text NOT NULL DEFAULT '',
PRIMARY KEY ("site_url")
);
create index "site_flags" on site ("site_flags");
@ -1135,6 +1138,7 @@ create index "site_realm" on site ("site_realm");
create index "site_valid" on site ("site_valid");
create index "site_dead" on site ("site_dead");
create index "site_type" on site ("site_type");
create index "site_project" on site ("site_project");
CREATE TABLE "source" (
"src_id" serial NOT NULL,

View file

@ -1,6 +1,6 @@
<?php
define( 'UPDATE_VERSION' , 1156 );
define( 'UPDATE_VERSION' , 1158 );
/**
*
@ -1885,3 +1885,35 @@ function update_r1155() {
return UPDATE_FAILED;
}
function update_r1156() {
$r1 = q("ALTER TABLE mail ADD conv_guid CHAR( 255 ) NOT NULL DEFAULT '' ");
$r2 = q("create index conv_guid on mail ( conv_guid ) ");
$r3 = q("select mail.id, mail.convid, conv.guid from mail left join conv on mail.convid = conv.id where true");
if($r3) {
foreach($r3 as $rr) {
if($rr['convid']) {
q("update mail set conv_guid = '%s' where id = %d",
dbesc($rr['guid']),
intval($rr['id'])
);
}
}
}
if($r1 && $r2)
return UPDATE_SUCCESS;
return UPDATE_FAILED;
}
function update_r1157() {
$r1 = q("alter table site add site_project char(255) not null default '' ");
$r2 = q("create index site_project on site ( site_project ) ");
if($r1 && $r2)
return UPDATE_SUCCESS;
return UPDATE_FAILED;
}

View file

@ -173,7 +173,7 @@ function channel_content(&$a, $update = 0, $load = false) {
$r = q("SELECT distinct parent AS `item_id`, created from item
left join abook on ( item.owner_xchan = abook.abook_xchan $abook_uids )
WHERE uid = %d $item_normal
AND item_wall = 1 AND item_unseen = 1
AND item_wall = 1 $simple_update
AND (abook.abook_blocked = 0 or abook.abook_flags is null)
$sql_extra
ORDER BY created DESC",

View file

@ -59,6 +59,9 @@ function chat_post(&$a) {
$arr = $acl->get();
$arr['name'] = $room;
$arr['expire'] = intval($_POST['chat_expire']);
if(intval($arr['expire']) < 0)
$arr['expire'] = 0;
chatroom_create($channel,$arr);
@ -204,6 +207,7 @@ function chat_content(&$a) {
$o = replace_macros(get_markup_template('chatroom_new.tpl'),array(
'$header' => t('New Chatroom'),
'$name' => array('room_name',t('Chatroom Name'),'', ''),
'$chat_expire' => array('chat_expire',t('Expiration of chats (minutes)'),120,''),
'$permissions' => t('Permissions'),
'$acl' => populate_acl($channel_acl,false),
'$submit' => t('Submit')

View file

@ -190,7 +190,7 @@ function connedit_post(&$a) {
}
}
$abook_pending = $new_friend ? 0 : $orig_record[0]['abook_pending'];
$abook_pending = (($new_friend) ? 0 : $orig_record[0]['abook_pending']);
$r = q("UPDATE abook SET abook_profile = '%s', abook_my_perms = %d , abook_closeness = %d, abook_pending = %d,
abook_incl = '%s', abook_excl = '%s'
@ -214,7 +214,6 @@ function connedit_post(&$a) {
}
if($r)
info( t('Connection updated.') . EOL);
else
@ -222,7 +221,7 @@ function connedit_post(&$a) {
if($a->poi && $a->poi['abook_my_perms'] != $abook_my_perms
&& (! intval($a->poi['abook_self']))) {
proc_run('php', 'include/notifier.php', 'permission_update', $contact_id);
proc_run('php', 'include/notifier.php', (($new_friend) ? 'permission_create' : 'permission_update'), $contact_id);
}
if($new_friend) {

View file

@ -436,9 +436,9 @@ function list_public_sites() {
$register = 'closed';
if(strpos($rr['site_url'],'https://') !== false)
$ret['sites'][] = array('url' => $rr['site_url'], 'access' => $access, 'register' => $register, 'sellpage' => $rr['site_sellpage'], 'location' => $rr['site_location']);
$ret['sites'][] = array('url' => $rr['site_url'], 'access' => $access, 'register' => $register, 'sellpage' => $rr['site_sellpage'], 'location' => $rr['site_location'], 'project' => $rr['site_project']);
else
$insecure[] = array('url' => $rr['site_url'], 'access' => $access, 'register' => $register, 'sellpage' => $rr['site_sellpage'], 'location' => $rr['site_location']);
$insecure[] = array('url' => $rr['site_url'], 'access' => $access, 'register' => $register, 'sellpage' => $rr['site_sellpage'], 'location' => $rr['site_location'], 'project' => $rr['site_project']);
}
if($insecure) {
$ret['sites'] = array_merge($ret['sites'],$insecure);

View file

@ -129,7 +129,7 @@ function editpost_content(&$a) {
'$consensus' => intval($itm[0]['item_consensus']),
'$wait' => t('Please wait'),
'$permset' => t('Permission settings'),
'$ptyp' => $itm[0]['type'],
'$ptyp' => $itm[0]['obj_type'],
'$content' => undo_post_tagging($itm[0]['body']),
'$post_id' => $post_id,
'$parent' => (($itm[0]['parent'] != $itm[0]['id']) ? $itm[0]['parent'] : ''),

View file

@ -59,12 +59,14 @@ function home_content(&$a, $update = 0, $load = false) {
return $o;
}
}
if(strpos($frontpage,'http') !== 0)
$frontpage = z_root() . '/' . $frontpage;
if(intval(get_config('system','mirror_frontpage'))) {
$o = '<html><head><title>' . t('$Projectname') . '</title></head><body style="margin: 0; padding: 0; border: none;" ><iframe src="' . z_root() . '/' . $frontpage . '" width="100%" height="100%" style="margin: 0; padding: 0; border: none;" ></iframe></body></html>';
$o = '<html><head><title>' . t('$Projectname') . '</title></head><body style="margin: 0; padding: 0; border: none;" ><iframe src="' . $frontpage . '" width="100%" height="100%" style="margin: 0; padding: 0; border: none;" ></iframe></body></html>';
echo $o;
killme();
}
goaway(z_root() . '/' . $frontpage);
goaway($frontpage);
}

View file

@ -441,6 +441,12 @@ function import_post(&$a) {
if(is_array($data['chatroom']))
import_chatrooms($channel,$data['chatroom']);
if(is_array($data['conv']))
import_conv($channel,$data['conv']);
if(is_array($data['mail']))
import_mail($channel,$data['mail']);
if(is_array($data['event']))
import_events($channel,$data['event']);

View file

@ -96,7 +96,7 @@ function item_post(&$a) {
$owner_hash = null;
$message_id = ((x($_REQUEST,'message_id') && $api_source) ? strip_tags($_REQUEST['message_id']) : '');
$created = ((x($_REQUEST,'created')) ? datetime_convert('UTC','UTC',$_REQUEST['created']) : datetime_convert());
$created = ((x($_REQUEST,'created')) ? datetime_convert(date_default_timezone_get(),'UTC',$_REQUEST['created']) : datetime_convert());
$post_id = ((x($_REQUEST,'post_id')) ? intval($_REQUEST['post_id']) : 0);
$app = ((x($_REQUEST,'source')) ? strip_tags($_REQUEST['source']) : '');
$return_path = ((x($_REQUEST,'return')) ? $_REQUEST['return'] : '');
@ -107,7 +107,6 @@ function item_post(&$a) {
$layout_mid = ((x($_REQUEST,'layout_mid')) ? escape_tags($_REQUEST['layout_mid']): '');
$plink = ((x($_REQUEST,'permalink')) ? escape_tags($_REQUEST['permalink']) : '');
$obj_type = ((x($_REQUEST,'obj_type')) ? escape_tags($_REQUEST['obj_type']) : ACTIVITY_OBJ_NOTE);
// allow API to bulk load a bunch of imported items with sending out a bunch of posts.
$nopush = ((x($_REQUEST,'nopush')) ? intval($_REQUEST['nopush']) : 0);

View file

@ -97,7 +97,11 @@ function mail_post(&$a) {
$ret = send_message(0, $recipient, $body, $subject, $replyto, $expires);
if(! $ret['success']) {
if($ret['success']) {
xchan_mail_query($ret['mail']);
build_sync_packet(0,array('conv' => array($ret['conv']),'mail' => array(encode_mail($ret['mail'],true))));
}
else {
notice($ret['message']);
}
@ -149,6 +153,14 @@ function mail_content(&$a) {
intval(argv(3)),
intval(local_channel())
);
$x = q("select * from mail where id = %d and channel_id = %d",
intval(argv(3)),
intval(local_channel())
);
if($x) {
build_sync_packet(local_channel(),array('mail' => encode_mail($x[0],true)));
}
proc_run('php','include/notifier.php','mail',intval(argv(3)));
if($r) {
@ -185,68 +197,48 @@ function mail_content(&$a) {
$a->page['htmlhead'] .= $header;
$preselect = (isset($a->argv[2])?array($a->argv[2]):false);
$prename = $preurl = $preid = '';
$prename = '';
$preid = '';
if(x($_REQUEST,'hash')) {
$r = q("select abook.*, xchan.* from abook left join xchan on abook_xchan = xchan_hash
where abook_channel = %d and abook_xchan = '%s' limit 1",
intval(local_channel()),
dbesc($_REQUEST['hash'])
);
if($r) {
$prename = $r[0]['xchan_name'];
$preurl = $r[0]['xchan_url'];
$preid = $r[0]['abook_id'];
$preselect = array($preid);
if(!$r) {
$r = q("select * from xchan where xchan_hash = '%s' and xchan_network = 'zot' limit 1",
dbesc($_REQUEST['hash'])
);
}
}
if($preselect) {
$r = q("select abook.*, xchan.* from abook left join xchan on abook_xchan = xchan_hash
where abook_channel = %d and abook_id = %d limit 1",
intval(local_channel()),
intval(argv(2))
);
if($r) {
$prename = $r[0]['xchan_name'];
$prename = (($r[0]['abook_id']) ? $r[0]['xchan_name'] : $r[0]['xchan_addr']);
$preurl = $r[0]['xchan_url'];
$preid = $r[0]['abook_id'];
$preid = (($r[0]['abook_id']) ? ($r[0]['xchan_hash']) : '');
}
else {
notice( t('Requested channel is not in this network') . EOL );
}
}
$prefill = (($preselect) ? $prename : '');
if(! $prefill) {
if(array_key_exists('to',$_REQUEST))
$prefill = $_REQUEST['to'];
}
// the ugly select box
$select = contact_select('messageto','message-to-select', $preselect, 4, true, false, false, 10);
$tpl = get_markup_template('prv_message.tpl');
$o .= replace_macros($tpl,array(
'$new' => true,
'$header' => t('Send Private Message'),
'$to' => t('To:'),
'$showinputs' => 'true',
'$prefill' => $prefill,
'$autocomp' => $autocomp,
'$prefill' => $prename,
'$preid' => $preid,
'$subject' => t('Subject:'),
'$subjtxt' => ((x($_REQUEST,'subject')) ? strip_tags($_REQUEST['subject']) : ''),
'$text' => ((x($_REQUEST,'body')) ? htmlspecialchars($_REQUEST['body'], ENT_COMPAT, 'UTF-8') : ''),
'$readonly' => '',
'$yourmessage' => t('Your message:'),
'$select' => $select,
'$parent' => '',
'$upload' => t('Upload photo'),
'$attach' => t('Attach file'),
'$insert' => t('Insert web link'),
'$wait' => t('Please wait'),
'$submit' => t('Send'),
'$defexpire' => '',
'$feature_expire' => ((feature_enabled(local_channel(),'content_expire')) ? true : false),
@ -254,8 +246,6 @@ function mail_content(&$a) {
'$feature_encrypt' => ((feature_enabled(local_channel(),'content_encrypt')) ? true : false),
'$encrypt' => t('Encrypt text'),
'$cipher' => $cipher,
));
return $o;
@ -285,7 +275,14 @@ function mail_content(&$a) {
// if( local_channel() && feature_enabled(local_channel(),'richtext') )
// $plaintext = false;
$messages = private_messages_fetch_conversation(local_channel(), $mid, true);
if($mailbox == 'combined') {
$messages = private_messages_fetch_conversation(local_channel(), $mid, true);
}
else {
$messages = private_messages_fetch_message(local_channel(), $mid, true);
}
if(! $messages) {
//info( t('Message not found.') . EOL);
@ -347,10 +344,6 @@ function mail_content(&$a) {
$recp = (($message['from_xchan'] === $channel['channel_hash']) ? 'to' : 'from');
// FIXME - move this HTML to template
$select = $message[$recp]['xchan_name'] . '<input type="hidden" name="messageto" value="' . $message[$recp]['xchan_hash'] . '" />';
$parent = '<input type="hidden" name="replyto" value="' . $message['parent_mid'] . '" />';
$tpl = get_markup_template('mail_display.tpl');
$o = replace_macros($tpl, array(
'$mailbox' => $mailbox,
@ -366,19 +359,16 @@ function mail_content(&$a) {
// reply
'$header' => t('Send Reply'),
'$to' => t('To:'),
'$showinputs' => '',
'$reply' => true,
'$subject' => t('Subject:'),
'$subjtxt' => $message['title'],
'$readonly' => 'readonly="readonly"',
'$yourmessage' => t('Your message:'),
'$yourmessage' => sprintf(t('Your message for %s (%s):'), $message[$recp]['xchan_name'], $message[$recp]['xchan_addr']),
'$text' => '',
'$select' => $select,
'$parent' => $parent,
'$upload' => t('Upload photo'),
'$parent' => $message['parent_mid'],
'$recphash' => $message[$recp]['xchan_hash'],
'$attach' => t('Attach file'),
'$insert' => t('Insert web link'),
'$submit' => t('Submit'),
'$wait' => t('Please wait'),
'$defexpire' => '',
'$feature_expire' => ((feature_enabled(local_channel(),'content_expire')) ? true : false),
'$expires' => t('Set expiration date'),

View file

@ -149,8 +149,9 @@ function photos_post(&$a) {
if($r) {
foreach($r as $i) {
attach_delete($page_owner_uid, $i['resource_id'], 1 );
drop_item($i['id'],false,DROPITEM_PHASE1,true /* force removal of linked items */);
proc_run('php','include/notifier.php','drop',$i['id']);
// This is now being done in attach_delete()
// drop_item($i['id'],false,DROPITEM_PHASE1,true /* force removal of linked items */);
// proc_run('php','include/notifier.php','drop',$i['id']);
}
}
@ -182,12 +183,14 @@ function photos_post(&$a) {
);
if($r) {
/*
q("DELETE FROM `photo` WHERE `uid` = %d AND `resource_id` = '%s'",
intval($page_owner_uid),
dbesc($r[0]['resource_id'])
);
*/
attach_delete($page_owner_uid, $r[0]['resource_id'], 1 );
/*
$i = q("SELECT * FROM `item` WHERE `resource_id` = '%s' AND resource_type = 'photo' and `uid` = %d LIMIT 1",
dbesc($r[0]['resource_id']),
intval($page_owner_uid)
@ -196,6 +199,7 @@ function photos_post(&$a) {
drop_item($i[0]['id'],true,DROPITEM_PHASE1);
$url = $a->get_baseurl();
}
*/
}
goaway($a->get_baseurl() . '/photos/' . $a->data['channel']['channel_address'] . '/album/' . $_SESSION['album_return']);
@ -229,7 +233,8 @@ function photos_post(&$a) {
intval($page_owner_uid)
);
if(count($r)) {
$ph = photo_factory(dbunescbin($r[0]['data']), $r[0]['type']);
$d = (($r[0]['os_storage']) ? @file_get_contents($r[0]['data']) : dbunescbin($r[0]['data']));
$ph = photo_factory($d, $r[0]['type']);
if($ph->is_valid()) {
$rotate_deg = ( (intval($_POST['rotate']) == 1) ? 270 : 90 );
$ph->rotate($rotate_deg);
@ -237,7 +242,37 @@ function photos_post(&$a) {
$width = $ph->getWidth();
$height = $ph->getHeight();
$x = q("update photo set data = '%s', height = %d, width = %d where `resource_id` = '%s' and uid = %d and scale = 0",
if(intval($r[0]['os_storage'])) {
@file_put_contents($r[0]['data'],$ph->imageString());
$data = $r[0]['data'];
$fsize = @filesize($r[0]['data']);
q("update attach set filesize = %d where hash = '%s' and uid = %d limit 1",
intval($fsize),
dbesc($resource_id),
intval($page_owner_uid)
);
}
else {
$data = $ph->imageString();
$fsize = strlen($data);
}
$x = q("update photo set data = '%s', `size` = %d, height = %d, width = %d where `resource_id` = '%s' and uid = %d and scale = 0",
dbescbin($data),
intval($fsize),
intval($height),
intval($width),
dbesc($resource_id),
intval($page_owner_uid)
);
if($width > 1024 || $height > 1024)
$ph->scaleImage(1024);
$width = $ph->getWidth();
$height = $ph->getHeight();
$x = q("update photo set data = '%s', height = %d, width = %d where `resource_id` = '%s' and uid = %d and scale = 1",
dbescbin($ph->imageString()),
intval($height),
intval($width),
@ -245,38 +280,40 @@ function photos_post(&$a) {
intval($page_owner_uid)
);
if($width > 640 || $height > 640) {
if($width > 640 || $height > 640)
$ph->scaleImage(640);
$width = $ph->getWidth();
$height = $ph->getHeight();
$x = q("update photo set data = '%s', height = %d, width = %d where `resource_id` = '%s' and uid = %d and scale = 1",
dbescbin($ph->imageString()),
intval($height),
intval($width),
dbesc($resource_id),
intval($page_owner_uid)
);
}
$width = $ph->getWidth();
$height = $ph->getHeight();
if($width > 320 || $height > 320) {
$x = q("update photo set data = '%s', height = %d, width = %d where `resource_id` = '%s' and uid = %d and scale = 2",
dbescbin($ph->imageString()),
intval($height),
intval($width),
dbesc($resource_id),
intval($page_owner_uid)
);
if($width > 320 || $height > 320)
$ph->scaleImage(320);
$width = $ph->getWidth();
$height = $ph->getHeight();
$x = q("update photo set data = '%s', height = %d, width = %d where `resource_id` = '%s' and uid = %d and scale = 2",
dbescbin($ph->imageString()),
intval($height),
intval($width),
dbesc($resource_id),
intval($page_owner_uid)
);
}
$width = $ph->getWidth();
$height = $ph->getHeight();
$x = q("update photo set data = '%s', height = %d, width = %d where `resource_id` = '%s' and uid = %d and scale = 3",
dbescbin($ph->imageString()),
intval($height),
intval($width),
dbesc($resource_id),
intval($page_owner_uid)
);
}
}
}
$p = q("SELECT * FROM `photo` WHERE `resource_id` = '%s' AND `uid` = %d ORDER BY `scale` DESC",
$p = q("SELECT type, is_nsfw, description, resource_id, scale, allow_cid, allow_gid, deny_cid, deny_gid FROM photo WHERE resource_id = '%s' AND uid = %d ORDER BY scale DESC",
dbesc($resource_id),
intval($page_owner_uid)
);
@ -586,7 +623,9 @@ function photos_content(&$a) {
'$nickname' => $a->data['channel']['channel_address'],
'$newalbum_label' => t('Enter an album name'),
'$newalbum_placeholder' => t('or select an existing album (doubleclick)'),
'$visible' => array('visible', t('Create a status post for this upload'), 0, '', array(t('No'), t('Yes'))),
'$visible' => array('visible', t('Create a status post for this upload'), 0,'', array(t('No'), t('Yes')), 'onclick="showHideBodyTextarea();"'),
'$caption' => array('description', t('Caption (optional):')),
'$body' => array('body', t('Description (optional):'),'', 'Description will only appear in the status post'),
'$albums' => $albums['albums'],
'$selname' => $selname,
'$permissions' => t('Permissions'),
@ -982,13 +1021,13 @@ function photos_content(&$a) {
$likebuttons = '';
if($can_post || $can_comment) {
$likebuttons = replace_macros($like_tpl,array(
'$id' => $link_item['id'],
'$likethis' => t("I like this \x28toggle\x29"),
'$nolike' => t("I don't like this \x28toggle\x29"),
'$share' => t('Share'),
'$wait' => t('Please wait')
));
$likebuttons = array(
'id' => $link_item['id'],
'likethis' => t("I like this \x28toggle\x29"),
'nolike' => t("I don't like this \x28toggle\x29"),
'share' => t('Share'),
'wait' => t('Please wait')
);
}
$comments = '';

View file

@ -23,12 +23,12 @@ function pubsites_content(&$a) {
$j = json_decode($ret['body'],true);
if($j) {
$rate_meta = ((local_channel()) ? '<td>' . t('Rate this hub') . '</td>' : '');
$o .= '<table border="1"><tr><td>' . t('Site URL') . '</td><td>' . t('Access Type') . '</td><td>' . t('Registration Policy') . '</td><td>' . t('Location') . '</td><td>' . t('View hub ratings') . '</td>' . $rate_meta . '</tr>';
$o .= '<table border="1"><tr><td>' . t('Site URL') . '</td><td>' . t('Access Type') . '</td><td>' . t('Registration Policy') . '</td><td>' . t('Location') . '</td><td>' . t('Project') . '</td><td>' . t('View hub ratings') . '</td>' . $rate_meta . '</tr>';
if($j['sites']) {
foreach($j['sites'] as $jj) {
$host = strtolower(substr($jj['url'],strpos($jj['url'],'://')+3));
$rate_links = ((local_channel()) ? '<td><a href="rate?f=&target=' . $host . '" class="btn-btn-default"><i class="icon-check"></i> ' . t('Rate') . '</a></td>' : '');
$o .= '<tr><td>' . '<a href="'. (($jj['sellpage']) ? $jj['sellpage'] : $jj['url'] . '/register' ) . '" >' . $jj['url'] . '</a>' . '</td><td>' . $jj['access'] . '</td><td>' . $jj['register'] . '</td><td>' . $jj['location'] . '</td><td><a href="ratings/' . $host . '" class="btn-btn-default"><i class="icon-eye-open"></i> ' . t('View ratings') . '</a></td>' . $rate_links . '</tr>';
$o .= '<tr><td>' . '<a href="'. (($jj['sellpage']) ? $jj['sellpage'] : $jj['url'] . '/register' ) . '" >' . $jj['url'] . '</a>' . '</td><td>' . $jj['access'] . '</td><td>' . $jj['register'] . '</td><td>' . $jj['location'] . '</td><td>' . $jj['project'] . '</td><td><a href="ratings/' . $host . '" class="btn-btn-default"><i class="icon-eye-open"></i> ' . t('View ratings') . '</a></td>' . $rate_links . '</tr>';
}
}

View file

@ -35,6 +35,8 @@ function search_content(&$a,$update = 0, $load = false) {
$o = '<div id="live-search"></div>' . "\r\n";
$o = '<div class="generic-content-wrapper-styled">' . "\r\n";
$o .= '<h3>' . t('Search') . '</h3>';
if(x($a->data,'search'))
@ -212,6 +214,8 @@ function search_content(&$a,$update = 0, $load = false) {
$o .= conversation($a,$items,'search',$update,'client');
$o .= '</div>';
return $o;
}

View file

@ -292,7 +292,7 @@ function setup_content(&$a) {
case 2: { // Database config
$dbhost = ((x($_POST,'dbhost')) ? notags(trim($_POST['dbhost'])) : 'localhost');
$dbhost = ((x($_POST,'dbhost')) ? notags(trim($_POST['dbhost'])) : '127.0.0.1');
$dbuser = notags(trim($_POST['dbuser']));
$dbport = intval(notags(trim($_POST['dbport'])));
$dbpass = notags(trim($_POST['dbpass']));
@ -312,7 +312,7 @@ function setup_content(&$a) {
'$status' => $wizard_status,
'$dbhost' => array('dbhost', t('Database Server Name'), $dbhost, t('Default is localhost')),
'$dbhost' => array('dbhost', t('Database Server Name'), $dbhost, t('Default is 127.0.0.1')),
'$dbport' => array('dbport', t('Database Port'), $dbport, t('Communication port number - use 0 for default')),
'$dbuser' => array('dbuser', t('Database Login Name'), $dbuser, ''),
'$dbpass' => array('dbpass', t('Database Login Password'), $dbpass, ''),
@ -334,7 +334,7 @@ function setup_content(&$a) {
}; break;
case 3: { // Site settings
require_once('include/datetime.php');
$dbhost = ((x($_POST,'dbhost')) ? notags(trim($_POST['dbhost'])) : 'localhost');
$dbhost = ((x($_POST,'dbhost')) ? notags(trim($_POST['dbhost'])) : '127.0.0.1');
$dbport = intval(notags(trim($_POST['dbuser'])));
$dbuser = notags(trim($_POST['dbuser']));
$dbpass = notags(trim($_POST['dbpass']));

View file

@ -165,7 +165,7 @@ function siteinfo_content(&$a) {
'$loadavg_all' => $loadavg[0] . ', ' . $loadavg[1] . ', ' . $loadavg[2],
'$commit' => $commit,
'$web_location' => t('Running at web location') . ' ' . z_root(),
'$visit' => t('Please visit <a href="https://redmatrix.me">redmatrix.me</a> to learn more about $Projectname.'),
'$visit' => t('Please visit <a href="http://hubzilla.org">hubzilla.org</a> to learn more about $Projectname.'),
'$bug_text' => t('Bug reports and issues: please visit'),
'$bug_link_url' => 'https://github.com/redmatrix/hubzilla/issues',
'$bug_link_text' => t('$projectname issues'),

View file

@ -9,5 +9,4 @@ function zfinger_init(&$a) {
$x = zotinfo($_REQUEST);
json_return_and_die($x);
}

File diff suppressed because it is too large Load diff

View file

@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: 2015-09-25.1166\n"
"Project-Id-Version: 2015-10-17.1188\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-25 00:05-0700\n"
"POT-Creation-Date: 2015-10-17 16:47-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -416,7 +416,7 @@ msgstr ""
msgid "Edited"
msgstr ""
#: ../../include/api.php:1234
#: ../../include/api.php:1267
msgid "Public Timeline"
msgstr ""
@ -828,7 +828,8 @@ msgstr ""
msgid "April"
msgstr ""
#: ../../include/text.php:1201
#: ../../include/text.php:1201 ../../mod/uexport.php:58
#: ../../mod/uexport.php:59
msgid "May"
msgstr ""
@ -1374,7 +1375,7 @@ msgstr ""
#: ../../include/widgets.php:136 ../../include/widgets.php:175
#: ../../include/Contact.php:107 ../../include/conversation.php:956
#: ../../include/identity.php:933 ../../mod/directory.php:316
#: ../../include/identity.php:956 ../../mod/directory.php:316
#: ../../mod/match.php:64 ../../mod/suggest.php:52
msgid "Connect"
msgstr ""
@ -1551,7 +1552,7 @@ msgid "Finishes:"
msgstr ""
#: ../../include/event.php:50 ../../include/bb2diaspora.php:481
#: ../../include/identity.php:984 ../../mod/directory.php:302
#: ../../include/identity.php:1007 ../../mod/directory.php:302
#: ../../mod/events.php:684
msgid "Location:"
msgstr ""
@ -1855,7 +1856,7 @@ msgid "View all"
msgstr ""
#: ../../include/ItemObject.php:179 ../../include/taxonomy.php:396
#: ../../include/conversation.php:1712 ../../include/identity.php:1243
#: ../../include/conversation.php:1712 ../../include/identity.php:1266
#: ../../mod/photos.php:1019
msgctxt "noun"
msgid "Like"
@ -2107,7 +2108,7 @@ msgstr ""
msgid "Manage/Edit profiles"
msgstr ""
#: ../../include/nav.php:95 ../../include/identity.php:956
#: ../../include/nav.php:95 ../../include/identity.php:979
msgid "Edit Profile"
msgstr ""
@ -3037,14 +3038,14 @@ msgstr ""
msgid "Visible to specific connections."
msgstr ""
#: ../../include/items.php:4286 ../../mod/thing.php:74
#: ../../include/items.php:4310 ../../mod/thing.php:74
#: ../../mod/filestorage.php:27 ../../mod/viewsrc.php:20
#: ../../mod/admin.php:167 ../../mod/admin.php:1025 ../../mod/admin.php:1225
#: ../../mod/display.php:36
msgid "Item not found."
msgstr ""
#: ../../include/items.php:4359 ../../include/attach.php:137
#: ../../include/items.php:4383 ../../include/attach.php:137
#: ../../include/attach.php:184 ../../include/attach.php:247
#: ../../include/attach.php:261 ../../include/attach.php:305
#: ../../include/attach.php:319 ../../include/attach.php:350
@ -3087,38 +3088,38 @@ msgstr ""
msgid "Permission denied."
msgstr ""
#: ../../include/items.php:4763 ../../mod/group.php:38 ../../mod/group.php:140
#: ../../include/items.php:4787 ../../mod/group.php:38 ../../mod/group.php:140
#: ../../mod/bulksetclose.php:51
msgid "Collection not found."
msgstr ""
#: ../../include/items.php:4779
#: ../../include/items.php:4803
msgid "Collection is empty."
msgstr ""
#: ../../include/items.php:4786
#: ../../include/items.php:4810
#, php-format
msgid "Collection: %s"
msgstr ""
#: ../../include/items.php:4796 ../../mod/connedit.php:674
#: ../../include/items.php:4820 ../../mod/connedit.php:674
#, php-format
msgid "Connection: %s"
msgstr ""
#: ../../include/items.php:4798
#: ../../include/items.php:4822
msgid "Connection not found."
msgstr ""
#: ../../include/zot.php:678
#: ../../include/zot.php:684
msgid "Invalid data packet"
msgstr ""
#: ../../include/zot.php:694
#: ../../include/zot.php:700
msgid "Unable to verify channel signature"
msgstr ""
#: ../../include/zot.php:2184
#: ../../include/zot.php:2208
#, php-format
msgid "Unable to verify site signature for %s"
msgstr ""
@ -3316,11 +3317,11 @@ msgstr ""
msgid "Default Profile"
msgstr ""
#: ../../include/identity.php:736
#: ../../include/identity.php:759
msgid "Requested channel is not available."
msgstr ""
#: ../../include/identity.php:783 ../../mod/profile.php:16
#: ../../include/identity.php:806 ../../mod/profile.php:16
#: ../../mod/achievements.php:11 ../../mod/webpages.php:29
#: ../../mod/connect.php:13 ../../mod/hcard.php:8 ../../mod/blocks.php:29
#: ../../mod/editlayout.php:27 ../../mod/editwebpage.php:28
@ -3329,193 +3330,193 @@ msgstr ""
msgid "Requested profile is not available."
msgstr ""
#: ../../include/identity.php:946 ../../mod/profiles.php:774
#: ../../include/identity.php:969 ../../mod/profiles.php:774
msgid "Change profile photo"
msgstr ""
#: ../../include/identity.php:952
#: ../../include/identity.php:975
msgid "Profiles"
msgstr ""
#: ../../include/identity.php:952
#: ../../include/identity.php:975
msgid "Manage/edit profiles"
msgstr ""
#: ../../include/identity.php:953 ../../mod/profiles.php:775
#: ../../include/identity.php:976 ../../mod/profiles.php:775
msgid "Create New Profile"
msgstr ""
#: ../../include/identity.php:968 ../../mod/profiles.php:786
#: ../../include/identity.php:991 ../../mod/profiles.php:786
msgid "Profile Image"
msgstr ""
#: ../../include/identity.php:971
#: ../../include/identity.php:994
msgid "visible to everybody"
msgstr ""
#: ../../include/identity.php:972 ../../mod/profiles.php:669
#: ../../include/identity.php:995 ../../mod/profiles.php:669
#: ../../mod/profiles.php:790
msgid "Edit visibility"
msgstr ""
#: ../../include/identity.php:988 ../../include/identity.php:1227
#: ../../include/identity.php:1011 ../../include/identity.php:1250
msgid "Gender:"
msgstr ""
#: ../../include/identity.php:989 ../../include/identity.php:1271
#: ../../include/identity.php:1012 ../../include/identity.php:1294
msgid "Status:"
msgstr ""
#: ../../include/identity.php:990 ../../include/identity.php:1282
#: ../../include/identity.php:1013 ../../include/identity.php:1305
msgid "Homepage:"
msgstr ""
#: ../../include/identity.php:991
#: ../../include/identity.php:1014
msgid "Online Now"
msgstr ""
#: ../../include/identity.php:1074 ../../include/identity.php:1152
#: ../../include/identity.php:1097 ../../include/identity.php:1175
#: ../../mod/ping.php:324
msgid "g A l F d"
msgstr ""
#: ../../include/identity.php:1075 ../../include/identity.php:1153
#: ../../include/identity.php:1098 ../../include/identity.php:1176
msgid "F d"
msgstr ""
#: ../../include/identity.php:1120 ../../include/identity.php:1192
#: ../../include/identity.php:1143 ../../include/identity.php:1215
#: ../../mod/ping.php:346
msgid "[today]"
msgstr ""
#: ../../include/identity.php:1131
#: ../../include/identity.php:1154
msgid "Birthday Reminders"
msgstr ""
#: ../../include/identity.php:1132
#: ../../include/identity.php:1155
msgid "Birthdays this week:"
msgstr ""
#: ../../include/identity.php:1185
#: ../../include/identity.php:1208
msgid "[No description]"
msgstr ""
#: ../../include/identity.php:1203
#: ../../include/identity.php:1226
msgid "Event Reminders"
msgstr ""
#: ../../include/identity.php:1204
#: ../../include/identity.php:1227
msgid "Events this week:"
msgstr ""
#: ../../include/identity.php:1217 ../../include/identity.php:1334
#: ../../include/identity.php:1240 ../../include/identity.php:1357
#: ../../include/apps.php:138 ../../mod/profperm.php:112
msgid "Profile"
msgstr ""
#: ../../include/identity.php:1225 ../../mod/settings.php:1056
#: ../../include/identity.php:1248 ../../mod/settings.php:1056
msgid "Full Name:"
msgstr ""
#: ../../include/identity.php:1232
#: ../../include/identity.php:1255
msgid "Like this channel"
msgstr ""
#: ../../include/identity.php:1256
#: ../../include/identity.php:1279
msgid "j F, Y"
msgstr ""
#: ../../include/identity.php:1257
#: ../../include/identity.php:1280
msgid "j F"
msgstr ""
#: ../../include/identity.php:1264
#: ../../include/identity.php:1287
msgid "Birthday:"
msgstr ""
#: ../../include/identity.php:1268 ../../mod/directory.php:297
#: ../../include/identity.php:1291 ../../mod/directory.php:297
msgid "Age:"
msgstr ""
#: ../../include/identity.php:1277
#: ../../include/identity.php:1300
#, php-format
msgid "for %1$d %2$s"
msgstr ""
#: ../../include/identity.php:1280 ../../mod/profiles.php:691
#: ../../include/identity.php:1303 ../../mod/profiles.php:691
msgid "Sexual Preference:"
msgstr ""
#: ../../include/identity.php:1284 ../../mod/directory.php:313
#: ../../include/identity.php:1307 ../../mod/directory.php:313
#: ../../mod/profiles.php:693
msgid "Hometown:"
msgstr ""
#: ../../include/identity.php:1286
#: ../../include/identity.php:1309
msgid "Tags:"
msgstr ""
#: ../../include/identity.php:1288 ../../mod/profiles.php:694
#: ../../include/identity.php:1311 ../../mod/profiles.php:694
msgid "Political Views:"
msgstr ""
#: ../../include/identity.php:1290
#: ../../include/identity.php:1313
msgid "Religion:"
msgstr ""
#: ../../include/identity.php:1292 ../../mod/directory.php:315
#: ../../include/identity.php:1315 ../../mod/directory.php:315
msgid "About:"
msgstr ""
#: ../../include/identity.php:1294
#: ../../include/identity.php:1317
msgid "Hobbies/Interests:"
msgstr ""
#: ../../include/identity.php:1296 ../../mod/profiles.php:697
#: ../../include/identity.php:1319 ../../mod/profiles.php:697
msgid "Likes:"
msgstr ""
#: ../../include/identity.php:1298 ../../mod/profiles.php:698
#: ../../include/identity.php:1321 ../../mod/profiles.php:698
msgid "Dislikes:"
msgstr ""
#: ../../include/identity.php:1300
#: ../../include/identity.php:1323
msgid "Contact information and Social Networks:"
msgstr ""
#: ../../include/identity.php:1302
#: ../../include/identity.php:1325
msgid "My other channels:"
msgstr ""
#: ../../include/identity.php:1304
#: ../../include/identity.php:1327
msgid "Musical interests:"
msgstr ""
#: ../../include/identity.php:1306
#: ../../include/identity.php:1329
msgid "Books, literature:"
msgstr ""
#: ../../include/identity.php:1308
#: ../../include/identity.php:1331
msgid "Television:"
msgstr ""
#: ../../include/identity.php:1310
#: ../../include/identity.php:1333
msgid "Film/dance/culture/entertainment:"
msgstr ""
#: ../../include/identity.php:1312
#: ../../include/identity.php:1335
msgid "Love/Romance:"
msgstr ""
#: ../../include/identity.php:1314
#: ../../include/identity.php:1337
msgid "Work/employment:"
msgstr ""
#: ../../include/identity.php:1316
#: ../../include/identity.php:1339
msgid "School/education:"
msgstr ""
#: ../../include/identity.php:1336
#: ../../include/identity.php:1359
msgid "Like this thing"
msgstr ""
@ -4602,7 +4603,7 @@ msgstr ""
msgid "No installed plugins/addons/apps"
msgstr ""
#: ../../mod/siteinfo.php:155 ../../mod/home.php:58 ../../mod/home.php:64
#: ../../mod/siteinfo.php:155 ../../mod/home.php:58 ../../mod/home.php:66
msgid "$Projectname"
msgstr ""
@ -6521,30 +6522,6 @@ msgstr ""
msgid "%1$s tagged %2$s's %3$s with %4$s"
msgstr ""
#: ../../mod/uexport.php:45 ../../mod/uexport.php:46
msgid "Export Channel"
msgstr ""
#: ../../mod/uexport.php:47
msgid ""
"Export your basic channel information to a small file. This acts as a "
"backup of your connections, permissions, profile and basic data, which can "
"be used to import your data to a new hub, but\tdoes not contain your content."
msgstr ""
#: ../../mod/uexport.php:48
msgid "Export Content"
msgstr ""
#: ../../mod/uexport.php:49
msgid ""
"Export your channel information and all the content to a JSON backup. This "
"backs up all of your connections, permissions, profile data and all of your "
"content, but is generally not suitable for importing a channel to a new hub "
"as this file may be VERY large. Please be patient - it may take several "
"minutes for this download to begin."
msgstr ""
#: ../../mod/viewconnections.php:62
msgid "No connections."
msgstr ""
@ -8155,6 +8132,113 @@ msgstr ""
msgid "D, d M Y - g:i A"
msgstr ""
#: ../../mod/uexport.php:50 ../../mod/uexport.php:51
msgid "Export Channel"
msgstr ""
#: ../../mod/uexport.php:52
msgid ""
"Export your basic channel information to a file. This acts as a backup of "
"your connections, permissions, profile and basic data, which can be used to "
"import your data to a new server hub, but does not contain your content."
msgstr ""
#: ../../mod/uexport.php:53
msgid "Export Content"
msgstr ""
#: ../../mod/uexport.php:54
msgid ""
"Export your channel information and recent content to a JSON backup that can "
"be restored or imported to another server hub. This backs up all of your "
"connections, permissions, profile data and several months of posts. This "
"file may be VERY large. Please be patient - it may take several minutes for "
"this download to begin."
msgstr ""
#: ../../mod/uexport.php:55
msgid "Export your posts from a given year or month:"
msgstr ""
#: ../../mod/uexport.php:57
msgid ""
"You may also export your posts and conversations for a particular year or "
"month. Click on one of the recent years or months below."
msgstr ""
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Jan"
msgstr ""
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Feb"
msgstr ""
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Mar"
msgstr ""
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Apr"
msgstr ""
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Jun"
msgstr ""
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Jul"
msgstr ""
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Aug"
msgstr ""
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Sep"
msgstr ""
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Oct"
msgstr ""
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Nov"
msgstr ""
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Dec"
msgstr ""
#: ../../mod/uexport.php:60
msgid ""
"If the export fails (possibly due to memory exhaustion on your server hub), "
"please try again selecting a more limited date range."
msgstr ""
#: ../../mod/uexport.php:61
#, php-format
msgid ""
"Or adjust the date in your browser location bar to select other dates. For "
"example the year 2013; <a href=\"%1$s/2013\">%1$s/2013</a> or the month "
"September 2013; <a href=\"%1$s/2013/9\">%1$s/2013/9</a>"
msgstr ""
#: ../../mod/uexport.php:62
msgid "Please visit"
msgstr ""
#: ../../mod/uexport.php:62
msgid "on another hub to import the backup files(s)."
msgstr ""
#: ../../mod/uexport.php:63
msgid ""
"We advise you to clone the channel on the new hub first and than to import "
"the backup file(s) (from the same channel) in chronological order. Importing "
"the backup files into another channel will certainly give permission issues."
msgstr ""
#: ../../mod/mood.php:131
msgid "Set your current mood and tell your friends"
msgstr ""
@ -8672,7 +8756,7 @@ msgstr ""
msgid "Download PDL file"
msgstr ""
#: ../../mod/home.php:73
#: ../../mod/home.php:75
#, php-format
msgid "Welcome to %s"
msgstr ""

View file

@ -1 +1 @@
2015-10-01.1172
2015-10-25.1196

View file

@ -87,6 +87,10 @@ code {
font-size: unset;
}
.panel-group {
margin-bottom: 0px;
}
/* Bootstrap assumes that checkboxes are on the left of labels, while it's usually the opposite in Red */
.field.checkbox input[type="checkbox"] { margin-left: 0px; }
.field.checkbox label { padding-left: 0px; font-weight: 700}

View file

@ -83,15 +83,6 @@ code {
margin-right: 10px;
}
.wall-item-photo-wrapper {
margin-top: 0px;
margin-bottom: 20px;
}
.comment .wall-item-photo-wrapper {
margin-bottom: 15px;
}
.wall-item-wrapper {
margin-left:10px;
}
@ -153,27 +144,8 @@ a.wall-item-name-link {
word-wrap: break-word;
}
.body-tag, .filesavetags, .categorytags {
opacity: 0.5;
filter:alpha(opacity=50);
}
.body-tag:hover, .filesavetags:hover, .categorytags:hover {
opacity: 1.0 !important;
filter:alpha(opacity=100) !important;
}
.body-tag {
margin-top: 10px;
}
.categorytags {
margin-top: 10px;
}
.wall-item-tools {
width: 100%;
margin-top: 10px;
.body-tags {
margin-top: 5px;
}
.item-tool {

View file

@ -6,7 +6,7 @@
#chatTopBar {
float: left;
height: 400px;
width: 650px;
width: 400px;
overflow-y: auto;
}

View file

@ -1,4 +1,3 @@
.search-input {
padding: 4px 12px;
margin: 3px;
@ -111,8 +110,8 @@
.contact-entry-wrapper {
float: left;
width: 120px;
height: 150px;
width: auto;
height: auto;
padding: 10px;
margin: 8px 10px 0 0;
border-top: 1px solid #eee;
@ -137,9 +136,14 @@
margin-left: 0px;
margin-right: 10px;
margin-bottom: 10px;
width: 120px;
height: 36px;
width: 147px;
height: auto;
overflow: hidden;
white-space: nowrap;
}
.contact-entry-name-end {
clear:both;
}
.contact-entry-end {

View file

@ -29,3 +29,6 @@
margin-top: -2px;
}
.directory-collapse {
overflow: auto;
}

View file

@ -1,50 +1,26 @@
/* message/new */
#prvmail-to-label,
#prvmail-subject-label,
#prvmail-expires-label,
#prvmail-message-label {
margin-bottom: 10px;
margin-top: 20px;
}
#prvmail-submit {
float: left;
margin-top: 10px;
margin-right: 30px;
}
#prvmail-upload-wrapper,
#prvmail-attach-wrapper,
#prvmail-link-wrapper,
#prvmail-expire-wrapper,
#prvmail-encrypt-wrapper,
#prvmail-rotator-wrapper {
float: left;
margin-top: 10px;
cursor: pointer;
}
/* message/id */
.mail-conv-outside-wrapper {
display: table;
table-layout: fixed;
}
.mail-conv-sender {
display: table-cell;
vertical-align: top;
float: left;
margin-right: 10px;
margin-bottom: 10px;
}
.mail-conv-sender img{
width: 32px;
height: 32px;
}
.mail-conv-sender-name {
font-weight: bold;
}
.mail-conv-detail {
display: table-cell;
vertical-align: top;
width: 100%;
padding-left: 10px;
.mail-conv-body {
margin-bottom: 10px;
}
.mail-conv-body img {
max-width: 100%;
}
#prvmail-rotator {
margin: 15px;
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -13,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Redmatrix\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-18 00:04-0700\n"
"PO-Revision-Date: 2015-09-22 14:10+0000\n"
"POT-Creation-Date: 2015-10-17 16:47-0700\n"
"PO-Revision-Date: 2015-10-18 15:17+0000\n"
"Last-Translator: Manuel Jiménez Friaza <mjfriaza@openmailbox.org>\n"
"Language-Team: Spanish (http://www.transifex.com/Friendica/red-matrix/language/es/)\n"
"MIME-Version: 1.0\n"
@ -422,7 +422,7 @@ msgstr "Creado"
msgid "Edited"
msgstr "Editado"
#: ../../include/api.php:1234
#: ../../include/api.php:1267
msgid "Public Timeline"
msgstr "Cronología pública"
@ -660,7 +660,7 @@ msgstr "Guardar"
#: ../../include/text.php:990
msgid "poke"
msgstr "dar un toque"
msgstr "un toque"
#: ../../include/text.php:990 ../../include/conversation.php:243
msgid "poked"
@ -668,7 +668,7 @@ msgstr "ha recibido un toque"
#: ../../include/text.php:991
msgid "ping"
msgstr "avisar"
msgstr "un \"ping\""
#: ../../include/text.php:991
msgid "pinged"
@ -692,19 +692,19 @@ msgstr "abofeteado/a"
#: ../../include/text.php:994
msgid "finger"
msgstr "señalar"
msgstr "un \"finger\""
#: ../../include/text.php:994
msgid "fingered"
msgstr "señalado/a"
msgstr "ha recibido un \"finger\""
#: ../../include/text.php:995
msgid "rebuff"
msgstr "desairar"
msgstr "un rechazo"
#: ../../include/text.php:995
msgid "rebuffed"
msgstr "desairado/a"
msgstr "ha sido rechazado/a"
#: ../../include/text.php:1005
msgid "happy"
@ -834,7 +834,8 @@ msgstr "marzo"
msgid "April"
msgstr "abril"
#: ../../include/text.php:1201
#: ../../include/text.php:1201 ../../mod/uexport.php:58
#: ../../mod/uexport.php:59
msgid "May"
msgstr "mayo"
@ -926,7 +927,7 @@ msgstr "evento"
#: ../../include/conversation.php:148 ../../mod/like.php:349
#: ../../mod/subthread.php:72 ../../mod/subthread.php:174
msgid "status"
msgstr "estado"
msgstr "el mensaje de estado"
#: ../../include/text.php:1892 ../../include/conversation.php:150
#: ../../mod/tagger.php:53
@ -1091,7 +1092,7 @@ msgstr "Gracias,"
#: ../../include/network.php:1590 ../../include/enotify.php:63
#, php-format
msgid "%s Administrator"
msgstr "%s Administrador"
msgstr "Administrador de %s"
#: ../../include/network.php:1646
msgid "No Subject"
@ -1380,7 +1381,7 @@ msgstr "Editar una aplicación personal"
#: ../../include/widgets.php:136 ../../include/widgets.php:175
#: ../../include/Contact.php:107 ../../include/conversation.php:956
#: ../../include/identity.php:933 ../../mod/directory.php:316
#: ../../include/identity.php:956 ../../mod/directory.php:316
#: ../../mod/match.php:64 ../../mod/suggest.php:52
msgid "Connect"
msgstr "Conectar"
@ -1557,7 +1558,7 @@ msgid "Finishes:"
msgstr "Finaliza:"
#: ../../include/event.php:50 ../../include/bb2diaspora.php:481
#: ../../include/identity.php:984 ../../mod/directory.php:302
#: ../../include/identity.php:1007 ../../mod/directory.php:302
#: ../../mod/events.php:684
msgid "Location:"
msgstr "Ubicación:"
@ -1603,12 +1604,12 @@ msgstr "%1$s, %2$s ha comentado sobre [zrl=%3$s]%4$s[/zrl]"
#: ../../include/enotify.php:166
#, php-format
msgid "%1$s, %2$s commented on [zrl=%3$s]%4$s's %5$s[/zrl]"
msgstr "%1$s, %2$s ha comentado sobre el [zrl=%3$s]%5$s de %4$s[/zrl]"
msgstr "%1$s, %2$s ha comentado [zrl=%3$s]%5$s de %4$s[/zrl]"
#: ../../include/enotify.php:175
#, php-format
msgid "%1$s, %2$s commented on [zrl=%3$s]your %4$s[/zrl]"
msgstr "%1$s, %2$s ha comentado [zrl=%3$s]su %4$s[/zrl]"
msgstr "%1$s, %2$s ha comentado [zrl=%3$s]%4$s creado por usted[/zrl]"
#: ../../include/enotify.php:186
#, php-format
@ -1665,7 +1666,7 @@ msgstr "[Red:Aviso] %1$s le ha dado un toque"
#: ../../include/enotify.php:239
#, php-format
msgid "%1$s, %2$s poked you at %3$s"
msgstr "%1$s, %2$s le dio un toque sobre %3$s"
msgstr "%1$s, %2$s le dio un toque en %3$s"
#: ../../include/enotify.php:240
#, php-format
@ -1680,7 +1681,7 @@ msgstr "[Red:Aviso] %s etiquetó su entrada"
#: ../../include/enotify.php:257
#, php-format
msgid "%1$s, %2$s tagged your post at %3$s"
msgstr "%1$s, %2$s ha etiquetado su publicación sobre %3$s"
msgstr "%1$s, %2$s ha etiquetado su publicación en %3$s"
#: ../../include/enotify.php:258
#, php-format
@ -1862,7 +1863,7 @@ msgid "View all"
msgstr "Ver todo"
#: ../../include/ItemObject.php:179 ../../include/taxonomy.php:396
#: ../../include/conversation.php:1712 ../../include/identity.php:1243
#: ../../include/conversation.php:1712 ../../include/identity.php:1266
#: ../../mod/photos.php:1019
msgctxt "noun"
msgid "Like"
@ -2114,7 +2115,7 @@ msgstr "Editar perfiles"
msgid "Manage/Edit profiles"
msgstr "Administrar/editar perfiles"
#: ../../include/nav.php:95 ../../include/identity.php:956
#: ../../include/nav.php:95 ../../include/identity.php:979
msgid "Edit Profile"
msgstr "Editar perfil"
@ -2416,7 +2417,7 @@ msgstr "Pueden verse mis conexiones"
#: ../../include/permissions.php:30
msgid "Can view my file storage"
msgstr "Pueden verse mis ficheros compartidos"
msgstr "Puede verse mi repositorio de ficheros"
#: ../../include/permissions.php:31
msgid "Can view my webpages"
@ -2464,7 +2465,7 @@ msgstr "Se puede charlar conmigo (cuando esté disponible)"
#: ../../include/permissions.php:43
msgid "Can write to my file storage"
msgstr "Puede escribirse en mi carpeta de ficheros"
msgstr "Puede escribirse en mi repositorio de ficheros"
#: ../../include/permissions.php:44
msgid "Can edit my webpages"
@ -2589,12 +2590,12 @@ msgstr "Abstención"
#: ../../include/conversation.php:585 ../../mod/photos.php:998
msgctxt "title"
msgid "Attending"
msgstr "Participar"
msgstr "Participaré"
#: ../../include/conversation.php:585 ../../mod/photos.php:998
msgctxt "title"
msgid "Not attending"
msgstr "No participar"
msgstr "No participaré"
#: ../../include/conversation.php:585 ../../mod/photos.php:998
msgctxt "title"
@ -2636,7 +2637,7 @@ msgstr "Seguir el hilo"
#: ../../include/conversation.php:952
msgid "View Status"
msgstr "Ver estado"
msgstr "Estado actual"
#: ../../include/conversation.php:954
msgid "View Photos"
@ -2656,7 +2657,7 @@ msgstr "Enviar Mensaje Privado"
#: ../../include/conversation.php:959 ../../include/apps.php:145
msgid "Poke"
msgstr "Dar un toque"
msgstr "Toques y otras cosas"
#: ../../include/conversation.php:1073
#, php-format
@ -2946,7 +2947,7 @@ msgstr "Álbumes de fotos"
#: ../../include/conversation.php:1623
msgid "Files and Storage"
msgstr "Ficheros y carpetas"
msgstr "Repositorio de ficheros"
#: ../../include/conversation.php:1633 ../../include/conversation.php:1636
msgid "Chatrooms"
@ -2965,14 +2966,14 @@ msgctxt "noun"
msgid "Attending"
msgid_plural "Attending"
msgstr[0] "Asistir"
msgstr[1] "Participar"
msgstr[1] "Participaré"
#: ../../include/conversation.php:1721
msgctxt "noun"
msgid "Not Attending"
msgid_plural "Not Attending"
msgstr[0] "No asistir"
msgstr[1] "No participar"
msgstr[1] "No participaré"
#: ../../include/conversation.php:1724
msgctxt "noun"
@ -3008,51 +3009,51 @@ msgstr[1] "Se abstienen"
msgid "Permission denied"
msgstr "Permiso denegado"
#: ../../include/items.php:1038 ../../include/items.php:1084
#: ../../include/items.php:1101 ../../include/items.php:1147
msgid "(Unknown)"
msgstr "(Desconocido)"
#: ../../include/items.php:1310
#: ../../include/items.php:1373
msgid "Visible to anybody on the internet."
msgstr "Visible para cualquiera en internet."
#: ../../include/items.php:1312
#: ../../include/items.php:1375
msgid "Visible to you only."
msgstr "Visible sólo para usted."
#: ../../include/items.php:1314
#: ../../include/items.php:1377
msgid "Visible to anybody in this network."
msgstr "Visible para cualquiera en esta red."
#: ../../include/items.php:1316
#: ../../include/items.php:1379
msgid "Visible to anybody authenticated."
msgstr "Visible para cualquiera que haya sido autenticado."
#: ../../include/items.php:1318
#: ../../include/items.php:1381
#, php-format
msgid "Visible to anybody on %s."
msgstr "Visible para cualquiera en %s."
#: ../../include/items.php:1320
#: ../../include/items.php:1383
msgid "Visible to all connections."
msgstr "Visible para todas las conexiones."
#: ../../include/items.php:1322
#: ../../include/items.php:1385
msgid "Visible to approved connections."
msgstr "Visible para las conexiones permitidas."
#: ../../include/items.php:1324
#: ../../include/items.php:1387
msgid "Visible to specific connections."
msgstr "Visible para conexiones específicas."
#: ../../include/items.php:4223 ../../mod/thing.php:74
#: ../../include/items.php:4310 ../../mod/thing.php:74
#: ../../mod/filestorage.php:27 ../../mod/viewsrc.php:20
#: ../../mod/admin.php:167 ../../mod/admin.php:1025 ../../mod/admin.php:1225
#: ../../mod/display.php:36
msgid "Item not found."
msgstr "Elemento no encontrado."
#: ../../include/items.php:4296 ../../include/attach.php:137
#: ../../include/items.php:4383 ../../include/attach.php:137
#: ../../include/attach.php:184 ../../include/attach.php:247
#: ../../include/attach.php:261 ../../include/attach.php:305
#: ../../include/attach.php:319 ../../include/attach.php:350
@ -3095,38 +3096,38 @@ msgstr "Elemento no encontrado."
msgid "Permission denied."
msgstr "Acceso denegado."
#: ../../include/items.php:4700 ../../mod/group.php:38 ../../mod/group.php:140
#: ../../include/items.php:4787 ../../mod/group.php:38 ../../mod/group.php:140
#: ../../mod/bulksetclose.php:51
msgid "Collection not found."
msgstr "Colección no encontrada."
#: ../../include/items.php:4716
#: ../../include/items.php:4803
msgid "Collection is empty."
msgstr "La colección está vacía."
#: ../../include/items.php:4723
#: ../../include/items.php:4810
#, php-format
msgid "Collection: %s"
msgstr "Colección: %s"
#: ../../include/items.php:4733 ../../mod/connedit.php:674
#: ../../include/items.php:4820 ../../mod/connedit.php:674
#, php-format
msgid "Connection: %s"
msgstr "Conexión: %s"
#: ../../include/items.php:4735
#: ../../include/items.php:4822
msgid "Connection not found."
msgstr "Conexión no encontrada"
#: ../../include/zot.php:677
#: ../../include/zot.php:684
msgid "Invalid data packet"
msgstr "Paquete de datos no válido"
#: ../../include/zot.php:693
#: ../../include/zot.php:700
msgid "Unable to verify channel signature"
msgstr "No ha sido posible de verificar la signatura del canal"
#: ../../include/zot.php:2161
#: ../../include/zot.php:2208
#, php-format
msgid "Unable to verify site signature for %s"
msgstr "No ha sido posible de verificar la signatura del sitio para %s"
@ -3324,11 +3325,11 @@ msgstr "No ha sido posible recuperar la identidad creada"
msgid "Default Profile"
msgstr "Perfil principal"
#: ../../include/identity.php:736
#: ../../include/identity.php:759
msgid "Requested channel is not available."
msgstr "El canal solicitado no está disponible."
#: ../../include/identity.php:783 ../../mod/profile.php:16
#: ../../include/identity.php:806 ../../mod/profile.php:16
#: ../../mod/achievements.php:11 ../../mod/webpages.php:29
#: ../../mod/connect.php:13 ../../mod/hcard.php:8 ../../mod/blocks.php:29
#: ../../mod/editlayout.php:27 ../../mod/editwebpage.php:28
@ -3337,193 +3338,193 @@ msgstr "El canal solicitado no está disponible."
msgid "Requested profile is not available."
msgstr "El perfil solicitado no está disponible."
#: ../../include/identity.php:946 ../../mod/profiles.php:774
#: ../../include/identity.php:969 ../../mod/profiles.php:774
msgid "Change profile photo"
msgstr "Cambiar foto de perfil"
#: ../../include/identity.php:952
#: ../../include/identity.php:975
msgid "Profiles"
msgstr "Perfiles"
#: ../../include/identity.php:952
#: ../../include/identity.php:975
msgid "Manage/edit profiles"
msgstr "Administrar/editar perfiles"
#: ../../include/identity.php:953 ../../mod/profiles.php:775
#: ../../include/identity.php:976 ../../mod/profiles.php:775
msgid "Create New Profile"
msgstr "Crear nuevo perfil"
#: ../../include/identity.php:968 ../../mod/profiles.php:786
#: ../../include/identity.php:991 ../../mod/profiles.php:786
msgid "Profile Image"
msgstr "Imagen de perfil"
#: ../../include/identity.php:971
#: ../../include/identity.php:994
msgid "visible to everybody"
msgstr "visible para cualquiera"
#: ../../include/identity.php:972 ../../mod/profiles.php:669
#: ../../include/identity.php:995 ../../mod/profiles.php:669
#: ../../mod/profiles.php:790
msgid "Edit visibility"
msgstr "Editar visibilidad"
#: ../../include/identity.php:988 ../../include/identity.php:1227
#: ../../include/identity.php:1011 ../../include/identity.php:1250
msgid "Gender:"
msgstr "Género:"
#: ../../include/identity.php:989 ../../include/identity.php:1271
#: ../../include/identity.php:1012 ../../include/identity.php:1294
msgid "Status:"
msgstr "Estado:"
#: ../../include/identity.php:990 ../../include/identity.php:1282
#: ../../include/identity.php:1013 ../../include/identity.php:1305
msgid "Homepage:"
msgstr "Página personal:"
#: ../../include/identity.php:991
#: ../../include/identity.php:1014
msgid "Online Now"
msgstr "Ahora en línea"
#: ../../include/identity.php:1074 ../../include/identity.php:1152
#: ../../include/identity.php:1097 ../../include/identity.php:1175
#: ../../mod/ping.php:324
msgid "g A l F d"
msgstr "g A l d F"
#: ../../include/identity.php:1075 ../../include/identity.php:1153
#: ../../include/identity.php:1098 ../../include/identity.php:1176
msgid "F d"
msgstr "d F"
#: ../../include/identity.php:1120 ../../include/identity.php:1192
#: ../../include/identity.php:1143 ../../include/identity.php:1215
#: ../../mod/ping.php:346
msgid "[today]"
msgstr "[hoy]"
#: ../../include/identity.php:1131
#: ../../include/identity.php:1154
msgid "Birthday Reminders"
msgstr "Recordatorios de cumpleaños"
#: ../../include/identity.php:1132
#: ../../include/identity.php:1155
msgid "Birthdays this week:"
msgstr "Cumpleaños esta semana:"
#: ../../include/identity.php:1185
#: ../../include/identity.php:1208
msgid "[No description]"
msgstr "[Sin descripción]"
#: ../../include/identity.php:1203
#: ../../include/identity.php:1226
msgid "Event Reminders"
msgstr "Recordatorios de eventos"
#: ../../include/identity.php:1204
#: ../../include/identity.php:1227
msgid "Events this week:"
msgstr "Eventos de esta semana:"
#: ../../include/identity.php:1217 ../../include/identity.php:1334
#: ../../include/identity.php:1240 ../../include/identity.php:1357
#: ../../include/apps.php:138 ../../mod/profperm.php:112
msgid "Profile"
msgstr "Perfil"
#: ../../include/identity.php:1225 ../../mod/settings.php:1056
#: ../../include/identity.php:1248 ../../mod/settings.php:1056
msgid "Full Name:"
msgstr "Nombre completo:"
#: ../../include/identity.php:1232
#: ../../include/identity.php:1255
msgid "Like this channel"
msgstr "Me gusta este canal"
#: ../../include/identity.php:1256
#: ../../include/identity.php:1279
msgid "j F, Y"
msgstr "j F Y"
#: ../../include/identity.php:1257
#: ../../include/identity.php:1280
msgid "j F"
msgstr "j F"
#: ../../include/identity.php:1264
#: ../../include/identity.php:1287
msgid "Birthday:"
msgstr "Cumpleaños:"
#: ../../include/identity.php:1268 ../../mod/directory.php:297
#: ../../include/identity.php:1291 ../../mod/directory.php:297
msgid "Age:"
msgstr "Edad:"
#: ../../include/identity.php:1277
#: ../../include/identity.php:1300
#, php-format
msgid "for %1$d %2$s"
msgstr "por %1$d %2$s"
#: ../../include/identity.php:1280 ../../mod/profiles.php:691
#: ../../include/identity.php:1303 ../../mod/profiles.php:691
msgid "Sexual Preference:"
msgstr "Orientación sexual:"
#: ../../include/identity.php:1284 ../../mod/directory.php:313
#: ../../include/identity.php:1307 ../../mod/directory.php:313
#: ../../mod/profiles.php:693
msgid "Hometown:"
msgstr "Ciudad de origen:"
#: ../../include/identity.php:1286
#: ../../include/identity.php:1309
msgid "Tags:"
msgstr "Etiquetas:"
#: ../../include/identity.php:1288 ../../mod/profiles.php:694
#: ../../include/identity.php:1311 ../../mod/profiles.php:694
msgid "Political Views:"
msgstr "Posición política:"
#: ../../include/identity.php:1290
#: ../../include/identity.php:1313
msgid "Religion:"
msgstr "Religión:"
#: ../../include/identity.php:1292 ../../mod/directory.php:315
#: ../../include/identity.php:1315 ../../mod/directory.php:315
msgid "About:"
msgstr "Sobre mí:"
#: ../../include/identity.php:1294
#: ../../include/identity.php:1317
msgid "Hobbies/Interests:"
msgstr "Aficciones/Intereses:"
#: ../../include/identity.php:1296 ../../mod/profiles.php:697
#: ../../include/identity.php:1319 ../../mod/profiles.php:697
msgid "Likes:"
msgstr "Me gusta:"
#: ../../include/identity.php:1298 ../../mod/profiles.php:698
#: ../../include/identity.php:1321 ../../mod/profiles.php:698
msgid "Dislikes:"
msgstr "No me gusta:"
#: ../../include/identity.php:1300
#: ../../include/identity.php:1323
msgid "Contact information and Social Networks:"
msgstr "Información de contacto y redes sociales:"
#: ../../include/identity.php:1302
#: ../../include/identity.php:1325
msgid "My other channels:"
msgstr "Mis otros canales:"
#: ../../include/identity.php:1304
#: ../../include/identity.php:1327
msgid "Musical interests:"
msgstr "Intereses musicales:"
#: ../../include/identity.php:1306
#: ../../include/identity.php:1329
msgid "Books, literature:"
msgstr "Libros, literatura:"
#: ../../include/identity.php:1308
#: ../../include/identity.php:1331
msgid "Television:"
msgstr "Televisión:"
#: ../../include/identity.php:1310
#: ../../include/identity.php:1333
msgid "Film/dance/culture/entertainment:"
msgstr "Cine/danza/cultura/entretenimiento:"
#: ../../include/identity.php:1312
#: ../../include/identity.php:1335
msgid "Love/Romance:"
msgstr "Vida sentimental/amorosa:"
#: ../../include/identity.php:1314
#: ../../include/identity.php:1337
msgid "Work/employment:"
msgstr "Trabajo:"
#: ../../include/identity.php:1316
#: ../../include/identity.php:1339
msgid "School/education:"
msgstr "Estudios:"
#: ../../include/identity.php:1336
#: ../../include/identity.php:1359
msgid "Like this thing"
msgstr "Me gusta esto"
@ -4273,7 +4274,7 @@ msgstr "Omitir este paso"
#: ../../mod/profile_photo.php:366
msgid "select a photo from your photo albums"
msgstr "Seleccione una foto de sus álbumes de fotos"
msgstr "Seleccione una foto de sus álbumes"
#: ../../mod/profile_photo.php:382
msgid "Crop Image"
@ -4610,7 +4611,7 @@ msgstr "Extensiones/Aplicaciones instaladas:"
msgid "No installed plugins/addons/apps"
msgstr "Extensiones/Aplicaciones no instaladas:"
#: ../../mod/siteinfo.php:155 ../../mod/home.php:58 ../../mod/home.php:64
#: ../../mod/siteinfo.php:155 ../../mod/home.php:58 ../../mod/home.php:66
msgid "$Projectname"
msgstr "$Projectname"
@ -4875,12 +4876,12 @@ msgstr "El acceso a este elemento está restringido."
#: ../../mod/photos.php:535
#, php-format
msgid "%1$.2f MB of %2$.2f MB photo storage used."
msgstr "%1$.2f MB de %2$.2f MB de almacenamiento de fotos utilizado."
msgstr "%1$.2f MB de %2$.2f MB usados de la capacidad de almacenamiento de fotos."
#: ../../mod/photos.php:538
#, php-format
msgid "%1$.2f MB photo storage used."
msgstr "%1$.2f MB de almacenamiento de fotos utilizado."
msgstr "%1$.2f MB utilizados de la capacidad de almacenamiento de fotos."
#: ../../mod/photos.php:562
msgid "Upload Photos"
@ -5787,7 +5788,7 @@ msgstr "Servidor no encontrado"
#: ../../mod/poke.php:159
msgid "Poke/Prod"
msgstr "Dar un toque/Incitar"
msgstr "Toque/Incitación"
#: ../../mod/poke.php:160
msgid "poke, prod or do other things to somebody"
@ -6524,7 +6525,7 @@ msgstr "IMPORTANTE: Debe crear [manualmente] una tarea programada para las actua
msgid "OpenID protocol error. No ID returned."
msgstr "Error del protocolo OpenID. Ningún ID recibido como respuesta."
#: ../../mod/openid.php:72 ../../mod/openid.php:180 ../../mod/post.php:286
#: ../../mod/openid.php:72 ../../mod/openid.php:180 ../../mod/post.php:287
#, php-format
msgid "Welcome %s. Remote authentication successful."
msgstr "Bienvenido %s. La identificación desde su servidor se ha llevado a cabo correctamente."
@ -6534,31 +6535,6 @@ msgstr "Bienvenido %s. La identificación desde su servidor se ha llevado a cabo
msgid "%1$s tagged %2$s's %3$s with %4$s"
msgstr "%1$s ha etiquetado la %3$s de %2$s con %4$s"
#: ../../mod/uexport.php:45 ../../mod/uexport.php:46
msgid "Export Channel"
msgstr "Exportar el canal"
#: ../../mod/uexport.php:47
msgid ""
"Export your basic channel information to a small file. This acts as a "
"backup of your connections, permissions, profile and basic data, which can "
"be used to import your data to a new hub, but\tdoes not contain your "
"content."
msgstr "Exportar la base de datos de su canal a un pequeño fichero. Este podrá servir como una copia de seguridad de sus conexiones, permisos, perfil y datos básicos, que podrá importar a un nuevo canal, pero sin sus contenidos."
#: ../../mod/uexport.php:48
msgid "Export Content"
msgstr "Exportar contenidos"
#: ../../mod/uexport.php:49
msgid ""
"Export your channel information and all the content to a JSON backup. This "
"backs up all of your connections, permissions, profile data and all of your "
"content, but is generally not suitable for importing a channel to a new hub "
"as this file may be VERY large. Please be patient - it may take several "
"minutes for this download to begin."
msgstr "Exportar toda la información del canal y todo su contenido a un fichero JSON. Este contendrá todas sus conexiones, permisos, información del perfil y todo su contenido, Sin embargo, a menudo, no será una buena solución para importarlo en una nueva instancia, pues el fichero será MUY voluminoso. Por favor, tenga paciencia - pueden pasar muchos minutos antes de que comience la carga."
#: ../../mod/viewconnections.php:62
msgid "No connections."
msgstr "Sin conexiones."
@ -7989,7 +7965,7 @@ msgstr "Usted ha sido etiquetado en una publicación"
#: ../../mod/settings.php:1109
msgid "You are poked/prodded/etc. in a post"
msgstr "Recibir un toque o incitación en una publicación"
msgstr "Reciba un toque o incitación en una entrada"
#: ../../mod/settings.php:1112
msgid "Show visual notifications including:"
@ -8171,6 +8147,114 @@ msgstr "Eliminar conversación"
msgid "D, d M Y - g:i A"
msgstr "D d M Y - G:i"
#: ../../mod/uexport.php:50 ../../mod/uexport.php:51
msgid "Export Channel"
msgstr "Exportar el canal"
#: ../../mod/uexport.php:52
msgid ""
"Export your basic channel information to a file. This acts as a backup of "
"your connections, permissions, profile and basic data, which can be used to "
"import your data to a new server hub, but does not contain your content."
msgstr "Exportar la información básica del canal a un fichero. Este equivale a una copia de seguridad de sus conexiones, el perfil y datos fundamentales, que puede usarse para importar sus datos a un nuevo servidor, pero no incluye su contenido."
#: ../../mod/uexport.php:53
msgid "Export Content"
msgstr "Exportar contenidos"
#: ../../mod/uexport.php:54
msgid ""
"Export your channel information and recent content to a JSON backup that can"
" be restored or imported to another server hub. This backs up all of your "
"connections, permissions, profile data and several months of posts. This "
"file may be VERY large. Please be patient - it may take several minutes for"
" this download to begin."
msgstr "Exportar la información sobre su canal y el contenido reciente a un fichero de respaldo JSON, que puede ser restaurado o importado a otro servidor. Este fichero incluye todas sus conexiones, permisos, datos del perfil y publicaciones de varios meses. Puede llegar a ser MUY grande. Por favor, sea paciente, la descarga puede tardar varios minutos en comenzar."
#: ../../mod/uexport.php:55
msgid "Export your posts from a given year or month:"
msgstr "Exporta sus entradas de un año o mes determinados."
#: ../../mod/uexport.php:57
msgid ""
"You may also export your posts and conversations for a particular year or "
"month. Click on one of the recent years or months below."
msgstr "También puede exportar sus entradas y conversaciones de un año o mes en particular. Hágalo en primer lugar con uno de los años o meses más recientes."
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Jan"
msgstr "Ene"
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Feb"
msgstr "Feb"
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Mar"
msgstr "Mar"
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Apr"
msgstr "Abr"
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Jun"
msgstr "Jun"
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Jul"
msgstr "Jul"
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Aug"
msgstr "Ago"
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Sep"
msgstr "Sep"
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Oct"
msgstr "Oct"
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Nov"
msgstr "Nov"
#: ../../mod/uexport.php:58 ../../mod/uexport.php:59
msgid "Dec"
msgstr "Dic"
#: ../../mod/uexport.php:60
msgid ""
"If the export fails (possibly due to memory exhaustion on your server hub), "
"please try again selecting a more limited date range."
msgstr "Si la exportación falla (posiblemente debido al agotamiento de la memoria del servidor hub), por favor, inténtelo de nuevo seleccionando un rango de fechas más pequeño."
#: ../../mod/uexport.php:61
#, php-format
msgid ""
"Or adjust the date in your browser location bar to select other dates. For "
"example the year 2013; <a href=\"%1$s/2013\">%1$s/2013</a> or the month "
"September 2013; <a href=\"%1$s/2013/9\">%1$s/2013/9</a>"
msgstr "Ajuste la fecha en la barra de direcciones del navegador para seleccionar otras fechas. Por ejemlo, el año 2013: <a href=\"%1$s/2013\">%1$s/2013</a> o el mes de septiembre de 2013: <a href=\"%1$s/2013/9\">%1$s/2013/9</a>"
#: ../../mod/uexport.php:62
msgid "Please visit"
msgstr "Por favor, visite"
#: ../../mod/uexport.php:62
msgid "on another hub to import the backup files(s)."
msgstr "en otro servidor hub para importar el fichero (s) de copia de seguridad."
#: ../../mod/uexport.php:63
msgid ""
"We advise you to clone the channel on the new hub first and than to import "
"the backup file(s) (from the same channel) in chronological order. Importing"
" the backup files into another channel will certainly give permission "
"issues."
msgstr "Aviso: al clonar el canal en un nuevo servidor hub, en primer lugar tiene que importar el fichero (s) con las copias de seguridad (desde el mismo canal) en orden cronológico. Importar los ficheros de copia de seguridad en otro canal le dará, con toda seguridad, problemas de permisos."
#: ../../mod/mood.php:131
msgid "Set your current mood and tell your friends"
msgstr "Describir su estado de ánimo para comunicárselo a sus amigos"
@ -8504,7 +8588,7 @@ msgstr "Mensaje eliminado."
#: ../../mod/mail.php:156
msgid "Message recalled."
msgstr "Mensaje recuperado."
msgstr "Mensaje revocado."
#: ../../mod/mail.php:225
msgid "Send Private Message"
@ -8532,11 +8616,11 @@ msgstr "Mensaje eliminado"
#: ../../mod/mail.php:313
msgid "Recall message"
msgstr "Recuperar el mensaje"
msgstr "Revocar el mensaje"
#: ../../mod/mail.php:315
msgid "Message has been recalled."
msgstr "El mensaje ha sido recuperado."
msgstr "El mensaje ha sido revocado."
#: ../../mod/mail.php:332
msgid "Private Conversation"
@ -8564,7 +8648,7 @@ msgstr "Descartar"
msgid "Please login."
msgstr "Por favor, inicie sesión."
#: ../../mod/post.php:235
#: ../../mod/post.php:236
msgid ""
"Remote authentication blocked. You are logged into this site locally. Please"
" logout and retry."
@ -8686,7 +8770,7 @@ msgstr "Descripción del formato"
msgid "Download PDL file"
msgstr "Descargar el fichero PDL"
#: ../../mod/home.php:73
#: ../../mod/home.php:75
#, php-format
msgid "Welcome to %s"
msgstr "Bienvenido a %s"
@ -8897,11 +8981,11 @@ msgstr "Ancho de la sección"
#: ../../view/theme/apw/php/config.php:289
msgid "Left offset of the aside"
msgstr "Desplazamiento izquierdo del lateral"
msgstr "Desplazamiento izquierdo del panel lateral"
#: ../../view/theme/apw/php/config.php:290
msgid "Right offset of the aside element"
msgstr "Desplazamiento derecho del elemento lateral"
msgstr "Desplazamiento derecho del elemento del panel lateral"
#: ../../view/theme/redbasic/php/config.php:82
msgid "Light (Red Matrix default)"
@ -9073,7 +9157,7 @@ msgstr "[red] Error SSL del sitio web en %s"
#: ../../boot.php:2352
msgid "Cron/Scheduled tasks not running."
msgstr "Las tareas del Planificador/Cron no se están funcionando."
msgstr "Las tareas del Planificador/Cron no están funcionando."
#: ../../boot.php:2356
#, php-format

View file

@ -2,16 +2,16 @@
Una cuenta ha sido creada en {{$sitename}} con esta dirección de correo electrónico.
Los detalles del inicio de sesión son los siguientes:
Localización del Sitio: {{$siteurl}}
Nombre de usuario: {{$email}}
Localización del sitio:⇥{{$siteurl}}
Nombre de usuario:{{$email}}
Contraseña: (la contraseña que proporcionó durante el proceso de registro)
Si esta cuenta se creó sin su consentimiento y no es deseada, puedes
Si esta cuenta se creó sin su consentimiento, y no es deseada, puede
visitar el sitio y cambiar la contraseña. Esto le permitirá eliminar la
cuenta de los enlaces en la página de Ajustes, le
pedimos disculpas por cualquier inconveniente que hayamos podido causar.
cuenta en la página de Ajustes del perfil, le
pedimos disculpas por cualquier inconveniente que hayamos podido causarle.
gracias y bienvenido a {{$sitename}}.
Gracias y bienvenido a {{$sitename}}.
Atentamente,
Administrador de {{$sitename}}

View file

@ -5,8 +5,8 @@ su aprobación.
Los detalles del inicio de sesión son los siguientes:
Localización del Sitio: {{$siteurl}}
Nombre de usuario: {{$email}}
Localización del sitio:⇥{{$siteurl}}
Nombre de usuario:{{$email}}
Dirección IP: {{$details}}
Para aprobar la petición siga el enlace:
@ -15,7 +15,7 @@ Para aprobar la petición siga el enlace:
{{$siteurl}}/regmod/allow/{{$hash}}
Para denegar la petición y eliminar la cuenta , siga:
Para rechazar la petición y eliminar la cuenta , siga:
{{$siteurl}}/regmod/deny/{{$hash}}

View file

@ -3,10 +3,10 @@ Gracias por registrarse en {{$sitename}}.
Los detalles del inicio de sesión son los siguientes:
Localización del Sitio: {{$siteurl}}
Nombre de usuario: {{$email}}
Localización del sitio:⇥{{$siteurl}}
Nombre de usuario:{{$email}}
inicie la sesión con la contraseña que elegió durante el registro.
Inicie la sesión con la contraseña que eligió durante el registro.
Necesitamos verificar su correo electrónico para poder darle pleno acceso.
@ -15,7 +15,7 @@ Si registró esta cuenta, por favor, siga el enlace:
{{$siteurl}}/regver/allow/{{$hash}}
Para denegar la petición y eliminar la cuenta , siga:
Para rechazar la petición y eliminar la cuenta , siga:
{{$siteurl}}/regver/deny/{{$hash}}

View file

@ -145,18 +145,18 @@ $a->strings["%d Connection"] = array(
$a->strings["View Connections"] = "Ver conexiones";
$a->strings["Search"] = "Buscar";
$a->strings["Save"] = "Guardar";
$a->strings["poke"] = "dar un toque";
$a->strings["poke"] = "un toque";
$a->strings["poked"] = "ha recibido un toque";
$a->strings["ping"] = "avisar";
$a->strings["ping"] = "un \"ping\"";
$a->strings["pinged"] = "avisado/a";
$a->strings["prod"] = "incitar";
$a->strings["prodded"] = "incitado/a";
$a->strings["slap"] = "abofetear";
$a->strings["slapped"] = "abofeteado/a";
$a->strings["finger"] = "señalar";
$a->strings["fingered"] = "señalado/a";
$a->strings["rebuff"] = "desairar";
$a->strings["rebuffed"] = "desairado/a";
$a->strings["finger"] = "un \"finger\"";
$a->strings["fingered"] = "ha recibido un \"finger\"";
$a->strings["rebuff"] = "un rechazo";
$a->strings["rebuffed"] = "ha sido rechazado/a";
$a->strings["happy"] = "feliz";
$a->strings["sad"] = "triste";
$a->strings["mellow"] = "amable";
@ -210,7 +210,7 @@ $a->strings["Page content type"] = "Tipo de contenido de página";
$a->strings["Select an alternate language"] = "Selecciona un idioma alternativo";
$a->strings["photo"] = "foto";
$a->strings["event"] = "evento";
$a->strings["status"] = "estado";
$a->strings["status"] = "el mensaje de estado";
$a->strings["comment"] = "comentario";
$a->strings["activity"] = "actividad";
$a->strings["Design Tools"] = "Herramientas de diseño";
@ -245,7 +245,7 @@ $a->strings["view full size"] = "Ver en el tamaño original";
$a->strings["\$Projectname Notification"] = "Notificación de \$Projectname";
$a->strings["\$projectname"] = "\$projectname";
$a->strings["Thank You,"] = "Gracias,";
$a->strings["%s Administrator"] = "%s Administrador";
$a->strings["%s Administrator"] = "Administrador de %s";
$a->strings["No Subject"] = "Sin asunto";
$a->strings["General Features"] = "Características generales";
$a->strings["Content Expiration"] = "Caducidad del contenido";
@ -365,8 +365,8 @@ $a->strings["%1\$s sent you %2\$s."] = "%1\$s le envió %2\$s.";
$a->strings["a private message"] = "un mensaje privado";
$a->strings["Please visit %s to view and/or reply to your private messages."] = "Por favor visite %s para ver y/o responder a su mensaje privado.";
$a->strings["%1\$s, %2\$s commented on [zrl=%3\$s]a %4\$s[/zrl]"] = "%1\$s, %2\$s ha comentado sobre [zrl=%3\$s]%4\$s[/zrl]";
$a->strings["%1\$s, %2\$s commented on [zrl=%3\$s]%4\$s's %5\$s[/zrl]"] = "%1\$s, %2\$s ha comentado sobre el [zrl=%3\$s]%5\$s de %4\$s[/zrl]";
$a->strings["%1\$s, %2\$s commented on [zrl=%3\$s]your %4\$s[/zrl]"] = "%1\$s, %2\$s ha comentado [zrl=%3\$s]su %4\$s[/zrl]";
$a->strings["%1\$s, %2\$s commented on [zrl=%3\$s]%4\$s's %5\$s[/zrl]"] = "%1\$s, %2\$s ha comentado [zrl=%3\$s]%5\$s de %4\$s[/zrl]";
$a->strings["%1\$s, %2\$s commented on [zrl=%3\$s]your %4\$s[/zrl]"] = "%1\$s, %2\$s ha comentado [zrl=%3\$s]%4\$s creado por usted[/zrl]";
$a->strings["[Red:Notify] Comment to conversation #%1\$d by %2\$s"] = "[Red:Aviso] Nuevo comentario de %2\$s en la conversación #%1\$d";
$a->strings["%1\$s, %2\$s commented on an item/conversation you have been following."] = "%1\$s, %2\$s comentó un elemento/conversación que ha estado siguiendo.";
$a->strings["Please visit %s to view and/or reply to the conversation."] = "Para ver o comentar la conversación, visite %s";
@ -377,10 +377,10 @@ $a->strings["[Red:Notify] %s tagged you"] = "[Red:Aviso] %s le etiquetó";
$a->strings["%1\$s, %2\$s tagged you at %3\$s"] = "%1\$s, %2\$s le etiquetó en %3\$s";
$a->strings["%1\$s, %2\$s [zrl=%3\$s]tagged you[/zrl]."] = "%1\$s, %2\$s [zrl=%3\$s]le etiquetó[/zrl].";
$a->strings["[Red:Notify] %1\$s poked you"] = "[Red:Aviso] %1\$s le ha dado un toque";
$a->strings["%1\$s, %2\$s poked you at %3\$s"] = "%1\$s, %2\$s le dio un toque sobre %3\$s";
$a->strings["%1\$s, %2\$s poked you at %3\$s"] = "%1\$s, %2\$s le dio un toque en %3\$s";
$a->strings["%1\$s, %2\$s [zrl=%2\$s]poked you[/zrl]."] = "%1\$s, %2\$s [zrl=%2\$s]le dio un toque[/zrl].";
$a->strings["[Red:Notify] %s tagged your post"] = "[Red:Aviso] %s etiquetó su entrada";
$a->strings["%1\$s, %2\$s tagged your post at %3\$s"] = "%1\$s, %2\$s ha etiquetado su publicación sobre %3\$s";
$a->strings["%1\$s, %2\$s tagged your post at %3\$s"] = "%1\$s, %2\$s ha etiquetado su publicación en %3\$s";
$a->strings["%1\$s, %2\$s tagged [zrl=%3\$s]your post[/zrl]"] = "%1\$s, %2\$s ha etiquetado [zrl=%3\$s]su publicación[/zrl]";
$a->strings["[Red:Notify] Introduction received"] = "[Red:Aviso] Solicitud de conexión recibida";
$a->strings["%1\$s, you've received an new connection request from '%2\$s' at %3\$s"] = "%1\$s, ha recibido una nueva solicitud de conexión de '%2\$s' en %3\$s";
@ -557,7 +557,7 @@ $a->strings["Can view my normal stream and posts"] = "Pueden verse mi flujo de a
$a->strings["Can view my default channel profile"] = "Puede verse mi perfil de canal predeterminado.";
$a->strings["Can view my photo albums"] = "Pueden verse mis álbumes de fotos";
$a->strings["Can view my connections"] = "Pueden verse mis conexiones";
$a->strings["Can view my file storage"] = "Pueden verse mis ficheros compartidos";
$a->strings["Can view my file storage"] = "Puede verse mi repositorio de ficheros";
$a->strings["Can view my webpages"] = "Pueden verse mis páginas web";
$a->strings["Can send me their channel stream and posts"] = "Me pueden enviar sus entradas y flujo de actividad su canal";
$a->strings["Can post on my channel page (\"wall\")"] = "Pueden crear entradas en mi página de inicio del canal (“muro”)";
@ -569,7 +569,7 @@ $a->strings["Profiles and things other than posts/comments"] = "Perfiles y otras
$a->strings["Can forward to all my channel contacts via post @mentions"] = "Puede enviarse una entrada a todos mis contactos del canal mediante una @mención";
$a->strings["Advanced - useful for creating group forum channels"] = "Avanzado - útil para crear canales de foro o grupos";
$a->strings["Can chat with me (when available)"] = "Se puede charlar conmigo (cuando esté disponible)";
$a->strings["Can write to my file storage"] = "Puede escribirse en mi carpeta de ficheros";
$a->strings["Can write to my file storage"] = "Puede escribirse en mi repositorio de ficheros";
$a->strings["Can edit my webpages"] = "Puede editar mis páginas web";
$a->strings["Can source my public posts in derived channels"] = "Pueden utilizarse mis publicaciones públicas como origen de contenidos en canales derivados";
$a->strings["Somewhat advanced - very useful in open communities"] = "Algo avanzado - muy útil en comunidades abiertas";
@ -596,8 +596,8 @@ $a->strings["__ctx:title__ Dislikes"] = "No me gusta";
$a->strings["__ctx:title__ Agree"] = "De acuerdo";
$a->strings["__ctx:title__ Disagree"] = "En desacuerdo";
$a->strings["__ctx:title__ Abstain"] = "Abstención";
$a->strings["__ctx:title__ Attending"] = "Participar";
$a->strings["__ctx:title__ Not attending"] = "No participar";
$a->strings["__ctx:title__ Attending"] = "Participaré";
$a->strings["__ctx:title__ Not attending"] = "No participaré";
$a->strings["__ctx:title__ Might attend"] = "Quizá participe";
$a->strings["View %s's profile @ %s"] = "Ver el perfil @ %s de %s";
$a->strings["Categories:"] = "Categorías:";
@ -607,12 +607,12 @@ $a->strings["remove"] = "eliminar";
$a->strings["Delete Selected Items"] = "Eliminar elementos seleccionados";
$a->strings["View Source"] = "Ver la fuente original de la entrada";
$a->strings["Follow Thread"] = "Seguir el hilo";
$a->strings["View Status"] = "Ver estado";
$a->strings["View Status"] = "Estado actual";
$a->strings["View Photos"] = "Ver fotos";
$a->strings["Matrix Activity"] = "Actividad en la red de esta conexión";
$a->strings["Edit Contact"] = "Editar contacto";
$a->strings["Send PM"] = "Enviar Mensaje Privado";
$a->strings["Poke"] = "Dar un toque";
$a->strings["Poke"] = "Toques y otras cosas";
$a->strings["%s likes this."] = "a %s le gusta esto.";
$a->strings["%s doesn't like this."] = "a %s no le gusta esto.";
$a->strings["<span %1\$s>%2\$d people</span> like this."] = array(
@ -683,17 +683,17 @@ $a->strings["Status Messages and Posts"] = "Mensajes de estado y publicaciones";
$a->strings["About"] = "Sobre mí";
$a->strings["Profile Details"] = "Detalles del perfil";
$a->strings["Photo Albums"] = "Álbumes de fotos";
$a->strings["Files and Storage"] = "Ficheros y carpetas";
$a->strings["Files and Storage"] = "Repositorio de ficheros";
$a->strings["Chatrooms"] = "Salas de chat";
$a->strings["Saved Bookmarks"] = "Marcadores guardados";
$a->strings["Manage Webpages"] = "Administrar páginas web";
$a->strings["__ctx:noun__ Attending"] = array(
0 => "Asistir",
1 => "Participar",
1 => "Participaré",
);
$a->strings["__ctx:noun__ Not Attending"] = array(
0 => "No asistir",
1 => "No participar",
1 => "No participaré",
);
$a->strings["__ctx:noun__ Undecided"] = array(
0 => "Indeciso/a",
@ -1007,7 +1007,7 @@ $a->strings["Select a profile:"] = "Seleccionar un perfil:";
$a->strings["Upload Profile Photo"] = "Subir foto de perfil";
$a->strings["or"] = "o";
$a->strings["skip this step"] = "Omitir este paso";
$a->strings["select a photo from your photo albums"] = "Seleccione una foto de sus álbumes de fotos";
$a->strings["select a photo from your photo albums"] = "Seleccione una foto de sus álbumes";
$a->strings["Crop Image"] = "Recortar imagen";
$a->strings["Please adjust the image cropping for optimum viewing."] = "Por favor ajuste el recorte de la imagen para una visión óptima.";
$a->strings["Done Editing"] = "Edición completada";
@ -1149,8 +1149,8 @@ $a->strings["Delete Album"] = "Borrar álbum";
$a->strings["Delete Photo"] = "Borrar foto";
$a->strings["No photos selected"] = "No hay fotos seleccionadas";
$a->strings["Access to this item is restricted."] = "El acceso a este elemento está restringido.";
$a->strings["%1$.2f MB of %2$.2f MB photo storage used."] = "%1$.2f MB de %2$.2f MB de almacenamiento de fotos utilizado.";
$a->strings["%1$.2f MB photo storage used."] = "%1$.2f MB de almacenamiento de fotos utilizado.";
$a->strings["%1$.2f MB of %2$.2f MB photo storage used."] = "%1$.2f MB de %2$.2f MB usados de la capacidad de almacenamiento de fotos.";
$a->strings["%1$.2f MB photo storage used."] = "%1$.2f MB utilizados de la capacidad de almacenamiento de fotos.";
$a->strings["Upload Photos"] = "Subir fotos";
$a->strings["Enter a new album name"] = "Introducir un nuevo nombre de álbum";
$a->strings["or select an existing one (doubleclick)"] = "o seleccionar uno (doble click) existente";
@ -1370,7 +1370,7 @@ $a->strings["Friend suggestion sent."] = "Enviar sugerencia a un amigo.";
$a->strings["Suggest Friends"] = "Sugerir amigos";
$a->strings["Suggest a friend for %s"] = "Sugerir un amigo a %s";
$a->strings["Hub not found."] = "Servidor no encontrado";
$a->strings["Poke/Prod"] = "Dar un toque/Incitar";
$a->strings["Poke/Prod"] = "Toque/Incitación";
$a->strings["poke, prod or do other things to somebody"] = "dar un toque, incitar u otras cosas a alguien";
$a->strings["Recipient"] = "Destinatario";
$a->strings["Choose what you wish to do to recipient"] = "Elegir qué desea enviar al destinatario";
@ -1538,10 +1538,6 @@ $a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for t
$a->strings["OpenID protocol error. No ID returned."] = "Error del protocolo OpenID. Ningún ID recibido como respuesta.";
$a->strings["Welcome %s. Remote authentication successful."] = "Bienvenido %s. La identificación desde su servidor se ha llevado a cabo correctamente.";
$a->strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s ha etiquetado la %3\$s de %2\$s con %4\$s";
$a->strings["Export Channel"] = "Exportar el canal";
$a->strings["Export your basic channel information to a small file. This acts as a backup of your connections, permissions, profile and basic data, which can be used to import your data to a new hub, but\tdoes not contain your content."] = "Exportar la base de datos de su canal a un pequeño fichero. Este podrá servir como una copia de seguridad de sus conexiones, permisos, perfil y datos básicos, que podrá importar a un nuevo canal, pero sin sus contenidos.";
$a->strings["Export Content"] = "Exportar contenidos";
$a->strings["Export your channel information and all the content to a JSON backup. This backs up all of your connections, permissions, profile data and all of your content, but is generally not suitable for importing a channel to a new hub as this file may be VERY large. Please be patient - it may take several minutes for this download to begin."] = "Exportar toda la información del canal y todo su contenido a un fichero JSON. Este contendrá todas sus conexiones, permisos, información del perfil y todo su contenido, Sin embargo, a menudo, no será una buena solución para importarlo en una nueva instancia, pues el fichero será MUY voluminoso. Por favor, tenga paciencia - pueden pasar muchos minutos antes de que comience la carga.";
$a->strings["No connections."] = "Sin conexiones.";
$a->strings["Visit %s's profile [%s]"] = "Visitar el perfil de %s [%s]";
$a->strings["invalid target signature"] = "La firma recibida no es válida";
@ -1888,7 +1884,7 @@ $a->strings["Someone writes a followup comment"] = "Alguien escriba un comentari
$a->strings["You receive a private message"] = "Reciba un mensaje privado";
$a->strings["You receive a friend suggestion"] = "Reciba una sugerencia de amistad";
$a->strings["You are tagged in a post"] = "Usted ha sido etiquetado en una publicación";
$a->strings["You are poked/prodded/etc. in a post"] = "Recibir un toque o incitación en una publicación";
$a->strings["You are poked/prodded/etc. in a post"] = "Reciba un toque o incitación en una entrada";
$a->strings["Show visual notifications including:"] = "Mostrar notificaciones visuales que incluyan:";
$a->strings["Unseen matrix activity"] = "Actividad no vista en la red";
$a->strings["Unseen channel activity"] = "Actividad no vista en el canal";
@ -1933,6 +1929,28 @@ $a->strings["Conversation removed."] = "Conversación eliminada.";
$a->strings["No messages."] = "Sin mensajes.";
$a->strings["Delete conversation"] = "Eliminar conversación";
$a->strings["D, d M Y - g:i A"] = "D d M Y - G:i";
$a->strings["Export Channel"] = "Exportar el canal";
$a->strings["Export your basic channel information to a file. This acts as a backup of your connections, permissions, profile and basic data, which can be used to import your data to a new server hub, but does not contain your content."] = "Exportar la información básica del canal a un fichero. Este equivale a una copia de seguridad de sus conexiones, el perfil y datos fundamentales, que puede usarse para importar sus datos a un nuevo servidor, pero no incluye su contenido.";
$a->strings["Export Content"] = "Exportar contenidos";
$a->strings["Export your channel information and recent content to a JSON backup that can be restored or imported to another server hub. This backs up all of your connections, permissions, profile data and several months of posts. This file may be VERY large. Please be patient - it may take several minutes for this download to begin."] = "Exportar la información sobre su canal y el contenido reciente a un fichero de respaldo JSON, que puede ser restaurado o importado a otro servidor. Este fichero incluye todas sus conexiones, permisos, datos del perfil y publicaciones de varios meses. Puede llegar a ser MUY grande. Por favor, sea paciente, la descarga puede tardar varios minutos en comenzar.";
$a->strings["Export your posts from a given year or month:"] = "Exporta sus entradas de un año o mes determinados.";
$a->strings["You may also export your posts and conversations for a particular year or month. Click on one of the recent years or months below."] = "También puede exportar sus entradas y conversaciones de un año o mes en particular. Hágalo en primer lugar con uno de los años o meses más recientes.";
$a->strings["Jan"] = "Ene";
$a->strings["Feb"] = "Feb";
$a->strings["Mar"] = "Mar";
$a->strings["Apr"] = "Abr";
$a->strings["Jun"] = "Jun";
$a->strings["Jul"] = "Jul";
$a->strings["Aug"] = "Ago";
$a->strings["Sep"] = "Sep";
$a->strings["Oct"] = "Oct";
$a->strings["Nov"] = "Nov";
$a->strings["Dec"] = "Dic";
$a->strings["If the export fails (possibly due to memory exhaustion on your server hub), please try again selecting a more limited date range."] = "Si la exportación falla (posiblemente debido al agotamiento de la memoria del servidor hub), por favor, inténtelo de nuevo seleccionando un rango de fechas más pequeño.";
$a->strings["Or adjust the date in your browser location bar to select other dates. For example the year 2013; <a href=\"%1\$s/2013\">%1\$s/2013</a> or the month September 2013; <a href=\"%1\$s/2013/9\">%1\$s/2013/9</a>"] = "Ajuste la fecha en la barra de direcciones del navegador para seleccionar otras fechas. Por ejemlo, el año 2013: <a href=\"%1\$s/2013\">%1\$s/2013</a> o el mes de septiembre de 2013: <a href=\"%1\$s/2013/9\">%1\$s/2013/9</a>";
$a->strings["Please visit"] = "Por favor, visite";
$a->strings["on another hub to import the backup files(s)."] = "en otro servidor hub para importar el fichero (s) de copia de seguridad.";
$a->strings["We advise you to clone the channel on the new hub first and than to import the backup file(s) (from the same channel) in chronological order. Importing the backup files into another channel will certainly give permission issues."] = "Aviso: al clonar el canal en un nuevo servidor hub, en primer lugar tiene que importar el fichero (s) con las copias de seguridad (desde el mismo canal) en orden cronológico. Importar los ficheros de copia de seguridad en otro canal le dará, con toda seguridad, problemas de permisos.";
$a->strings["Set your current mood and tell your friends"] = "Describir su estado de ánimo para comunicárselo a sus amigos";
$a->strings["Total votes"] = "Total de votos";
$a->strings["Average Rating"] = "Valoración media";
@ -2009,15 +2027,15 @@ $a->strings["Unable to communicate with requested channel."] = "Imposible comuni
$a->strings["Cannot verify requested channel."] = "No se puede verificar el canal solicitado.";
$a->strings["Selected channel has private message restrictions. Send failed."] = "El canal seleccionado tiene restricciones sobre los mensajes privados. El envío falló.";
$a->strings["Message deleted."] = "Mensaje eliminado.";
$a->strings["Message recalled."] = "Mensaje recuperado.";
$a->strings["Message recalled."] = "Mensaje revocado.";
$a->strings["Send Private Message"] = "Enviar un mensaje privado";
$a->strings["To:"] = "Para:";
$a->strings["Subject:"] = "Asunto:";
$a->strings["Send"] = "Enviar";
$a->strings["Message not found."] = "No se encuentra el mensaje.";
$a->strings["Delete message"] = "Mensaje eliminado";
$a->strings["Recall message"] = "Recuperar el mensaje";
$a->strings["Message has been recalled."] = "El mensaje ha sido recuperado.";
$a->strings["Recall message"] = "Revocar el mensaje";
$a->strings["Message has been recalled."] = "El mensaje ha sido revocado.";
$a->strings["Private Conversation"] = "Conversación privada";
$a->strings["No secure communications available. You <strong>may</strong> be able to respond from the sender's profile page."] = "Comunicación segura no disponible. Pero <strong>puede</strong> responder desde la página de perfil del remitente.";
$a->strings["Send Reply"] = "Responder";
@ -2102,8 +2120,8 @@ $a->strings["Item float"] = "Elemento flotante";
$a->strings["Left offset of the section element"] = "Desplazamiento izquierdo del elemento de la sección";
$a->strings["Right offset of the section element"] = "Desplazamiento derecho del elemento de la sección";
$a->strings["Section width"] = "Ancho de la sección";
$a->strings["Left offset of the aside"] = "Desplazamiento izquierdo del lateral";
$a->strings["Right offset of the aside element"] = "Desplazamiento derecho del elemento lateral";
$a->strings["Left offset of the aside"] = "Desplazamiento izquierdo del panel lateral";
$a->strings["Right offset of the aside element"] = "Desplazamiento derecho del elemento del panel lateral";
$a->strings["Light (Red Matrix default)"] = "Ligero (predeterminado de RedMatrix)";
$a->strings["Select scheme"] = "Elegir un esquema";
$a->strings["Narrow navbar"] = "Estrechar la barra de navegación";
@ -2145,5 +2163,5 @@ $a->strings["Forgot your password?"] = "¿Olvidó su contraseña?";
$a->strings["toggle mobile"] = "cambiar a modo móvil";
$a->strings["Website SSL certificate is not valid. Please correct."] = "El certificado SSL del sitio web no es válido. Por favor, corríjalo.";
$a->strings["[red] Website SSL error for %s"] = "[red] Error SSL del sitio web en %s";
$a->strings["Cron/Scheduled tasks not running."] = "Las tareas del Planificador/Cron no se están funcionando.";
$a->strings["Cron/Scheduled tasks not running."] = "Las tareas del Planificador/Cron no están funcionando.";
$a->strings["[red] Cron tasks not running on %s"] = "[red] Las tareas de Cron no están funcionando en %s";

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -88,6 +88,14 @@ function basic_replace(item) {
return '$1'+item.name+' ';
}
function trim_replace(item) {
if(typeof item.replace !== 'undefined')
return '$1'+item.replace;
return '$1'+item.name;
}
function submit_form(e) {
$(e).parents('form').submit();
}
@ -163,3 +171,29 @@ function submit_form(e) {
a.on('textComplete:select', function(e, value, strategy) { onselect(value); });
};
})( jQuery );
(function( $ ) {
$.fn.name_autocomplete = function(backend_url, typ, autosubmit, onselect) {
if(typeof typ === 'undefined') typ = '';
if(typeof autosubmit === 'undefined') autosubmit = false;
// Autocomplete contacts
names = {
match: /(^)([^\n]+)$/,
index: 2,
search: function(term, callback) { contact_search(term, callback, backend_url, typ,[], spinelement=false); },
replace: trim_replace,
template: contact_format,
};
this.attr('autocomplete','off');
var a = this.textcomplete([names], {className:'acpopup', zIndex:1020});
if(autosubmit)
a.on('textComplete:select', function(e,value,strategy) { submit_form(this); });
if(typeof onselect !== 'undefined')
a.on('textComplete:select', function(e, value, strategy) { onselect(value); });
};
})( jQuery );

View file

@ -112,12 +112,12 @@ function insertbbcomment(comment, BBcode, id) {
return true;
}
function inserteditortag(BBcode) {
function inserteditortag(BBcode, id) {
// allow themes to override this
if(typeof(insertEditorFormatting) != 'undefined')
return(insertEditorFormatting(BBcode));
textarea = document.getElementById('profile-jot-text');
textarea = document.getElementById(id);
if (document.selection) {
textarea.focus();
selected = document.selection.createRange();
@ -616,11 +616,12 @@ function updateConvItems(mode,data) {
function collapseHeight() {
$(".wall-item-content, .directory-collapse").each(function() {
var orgHeight = $(this).height();
var orgHeight = $(this).outerHeight(true);
if(orgHeight > divmore_height + 10) {
if(! $(this).hasClass('divmore')) {
$(this).readmore({
speed: 0,
heightMargin: 50,
collapsedHeight: divmore_height,
moreLink: '<a href="#" class="divgrow-showmore">' + aStr.divgrowmore + '</a>',
lessLink: '<a href="#" class="divgrow-showmore">' + aStr.divgrowless + '</a>',
@ -745,12 +746,12 @@ function justifyPhotos() {
margins: 3,
border: 0,
sizeRangeSuffixes: {
'lt100': '-2',
'lt240': '-2',
'lt320': '-2',
'lt500': '',
'lt640': '-1',
'lt1024': '-0'
'lt100': '-3',
'lt240': '-3',
'lt320': '-3',
'lt500': '-2',
'lt640': '-2',
'lt1024': '-1'
}
}).on('jg.complete', function(e){ justifiedGalleryActive = false; });
}

View file

@ -1,5 +1,5 @@
$(document).ready(function() {
$("#recip").contact_autocomplete(baseurl + '/acl', '', false, function(data) {
$("#recip").name_autocomplete(baseurl + '/acl', '', false, function(data) {
$("#recip-complete").val(data.xid);
});
});

View file

@ -6,10 +6,9 @@
var ispublic = aStr.everybody;
$(document).ready(function() {
$(document).ready(function() {
$("#photo-edit-newtag").contact_autocomplete(baseurl + '/acl', 'p', false, function(data) {
$("#photo-edit-newtag").val('@' + data.name);
});
$("#photo-edit-newtag").contact_autocomplete(baseurl + '/acl', 'p', false, function(data) {
$("#photo-edit-newtag").val('@' + data.name);
});
$('#contact_allow, #contact_deny, #group_allow, #group_deny').change(function() {
@ -24,4 +23,14 @@ $(document).ready(function() {
$('#jot-public').show();
}
}).trigger('change');
showHideBodyTextarea();
});
function showHideBodyTextarea() {
if( $('#id_visible').is(':checked'))
$('#body-textarea').slideDown();
else
$('#body-textarea').slideUp();
}

View file

@ -1,5 +1,5 @@
$(document).ready(function() {
$("#poke-recip").contact_autocomplete(baseurl + '/acl', 'a', false, function(data) {
$("#poke-recip").name_autocomplete(baseurl + '/acl', 'a', false, function(data) {
$("#poke-recip-complete").val(data.id);
});
});

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,10 +1,10 @@
Hey,
I'm the RedMatrix hub at {{$sitename}};
I'm the Hubzilla hub at {{$sitename}};
The Red atrix developers released update {{$update}} recently,
The Hubzilla developers released update {{$update}} recently,
but when I tried to install it, something went terribly wrong.
This needs to be fixed soon and it requires human intervention.
Please contact a RedMatrix developer if you can not figure out how to
Please contact a Hubzilla developer if you can not figure out how to
fix it on your own. My database might be invalid.
The error message is '{{$error}}'.

View file

@ -129,7 +129,7 @@ pre code {
code {
font-size: 1em;
padding: 5px;
padding: 1em;
border: 1px solid #ccc;
background: #ccc;
color: #000;
@ -794,11 +794,11 @@ a.rateme, div.rateme {
}
#nav-search-text::-webkit-input-placeholder {
font-family: FontAwesome;
font-family: FontAwesome, sans-serif;
}
#nav-search-text::-moz-placeholder {
font-family: FontAwesome;
font-family: FontAwesome, sans-serif;
}
nav .acpopup {
@ -1432,7 +1432,10 @@ a.rconnect:hover, a.rateme:hover, div.rateme:hover {
.profile-match-connect { margin-top: 5px; }
.reshared-content { margin-left: 20px; }
.shared_header img { margin-right: 10px; }
.shared_header img {
border-radius: $radiuspx;
margin-right: 10px;
}
.tag1 {
font-size : 0.9em !important;
@ -1527,22 +1530,6 @@ a .drop-icons:hover {
color: #FF0000;
}
.attachlink {
float: left;
border: 1px solid black;
padding: 5px;
margin-right: 8px;
}
.attach-icons {
font-size: 1.4em;
}
.attach-clip {
margin-right: 3px;
font-size: 1.8em;
}
#menulist {
list-style-type: none;
}
@ -1634,40 +1621,56 @@ img.mail-conv-sender-photo {
}
/* conversation */
.wall-item-title {
font-size: $font_size;
.nsfw-wrap {
text-align: center;
font-size: $body_font_size;
}
.hide-comments-outer,
.thread-wrapper .wall-item-comment-wrapper,
.wall-item-content-wrapper.comment {
margin-left: $comment_indent;
.wall-item-head {
padding: 10px 10px 0.5em 10px;
}
.wall-item-content {
padding: 0.5em 10px;
}
.wall-photo-item {
/*padding: 0.5em 10px;*/
}
.wall-photo-item img {
max-width: 100% !important;
border-top-right-radius: $radiuspx;
border-top-left-radius: $radiuspx;
}
.wall-item-tools {
padding: 0.5em 10px 10px 10px;
}
.wall-item-title {
font-size: $font_size;
}
.wall-item-content-wrapper {
background-color: $item_colour;
padding: 10px;
border-top-right-radius: $radiuspx;
border-top-left-radius: $radiuspx;
}
.wall-item-content-wrapper.comment {
background-color: $comment_item_colour;
border-color: $comment_border_colour;
border-style: solid;
border-width: 0px 0px 0px 3px;
border-radius: 0px;
padding: 7px 10px 7px 7px;
border-top-right-radius: 0px;
border-top-left-radius: 0px;
}
.hide-comments-outer {
background-color: $comment_item_colour;
border-color: $comment_border_colour;
border-top-color: #ccc;
border-style: solid;
border-top-style: dashed;
border-width: 1px 0px 0px 3px;
border-width: 1px 0px 0px 0px;
text-align: center;
border-radius: 0px;
}
@ -1682,11 +1685,11 @@ img.mail-conv-sender-photo {
border-radius: 0px;
border-bottom-right-radius: $radiuspx;
border-bottom-left-radius: $radiuspx;
margin-top: 3px;
border-top: 3px solid $comment_item_colour;
}
.wall-item-comment-wrapper-wc {
margin-top: 0px;
border-top: 0px solid $comment_item_colour;
}
.wall-item-like,
@ -1722,6 +1725,7 @@ img.mail-conv-sender-photo {
}
.wall-item-content,
.mail-conv-body,
.page-body {
font-size: $font_size;
clear: both;
@ -1770,7 +1774,6 @@ img.mail-conv-sender-photo {
.divgrow-showmore:hover {
border-top: 1px dashed #adadad;
text-decoration: underline;
}
@ -1868,7 +1871,6 @@ nav .dropdown-menu {
border: 1px solid #ccc;
box-shadow: 0px 0px 5px 1px rgba(0,0,0,0.2);
border-radius: $radiuspx;
background-color: #fff;
}
.section-title-wrapper {
@ -1876,7 +1878,7 @@ nav .dropdown-menu {
background-color: $item_colour;
border-top-left-radius: $radiuspx;
border-top-right-radius: $radiuspx;
margin-bottom: 3px;
border-bottom: 3px solid $comment_item_colour;
}
.section-title-wrapper h2,
@ -1891,20 +1893,20 @@ nav .dropdown-menu {
.section-subtitle-wrapper {
padding: 7px 10px;
background-color: $item_colour;
margin-bottom: 3px;
border-bottom: 3px solid $comment_item_colour;
}
.section-content-tools-wrapper {
padding: 7px 10px;
background-color: $comment_item_colour;
margin-bottom: 3px
border-bottom: 3px solid $comment_item_colour;
}
.section-content-info-wrapper {
padding: 21px 10px;
color: #31708f;
background-color: #d9edf7;
margin-bottom: 3px;
border-bottom: 3px solid $comment_item_colour;
text-align: center;
}
@ -1912,7 +1914,7 @@ nav .dropdown-menu {
padding: 21px 10px;
color: #8a6d3b;
background-color: #fcf8e3;
margin-bottom: 3px;
border-bottom: 3px solid $comment_item_colour;
text-align: center;
}
@ -1920,7 +1922,7 @@ nav .dropdown-menu {
padding: 21px 10px;
color: #a94442;
background-color: #f2dede;
margin-bottom: 3px;
border-bottom: 3px solid $comment_item_colour;
text-align: center;
}

View file

@ -5,13 +5,26 @@
.vcard, #contact-block, .widget {
background-color: transparent;
border-bottom: 1px solid #fff;
border-bottom: 1px solid #333;
border-radius: 0px
}
#profile-photo-wrapper {
border:none;
}
.photo {
box-shadow: none;
}
.abook-pending-contact, .abook-permschange {
background: #402900;
}
.contact-entry-wrapper {
border: 1px solid #333;
}
#cboxContent a {
color: #000;
}
@ -75,7 +88,7 @@
background-color: #111;
}
.btn-default {
.btn {
background-color: #1e1e1e;
border-color: #222;
color: #ccc;
@ -83,7 +96,7 @@
box-shadow: none;
}
.btn-default:hover, .btn-default:focus, .btn-default:active .btn-default.active {
.btn:hover, .btn:focus, .btn:active {
background-color: #222;
border-color: #222;
color: #fff;
@ -94,6 +107,40 @@
text-decoration: none;
}
.btn-primary, input#event-submit, input#rmagic-submit-button, input#lostpass-submit-button {
background-color: #337AB7;
color: #FFF;
}
.btn-primary:hover, .btn-primary:focus, input#event-submit:hover, input#event-submit:focus, input#rmagic-submit-button:hover, input#rmagic-submit-button:focus, input#lostpass-submit-button:hover, input#lostpass-submit-button:focus {
border-color: #204D74;
background-color: #286090;
color: #FFF;
}
.btn-success {
color: #FFF;
background-color: #5CB85C;
border-color: #4CAE4C;
}
.btn-success:hover, .btn-success:focus {
color: #FFF;
background-color: #449D44;
border-color: #398439;
}
.btn-danger {
background-color: #D9534F;
border-color: #D43F3A;
color: #FFF;
}
.btn-danger:hover, .btn-danger:focus {
color: #FFF;
background-color: #C9302C;
border-color: #AC2925;
}
.pager_first,
.pager_last,
.pager_prev,
@ -177,6 +224,7 @@ nav .dropdown-menu {
text-decoration: underline;
background-color: #222;
color: #ccc;
border-color: #333;
}
aside .nav > li > a:hover, aside .nav > li > a:focus {
@ -251,6 +299,18 @@ pre {
background: url('../img/gray_and_black_diagonal_stripes_background_seamless.gif');
}
.xdsoft_datepicker.active {
color: #222 !important;
text-decoration: none !important;
}
.xdsoft_datepicker.active:hover, .xdsoft_datepicker.active:focus {
color: #222 !important;
text-decoration: underline;
}
@media (min-width: 768px) {
.nav-tabs.nav-justified > li > a {
border-bottom: 1px solid #333;

View file

@ -16,8 +16,8 @@
{{include file="field_colorinput.tpl" field=$background_image}}
{{include file="field_colorinput.tpl" field=$item_colour}}
{{include file="field_colorinput.tpl" field=$comment_item_colour}}
{{include file="field_colorinput.tpl" field=$comment_border_colour}}
{{include file="field_input.tpl" field=$comment_indent}}
{{*include file="field_colorinput.tpl" field=$comment_border_colour*}}
{{*include file="field_input.tpl" field=$comment_indent*}}
{{include file="field_input.tpl" field=$body_font_size}}
{{include file="field_input.tpl" field=$font_size}}
{{include file="field_colorinput.tpl" field=$font_colour}}

View file

@ -1,23 +1,25 @@
<div class="app-container">
<div class="app-detail">
<a href="{{$app.url}}" {{if $ap.target}}target="{{$ap.target}}" {{/if}}{{if $app.desc}}title="{{$app.desc}}{{if $app.price}} ({{$app.price}}){{/if}}"{{else}}title="{{$app.name}}"{{/if}}><img src="{{$app.photo}}" width="80" height="80" />
<div class="app-name" style="text-align:center;">{{$app.name}}</div>
</a>
{{if $app.type !== 'system'}}
{{if $purchase}}
<a href="{{$app.page}}" class="btn btn-default" title="{{$purchase}}" ><i class="icon-external"></i></a>
{{/if}}
</div>
{{if $install || $update || $delete }}
<div class="app-tools">
<form action="{{$hosturl}}appman" method="post">
<input type="hidden" name="papp" value="{{$app.papp}}" />
{{if $install}}<button type="submit" name="install" value="{{$install}}" class="btn btn-default" title="{{$install}}" ><i class="icon-download-alt" ></i></button>{{/if}}
{{if $edit}}<input type="hidden" name="appid" value="{{$app.guid}}" /><button type="submit" name="edit" value="{{$edit}}" class="btn btn-default" title="{{$edit}}" ><i class="icon-pencil" ></i></button>{{/if}}
{{if $delete}}<button type="submit" name="delete" value="{{$delete}}" class="btn btn-default" title="{{$delete}}" ><i class="icon-trash drop-icons"></i></button>{{/if}}
</form>
{{/if}}
{{/if}}
</div>
<div class="app-detail">
<a href="{{$app.url}}" {{if $ap.target}}target="{{$ap.target}}" {{/if}}{{if $app.desc}}title="{{$app.desc}}{{if $app.price}} ({{$app.price}}){{/if}}"{{else}}title="{{$app.name}}"{{/if}}><img src="{{$app.photo}}" width="80" height="80" />
<div class="app-name" style="text-align:center;">{{$app.name}}</div>
</a>
</div>
{{if $app.type !== 'system'}}
{{if $purchase}}
<div class="app-purchase">
<a href="{{$app.page}}" class="btn btn-default" title="{{$purchase}}" ><i class="icon-external"></i></a>
</div>
{{/if}}
{{if $install || $update || $delete }}
<div class="app-tools">
<form action="{{$hosturl}}appman" method="post">
<input type="hidden" name="papp" value="{{$app.papp}}" />
{{if $install}}<button type="submit" name="install" value="{{$install}}" class="btn btn-default" title="{{$install}}" ><i class="icon-download-alt" ></i></button>{{/if}}
{{if $edit}}<input type="hidden" name="appid" value="{{$app.guid}}" /><button type="submit" name="edit" value="{{$edit}}" class="btn btn-default" title="{{$edit}}" ><i class="icon-pencil" ></i></button>{{/if}}
{{if $delete}}<button type="submit" name="delete" value="{{$delete}}" class="btn btn-default" title="{{$delete}}" ><i class="icon-trash drop-icons"></i></button>{{/if}}
</form>
</div>
{{/if}}
{{/if}}
</div>

View file

@ -2,6 +2,7 @@
<form action="chat" method="post" >
{{include file="field_input.tpl" field=$name}}
{{include file="field_input.tpl" field=$chat_expire}}
<button id="dbtn-acl" class="btn btn-default" data-toggle="modal" data-target="#aclModal" onclick="return false;" >{{$permissions}}</button>
{{$acl}}
<div class="clear"></div>

View file

@ -8,6 +8,7 @@
<div class="clear"></div>
</div>
<div id="files-upload-tools" class="section-content-tools-wrapper form-group">
{{if $quota.limit || $quota.used}}<div class="{{if $quota.warning}}section-content-danger-wrapper{{else}}section-content-info-wrapper{{/if}}">{{if $quota.warning}}<strong>{{$quota.warning}} </strong>{{/if}}{{$quota.desc}}</div>{{/if}}
<label for="files-upload">{{$upload_header}}</label>
<form method="post" action="" enctype="multipart/form-data">
<input type="hidden" name="sabreAction" value="put">

View file

@ -4,8 +4,8 @@
{{if $is_owner}}
<a href="/sharedwithme" class="btn btn-xs btn-default"><i class="icon-cloud-download"></i>&nbsp;{{$shared}}</a>
{{/if}}
<button id="files-create-btn" class="btn btn-xs btn-primary" title="{{if $quota.limit || $quota.used}}{{$quota.desc}}{{/if}}" onclick="openClose('files-mkdir-tools'); closeMenu('files-upload-tools');"><i class="icon-folder-close-alt"></i>&nbsp;{{$create}}</button>
<button id="files-upload-btn" class="btn btn-xs btn-success" title="{{if $quota.limit || $quota.used}}{{$quota.desc}}{{/if}}" onclick="openClose('files-upload-tools'); closeMenu('files-mkdir-tools');"><i class="icon-upload"></i>&nbsp;{{$upload}}</button>
<button id="files-create-btn" class="btn btn-xs btn-primary" onclick="openClose('files-mkdir-tools'); closeMenu('files-upload-tools');"><i class="icon-folder-close-alt"></i>&nbsp;{{$create}}</button>
<button id="files-upload-btn" class="btn btn-xs btn-success" onclick="openClose('files-upload-tools'); closeMenu('files-mkdir-tools');"><i class="icon-upload"></i>&nbsp;{{$upload}}</button>
</div>
{{/if}}
<h2>{{$header}}</h2>

View file

@ -4,6 +4,7 @@
</div>
<div class="contact-entry-photo-end" ></div>
<a href="{{$contact.url}}" title="{{$contact.img_hover}}" ><div class="contact-entry-name" id="contact-entry-name-{{$contact.id}}" >{{$contact.name}}</div></a>
<div class="contact-entry-name-end" ></div>
<div class="contact-entry-edit btn btn-default"><a href="{{$contact.link}}"><i class="icon-pencil connection-edit-icons"></i> {{$contact.edit}}</a></div>
<div class="contact-entry-end" ></div>
</div>

Some files were not shown because too many files have changed in this diff Show more