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: The OpenShift `php` cartridge documentation can be found at:
http://openshift.github.io/documentation/oo_cartridge_guide.html#php http://openshift.github.io/documentation/oo_cartridge_guide.html#php

View file

@ -155,7 +155,7 @@ fi
echo "Now chmod 777 -R poller" 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." 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 ### 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 Hubzilla - Community Server
=========================== ===========================
@ -5,7 +6,6 @@ Hubzilla - Community Server
Help us redefine the web - using integrated and united community websites. Help us redefine the web - using integrated and united community websites.
-------------------------------------------------------------------------- --------------------------------------------------------------------------
![Hubzilla](images/hubzilla_house_arrows.png)
**What are Hubs?** **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 ( 'RED_VERSION', trim(file_get_contents('version.inc')) . 'H');
define ( 'ZOT_REVISION', 1 ); define ( 'ZOT_REVISION', 1 );
define ( 'DB_UPDATE_VERSION', 1156 ); define ( 'DB_UPDATE_VERSION', 1158 );
/** /**
* @brief Constant with a HTML line break. * @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. ###Websites. Redefined.
![Hubzilla](images/ghash-32.png) ![Hubzilla](../images/hz-32.png)
**What are Hubs?** **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 * photo_rand - display a random photo from one of your photo albums. Photo permissions are honoured
* args: * args:
* album - album name (very strongly recommended if you have lots of photos) * 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 * style - CSS style string
* channel_id - if not your own * channel_id - if not your own
<br />&nbsp;<br /> <br />&nbsp;<br />

View file

@ -4,9 +4,11 @@
[zrl=[baseurl]/help/install]Install[/zrl] [zrl=[baseurl]/help/install]Install[/zrl]
[zrl=[baseurl]/help/red2pi]Installing $Projectname on the Raspberry Pi[/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/troubleshooting]Troubleshooting Tips[/zrl]
[zrl=[baseurl]/help/hidden_configs]Tweaking $Projectname's Hidden Configurations[/zrl] [zrl=[baseurl]/help/hidden_configs]Tweaking $Projectname's Hidden Configurations[/zrl]
[zrl=[baseurl]/help/faq_admins]FAQ For Admins[/zrl] [zrl=[baseurl]/help/faq_admins]FAQ For Admins[/zrl]
[zrl=[baseurl]/help/service_classes]Service Classes[/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 [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] [/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]$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] [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] [ul]
[*]title: the title of the posting [*]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 [*]category: a comma-seperated list of categories for the posting
[*]status: the content of the posting, formatted with BBCode [*]status: the content of the posting, formatted with BBCode
OR OR
[*]htmlstatus:the content of the posting, formatted in HTML. [*]htmlstatus:the content of the posting, formatted in HTML.
[/ul] [/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. 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] [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. This is used to protect private messages and posts in transit.
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.
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. 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> <!DOCTYPE html>
<html> <html>
<head> <head>
<<<<<<< HEAD
<title>Hubzilla Doxygen API Documentation</title>
</head>
<body>
<h1>Hubzilla Doxygen API Documentation not rendered</h1>
=======
<title>$Projectname Doxygen API Documentation</title> <title>$Projectname Doxygen API Documentation</title>
</head> </head>
<body> <body>
<h1>$Projectname Doxygen API Documentation not rendered</h1> <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). 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> <pre>
$ doxygen util/Doxyfile $ 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]Documentation - see Red Documentation Project To-Do List[/li]
[li]Include TOS link in registration/verification email[/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]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]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]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]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] [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]Finish the anti-spam bayesian engine[/li]
[li]implement an email permission denied bounce message from the sys channel[/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]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]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 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]implement oembed provider interface[/li]
[li]refactor the oembed client interface so that we can safely sandbox remote content[/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] [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]restricted access OAuth clients[/li]
[li](Advanced) create a UI for building Comanche pages[/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](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 - create standard interface[/li]
[li]External post connectors, add popular services[/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 - 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](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]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]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]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]Import channel from Diaspora/Friendica (Diaspora partially done)[/li]
[li]MediaGoblin photo "crosspost" connector[/li] [li]MediaGoblin photo "crosspost" connector[/li]
[li]Create management page/UI for extensible profile fields[/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]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]App taxonomy[/li]
[li]Customisable App collection pages[/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] [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(); $children = $this->get_children();
$has_tags = (($body['tags'] || $body['categories'] || $body['mentions'] || $body['attachments'] || $body['folders']) ? true : false);
$tmp_item = array( $tmp_item = array(
'template' => $this->get_template(), 'template' => $this->get_template(),
'mode' => $mode, 'mode' => $mode,
'type' => implode("",array_slice(explode("/",$item['verb']),-1)), 'type' => implode("",array_slice(explode("/",$item['verb']),-1)),
'tags' => array(), 'body' => $body['html'],
'body' => $body, 'tags' => $body['tags'],
'text' => strip_tags($body), 'categories' => $body['categories'],
'mentions' => $body['mentions'],
'attachments' => $body['attachments'],
'folders' => $body['folders'],
'text' => strip_tags($body['html']),
'id' => $this->get_id(), 'id' => $this->get_id(),
'mid' => $item['mid'], 'mid' => $item['mid'],
'isevent' => $isevent, 'isevent' => $isevent,
@ -325,6 +331,8 @@ class Item extends BaseObject {
'owner_url' => $this->get_owner_url(), 'owner_url' => $this->get_owner_url(),
'owner_photo' => $this->get_owner_photo(), 'owner_photo' => $this->get_owner_photo(),
'owner_name' => $this->get_owner_name(), 'owner_name' => $this->get_owner_name(),
'photo' => $body['photo'],
'has_tags' => $has_tags,
// Item toolbar buttons // Item toolbar buttons
'like' => $like, 'like' => $like,

View file

@ -217,31 +217,6 @@ class RedBrowser extends DAV\Browser\Plugin {
$f[] = $ft; $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 = ''; $output = '';
if ($this->enablePost) { if ($this->enablePost) {
$this->server->broadcastEvent('onHTMLActionsPanel', array($parent, &$output)); $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( $html .= replace_macros(get_markup_template('cloud.tpl'), array(
'$header' => t('Files') . ": " . $this->escapeHTML($path) . "/", '$header' => t('Files') . ": " . $this->escapeHTML($path) . "/",
'$quota' => $quota,
'$total' => t('Total'), '$total' => t('Total'),
'$actionspanel' => $output, '$actionspanel' => $output,
'$shared' => t('Shared'), '$shared' => t('Shared'),
@ -298,11 +272,38 @@ class RedBrowser extends DAV\Browser\Plugin {
if (get_class($node) === 'Sabre\\DAV\\SimpleCollection') if (get_class($node) === 'Sabre\\DAV\\SimpleCollection')
return; 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( $output .= replace_macros(get_markup_template('cloud_actionspanel.tpl'), array(
'$folder_header' => t('Create new folder'), '$folder_header' => t('Create new folder'),
'$folder_submit' => t('Create'), '$folder_submit' => t('Create'),
'$upload_header' => t('Upload file'), '$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/security.php');
require_once('include/photos.php'); require_once('include/photos.php');
require_once('include/items.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); 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) { function api_albums(&$a,$type) {
json_return_and_die(photos_albums_list($a->get_channel(),$a->get_observer())); 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){ function api_statuses_mentions(&$a, $type){
if (api_user()===false) return false; if (api_user()===false) return false;
@ -1481,39 +1512,25 @@ require_once('include/items.php');
$myurl = str_replace(array('www.','.'),array('','\\.'),$myurl); $myurl = str_replace(array('www.','.'),array('','\\.'),$myurl);
$diasp_url = str_replace('/channel/','/u/',$myurl); $diasp_url = str_replace('/channel/','/u/',$myurl);
if (get_config('system','use_fulltext_engine')) $sql_extra .= " AND item_mentionsme = 1 ";
$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 . ']%'))
);
if ($max_id > 0) 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`, require_once('include/security.php');
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, $item_normal = item_normal();
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn_id`, `contact`.`self`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid` $r = q("select * from item where uid = " . intval(api_user()) . "
FROM `item`, `contact` $item_normal $sql_extra
WHERE `item`.`uid` = %d AND id > %d group by mid
AND `item`.`visible` = 1 and `item`.`moderated` = 0 AND `item`.`deleted` = 0 order by received desc LIMIT %d OFFSET %d ",
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']),
intval($since_id), intval($since_id),
intval($start), intval($count) intval($count),
intval($start)
); );
xchan_query($r,true);
$ret = api_format_items($r,$user_info); $ret = api_format_items($r,$user_info);

View file

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

View file

@ -181,7 +181,7 @@ function attach_list_files($channel_id, $observer, $hash = '', $filename = '', $
$ret = array('success' => false); $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.'); $ret['message'] = t('Permission denied.');
return $ret; return $ret;
} }
@ -203,7 +203,7 @@ function attach_list_files($channel_id, $observer, $hash = '', $filename = '', $
// Retrieve all columns except 'data' // 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) intval($channel_id)
); );
@ -405,7 +405,6 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
require_once('include/photos.php'); require_once('include/photos.php');
call_hooks('photo_upload_begin',$arr); call_hooks('photo_upload_begin',$arr);
$ret = array('success' => false); $ret = array('success' => false);
@ -416,6 +415,7 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
$newalbum = (($arr) ? $arr['newalbum'] : ''); $newalbum = (($arr) ? $arr['newalbum'] : '');
$hash = (($arr && $arr['hash']) ? $arr['hash'] : null); $hash = (($arr && $arr['hash']) ? $arr['hash'] : null);
$upload_path = (($arr && $arr['directory']) ? $arr['directory'] : ''); $upload_path = (($arr && $arr['directory']) ? $arr['directory'] : '');
$visible = (($arr && $arr['visible']) ? $arr['visible'] : '');
$observer = array(); $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 // 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') { if($options === 'import') {
$src = $arr['src']; $src = $arr['src'];
$filename = $arr['filename']; $filename = $arr['filename'];
$filesize = @filesize($src); $filesize = @filesize($src);
$hash = $arr['resource_id']; $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') { elseif($options !== 'update') {
$f = array('src' => '', 'filename' => '', 'filesize' => 0, 'type' => ''); $f = array('src' => '', 'filename' => '', 'filesize' => 0, 'type' => '');
@ -530,11 +552,21 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
$pathname = ''; $pathname = '';
if($is_photo) { if($is_photo) {
if($newalbum) if($newalbum) {
$pathname = filepath_macro($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); $pathname = filepath_macro($album);
} }
}
else { else {
$pathname = filepath_macro($upload_path); $pathname = filepath_macro($upload_path);
} }
@ -563,7 +595,7 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
} }
} }
else { else {
$folder_hash = ''; $folder_hash = ((($arr) && array_key_exists('folder',$arr)) ? $arr['folder'] : '');
} }
if((! $options) || ($options === 'import')) { if((! $options) || ($options === 'import')) {
@ -630,6 +662,7 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
if(($maxfilesize) && ($filesize > $maxfilesize)) { if(($maxfilesize) && ($filesize > $maxfilesize)) {
$ret['message'] = sprintf( t('File exceeds size limit of %d'), $maxfilesize); $ret['message'] = sprintf( t('File exceeds size limit of %d'), $maxfilesize);
if($remove_when_processed)
@unlink($src); @unlink($src);
call_hooks('photo_upload_end',$ret); call_hooks('photo_upload_end',$ret);
return $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))) { 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); $ret['message'] = upgrade_message(true) . sprintf(t("You have reached your limit of %1$.0f Mbytes attachment storage."), $limit / 1024000);
if($remove_when_processed)
@unlink($src); @unlink($src);
call_hooks('photo_upload_end',$ret); call_hooks('photo_upload_end',$ret);
return $ret; return $ret;
} }
@ -757,7 +792,7 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
if($is_photo) { 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']) if($arr['contact_allow'])
$args['contact_allow'] = $arr['contact_allow']; $args['contact_allow'] = $arr['contact_allow'];
if($arr['group_allow']) if($arr['group_allow'])
@ -780,13 +815,19 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
if($arr['item']) if($arr['item'])
$args['item'] = $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); $p = photo_upload($channel,$observer,$args);
if($p['success']) { if($p['success']) {
$ret['body'] = $p['body']; $ret['body'] = $p['body'];
} }
} }
if($options !== 'update') if(($options !== 'update') && ($remove_when_processed))
@unlink($src); @unlink($src);
if(! $r) { if(! $r) {
@ -959,7 +1000,6 @@ function attach_mkdir($channel, $observer_hash, $arr = null) {
intval($channel['channel_id']), intval($channel['channel_id']),
dbesc($lfile) dbesc($lfile)
); );
if(! $r) { if(! $r) {
logger('attach_mkdir: hash ' . $lfile . ' not found in ' . $lpath); logger('attach_mkdir: hash ' . $lfile . ' not found in ' . $lpath);
$ret['message'] = t('Path not found.'); $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'); $channel_address = (($c) ? $c[0]['channel_address'] : 'notfound');
$photo_sql = (($is_photo) ? " and is_photo = 1 " : ''); $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), dbesc($resource),
intval($channel_id) intval($channel_id)
); );
@ -1241,6 +1281,20 @@ function attach_delete($channel_id, $resource, $is_photo = 0) {
intval($channel_id) 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 // update the parent folder's lastmodified timestamp
$e = q("UPDATE attach SET edited = '%s' WHERE hash = '%s' AND uid = %d", $e = q("UPDATE attach SET edited = '%s' WHERE hash = '%s' AND uid = %d",
dbesc(datetime_convert()), dbesc(datetime_convert()),

View file

@ -305,6 +305,16 @@ function bb2diaspora_itembody($item, $force_update = false) {
$matches = array(); $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)) { if(($item['diaspora_meta']) && (! $force_update)) {
$diaspora_meta = json_decode($item['diaspora_meta'],true); $diaspora_meta = json_decode($item['diaspora_meta'],true);
if($diaspora_meta) { if($diaspora_meta) {

View file

@ -570,7 +570,7 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $cache = false)
$urlchars = '[a-zA-Z0-9\:\/\-\?\&\;\.\=\@\_\~\#\%\$\!\+\,\@]'; $urlchars = '[a-zA-Z0-9\:\/\-\?\&\;\.\=\@\_\~\#\%\$\!\+\,\@]';
if (strpos($Text,'http') !== false) { 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) { if (strpos($Text,'[/share]') !== false) {
@ -582,21 +582,21 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $cache = false)
} }
} }
if (strpos($Text,'[/url]') !== 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" target="_newwin" >$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", '<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" >$1</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" >$2</a>', $Text); $Text = preg_replace("/\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '<a href="$1" target="_newwin" >$2</a>', $Text);
} }
if (strpos($Text,'[/zrl]') !== false) { 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" target="_newwin" >$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", '<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" >$1</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" >$2</a>', $Text); $Text = preg_replace("/\[zrl\=([$URLSearchString]*)\](.*?)\[\/zrl\]/ism", '<a class="zrl" href="$1" target="_newwin" >$2</a>', $Text);
} }
// Perform MAIL Search // Perform MAIL Search
if (strpos($Text,'[/mail]') !== false) { 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" target="_newwin" >$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" >$2</a>', $Text);
} }
// leave open the posibility of [map=something] // 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 video couldn't be embedded, link to it instead.
if (strpos($Text,'[/video]') !== false) { 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) { 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) { 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) { 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){ if ($tryoembed){
@ -904,7 +904,7 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $cache = false)
} }
} else { } else {
if (strpos($Text,'[/iframe]') !== false) { 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'])) if($item['author-link'] && (! $item['author-name']))
$profile_name = $item['author-link']; $profile_name = $item['author-link'];
$tags=array();
$hashtags = array();
$mentions = array();
$sp = false; $sp = false;
$profile_link = best_link_url($item,$sp); $profile_link = best_link_url($item,$sp);
if($sp) if($sp)
@ -678,14 +673,17 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional', $
$unverified = ''; $unverified = '';
$tags=array(); // $tags=array();
$terms = get_terms_oftype($item['term'],array(TERM_HASHTAG,TERM_MENTION,TERM_UNKNOWN)); // $terms = get_terms_oftype($item['term'],array(TERM_HASHTAG,TERM_MENTION,TERM_UNKNOWN));
if(count($terms)) // if(count($terms))
foreach($terms as $tag) // foreach($terms as $tag)
$tags[] = format_term_for_display($tag); // $tags[] = format_term_for_display($tag);
$body = prepare_body($item,true); $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( $tmp_item = array(
'template' => $tpl, 'template' => $tpl,
'toplevel' => 'toplevel_item', 'toplevel' => 'toplevel_item',
@ -699,10 +697,12 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional', $
'lock' => $lock, 'lock' => $lock,
'thumb' => $profile_avatar, 'thumb' => $profile_avatar,
'title' => $item['title'], 'title' => $item['title'],
'body' => $body, 'body' => $body['html'],
'tags' => $tags, 'tags' => $body['tags'],
'hashtags' => $hashtags, 'categories' => $body['categories'],
'mentions' => $mentions, 'mentions' => $body['mentions'],
'attachments' => $body['attachments'],
'folders' => $body['folders'],
'verified' => $verified, 'verified' => $verified,
'unverified' => $unverified, 'unverified' => $unverified,
'forged' => $forged, 'forged' => $forged,
@ -712,7 +712,7 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional', $
'has_folders' => ((count($folders)) ? 'true' : ''), 'has_folders' => ((count($folders)) ? 'true' : ''),
'categories' => $categories, 'categories' => $categories,
'folders' => $folders, 'folders' => $folders,
'text' => strip_tags($body), 'text' => strip_tags($body['html']),
'ago' => relative_date($item['created']), 'ago' => relative_date($item['created']),
'app' => $item['app'], 'app' => $item['app'],
'str_app' => sprintf( t('from %s'), $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, 'previewing' => $previewing,
'wait' => t('Please wait'), 'wait' => t('Please wait'),
'thread_level' => 1, 'thread_level' => 1,
'is_photo' => $is_photo,
'has_tags' => $has_tags,
); );
$arr = array('item' => $item, 'output' => $tmp_item); $arr = array('item' => $item, 'output' => $tmp_item);
@ -1164,6 +1166,10 @@ function status_editor($a, $x, $popup = false) {
if($defexpire) if($defexpire)
$defexpire = datetime_convert('UTC',date_default_timezone_get(),$defexpire,'Y-m-d H:i'); $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'); $cipher = get_pconfig($x['profile_uid'], 'system', 'default_cipher');
if(! $cipher) if(! $cipher)
$cipher = 'aes256'; $cipher = 'aes256';
@ -1235,6 +1241,9 @@ function status_editor($a, $x, $popup = false) {
'$defexpire' => $defexpire, '$defexpire' => $defexpire,
'$feature_expire' => ((feature_enabled($x['profile_uid'], 'content_expire') && (! $webpage)) ? true : false), '$feature_expire' => ((feature_enabled($x['profile_uid'], 'content_expire') && (! $webpage)) ? true : false),
'$expires' => t('Set expiration date'), '$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), '$feature_encrypt' => ((feature_enabled($x['profile_uid'], 'content_encrypt') && (! $webpage)) ? true : false),
'$encrypt' => t('Encrypt text'), '$encrypt' => t('Encrypt text'),
'$cipher' => $cipher, '$cipher' => $cipher,
@ -1414,7 +1423,7 @@ function prepare_page($item) {
'$auth_url' => (($naked) ? '' : zid($item['author']['xchan_url'])), '$auth_url' => (($naked) ? '' : zid($item['author']['xchan_url'])),
'$date' => (($naked) ? '' : datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'Y-m-d H:i')), '$date' => (($naked) ? '' : datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'Y-m-d H:i')),
'$title' => smilies(bbcode($item['title'])), '$title' => smilies(bbcode($item['title'])),
'$body' => $body, '$body' => $body['html'],
'$preview' => $preview, '$preview' => $preview,
'$link' => $link, '$link' => $link,
)); ));

View file

@ -138,6 +138,7 @@ function deliver_run($argv, $argc) {
if($dresult && is_array($dresult)) { if($dresult && is_array($dresult)) {
foreach($dresult as $xx) { foreach($dresult as $xx) {
if(is_array($xx) && array_key_exists('message_id',$xx)) { if(is_array($xx) && array_key_exists('message_id',$xx)) {
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' ) ", 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['message_id']),
dbesc($xx['location']), dbesc($xx['location']),
@ -149,6 +150,7 @@ function deliver_run($argv, $argc) {
} }
} }
} }
}
q("delete from dreport where dreport_queue = '%s' limit 1", q("delete from dreport where dreport_queue = '%s' limit 1",
dbesc($argv[$x]) dbesc($argv[$x])

View file

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

View file

@ -97,7 +97,7 @@ function notification($params) {
if ($params['type'] == NOTIFY_MAIL) { if ($params['type'] == NOTIFY_MAIL) {
logger('notification: 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); $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]'); $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 // Before this we have the name of the replier on the subject rendering
// differents subjects for messages on the same thread. // 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']); $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; $epreamble = $dest_str;
@ -193,7 +193,7 @@ function notification($params) {
} }
if($params['type'] == NOTIFY_WALL) { 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); $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; 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); $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].') , $epreamble = sprintf( t('%1$s, %2$s [zrl=%3$s]tagged you[/zrl].') ,
$recip['channel_name'], $recip['channel_name'],
@ -235,7 +235,7 @@ function notification($params) {
} }
if ($params['type'] == NOTIFY_POKE) { 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); $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].') , $epreamble = sprintf( t('%1$s, %2$s [zrl=%2$s]poked you[/zrl].') ,
$recip['channel_name'], $recip['channel_name'],
@ -253,7 +253,7 @@ function notification($params) {
} }
if ($params['type'] == NOTIFY_TAGSHARE) { 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); $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]') , $epreamble = sprintf( t('%1$s, %2$s tagged [zrl=%3$s]your post[/zrl]') ,
$recip['channel_name'], $recip['channel_name'],
@ -267,7 +267,7 @@ function notification($params) {
} }
if ($params['type'] == NOTIFY_INTRO) { 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); $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.'), $epreamble = sprintf( t('%1$s, you\'ve received [zrl=%2$s]a new connection request[/zrl] from %3$s.'),
$recip['channel_name'], $recip['channel_name'],
@ -282,7 +282,7 @@ function notification($params) {
} }
if ($params['type'] == NOTIFY_SUGGEST) { 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); $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.'), $epreamble = sprintf( t('%1$s, you\'ve received [zrl=%2$s]a friend suggestion[/zrl] for %3$s from %4$s.'),
$recip['channel_name'], $recip['channel_name'],
@ -508,7 +508,7 @@ function notification($params) {
$private_activity = true; $private_activity = true;
case NOTIFY_MAIL: case NOTIFY_MAIL:
$datarray['textversion'] = $datarray['htmlversion'] = $datarray['title'] = ''; $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; break;
default: default:
break; break;

View file

@ -55,10 +55,11 @@ function get_features() {
t('Post Composition Features'), t('Post Composition Features'),
// array('richtext', t('Richtext Editor'), t('Enable richtext editor'),false), // 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('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('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('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; $their_perms = 0;
$xchan_hash = ''; $xchan_hash = '';
$r = q("select * from xchan where xchan_hash = '%s' or xchan_url = '%s' limit 1", $r = q("select * from xchan where xchan_hash = '%s' or xchan_url = '%s' limit 1",
dbesc($url), dbesc($url),
dbesc($url) dbesc($url)
); );
if(! $r) { if(! $r) {
// attempt network auto-discovery // attempt network auto-discovery
if(strpos($url,'@') && (! $is_http)) { if(strpos($url,'@') && (! $is_http)) {
$r = discover_by_webbie($url); $d = discover_by_webbie($url);
} }
elseif($is_http) { elseif($is_http) {
$r = discover_by_url($url); if(get_config('system','feed_contacts'))
$r['allowed'] = intval(get_config('system','feed_contacts')); $d = discover_by_url($url);
} else {
if($r) {
$r['channel_id'] = $uid;
call_hooks('follow_allow',$r);
if(! $r['allowed']) {
$result['message'] = t('Protocol disabled.'); $result['message'] = t('Protocol disabled.');
return $result; return $result;
} }
}
if($d) {
$r = q("select * from xchan where xchan_hash = '%s' or xchan_url = '%s' limit 1", $r = q("select * from xchan where xchan_hash = '%s' or xchan_url = '%s' limit 1",
dbesc($url), dbesc($url),
dbesc($url) dbesc($url)
@ -172,6 +172,16 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false)
return $result; 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()) { if((local_channel()) && $uid == local_channel()) {
$aid = get_account_id(); $aid = get_account_id();
$hash = get_observer_hash(); $hash = get_observer_hash();
@ -251,7 +261,7 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false)
); );
if($r) { if($r) {
$result['abook'] = $r[0]; $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']); $arr = array('channel_id' => $uid, 'abook' => $result['abook']);

View file

@ -631,6 +631,30 @@ function identity_basic_export($channel_id, $items = false) {
if($r) if($r)
$ret['likes'] = $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", $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) intval($channel_id)
); );

View file

@ -790,7 +790,7 @@ function import_likes($channel,$likes) {
if($r) if($r)
continue; continue;
dbesc_array($config); dbesc_array($like);
$r = dbq("INSERT INTO likes (`" $r = dbq("INSERT INTO likes (`"
. implode("`, `", array_keys($like)) . implode("`, `", array_keys($like))
. "`) VALUES ('" . "`) 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; return $ret;
} }
function encode_mail($item) { function encode_mail($item,$extended = false) {
$x = array(); $x = array();
$x['type'] = 'mail'; $x['type'] = 'mail';
$x['encoding'] = 'zot'; $x['encoding'] = 'zot';
@ -1592,6 +1592,18 @@ function encode_mail($item) {
$x['body'] = ''; $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; return $x;
} }
@ -1604,6 +1616,8 @@ function get_mail_elements($x) {
$arr['body'] = (($x['body']) ? htmlspecialchars($x['body'], ENT_COMPAT,'UTF-8',false) : ''); $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['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']); $arr['created'] = datetime_convert('UTC','UTC',$x['created']);
if((! array_key_exists('expires',$x)) || ($x['expires'] === NULL_DATE)) if((! array_key_exists('expires',$x)) || ($x['expires'] === NULL_DATE))
$arr['expires'] = NULL_DATE; $arr['expires'] = NULL_DATE;
@ -1616,6 +1630,18 @@ function get_mail_elements($x) {
if(in_array('recalled',$x['flags'])) { if(in_array('recalled',$x['flags'])) {
$arr['mail_recalled'] = 1; $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'); $key = get_config('system','pubkey');
@ -1630,6 +1656,7 @@ function get_mail_elements($x) {
if($arr['created'] > datetime_convert()) if($arr['created'] > datetime_convert())
$arr['created'] = datetime_convert(); $arr['created'] = datetime_convert();
$arr['mid'] = (($x['message_id']) ? htmlspecialchars($x['message_id'], ENT_COMPAT,'UTF-8',false) : ''); $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) : ''); $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['title'] = ((x($arr,'title')) ? trim($arr['title']) : '');
$arr['parent_mid'] = ((x($arr,'parent_mid')) ? notags(trim($arr['parent_mid'])) : ''); $arr['parent_mid'] = ((x($arr,'parent_mid')) ? notags(trim($arr['parent_mid'])) : '');
$arr['body'] = ((x($arr,'body')) ? trim($arr['body']) : ''); $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 ); $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); // $expires = datetime_convert(date_default_timezone_get(),'UTC',$expires);
if($uid) { if($uid) {
$r = q("select * from channel where channel_id = %d limit 1", $r = q("select * from channel where channel_id = %d limit 1",
intval($uid) intval($uid)
@ -49,18 +47,20 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto='
// look for any existing conversation structure // look for any existing conversation structure
$conv_guid = '';
if(strlen($replyto)) { 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()), intval(local_channel()),
dbesc($replyto), dbesc($replyto),
dbesc($replyto) dbesc($replyto)
); );
if($r) if($r) {
$convid = $r[0]['convid']; $conv_guid = $r[0]['conv_guid'];
}
} }
if(! $convid) { if(! $conv_guid) {
// create a new conversation // create a new conversation
@ -93,16 +93,28 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto='
dbesc($conv_guid), dbesc($conv_guid),
intval(local_channel()) intval(local_channel())
); );
if($r) if($r) {
$convid = $r[0]['id']; $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'; $ret['message'] = 'conversation not found';
return $ret; return $ret;
} }
// generate a unique message_id // generate a unique message_id
do { 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 ) $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, %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )", VALUES ( %d, '%s', %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )",
intval($channel['channel_account_id']), intval($channel['channel_account_id']),
intval($convid), dbesc($conv_guid),
intval(1), intval(1),
intval($channel['channel_id']), intval($channel['channel_id']),
dbesc($channel['channel_hash']), dbesc($channel['channel_hash']),
@ -197,8 +209,11 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto='
dbesc($mid), dbesc($mid),
intval($channel['channel_id']) intval($channel['channel_id'])
); );
if($r) if($r) {
$post_id = $r[0]['id']; $post_id = $r[0]['id'];
$retmail = $r[0];
xchan_mail_query($retmail);
}
else { else {
$ret['message'] = t('Stored post could not be verified.'); $ret['message'] = t('Stored post could not be verified.');
return $ret; return $ret;
@ -242,6 +257,9 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto='
$ret['success'] = true; $ret['success'] = true;
$ret['message_item'] = intval($post_id); $ret['message_item'] = intval($post_id);
$ret['conv'] = $retconv;
$ret['mail'] = $retmail;
return $ret; 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) { function private_messages_drop($channel_id, $messageitem_id, $drop_conversation = false) {
if($drop_conversation) {
// find the parent_id $x = q("select * from mail where id = %d and channel_id = %d limit 1",
$p = q("SELECT parent_mid FROM mail WHERE id = %d AND channel_id = %d LIMIT 1",
intval($messageitem_id), intval($messageitem_id),
intval($channel_id) intval($channel_id)
); );
if($p) { if(! $x)
$r = q("DELETE FROM mail WHERE parent_mid = '%s' AND channel_id = %d ", return false;
dbesc($p[0]['parent_mid']),
$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) intval($channel_id)
); );
if($r) 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; return true;
} }
}
else { else {
xchan_mail_query($x[0]);
$x[0]['mail_deleted'] = true;
$r = q("DELETE FROM mail WHERE id = %d AND channel_id = %d", $r = q("DELETE FROM mail WHERE id = %d AND channel_id = %d",
intval($messageitem_id), intval($messageitem_id),
intval($channel_id) intval($channel_id)
); );
if($r) build_sync_packet($channel_id,array('mail' => array(encode_mail($x,true))));
return true; return true;
} }
return false; 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) == '=') { if(substr($mtch[1],0,1) == '=') {
$owidth = intval(substr($mtch[2],1)); $owidth = intval(substr($mtch[2],1));
if(intval($owidth) > 0 && intval($owidth) < 640) if(intval($owidth) > 0 && intval($owidth) < 1024)
continue; continue;
} }
@ -624,9 +624,9 @@ function scale_external_images($s, $include_link = true, $scale_replace = false)
$orig_width = $ph->getWidth(); $orig_width = $ph->getWidth();
$orig_height = $ph->getHeight(); $orig_height = $ph->getHeight();
if($orig_width > 640 || $orig_height > 640) { if($orig_width > 1024 || $orig_height > 1024) {
$tag = (($match[1] == 'z') ? 'zmg' : 'img'); $tag = (($match[1] == 'z') ? 'zmg' : 'img');
$ph->scaleImage(640); $ph->scaleImage(1024);
$new_width = $ph->getWidth(); $new_width = $ph->getWidth();
$new_height = $ph->getHeight(); $new_height = $ph->getHeight();
logger('scale_external_images: ' . $orig_width . '->' . $new_width . 'w ' . $orig_height . '->' . $new_height . 'h' . ' match: ' . $mtch[0], LOGGER_DEBUG); 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' => '', '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'); require_once('include/identity.php');
$sys = get_sys_channel(); $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 // Get the recipient
$r = q("select abook.*, hubloc.* from abook $r = q("select abook.*, hubloc.* from abook
left join hubloc on hubloc_hash = abook_xchan left join hubloc on hubloc_hash = abook_xchan
@ -113,8 +125,16 @@ function notifier_run($argv, $argc){
intval($r[0]['abook_channel']) intval($r[0]['abook_channel'])
); );
if($s) { if($s) {
$perm_update = array('sender' => $s[0], 'recipient' => $r[0], 'success' => false); $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); call_hooks('permissions_update',$perm_update);
if($perm_update['success'] && $perm_update['deliveries'])
$deliveries[] = $perm_update['deliveries'];
if(! $perm_update['success']) { if(! $perm_update['success']) {
// send a refresh message to each hub they have registered here // send a refresh message to each hub they have registered here
$h = q("select * from hubloc where hubloc_hash = '%s' $h = q("select * from hubloc where hubloc_hash = '%s'
@ -125,17 +145,17 @@ function notifier_run($argv, $argc){
); );
if($h) { if($h) {
foreach($h as $hh) { 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( $data = zot_build_packet($s[0],'refresh',array(array(
'guid' => $hh['hubloc_guid'], 'guid' => $hh['hubloc_guid'],
'guid_sig' => $hh['hubloc_guid_sig'], 'guid_sig' => $hh['hubloc_guid_sig'],
'url' => $hh['hubloc_url']) 'url' => $hh['hubloc_url'])
)); ));
if($data) { 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(); $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 ) 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' )", values ( '%s', %d, %d, '%s', '%s', %d, '%s', '%s', '%s', '%s' )",
@ -150,11 +170,15 @@ function notifier_run($argv, $argc){
dbesc($data), dbesc($data),
dbesc('') dbesc('')
); );
$deliveries[] = $hash;
} }
} }
} }
} }
}
if($deliveries)
do_delivery($deliveries);
} }
} }
return; return;
@ -342,7 +366,7 @@ function notifier_run($argv, $argc){
logger('notifier: target item not forwardable: type ' . $target_item['item_type'], LOGGER_DEBUG); logger('notifier: target item not forwardable: type ' . $target_item['item_type'], LOGGER_DEBUG);
return; 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); logger('notifier: target item not published, so not forwardable', LOGGER_DEBUG);
return; return;
} }
@ -524,14 +548,6 @@ function notifier_run($argv, $argc){
$hubs = $r; $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); 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) { foreach($dhubs as $hub) {
@ -687,29 +694,11 @@ function notifier_run($argv, $argc){
if($normal_mode) { if($normal_mode) {
$x = q("select * from hook where hook = 'notifier_normal'"); $x = q("select * from hook where hook = 'notifier_normal'");
if($x) if($x)
proc_run('php','deliver_hooks.php', $target_item['id']); proc_run('php','include/deliver_hooks.php', $target_item['id']);
} }
if($deliveries) { if($deliveries)
$deliver = array(); do_delivery($deliveries);
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);
logger('notifier: basic loop complete.', LOGGER_DEBUG); logger('notifier: basic loop complete.', LOGGER_DEBUG);

View file

@ -7,6 +7,7 @@
require_once('include/permissions.php'); require_once('include/permissions.php');
require_once('include/items.php'); require_once('include/items.php');
require_once('include/photo/photo_driver.php'); require_once('include/photo/photo_driver.php');
require_once('include/text.php');
/** /**
* @brief * @brief
@ -18,6 +19,8 @@ require_once('include/photo/photo_driver.php');
*/ */
function photo_upload($channel, $observer, $args) { function photo_upload($channel, $observer, $args) {
$a = get_app();
$ret = array('success' => false); $ret = array('success' => false);
$channel_id = $channel['channel_id']; $channel_id = $channel['channel_id'];
$account_id = $channel['channel_account_id']; $account_id = $channel['channel_account_id'];
@ -185,31 +188,66 @@ function photo_upload($channel, $observer, $args) {
if($args['description']) if($args['description'])
$p['description'] = $args['description']; $p['description'] = $args['description'];
$r1 = $ph->save($p); $link = array();
if(! $r1)
$errors = true;
$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_storage']);
unset($p['os_path']); unset($p['os_path']);
if(($width > 640 || $height > 640) && (! $errors)) { if(($width > 1024 || $height > 1024) && (! $errors))
$ph->scaleImage(640); $ph->scaleImage(1024);
$p['scale'] = 1; $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); $r2 = $ph->save($p);
$smallest = 1; $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) if(! $r2)
$errors = true; $errors = true;
}
if(($width > 320 || $height > 320) && (! $errors)) { if(($width > 320 || $height > 320) && (! $errors))
$ph->scaleImage(320); $ph->scaleImage(320);
$p['scale'] = 2;
$p['scale'] = 3;
$r3 = $ph->save($p); $r3 = $ph->save($p);
$smallest = 2; $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) if(! $r3)
$errors = true; $errors = true;
}
if($errors) { if($errors) {
q("delete from photo where resource_id = '%s' and uid = %d", q("delete from photo where resource_id = '%s' and uid = %d",
@ -222,12 +260,6 @@ function photo_upload($channel, $observer, $args) {
return $ret; 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 ); $item_hidden = (($visible) ? 0 : 1 );
$lat = $lon = null; $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']) { if($args['item']) {
foreach($args['item'] as $i) { foreach($args['item'] as $i) {
@ -247,9 +313,9 @@ function photo_upload($channel, $observer, $args) {
if($item['mid'] === $item['parent_mid']) { if($item['mid'] === $item['parent_mid']) {
$item['body'] = '[zrl=' . z_root() . '/photos/' . $channel['channel_address'] . '/image/' . $photo_hash . ']' $item['body'] = (($object) ? $args['body'] : $body . "\r\n" . $args['body']);
. $tag . z_root() . "/photo/{$photo_hash}-{$smallest}.".$ph->getExt() . '[/zmg]' $item['obj_type'] = (($object) ? ACTIVITY_OBJ_PHOTO : '');
. '[/zrl]'; $item['object'] = (($object) ? json_encode($object) : '');
if($item['author_xchan'] === $channel['channel_hash']) { if($item['author_xchan'] === $channel['channel_hash']) {
$item['sig'] = base64url_encode(rsa_sign($item['body'],$channel['channel_prvkey'])); $item['sig'] = base64url_encode(rsa_sign($item['body'],$channel['channel_prvkey']));
@ -281,7 +347,6 @@ function photo_upload($channel, $observer, $args) {
} }
} }
else { else {
$title = '';
$mid = item_message_id(); $mid = item_message_id();
$arr = array(); $arr = array();
@ -304,33 +369,14 @@ function photo_upload($channel, $observer, $args) {
$arr['deny_cid'] = $ac['deny_cid']; $arr['deny_cid'] = $ac['deny_cid'];
$arr['deny_gid'] = $ac['deny_gid']; $arr['deny_gid'] = $ac['deny_gid'];
$arr['verb'] = ACTIVITY_POST; $arr['verb'] = ACTIVITY_POST;
$arr['obj_type'] = (($object) ? ACTIVITY_OBJ_PHOTO : '');
$arr['object'] = (($object) ? json_encode($object) : '');
$arr['item_wall'] = 1; $arr['item_wall'] = 1;
$arr['item_origin'] = 1; $arr['item_origin'] = 1;
$arr['item_thread_top'] = 1; $arr['item_thread_top'] = 1;
$arr['item_private'] = intval($acl->is_private()); $arr['item_private'] = intval($acl->is_private());
$arr['plink'] = z_root() . '/channel/' . $channel['channel_address'] . '/?f=&mid=' . $arr['mid']; $arr['plink'] = z_root() . '/channel/' . $channel['channel_address'] . '/?f=&mid=' . $arr['mid'];
$arr['body'] = (($object) ? $args['body'] : $body . "\r\n" . $args['body']);
// 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]';
$result = item_store($arr); $result = item_store($arr);
$item_id = $result['item_id']; $item_id = $result['item_id'];
@ -341,7 +387,7 @@ function photo_upload($channel, $observer, $args) {
$ret['success'] = true; $ret['success'] = true;
$ret['item'] = $arr; $ret['item'] = $arr;
$ret['body'] = $arr['body']; $ret['body'] = $body;
$ret['resource_id'] = $photo_hash; $ret['resource_id'] = $photo_hash;
$ret['photoitem_id'] = $item_id; $ret['photoitem_id'] = $item_id;

View file

@ -505,17 +505,20 @@ function script_path() {
else else
$scheme = 'http'; $scheme = 'http';
if(x($_SERVER,'SERVER_NAME')) { // Some proxy setups may require using http_host
$hostname = $_SERVER['SERVER_NAME'];
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 { else {
return z_root(); return z_root();
} }
if(x($_SERVER,'SERVER_PORT') && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) {
$hostname .= ':' . $_SERVER['SERVER_PORT'];
}
return $scheme . '://' . $hostname; return $scheme . '://' . $hostname;
} }

View file

@ -1216,36 +1216,15 @@ function theme_attachments(&$item) {
if(is_array($arr) && count($arr)) { if(is_array($arr) && count($arr)) {
$attaches = array(); $attaches = array();
foreach($arr as $r) { foreach($arr as $r) {
$icon = '';
$icontype = substr($r['type'],0,strpos($r['type'],'/'));
/** $icon = getIconFromType($r['type']);
* @FIXME This should probably be a giant "if" statement in the $label = (($r['title']) ? urldecode(htmlspecialchars($r['title'], ENT_COMPAT, 'UTF-8')) : t('Unknown Attachment'));
* template so that we don't have icon names embedded in php code.
*/
switch($icontype) { //some feeds provide an attachment where title an empty space
case 'video': if($label == ' ')
$icon = 'icon-facetime-video'; $label = t('Unknown Attachment');
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;
}
$title = htmlspecialchars($r['title'], ENT_COMPAT,'UTF-8'); $title = t('Attachment') . ' - ' . (($r['length']) ? userReadableSize($r['length']) : t('Size Unknown'));
if(! $title)
$title = t('unknown.???');
$title .= ' ' . (($r['length']) ? $r['length'] . ' ' . t('bytes') : '');
require_once('include/identity.php'); require_once('include/identity.php');
if(is_foreigner($item['author_xchan'])) if(is_foreigner($item['author_xchan']))
@ -1253,14 +1232,14 @@ function theme_attachments(&$item) {
else else
$url = z_root() . '/magic?f=&hash=' . $item['author_xchan'] . '&dest=' . $r['href'] . '/' . $r['revision']; $url = z_root() . '/magic?f=&hash=' . $item['author_xchan'] . '&dest=' . $r['href'] . '/' . $r['revision'];
$s .= '<a href="' . $url . '" title="' . $title . '" class="attachlink" >' . $icon . '</a>'; //$s .= '<a href="' . $url . '" title="' . $title . '" class="attachlink" >' . $icon . '</a>';
$attaches[] = array('title' => $title, 'url' => $url, 'icon' => $icon ); $attaches[] = array('label' => $label, 'url' => $url, 'icon' => $icon, 'title' => $title);
}
} }
$s = replace_macros(get_markup_template('item_attach.tpl'), array( $s = replace_macros(get_markup_template('item_attach.tpl'), array(
'$attaches' => $attaches '$attaches' => $attaches
)); ));
}
return $s; return $s;
} }
@ -1279,11 +1258,12 @@ function format_categories(&$item,$writeable) {
$removelink = (($writeable) ? z_root() . '/filerm/' . $item['id'] . '?f=&cat=' . urlencode($t['term']) : ''); $removelink = (($writeable) ? z_root() . '/filerm/' . $item['id'] . '?f=&cat=' . urlencode($t['term']) : '');
$categories[] = array('term' => $term, 'writeable' => $writeable, 'removelink' => $removelink, 'url' => zid($t['url'])); $categories[] = array('term' => $term, 'writeable' => $writeable, 'removelink' => $removelink, 'url' => zid($t['url']));
} }
}
$s = replace_macros(get_markup_template('item_categories.tpl'),array( $s = replace_macros(get_markup_template('item_categories.tpl'),array(
'$remove' => t('remove category'), '$remove' => t('remove category'),
'$categories' => $categories '$categories' => $categories
)); ));
}
return $s; return $s;
} }
@ -1294,6 +1274,7 @@ function format_categories(&$item,$writeable) {
* @param[in] array &$item * @param[in] array &$item
* @return string HTML link of hashtag * @return string HTML link of hashtag
*/ */
function format_hashtags(&$item) { function format_hashtags(&$item) {
$s = ''; $s = '';
@ -1354,11 +1335,12 @@ function format_filer(&$item) {
$removelink = z_root() . '/filerm/' . $item['id'] . '?f=&term=' . urlencode($t['term']); $removelink = z_root() . '/filerm/' . $item['id'] . '?f=&term=' . urlencode($t['term']);
$categories[] = array('term' => $term, 'removelink' => $removelink); $categories[] = array('term' => $term, 'removelink' => $removelink);
} }
}
$s = replace_macros(get_markup_template('item_filer.tpl'),array( $s = replace_macros(get_markup_template('item_filer.tpl'),array(
'$remove' => t('remove from file'), '$remove' => t('remove from file'),
'$categories' => $categories '$categories' => $categories
)); ));
}
return $s; return $s;
} }
@ -1381,6 +1363,7 @@ function generate_named_map($location) {
function prepare_body(&$item,$attach = false) { function prepare_body(&$item,$attach = false) {
require_once('include/identity.php');
// if($item['html']) { // if($item['html']) {
// $s = bb_observer($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); $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); call_hooks('prepare_body', $prep_arr);
$s = $prep_arr['html']; $s = $prep_arr['html'];
$photo = $prep_arr['photo'];
// q("update item set html = '%s' where id = %d", // q("update item set html = '%s' where id = %d",
// dbesc($s), // 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); $writeable = ((get_observer_hash() == $item['owner_xchan']) ? true : false);
$s .= format_hashtags($item); $tags = format_hashtags($item);
if($item['resource_type']) 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']) if(local_channel() == $item['uid'])
$s .= format_filer($item); $filer = format_filer($item);
$s = sslify($s); $s = sslify($s);
@ -1456,9 +1465,22 @@ function prepare_body(&$item,$attach = false) {
$s = substr($s, 0, $pos).$authorreplace.substr($s, $pos+strlen($authorsearch)); $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); 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(count($arr)) {
if($abook) { 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 $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']) intval($item['uid'])
); );
} }
else { else {
$chans = q("select xchan.*,hubloc.* from xchan left join hubloc on hubloc_hash = xchan_hash $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) if(! $chans)
$chans = $xchans; $chans = $xchans;
else else
@ -2221,7 +2243,7 @@ function handle_tag($a, &$body, &$access_tag, &$str_tags, $profile_uid, $tag, $d
} }
if($tag == '#getzot') { if($tag == '#getzot') {
$basetag = 'getzot'; $basetag = 'getzot';
$url = 'https://redmatrix.me'; $url = 'http://hubzilla.org';
$newtag = '#[zrl=' . $url . ']' . $basetag . '[/zrl]'; $newtag = '#[zrl=' . $url . ']' . $basetag . '[/zrl]';
$body = str_replace($tag,$newtag,$body); $body = str_replace($tag,$newtag,$body);
$replaced = true; $replaced = true;
@ -2490,6 +2512,7 @@ function linkify_tags($a, &$body, $uid, $diaspora = false) {
* *
* @param string $type mime type * @param string $type mime type
* @return string * @return string
* @todo rename to get_icon_from_type()
*/ */
function getIconFromType($type) { function getIconFromType($type) {
$iconMap = array( $iconMap = array(
@ -2542,6 +2565,7 @@ function getIconFromType($type) {
* *
* @param int $size filesize in bytes * @param int $size filesize in bytes
* @return string human readable formatted filesize * @return string human readable formatted filesize
* @todo rename to user_readable_size()
*/ */
function userReadableSize($size) { function userReadableSize($size) {
$ret = ''; $ret = '';
@ -2564,3 +2588,47 @@ function str_rot47($str) {
'!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~', '!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~',
'PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO'); '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( return replace_macros(get_markup_template('message_side.tpl'), array(
'$title' => t('Private Mail Menu'), '$title' => t('Private Mail Menu'),
'$check'=>array(
'label' => t('Check Mail'),
'url' => $a->get_baseurl(true) . '/mail/combined',
'sel' => (argv(1) == ''),
),
'$combined'=>array( '$combined'=>array(
'label' => t('Combined View'), 'label' => t('Combined View'),
'url' => $a->get_baseurl(true) . '/mail/combined', '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_connection) {
if($new_perms != $previous_perms) 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'); require_once('include/enotify.php');
notification(array( notification(array(
'type' => NOTIFY_INTRO, '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'])) { if(is_array($x) && array_key_exists('delivery_report',$x) && is_array($x['delivery_report'])) {
foreach($x['delivery_report'] as $xx) { 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' ) ", 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['message_id']),
dbesc($xx['location']), dbesc($xx['location']),
@ -2739,6 +2739,7 @@ function import_site($arr, $pubkey) {
$sellpage = htmlspecialchars($arr['sellpage'],ENT_COMPAT,'UTF-8',false); $sellpage = htmlspecialchars($arr['sellpage'],ENT_COMPAT,'UTF-8',false);
$site_location = htmlspecialchars($arr['location'],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_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. // You can have one and only one primary directory per realm.
// Downgrade any others claiming to be primary. As they have // 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_sellpage'] != $sellpage)
|| ($siterecord['site_location'] != $site_location) || ($siterecord['site_location'] != $site_location)
|| ($siterecord['site_register'] != $register_policy) || ($siterecord['site_register'] != $register_policy)
|| ($siterecord['site_project'] != $site_project)
|| ($siterecord['site_realm'] != $site_realm)) { || ($siterecord['site_realm'] != $site_realm)) {
$update = true; $update = true;
// logger('import_site: input: ' . print_r($arr,true)); // logger('import_site: input: ' . print_r($arr,true));
// logger('import_site: stored: ' . print_r($siterecord,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'", where site_url = '%s'",
dbesc($site_location), dbesc($site_location),
intval($site_directory), intval($site_directory),
@ -2774,6 +2777,7 @@ function import_site($arr, $pubkey) {
dbesc($sellpage), dbesc($sellpage),
dbesc($site_realm), dbesc($site_realm),
intval(SITE_TYPE_ZOT), intval(SITE_TYPE_ZOT),
dbesc($site_project),
dbesc($url) dbesc($url)
); );
if(! $r) { if(! $r) {
@ -2790,8 +2794,9 @@ function import_site($arr, $pubkey) {
} }
else { else {
$update = true; $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($site_location),
dbesc($url), dbesc($url),
intval($access_policy), intval($access_policy),
@ -2801,7 +2806,8 @@ function import_site($arr, $pubkey) {
intval($register_policy), intval($register_policy),
dbesc($sellpage), dbesc($sellpage),
dbesc($site_realm), dbesc($site_realm),
intval(SITE_TYPE_ZOT) intval(SITE_TYPE_ZOT),
dbesc($site_project)
); );
if(! $r) { if(! $r) {
logger('import_site: record create failed. ' . print_r($arr,true)); 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']) if(array_key_exists('chatroom',$arr) && $arr['chatroom'])
sync_chatrooms($channel,$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']) if(array_key_exists('event',$arr) && $arr['event'])
sync_events($channel,$arr['event']); sync_events($channel,$arr['event']);
@ -3804,6 +3816,7 @@ function zotinfo($arr) {
$ret['site']['sellpage'] = get_config('system','sellpage'); $ret['site']['sellpage'] = get_config('system','sellpage');
$ret['site']['location'] = get_config('system','site_location'); $ret['site']['location'] = get_config('system','site_location');
$ret['site']['realm'] = get_directory_realm(); $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, 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 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 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` ( CREATE TABLE IF NOT EXISTS `mail` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`convid` int(10) unsigned NOT NULL DEFAULT '0', `convid` int(10) unsigned NOT NULL DEFAULT '0',
`conv_guid` char(255) NOT NULL DEFAULT '',
`mail_flags` int(10) unsigned NOT NULL DEFAULT '0', `mail_flags` int(10) unsigned NOT NULL DEFAULT '0',
`from_xchan` char(255) NOT NULL DEFAULT '', `from_xchan` char(255) NOT NULL DEFAULT '',
`to_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 `parent_mid` (`parent_mid`),
KEY `expires` (`expires`), KEY `expires` (`expires`),
KEY `convid` (`convid`), KEY `convid` (`convid`),
KEY `conv_guid` (`conv_guid`),
KEY `mail_deleted` (`mail_deleted`), KEY `mail_deleted` (`mail_deleted`),
KEY `mail_replied` (`mail_replied`), KEY `mail_replied` (`mail_replied`),
KEY `mail_isreply` (`mail_isreply`), KEY `mail_isreply` (`mail_isreply`),
@ -1132,6 +1134,7 @@ CREATE TABLE IF NOT EXISTS `site` (
`site_valid` smallint NOT NULL DEFAULT '0', `site_valid` smallint NOT NULL DEFAULT '0',
`site_dead` smallint NOT NULL DEFAULT '0', `site_dead` smallint NOT NULL DEFAULT '0',
`site_type` smallint NOT NULL DEFAULT '0', `site_type` smallint NOT NULL DEFAULT '0',
`site_project` char(255) NOT NULL DEFAULT '',
PRIMARY KEY (`site_url`), PRIMARY KEY (`site_url`),
KEY `site_flags` (`site_flags`), KEY `site_flags` (`site_flags`),
KEY `site_update` (`site_update`), KEY `site_update` (`site_update`),
@ -1143,7 +1146,8 @@ CREATE TABLE IF NOT EXISTS `site` (
KEY `site_realm` (`site_realm`), KEY `site_realm` (`site_realm`),
KEY `site_valid` (`site_valid`), KEY `site_valid` (`site_valid`),
KEY `site_dead` (`site_dead`), 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; ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `source` ( CREATE TABLE IF NOT EXISTS `source` (

View file

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

View file

@ -1,6 +1,6 @@
<?php <?php
define( 'UPDATE_VERSION' , 1156 ); define( 'UPDATE_VERSION' , 1158 );
/** /**
* *
@ -1885,3 +1885,35 @@ function update_r1155() {
return UPDATE_FAILED; 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 $r = q("SELECT distinct parent AS `item_id`, created from item
left join abook on ( item.owner_xchan = abook.abook_xchan $abook_uids ) left join abook on ( item.owner_xchan = abook.abook_xchan $abook_uids )
WHERE uid = %d $item_normal 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) AND (abook.abook_blocked = 0 or abook.abook_flags is null)
$sql_extra $sql_extra
ORDER BY created DESC", ORDER BY created DESC",

View file

@ -59,6 +59,9 @@ function chat_post(&$a) {
$arr = $acl->get(); $arr = $acl->get();
$arr['name'] = $room; $arr['name'] = $room;
$arr['expire'] = intval($_POST['chat_expire']);
if(intval($arr['expire']) < 0)
$arr['expire'] = 0;
chatroom_create($channel,$arr); chatroom_create($channel,$arr);
@ -204,6 +207,7 @@ function chat_content(&$a) {
$o = replace_macros(get_markup_template('chatroom_new.tpl'),array( $o = replace_macros(get_markup_template('chatroom_new.tpl'),array(
'$header' => t('New Chatroom'), '$header' => t('New Chatroom'),
'$name' => array('room_name',t('Chatroom Name'),'', ''), '$name' => array('room_name',t('Chatroom Name'),'', ''),
'$chat_expire' => array('chat_expire',t('Expiration of chats (minutes)'),120,''),
'$permissions' => t('Permissions'), '$permissions' => t('Permissions'),
'$acl' => populate_acl($channel_acl,false), '$acl' => populate_acl($channel_acl,false),
'$submit' => t('Submit') '$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, $r = q("UPDATE abook SET abook_profile = '%s', abook_my_perms = %d , abook_closeness = %d, abook_pending = %d,
abook_incl = '%s', abook_excl = '%s' abook_incl = '%s', abook_excl = '%s'
@ -214,7 +214,6 @@ function connedit_post(&$a) {
} }
if($r) if($r)
info( t('Connection updated.') . EOL); info( t('Connection updated.') . EOL);
else else
@ -222,7 +221,7 @@ function connedit_post(&$a) {
if($a->poi && $a->poi['abook_my_perms'] != $abook_my_perms if($a->poi && $a->poi['abook_my_perms'] != $abook_my_perms
&& (! intval($a->poi['abook_self']))) { && (! 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) { if($new_friend) {

View file

@ -436,9 +436,9 @@ function list_public_sites() {
$register = 'closed'; $register = 'closed';
if(strpos($rr['site_url'],'https://') !== false) 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 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) { if($insecure) {
$ret['sites'] = array_merge($ret['sites'],$insecure); $ret['sites'] = array_merge($ret['sites'],$insecure);

View file

@ -129,7 +129,7 @@ function editpost_content(&$a) {
'$consensus' => intval($itm[0]['item_consensus']), '$consensus' => intval($itm[0]['item_consensus']),
'$wait' => t('Please wait'), '$wait' => t('Please wait'),
'$permset' => t('Permission settings'), '$permset' => t('Permission settings'),
'$ptyp' => $itm[0]['type'], '$ptyp' => $itm[0]['obj_type'],
'$content' => undo_post_tagging($itm[0]['body']), '$content' => undo_post_tagging($itm[0]['body']),
'$post_id' => $post_id, '$post_id' => $post_id,
'$parent' => (($itm[0]['parent'] != $itm[0]['id']) ? $itm[0]['parent'] : ''), '$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; return $o;
} }
} }
if(strpos($frontpage,'http') !== 0)
$frontpage = z_root() . '/' . $frontpage;
if(intval(get_config('system','mirror_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; echo $o;
killme(); killme();
} }
goaway(z_root() . '/' . $frontpage); goaway($frontpage);
} }

View file

@ -441,6 +441,12 @@ function import_post(&$a) {
if(is_array($data['chatroom'])) if(is_array($data['chatroom']))
import_chatrooms($channel,$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'])) if(is_array($data['event']))
import_events($channel,$data['event']); import_events($channel,$data['event']);

View file

@ -96,7 +96,7 @@ function item_post(&$a) {
$owner_hash = null; $owner_hash = null;
$message_id = ((x($_REQUEST,'message_id') && $api_source) ? strip_tags($_REQUEST['message_id']) : ''); $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); $post_id = ((x($_REQUEST,'post_id')) ? intval($_REQUEST['post_id']) : 0);
$app = ((x($_REQUEST,'source')) ? strip_tags($_REQUEST['source']) : ''); $app = ((x($_REQUEST,'source')) ? strip_tags($_REQUEST['source']) : '');
$return_path = ((x($_REQUEST,'return')) ? $_REQUEST['return'] : ''); $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']): ''); $layout_mid = ((x($_REQUEST,'layout_mid')) ? escape_tags($_REQUEST['layout_mid']): '');
$plink = ((x($_REQUEST,'permalink')) ? escape_tags($_REQUEST['permalink']) : ''); $plink = ((x($_REQUEST,'permalink')) ? escape_tags($_REQUEST['permalink']) : '');
$obj_type = ((x($_REQUEST,'obj_type')) ? escape_tags($_REQUEST['obj_type']) : ACTIVITY_OBJ_NOTE); $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. // 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); $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); $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']); notice($ret['message']);
} }
@ -149,6 +153,14 @@ function mail_content(&$a) {
intval(argv(3)), intval(argv(3)),
intval(local_channel()) 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))); proc_run('php','include/notifier.php','mail',intval(argv(3)));
if($r) { if($r) {
@ -185,68 +197,48 @@ function mail_content(&$a) {
$a->page['htmlhead'] .= $header; $a->page['htmlhead'] .= $header;
$prename = '';
$preselect = (isset($a->argv[2])?array($a->argv[2]):false); $preid = '';
$prename = $preurl = $preid = '';
if(x($_REQUEST,'hash')) { if(x($_REQUEST,'hash')) {
$r = q("select abook.*, xchan.* from abook left join xchan on abook_xchan = xchan_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", where abook_channel = %d and abook_xchan = '%s' limit 1",
intval(local_channel()), intval(local_channel()),
dbesc($_REQUEST['hash']) 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) {
if($preselect) { $r = q("select * from xchan where xchan_hash = '%s' and xchan_network = 'zot' limit 1",
$r = q("select abook.*, xchan.* from abook left join xchan on abook_xchan = xchan_hash dbesc($_REQUEST['hash'])
where abook_channel = %d and abook_id = %d limit 1",
intval(local_channel()),
intval(argv(2))
); );
}
if($r) { 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']; $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'); $tpl = get_markup_template('prv_message.tpl');
$o .= replace_macros($tpl,array( $o .= replace_macros($tpl,array(
'$new' => true,
'$header' => t('Send Private Message'), '$header' => t('Send Private Message'),
'$to' => t('To:'), '$to' => t('To:'),
'$showinputs' => 'true', '$prefill' => $prename,
'$prefill' => $prefill,
'$autocomp' => $autocomp,
'$preid' => $preid, '$preid' => $preid,
'$subject' => t('Subject:'), '$subject' => t('Subject:'),
'$subjtxt' => ((x($_REQUEST,'subject')) ? strip_tags($_REQUEST['subject']) : ''), '$subjtxt' => ((x($_REQUEST,'subject')) ? strip_tags($_REQUEST['subject']) : ''),
'$text' => ((x($_REQUEST,'body')) ? htmlspecialchars($_REQUEST['body'], ENT_COMPAT, 'UTF-8') : ''), '$text' => ((x($_REQUEST,'body')) ? htmlspecialchars($_REQUEST['body'], ENT_COMPAT, 'UTF-8') : ''),
'$readonly' => '',
'$yourmessage' => t('Your message:'), '$yourmessage' => t('Your message:'),
'$select' => $select,
'$parent' => '', '$parent' => '',
'$upload' => t('Upload photo'),
'$attach' => t('Attach file'), '$attach' => t('Attach file'),
'$insert' => t('Insert web link'), '$insert' => t('Insert web link'),
'$wait' => t('Please wait'),
'$submit' => t('Send'), '$submit' => t('Send'),
'$defexpire' => '', '$defexpire' => '',
'$feature_expire' => ((feature_enabled(local_channel(),'content_expire')) ? true : false), '$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), '$feature_encrypt' => ((feature_enabled(local_channel(),'content_encrypt')) ? true : false),
'$encrypt' => t('Encrypt text'), '$encrypt' => t('Encrypt text'),
'$cipher' => $cipher, '$cipher' => $cipher,
)); ));
return $o; return $o;
@ -285,7 +275,14 @@ function mail_content(&$a) {
// if( local_channel() && feature_enabled(local_channel(),'richtext') ) // if( local_channel() && feature_enabled(local_channel(),'richtext') )
// $plaintext = false; // $plaintext = false;
if($mailbox == 'combined') {
$messages = private_messages_fetch_conversation(local_channel(), $mid, true); $messages = private_messages_fetch_conversation(local_channel(), $mid, true);
}
else {
$messages = private_messages_fetch_message(local_channel(), $mid, true);
}
if(! $messages) { if(! $messages) {
//info( t('Message not found.') . EOL); //info( t('Message not found.') . EOL);
@ -347,10 +344,6 @@ function mail_content(&$a) {
$recp = (($message['from_xchan'] === $channel['channel_hash']) ? 'to' : 'from'); $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'); $tpl = get_markup_template('mail_display.tpl');
$o = replace_macros($tpl, array( $o = replace_macros($tpl, array(
'$mailbox' => $mailbox, '$mailbox' => $mailbox,
@ -366,19 +359,16 @@ function mail_content(&$a) {
// reply // reply
'$header' => t('Send Reply'), '$header' => t('Send Reply'),
'$to' => t('To:'), '$to' => t('To:'),
'$showinputs' => '', '$reply' => true,
'$subject' => t('Subject:'), '$subject' => t('Subject:'),
'$subjtxt' => $message['title'], '$subjtxt' => $message['title'],
'$readonly' => 'readonly="readonly"', '$yourmessage' => sprintf(t('Your message for %s (%s):'), $message[$recp]['xchan_name'], $message[$recp]['xchan_addr']),
'$yourmessage' => t('Your message:'),
'$text' => '', '$text' => '',
'$select' => $select, '$parent' => $message['parent_mid'],
'$parent' => $parent, '$recphash' => $message[$recp]['xchan_hash'],
'$upload' => t('Upload photo'),
'$attach' => t('Attach file'), '$attach' => t('Attach file'),
'$insert' => t('Insert web link'), '$insert' => t('Insert web link'),
'$submit' => t('Submit'), '$submit' => t('Submit'),
'$wait' => t('Please wait'),
'$defexpire' => '', '$defexpire' => '',
'$feature_expire' => ((feature_enabled(local_channel(),'content_expire')) ? true : false), '$feature_expire' => ((feature_enabled(local_channel(),'content_expire')) ? true : false),
'$expires' => t('Set expiration date'), '$expires' => t('Set expiration date'),

View file

@ -149,8 +149,9 @@ function photos_post(&$a) {
if($r) { if($r) {
foreach($r as $i) { foreach($r as $i) {
attach_delete($page_owner_uid, $i['resource_id'], 1 ); attach_delete($page_owner_uid, $i['resource_id'], 1 );
drop_item($i['id'],false,DROPITEM_PHASE1,true /* force removal of linked items */); // This is now being done in attach_delete()
proc_run('php','include/notifier.php','drop',$i['id']); // 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) { if($r) {
/*
q("DELETE FROM `photo` WHERE `uid` = %d AND `resource_id` = '%s'", q("DELETE FROM `photo` WHERE `uid` = %d AND `resource_id` = '%s'",
intval($page_owner_uid), intval($page_owner_uid),
dbesc($r[0]['resource_id']) dbesc($r[0]['resource_id'])
); );
*/
attach_delete($page_owner_uid, $r[0]['resource_id'], 1 ); 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", $i = q("SELECT * FROM `item` WHERE `resource_id` = '%s' AND resource_type = 'photo' and `uid` = %d LIMIT 1",
dbesc($r[0]['resource_id']), dbesc($r[0]['resource_id']),
intval($page_owner_uid) intval($page_owner_uid)
@ -196,6 +199,7 @@ function photos_post(&$a) {
drop_item($i[0]['id'],true,DROPITEM_PHASE1); drop_item($i[0]['id'],true,DROPITEM_PHASE1);
$url = $a->get_baseurl(); $url = $a->get_baseurl();
} }
*/
} }
goaway($a->get_baseurl() . '/photos/' . $a->data['channel']['channel_address'] . '/album/' . $_SESSION['album_return']); 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) intval($page_owner_uid)
); );
if(count($r)) { 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()) { if($ph->is_valid()) {
$rotate_deg = ( (intval($_POST['rotate']) == 1) ? 270 : 90 ); $rotate_deg = ( (intval($_POST['rotate']) == 1) ? 270 : 90 );
$ph->rotate($rotate_deg); $ph->rotate($rotate_deg);
@ -237,16 +242,33 @@ function photos_post(&$a) {
$width = $ph->getWidth(); $width = $ph->getWidth();
$height = $ph->getHeight(); $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'])) {
dbescbin($ph->imageString()), @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($height),
intval($width), intval($width),
dbesc($resource_id), dbesc($resource_id),
intval($page_owner_uid) intval($page_owner_uid)
); );
if($width > 640 || $height > 640) { if($width > 1024 || $height > 1024)
$ph->scaleImage(640); $ph->scaleImage(1024);
$width = $ph->getWidth(); $width = $ph->getWidth();
$height = $ph->getHeight(); $height = $ph->getHeight();
@ -257,10 +279,11 @@ function photos_post(&$a) {
dbesc($resource_id), dbesc($resource_id),
intval($page_owner_uid) intval($page_owner_uid)
); );
}
if($width > 320 || $height > 320) {
$ph->scaleImage(320); if($width > 640 || $height > 640)
$ph->scaleImage(640);
$width = $ph->getWidth(); $width = $ph->getWidth();
$height = $ph->getHeight(); $height = $ph->getHeight();
@ -271,12 +294,26 @@ function photos_post(&$a) {
dbesc($resource_id), dbesc($resource_id),
intval($page_owner_uid) 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 = 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), dbesc($resource_id),
intval($page_owner_uid) intval($page_owner_uid)
); );
@ -586,7 +623,9 @@ function photos_content(&$a) {
'$nickname' => $a->data['channel']['channel_address'], '$nickname' => $a->data['channel']['channel_address'],
'$newalbum_label' => t('Enter an album name'), '$newalbum_label' => t('Enter an album name'),
'$newalbum_placeholder' => t('or select an existing album (doubleclick)'), '$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'], '$albums' => $albums['albums'],
'$selname' => $selname, '$selname' => $selname,
'$permissions' => t('Permissions'), '$permissions' => t('Permissions'),
@ -982,13 +1021,13 @@ function photos_content(&$a) {
$likebuttons = ''; $likebuttons = '';
if($can_post || $can_comment) { if($can_post || $can_comment) {
$likebuttons = replace_macros($like_tpl,array( $likebuttons = array(
'$id' => $link_item['id'], 'id' => $link_item['id'],
'$likethis' => t("I like this \x28toggle\x29"), 'likethis' => t("I like this \x28toggle\x29"),
'$nolike' => t("I don't like this \x28toggle\x29"), 'nolike' => t("I don't like this \x28toggle\x29"),
'$share' => t('Share'), 'share' => t('Share'),
'$wait' => t('Please wait') 'wait' => t('Please wait')
)); );
} }
$comments = ''; $comments = '';

View file

@ -23,12 +23,12 @@ function pubsites_content(&$a) {
$j = json_decode($ret['body'],true); $j = json_decode($ret['body'],true);
if($j) { if($j) {
$rate_meta = ((local_channel()) ? '<td>' . t('Rate this hub') . '</td>' : ''); $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']) { if($j['sites']) {
foreach($j['sites'] as $jj) { foreach($j['sites'] as $jj) {
$host = strtolower(substr($jj['url'],strpos($jj['url'],'://')+3)); $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>' : ''); $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 id="live-search"></div>' . "\r\n";
$o = '<div class="generic-content-wrapper-styled">' . "\r\n";
$o .= '<h3>' . t('Search') . '</h3>'; $o .= '<h3>' . t('Search') . '</h3>';
if(x($a->data,'search')) 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 .= conversation($a,$items,'search',$update,'client');
$o .= '</div>';
return $o; return $o;
} }

View file

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

View file

@ -165,7 +165,7 @@ function siteinfo_content(&$a) {
'$loadavg_all' => $loadavg[0] . ', ' . $loadavg[1] . ', ' . $loadavg[2], '$loadavg_all' => $loadavg[0] . ', ' . $loadavg[1] . ', ' . $loadavg[2],
'$commit' => $commit, '$commit' => $commit,
'$web_location' => t('Running at web location') . ' ' . z_root(), '$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_text' => t('Bug reports and issues: please visit'),
'$bug_link_url' => 'https://github.com/redmatrix/hubzilla/issues', '$bug_link_url' => 'https://github.com/redmatrix/hubzilla/issues',
'$bug_link_text' => t('$projectname issues'), '$bug_link_text' => t('$projectname issues'),

View file

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

File diff suppressed because it is too large Load diff

View file

@ -6,9 +6,9 @@
#, fuzzy #, fuzzy
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2015-09-25.1166\n" "Project-Id-Version: 2015-10-17.1188\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -416,7 +416,7 @@ msgstr ""
msgid "Edited" msgid "Edited"
msgstr "" msgstr ""
#: ../../include/api.php:1234 #: ../../include/api.php:1267
msgid "Public Timeline" msgid "Public Timeline"
msgstr "" msgstr ""
@ -828,7 +828,8 @@ msgstr ""
msgid "April" msgid "April"
msgstr "" msgstr ""
#: ../../include/text.php:1201 #: ../../include/text.php:1201 ../../mod/uexport.php:58
#: ../../mod/uexport.php:59
msgid "May" msgid "May"
msgstr "" msgstr ""
@ -1374,7 +1375,7 @@ msgstr ""
#: ../../include/widgets.php:136 ../../include/widgets.php:175 #: ../../include/widgets.php:136 ../../include/widgets.php:175
#: ../../include/Contact.php:107 ../../include/conversation.php:956 #: ../../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 #: ../../mod/match.php:64 ../../mod/suggest.php:52
msgid "Connect" msgid "Connect"
msgstr "" msgstr ""
@ -1551,7 +1552,7 @@ msgid "Finishes:"
msgstr "" msgstr ""
#: ../../include/event.php:50 ../../include/bb2diaspora.php:481 #: ../../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 #: ../../mod/events.php:684
msgid "Location:" msgid "Location:"
msgstr "" msgstr ""
@ -1855,7 +1856,7 @@ msgid "View all"
msgstr "" msgstr ""
#: ../../include/ItemObject.php:179 ../../include/taxonomy.php:396 #: ../../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 #: ../../mod/photos.php:1019
msgctxt "noun" msgctxt "noun"
msgid "Like" msgid "Like"
@ -2107,7 +2108,7 @@ msgstr ""
msgid "Manage/Edit profiles" msgid "Manage/Edit profiles"
msgstr "" msgstr ""
#: ../../include/nav.php:95 ../../include/identity.php:956 #: ../../include/nav.php:95 ../../include/identity.php:979
msgid "Edit Profile" msgid "Edit Profile"
msgstr "" msgstr ""
@ -3037,14 +3038,14 @@ msgstr ""
msgid "Visible to specific connections." msgid "Visible to specific connections."
msgstr "" 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/filestorage.php:27 ../../mod/viewsrc.php:20
#: ../../mod/admin.php:167 ../../mod/admin.php:1025 ../../mod/admin.php:1225 #: ../../mod/admin.php:167 ../../mod/admin.php:1025 ../../mod/admin.php:1225
#: ../../mod/display.php:36 #: ../../mod/display.php:36
msgid "Item not found." msgid "Item not found."
msgstr "" 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:184 ../../include/attach.php:247
#: ../../include/attach.php:261 ../../include/attach.php:305 #: ../../include/attach.php:261 ../../include/attach.php:305
#: ../../include/attach.php:319 ../../include/attach.php:350 #: ../../include/attach.php:319 ../../include/attach.php:350
@ -3087,38 +3088,38 @@ msgstr ""
msgid "Permission denied." msgid "Permission denied."
msgstr "" 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 #: ../../mod/bulksetclose.php:51
msgid "Collection not found." msgid "Collection not found."
msgstr "" msgstr ""
#: ../../include/items.php:4779 #: ../../include/items.php:4803
msgid "Collection is empty." msgid "Collection is empty."
msgstr "" msgstr ""
#: ../../include/items.php:4786 #: ../../include/items.php:4810
#, php-format #, php-format
msgid "Collection: %s" msgid "Collection: %s"
msgstr "" msgstr ""
#: ../../include/items.php:4796 ../../mod/connedit.php:674 #: ../../include/items.php:4820 ../../mod/connedit.php:674
#, php-format #, php-format
msgid "Connection: %s" msgid "Connection: %s"
msgstr "" msgstr ""
#: ../../include/items.php:4798 #: ../../include/items.php:4822
msgid "Connection not found." msgid "Connection not found."
msgstr "" msgstr ""
#: ../../include/zot.php:678 #: ../../include/zot.php:684
msgid "Invalid data packet" msgid "Invalid data packet"
msgstr "" msgstr ""
#: ../../include/zot.php:694 #: ../../include/zot.php:700
msgid "Unable to verify channel signature" msgid "Unable to verify channel signature"
msgstr "" msgstr ""
#: ../../include/zot.php:2184 #: ../../include/zot.php:2208
#, php-format #, php-format
msgid "Unable to verify site signature for %s" msgid "Unable to verify site signature for %s"
msgstr "" msgstr ""
@ -3316,11 +3317,11 @@ msgstr ""
msgid "Default Profile" msgid "Default Profile"
msgstr "" msgstr ""
#: ../../include/identity.php:736 #: ../../include/identity.php:759
msgid "Requested channel is not available." msgid "Requested channel is not available."
msgstr "" 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/achievements.php:11 ../../mod/webpages.php:29
#: ../../mod/connect.php:13 ../../mod/hcard.php:8 ../../mod/blocks.php:29 #: ../../mod/connect.php:13 ../../mod/hcard.php:8 ../../mod/blocks.php:29
#: ../../mod/editlayout.php:27 ../../mod/editwebpage.php:28 #: ../../mod/editlayout.php:27 ../../mod/editwebpage.php:28
@ -3329,193 +3330,193 @@ msgstr ""
msgid "Requested profile is not available." msgid "Requested profile is not available."
msgstr "" msgstr ""
#: ../../include/identity.php:946 ../../mod/profiles.php:774 #: ../../include/identity.php:969 ../../mod/profiles.php:774
msgid "Change profile photo" msgid "Change profile photo"
msgstr "" msgstr ""
#: ../../include/identity.php:952 #: ../../include/identity.php:975
msgid "Profiles" msgid "Profiles"
msgstr "" msgstr ""
#: ../../include/identity.php:952 #: ../../include/identity.php:975
msgid "Manage/edit profiles" msgid "Manage/edit profiles"
msgstr "" msgstr ""
#: ../../include/identity.php:953 ../../mod/profiles.php:775 #: ../../include/identity.php:976 ../../mod/profiles.php:775
msgid "Create New Profile" msgid "Create New Profile"
msgstr "" msgstr ""
#: ../../include/identity.php:968 ../../mod/profiles.php:786 #: ../../include/identity.php:991 ../../mod/profiles.php:786
msgid "Profile Image" msgid "Profile Image"
msgstr "" msgstr ""
#: ../../include/identity.php:971 #: ../../include/identity.php:994
msgid "visible to everybody" msgid "visible to everybody"
msgstr "" msgstr ""
#: ../../include/identity.php:972 ../../mod/profiles.php:669 #: ../../include/identity.php:995 ../../mod/profiles.php:669
#: ../../mod/profiles.php:790 #: ../../mod/profiles.php:790
msgid "Edit visibility" msgid "Edit visibility"
msgstr "" msgstr ""
#: ../../include/identity.php:988 ../../include/identity.php:1227 #: ../../include/identity.php:1011 ../../include/identity.php:1250
msgid "Gender:" msgid "Gender:"
msgstr "" msgstr ""
#: ../../include/identity.php:989 ../../include/identity.php:1271 #: ../../include/identity.php:1012 ../../include/identity.php:1294
msgid "Status:" msgid "Status:"
msgstr "" msgstr ""
#: ../../include/identity.php:990 ../../include/identity.php:1282 #: ../../include/identity.php:1013 ../../include/identity.php:1305
msgid "Homepage:" msgid "Homepage:"
msgstr "" msgstr ""
#: ../../include/identity.php:991 #: ../../include/identity.php:1014
msgid "Online Now" msgid "Online Now"
msgstr "" msgstr ""
#: ../../include/identity.php:1074 ../../include/identity.php:1152 #: ../../include/identity.php:1097 ../../include/identity.php:1175
#: ../../mod/ping.php:324 #: ../../mod/ping.php:324
msgid "g A l F d" msgid "g A l F d"
msgstr "" msgstr ""
#: ../../include/identity.php:1075 ../../include/identity.php:1153 #: ../../include/identity.php:1098 ../../include/identity.php:1176
msgid "F d" msgid "F d"
msgstr "" msgstr ""
#: ../../include/identity.php:1120 ../../include/identity.php:1192 #: ../../include/identity.php:1143 ../../include/identity.php:1215
#: ../../mod/ping.php:346 #: ../../mod/ping.php:346
msgid "[today]" msgid "[today]"
msgstr "" msgstr ""
#: ../../include/identity.php:1131 #: ../../include/identity.php:1154
msgid "Birthday Reminders" msgid "Birthday Reminders"
msgstr "" msgstr ""
#: ../../include/identity.php:1132 #: ../../include/identity.php:1155
msgid "Birthdays this week:" msgid "Birthdays this week:"
msgstr "" msgstr ""
#: ../../include/identity.php:1185 #: ../../include/identity.php:1208
msgid "[No description]" msgid "[No description]"
msgstr "" msgstr ""
#: ../../include/identity.php:1203 #: ../../include/identity.php:1226
msgid "Event Reminders" msgid "Event Reminders"
msgstr "" msgstr ""
#: ../../include/identity.php:1204 #: ../../include/identity.php:1227
msgid "Events this week:" msgid "Events this week:"
msgstr "" 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 #: ../../include/apps.php:138 ../../mod/profperm.php:112
msgid "Profile" msgid "Profile"
msgstr "" msgstr ""
#: ../../include/identity.php:1225 ../../mod/settings.php:1056 #: ../../include/identity.php:1248 ../../mod/settings.php:1056
msgid "Full Name:" msgid "Full Name:"
msgstr "" msgstr ""
#: ../../include/identity.php:1232 #: ../../include/identity.php:1255
msgid "Like this channel" msgid "Like this channel"
msgstr "" msgstr ""
#: ../../include/identity.php:1256 #: ../../include/identity.php:1279
msgid "j F, Y" msgid "j F, Y"
msgstr "" msgstr ""
#: ../../include/identity.php:1257 #: ../../include/identity.php:1280
msgid "j F" msgid "j F"
msgstr "" msgstr ""
#: ../../include/identity.php:1264 #: ../../include/identity.php:1287
msgid "Birthday:" msgid "Birthday:"
msgstr "" msgstr ""
#: ../../include/identity.php:1268 ../../mod/directory.php:297 #: ../../include/identity.php:1291 ../../mod/directory.php:297
msgid "Age:" msgid "Age:"
msgstr "" msgstr ""
#: ../../include/identity.php:1277 #: ../../include/identity.php:1300
#, php-format #, php-format
msgid "for %1$d %2$s" msgid "for %1$d %2$s"
msgstr "" msgstr ""
#: ../../include/identity.php:1280 ../../mod/profiles.php:691 #: ../../include/identity.php:1303 ../../mod/profiles.php:691
msgid "Sexual Preference:" msgid "Sexual Preference:"
msgstr "" msgstr ""
#: ../../include/identity.php:1284 ../../mod/directory.php:313 #: ../../include/identity.php:1307 ../../mod/directory.php:313
#: ../../mod/profiles.php:693 #: ../../mod/profiles.php:693
msgid "Hometown:" msgid "Hometown:"
msgstr "" msgstr ""
#: ../../include/identity.php:1286 #: ../../include/identity.php:1309
msgid "Tags:" msgid "Tags:"
msgstr "" msgstr ""
#: ../../include/identity.php:1288 ../../mod/profiles.php:694 #: ../../include/identity.php:1311 ../../mod/profiles.php:694
msgid "Political Views:" msgid "Political Views:"
msgstr "" msgstr ""
#: ../../include/identity.php:1290 #: ../../include/identity.php:1313
msgid "Religion:" msgid "Religion:"
msgstr "" msgstr ""
#: ../../include/identity.php:1292 ../../mod/directory.php:315 #: ../../include/identity.php:1315 ../../mod/directory.php:315
msgid "About:" msgid "About:"
msgstr "" msgstr ""
#: ../../include/identity.php:1294 #: ../../include/identity.php:1317
msgid "Hobbies/Interests:" msgid "Hobbies/Interests:"
msgstr "" msgstr ""
#: ../../include/identity.php:1296 ../../mod/profiles.php:697 #: ../../include/identity.php:1319 ../../mod/profiles.php:697
msgid "Likes:" msgid "Likes:"
msgstr "" msgstr ""
#: ../../include/identity.php:1298 ../../mod/profiles.php:698 #: ../../include/identity.php:1321 ../../mod/profiles.php:698
msgid "Dislikes:" msgid "Dislikes:"
msgstr "" msgstr ""
#: ../../include/identity.php:1300 #: ../../include/identity.php:1323
msgid "Contact information and Social Networks:" msgid "Contact information and Social Networks:"
msgstr "" msgstr ""
#: ../../include/identity.php:1302 #: ../../include/identity.php:1325
msgid "My other channels:" msgid "My other channels:"
msgstr "" msgstr ""
#: ../../include/identity.php:1304 #: ../../include/identity.php:1327
msgid "Musical interests:" msgid "Musical interests:"
msgstr "" msgstr ""
#: ../../include/identity.php:1306 #: ../../include/identity.php:1329
msgid "Books, literature:" msgid "Books, literature:"
msgstr "" msgstr ""
#: ../../include/identity.php:1308 #: ../../include/identity.php:1331
msgid "Television:" msgid "Television:"
msgstr "" msgstr ""
#: ../../include/identity.php:1310 #: ../../include/identity.php:1333
msgid "Film/dance/culture/entertainment:" msgid "Film/dance/culture/entertainment:"
msgstr "" msgstr ""
#: ../../include/identity.php:1312 #: ../../include/identity.php:1335
msgid "Love/Romance:" msgid "Love/Romance:"
msgstr "" msgstr ""
#: ../../include/identity.php:1314 #: ../../include/identity.php:1337
msgid "Work/employment:" msgid "Work/employment:"
msgstr "" msgstr ""
#: ../../include/identity.php:1316 #: ../../include/identity.php:1339
msgid "School/education:" msgid "School/education:"
msgstr "" msgstr ""
#: ../../include/identity.php:1336 #: ../../include/identity.php:1359
msgid "Like this thing" msgid "Like this thing"
msgstr "" msgstr ""
@ -4602,7 +4603,7 @@ msgstr ""
msgid "No installed plugins/addons/apps" msgid "No installed plugins/addons/apps"
msgstr "" 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" msgid "$Projectname"
msgstr "" msgstr ""
@ -6521,30 +6522,6 @@ msgstr ""
msgid "%1$s tagged %2$s's %3$s with %4$s" msgid "%1$s tagged %2$s's %3$s with %4$s"
msgstr "" 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 #: ../../mod/viewconnections.php:62
msgid "No connections." msgid "No connections."
msgstr "" msgstr ""
@ -8155,6 +8132,113 @@ msgstr ""
msgid "D, d M Y - g:i A" msgid "D, d M Y - g:i A"
msgstr "" 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 #: ../../mod/mood.php:131
msgid "Set your current mood and tell your friends" msgid "Set your current mood and tell your friends"
msgstr "" msgstr ""
@ -8672,7 +8756,7 @@ msgstr ""
msgid "Download PDL file" msgid "Download PDL file"
msgstr "" msgstr ""
#: ../../mod/home.php:73 #: ../../mod/home.php:75
#, php-format #, php-format
msgid "Welcome to %s" msgid "Welcome to %s"
msgstr "" msgstr ""

View file

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

View file

@ -87,6 +87,10 @@ code {
font-size: unset; 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 */ /* 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 input[type="checkbox"] { margin-left: 0px; }
.field.checkbox label { padding-left: 0px; font-weight: 700} .field.checkbox label { padding-left: 0px; font-weight: 700}

View file

@ -83,15 +83,6 @@ code {
margin-right: 10px; margin-right: 10px;
} }
.wall-item-photo-wrapper {
margin-top: 0px;
margin-bottom: 20px;
}
.comment .wall-item-photo-wrapper {
margin-bottom: 15px;
}
.wall-item-wrapper { .wall-item-wrapper {
margin-left:10px; margin-left:10px;
} }
@ -153,27 +144,8 @@ a.wall-item-name-link {
word-wrap: break-word; word-wrap: break-word;
} }
.body-tag, .filesavetags, .categorytags { .body-tags {
opacity: 0.5; margin-top: 5px;
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;
} }
.item-tool { .item-tool {

View file

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

View file

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

View file

@ -29,3 +29,6 @@
margin-top: -2px; 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 { .mail-conv-sender {
display: table-cell; float: left;
vertical-align: top;
margin-right: 10px; margin-right: 10px;
margin-bottom: 10px;
}
.mail-conv-sender img{
width: 32px;
height: 32px;
} }
.mail-conv-sender-name { .mail-conv-sender-name {
font-weight: bold; font-weight: bold;
} }
.mail-conv-detail { .mail-conv-body {
display: table-cell; margin-bottom: 10px;
vertical-align: top; }
width: 100%;
padding-left: 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 "" msgstr ""
"Project-Id-Version: Redmatrix\n" "Project-Id-Version: Redmatrix\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-18 00:04-0700\n" "POT-Creation-Date: 2015-10-17 16:47-0700\n"
"PO-Revision-Date: 2015-09-22 14:10+0000\n" "PO-Revision-Date: 2015-10-18 15:17+0000\n"
"Last-Translator: Manuel Jiménez Friaza <mjfriaza@openmailbox.org>\n" "Last-Translator: Manuel Jiménez Friaza <mjfriaza@openmailbox.org>\n"
"Language-Team: Spanish (http://www.transifex.com/Friendica/red-matrix/language/es/)\n" "Language-Team: Spanish (http://www.transifex.com/Friendica/red-matrix/language/es/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -422,7 +422,7 @@ msgstr "Creado"
msgid "Edited" msgid "Edited"
msgstr "Editado" msgstr "Editado"
#: ../../include/api.php:1234 #: ../../include/api.php:1267
msgid "Public Timeline" msgid "Public Timeline"
msgstr "Cronología pública" msgstr "Cronología pública"
@ -660,7 +660,7 @@ msgstr "Guardar"
#: ../../include/text.php:990 #: ../../include/text.php:990
msgid "poke" msgid "poke"
msgstr "dar un toque" msgstr "un toque"
#: ../../include/text.php:990 ../../include/conversation.php:243 #: ../../include/text.php:990 ../../include/conversation.php:243
msgid "poked" msgid "poked"
@ -668,7 +668,7 @@ msgstr "ha recibido un toque"
#: ../../include/text.php:991 #: ../../include/text.php:991
msgid "ping" msgid "ping"
msgstr "avisar" msgstr "un \"ping\""
#: ../../include/text.php:991 #: ../../include/text.php:991
msgid "pinged" msgid "pinged"
@ -692,19 +692,19 @@ msgstr "abofeteado/a"
#: ../../include/text.php:994 #: ../../include/text.php:994
msgid "finger" msgid "finger"
msgstr "señalar" msgstr "un \"finger\""
#: ../../include/text.php:994 #: ../../include/text.php:994
msgid "fingered" msgid "fingered"
msgstr "señalado/a" msgstr "ha recibido un \"finger\""
#: ../../include/text.php:995 #: ../../include/text.php:995
msgid "rebuff" msgid "rebuff"
msgstr "desairar" msgstr "un rechazo"
#: ../../include/text.php:995 #: ../../include/text.php:995
msgid "rebuffed" msgid "rebuffed"
msgstr "desairado/a" msgstr "ha sido rechazado/a"
#: ../../include/text.php:1005 #: ../../include/text.php:1005
msgid "happy" msgid "happy"
@ -834,7 +834,8 @@ msgstr "marzo"
msgid "April" msgid "April"
msgstr "abril" msgstr "abril"
#: ../../include/text.php:1201 #: ../../include/text.php:1201 ../../mod/uexport.php:58
#: ../../mod/uexport.php:59
msgid "May" msgid "May"
msgstr "mayo" msgstr "mayo"
@ -926,7 +927,7 @@ msgstr "evento"
#: ../../include/conversation.php:148 ../../mod/like.php:349 #: ../../include/conversation.php:148 ../../mod/like.php:349
#: ../../mod/subthread.php:72 ../../mod/subthread.php:174 #: ../../mod/subthread.php:72 ../../mod/subthread.php:174
msgid "status" msgid "status"
msgstr "estado" msgstr "el mensaje de estado"
#: ../../include/text.php:1892 ../../include/conversation.php:150 #: ../../include/text.php:1892 ../../include/conversation.php:150
#: ../../mod/tagger.php:53 #: ../../mod/tagger.php:53
@ -1091,7 +1092,7 @@ msgstr "Gracias,"
#: ../../include/network.php:1590 ../../include/enotify.php:63 #: ../../include/network.php:1590 ../../include/enotify.php:63
#, php-format #, php-format
msgid "%s Administrator" msgid "%s Administrator"
msgstr "%s Administrador" msgstr "Administrador de %s"
#: ../../include/network.php:1646 #: ../../include/network.php:1646
msgid "No Subject" msgid "No Subject"
@ -1380,7 +1381,7 @@ msgstr "Editar una aplicación personal"
#: ../../include/widgets.php:136 ../../include/widgets.php:175 #: ../../include/widgets.php:136 ../../include/widgets.php:175
#: ../../include/Contact.php:107 ../../include/conversation.php:956 #: ../../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 #: ../../mod/match.php:64 ../../mod/suggest.php:52
msgid "Connect" msgid "Connect"
msgstr "Conectar" msgstr "Conectar"
@ -1557,7 +1558,7 @@ msgid "Finishes:"
msgstr "Finaliza:" msgstr "Finaliza:"
#: ../../include/event.php:50 ../../include/bb2diaspora.php:481 #: ../../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 #: ../../mod/events.php:684
msgid "Location:" msgid "Location:"
msgstr "Ubicación:" 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 #: ../../include/enotify.php:166
#, php-format #, php-format
msgid "%1$s, %2$s commented on [zrl=%3$s]%4$s's %5$s[/zrl]" 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 #: ../../include/enotify.php:175
#, php-format #, php-format
msgid "%1$s, %2$s commented on [zrl=%3$s]your %4$s[/zrl]" 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 #: ../../include/enotify.php:186
#, php-format #, php-format
@ -1665,7 +1666,7 @@ msgstr "[Red:Aviso] %1$s le ha dado un toque"
#: ../../include/enotify.php:239 #: ../../include/enotify.php:239
#, php-format #, php-format
msgid "%1$s, %2$s poked you at %3$s" 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 #: ../../include/enotify.php:240
#, php-format #, php-format
@ -1680,7 +1681,7 @@ msgstr "[Red:Aviso] %s etiquetó su entrada"
#: ../../include/enotify.php:257 #: ../../include/enotify.php:257
#, php-format #, php-format
msgid "%1$s, %2$s tagged your post at %3$s" 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 #: ../../include/enotify.php:258
#, php-format #, php-format
@ -1862,7 +1863,7 @@ msgid "View all"
msgstr "Ver todo" msgstr "Ver todo"
#: ../../include/ItemObject.php:179 ../../include/taxonomy.php:396 #: ../../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 #: ../../mod/photos.php:1019
msgctxt "noun" msgctxt "noun"
msgid "Like" msgid "Like"
@ -2114,7 +2115,7 @@ msgstr "Editar perfiles"
msgid "Manage/Edit profiles" msgid "Manage/Edit profiles"
msgstr "Administrar/editar perfiles" msgstr "Administrar/editar perfiles"
#: ../../include/nav.php:95 ../../include/identity.php:956 #: ../../include/nav.php:95 ../../include/identity.php:979
msgid "Edit Profile" msgid "Edit Profile"
msgstr "Editar perfil" msgstr "Editar perfil"
@ -2416,7 +2417,7 @@ msgstr "Pueden verse mis conexiones"
#: ../../include/permissions.php:30 #: ../../include/permissions.php:30
msgid "Can view my file storage" msgid "Can view my file storage"
msgstr "Pueden verse mis ficheros compartidos" msgstr "Puede verse mi repositorio de ficheros"
#: ../../include/permissions.php:31 #: ../../include/permissions.php:31
msgid "Can view my webpages" msgid "Can view my webpages"
@ -2464,7 +2465,7 @@ msgstr "Se puede charlar conmigo (cuando esté disponible)"
#: ../../include/permissions.php:43 #: ../../include/permissions.php:43
msgid "Can write to my file storage" 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 #: ../../include/permissions.php:44
msgid "Can edit my webpages" msgid "Can edit my webpages"
@ -2589,12 +2590,12 @@ msgstr "Abstención"
#: ../../include/conversation.php:585 ../../mod/photos.php:998 #: ../../include/conversation.php:585 ../../mod/photos.php:998
msgctxt "title" msgctxt "title"
msgid "Attending" msgid "Attending"
msgstr "Participar" msgstr "Participaré"
#: ../../include/conversation.php:585 ../../mod/photos.php:998 #: ../../include/conversation.php:585 ../../mod/photos.php:998
msgctxt "title" msgctxt "title"
msgid "Not attending" msgid "Not attending"
msgstr "No participar" msgstr "No participaré"
#: ../../include/conversation.php:585 ../../mod/photos.php:998 #: ../../include/conversation.php:585 ../../mod/photos.php:998
msgctxt "title" msgctxt "title"
@ -2636,7 +2637,7 @@ msgstr "Seguir el hilo"
#: ../../include/conversation.php:952 #: ../../include/conversation.php:952
msgid "View Status" msgid "View Status"
msgstr "Ver estado" msgstr "Estado actual"
#: ../../include/conversation.php:954 #: ../../include/conversation.php:954
msgid "View Photos" msgid "View Photos"
@ -2656,7 +2657,7 @@ msgstr "Enviar Mensaje Privado"
#: ../../include/conversation.php:959 ../../include/apps.php:145 #: ../../include/conversation.php:959 ../../include/apps.php:145
msgid "Poke" msgid "Poke"
msgstr "Dar un toque" msgstr "Toques y otras cosas"
#: ../../include/conversation.php:1073 #: ../../include/conversation.php:1073
#, php-format #, php-format
@ -2946,7 +2947,7 @@ msgstr "Álbumes de fotos"
#: ../../include/conversation.php:1623 #: ../../include/conversation.php:1623
msgid "Files and Storage" msgid "Files and Storage"
msgstr "Ficheros y carpetas" msgstr "Repositorio de ficheros"
#: ../../include/conversation.php:1633 ../../include/conversation.php:1636 #: ../../include/conversation.php:1633 ../../include/conversation.php:1636
msgid "Chatrooms" msgid "Chatrooms"
@ -2965,14 +2966,14 @@ msgctxt "noun"
msgid "Attending" msgid "Attending"
msgid_plural "Attending" msgid_plural "Attending"
msgstr[0] "Asistir" msgstr[0] "Asistir"
msgstr[1] "Participar" msgstr[1] "Participaré"
#: ../../include/conversation.php:1721 #: ../../include/conversation.php:1721
msgctxt "noun" msgctxt "noun"
msgid "Not Attending" msgid "Not Attending"
msgid_plural "Not Attending" msgid_plural "Not Attending"
msgstr[0] "No asistir" msgstr[0] "No asistir"
msgstr[1] "No participar" msgstr[1] "No participaré"
#: ../../include/conversation.php:1724 #: ../../include/conversation.php:1724
msgctxt "noun" msgctxt "noun"
@ -3008,51 +3009,51 @@ msgstr[1] "Se abstienen"
msgid "Permission denied" msgid "Permission denied"
msgstr "Permiso denegado" msgstr "Permiso denegado"
#: ../../include/items.php:1038 ../../include/items.php:1084 #: ../../include/items.php:1101 ../../include/items.php:1147
msgid "(Unknown)" msgid "(Unknown)"
msgstr "(Desconocido)" msgstr "(Desconocido)"
#: ../../include/items.php:1310 #: ../../include/items.php:1373
msgid "Visible to anybody on the internet." msgid "Visible to anybody on the internet."
msgstr "Visible para cualquiera en internet." msgstr "Visible para cualquiera en internet."
#: ../../include/items.php:1312 #: ../../include/items.php:1375
msgid "Visible to you only." msgid "Visible to you only."
msgstr "Visible sólo para usted." msgstr "Visible sólo para usted."
#: ../../include/items.php:1314 #: ../../include/items.php:1377
msgid "Visible to anybody in this network." msgid "Visible to anybody in this network."
msgstr "Visible para cualquiera en esta red." msgstr "Visible para cualquiera en esta red."
#: ../../include/items.php:1316 #: ../../include/items.php:1379
msgid "Visible to anybody authenticated." msgid "Visible to anybody authenticated."
msgstr "Visible para cualquiera que haya sido autenticado." msgstr "Visible para cualquiera que haya sido autenticado."
#: ../../include/items.php:1318 #: ../../include/items.php:1381
#, php-format #, php-format
msgid "Visible to anybody on %s." msgid "Visible to anybody on %s."
msgstr "Visible para cualquiera en %s." msgstr "Visible para cualquiera en %s."
#: ../../include/items.php:1320 #: ../../include/items.php:1383
msgid "Visible to all connections." msgid "Visible to all connections."
msgstr "Visible para todas las conexiones." msgstr "Visible para todas las conexiones."
#: ../../include/items.php:1322 #: ../../include/items.php:1385
msgid "Visible to approved connections." msgid "Visible to approved connections."
msgstr "Visible para las conexiones permitidas." msgstr "Visible para las conexiones permitidas."
#: ../../include/items.php:1324 #: ../../include/items.php:1387
msgid "Visible to specific connections." msgid "Visible to specific connections."
msgstr "Visible para conexiones específicas." 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/filestorage.php:27 ../../mod/viewsrc.php:20
#: ../../mod/admin.php:167 ../../mod/admin.php:1025 ../../mod/admin.php:1225 #: ../../mod/admin.php:167 ../../mod/admin.php:1025 ../../mod/admin.php:1225
#: ../../mod/display.php:36 #: ../../mod/display.php:36
msgid "Item not found." msgid "Item not found."
msgstr "Elemento no encontrado." 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:184 ../../include/attach.php:247
#: ../../include/attach.php:261 ../../include/attach.php:305 #: ../../include/attach.php:261 ../../include/attach.php:305
#: ../../include/attach.php:319 ../../include/attach.php:350 #: ../../include/attach.php:319 ../../include/attach.php:350
@ -3095,38 +3096,38 @@ msgstr "Elemento no encontrado."
msgid "Permission denied." msgid "Permission denied."
msgstr "Acceso denegado." 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 #: ../../mod/bulksetclose.php:51
msgid "Collection not found." msgid "Collection not found."
msgstr "Colección no encontrada." msgstr "Colección no encontrada."
#: ../../include/items.php:4716 #: ../../include/items.php:4803
msgid "Collection is empty." msgid "Collection is empty."
msgstr "La colección está vacía." msgstr "La colección está vacía."
#: ../../include/items.php:4723 #: ../../include/items.php:4810
#, php-format #, php-format
msgid "Collection: %s" msgid "Collection: %s"
msgstr "Colección: %s" msgstr "Colección: %s"
#: ../../include/items.php:4733 ../../mod/connedit.php:674 #: ../../include/items.php:4820 ../../mod/connedit.php:674
#, php-format #, php-format
msgid "Connection: %s" msgid "Connection: %s"
msgstr "Conexión: %s" msgstr "Conexión: %s"
#: ../../include/items.php:4735 #: ../../include/items.php:4822
msgid "Connection not found." msgid "Connection not found."
msgstr "Conexión no encontrada" msgstr "Conexión no encontrada"
#: ../../include/zot.php:677 #: ../../include/zot.php:684
msgid "Invalid data packet" msgid "Invalid data packet"
msgstr "Paquete de datos no válido" msgstr "Paquete de datos no válido"
#: ../../include/zot.php:693 #: ../../include/zot.php:700
msgid "Unable to verify channel signature" msgid "Unable to verify channel signature"
msgstr "No ha sido posible de verificar la signatura del canal" msgstr "No ha sido posible de verificar la signatura del canal"
#: ../../include/zot.php:2161 #: ../../include/zot.php:2208
#, php-format #, php-format
msgid "Unable to verify site signature for %s" msgid "Unable to verify site signature for %s"
msgstr "No ha sido posible de verificar la signatura del sitio para %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" msgid "Default Profile"
msgstr "Perfil principal" msgstr "Perfil principal"
#: ../../include/identity.php:736 #: ../../include/identity.php:759
msgid "Requested channel is not available." msgid "Requested channel is not available."
msgstr "El canal solicitado no está disponible." 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/achievements.php:11 ../../mod/webpages.php:29
#: ../../mod/connect.php:13 ../../mod/hcard.php:8 ../../mod/blocks.php:29 #: ../../mod/connect.php:13 ../../mod/hcard.php:8 ../../mod/blocks.php:29
#: ../../mod/editlayout.php:27 ../../mod/editwebpage.php:28 #: ../../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." msgid "Requested profile is not available."
msgstr "El perfil solicitado no está disponible." 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" msgid "Change profile photo"
msgstr "Cambiar foto de perfil" msgstr "Cambiar foto de perfil"
#: ../../include/identity.php:952 #: ../../include/identity.php:975
msgid "Profiles" msgid "Profiles"
msgstr "Perfiles" msgstr "Perfiles"
#: ../../include/identity.php:952 #: ../../include/identity.php:975
msgid "Manage/edit profiles" msgid "Manage/edit profiles"
msgstr "Administrar/editar perfiles" msgstr "Administrar/editar perfiles"
#: ../../include/identity.php:953 ../../mod/profiles.php:775 #: ../../include/identity.php:976 ../../mod/profiles.php:775
msgid "Create New Profile" msgid "Create New Profile"
msgstr "Crear nuevo perfil" msgstr "Crear nuevo perfil"
#: ../../include/identity.php:968 ../../mod/profiles.php:786 #: ../../include/identity.php:991 ../../mod/profiles.php:786
msgid "Profile Image" msgid "Profile Image"
msgstr "Imagen de perfil" msgstr "Imagen de perfil"
#: ../../include/identity.php:971 #: ../../include/identity.php:994
msgid "visible to everybody" msgid "visible to everybody"
msgstr "visible para cualquiera" msgstr "visible para cualquiera"
#: ../../include/identity.php:972 ../../mod/profiles.php:669 #: ../../include/identity.php:995 ../../mod/profiles.php:669
#: ../../mod/profiles.php:790 #: ../../mod/profiles.php:790
msgid "Edit visibility" msgid "Edit visibility"
msgstr "Editar visibilidad" msgstr "Editar visibilidad"
#: ../../include/identity.php:988 ../../include/identity.php:1227 #: ../../include/identity.php:1011 ../../include/identity.php:1250
msgid "Gender:" msgid "Gender:"
msgstr "Género:" msgstr "Género:"
#: ../../include/identity.php:989 ../../include/identity.php:1271 #: ../../include/identity.php:1012 ../../include/identity.php:1294
msgid "Status:" msgid "Status:"
msgstr "Estado:" msgstr "Estado:"
#: ../../include/identity.php:990 ../../include/identity.php:1282 #: ../../include/identity.php:1013 ../../include/identity.php:1305
msgid "Homepage:" msgid "Homepage:"
msgstr "Página personal:" msgstr "Página personal:"
#: ../../include/identity.php:991 #: ../../include/identity.php:1014
msgid "Online Now" msgid "Online Now"
msgstr "Ahora en línea" 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 #: ../../mod/ping.php:324
msgid "g A l F d" msgid "g A l F d"
msgstr "g A l d F" 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" msgid "F d"
msgstr "d F" msgstr "d F"
#: ../../include/identity.php:1120 ../../include/identity.php:1192 #: ../../include/identity.php:1143 ../../include/identity.php:1215
#: ../../mod/ping.php:346 #: ../../mod/ping.php:346
msgid "[today]" msgid "[today]"
msgstr "[hoy]" msgstr "[hoy]"
#: ../../include/identity.php:1131 #: ../../include/identity.php:1154
msgid "Birthday Reminders" msgid "Birthday Reminders"
msgstr "Recordatorios de cumpleaños" msgstr "Recordatorios de cumpleaños"
#: ../../include/identity.php:1132 #: ../../include/identity.php:1155
msgid "Birthdays this week:" msgid "Birthdays this week:"
msgstr "Cumpleaños esta semana:" msgstr "Cumpleaños esta semana:"
#: ../../include/identity.php:1185 #: ../../include/identity.php:1208
msgid "[No description]" msgid "[No description]"
msgstr "[Sin descripción]" msgstr "[Sin descripción]"
#: ../../include/identity.php:1203 #: ../../include/identity.php:1226
msgid "Event Reminders" msgid "Event Reminders"
msgstr "Recordatorios de eventos" msgstr "Recordatorios de eventos"
#: ../../include/identity.php:1204 #: ../../include/identity.php:1227
msgid "Events this week:" msgid "Events this week:"
msgstr "Eventos de esta semana:" 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 #: ../../include/apps.php:138 ../../mod/profperm.php:112
msgid "Profile" msgid "Profile"
msgstr "Perfil" msgstr "Perfil"
#: ../../include/identity.php:1225 ../../mod/settings.php:1056 #: ../../include/identity.php:1248 ../../mod/settings.php:1056
msgid "Full Name:" msgid "Full Name:"
msgstr "Nombre completo:" msgstr "Nombre completo:"
#: ../../include/identity.php:1232 #: ../../include/identity.php:1255
msgid "Like this channel" msgid "Like this channel"
msgstr "Me gusta este canal" msgstr "Me gusta este canal"
#: ../../include/identity.php:1256 #: ../../include/identity.php:1279
msgid "j F, Y" msgid "j F, Y"
msgstr "j F Y" msgstr "j F Y"
#: ../../include/identity.php:1257 #: ../../include/identity.php:1280
msgid "j F" msgid "j F"
msgstr "j F" msgstr "j F"
#: ../../include/identity.php:1264 #: ../../include/identity.php:1287
msgid "Birthday:" msgid "Birthday:"
msgstr "Cumpleaños:" msgstr "Cumpleaños:"
#: ../../include/identity.php:1268 ../../mod/directory.php:297 #: ../../include/identity.php:1291 ../../mod/directory.php:297
msgid "Age:" msgid "Age:"
msgstr "Edad:" msgstr "Edad:"
#: ../../include/identity.php:1277 #: ../../include/identity.php:1300
#, php-format #, php-format
msgid "for %1$d %2$s" msgid "for %1$d %2$s"
msgstr "por %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:" msgid "Sexual Preference:"
msgstr "Orientación sexual:" msgstr "Orientación sexual:"
#: ../../include/identity.php:1284 ../../mod/directory.php:313 #: ../../include/identity.php:1307 ../../mod/directory.php:313
#: ../../mod/profiles.php:693 #: ../../mod/profiles.php:693
msgid "Hometown:" msgid "Hometown:"
msgstr "Ciudad de origen:" msgstr "Ciudad de origen:"
#: ../../include/identity.php:1286 #: ../../include/identity.php:1309
msgid "Tags:" msgid "Tags:"
msgstr "Etiquetas:" msgstr "Etiquetas:"
#: ../../include/identity.php:1288 ../../mod/profiles.php:694 #: ../../include/identity.php:1311 ../../mod/profiles.php:694
msgid "Political Views:" msgid "Political Views:"
msgstr "Posición política:" msgstr "Posición política:"
#: ../../include/identity.php:1290 #: ../../include/identity.php:1313
msgid "Religion:" msgid "Religion:"
msgstr "Religión:" msgstr "Religión:"
#: ../../include/identity.php:1292 ../../mod/directory.php:315 #: ../../include/identity.php:1315 ../../mod/directory.php:315
msgid "About:" msgid "About:"
msgstr "Sobre mí:" msgstr "Sobre mí:"
#: ../../include/identity.php:1294 #: ../../include/identity.php:1317
msgid "Hobbies/Interests:" msgid "Hobbies/Interests:"
msgstr "Aficciones/Intereses:" msgstr "Aficciones/Intereses:"
#: ../../include/identity.php:1296 ../../mod/profiles.php:697 #: ../../include/identity.php:1319 ../../mod/profiles.php:697
msgid "Likes:" msgid "Likes:"
msgstr "Me gusta:" msgstr "Me gusta:"
#: ../../include/identity.php:1298 ../../mod/profiles.php:698 #: ../../include/identity.php:1321 ../../mod/profiles.php:698
msgid "Dislikes:" msgid "Dislikes:"
msgstr "No me gusta:" msgstr "No me gusta:"
#: ../../include/identity.php:1300 #: ../../include/identity.php:1323
msgid "Contact information and Social Networks:" msgid "Contact information and Social Networks:"
msgstr "Información de contacto y redes sociales:" msgstr "Información de contacto y redes sociales:"
#: ../../include/identity.php:1302 #: ../../include/identity.php:1325
msgid "My other channels:" msgid "My other channels:"
msgstr "Mis otros canales:" msgstr "Mis otros canales:"
#: ../../include/identity.php:1304 #: ../../include/identity.php:1327
msgid "Musical interests:" msgid "Musical interests:"
msgstr "Intereses musicales:" msgstr "Intereses musicales:"
#: ../../include/identity.php:1306 #: ../../include/identity.php:1329
msgid "Books, literature:" msgid "Books, literature:"
msgstr "Libros, literatura:" msgstr "Libros, literatura:"
#: ../../include/identity.php:1308 #: ../../include/identity.php:1331
msgid "Television:" msgid "Television:"
msgstr "Televisión:" msgstr "Televisión:"
#: ../../include/identity.php:1310 #: ../../include/identity.php:1333
msgid "Film/dance/culture/entertainment:" msgid "Film/dance/culture/entertainment:"
msgstr "Cine/danza/cultura/entretenimiento:" msgstr "Cine/danza/cultura/entretenimiento:"
#: ../../include/identity.php:1312 #: ../../include/identity.php:1335
msgid "Love/Romance:" msgid "Love/Romance:"
msgstr "Vida sentimental/amorosa:" msgstr "Vida sentimental/amorosa:"
#: ../../include/identity.php:1314 #: ../../include/identity.php:1337
msgid "Work/employment:" msgid "Work/employment:"
msgstr "Trabajo:" msgstr "Trabajo:"
#: ../../include/identity.php:1316 #: ../../include/identity.php:1339
msgid "School/education:" msgid "School/education:"
msgstr "Estudios:" msgstr "Estudios:"
#: ../../include/identity.php:1336 #: ../../include/identity.php:1359
msgid "Like this thing" msgid "Like this thing"
msgstr "Me gusta esto" msgstr "Me gusta esto"
@ -4273,7 +4274,7 @@ msgstr "Omitir este paso"
#: ../../mod/profile_photo.php:366 #: ../../mod/profile_photo.php:366
msgid "select a photo from your photo albums" 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 #: ../../mod/profile_photo.php:382
msgid "Crop Image" msgid "Crop Image"
@ -4610,7 +4611,7 @@ msgstr "Extensiones/Aplicaciones instaladas:"
msgid "No installed plugins/addons/apps" msgid "No installed plugins/addons/apps"
msgstr "Extensiones/Aplicaciones no instaladas:" 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" msgid "$Projectname"
msgstr "$Projectname" msgstr "$Projectname"
@ -4875,12 +4876,12 @@ msgstr "El acceso a este elemento está restringido."
#: ../../mod/photos.php:535 #: ../../mod/photos.php:535
#, php-format #, php-format
msgid "%1$.2f MB of %2$.2f MB photo storage used." 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 #: ../../mod/photos.php:538
#, php-format #, php-format
msgid "%1$.2f MB photo storage used." 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 #: ../../mod/photos.php:562
msgid "Upload Photos" msgid "Upload Photos"
@ -5787,7 +5788,7 @@ msgstr "Servidor no encontrado"
#: ../../mod/poke.php:159 #: ../../mod/poke.php:159
msgid "Poke/Prod" msgid "Poke/Prod"
msgstr "Dar un toque/Incitar" msgstr "Toque/Incitación"
#: ../../mod/poke.php:160 #: ../../mod/poke.php:160
msgid "poke, prod or do other things to somebody" 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." msgid "OpenID protocol error. No ID returned."
msgstr "Error del protocolo OpenID. Ningún ID recibido como respuesta." 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 #, php-format
msgid "Welcome %s. Remote authentication successful." msgid "Welcome %s. Remote authentication successful."
msgstr "Bienvenido %s. La identificación desde su servidor se ha llevado a cabo correctamente." 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" 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" 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 #: ../../mod/viewconnections.php:62
msgid "No connections." msgid "No connections."
msgstr "Sin conexiones." msgstr "Sin conexiones."
@ -7989,7 +7965,7 @@ msgstr "Usted ha sido etiquetado en una publicación"
#: ../../mod/settings.php:1109 #: ../../mod/settings.php:1109
msgid "You are poked/prodded/etc. in a post" 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 #: ../../mod/settings.php:1112
msgid "Show visual notifications including:" msgid "Show visual notifications including:"
@ -8171,6 +8147,114 @@ msgstr "Eliminar conversación"
msgid "D, d M Y - g:i A" msgid "D, d M Y - g:i A"
msgstr "D d M Y - G:i" 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 #: ../../mod/mood.php:131
msgid "Set your current mood and tell your friends" msgid "Set your current mood and tell your friends"
msgstr "Describir su estado de ánimo para comunicárselo a sus amigos" msgstr "Describir su estado de ánimo para comunicárselo a sus amigos"
@ -8504,7 +8588,7 @@ msgstr "Mensaje eliminado."
#: ../../mod/mail.php:156 #: ../../mod/mail.php:156
msgid "Message recalled." msgid "Message recalled."
msgstr "Mensaje recuperado." msgstr "Mensaje revocado."
#: ../../mod/mail.php:225 #: ../../mod/mail.php:225
msgid "Send Private Message" msgid "Send Private Message"
@ -8532,11 +8616,11 @@ msgstr "Mensaje eliminado"
#: ../../mod/mail.php:313 #: ../../mod/mail.php:313
msgid "Recall message" msgid "Recall message"
msgstr "Recuperar el mensaje" msgstr "Revocar el mensaje"
#: ../../mod/mail.php:315 #: ../../mod/mail.php:315
msgid "Message has been recalled." msgid "Message has been recalled."
msgstr "El mensaje ha sido recuperado." msgstr "El mensaje ha sido revocado."
#: ../../mod/mail.php:332 #: ../../mod/mail.php:332
msgid "Private Conversation" msgid "Private Conversation"
@ -8564,7 +8648,7 @@ msgstr "Descartar"
msgid "Please login." msgid "Please login."
msgstr "Por favor, inicie sesión." msgstr "Por favor, inicie sesión."
#: ../../mod/post.php:235 #: ../../mod/post.php:236
msgid "" msgid ""
"Remote authentication blocked. You are logged into this site locally. Please" "Remote authentication blocked. You are logged into this site locally. Please"
" logout and retry." " logout and retry."
@ -8686,7 +8770,7 @@ msgstr "Descripción del formato"
msgid "Download PDL file" msgid "Download PDL file"
msgstr "Descargar el fichero PDL" msgstr "Descargar el fichero PDL"
#: ../../mod/home.php:73 #: ../../mod/home.php:75
#, php-format #, php-format
msgid "Welcome to %s" msgid "Welcome to %s"
msgstr "Bienvenido a %s" msgstr "Bienvenido a %s"
@ -8897,11 +8981,11 @@ msgstr "Ancho de la sección"
#: ../../view/theme/apw/php/config.php:289 #: ../../view/theme/apw/php/config.php:289
msgid "Left offset of the aside" msgid "Left offset of the aside"
msgstr "Desplazamiento izquierdo del lateral" msgstr "Desplazamiento izquierdo del panel lateral"
#: ../../view/theme/apw/php/config.php:290 #: ../../view/theme/apw/php/config.php:290
msgid "Right offset of the aside element" 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 #: ../../view/theme/redbasic/php/config.php:82
msgid "Light (Red Matrix default)" msgid "Light (Red Matrix default)"
@ -9073,7 +9157,7 @@ msgstr "[red] Error SSL del sitio web en %s"
#: ../../boot.php:2352 #: ../../boot.php:2352
msgid "Cron/Scheduled tasks not running." 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 #: ../../boot.php:2356
#, php-format #, php-format

View file

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

View file

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

View file

@ -145,18 +145,18 @@ $a->strings["%d Connection"] = array(
$a->strings["View Connections"] = "Ver conexiones"; $a->strings["View Connections"] = "Ver conexiones";
$a->strings["Search"] = "Buscar"; $a->strings["Search"] = "Buscar";
$a->strings["Save"] = "Guardar"; $a->strings["Save"] = "Guardar";
$a->strings["poke"] = "dar un toque"; $a->strings["poke"] = "un toque";
$a->strings["poked"] = "ha recibido 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["pinged"] = "avisado/a";
$a->strings["prod"] = "incitar"; $a->strings["prod"] = "incitar";
$a->strings["prodded"] = "incitado/a"; $a->strings["prodded"] = "incitado/a";
$a->strings["slap"] = "abofetear"; $a->strings["slap"] = "abofetear";
$a->strings["slapped"] = "abofeteado/a"; $a->strings["slapped"] = "abofeteado/a";
$a->strings["finger"] = "señalar"; $a->strings["finger"] = "un \"finger\"";
$a->strings["fingered"] = "señalado/a"; $a->strings["fingered"] = "ha recibido un \"finger\"";
$a->strings["rebuff"] = "desairar"; $a->strings["rebuff"] = "un rechazo";
$a->strings["rebuffed"] = "desairado/a"; $a->strings["rebuffed"] = "ha sido rechazado/a";
$a->strings["happy"] = "feliz"; $a->strings["happy"] = "feliz";
$a->strings["sad"] = "triste"; $a->strings["sad"] = "triste";
$a->strings["mellow"] = "amable"; $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["Select an alternate language"] = "Selecciona un idioma alternativo";
$a->strings["photo"] = "foto"; $a->strings["photo"] = "foto";
$a->strings["event"] = "evento"; $a->strings["event"] = "evento";
$a->strings["status"] = "estado"; $a->strings["status"] = "el mensaje de estado";
$a->strings["comment"] = "comentario"; $a->strings["comment"] = "comentario";
$a->strings["activity"] = "actividad"; $a->strings["activity"] = "actividad";
$a->strings["Design Tools"] = "Herramientas de diseño"; $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 Notification"] = "Notificación de \$Projectname";
$a->strings["\$projectname"] = "\$projectname"; $a->strings["\$projectname"] = "\$projectname";
$a->strings["Thank You,"] = "Gracias,"; $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["No Subject"] = "Sin asunto";
$a->strings["General Features"] = "Características generales"; $a->strings["General Features"] = "Características generales";
$a->strings["Content Expiration"] = "Caducidad del contenido"; $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["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["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]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]%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]su %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["[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["%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"; $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 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["%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["[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["%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["[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["%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["[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"; $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 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 photo albums"] = "Pueden verse mis álbumes de fotos";
$a->strings["Can view my connections"] = "Pueden verse mis conexiones"; $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 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 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”)"; $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["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["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 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 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["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"; $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__ Agree"] = "De acuerdo";
$a->strings["__ctx:title__ Disagree"] = "En desacuerdo"; $a->strings["__ctx:title__ Disagree"] = "En desacuerdo";
$a->strings["__ctx:title__ Abstain"] = "Abstención"; $a->strings["__ctx:title__ Abstain"] = "Abstención";
$a->strings["__ctx:title__ Attending"] = "Participar"; $a->strings["__ctx:title__ Attending"] = "Participaré";
$a->strings["__ctx:title__ Not attending"] = "No participar"; $a->strings["__ctx:title__ Not attending"] = "No participaré";
$a->strings["__ctx:title__ Might attend"] = "Quizá participe"; $a->strings["__ctx:title__ Might attend"] = "Quizá participe";
$a->strings["View %s's profile @ %s"] = "Ver el perfil @ %s de %s"; $a->strings["View %s's profile @ %s"] = "Ver el perfil @ %s de %s";
$a->strings["Categories:"] = "Categorías:"; $a->strings["Categories:"] = "Categorías:";
@ -607,12 +607,12 @@ $a->strings["remove"] = "eliminar";
$a->strings["Delete Selected Items"] = "Eliminar elementos seleccionados"; $a->strings["Delete Selected Items"] = "Eliminar elementos seleccionados";
$a->strings["View Source"] = "Ver la fuente original de la entrada"; $a->strings["View Source"] = "Ver la fuente original de la entrada";
$a->strings["Follow Thread"] = "Seguir el hilo"; $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["View Photos"] = "Ver fotos";
$a->strings["Matrix Activity"] = "Actividad en la red de esta conexión"; $a->strings["Matrix Activity"] = "Actividad en la red de esta conexión";
$a->strings["Edit Contact"] = "Editar contacto"; $a->strings["Edit Contact"] = "Editar contacto";
$a->strings["Send PM"] = "Enviar Mensaje Privado"; $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 likes this."] = "a %s le gusta esto.";
$a->strings["%s doesn't like this."] = "a %s no 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( $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["About"] = "Sobre mí";
$a->strings["Profile Details"] = "Detalles del perfil"; $a->strings["Profile Details"] = "Detalles del perfil";
$a->strings["Photo Albums"] = "Álbumes de fotos"; $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["Chatrooms"] = "Salas de chat";
$a->strings["Saved Bookmarks"] = "Marcadores guardados"; $a->strings["Saved Bookmarks"] = "Marcadores guardados";
$a->strings["Manage Webpages"] = "Administrar páginas web"; $a->strings["Manage Webpages"] = "Administrar páginas web";
$a->strings["__ctx:noun__ Attending"] = array( $a->strings["__ctx:noun__ Attending"] = array(
0 => "Asistir", 0 => "Asistir",
1 => "Participar", 1 => "Participaré",
); );
$a->strings["__ctx:noun__ Not Attending"] = array( $a->strings["__ctx:noun__ Not Attending"] = array(
0 => "No asistir", 0 => "No asistir",
1 => "No participar", 1 => "No participaré",
); );
$a->strings["__ctx:noun__ Undecided"] = array( $a->strings["__ctx:noun__ Undecided"] = array(
0 => "Indeciso/a", 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["Upload Profile Photo"] = "Subir foto de perfil";
$a->strings["or"] = "o"; $a->strings["or"] = "o";
$a->strings["skip this step"] = "Omitir este paso"; $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["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["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"; $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["Delete Photo"] = "Borrar foto";
$a->strings["No photos selected"] = "No hay fotos seleccionadas"; $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["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 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 de almacenamiento de fotos utilizado."; $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["Upload Photos"] = "Subir fotos";
$a->strings["Enter a new album name"] = "Introducir un nuevo nombre de álbum"; $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"; $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 Friends"] = "Sugerir amigos";
$a->strings["Suggest a friend for %s"] = "Sugerir un amigo a %s"; $a->strings["Suggest a friend for %s"] = "Sugerir un amigo a %s";
$a->strings["Hub not found."] = "Servidor no encontrado"; $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["poke, prod or do other things to somebody"] = "dar un toque, incitar u otras cosas a alguien";
$a->strings["Recipient"] = "Destinatario"; $a->strings["Recipient"] = "Destinatario";
$a->strings["Choose what you wish to do to recipient"] = "Elegir qué desea enviar al 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["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["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["%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["No connections."] = "Sin conexiones.";
$a->strings["Visit %s's profile [%s]"] = "Visitar el perfil de %s [%s]"; $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"; $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 private message"] = "Reciba un mensaje privado";
$a->strings["You receive a friend suggestion"] = "Reciba una sugerencia de amistad"; $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 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["Show visual notifications including:"] = "Mostrar notificaciones visuales que incluyan:";
$a->strings["Unseen matrix activity"] = "Actividad no vista en la red"; $a->strings["Unseen matrix activity"] = "Actividad no vista en la red";
$a->strings["Unseen channel activity"] = "Actividad no vista en el canal"; $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["No messages."] = "Sin mensajes.";
$a->strings["Delete conversation"] = "Eliminar conversación"; $a->strings["Delete conversation"] = "Eliminar conversación";
$a->strings["D, d M Y - g:i A"] = "D d M Y - G:i"; $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["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["Total votes"] = "Total de votos";
$a->strings["Average Rating"] = "Valoración media"; $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["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["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 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["Send Private Message"] = "Enviar un mensaje privado";
$a->strings["To:"] = "Para:"; $a->strings["To:"] = "Para:";
$a->strings["Subject:"] = "Asunto:"; $a->strings["Subject:"] = "Asunto:";
$a->strings["Send"] = "Enviar"; $a->strings["Send"] = "Enviar";
$a->strings["Message not found."] = "No se encuentra el mensaje."; $a->strings["Message not found."] = "No se encuentra el mensaje.";
$a->strings["Delete message"] = "Mensaje eliminado"; $a->strings["Delete message"] = "Mensaje eliminado";
$a->strings["Recall message"] = "Recuperar el mensaje"; $a->strings["Recall message"] = "Revocar el mensaje";
$a->strings["Message has been recalled."] = "El mensaje ha sido recuperado."; $a->strings["Message has been recalled."] = "El mensaje ha sido revocado.";
$a->strings["Private Conversation"] = "Conversación privada"; $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["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"; $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["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["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["Section width"] = "Ancho de la sección";
$a->strings["Left offset of the aside"] = "Desplazamiento izquierdo del 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 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["Light (Red Matrix default)"] = "Ligero (predeterminado de RedMatrix)";
$a->strings["Select scheme"] = "Elegir un esquema"; $a->strings["Select scheme"] = "Elegir un esquema";
$a->strings["Narrow navbar"] = "Estrechar la barra de navegación"; $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["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["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["[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"; $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+' '; 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) { function submit_form(e) {
$(e).parents('form').submit(); $(e).parents('form').submit();
} }
@ -163,3 +171,29 @@ function submit_form(e) {
a.on('textComplete:select', function(e, value, strategy) { onselect(value); }); a.on('textComplete:select', function(e, value, strategy) { onselect(value); });
}; };
})( jQuery ); })( 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; return true;
} }
function inserteditortag(BBcode) { function inserteditortag(BBcode, id) {
// allow themes to override this // allow themes to override this
if(typeof(insertEditorFormatting) != 'undefined') if(typeof(insertEditorFormatting) != 'undefined')
return(insertEditorFormatting(BBcode)); return(insertEditorFormatting(BBcode));
textarea = document.getElementById('profile-jot-text'); textarea = document.getElementById(id);
if (document.selection) { if (document.selection) {
textarea.focus(); textarea.focus();
selected = document.selection.createRange(); selected = document.selection.createRange();
@ -616,11 +616,12 @@ function updateConvItems(mode,data) {
function collapseHeight() { function collapseHeight() {
$(".wall-item-content, .directory-collapse").each(function() { $(".wall-item-content, .directory-collapse").each(function() {
var orgHeight = $(this).height(); var orgHeight = $(this).outerHeight(true);
if(orgHeight > divmore_height + 10) { if(orgHeight > divmore_height + 10) {
if(! $(this).hasClass('divmore')) { if(! $(this).hasClass('divmore')) {
$(this).readmore({ $(this).readmore({
speed: 0, speed: 0,
heightMargin: 50,
collapsedHeight: divmore_height, collapsedHeight: divmore_height,
moreLink: '<a href="#" class="divgrow-showmore">' + aStr.divgrowmore + '</a>', moreLink: '<a href="#" class="divgrow-showmore">' + aStr.divgrowmore + '</a>',
lessLink: '<a href="#" class="divgrow-showmore">' + aStr.divgrowless + '</a>', lessLink: '<a href="#" class="divgrow-showmore">' + aStr.divgrowless + '</a>',
@ -745,12 +746,12 @@ function justifyPhotos() {
margins: 3, margins: 3,
border: 0, border: 0,
sizeRangeSuffixes: { sizeRangeSuffixes: {
'lt100': '-2', 'lt100': '-3',
'lt240': '-2', 'lt240': '-3',
'lt320': '-2', 'lt320': '-3',
'lt500': '', 'lt500': '-2',
'lt640': '-1', 'lt640': '-2',
'lt1024': '-0' 'lt1024': '-1'
} }
}).on('jg.complete', function(e){ justifiedGalleryActive = false; }); }).on('jg.complete', function(e){ justifiedGalleryActive = false; });
} }

View file

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

View file

@ -6,11 +6,10 @@
var ispublic = aStr.everybody; var ispublic = aStr.everybody;
$(document).ready(function() { $(document).ready(function() {
$(document).ready(function() {
$("#photo-edit-newtag").contact_autocomplete(baseurl + '/acl', 'p', false, function(data) { $("#photo-edit-newtag").contact_autocomplete(baseurl + '/acl', 'p', false, function(data) {
$("#photo-edit-newtag").val('@' + data.name); $("#photo-edit-newtag").val('@' + data.name);
}); });
});
$('#contact_allow, #contact_deny, #group_allow, #group_deny').change(function() { $('#contact_allow, #contact_deny, #group_allow, #group_deny').change(function() {
var selstr; var selstr;
@ -24,4 +23,14 @@ $(document).ready(function() {
$('#jot-public').show(); $('#jot-public').show();
} }
}).trigger('change'); }).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() { $(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); $("#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, 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. but when I tried to install it, something went terribly wrong.
This needs to be fixed soon and it requires human intervention. 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. fix it on your own. My database might be invalid.
The error message is '{{$error}}'. The error message is '{{$error}}'.

View file

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

View file

@ -5,13 +5,26 @@
.vcard, #contact-block, .widget { .vcard, #contact-block, .widget {
background-color: transparent; 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 { .abook-pending-contact, .abook-permschange {
background: #402900; background: #402900;
} }
.contact-entry-wrapper {
border: 1px solid #333;
}
#cboxContent a { #cboxContent a {
color: #000; color: #000;
} }
@ -75,7 +88,7 @@
background-color: #111; background-color: #111;
} }
.btn-default { .btn {
background-color: #1e1e1e; background-color: #1e1e1e;
border-color: #222; border-color: #222;
color: #ccc; color: #ccc;
@ -83,7 +96,7 @@
box-shadow: none; box-shadow: none;
} }
.btn-default:hover, .btn-default:focus, .btn-default:active .btn-default.active { .btn:hover, .btn:focus, .btn:active {
background-color: #222; background-color: #222;
border-color: #222; border-color: #222;
color: #fff; color: #fff;
@ -94,6 +107,40 @@
text-decoration: none; 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_first,
.pager_last, .pager_last,
.pager_prev, .pager_prev,
@ -177,6 +224,7 @@ nav .dropdown-menu {
text-decoration: underline; text-decoration: underline;
background-color: #222; background-color: #222;
color: #ccc; color: #ccc;
border-color: #333;
} }
aside .nav > li > a:hover, aside .nav > li > a:focus { 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'); 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) { @media (min-width: 768px) {
.nav-tabs.nav-justified > li > a { .nav-tabs.nav-justified > li > a {
border-bottom: 1px solid #333; 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=$background_image}}
{{include file="field_colorinput.tpl" field=$item_colour}} {{include file="field_colorinput.tpl" field=$item_colour}}
{{include file="field_colorinput.tpl" field=$comment_item_colour}} {{include file="field_colorinput.tpl" field=$comment_item_colour}}
{{include file="field_colorinput.tpl" field=$comment_border_colour}} {{*include file="field_colorinput.tpl" field=$comment_border_colour*}}
{{include file="field_input.tpl" field=$comment_indent}} {{*include file="field_input.tpl" field=$comment_indent*}}
{{include file="field_input.tpl" field=$body_font_size}} {{include file="field_input.tpl" field=$body_font_size}}
{{include file="field_input.tpl" field=$font_size}} {{include file="field_input.tpl" field=$font_size}}
{{include file="field_colorinput.tpl" field=$font_colour}} {{include file="field_colorinput.tpl" field=$font_colour}}

View file

@ -3,11 +3,13 @@
<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" /> <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> <div class="app-name" style="text-align:center;">{{$app.name}}</div>
</a> </a>
</div>
{{if $app.type !== 'system'}} {{if $app.type !== 'system'}}
{{if $purchase}} {{if $purchase}}
<div class="app-purchase">
<a href="{{$app.page}}" class="btn btn-default" title="{{$purchase}}" ><i class="icon-external"></i></a> <a href="{{$app.page}}" class="btn btn-default" title="{{$purchase}}" ><i class="icon-external"></i></a>
{{/if}}
</div> </div>
{{/if}}
{{if $install || $update || $delete }} {{if $install || $update || $delete }}
<div class="app-tools"> <div class="app-tools">
<form action="{{$hosturl}}appman" method="post"> <form action="{{$hosturl}}appman" method="post">
@ -16,8 +18,8 @@
{{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 $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}} {{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> </form>
{{/if}}
{{/if}}
</div> </div>
{{/if}}
{{/if}}
</div> </div>

View file

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

View file

@ -8,6 +8,7 @@
<div class="clear"></div> <div class="clear"></div>
</div> </div>
<div id="files-upload-tools" class="section-content-tools-wrapper form-group"> <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> <label for="files-upload">{{$upload_header}}</label>
<form method="post" action="" enctype="multipart/form-data"> <form method="post" action="" enctype="multipart/form-data">
<input type="hidden" name="sabreAction" value="put"> <input type="hidden" name="sabreAction" value="put">

View file

@ -4,8 +4,8 @@
{{if $is_owner}} {{if $is_owner}}
<a href="/sharedwithme" class="btn btn-xs btn-default"><i class="icon-cloud-download"></i>&nbsp;{{$shared}}</a> <a href="/sharedwithme" class="btn btn-xs btn-default"><i class="icon-cloud-download"></i>&nbsp;{{$shared}}</a>
{{/if}} {{/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-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" 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-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> </div>
{{/if}} {{/if}}
<h2>{{$header}}</h2> <h2>{{$header}}</h2>

View file

@ -4,6 +4,7 @@
</div> </div>
<div class="contact-entry-photo-end" ></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> <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-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 class="contact-entry-end" ></div>
</div> </div>

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