diff options
47 files changed, 722 insertions, 663 deletions
@@ -43,13 +43,14 @@ require_once('include/taxonomy.php'); require_once('include/identity.php'); require_once('include/Contact.php'); require_once('include/account.php'); +require_once('include/AccessList.php'); define ( 'PLATFORM_NAME', 'hubzilla' ); define ( 'RED_VERSION', trim(file_get_contents('version.inc')) . 'H'); define ( 'ZOT_REVISION', 1 ); -define ( 'DB_UPDATE_VERSION', 1148 ); +define ( 'DB_UPDATE_VERSION', 1149 ); /** * @brief Constant with a HTML line break. @@ -80,9 +81,8 @@ $DIRECTORY_FALLBACK_SERVERS = array( 'https://zothub.com', 'https://zotid.net', 'https://red.zottel.red', - 'https://redmatrix.info', + 'https://gravizot.de', 'https://my.federated.social', - 'https://redmatrix.nl' ); @@ -800,7 +800,7 @@ class App { $this->is_mobile = $mobile_detect->isMobile(); $this->is_tablet = $mobile_detect->isTablet(); - $this->head_set_icon('/images/rm-32.png'); + $this->head_set_icon('/images/hz-32.png'); BaseObject::set_app($this); diff --git a/doc/Privacy.md b/doc/Privacy.md index fd6df6315..ff5eac181 100644 --- a/doc/Privacy.md +++ b/doc/Privacy.md @@ -1,25 +1,28 @@ -#Privacy Policy +Privacy Policy +============== + + +##Summary## -##Summary Q: Who can see my content? -A: By default ANYBODY on the internet, UNLESS you restrict it. The $Projectname allows you to choose the privacy level you desire. Restricted content will NOT be visible to spy networks and their advertisers. It will be protected against eavesdropping by outsiders - to the best of our ability. Hub administrators with sufficient skills and patience MAY be able to eavesdrop on some private communications but they must expend effort to do so. Privacy modes exist within the $Projectname which are even resistant to eavesdropping by skilled and determined hub administrators. +A: By default ANYBODY on the internet, UNLESS you restrict it. $Projectname allows you to choose the privacy level you desire. Restricted content will NOT be visible to "spy networks" and advertisers. It will be protected against eavesdropping by outsiders - to the best of our ability. Hub administrators with sufficient skills and patience MAY be able to eavesdrop on some private communications but they must expend effort to do so. Privacy modes exist within $Projectname which are even resistant to eavesdropping by skilled and determined hub administrators. Q: Can my content be censored? -A: The $Projectname (the network) CANNOT censor your content. Server and hub administrators are subject to local laws and MAY remove objectionable content from their site/hub. Anybody MAY become a hub administrator, including you; and therefore publish content which might otherwise be censored. You still MAY be subject to local laws. +A: $Projectname (the network) CANNOT censor your content. Server and hub administrators are subject to local laws and MAY remove objectionable content from their site/hub. Anybody MAY become a hub administrator, including you; and therefore publish content which might otherwise be censored. You still MAY be subject to local laws. ##Definitions **$Projectname** -Otherwise referred to as "the network", the $Projectname is a collection of individual computers/servers (aka **hubs**) which connect together to form a larger cooperative network. +Otherwise referred to as "the network", $Projectname is a collection of individual computers/servers (aka **hubs**) which connect together to form a larger cooperative network. **hub** -An individual computer or server connected to the $Projectname. These are provided by a **hub administrator** and may be public or private, paid or free. +An individual computer or server connected to $Projectname. These are provided by a **hub administrator** and may be public or private, paid or free. **hub administrator** @@ -29,7 +32,7 @@ The system operator of an individual hub. **Public Information** -Any information or anything posted by you within the $Projectname MAY be public or visible to anybody on the internet. To the extent possible, the $Projectname allows you to protect content and restrict who can view it. +Any information or anything posted by you within $Projectname MAY be public or visible to anybody on the internet. To the extent possible, $Projectname allows you to protect content and restrict who can view it. Your profile photo, your channel name, and the location (URL or network address) of your channel are visible to anybody on the internet and privacy controls will not affect the display of these items. @@ -37,7 +40,7 @@ You MAY additionally provide other profile information. Any information which yo **Content** -Content you provide (status posts, photos, files, etc.) belongs to you. The $Projectname default is to publish content openly and visible to anybody on the internet (PUBLIC). You MAY control this in your channel settings and restrict the default permissions or you MAY restrict the visibility of any single published item separately (PRIVATE). The $Projectname developers will ensure that restricted content is ONLY visible to those in the restriction list - to the best of their ability. +Content you provide (status posts, photos, files, etc.) belongs to you. The $Projectname default is to publish content openly and visible to anybody on the internet (PUBLIC). You MAY control this in your channel settings and restrict the default permissions or you MAY restrict the visibility of any single published item separately (PRIVATE). $Projectname developers will ensure that restricted content is ONLY visible to those in the restriction list - to the best of their ability. Content (especially status posts) that you share with other networks or that you have made visible to anybody on the internet (PUBLIC) cannot easily be taken back once it has been published. It MAY be shared with other networks and made available through RSS/Atom feeds. It may also be syndicated on other $Projectname sites. It MAY appear on spy networks and internet searches. If you do not wish this default behaviour please adjust your channel settings and restrict who can see your content. @@ -48,25 +51,27 @@ Comments to posts that were created by others and posts which are designated as **Private Information** -$Projectname developers will ensure that any content you provide which is designated as PRIVATE will be protected against eavesdropping - to the best of their ability. Private content is generally hidden or obscured even from hub administrators. It is also stripped from email notifications. It is difficult but NOT impossible for this content to be seen by a hub administrator. This is a side effect of the physical laws of the universe. Unfortunately, if a database needs to decrypt a post at display time, it must have the means to decrypt the post! End to end encryption is also provided and this CANNOT be seen, even by a determined administrator. +$Projectname developers will ensure that any content you provide which is designated as PRIVATE will be protected against eavesdropping - to the best of their ability. Private content is generally hidden or obscured even from hub administrators. It is also stripped from email notifications. It is difficult but NOT impossible for this content to be seen by a hub administrator. End to end encryption is provided as an optional feature and this CANNOT be seen, even by a determined administrator. ##Identity Privacy -Privacy for your identity is another aspect. Because you have a decentralized identity in the $Projectname, your privacy extends beyond your home hub. If you want to have complete control of your privacy and security you should run your own hub on a dedicated server. For many people, this is complicated and may stretch their technical abilities. So let's list a few precautions you can make to assure your privacy as much as possible. +Privacy for your identity is another aspect. Because you have a decentralized identity in $Projectname, your privacy extends beyond your home hub. If you want to have complete control of your privacy and security you should run your own hub on a dedicated server. For many people, this is complicated and may stretch their technical abilities. So let's list a few precautions you can make to assure your privacy as much as possible. A decentralized identity has a lot of advantages and gives you al lot of interesting features, but you should be aware of the fact that your identity is known by other hubs in the $Projectname network. One of those advantages is that other channels can serve you customized content and allow you to see private things (such as private photos which others wish to share with you). Because of this those channels need to know who you are. But we understand that sometimes those other channels know more from you than you might desire. For instance the plug-in Visage that can tell a channel owner the last time you visit their profile. You can easily OPT-OUT of this low level and we think, harmless tracking. -* You can enable [Do Not Track (DNT)](http://donottrack.us/) in your web browser. We respect this new privacy policy proposal. All modern browsers support DNT. You will find it in the privacy settings of your browsers or else you can consult the web browser's manual. This will not affect the functionality of the $Projectname. This setting is probably enough for most people. +* You can enable [Do Not Track (DNT)](http://donottrack.us/) in your web browser. We respect this new privacy policy proposal. All modern browsers support DNT. You will find it in the privacy settings of your browsers or else you can consult the web browser's manual. This will not affect the functionality of $Projectname. This setting is probably enough for most people. + *You can [disable publication](settings) of your channel in our channel directory. If you want people to find your channel, you should give your channel address directly to them. We think this is a good indication that you prefer extra privacy and automatically enable "Do Not Track" if this is the case. + * You can have a blocked hub. That means that all channels and content on that hub is not public, and not visible to the outside world. This is something only your hub administrator can do. We also respect this and automatically enable "Do Not Track" if it is set. ###Censorship -The $Projectname is a global network which is inclusive of all religions and cultures. This does not imply that every member of the network feels the same way you do on contentious issues, and some people may be STRONGLY opposed to the content you post. In general, if you wish to post something that you know may nor be universally acceptable, the best approach is to restrict the audience using privacy controls to a small circle of friends. +$Projectname is a global network which is inclusive of all religions and cultures. This does not imply that every member of the network feels the same way you do on contentious issues, and some people may be STRONGLY opposed to the content you post. In general, if you wish to post something that you know may nor be universally acceptable, the best approach is to restrict the audience using privacy controls to a small circle of friends. -The $Projectname as a network provider is unable to censor content. However, hub administrators MAY censor any content which appears on their hub to comply with local laws or even personal judgement. Their decision is final. If you have issues with any hub administrator, you may move your account and postings to another site which is more in line with your expectations. Please check (periodically) the [Terms of Service](help/TermsOfService) of your hub to learn about any rules or guidelines. If your content consists of material which is illegal or may cause issues, you are STRONGLY encouraged to host your own (become a hub administrator). You may still find that your content is blocked on some hubs, but the $Projectname as a network cannot block it from being posted. +$Projectname as a network provider is unable to censor content. However, hub administrators MAY censor any content which appears on their hub to comply with local laws or even personal judgement. Their decision is final. If you have issues with any hub administrator, you may move your account and postings to another site which is more in line with your expectations. Please check (periodically) the [Terms of Service](help/TermsOfService) of your hub to learn about any rules or guidelines. If your content consists of material which is illegal or may cause issues, you are STRONGLY encouraged to host your own (become a hub administrator). You may still find that your content is blocked on some hubs, but $Projectname as a network cannot block it from being posted. -The $Projectname RECOMMENDS that hub administrators provide a grace period of 1-2 days between warning an account holder of content that needs to be removed and physically removing or disabling the account. This will give the content owner an opportunity to export their channel meta-data and import it to another site. In rare cases the content may be of such a nature to justify the immediate termination of the account. This is a hub decision, not a $Projectname decision. +$Projectname RECOMMENDS that hub administrators provide a grace period of 1-2 days between warning an account holder of content that needs to be removed and physically removing or disabling the account. This will give the content owner an opportunity to export their channel meta-data and import it to another site. In rare cases the content may be of such a nature to justify the immediate termination of the account. This is a hub decision, not a $Projectname decision. If you typically and regularly post content of an adult or offensive nature, you are STRONGLY encouraged to mark your account "NSFW" (Not Safe For Work). This will prevent the display of your profile photo in the directory except to viewers that have chosen to disable "safe mode". If your profile photo is found by directory administrators to be adult or offensive, the directory administrator MAY flag your profile photo as NSFW. There is currently no official mechanism to contest or reverse this decision, which is why you SHOULD mark your own account NSFW if it is likely to be inappropriate for general audiences. diff --git a/doc/Widgets.md b/doc/Widgets.md index 5cc7eab2f..a225f5ef3 100644 --- a/doc/Widgets.md +++ b/doc/Widgets.md @@ -104,6 +104,9 @@ Some/many of these widgets have restrictions which may restrict the type of page * all - display completed tasks if all is non-zero. <br /> <br /> +* forums - provide a list of connected public forums with unseen counts for the current logged-in channel. +<br /> <br /> + Creating New Widgets ==================== diff --git a/doc/admins.bb b/doc/admins.bb new file mode 100644 index 000000000..d4e90c8a3 --- /dev/null +++ b/doc/admins.bb @@ -0,0 +1,12 @@ +[h2]Documentation for Hub Administrators[/h2] + +[h3]Administrators[/h3] + +[zrl=[baseurl]/help/install]Install[/zrl] +[zrl=[baseurl]/help/red2pi]Installing $Projectname on the Raspberry Pi[/zrl] +[zrl=[baseurl]/help/troubleshooting]Troubleshooting Tips[/zrl] +[zrl=[baseurl]/help/hidden_configs]Tweaking $Projectname's Hidden Configurations[/zrl] +[zrl=[baseurl]/help/faq_admins]FAQ For Admins[/zrl] +[zrl=[baseurl]/help/service_classes]Service Classes[/zrl] + + diff --git a/doc/develop.bb b/doc/develop.bb new file mode 100644 index 000000000..c46447cce --- /dev/null +++ b/doc/develop.bb @@ -0,0 +1,34 @@ +[h2]Documentation for Developers[/h2] + +[h3]Technical Documentation[/h3] +[zrl=[baseurl]/help/Zot---A-High-Level-Overview]A high level overview of Zot[/zrl] +[zrl=[baseurl]/help/zot]An introduction to Zot[/zrl] +[zrl=[baseurl]/help/zot_structures]Zot Stuctures[/zrl] +[zrl=[baseurl]/help/comanche]Comanche Page Descriptions[/zrl] +[zrl=[baseurl]/help/Creating-Templates]Creating Comanche Templates[/zrl] +[zrl=[baseurl]/help/Widgets]Widgets[/zrl] +[zrl=[baseurl]/help/plugins]Plugins[/zrl] +[zrl=[baseurl]/help/doco]Contributing Documentation[/zrl] +[zrl=[baseurl]/help/DerivedTheme1]Creating Derivative Themes[/zrl] +[zrl=[baseurl]/help/schema_development]Schemas[/zrl] +[zrl=[baseurl]/help/Translations]Translations[/zrl] +[zrl=[baseurl]/help/developers]Developers[/zrl] +[zrl=[baseurl]/help/intro_for_developers]Intro for Developers[/zrl] +[zrl=[baseurl]/help/database]Database schema documantation[/zrl] +[zrl=[baseurl]/help/api_functions]API functions[/zrl] +[zrl=[baseurl]/help/api_posting]Posting to the red# using the API[/zrl] +[zrl=[baseurl]/help/developer_function_primer]Red Functions 101[/zrl] +[zrl=[baseurl]/doc/html/]Code Reference (Doxygen generated - sets cookies)[/zrl] +[zrl=[baseurl]/help/to_do_doco]To-Do list for the Red Documentation Project[/zrl] +[zrl=[baseurl]/help/to_do_code]To-Do list for Developers[/zrl] +[zrl=[baseurl]/help/roadmap]Version 3 roadmap[/zrl] +[zrl=[baseurl]/help/git_for_non_developers]Git for Non-Developers[/zrl] +[zrl=[baseurl]/help/dev_beginner]Step-for-step manual for beginning developers[/zrl] + +[h3]Frequently Asked Questions For Developers[/h3] +[zrl=[baseurl]/help/faq_developers]FAQ For Developers[/zrl] + +[h3]External Resources[/h3] + +[url=https://zothub.com/channel/one]Development Channel[/url] +[url=https://federated.social/channel/postgres]Postgres-specific $Projectname Admin Support Channel[/url] diff --git a/doc/general.bb b/doc/general.bb new file mode 100644 index 000000000..c9c2501e5 --- /dev/null +++ b/doc/general.bb @@ -0,0 +1,20 @@ + +[h2]Project/Site Information[/h2] + +[zrl=[baseurl]/help/Privacy]Privacy Policy[/zrl] + +[zrl=[baseurl]/help/history]$Projectname history[/zrl] + +[h3]External Resources[/h3] +[zrl=[baseurl]/help/external-resource-links]External Resource Links[/zrl] + +[url=https://github.com/redmatrix/hubzilla]Main Website[/url] +[url=https://github.com/redmatrix/hubzilla-addons]Addon Website[/url] + +[url=[baseurl]/help/credits]$Projectname Credits[/url] + +[h3]About This $Projectname Hub[/h3] +[zrl=[baseurl]/help/TermsOfService]Terms of Service For This Hub[/zrl] +[zrl=[baseurl]/siteinfo]Hub Information (/siteinfo)[/zrl] +[zrl=[baseurl]/siteinfo/json]Detailed Technical Hub Information in JSON format(/siteinfo/json)[/zrl] + diff --git a/doc/history.md b/doc/history.md index 32917712f..7360c6b22 100644 --- a/doc/history.md +++ b/doc/history.md @@ -1,7 +1,7 @@ -Redmatrix History -================= +Hubzilla History +================ -Redmatrix is a collaborative effort by the Redmatrix community and based on work introduced in Friendica by the Friendica community. The core design, the project mission, and software base itself were created/written primarily by Mike Macgirvin and represent the culmination of over a decade of software design using variations of this platform and an evolving vision of the role of communication software in our lives. Many others have contributed to this work, both conceptually and in terms of actual code (way too many to list individually). +Hubzilla is a community developed open source project based on work introduced in Friendica by the Friendica community and which previously was named Redmatrix. The core design, the project mission, and software base itself were created/written primarily by Mike Macgirvin and represent the culmination of over a decade of software design using variations of this platform and an evolving vision of the role of communication software in our lives. Many others have contributed to this work, both conceptually and in terms of actual code (far too many to list individually). ##Mike Macgirvin -- Biography @@ -10,9 +10,9 @@ Mike Macgirvin is an American software engineer now living in Australia. He spen During a layoff round, Mike was let go from America Online in August 2001 and purchased a music store in Mountain View, California later to be known as "Sonica Music Company". Opening a retail store for non-essential goods at the beginning of a prolonged economic downturn was in retrospect probably not the wisest career move. Sonica eventually folded; in late 2006. Mike returned to working on software and systems support full-time and was employed briefly at Symantec before moving to Australia in early 2007. He currently lives on a farm "out in the middle of nowhere" and is employed as a Computer Systems Officer at the University of Wollongong. -##Redmatrix - The Early Years +##Hubzilla - The Early Years -The software which went into creating Redmatrix has been through three distinct historical phases. It began in 2003 when Mike Macgirvin was looking for a content management system to power the website for his music store and found the available solutions to be lacking in various respects. The project was born as the "PurpleHaze weblog" under the nom de plume "Nerdware Communications". It was a multi-user PHP/MySQL CMS which provided blogs, forums, photo albums, events and more. Initially it provided the basis for a social community and shopping for customers of the store, but was also linked to Mike's personal weblog running on another domain. The distinguishing characteristic of this software was the ability for so-called "normal users" to re-assemble the components and choose different content feeds - and in essence create their own personal "multi-user CMS" as a view. Their custom view was able to communicate with anybody else that used the system, but could be partitioned so that adult sites and motorcycle enthusiast sites would not be visible to each other and not clash (or in this case Mike's personal website and the music store website). This software was developed primarily from 2003 until 2008. +The software which went into creating Hubzilla has been through several distinct historical phases. It began in 2003 when Mike Macgirvin was looking for a content management system to power the website for his music store and found the available solutions to be lacking in various respects. The project was born as the "PurpleHaze weblog" under the nom de plume "Nerdware Communications". It was a multi-user PHP/MySQL CMS which provided blogs, forums, photo albums, events and more. Initially it provided the basis for a social community and shopping for customers of the store, but was also linked to Mike's personal weblog running on another domain. The distinguishing characteristic of this software was the ability for so-called "normal users" to re-assemble the components and choose different content feeds - and in essence create their own personal "multi-user CMS" as a view. Their custom view was able to communicate with anybody else that used the system, but could be partitioned so that adult sites and motorcycle enthusiast sites would not be visible to each other and not clash (or in this case Mike's personal website and the music store website). This software was developed primarily from 2003 until 2008. In 2006 this software was used as the prototype for Symantec's "safeweb" reputation and community site. It was developed and enhanced until about 2008. A rewrite took place in 2008 named "Reflection" but work stagnated as the community dwindled. The need for content management systems and communications software dropped dramatically during this time as humans flocked to the new social aggregrators - Facebook and Twitter. @@ -44,7 +44,13 @@ The concept of identity-aware content was alien to anything that existed previou Over time a few federation components re-emerged. The ability to view RSS feeds was important to many people. Diaspora never really managed to re-write their protocol, so that was re-implemented and allowed Redmatrix to connect with Diaspora and Friendica again (Friendica still had their Diaspora protocol intact, so this was the most common language now remaining on the free web - despite its faults). Diaspora communications aren't able to make use of the advanced identity features, but they work for basic communications. -Mike stepped down as active coordinator for the project in early 2015. +##Hubzilla + +The Redmatrix project reached a point of stagnation in early 2015 as network growth leveled and active interest in the project declined. Mike met with several external high tech developers and innovators in a round of discussions that were called "Zotopia" in early 2015 to perform an independent review of the project and try to identify what had gone wrong and plan a route forward. The basic consensus is that the project suffered from bad marketing decisions which were compounded by mixed messages about the project goals and target audience. A "rival" project (Diaspora) was marketing itself as a Facebook competitor, but after some long discussions it was determined that Redmatrix wasn't a Facebook competitor at all, and too much emphasis was being placed on the "social network" and "anti-Facebook" features. It was a novel decentralisation platform with distributed identity and permissions, and as was pointed out, the "end user" was the wrong target market. These marketing mistakes were now identified with the project name and random sampling of various "customers" showed that none of them really had a clue about the software goals or target market segment. The mixed messages were associated with the brand identity and this was a problem. + +The Redmatrix community held a vote and the project was renamed "Hubzilla", with a renewed identity and focus - to provide software for creating and ultimately linking together unrelated community websites or "hubs" into a global community. This is in fact what we were building all along, but didn't fully recognise it. The target audience for this software as it turns out is not the members or end users, but software integrators and digital community architects and builders. These in turn will be responsible for marketing their own product (their respective online communities) to end-users or members. The software solves a real world need of linking isolated and "walled garden" community sites together into a larger cooperative. The transition from Redmatrix to Hubzilla was complex and has taken several months as we consolidated the marketing and media assets to deliver a consistent message. It is still ongoing at this time, and should be completed in Q4 2015. + +Mike stepped down as active coordinator for the project in early 2015 and turned management over to the community. He remains active as a Hubzilla developer. #include doc/macros/main_footer.bb; diff --git a/doc/main.bb b/doc/main.bb index 6998ee90e..44f227c16 100644 --- a/doc/main.bb +++ b/doc/main.bb @@ -10,77 +10,4 @@ Think of standalone family communication platforms, distributed online communiti [zrl=[baseurl]/help/what_is_zot][b]Got Zot? Well, you should.[/b][/zrl]
Zot is the great new communicaton protocol invented especially for $Projectname. As a member you are no longer bound to a single site or hub thanks to "Nomadic Identities". Migrate easily to another server and keep your contacts intact, or clone it and run the same channel on several servers. Just in case one of them might shut down, you don't lose out. Plus once you are inside $Projectname there is no need for you to authenticate twice, even when accessing another $Projectname site. Zot is what sets $Projectname apart.
-[h3]Getting Started[/h3]
-[zrl=[baseurl]/help/Privacy]Privacy Policy[/zrl]
-[zrl=[baseurl]/help/registration]Account Registration[/zrl]
-[zrl=[baseurl]/help/accounts_profiles_channels_basics]You at the $Projectname: accounts, profiles and channels in short[/zrl]
-[zrl=[baseurl]/help/profiles]Profiles[/zrl]
-[zrl=[baseurl]/help/channels]Channels[/zrl]
-[zrl=[baseurl]/help/roles]Permission roles and Channel types[/zrl]
-[zrl=[baseurl]/help/first-post]Your first posting[/zrl]
-[zrl=[baseurl]/help/connecting_to_channels]Connecting To Other Channels[/zrl]
-[zrl=[baseurl]/help/permissions]Permissions And Encryption: You Are In Control[/zrl]
-[zrl=[baseurl]/help/cloud]Cloud Storage[/zrl]
-[zrl=[baseurl]/help/remove_account]Remove Channel or Account[/zrl]
-[h3]Members Help[/h3]
-[zrl=[baseurl]/help/tags_and_mentions]Tags and Mentions[/zrl]
-[zrl=[baseurl]/help/webpages]Web Pages[/zrl]
-[zrl=[baseurl]/help/bbcode]BBcode reference for posts and comments[/zrl]
-[zrl=[baseurl]/help/checking_account_quota_usage]Checking Account Quota Usage[/zrl]
-[zrl=[baseurl]/help/cloud_desktop_clients]Cloud Desktop Clients[/zrl]
-[zrl=[baseurl]/help/AdvancedSearch]Advanced Directory Search[/zrl]
-[zrl=[baseurl]/help/addons]Help With Addons[/zrl]
-[zrl=[baseurl]/help/diaspora_compat]Diaspora Communications Compatibility (Diaspora and Friendica)[/zrl]
-[zrl=[baseurl]/help/faq_members]FAQ For Members[/zrl]
-
-[h3]Administrators Help[/h3]
-[zrl=[baseurl]/help/install]Install[/zrl]
-[zrl=[baseurl]/help/red2pi]Installing Red on the Raspberry Pi[/zrl]
-[zrl=[baseurl]/help/troubleshooting]Troubleshooting Tips[/zrl]
-[zrl=[baseurl]/help/hidden_configs]Tweaking $Projectname's Hidden Configurations[/zrl]
-[zrl=[baseurl]/help/faq_admins]FAQ For Admins[/zrl]
-[zrl=[baseurl]/help/service_classes]Service Classes[/zrl]
-
-[h3]Technical Documentation[/h3]
-[zrl=[baseurl]/help/history]$Projectname history[/zrl]
-[zrl=[baseurl]/help/Zot---A-High-Level-Overview]A high level overview of Zot[/zrl]
-[zrl=[baseurl]/help/zot]An introduction to Zot[/zrl]
-[zrl=[baseurl]/help/zot_structures]Zot Stuctures[/zrl]
-[zrl=[baseurl]/help/comanche]Comanche Page Descriptions[/zrl]
-[zrl=[baseurl]/help/Creating-Templates]Creating Comanche Templates[/zrl]
-[zrl=[baseurl]/help/Widgets]Widgets[/zrl]
-[zrl=[baseurl]/help/plugins]Plugins[/zrl]
-[zrl=[baseurl]/help/doco]Contributing Documentation[/zrl]
-[zrl=[baseurl]/help/DerivedTheme1]Creating Derivative Themes[/zrl]
-[zrl=[baseurl]/help/schema_development]Schemas[/zrl]
-[zrl=[baseurl]/help/Translations]Translations[/zrl]
-[zrl=[baseurl]/help/developers]Developers[/zrl]
-[zrl=[baseurl]/help/intro_for_developers]Intro for Developers[/zrl]
-[zrl=[baseurl]/help/database]Database schema documantation[/zrl]
-[zrl=[baseurl]/help/api_functions]API functions[/zrl]
-[zrl=[baseurl]/help/api_posting]Posting to the red# using the API[/zrl]
-[zrl=[baseurl]/help/developer_function_primer]Red Functions 101[/zrl]
-[zrl=[baseurl]/doc/html/]Code Reference (Doxygen generated - sets cookies)[/zrl]
-[zrl=[baseurl]/help/to_do_doco]To-Do list for the Red Documentation Project[/zrl]
-[zrl=[baseurl]/help/to_do_code]To-Do list for Developers[/zrl]
-[zrl=[baseurl]/help/roadmap]Version 3 roadmap[/zrl]
-[zrl=[baseurl]/help/git_for_non_developers]Git for Non-Developers[/zrl]
-[zrl=[baseurl]/help/dev_beginner]Step-for-step manual for beginning developers[/zrl]
-
-[h3]Frequently Asked Questions For Developers[/h3]
-[zrl=[baseurl]/help/faq_developers]FAQ For Developers[/zrl]
-
-[h3]External Resources[/h3]
-[zrl=[baseurl]/help/external-resource-links]External Resource Links[/zrl]
-[url=https://github.com/redmatrix/hubzilla]Main Website[/url]
-[url=https://github.com/redmatrix/hubzilla-addons]Addon Website[/url]
-[url=https://zothub.com/channel/one]Development Channel[/url]
-[url=https://federated.social/channel/postgres]Postgres-specific $Projectname Admin Support Channel[/url]
-
-[url=[baseurl]/help/credits]$Projectname Credits[/url]
-
-[h3]About This $Projectname Hub[/h3]
-[zrl=[baseurl]/help/TermsOfService]Terms of Service For This Hub[/zrl]
-[zrl=[baseurl]/siteinfo]Hub Information (/siteinfo)[/zrl]
-[zrl=[baseurl]/siteinfo/json]Detailed Technical Hub Information in JSON format(/siteinfo/json)[/zrl]
diff --git a/doc/members.bb b/doc/members.bb new file mode 100644 index 000000000..705154b56 --- /dev/null +++ b/doc/members.bb @@ -0,0 +1,24 @@ +[h2]Documentation for Hub Members[/h2] + +[h3]Getting Started[/h3] +[zrl=[baseurl]/help/registration]Account Registration[/zrl] +[zrl=[baseurl]/help/accounts_profiles_channels_basics]You at $Projectname: accounts, profiles and channels in short[/zrl] +[zrl=[baseurl]/help/profiles]Profiles[/zrl] +[zrl=[baseurl]/help/channels]Channels[/zrl] +[zrl=[baseurl]/help/roles]Permission roles and Channel types[/zrl] +[zrl=[baseurl]/help/first-post]Your first posting[/zrl] +[zrl=[baseurl]/help/connecting_to_channels]Connecting To Other Channels[/zrl] +[zrl=[baseurl]/help/permissions]Permissions And Encryption: You Are In Control[/zrl] +[zrl=[baseurl]/help/cloud]Cloud Storage[/zrl] +[zrl=[baseurl]/help/remove_account]Remove Channel or Account[/zrl] + +[h3]Members Help[/h3] +[zrl=[baseurl]/help/tags_and_mentions]Tags and Mentions[/zrl] +[zrl=[baseurl]/help/webpages]Web Pages[/zrl] +[zrl=[baseurl]/help/bbcode]BBcode reference for posts and comments[/zrl] +[zrl=[baseurl]/help/checking_account_quota_usage]Checking Account Quota Usage[/zrl] +[zrl=[baseurl]/help/cloud_desktop_clients]Cloud Desktop Clients[/zrl] +[zrl=[baseurl]/help/AdvancedSearch]Advanced Directory Search[/zrl] +[zrl=[baseurl]/help/addons]Help With Addons[/zrl] +[zrl=[baseurl]/help/diaspora_compat]Diaspora Communications Compatibility (Diaspora and Friendica)[/zrl] +[zrl=[baseurl]/help/faq_members]FAQ For Members[/zrl] diff --git a/doc/to_do_code.bb b/doc/to_do_code.bb index 7fb6da858..94421bab0 100644 --- a/doc/to_do_code.bb +++ b/doc/to_do_code.bb @@ -14,6 +14,7 @@ We need much more than this, but here are areas where developers can help. Pleas [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 "open site" 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]implement oembed provider interface[/li]
[li]refactor the oembed client interface so that we can safely sandbox remote content[/li]
[li]Many modern social apps now have both a profile photo and a "cover photo". Add support for this. [/li]
diff --git a/doc/to_do_doco.bb b/doc/to_do_doco.bb deleted file mode 100644 index d0f595b3e..000000000 --- a/doc/to_do_doco.bb +++ /dev/null @@ -1,23 +0,0 @@ -[b]Documentation To-Do List[/b]
-
-[b]Documentation we need to write[/b]
-
- Database schema detailed descriptions
-
- Complete plugin hook documentation
-
- API documentation
-
- Function and code documentation (doxygen)
-
- New Member guide
-
- "Extra Feature" reference, description of each
-
- Detailed Personal Settings Documentation
-
- Administration Guide (post-install)
-
- Administration Guide (pre-install)
-
-Return to the [url=[baseurl]/help/main]Main documentation page[/url]
diff --git a/images/default_profile_photos/arrow_avatar/300.png b/images/default_profile_photos/arrow_avatar/300.png Binary files differnew file mode 100644 index 000000000..1c30572d6 --- /dev/null +++ b/images/default_profile_photos/arrow_avatar/300.png diff --git a/images/default_profile_photos/arrow_avatar/48.png b/images/default_profile_photos/arrow_avatar/48.png Binary files differnew file mode 100644 index 000000000..7865ce2b4 --- /dev/null +++ b/images/default_profile_photos/arrow_avatar/48.png diff --git a/images/default_profile_photos/arrow_avatar/80.png b/images/default_profile_photos/arrow_avatar/80.png Binary files differnew file mode 100644 index 000000000..8610907e2 --- /dev/null +++ b/images/default_profile_photos/arrow_avatar/80.png diff --git a/images/hz-16.png b/images/hz-16.png Binary files differnew file mode 100644 index 000000000..b88b6aa57 --- /dev/null +++ b/images/hz-16.png diff --git a/images/hz-32.png b/images/hz-32.png Binary files differnew file mode 100644 index 000000000..79c728a83 --- /dev/null +++ b/images/hz-32.png diff --git a/images/hz-64.png b/images/hz-64.png Binary files differnew file mode 100644 index 000000000..bff03d8da --- /dev/null +++ b/images/hz-64.png diff --git a/include/AccessList.php b/include/AccessList.php new file mode 100644 index 000000000..46e66d33d --- /dev/null +++ b/include/AccessList.php @@ -0,0 +1,131 @@ +<?php + + +class AccessList { + + private $allow_cid; + private $allow_gid; + private $deny_cid; + private $deny_gid; + + /* indicates if we are using the default constructor values or values that have been set explicitly. */ + + private $explicit; + + function __construct($channel) { + + if($channel) { + $this->allow_cid = $channel['channel_allow_cid']; + $this->allow_gid = $channel['channel_allow_gid']; + $this->deny_cid = $channel['channel_deny_cid']; + $this->deny_gid = $channel['channel_deny_gid']; + } + else { + $this->allow_cid = ''; + $this->allow_gid = ''; + $this->deny_cid = ''; + $this->deny_gid = ''; + } + + $this->explicit = false; + } + + function get_explicit() { + return $this->explicit; + } + + function set($arr,$explicit = true) { + $this->allow_cid = $arr['allow_cid']; + $this->allow_gid = $arr['allow_gid']; + $this->deny_cid = $arr['deny_cid']; + $this->deny_gid = $arr['deny_gid']; + + $this->explicit = $explicit; + } + + function get() { + return array( + 'allow_cid' => $this->allow_cid, + 'allow_gid' => $this->allow_gid, + 'deny_cid' => $this->deny_cid, + 'deny_gid' => $this->deny_gid, + ); + } + + function set_from_array($arr,$explicit = true) { + $this->allow_cid = perms2str((is_array($arr['contact_allow'])) + ? $arr['contact_allow'] : explode(',',$arr['contact_allow'])); + $this->allow_gid = perms2str((is_array($arr['group_allow'])) + ? $arr['group_allow'] : explode(',',$arr['group_allow'])); + $this->deny_cid = perms2str((is_array($arr['contact_deny'])) + ? $arr['contact_deny'] : explode(',',$arr['contact_deny'])); + $this->deny_gid = perms2str((is_array($arr['group_deny'])) + ? $arr['group_deny'] : explode(',',$arr['group_deny'])); + + $this->explicit = $explicit; + } + + function is_private() { + return (($this->allow_cid || $this->allow_gid || $this->deny_cid || $this->deny_gid) ? true : false); + } + +} + +/** + * @brief Used to wrap ACL elements in angle brackets for storage. + * + * @param[in,out] array &$item + */ +function sanitise_acl(&$item) { + if (strlen($item)) + $item = '<' . notags(trim($item)) . '>'; + else + unset($item); +} + +/** + * @brief Convert an ACL array to a storable string. + * + * @param array $p + * @return array + */ +function perms2str($p) { + $ret = ''; + + if (is_array($p)) + $tmp = $p; + else + $tmp = explode(',', $p); + + if (is_array($tmp)) { + array_walk($tmp, 'sanitise_acl'); + $ret = implode('', $tmp); + } + + return $ret; +} + + +/** + * @brief Turn user/group ACLs stored as angle bracketed text into arrays. + * + * turn string array of angle-bracketed elements into string array + * e.g. "<123xyz><246qyo><sxo33e>" => array(123xyz,246qyo,sxo33e); + * + * @param string $s + * @return array + */ +function expand_acl($s) { + $ret = array(); + + if(strlen($s)) { + $t = str_replace('<','',$s); + $a = explode('>',$t); + foreach($a as $aa) { + if($aa) + $ret[] = $aa; + } + } + + return $ret; +} diff --git a/include/identity.php b/include/identity.php index 871d85700..d822dc69c 100644 --- a/include/identity.php +++ b/include/identity.php @@ -427,7 +427,7 @@ function create_identity($arr) { } } - call_hooks('register_account', $newuid); + call_hooks('create_identity', $newuid); proc_run('php','include/directory.php', $ret['channel']['channel_id']); } @@ -565,7 +565,8 @@ function identity_basic_export($channel_id, $items = false) { if(! $items) return $ret; - $r = q("select likes.*, item.mid from likes left join item on likes.iid = item.id where likes.channel_id = %d", + + $r = q("select * from likes where channel_id = %d", intval($channel_id) ); diff --git a/include/importdoc.php b/include/importdoc.php new file mode 100755 index 000000000..9cce35c50 --- /dev/null +++ b/include/importdoc.php @@ -0,0 +1,31 @@ +<?php + +require_once('include/cli_startup.php'); + +cli_startup(); + +require_once('mod/help.php'); + +function update_docs_dir($s) { + $f = basename($s); + $d = dirname($s); + if($s === 'doc/html') + return; + + $files = glob("$d/$f"); + if($files) { + foreach($files as $fi) { + if($fi === 'doc/html') + continue; + if(is_dir($fi)) + update_docs_dir("$fi/*"); + else + store_doc_file($fi); + } + } +} + +update_docs_dir('doc/*'); + + + diff --git a/include/menu.php b/include/menu.php index d20df1d6e..7ed931a59 100644 --- a/include/menu.php +++ b/include/menu.php @@ -3,6 +3,7 @@ require_once('include/security.php'); require_once('include/bbcode.php'); + function menu_fetch($name,$uid,$observer_xchan) { $sql_options = permissions_sql($uid); @@ -299,19 +300,18 @@ function menu_add_item($menu_id, $uid, $arr) { $channel = get_app()->get_channel(); } - $str_group_allow = perms2str($arr['group_allow']); - $str_contact_allow = perms2str($arr['contact_allow']); - $str_group_deny = perms2str($arr['group_deny']); - $str_contact_deny = perms2str($arr['contact_deny']); + $acl = new AccessList($channel); + $acl->set_from_array($arr); + $p = $acl->get(); $r = q("insert into menu_item ( mitem_link, mitem_desc, mitem_flags, allow_cid, allow_gid, deny_cid, deny_gid, mitem_channel_id, mitem_menu_id, mitem_order ) values ( '%s', '%s', %d, '%s', '%s', '%s', '%s', %d, %d, %d ) ", dbesc($mitem_link), dbesc($mitem_desc), intval($mitem_flags), - dbesc($str_contact_allow), - dbesc($str_group_allow), - dbesc($str_contact_deny), - dbesc($str_group_deny), + dbesc($p['allow_cid']), + dbesc($p['allow_gid']), + dbesc($p['deny_cid']), + dbesc($p['deny_gid']), intval($uid), intval($menu_id), intval($mitem_order) @@ -341,19 +341,19 @@ function menu_edit_item($menu_id, $uid, $arr) { $channel = get_app()->get_channel(); } - $str_group_allow = perms2str($arr['group_allow']); - $str_contact_allow = perms2str($arr['contact_allow']); - $str_group_deny = perms2str($arr['group_deny']); - $str_contact_deny = perms2str($arr['contact_deny']); + $acl = new AccessList($channel); + $acl->set_from_array($arr); + $p = $acl->get(); + $r = q("update menu_item set mitem_link = '%s', mitem_desc = '%s', mitem_flags = %d, allow_cid = '%s', allow_gid = '%s', deny_cid = '%s', deny_gid = '%s', mitem_order = %d where mitem_channel_id = %d and mitem_menu_id = %d and mitem_id = %d", dbesc($mitem_link), dbesc($mitem_desc), intval($mitem_flags), - dbesc($str_contact_allow), - dbesc($str_group_allow), - dbesc($str_contact_deny), - dbesc($str_group_deny), + dbesc($p['allow_cid']), + dbesc($p['allow_gid']), + dbesc($p['deny_cid']), + dbesc($p['deny_gid']), intval($mitem_order), intval($uid), intval($menu_id), diff --git a/include/photos.php b/include/photos.php index 04018ac0d..b4129fbf1 100644 --- a/include/photos.php +++ b/include/photos.php @@ -34,16 +34,6 @@ function photo_upload($channel, $observer, $args) { */ $album = $args['album']; -// $newalbum = $args['newalbum']; - -// logger('photo_upload: album= ' . $album . ' newalbum= ' . $newalbum , LOGGER_DEBUG); - -// if(! $album) { -// if($newalbum) -// $album = $newalbum; -// else -// $album = datetime_convert('UTC',date_default_timezone_get(),'now', 'Y-m'); -// } if(intval($args['visible']) || $args['visible'] === 'true') $visible = 1; @@ -55,38 +45,20 @@ function photo_upload($channel, $observer, $args) { // all other settings. 'allow_cid' being passed from an external source takes priority over channel settings. // ...messy... needs re-factoring once the photos/files integration stabilises - if(array_key_exists('allow_cid',$args)) { - $str_group_allow = $args['allow_gid']; - $str_contact_allow = $args['allow_cid']; - $str_group_deny = $args['deny_gid']; - $str_contact_deny = $args['deny_cid']; - } - else { - $str_group_allow = $channel['channel_allow_gid']; - $str_contact_allow = $channel['channel_allow_cid']; - $str_group_deny = $channel['channel_deny_gid']; - $str_contact_deny = $channel['channel_deny_cid']; - } - - if($args['directory']) { - $str_group_allow = $args['directory']['allow_gid']; - $str_contact_allow = $args['directory']['allow_cid']; - $str_group_deny = $args['directory']['deny_gid']; - $str_contact_deny = $args['directory']['deny_cid']; - } - + $acl = new AccessList($channel); + if(array_key_exists('directory',$args) && $args['directory']) + $acl->set($args['directory']); + if(array_key_exists('allow_cid',$args)) + $acl->set($args); if( (array_key_exists('group_allow',$args)) || (array_key_exists('contact_allow',$args)) || (array_key_exists('group_deny',$args)) || (array_key_exists('contact_deny',$args))) { - - $str_group_allow = perms2str(((is_array($args['group_allow'])) ? $args['group_allow'] : explode(',',$args['group_allow']))); - $str_contact_allow = perms2str(((is_array($args['contact_allow'])) ? $args['contact_allow'] : explode(',',$args['contact_allow']))); - $str_group_deny = perms2str(((is_array($args['group_deny'])) ? $args['group_deny'] : explode(',',$args['group_deny']))); - $str_contact_deny = perms2str(((is_array($args['contact_deny'])) ? $args['contact_deny'] : explode(',',$args['contact_deny']))); - + $acl->set_from_array($args); } + $ac = $acl->get(); + $os_storage = 0; if($args['os_path'] && $args['getimagesize']) { @@ -200,8 +172,8 @@ function photo_upload($channel, $observer, $args) { $p = array('aid' => $account_id, 'uid' => $channel_id, 'xchan' => $visitor, 'resource_id' => $photo_hash, 'filename' => $filename, 'album' => $album, 'scale' => 0, 'photo_usage' => PHOTO_NORMAL, - 'allow_cid' => $str_contact_allow, 'allow_gid' => $str_group_allow, - 'deny_cid' => $str_contact_deny, 'deny_gid' => $str_group_deny, + 'allow_cid' => $ac['allow_cid'], 'allow_gid' => $ac['allow_gid'], + 'deny_cid' => $ac['deny_cid'], 'deny_gid' => $ac['deny_gid'], 'os_storage' => $os_storage, 'os_path' => $args['os_path'] ); if($args['created']) @@ -320,26 +292,26 @@ function photo_upload($channel, $observer, $args) { if($lat && $lon) $arr['coord'] = $lat . ' ' . $lon; - $arr['aid'] = $account_id; - $arr['uid'] = $channel_id; - $arr['mid'] = $mid; - $arr['parent_mid'] = $mid; - $arr['item_hidden'] = $item_hidden; - $arr['resource_type'] = 'photo'; - $arr['resource_id'] = $photo_hash; - $arr['owner_xchan'] = $channel['channel_hash']; - $arr['author_xchan'] = $observer['xchan_hash']; - $arr['title'] = $title; - $arr['allow_cid'] = $str_contact_allow; - $arr['allow_gid'] = $str_group_allow; - $arr['deny_cid'] = $str_contact_deny; - $arr['deny_gid'] = $str_group_deny; - $arr['verb'] = ACTIVITY_POST; - $arr['item_wall'] = 1; - $arr['item_origin'] = 1; + $arr['aid'] = $account_id; + $arr['uid'] = $channel_id; + $arr['mid'] = $mid; + $arr['parent_mid'] = $mid; + $arr['item_hidden'] = $item_hidden; + $arr['resource_type'] = 'photo'; + $arr['resource_id'] = $photo_hash; + $arr['owner_xchan'] = $channel['channel_hash']; + $arr['author_xchan'] = $observer['xchan_hash']; + $arr['title'] = $title; + $arr['allow_cid'] = $ac['allow_cid']; + $arr['allow_gid'] = $ac['allow_gid']; + $arr['deny_cid'] = $ac['deny_cid']; + $arr['deny_gid'] = $ac['deny_gid']; + $arr['verb'] = ACTIVITY_POST; + $arr['item_wall'] = 1; + $arr['item_origin'] = 1; $arr['item_thread_top'] = 1; - - $arr['plink'] = z_root() . '/channel/' . $channel['channel_address'] . '/?f=&mid=' . $arr['mid']; + $arr['item_private'] = intval($acl->is_private()); + $arr['plink'] = z_root() . '/channel/' . $channel['channel_address'] . '/?f=&mid=' . $arr['mid']; // We should also put a width_x_height on large photos. Left as an exercise for // devs looking for simple stuff to fix. diff --git a/include/poller.php b/include/poller.php index f44298a9f..030394486 100644 --- a/include/poller.php +++ b/include/poller.php @@ -175,6 +175,9 @@ function poller_run($argv, $argc){ logger('regdir: ' . print_r(z_fetch_url(get_directory_primary() . '/regdir?f=&url=' . urlencode(z_root()) . '&realm=' . urlencode(get_directory_realm())),true)); } + + proc_run('php', 'include/importdoc.php'); + /** * End Cron Weekly */ diff --git a/include/text.php b/include/text.php index f27a9ce68..e4735ac48 100644 --- a/include/text.php +++ b/include/text.php @@ -458,63 +458,7 @@ function alt_pager(&$a, $i, $more = '', $less = '') { } -/** - * @brief Turn user/group ACLs stored as angle bracketed text into arrays. - * - * turn string array of angle-bracketed elements into string array - * e.g. "<123xyz><246qyo><sxo33e>" => array(123xyz,246qyo,sxo33e); - * - * @param string $s - * @return array - */ -function expand_acl($s) { - $ret = array(); - if(strlen($s)) { - $t = str_replace('<','',$s); - $a = explode('>',$t); - foreach($a as $aa) { - if($aa) - $ret[] = $aa; - } - } - - return $ret; -} - -/** - * @brief Used to wrap ACL elements in angle brackets for storage. - * - * @param[in,out] array &$item - */ -function sanitise_acl(&$item) { - if (strlen($item)) - $item = '<' . notags(trim($item)) . '>'; - else - unset($item); -} - -/** - * @brief Convert an ACL array to a storable string. - * - * @param array $p - * @return array - */ -function perms2str($p) { - $ret = ''; - - if (is_array($p)) - $tmp = $p; - else - $tmp = explode(',', $p); - - if (is_array($tmp)) { - array_walk($tmp, 'sanitise_acl'); - $ret = implode('', $tmp); - } - - return $ret; -} /** * @brief Generate a guaranteed unique (for this domain) item ID for ATOM. diff --git a/include/widgets.php b/include/widgets.php index 5e70730a3..42d9db19a 100644 --- a/include/widgets.php +++ b/include/widgets.php @@ -1063,3 +1063,15 @@ function widget_tasklist($arr) { } + +function widget_helpindex($arr) { + $o .= '<div class="widget">' . '<h3>' . t('Documentation') . '</h3>'; + $o .= '<ul class="nav nav-pills nav-stacked">'; + $o .= '<li><a href="help/general">' . t('Project/Site Information') . '</a></li>'; + $o .= '<li><a href="help/members">' . t('For Members') . '</a></li>'; + $o .= '<li><a href="help/admins">' . t('For Administrators') . '</a></li>'; + $o .= '<li><a href="help/develop">' . t('For Developers') . '</a></li>'; + $o .= '</ul></div>'; + return $o; + +}
\ No newline at end of file diff --git a/doc/install/sample-lighttpd.conf b/install/sample-lighttpd.conf index db26c3b64..db26c3b64 100644 --- a/doc/install/sample-lighttpd.conf +++ b/install/sample-lighttpd.conf diff --git a/doc/install/sample-nginx.conf b/install/sample-nginx.conf index e9a80d226..e9a80d226 100644 --- a/doc/install/sample-nginx.conf +++ b/install/sample-nginx.conf diff --git a/install/schema_mysql.sql b/install/schema_mysql.sql index aaeab4f87..5ee1ec463 100644 --- a/install/schema_mysql.sql +++ b/install/schema_mysql.sql @@ -688,6 +688,7 @@ CREATE TABLE IF NOT EXISTS `likes` ( `liker` char(128) NOT NULL DEFAULT '', `likee` char(128) NOT NULL DEFAULT '', `iid` int(11) unsigned NOT NULL DEFAULT '0', + `i_mid` char(255) NOT NULL DEFAULT '', `verb` char(255) NOT NULL DEFAULT '', `target_type` char(255) NOT NULL DEFAULT '', `target_id` char(128) NOT NULL DEFAULT '', @@ -696,6 +697,7 @@ CREATE TABLE IF NOT EXISTS `likes` ( KEY `liker` (`liker`), KEY `likee` (`likee`), KEY `iid` (`iid`), + KEY `i_mid` (`i_mid`), KEY `verb` (`verb`), KEY `target_type` (`target_type`), KEY `channel_id` (`channel_id`), diff --git a/install/schema_postgres.sql b/install/schema_postgres.sql index da5a503e7..c594d0f87 100644 --- a/install/schema_postgres.sql +++ b/install/schema_postgres.sql @@ -681,6 +681,7 @@ CREATE TABLE "likes" ( "liker" char(128) NOT NULL DEFAULT '', "likee" char(128) NOT NULL DEFAULT '', "iid" bigint NOT NULL DEFAULT '0', + "i_mid" char(255) NOT NULL DEFAULT '', "verb" text NOT NULL DEFAULT '', "target_type" text NOT NULL DEFAULT '', "target_id" char(128) NOT NULL DEFAULT '', @@ -691,6 +692,7 @@ create index "likes_channel_id" on likes ("channel_id"); create index "likes_liker" on likes ("liker"); create index "likes_likee" on likes ("likee"); create index "likes_iid" on likes ("iid"); +create index "likes_i_mid" on likes ("i_mid"); create index "likes_verb" on likes ("verb"); create index "likes_target_type" on likes ("target_type"); create index "likes_target_id" on likes ("target_id"); diff --git a/install/update.php b/install/update.php index 9aca14d2e..b398711b2 100644 --- a/install/update.php +++ b/install/update.php @@ -1,6 +1,6 @@ <?php -define( 'UPDATE_VERSION' , 1148 ); +define( 'UPDATE_VERSION' , 1149 ); /** * @@ -1728,3 +1728,23 @@ function update_r1147() { return UPDATE_SUCCESS; return UPDATE_FAILED; } + +function update_r1148() { + $r1 = q("alter table likes add i_mid char(255) not null default '' "); + $r2 = q("create index i_mid on likes ( i_mid ) "); + + $r3 = q("select likes.*, item.mid from from likes left join item on likes.iid = item.id"); + if($r3) { + foreach($r3 as $rr) { + q("update likes set i_mid = '%s' where id = $d", + dbesc($rr['mid']), + intval($rr['id']) + ); + } + } + + if($r1 && $r2) + return UPDATE_SUCCESS; + return UPDATE_FAILED; + +} diff --git a/mod/chat.php b/mod/chat.php index c54d29313..c2c11d0ab 100644 --- a/mod/chat.php +++ b/mod/chat.php @@ -54,12 +54,11 @@ function chat_post(&$a) { goaway(z_root() . '/chat/' . $channel['channel_address']); } + $acl = new AccessList($channel); + $acl->set_from_array($_REQUEST); - $arr = array('name' => $room); - $arr['allow_gid'] = perms2str($_REQUEST['group_allow']); - $arr['allow_cid'] = perms2str($_REQUEST['contact_allow']); - $arr['deny_gid'] = perms2str($_REQUEST['group_deny']); - $arr['deny_cid'] = perms2str($_REQUEST['contact_deny']); + $arr = $acl->get(); + $arr['name'] = $room; chatroom_create($channel,$arr); @@ -158,7 +157,10 @@ function chat_content(&$a) { intval($a->profile['profile_uid']) ); if($x) { - $private = ((($x[0]['allow_cid']) || ($x[0]['allow_gid']) || ($x[0]['deny_cid']) || ($x[0]['deny_gid'])) ? true : false); + $acl = new AccessList(false); + $acl->set($x[0]); + + $private = $acl->is_private(); $room_name = $x[0]['cr_name']; if($bookmark_link) $bookmark_link .= '&url=' . z_root() . '/chat/' . argv(1) . '/' . argv(2) . '&title=' . urlencode($x[0]['cr_name']) . (($private) ? '&private=1' : '') . '&ischat=1'; @@ -192,14 +194,8 @@ function chat_content(&$a) { if(local_channel() && argc() > 2 && argv(2) === 'new') { - - - $channel_acl = array( - 'allow_cid' => $channel['channel_allow_cid'], - 'allow_gid' => $channel['channel_allow_gid'], - 'deny_cid' => $channel['channel_deny_cid'], - 'deny_gid' => $channel['channel_deny_gid'] - ); + $acl = new AccessList($channel); + $channel_acl = $acl->get(); require_once('include/acl_selectors.php'); diff --git a/mod/events.php b/mod/events.php index edb61a6cd..9120f8713 100755 --- a/mod/events.php +++ b/mod/events.php @@ -41,16 +41,11 @@ function events_post(&$a) { $categories = escape_tags(trim($_POST['category'])); - - // only allow editing your own events. if(($xchan) && ($xchan !== get_observer_hash())) return; - // The default setting for the `private` field in event_store() is false, so mirror that - $private_event = false; - if($start_text) { $start = $start_text; } @@ -119,6 +114,8 @@ function events_post(&$a) { $channel = $a->get_channel(); + $acl = new AccessList(false); + if($event_id) { $x = q("select * from event where id = %d and uid = %d limit 1", intval($event_id), @@ -133,6 +130,8 @@ function events_post(&$a) { return; } + $acl->set($x[0]); + $created = $x[0]['created']; $edited = datetime_convert(); @@ -142,39 +141,21 @@ function events_post(&$a) { } else { $share = true; - $str_group_allow = $x[0]['allow_gid']; - $str_contact_allow = $x[0]['allow_cid']; - $str_group_deny = $x[0]['deny_gid']; - $str_contact_deny = $x[0]['deny_cid']; - - if(strlen($str_group_allow) || strlen($str_contact_allow) - || strlen($str_group_deny) || strlen($str_contact_deny)) { - $private_event = true; - } } } else { $created = $edited = datetime_convert(); if($share) { - $str_group_allow = perms2str($_POST['group_allow']); - $str_contact_allow = perms2str($_POST['contact_allow']); - $str_group_deny = perms2str($_POST['group_deny']); - $str_contact_deny = perms2str($_POST['contact_deny']); - - if(strlen($str_group_allow) || strlen($str_contact_allow) - || strlen($str_group_deny) || strlen($str_contact_deny)) { - $private_event = true; - } + $acl->set_from_array($_POST); } else { - $str_contact_allow = '<' . $channel['channel_hash'] . '>'; - $str_group_allow = $str_contact_deny = $str_group_deny = ''; - $private_event = true; + $acl->set(array('allow_cid' => '<' . $channel['channel_hash'] . '>', 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '')); } } $post_tags = array(); $channel = $a->get_channel(); + $ac = $acl->get(); if(strlen($categories)) { $cats = explode(',',$categories); @@ -201,11 +182,11 @@ function events_post(&$a) { $datarray['uid'] = local_channel(); $datarray['account'] = get_account_id(); $datarray['event_xchan'] = $channel['channel_hash']; - $datarray['allow_cid'] = $str_contact_allow; - $datarray['allow_gid'] = $str_group_allow; - $datarray['deny_cid'] = $str_contact_deny; - $datarray['deny_gid'] = $str_group_deny; - $datarray['private'] = (($private_event) ? 1 : 0); + $datarray['allow_cid'] = $ac['allow_cid']; + $datarray['allow_gid'] = $ac['allow_gid']; + $datarray['deny_cid'] = $ac['deny_cid']; + $datarray['deny_gid'] = $ac['deny_gid']; + $datarray['private'] = (($acl->is_private()) ? 1 : 0); $datarray['id'] = $event_id; $datarray['created'] = $created; $datarray['edited'] = $edited; @@ -660,12 +641,9 @@ function events_content(&$a) { require_once('include/acl_selectors.php'); - $perm_defaults = array( - 'allow_cid' => $channel['channel_allow_cid'], - 'allow_gid' => $channel['channel_allow_gid'], - 'deny_cid' => $channel['channel_deny_cid'], - 'deny_gid' => $channel['channel_deny_gid'] - ); + $acl = new AccessList($channel); + $perm_defaults = $acl->get(); + $tpl = get_markup_template('event_form.tpl'); diff --git a/mod/filestorage.php b/mod/filestorage.php index 9787c0380..7ba8c1801 100644 --- a/mod/filestorage.php +++ b/mod/filestorage.php @@ -28,20 +28,20 @@ function filestorage_post(&$a) { return; } - $str_group_allow = perms2str($_REQUEST['group_allow']); - $str_contact_allow = perms2str($_REQUEST['contact_allow']); - $str_group_deny = perms2str($_REQUEST['group_deny']); - $str_contact_deny = perms2str($_REQUEST['contact_deny']); - $channel = $a->get_channel(); + + $acl = new AccessList($channel); + $acl->set_from_array($_REQUEST); + $x = $acl->get(); + $cloudPath = get_parent_cloudpath($channel_id, $channel['channel_address'], $resource); //get the object before permissions change so we can catch eventual former allowed members $object = get_file_activity_object($channel_id, $resource, $cloudPath); - attach_change_permissions($channel_id, $resource, $str_contact_allow, $str_group_allow, $str_contact_deny, $str_group_deny, $recurse); + attach_change_permissions($channel_id, $resource, $x['allow_cid'], $x['allow_gid'], $x['deny_cid'], $x['deny_gid'], $recurse); - file_activity($channel_id, $object, $str_contact_allow, $str_group_allow, $str_contact_deny, $str_group_deny, 'post', $notify); + file_activity($channel_id, $object, $x['allow_cid'], $x['allow_gid'], $x['deny_cid'], $x['deny_gid'], 'post', $notify); goaway($cloudPath); } diff --git a/mod/help.php b/mod/help.php index 809313a3e..16ec069a7 100644 --- a/mod/help.php +++ b/mod/help.php @@ -12,9 +12,6 @@ - - - function load_doc_file($s) { $lang = get_app()->language; if(! isset($lang)) @@ -32,21 +29,6 @@ function load_doc_file($s) { } function find_doc_file($s) { - - // If the file was edited more recently than we've stored a copy in the database, use the file. - // The stored database item will be searchable, the file won't be. - - $r = q("select item.* from item left join item_id on item.id = item_id.iid where service = 'docfile' and - sid = '%s' and item_type = %d limit 1", - dbesc($s), - intval(ITEM_TYPE_DOC) - ); - - if($r) { - if(file_exists($s) && (filemtime($s) > datetime_convert('UTC','UTC',$r[0]['edited'],'U'))) - return file_get_contents($s); - return($r[0]['body']); - } if(file_exists($s)) return file_get_contents($s); return ''; @@ -56,12 +38,9 @@ function search_doc_files($s) { $a = get_app(); - $itemspage = get_pconfig(local_channel(),'system','itemspage'); - $a->set_pager_itemspage(((intval($itemspage)) ? $itemspage : 20)); - $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval($a->pager['itemspage']), intval($a->pager['start'])); - - // If the file was edited more recently than we've stored a copy in the database, use the file. - // The stored database item will be searchable, the file won't be. + $itemspage = get_pconfig(local_channel(),'system','itemspage'); + $a->set_pager_itemspage(((intval($itemspage)) ? $itemspage : 20)); + $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval($a->pager['itemspage']), intval($a->pager['start'])); $regexop = db_getfunc('REGEXP'); @@ -72,11 +51,10 @@ function search_doc_files($s) { ); $r = fetch_post_tags($r,true); - require_once('include/html2plain.php'); for($x = 0; $x < count($r); $x ++) { - $r[$x]['text'] = html2plain(prepare_text($r[$x]['body'],$r[$x]['mimetype'], true)); + $r[$x]['text'] = $r[$x]['body']; $r[$x]['rank'] = 0; if($r[$x]['term']) { @@ -89,16 +67,20 @@ function search_doc_files($s) { if(stristr($r[$x]['sid'],$s)) $r[$x]['rank'] ++; $r[$x]['rank'] += substr_count(strtolower($r[$x]['text']),strtolower($s)); + // bias the results to the observer's native language + if($r[$x]['lang'] === $a->language) + $r[$x]['rank'] = $r[$x]['rank'] + 10; + } usort($r,'doc_rank_sort'); return $r; } -function doc_rank_sort($a,$b) { - if($a['rank'] == $b['rank']) +function doc_rank_sort($s1,$s2) { + if($s1['rank'] == $s2['rank']) return 0; - return (($a['rank'] < $b['rank']) ? 1 : (-1)); + return (($s1['rank'] < $s2['rank']) ? 1 : (-1)); } @@ -118,14 +100,17 @@ function store_doc_file($s) { if(strpos($s,'.md')) - $item['mimetype'] = 'text/markdown'; + $mimetype = 'text/markdown'; elseif(strpos($s,'.html')) - $item['mimetype'] = 'text/html'; + $mimetype = 'text/html'; else - $item['mimetype'] = 'text/bbcode'; + $mimetype = 'text/bbcode'; + require_once('include/html2plain.php'); + + $item['body'] = html2plain(prepare_text(file_get_contents($s),$mimetype, true)); + $item['mimetype'] = 'text/plain'; - $item['body'] = file_get_contents($s); $item['plink'] = z_root() . '/' . str_replace('doc','help',$s); $item['owner_xchan'] = $item['author_xchan'] = $sys['channel_hash']; $item['item_type'] = ITEM_TYPE_DOC; @@ -158,9 +143,12 @@ function help_content(&$a) { nav_set_selected('help'); if($_REQUEST['search']) { + + $o .= '<h2>' . t('Documentation Search') . ' - ' . htmlspecialchars($_REQUEST['search']) . '</h2>'; + $r = search_doc_files($_REQUEST['search']); if($r) { - $o .= '<ul>'; + $o .= '<ul class="help-searchlist">'; foreach($r as $rr) { $dirname = dirname($rr['sid']); $fname = basename($rr['sid']); diff --git a/mod/import.php b/mod/import.php index bf1f0ca2e..0c5ec2a4c 100644 --- a/mod/import.php +++ b/mod/import.php @@ -447,7 +447,7 @@ function import_post(&$a) { -// FIXME - ensure we have an xchan if somebody is trying to pull a fast one + // FIXME - ensure we have an xchan if somebody is trying to pull a fast one if($completed < 8) { $friends = 0; @@ -556,6 +556,24 @@ function import_post(&$a) { ref_session_write(session_id(), serialize($_SESSION)); } + +// This needs more work - we also need the term where otype = 6 to link with this, and the terms need to be relocated. +// $objs = $data['obj']; +// if($objs) { +// foreach($objs as $obj) { +// unset($obj['obj_id']); +// $obj['channel'] = $channel['channel_id']; + +// dbesc_array($obj); +// $r = dbq("INSERT INTO obj (`" +// . implode("`, `", array_keys($obj)) +// . "`) VALUES ('" +// . implode("', '", array_values($obj)) +// . "')" ); +// } +// } + + $saved_notification_flags = notifications_off($channel['channel_id']); if($import_posts && array_key_exists('item',$data) && $data['item']) { @@ -614,7 +632,7 @@ function import_post(&$a) { -// FIXME - ensure we have a self entry if somebody is trying to pull a fast one + // FIXME - ensure we have a self entry if somebody is trying to pull a fast one // send out refresh requests // notify old server that it may no longer be primary. diff --git a/mod/item.php b/mod/item.php index ff6a834e6..ec5d1b3a1 100644 --- a/mod/item.php +++ b/mod/item.php @@ -305,6 +305,8 @@ function item_post(&$a) { } } + $acl = new AccessList($channel); + $public_policy = ((x($_REQUEST,'public_policy')) ? escape_tags($_REQUEST['public_policy']) : map_scope($channel['channel_r_stream'],true)); if($webpage) @@ -316,28 +318,17 @@ function item_post(&$a) { $private = 0; // webpages are allowed to change ACLs after the fact. Normal conversation items aren't. if($webpage) { - $str_group_allow = perms2str($_REQUEST['group_allow']); - $str_contact_allow = perms2str($_REQUEST['contact_allow']); - $str_group_deny = perms2str($_REQUEST['group_deny']); - $str_contact_deny = perms2str($_REQUEST['contact_deny']); + $acl->set_from_arry($_REQUEST); } else { - $str_group_allow = $orig_post['allow_gid']; - $str_contact_allow = $orig_post['allow_cid']; - $str_group_deny = $orig_post['deny_gid']; - $str_contact_deny = $orig_post['deny_cid']; + $acl->set($orig_post); $public_policy = $orig_post['public_policy']; $private = $orig_post['item_private']; } - if((strlen($str_group_allow)) - || strlen($str_contact_allow) - || strlen($str_group_deny) - || strlen($str_contact_deny) - || strlen($public_policy) - || $private) { + if($private || $public_policy || $acl->is_private()) $private = 1; - } + $location = $orig_post['location']; $coord = $orig_post['coord']; @@ -381,38 +372,12 @@ function item_post(&$a) { } else { - - // if coming from the API and no privacy settings are set, - // use the user default permissions - as they won't have - // been supplied via a form. - - if(($api_source) - && (! array_key_exists('contact_allow',$_REQUEST)) - && (! array_key_exists('group_allow',$_REQUEST)) - && (! array_key_exists('contact_deny',$_REQUEST)) - && (! array_key_exists('group_deny',$_REQUEST))) { - $str_group_allow = $channel['channel_allow_gid']; - $str_contact_allow = $channel['channel_allow_cid']; - $str_group_deny = $channel['channel_deny_gid']; - $str_contact_deny = $channel['channel_deny_cid']; - } - elseif($walltowall) { - - // use the channel owner's default permissions - - $str_group_allow = $channel['channel_allow_gid']; - $str_contact_allow = $channel['channel_allow_cid']; - $str_group_deny = $channel['channel_deny_gid']; - $str_contact_deny = $channel['channel_deny_cid']; - } - else { - - // use the posted permissions - - $str_group_allow = perms2str($_REQUEST['group_allow']); - $str_contact_allow = perms2str($_REQUEST['contact_allow']); - $str_group_deny = perms2str($_REQUEST['group_deny']); - $str_contact_deny = perms2str($_REQUEST['contact_deny']); + if((! $walltowall) && + ((array_key_exists('contact_allow',$_REQUEST)) + || (array_key_exists('group_allow',$_REQUEST)) + || (array_key_exists('contact_deny',$_REQUEST)) + || (array_key_exists('group_deny',$_REQUEST)))) { + $acl->set_from_array($_REQUEST); } @@ -424,33 +389,15 @@ function item_post(&$a) { $body .= trim($_REQUEST['attachment']); $postopts = ''; - $private = ( - ( strlen($str_group_allow) - || strlen($str_contact_allow) - || strlen($str_group_deny) - || strlen($str_contact_deny) - || strlen($public_policy) - ) ? 1 : 0); + $private = intval($acl->is_private() || ($public_policy)); // If this is a comment, set the permissions from the parent. if($parent_item) { $private = 0; - - if(($parent_item['item_private']) - || strlen($parent_item['allow_cid']) - || strlen($parent_item['allow_gid']) - || strlen($parent_item['deny_cid']) - || strlen($parent_item['deny_gid']) - || strlen($parent_item['public_policy'])) { - $private = (($parent_item['item_private']) ? $parent_item['item_private'] : 1); - } - + $acl->set($parent_item); + $private = intval($acl->is_private() || $parent_item['item_private']); $public_policy = $parent_item['public_policy']; - $str_contact_allow = $parent_item['allow_cid']; - $str_group_allow = $parent_item['allow_gid']; - $str_contact_deny = $parent_item['deny_cid']; - $str_group_deny = $parent_item['deny_gid']; $owner_hash = $parent_item['owner_xchan']; } @@ -505,6 +452,11 @@ function item_post(&$a) { } } + $gacl = $acl->get(); + $str_contact_allow = $gacl['allow_cid']; + $str_group_allow = $gacl['allow_gid']; + $str_contact_deny = $gacl['deny_cid']; + $str_group_deny = $gacl['deny_gid']; if($mimetype === 'text/bbcode') { @@ -569,9 +521,6 @@ function item_post(&$a) { $body = preg_replace_callback('/\[img(.*?)\](.*?)\[\/img\]/ism','red_zrlify_img_callback',$body); - - - $body = bb_translate_video($body); /** diff --git a/mod/like.php b/mod/like.php index 9077adbda..0d0a1a8c2 100755 --- a/mod/like.php +++ b/mod/like.php @@ -480,15 +480,16 @@ function like_content(&$a) { if($extended_like) { - $r = q("insert into likes (channel_id,liker,likee,iid,verb,target_type,target_id,target) values (%d,'%s','%s',%d,'%s','%s','%s','%s')", + $r = q("insert into likes (channel_id,liker,likee,iid,i_mid,verb,target_type,target_id,target) values (%d,'%s','%s',%d,'%s','%s','%s','%s','%s')", intval($ch[0]['channel_id']), dbesc($observer['xchan_hash']), dbesc($ch[0]['channel_hash']), intval($post_id), + dbesc($mid), dbesc($activity), - dbesc(($tgttype)?$tgttype:$objtype), + dbesc(($tgttype)? $tgttype : $objtype), dbesc($obj_id), - dbesc(json_encode(($target)?$target:$object)) + dbesc(($target) ? $target : $object) ); }; diff --git a/mod/mitem.php b/mod/mitem.php index bc93165ac..0fadd1548 100644 --- a/mod/mitem.php +++ b/mod/mitem.php @@ -125,12 +125,7 @@ function mitem_content(&$a) { $menu_names[] = $menus['menu_name']; } - $perm_defaults = array( - 'allow_cid' => $channel['channel_allow_cid'], - 'allow_gid' => $channel['channel_allow_gid'], - 'deny_cid' => $channel['channel_deny_cid'], - 'deny_gid' => $channel['channel_deny_gid'] - ); + $acl = new AccessList($channel); $lockstate = (($channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'); @@ -151,7 +146,7 @@ function mitem_content(&$a) { '$menu_id' => $a->data['menu']['menu_id'], '$permissions' => t('Menu Item Permissions'), '$permdesc' => t("\x28click to open/close\x29"), - '$aclselect' => populate_acl($perm_defaults,false), + '$aclselect' => populate_acl($acl->get(),false), '$mitem_desc' => array('mitem_desc', t('Link Name'), '', 'Visible name of the link','*'), '$mitem_link' => array('mitem_link', t('Link or Submenu Target'), '', t('Enter URL of the link or select a menu name to create a submenu'), '*', 'list="menu-names"'), '$usezid' => array('usezid', t('Use magic-auth if available'), true, '', array(t('No'), t('Yes'))), diff --git a/mod/photos.php b/mod/photos.php index dc70e4f90..d06a8e69c 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -85,6 +85,7 @@ function photos_post(&$a) { $owner_record = $s[0]; + $acl = AccessList($a->data['channel']); if((argc() > 3) && (argv(2) === 'album')) { @@ -200,6 +201,7 @@ function photos_post(&$a) { goaway($a->get_baseurl() . '/photos/' . $a->data['channel']['channel_address'] . '/album/' . $_SESSION['album_return']); } + if(($a->argc > 2) && ((x($_POST,'desc') !== false) || (x($_POST,'newtag') !== false)) || (x($_POST,'albname') !== false)) { @@ -208,10 +210,9 @@ function photos_post(&$a) { $item_id = ((x($_POST,'item_id')) ? intval($_POST['item_id']) : 0); $albname = ((x($_POST,'albname')) ? notags(trim($_POST['albname'])) : ''); $is_nsfw = ((x($_POST,'adult')) ? intval($_POST['adult']) : 0); - $str_group_allow = perms2str($_POST['group_allow']); - $str_contact_allow = perms2str($_POST['contact_allow']); - $str_group_deny = perms2str($_POST['group_deny']); - $str_contact_deny = perms2str($_POST['contact_deny']); + + $acl->set_from_array($_POST); + $perm = $acl->get(); $resource_id = $a->argv[2]; @@ -284,10 +285,10 @@ function photos_post(&$a) { $r = q("UPDATE `photo` SET `description` = '%s', `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s' WHERE `resource_id` = '%s' AND `uid` = %d", dbesc($desc), - dbesc($str_contact_allow), - dbesc($str_group_allow), - dbesc($str_contact_deny), - dbesc($str_group_deny), + dbesc($perm['allow_cid']), + dbesc($perm['allow_gid']), + dbesc($perm['deny_cid']), + dbesc($perm['deny_gid']), dbesc($resource_id), intval($page_owner_uid) ); @@ -331,20 +332,20 @@ function photos_post(&$a) { // make sure the linked item has the same permissions as the photo regardless of any other changes $x = q("update item set allow_cid = '%s', allow_gid = '%s', deny_cid = '%s', deny_gid = '%s', item_private = %d where id = %d", - dbesc($str_contact_allow), - dbesc($str_group_allow), - dbesc($str_contact_deny), - dbesc($str_group_deny), - intval($item_private), + dbesc($perm['allow_cid']), + dbesc($perm['allow_gid']), + dbesc($perm['deny_cid']), + dbesc($perm['deny_gid']), + intval($acl->is_private()), intval($item_id) ); // make sure the attach has the same permissions as the photo regardless of any other changes $x = q("update attach set allow_cid = '%s', allow_gid = '%s', deny_cid = '%s', deny_gid = '%s' where hash = '%s' and uid = %d and is_photo = 1", - dbesc($str_contact_allow), - dbesc($str_group_allow), - dbesc($str_contact_deny), - dbesc($str_group_deny), + dbesc($perm['allow_cid']), + dbesc($perm['allow_gid']), + dbesc($perm['deny_cid']), + dbesc($perm['deny_gid']), dbesc($resource_id), intval($page_owner_uid) ); @@ -418,11 +419,11 @@ function photos_post(&$a) { $_REQUEST['source'] = 'photos'; require_once('include/attach.php'); - if(!local_channel()) { + if(! local_channel()) { $_REQUEST['contact_allow'] = expand_acl($channel['channel_allow_cid']); - $_REQUEST['group_allow'] = expand_acl($channel['channel_allow_gid']); - $_REQUEST['contact_deny'] = expand_acl($channel['channel_deny_cid']); - $_REQUEST['group_deny'] = expand_acl($channel['channel_deny_gid']); + $_REQUEST['group_allow'] = expand_acl($channel['channel_allow_gid']); + $_REQUEST['contact_deny'] = expand_acl($channel['channel_deny_cid']); + $_REQUEST['group_deny'] = expand_acl($channel['channel_deny_gid']); } $r = attach_store($a->channel,get_observer_hash(), '', $_REQUEST); @@ -557,14 +558,10 @@ function photos_content(&$a) { if($_is_owner) { $channel = $a->get_channel(); - $channel_acl = array( - 'allow_cid' => $channel['channel_allow_cid'], - 'allow_gid' => $channel['channel_allow_gid'], - 'deny_cid' => $channel['channel_deny_cid'], - 'deny_gid' => $channel['channel_deny_gid'] - ); + $acl = new AccessList($channel); + $channel_acl = $acl->get(); - $lockstate = (($channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'); + $lockstate = (($acl->is_private()) ? 'lock' : 'unlock'); } $aclselect = (($_is_owner) ? populate_acl($channel_acl,false) : ''); diff --git a/mod/settings.php b/mod/settings.php index cbd6abafc..8bfff3765 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -311,17 +311,16 @@ function settings_post(&$a) { foreach($global_perms as $k => $v) { $set_perms .= ', ' . $v[0] . ' = ' . intval($_POST[$k]) . ' '; } - - $str_group_allow = perms2str($_POST['group_allow']); - $str_contact_allow = perms2str($_POST['contact_allow']); - $str_group_deny = perms2str($_POST['group_deny']); - $str_contact_deny = perms2str($_POST['contact_deny']); - $r = q("update channel set channel_allow_cid = '%s', channel_allow_gid = '%s', channel_deny_cid = '%s', channel_deny_gid = '%s' - where channel_id = %d", - dbesc($str_contact_allow), - dbesc($str_group_allow), - dbesc($str_contact_deny), - dbesc($str_group_deny), + $acl = new AccessList($channel); + $acl->set_from_array($_POST); + $x = $acl->get(); + + $r = q("update channel set channel_allow_cid = '%s', channel_allow_gid = '%s', + channel_deny_cid = '%s', channel_deny_gid = '%s' where channel_id = %d", + dbesc($x['allow_cid']), + dbesc($x['allow_gid']), + dbesc($x['deny_cid']), + dbesc($x['deny_gid']), intval(local_channel()) ); } @@ -983,14 +982,8 @@ function settings_content(&$a) { $stpl = get_markup_template('settings.tpl'); - $celeb = false; - - $perm_defaults = array( - 'allow_cid' => $channel['channel_allow_cid'], - 'allow_gid' => $channel['channel_allow_gid'], - 'deny_cid' => $channel['channel_deny_cid'], - 'deny_gid' => $channel['channel_deny_gid'] - ); + $acl = new AccessList($channel); + $perm_defaults = $acl->get(); require_once('include/group.php'); $group_select = mini_group_select(local_channel(),$channel['channel_default_group']); diff --git a/mod/siteinfo.php b/mod/siteinfo.php index 61c20d66f..8281a7a0a 100644 --- a/mod/siteinfo.php +++ b/mod/siteinfo.php @@ -84,7 +84,6 @@ function siteinfo_init(&$a) { 'register_policy' => $register_policy[$a->config['system']['register_policy']], 'directory_mode' => $directory_mode[$a->config['system']['directory_mode']], 'language' => get_config('system','language'), - 'diaspora_emulation' => get_config('system','diaspora_enabled'), 'rss_connections' => get_config('system','feed_contacts'), 'expiration' => $site_expire, 'default_service_restrictions' => $service_class, diff --git a/version.inc b/version.inc index 988848405..cafba0e02 100644 --- a/version.inc +++ b/version.inc @@ -1 +1 @@ -2015-08-26.1136 +2015-08-31.1141 diff --git a/view/es/messages.po b/view/es/messages.po index 7fbb1cb9b..995124a85 100644 --- a/view/es/messages.po +++ b/view/es/messages.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: Redmatrix\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-08-14 00:04-0700\n" -"PO-Revision-Date: 2015-08-22 08:20+0000\n" +"POT-Creation-Date: 2015-08-21 00:04-0700\n" +"PO-Revision-Date: 2015-08-29 14:42+0000\n" "Last-Translator: Manuel Jiménez Friaza <mjfriaza@openmailbox.org>\n" "Language-Team: Spanish (http://www.transifex.com/Friendica/red-matrix/language/es/)\n" "MIME-Version: 1.0\n" @@ -138,7 +138,7 @@ msgid "" "A deleted group with this name was revived. Existing item permissions " "<strong>may</strong> apply to this group and any future members. If this is " "not what you intended, please create another group with a different name." -msgstr "Un grupo suprimido con éste nombre ha sido reestablecido. <strong>Es posible</strong> que los permisos existentes sean aplicados a éste grupo y sus futuros miembros. Si no quiere esto por favor cree otro grupo con un nombre diferente." +msgstr "Un grupo suprimido con este nombre ha sido restablecido. <strong>Es posible</strong> que los permisos existentes sean aplicados a este grupo y sus futuros miembros. Si no quiere esto por favor cree otro grupo con un nombre diferente." #: ../../include/group.php:235 msgid "Default privacy group for new contacts" @@ -243,7 +243,7 @@ msgstr "Pulse aquí para actualizar" #: ../../include/account.php:713 msgid "This action exceeds the limits set by your subscription plan." -msgstr "Ésta acción supera los límites establecidos por su plan de suscripción " +msgstr "Esta acción supera los límites establecidos por su plan de suscripción " #: ../../include/account.php:718 msgid "This action is not available under your subscription plan." @@ -377,11 +377,11 @@ msgstr "Sí" #: ../../include/dir_fns.php:129 msgid "Public Forums Only" -msgstr "Solamente foros públicos" +msgstr "Solo foros públicos" #: ../../include/dir_fns.php:130 msgid "This Website Only" -msgstr "Solamente este sitio web" +msgstr "Solo este sitio web" #: ../../include/page_widgets.php:6 msgid "New Page" @@ -422,7 +422,7 @@ msgstr "Creado" msgid "Edited" msgstr "Editado" -#: ../../include/api.php:1193 +#: ../../include/api.php:1214 msgid "Public Timeline" msgstr "Cronología pública" @@ -900,7 +900,7 @@ msgstr "Formato de la página" #: ../../include/text.php:1694 msgid "You can create your own with the layouts tool" -msgstr "Puede crear la suya propia con la herramienta de diseño" +msgstr "Puede crear su propio formato gráfico con las herramientas de diseño" #: ../../include/text.php:1735 msgid "Page content type" @@ -951,7 +951,7 @@ msgstr "Menús" #: ../../include/text.php:2201 ../../mod/layouts.php:174 msgid "Layouts" -msgstr "Formatos" +msgstr "Formato gráfico" #: ../../include/text.php:2202 msgid "Pages" @@ -1273,7 +1273,7 @@ msgstr "Nueva pestaña de red" #: ../../include/features.php:72 msgid "Enable tab to display all new Network activity" -msgstr "Habilitar una pestaña en la cual se muestra toda la actividad de la red" +msgstr "Habilitar una pestaña en la que se muestre toda la actividad de la red" #: ../../include/features.php:73 msgid "Affinity Tool" @@ -1380,7 +1380,7 @@ msgstr "Editar una aplicación personal" #: ../../include/widgets.php:136 ../../include/widgets.php:175 #: ../../include/Contact.php:107 ../../include/conversation.php:945 -#: ../../include/identity.php:857 ../../mod/directory.php:316 +#: ../../include/identity.php:880 ../../mod/directory.php:316 #: ../../mod/match.php:64 ../../mod/suggest.php:52 msgid "Connect" msgstr "Conectar" @@ -1455,7 +1455,7 @@ msgstr "Conocidos/as" #: ../../include/widgets.php:433 ../../mod/connections.php:231 #: ../../mod/connections.php:246 ../../mod/connedit.php:575 msgid "All" -msgstr "Todos" +msgstr "Todas" #: ../../include/widgets.php:452 msgid "Refresh" @@ -1557,7 +1557,7 @@ msgid "Finishes:" msgstr "Finaliza:" #: ../../include/event.php:50 ../../include/bb2diaspora.php:481 -#: ../../include/identity.php:908 ../../mod/directory.php:302 +#: ../../include/identity.php:931 ../../mod/directory.php:302 #: ../../mod/events.php:661 msgid "Location:" msgstr "Ubicación:" @@ -1785,7 +1785,7 @@ msgstr "Abstención" #: ../../include/follow.php:28 msgid "Channel is blocked on this site." -msgstr "El canal está bloqueado en éste sitio." +msgstr "El canal está bloqueado en este sitio." #: ../../include/follow.php:33 msgid "Channel location missing." @@ -1862,7 +1862,7 @@ msgid "View all" msgstr "Ver todo" #: ../../include/ItemObject.php:179 ../../include/taxonomy.php:396 -#: ../../include/conversation.php:1701 ../../include/identity.php:1167 +#: ../../include/conversation.php:1701 ../../include/identity.php:1190 #: ../../mod/photos.php:1019 msgctxt "noun" msgid "Like" @@ -1888,7 +1888,7 @@ msgstr "Eliminar estrella" #: ../../include/ItemObject.php:214 msgid "Toggle Star Status" -msgstr "Activa o desactiva el estado de preferido" +msgstr "Activar o desactivar el estado de preferido" #: ../../include/ItemObject.php:218 msgid "starred" @@ -1975,7 +1975,7 @@ msgstr "Caduca: %s" #: ../../include/ItemObject.php:337 msgid "Save Bookmarks" -msgstr "Guardar marcadores" +msgstr "Guardar en Marcadores" #: ../../include/ItemObject.php:338 msgid "Add to Calendar" @@ -1983,7 +1983,7 @@ msgstr "Añadir al calendario" #: ../../include/ItemObject.php:347 msgid "Mark all seen" -msgstr "Marcar todos como vistos" +msgstr "Marcar todo como visto" #: ../../include/ItemObject.php:353 ../../mod/photos.php:1145 msgctxt "noun" @@ -2068,7 +2068,7 @@ msgstr "Nueva ventana" msgid "Open the selected location in a different window or browser tab" msgstr "Abrir la ubicación seleccionada en una ventana o pestaña aparte" -#: ../../include/Contact.php:215 ../../mod/admin.php:739 +#: ../../include/Contact.php:215 #, php-format msgid "User '%s' deleted" msgstr "El usuario '%s' ha sido eliminado" @@ -2083,11 +2083,11 @@ msgstr "Notificación de eventos de $Projectname:" #: ../../include/nav.php:87 ../../include/nav.php:120 ../../boot.php:1550 msgid "Logout" -msgstr "Cerrar sesión" +msgstr "Finalizar sesión" #: ../../include/nav.php:87 ../../include/nav.php:120 msgid "End this session" -msgstr "Cerrar ésta sesión" +msgstr "Finalizar esta sesión" #: ../../include/nav.php:90 ../../include/nav.php:151 msgid "Home" @@ -2100,7 +2100,7 @@ msgstr "Sus entradas y conversaciones" #: ../../include/nav.php:91 ../../include/conversation.php:942 #: ../../mod/connedit.php:498 msgid "View Profile" -msgstr "Ver perfil" +msgstr "Ver el perfil" #: ../../include/nav.php:91 msgid "Your profile page" @@ -2114,7 +2114,7 @@ msgstr "Editar perfiles" msgid "Manage/Edit profiles" msgstr "Administrar/editar perfiles" -#: ../../include/nav.php:95 ../../include/identity.php:880 +#: ../../include/nav.php:95 ../../include/identity.php:903 msgid "Edit Profile" msgstr "Editar perfil" @@ -2172,7 +2172,7 @@ msgstr "Acceder" #: ../../include/nav.php:134 #, php-format msgid "%s - click to logout" -msgstr "%s - pulsar para cerrar sesión" +msgstr "%s - pulsar para finalizar sesión" #: ../../include/nav.php:137 msgid "Remote authentication" @@ -2307,7 +2307,7 @@ msgstr "Marcar todos los eventos como leidos" #: ../../include/nav.php:206 ../../include/apps.php:132 #: ../../mod/manage.php:166 msgid "Channel Manager" -msgstr "Administración del canal" +msgstr "Administración de canales" #: ../../include/nav.php:206 msgid "Manage Your Channels" @@ -2628,7 +2628,7 @@ msgstr "Eliminar elementos seleccionados" #: ../../include/conversation.php:939 msgid "View Source" -msgstr "Ver origen" +msgstr "Ver la fuente original de esta entrada" #: ../../include/conversation.php:940 msgid "Follow Thread" @@ -2644,7 +2644,7 @@ msgstr "Ver fotos" #: ../../include/conversation.php:944 msgid "Matrix Activity" -msgstr "Actividad en la red" +msgstr "Actividad en la red de esta conexión" #: ../../include/conversation.php:946 msgid "Edit Contact" @@ -3126,7 +3126,7 @@ msgstr "Paquete de datos no válido" msgid "Unable to verify channel signature" msgstr "No ha sido posible de verificar la signatura del canal" -#: ../../include/zot.php:2144 +#: ../../include/zot.php:2133 #, php-format msgid "Unable to verify site signature for %s" msgstr "No ha sido posible de verificar la signatura del sitio para %s" @@ -3324,11 +3324,11 @@ msgstr "No ha sido posible recuperar la identidad creada" msgid "Default Profile" msgstr "Perfil principal" -#: ../../include/identity.php:660 +#: ../../include/identity.php:683 msgid "Requested channel is not available." msgstr "El canal solicitado no está disponible." -#: ../../include/identity.php:707 ../../mod/profile.php:16 +#: ../../include/identity.php:730 ../../mod/profile.php:16 #: ../../mod/achievements.php:11 ../../mod/webpages.php:29 #: ../../mod/connect.php:13 ../../mod/hcard.php:8 ../../mod/blocks.php:29 #: ../../mod/editlayout.php:27 ../../mod/editwebpage.php:28 @@ -3337,193 +3337,193 @@ msgstr "El canal solicitado no está disponible." msgid "Requested profile is not available." msgstr "El perfil solicitado no está disponible." -#: ../../include/identity.php:870 ../../mod/profiles.php:774 +#: ../../include/identity.php:893 ../../mod/profiles.php:774 msgid "Change profile photo" msgstr "Cambiar foto de perfil" -#: ../../include/identity.php:876 +#: ../../include/identity.php:899 msgid "Profiles" msgstr "Perfiles" -#: ../../include/identity.php:876 +#: ../../include/identity.php:899 msgid "Manage/edit profiles" msgstr "Administrar/editar perfiles" -#: ../../include/identity.php:877 ../../mod/profiles.php:775 +#: ../../include/identity.php:900 ../../mod/profiles.php:775 msgid "Create New Profile" msgstr "Crear nuevo perfil" -#: ../../include/identity.php:892 ../../mod/profiles.php:786 +#: ../../include/identity.php:915 ../../mod/profiles.php:786 msgid "Profile Image" msgstr "Imagen de perfil" -#: ../../include/identity.php:895 +#: ../../include/identity.php:918 msgid "visible to everybody" msgstr "visible para cualquiera" -#: ../../include/identity.php:896 ../../mod/profiles.php:669 +#: ../../include/identity.php:919 ../../mod/profiles.php:669 #: ../../mod/profiles.php:790 msgid "Edit visibility" msgstr "Editar visibilidad" -#: ../../include/identity.php:912 ../../include/identity.php:1151 +#: ../../include/identity.php:935 ../../include/identity.php:1174 msgid "Gender:" msgstr "Género:" -#: ../../include/identity.php:913 ../../include/identity.php:1195 +#: ../../include/identity.php:936 ../../include/identity.php:1218 msgid "Status:" msgstr "Estado:" -#: ../../include/identity.php:914 ../../include/identity.php:1206 +#: ../../include/identity.php:937 ../../include/identity.php:1229 msgid "Homepage:" msgstr "Página personal:" -#: ../../include/identity.php:915 +#: ../../include/identity.php:938 msgid "Online Now" msgstr "Ahora en línea" -#: ../../include/identity.php:998 ../../include/identity.php:1076 +#: ../../include/identity.php:1021 ../../include/identity.php:1099 #: ../../mod/ping.php:324 msgid "g A l F d" msgstr "g A l d F" -#: ../../include/identity.php:999 ../../include/identity.php:1077 +#: ../../include/identity.php:1022 ../../include/identity.php:1100 msgid "F d" msgstr "d F" -#: ../../include/identity.php:1044 ../../include/identity.php:1116 +#: ../../include/identity.php:1067 ../../include/identity.php:1139 #: ../../mod/ping.php:346 msgid "[today]" msgstr "[hoy]" -#: ../../include/identity.php:1055 +#: ../../include/identity.php:1078 msgid "Birthday Reminders" msgstr "Recordatorios de cumpleaños" -#: ../../include/identity.php:1056 +#: ../../include/identity.php:1079 msgid "Birthdays this week:" msgstr "Cumpleaños esta semana:" -#: ../../include/identity.php:1109 +#: ../../include/identity.php:1132 msgid "[No description]" msgstr "[Sin descripción]" -#: ../../include/identity.php:1127 +#: ../../include/identity.php:1150 msgid "Event Reminders" msgstr "Recordatorios de eventos" -#: ../../include/identity.php:1128 +#: ../../include/identity.php:1151 msgid "Events this week:" msgstr "Eventos de esta semana:" -#: ../../include/identity.php:1141 ../../include/identity.php:1258 +#: ../../include/identity.php:1164 ../../include/identity.php:1281 #: ../../include/apps.php:138 ../../mod/profperm.php:112 msgid "Profile" msgstr "Perfil" -#: ../../include/identity.php:1149 ../../mod/settings.php:1056 +#: ../../include/identity.php:1172 ../../mod/settings.php:1056 msgid "Full Name:" msgstr "Nombre completo:" -#: ../../include/identity.php:1156 +#: ../../include/identity.php:1179 msgid "Like this channel" msgstr "Me gusta este canal" -#: ../../include/identity.php:1180 +#: ../../include/identity.php:1203 msgid "j F, Y" msgstr "j F Y" -#: ../../include/identity.php:1181 +#: ../../include/identity.php:1204 msgid "j F" msgstr "j F" -#: ../../include/identity.php:1188 +#: ../../include/identity.php:1211 msgid "Birthday:" msgstr "Cumpleaños:" -#: ../../include/identity.php:1192 ../../mod/directory.php:297 +#: ../../include/identity.php:1215 ../../mod/directory.php:297 msgid "Age:" msgstr "Edad:" -#: ../../include/identity.php:1201 +#: ../../include/identity.php:1224 #, php-format msgid "for %1$d %2$s" msgstr "por %1$d %2$s" -#: ../../include/identity.php:1204 ../../mod/profiles.php:691 +#: ../../include/identity.php:1227 ../../mod/profiles.php:691 msgid "Sexual Preference:" msgstr "Orientación sexual:" -#: ../../include/identity.php:1208 ../../mod/directory.php:313 +#: ../../include/identity.php:1231 ../../mod/directory.php:313 #: ../../mod/profiles.php:693 msgid "Hometown:" msgstr "Ciudad de origen:" -#: ../../include/identity.php:1210 +#: ../../include/identity.php:1233 msgid "Tags:" msgstr "Etiquetas:" -#: ../../include/identity.php:1212 ../../mod/profiles.php:694 +#: ../../include/identity.php:1235 ../../mod/profiles.php:694 msgid "Political Views:" msgstr "Posición política:" -#: ../../include/identity.php:1214 +#: ../../include/identity.php:1237 msgid "Religion:" msgstr "Religión:" -#: ../../include/identity.php:1216 ../../mod/directory.php:315 +#: ../../include/identity.php:1239 ../../mod/directory.php:315 msgid "About:" msgstr "Sobre mí:" -#: ../../include/identity.php:1218 +#: ../../include/identity.php:1241 msgid "Hobbies/Interests:" msgstr "Aficciones/Intereses:" -#: ../../include/identity.php:1220 ../../mod/profiles.php:697 +#: ../../include/identity.php:1243 ../../mod/profiles.php:697 msgid "Likes:" msgstr "Me gusta:" -#: ../../include/identity.php:1222 ../../mod/profiles.php:698 +#: ../../include/identity.php:1245 ../../mod/profiles.php:698 msgid "Dislikes:" msgstr "No me gusta:" -#: ../../include/identity.php:1224 +#: ../../include/identity.php:1247 msgid "Contact information and Social Networks:" msgstr "Información de contacto y redes sociales:" -#: ../../include/identity.php:1226 +#: ../../include/identity.php:1249 msgid "My other channels:" msgstr "Mis otros canales:" -#: ../../include/identity.php:1228 +#: ../../include/identity.php:1251 msgid "Musical interests:" msgstr "Intereses musicales:" -#: ../../include/identity.php:1230 +#: ../../include/identity.php:1253 msgid "Books, literature:" msgstr "Libros, literatura:" -#: ../../include/identity.php:1232 +#: ../../include/identity.php:1255 msgid "Television:" msgstr "Televisión:" -#: ../../include/identity.php:1234 +#: ../../include/identity.php:1257 msgid "Film/dance/culture/entertainment:" msgstr "Cine/danza/cultura/entretenimiento:" -#: ../../include/identity.php:1236 +#: ../../include/identity.php:1259 msgid "Love/Romance:" msgstr "Vida sentimental/amorosa:" -#: ../../include/identity.php:1238 +#: ../../include/identity.php:1261 msgid "Work/employment:" msgstr "Trabajo:" -#: ../../include/identity.php:1240 +#: ../../include/identity.php:1263 msgid "School/education:" msgstr "Estudios:" -#: ../../include/identity.php:1260 +#: ../../include/identity.php:1283 msgid "Like this thing" msgstr "Me gusta esto" @@ -3613,7 +3613,7 @@ msgstr "Autosexual" #: ../../include/profile_selectors.php:42 msgid "Abstinent" -msgstr "Abstemio" +msgstr "Casto" #: ../../include/profile_selectors.php:42 msgid "Virgin" @@ -3629,11 +3629,11 @@ msgstr "Fetichista" #: ../../include/profile_selectors.php:42 msgid "Oodles" -msgstr "Montones" +msgstr "Orgías" #: ../../include/profile_selectors.php:42 msgid "Nonsexual" -msgstr "No sexual" +msgstr "Asexual" #: ../../include/profile_selectors.php:80 #: ../../include/profile_selectors.php:97 @@ -3705,7 +3705,7 @@ msgstr "Cohabitando" #: ../../include/profile_selectors.php:80 msgid "Common law" -msgstr "Derecho común" +msgstr "Matrimonio tradicional" #: ../../include/profile_selectors.php:80 msgid "Happy" @@ -3915,7 +3915,7 @@ msgstr "La imagen es demasiado grande (%lu demás)" #: ../../include/photos.php:101 msgid "Image file is empty." -msgstr "El fichero de imagen ésta vacío. " +msgstr "El fichero de imagen está vacío. " #: ../../include/photos.php:128 ../../mod/profile_photo.php:217 msgid "Unable to process image" @@ -4567,7 +4567,7 @@ msgstr "Crear una colección de canales." #: ../../mod/group.php:87 ../../mod/group.php:183 msgid "Collection Name: " -msgstr "Nombre de la Colección:" +msgstr "Nombre de la colección:" #: ../../mod/group.php:89 ../../mod/group.php:186 msgid "Members are visible to other channels" @@ -4748,19 +4748,19 @@ msgstr "Error al actualizar el registro de la conexión." #: ../../mod/connections.php:192 ../../mod/connections.php:293 msgid "Blocked" -msgstr "Bloqueados" +msgstr "Bloqueadas" #: ../../mod/connections.php:197 ../../mod/connections.php:300 msgid "Ignored" -msgstr "Ignorados" +msgstr "Ignoradas" #: ../../mod/connections.php:202 ../../mod/connections.php:314 msgid "Hidden" -msgstr "Ocultos" +msgstr "Ocultas" #: ../../mod/connections.php:207 ../../mod/connections.php:307 msgid "Archived" -msgstr "Archivados" +msgstr "Archivadas" #: ../../mod/connections.php:271 msgid "Suggest new connections" @@ -4784,7 +4784,7 @@ msgstr "Mostrar todas las conexiones" #: ../../mod/connections.php:286 msgid "Unblocked" -msgstr "Desbloqueados" +msgstr "Desbloqueadas" #: ../../mod/connections.php:289 msgid "Only show unblocked connections" @@ -5075,7 +5075,7 @@ msgstr "RSS" #: ../../mod/pdledit.php:13 msgid "Layout updated." -msgstr "Diseño actualizado" +msgstr "Formato actualizado" #: ../../mod/pdledit.php:28 ../../mod/pdledit.php:53 msgid "Edit System Page Description" @@ -5083,7 +5083,7 @@ msgstr "Editor del Sistema de Descripción de Páginas" #: ../../mod/pdledit.php:48 msgid "Layout not found." -msgstr "Diseño no encontrado" +msgstr "Formato no encontrado" #: ../../mod/pdledit.php:54 msgid "Module Name:" @@ -5201,16 +5201,16 @@ msgstr "¿Borrar formato?" #: ../../mod/editlayout.php:158 ../../mod/layouts.php:124 msgid "Layout Description (Optional)" -msgstr "Descripción del diseño (opcional)" +msgstr "Descripción del formato gráfico (opcional)" #: ../../mod/editlayout.php:160 ../../mod/layouts.php:121 #: ../../mod/layouts.php:179 msgid "Layout Name" -msgstr "Nombre del diseño" +msgstr "Nombre del formato" #: ../../mod/editlayout.php:177 msgid "Edit Layout" -msgstr "Editar diseño" +msgstr "Modificar formato" #: ../../mod/chat.php:19 ../../mod/channel.php:25 msgid "You must be logged in to see this page." @@ -5397,7 +5397,7 @@ msgstr "No se ha encontrado una cuenta válida." msgid "Password reset request issued. Check your email." msgstr "Se ha recibido una solicitud de restablecimiento de contraseña. Consulte su correo electrónico." -#: ../../mod/lostpass.php:35 ../../mod/lostpass.php:102 +#: ../../mod/lostpass.php:35 ../../mod/lostpass.php:103 #, php-format msgid "Site Member (%s)" msgstr "Usuario del sitio (%s)" @@ -5413,52 +5413,52 @@ msgid "" "Password reset failed." msgstr "La solicitud no ha podido ser verificada. (Puede que la haya enviado con anterioridad) El restablecimiento de la contraseña ha fallado." -#: ../../mod/lostpass.php:85 ../../boot.php:1559 +#: ../../mod/lostpass.php:86 ../../boot.php:1559 msgid "Password Reset" msgstr "Restablecer la contraseña" -#: ../../mod/lostpass.php:86 +#: ../../mod/lostpass.php:87 msgid "Your password has been reset as requested." msgstr "Su contraseña ha sido restablecida según lo solicitó." -#: ../../mod/lostpass.php:87 +#: ../../mod/lostpass.php:88 msgid "Your new password is" msgstr "Su nueva contraseña es" -#: ../../mod/lostpass.php:88 +#: ../../mod/lostpass.php:89 msgid "Save or copy your new password - and then" msgstr "Guarde o copie su nueva contraseña - y después" -#: ../../mod/lostpass.php:89 +#: ../../mod/lostpass.php:90 msgid "click here to login" msgstr "Pulse aquí para conectarse" -#: ../../mod/lostpass.php:90 +#: ../../mod/lostpass.php:91 msgid "" "Your password may be changed from the <em>Settings</em> page after " "successful login." msgstr "Puede cambiar la contraseña en la página <em>Ajustes</em> una vez iniciada la sesión." -#: ../../mod/lostpass.php:107 +#: ../../mod/lostpass.php:108 #, php-format msgid "Your password has changed at %s" msgstr "Su contraseña en %s ha sido cambiada" -#: ../../mod/lostpass.php:122 +#: ../../mod/lostpass.php:123 msgid "Forgot your Password?" msgstr "¿Ha olvidado su contraseña?" -#: ../../mod/lostpass.php:123 +#: ../../mod/lostpass.php:124 msgid "" "Enter your email address and submit to have your password reset. Then check " "your email for further instructions." msgstr "Introduzca y envíe su dirección de correo electrónico para el restablecimiento de su contraseña. Luego revise su correo para obtener más instrucciones." -#: ../../mod/lostpass.php:124 +#: ../../mod/lostpass.php:125 msgid "Email Address" msgstr "Dirección de correo electrónico" -#: ../../mod/lostpass.php:125 +#: ../../mod/lostpass.php:126 msgid "Reset" msgstr "Reiniciar" @@ -6550,11 +6550,11 @@ msgstr "Bienvenido %s. La identificación desde su servidor se ha llevado a cabo msgid "%1$s tagged %2$s's %3$s with %4$s" msgstr "%1$s ha etiquetado el %3$s de %2$s con %4$s" -#: ../../mod/uexport.php:41 ../../mod/uexport.php:42 +#: ../../mod/uexport.php:45 ../../mod/uexport.php:46 msgid "Export Channel" msgstr "Exportar el canal" -#: ../../mod/uexport.php:43 +#: ../../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 " @@ -6562,11 +6562,11 @@ msgid "" "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:44 +#: ../../mod/uexport.php:48 msgid "Export Content" msgstr "Exportar contenidos" -#: ../../mod/uexport.php:45 +#: ../../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 " @@ -7088,31 +7088,36 @@ msgstr "Último contacto conocido" #: ../../mod/admin.php:683 #, php-format -msgid "%s user blocked/unblocked" -msgid_plural "%s users blocked/unblocked" -msgstr[0] "%s usuarios bloqueados/desbloqueados" -msgstr[1] "%s de usuarios bloqueados/desbloqueados" +msgid "%s account blocked/unblocked" +msgid_plural "%s account blocked/unblocked" +msgstr[0] "%s cuenta bloqueada/desbloqueada" +msgstr[1] "%s cuenta bloqueada/desbloqueada" #: ../../mod/admin.php:691 #, php-format -msgid "%s user deleted" -msgid_plural "%s users deleted" -msgstr[0] "%s usuarios eliminados" -msgstr[1] "%s usuarios eliminados" +msgid "%s account deleted" +msgid_plural "%s accounts deleted" +msgstr[0] "%s cuentas eliminadas" +msgstr[1] "%s cuentas eliminadas" #: ../../mod/admin.php:727 msgid "Account not found" msgstr "Cuenta no encontrada" +#: ../../mod/admin.php:739 +#, php-format +msgid "Account '%s' deleted" +msgstr "La cuenta '%s' ha sido eliminada" + #: ../../mod/admin.php:747 #, php-format -msgid "User '%s' blocked" -msgstr "Usuario %s bloqueado" +msgid "Account '%s' blocked" +msgstr "La cuenta '%s' ha sido bloqueada" #: ../../mod/admin.php:755 #, php-format -msgid "User '%s' unblocked" -msgstr "Usuario %s desbloqueado" +msgid "Account '%s' unblocked" +msgstr "La cuenta '%s' ha sido desbloqueada" #: ../../mod/admin.php:818 ../../mod/admin.php:830 msgid "Users" @@ -7168,15 +7173,15 @@ msgstr "Clase de servicio" #: ../../mod/admin.php:833 msgid "" -"Selected users will be deleted!\\n\\nEverything these users had posted on " -"this site will be permanently deleted!\\n\\nAre you sure?" -msgstr "Los usuarios seleccionados serám eliminados!\\n\\nTodo lo que estos usuarios han publicado en este sitio se borrará de manera definitiva!\\n\\n¿Está seguro de querer hacerlo?" +"Selected accounts will be deleted!\\n\\nEverything these accounts had posted" +" on this site will be permanently deleted!\\n\\nAre you sure?" +msgstr "¡Las cuentas seleccionadas van a ser eliminadas!\\n\\n¡Todo lo que estas cuentas han publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?" #: ../../mod/admin.php:834 msgid "" -"The user {0} will be deleted!\\n\\nEverything this user has posted on this " -"site will be permanently deleted!\\n\\nAre you sure?" -msgstr "El usuario {0} va a ser eliminado!\\n\\nTodo lo que este usuario ha publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?" +"The account {0} will be deleted!\\n\\nEverything this account has posted on " +"this site will be permanently deleted!\\n\\nAre you sure?" +msgstr "¡La cuenta {0} va a ser eliminada!\\n\\n¡Todo lo que esta cuenta ha publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?" #: ../../mod/admin.php:870 #, php-format @@ -7633,7 +7638,7 @@ msgstr "No se ha establecido la configuración de características" #: ../../mod/settings.php:685 msgid "Feature/Addon Settings" -msgstr "Ajustes de la característica o complemento" +msgstr "Ajustes de la característica o el complemento" #: ../../mod/settings.php:687 msgid "Settings for the built-in Diaspora emulator" @@ -7790,7 +7795,7 @@ msgstr "Nadie excepto tú" #: ../../mod/settings.php:906 msgid "Only those you specifically allow" -msgstr "Solamente aquellos a los que usted permita específicamente" +msgstr "Solo aquellos a los que usted permita explícitamente" #: ../../mod/settings.php:907 msgid "Approved connections" @@ -8348,7 +8353,7 @@ msgstr "Aplicar estos permisos automaticamente" #: ../../mod/connedit.php:665 msgid "This connection's address is" -msgstr "Esta dirección de conexión es" +msgstr "La dirección de esta conexión es" #: ../../mod/connedit.php:668 msgid "" @@ -8599,7 +8604,7 @@ msgstr "O <a href=\"import\">importar un canal existente</a> de otro lugar" msgid "" "Please choose a channel type (such as social networking or community forum) " "and privacy requirements so we can select the best permissions for you" -msgstr "elija el tipo de canal (como red social o foro de comunidad) y la privacidad que requiera, así podremos seleccionar el mejor conjunto de permisos para usted" +msgstr "Elija el tipo de canal (como red social o foro de comunidad) y la privacidad que requiera, así podremos seleccionar el mejor conjunto de permisos para usted" #: ../../mod/new_channel.php:119 msgid "Channel Type" @@ -8675,7 +8680,7 @@ msgstr "Página de ayuda del lenguaje de descripción de páginas (PDL) Comanche #: ../../mod/layouts.php:180 msgid "Layout Description" -msgstr "Descripción del formato gráfico" +msgstr "Descripción del formato" #: ../../mod/layouts.php:185 msgid "Download PDL file" diff --git a/view/es/strings.php b/view/es/strings.php index b4ee5195f..8088348f4 100644 --- a/view/es/strings.php +++ b/view/es/strings.php @@ -29,7 +29,7 @@ $a->strings["commented on %s's post"] = "ha comentado la entrada de %s"; $a->strings["No username found in import file."] = "No se ha encontrado el nombre de usuario en el fichero importado."; $a->strings["Unable to create a unique channel address. Import failed."] = "No se ha podido crear una dirección de canal única. Ha fallado la importación."; $a->strings["Import completed."] = "Importación completada."; -$a->strings["A deleted group with this name was revived. Existing item permissions <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name."] = "Un grupo suprimido con éste nombre ha sido reestablecido. <strong>Es posible</strong> que los permisos existentes sean aplicados a éste grupo y sus futuros miembros. Si no quiere esto por favor cree otro grupo con un nombre diferente."; +$a->strings["A deleted group with this name was revived. Existing item permissions <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name."] = "Un grupo suprimido con este nombre ha sido restablecido. <strong>Es posible</strong> que los permisos existentes sean aplicados a este grupo y sus futuros miembros. Si no quiere esto por favor cree otro grupo con un nombre diferente."; $a->strings["Default privacy group for new contacts"] = "Privacidad de grupo por defecto para nuevos contactos "; $a->strings["All Channels"] = "Todos los canales"; $a->strings["edit"] = "editar"; @@ -54,7 +54,7 @@ $a->strings["Account approved."] = "Cuenta aprobada."; $a->strings["Registration revoked for %s"] = "Registro revocado para %s"; $a->strings["Account verified. Please login."] = "Cuenta verificada. Por favor, inicie sesión."; $a->strings["Click here to upgrade."] = "Pulse aquí para actualizar"; -$a->strings["This action exceeds the limits set by your subscription plan."] = "Ésta acción supera los límites establecidos por su plan de suscripción "; +$a->strings["This action exceeds the limits set by your subscription plan."] = "Esta acción supera los límites establecidos por su plan de suscripción "; $a->strings["This action is not available under your subscription plan."] = "Esta acción no está disponible en su plan de suscripción."; $a->strings["Miscellaneous"] = "Varios"; $a->strings["YYYY-MM-DD or MM-DD"] = "AAAA-MM-DD o MM-DD"; @@ -82,8 +82,8 @@ $a->strings["Directory Options"] = "Opciones del directorio"; $a->strings["Safe Mode"] = "Modo seguro"; $a->strings["No"] = "No"; $a->strings["Yes"] = "Sí"; -$a->strings["Public Forums Only"] = "Solamente foros públicos"; -$a->strings["This Website Only"] = "Solamente este sitio web"; +$a->strings["Public Forums Only"] = "Solo foros públicos"; +$a->strings["This Website Only"] = "Solo este sitio web"; $a->strings["New Page"] = "Nueva página"; $a->strings["View"] = "Ver"; $a->strings["Preview"] = "Previsualizar"; @@ -205,7 +205,7 @@ $a->strings["Click to open/close"] = "Pulsar para abrir/cerrar"; $a->strings["Link to Source"] = "Ir al mensaje original"; $a->strings["default"] = "por defecto"; $a->strings["Page layout"] = "Formato de la página"; -$a->strings["You can create your own with the layouts tool"] = "Puede crear la suya propia con la herramienta de diseño"; +$a->strings["You can create your own with the layouts tool"] = "Puede crear su propio formato gráfico con las herramientas de diseño"; $a->strings["Page content type"] = "Tipo de contenido de página"; $a->strings["Select an alternate language"] = "Selecciona un idioma alternativo"; $a->strings["photo"] = "foto"; @@ -216,7 +216,7 @@ $a->strings["activity"] = "actividad"; $a->strings["Design Tools"] = "Herramientas de diseño"; $a->strings["Blocks"] = "Bloques"; $a->strings["Menus"] = "Menús"; -$a->strings["Layouts"] = "Formatos"; +$a->strings["Layouts"] = "Formato gráfico"; $a->strings["Pages"] = "Páginas"; $a->strings["Collection"] = "Colección"; $a->strings["parent"] = "padre"; @@ -289,7 +289,7 @@ $a->strings["Save search terms for re-use"] = "Guardar términos de búsqueda pa $a->strings["Network Personal Tab"] = "Pestaña de red personal"; $a->strings["Enable tab to display only Network posts that you've interacted on"] = "Habilitar una pestaña en la cual se muestren solo las entradas en las que ha participado."; $a->strings["Network New Tab"] = "Nueva pestaña de red"; -$a->strings["Enable tab to display all new Network activity"] = "Habilitar una pestaña en la cual se muestra toda la actividad de la red"; +$a->strings["Enable tab to display all new Network activity"] = "Habilitar una pestaña en la que se muestre toda la actividad de la red"; $a->strings["Affinity Tool"] = "Herramienta de afinidad"; $a->strings["Filter stream activity by depth of relationships"] = "Filtrar la actividad del flujo por profundidad de relaciones"; $a->strings["Connection Filtering"] = "Filtrado de conexiones"; @@ -331,7 +331,7 @@ $a->strings["Me"] = "Yo"; $a->strings["Family"] = "Familia"; $a->strings["Friends"] = "Amigos"; $a->strings["Acquaintances"] = "Conocidos/as"; -$a->strings["All"] = "Todos"; +$a->strings["All"] = "Todas"; $a->strings["Refresh"] = "Recargar"; $a->strings["Account settings"] = "Configuración de la cuenta"; $a->strings["Channel settings"] = "Configuración del canal"; @@ -403,7 +403,7 @@ $a->strings["Please choose"] = "Por favor, elija"; $a->strings["Agree"] = "De acuerdo"; $a->strings["Disagree"] = "En desacuerdo"; $a->strings["Abstain"] = "Abstención"; -$a->strings["Channel is blocked on this site."] = "El canal está bloqueado en éste sitio."; +$a->strings["Channel is blocked on this site."] = "El canal está bloqueado en este sitio."; $a->strings["Channel location missing."] = "Falta la ubicación del canal."; $a->strings["Response from remote channel was incomplete."] = "Respuesta incompleta del canal."; $a->strings["Channel was deleted and no longer exists."] = "El canal ha sido eliminado y ya no existe."; @@ -432,7 +432,7 @@ $a->strings["__ctx:noun__ Dislike"] = array( ); $a->strings["Add Star"] = "Destacar añadiendo una estrella"; $a->strings["Remove Star"] = "Eliminar estrella"; -$a->strings["Toggle Star Status"] = "Activa o desactiva el estado de preferido"; +$a->strings["Toggle Star Status"] = "Activar o desactivar el estado de preferido"; $a->strings["starred"] = "preferidos"; $a->strings["Message signature validated"] = "Firma de mensaje validada"; $a->strings["Message signature incorrect"] = "Firma de mensaje incorrecta"; @@ -455,9 +455,9 @@ $a->strings["via Wall-To-Wall:"] = "Mediante el procedimiento página de perfil $a->strings["from %s"] = "desde %s"; $a->strings["last edited: %s"] = "último cambio: %s"; $a->strings["Expires: %s"] = "Caduca: %s"; -$a->strings["Save Bookmarks"] = "Guardar marcadores"; +$a->strings["Save Bookmarks"] = "Guardar en Marcadores"; $a->strings["Add to Calendar"] = "Añadir al calendario"; -$a->strings["Mark all seen"] = "Marcar todos como vistos"; +$a->strings["Mark all seen"] = "Marcar todo como visto"; $a->strings["__ctx:noun__ Likes"] = "Me gusta"; $a->strings["__ctx:noun__ Dislikes"] = "No me gusta"; $a->strings["Close"] = "Cerrar"; @@ -477,11 +477,11 @@ $a->strings["Open the selected location in a different window or browser tab"] = $a->strings["User '%s' deleted"] = "El usuario '%s' ha sido eliminado"; $a->strings["Attachments:"] = "Ficheros adjuntos:"; $a->strings["\$Projectname event notification:"] = "Notificación de eventos de \$Projectname:"; -$a->strings["Logout"] = "Cerrar sesión"; -$a->strings["End this session"] = "Cerrar ésta sesión"; +$a->strings["Logout"] = "Finalizar sesión"; +$a->strings["End this session"] = "Finalizar esta sesión"; $a->strings["Home"] = "Inicio"; $a->strings["Your posts and conversations"] = "Sus entradas y conversaciones"; -$a->strings["View Profile"] = "Ver perfil"; +$a->strings["View Profile"] = "Ver el perfil"; $a->strings["Your profile page"] = "Su página de perfil"; $a->strings["Edit Profiles"] = "Editar perfiles"; $a->strings["Manage/Edit profiles"] = "Administrar/editar perfiles"; @@ -498,7 +498,7 @@ $a->strings["Webpages"] = "Páginas web"; $a->strings["Your webpages"] = "Sus páginas web"; $a->strings["Login"] = "Iniciar sesión"; $a->strings["Sign in"] = "Acceder"; -$a->strings["%s - click to logout"] = "%s - pulsar para cerrar sesión"; +$a->strings["%s - click to logout"] = "%s - pulsar para finalizar sesión"; $a->strings["Remote authentication"] = "Acceder desde su servidor"; $a->strings["Click to authenticate to your home hub"] = "Pulsar para identificarse en su servidor de inicio"; $a->strings["Home Page"] = "Página de inicio"; @@ -531,7 +531,7 @@ $a->strings["Events"] = "Eventos"; $a->strings["Event Calendar"] = "Calendario de eventos"; $a->strings["See all events"] = "Ver todos los eventos"; $a->strings["Mark all events seen"] = "Marcar todos los eventos como leidos"; -$a->strings["Channel Manager"] = "Administración del canal"; +$a->strings["Channel Manager"] = "Administración de canales"; $a->strings["Manage Your Channels"] = "Gestionar sus canales"; $a->strings["Account/Channel Settings"] = "Ajustes de cuenta/canales"; $a->strings["Admin"] = "Administrador"; @@ -605,11 +605,11 @@ $a->strings["Filed under:"] = "Archivado bajo:"; $a->strings["View in context"] = "Mostrar en su contexto"; $a->strings["remove"] = "eliminar"; $a->strings["Delete Selected Items"] = "Eliminar elementos seleccionados"; -$a->strings["View Source"] = "Ver origen"; +$a->strings["View Source"] = "Ver la fuente original de esta entrada"; $a->strings["Follow Thread"] = "Seguir el hilo"; $a->strings["View Status"] = "Ver estado"; $a->strings["View Photos"] = "Ver fotos"; -$a->strings["Matrix Activity"] = "Actividad en la red"; +$a->strings["Matrix Activity"] = "Actividad en la red de esta conexión"; $a->strings["Edit Contact"] = "Editar contacto"; $a->strings["Send PM"] = "Enviar Mensaje Privado"; $a->strings["Poke"] = "Dar un toque"; @@ -850,12 +850,12 @@ $a->strings["Lesbian"] = "Lesbiana"; $a->strings["No Preference"] = "Sin preferencias"; $a->strings["Bisexual"] = "Bisexual"; $a->strings["Autosexual"] = "Autosexual"; -$a->strings["Abstinent"] = "Abstemio"; +$a->strings["Abstinent"] = "Casto"; $a->strings["Virgin"] = "Virgen"; $a->strings["Deviant"] = "Fuera de lo común"; $a->strings["Fetish"] = "Fetichista"; -$a->strings["Oodles"] = "Montones"; -$a->strings["Nonsexual"] = "No sexual"; +$a->strings["Oodles"] = "Orgías"; +$a->strings["Nonsexual"] = "Asexual"; $a->strings["Single"] = "Soltero/a"; $a->strings["Lonely"] = "Solo/a"; $a->strings["Available"] = "Disponible"; @@ -872,7 +872,7 @@ $a->strings["Married"] = "Casado/a"; $a->strings["Imaginarily married"] = "Casado/a en sueños"; $a->strings["Partners"] = "Pareja"; $a->strings["Cohabiting"] = "Cohabitando"; -$a->strings["Common law"] = "Derecho común"; +$a->strings["Common law"] = "Matrimonio tradicional"; $a->strings["Happy"] = "Felíz"; $a->strings["Not looking"] = "No estoy buscando"; $a->strings["Swinger"] = "Infiel"; @@ -920,7 +920,7 @@ $a->strings["Invalid room specifier."] = "Especificador de sala no válido."; $a->strings["Room not found."] = "Sala no encontrada."; $a->strings["Room is full"] = "La sala está llena."; $a->strings["Image exceeds website size limit of %lu bytes"] = "La imagen es demasiado grande (%lu demás)"; -$a->strings["Image file is empty."] = "El fichero de imagen ésta vacío. "; +$a->strings["Image file is empty."] = "El fichero de imagen está vacío. "; $a->strings["Unable to process image"] = "No ha sido posible procesar la imagen"; $a->strings["Photo storage failed."] = "La foto no ha podido ser guardada."; $a->strings["Upload New Photos"] = "Subir nuevas fotos"; @@ -1076,7 +1076,7 @@ $a->strings["Collection created."] = "Colección creada."; $a->strings["Could not create collection."] = "No se puede crear colección."; $a->strings["Collection updated."] = "Colección actualizada."; $a->strings["Create a collection of channels."] = "Crear una colección de canales."; -$a->strings["Collection Name: "] = "Nombre de la Colección:"; +$a->strings["Collection Name: "] = "Nombre de la colección:"; $a->strings["Members are visible to other channels"] = "Los miembros son visibles para otros canales"; $a->strings["Collection removed."] = "Colección eliminada."; $a->strings["Unable to remove collection."] = "No ha sido posible de eliminar la colección."; @@ -1119,16 +1119,16 @@ $a->strings["Could not access contact record."] = "No se ha podido acceder al re $a->strings["Could not locate selected profile."] = "No se ha podido localizar el perfil seleccionado."; $a->strings["Connection updated."] = "Conexión actualizada."; $a->strings["Failed to update connection record."] = "Error al actualizar el registro de la conexión."; -$a->strings["Blocked"] = "Bloqueados"; -$a->strings["Ignored"] = "Ignorados"; -$a->strings["Hidden"] = "Ocultos"; -$a->strings["Archived"] = "Archivados"; +$a->strings["Blocked"] = "Bloqueadas"; +$a->strings["Ignored"] = "Ignoradas"; +$a->strings["Hidden"] = "Ocultas"; +$a->strings["Archived"] = "Archivadas"; $a->strings["Suggest new connections"] = "Sugerir nuevas conexiones"; $a->strings["New Connections"] = "Nuevas conexiones"; $a->strings["Show pending (new) connections"] = "Mostrar conexiones (nuevas) pendientes"; $a->strings["All Connections"] = "Todas las conexiones"; $a->strings["Show all connections"] = "Mostrar todas las conexiones"; -$a->strings["Unblocked"] = "Desbloqueados"; +$a->strings["Unblocked"] = "Desbloqueadas"; $a->strings["Only show unblocked connections"] = "Mostrar solo las conexiones desbloqueadas"; $a->strings["Only show blocked connections"] = "Mostrar solo las conexiones bloqueadas"; $a->strings["Only show ignored connections"] = "Mostrar solo conexiones ignoradas"; @@ -1198,9 +1198,9 @@ $a->strings["No more system notifications."] = "No hay más notificaciones del s $a->strings["System Notifications"] = "Notificaciones de sistema"; $a->strings["network"] = "red"; $a->strings["RSS"] = "RSS"; -$a->strings["Layout updated."] = "Diseño actualizado"; +$a->strings["Layout updated."] = "Formato actualizado"; $a->strings["Edit System Page Description"] = "Editor del Sistema de Descripción de Páginas"; -$a->strings["Layout not found."] = "Diseño no encontrado"; +$a->strings["Layout not found."] = "Formato no encontrado"; $a->strings["Module Name:"] = "Nombre del módulo:"; $a->strings["Layout Help"] = "Ayuda para el diseño de la página"; $a->strings["- select -"] = "- seleccionar -"; @@ -1226,9 +1226,9 @@ $a->strings["Make this hub my primary location"] = "Convertir este servidor en m $a->strings["Import existing posts if possible (experimental - limited by available memory"] = "Importar el contenido publicado si es posible (experimental - limitado por la memoria disponible"; $a->strings["This process may take several minutes to complete. Please submit the form only once and leave this page open until finished."] = "Este proceso puede tardar varios minutos en completarse. Por favor envíe el formulario una sola vez y mantenga esta página abierta hasta que termine."; $a->strings["Delete layout?"] = "¿Borrar formato?"; -$a->strings["Layout Description (Optional)"] = "Descripción del diseño (opcional)"; -$a->strings["Layout Name"] = "Nombre del diseño"; -$a->strings["Edit Layout"] = "Editar diseño"; +$a->strings["Layout Description (Optional)"] = "Descripción del formato gráfico (opcional)"; +$a->strings["Layout Name"] = "Nombre del formato"; +$a->strings["Edit Layout"] = "Modificar formato"; $a->strings["You must be logged in to see this page."] = "Debe haber iniciado sesión para poder ver esta página."; $a->strings["Room not found"] = "Sala no encontrada"; $a->strings["Leave Room"] = "Abandonar sala"; @@ -1663,17 +1663,18 @@ $a->strings["Destination URL"] = "Dirección de destino"; $a->strings["Mark hub permanently offline"] = "Marcar el servidor como permanentemente fuera de línea"; $a->strings["Empty queue for this hub"] = "Vaciar la cola para este servidor"; $a->strings["Last known contact"] = "Último contacto conocido"; -$a->strings["%s user blocked/unblocked"] = array( - 0 => "%s usuarios bloqueados/desbloqueados", - 1 => "%s de usuarios bloqueados/desbloqueados", +$a->strings["%s account blocked/unblocked"] = array( + 0 => "%s cuenta bloqueada/desbloqueada", + 1 => "%s cuenta bloqueada/desbloqueada", ); -$a->strings["%s user deleted"] = array( - 0 => "%s usuarios eliminados", - 1 => "%s usuarios eliminados", +$a->strings["%s account deleted"] = array( + 0 => "%s cuentas eliminadas", + 1 => "%s cuentas eliminadas", ); $a->strings["Account not found"] = "Cuenta no encontrada"; -$a->strings["User '%s' blocked"] = "Usuario %s bloqueado"; -$a->strings["User '%s' unblocked"] = "Usuario %s desbloqueado"; +$a->strings["Account '%s' deleted"] = "La cuenta '%s' ha sido eliminada"; +$a->strings["Account '%s' blocked"] = "La cuenta '%s' ha sido bloqueada"; +$a->strings["Account '%s' unblocked"] = "La cuenta '%s' ha sido desbloqueada"; $a->strings["Users"] = "Usuarios"; $a->strings["select all"] = "seleccionar todo"; $a->strings["User registrations waiting for confirm"] = "Registros de usuario en espera de aprobación"; @@ -1687,8 +1688,8 @@ $a->strings["Register date"] = "Fecha de registro"; $a->strings["Last login"] = "Último acceso"; $a->strings["Expires"] = "Caduca"; $a->strings["Service Class"] = "Clase de servicio"; -$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Los usuarios seleccionados serám eliminados!\\n\\nTodo lo que estos usuarios han publicado en este sitio se borrará de manera definitiva!\\n\\n¿Está seguro de querer hacerlo?"; -$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "El usuario {0} va a ser eliminado!\\n\\nTodo lo que este usuario ha publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?"; +$a->strings["Selected accounts will be deleted!\\n\\nEverything these accounts had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "¡Las cuentas seleccionadas van a ser eliminadas!\\n\\n¡Todo lo que estas cuentas han publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?"; +$a->strings["The account {0} will be deleted!\\n\\nEverything this account has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "¡La cuenta {0} va a ser eliminada!\\n\\n¡Todo lo que esta cuenta ha publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?"; $a->strings["%s channel censored/uncensored"] = array( 0 => "%s canales censurados/no censurados", 1 => "%s canales censurados/no censurados", @@ -1801,7 +1802,7 @@ $a->strings["Client key starts with"] = "La clave de cliente empieza por"; $a->strings["No name"] = "Sin nombre"; $a->strings["Remove authorization"] = "Eliminar autorización"; $a->strings["No feature settings configured"] = "No se ha establecido la configuración de características"; -$a->strings["Feature/Addon Settings"] = "Ajustes de la característica o complemento"; +$a->strings["Feature/Addon Settings"] = "Ajustes de la característica o el complemento"; $a->strings["Settings for the built-in Diaspora emulator"] = "Configuración para el emulador de Diaspora incorporado"; $a->strings["Allow any Diaspora member to comment on your public posts"] = "Permitir a cualquier miembro de Diaspora comentar en sus publicaciones públicas"; $a->strings["Enable the Diaspora protocol for this channel"] = "Activar el protocolo de Diaspora para este canal"; @@ -1840,7 +1841,7 @@ $a->strings["Channel page max height of content (in pixels)"] = "Altura máxima $a->strings["click to expand content exceeding this height"] = "Pulsa para expandir el contenido que excede esta altura"; $a->strings["Matrix page max height of content (in pixels)"] = "Altura máxima del contenido de la página de la red (en píxeles)"; $a->strings["Nobody except yourself"] = "Nadie excepto tú"; -$a->strings["Only those you specifically allow"] = "Solamente aquellos a los que usted permita específicamente"; +$a->strings["Only those you specifically allow"] = "Solo aquellos a los que usted permita explícitamente"; $a->strings["Approved connections"] = "Conexiones aprobadas"; $a->strings["Any connections"] = "Cualquier conexión"; $a->strings["Anybody on this website"] = "Cualquiera en este sitio web"; @@ -1975,7 +1976,7 @@ $a->strings["Set Affinity"] = "Ajustar Afinidad"; $a->strings["Set Profile"] = "Ajustar Perfil"; $a->strings["Set Affinity & Profile"] = "Ajustar Afinidad y Perfil"; $a->strings["Apply these permissions automatically"] = "Aplicar estos permisos automaticamente"; -$a->strings["This connection's address is"] = "Esta dirección de conexión es"; +$a->strings["This connection's address is"] = "La dirección de esta conexión es"; $a->strings["The permissions indicated on this page will be applied to all new connections."] = "Los permisos indicados en esta página serán aplicados en todas las nuevas conexiones."; $a->strings["Slide to adjust your degree of friendship"] = "Deslizar para ajustar el grado de amistad"; $a->strings["Slide to adjust your rating"] = "Deslizar para ajustar su valoración"; @@ -2030,7 +2031,7 @@ $a->strings["Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"A $a->strings["Choose a short nickname"] = "Elija un alias corto"; $a->strings["Your nickname will be used to create an easily remembered channel address (like an email address) which you can share with others."] = "Su alias podrá usarse para crear una dirección de canal fácilmente memorizable (como una dirección de correo electrónico) que puede ser compartido con otros."; $a->strings["Or <a href=\"import\">import an existing channel</a> from another location"] = "O <a href=\"import\">importar un canal existente</a> de otro lugar"; -$a->strings["Please choose a channel type (such as social networking or community forum) and privacy requirements so we can select the best permissions for you"] = "elija el tipo de canal (como red social o foro de comunidad) y la privacidad que requiera, así podremos seleccionar el mejor conjunto de permisos para usted"; +$a->strings["Please choose a channel type (such as social networking or community forum) and privacy requirements so we can select the best permissions for you"] = "Elija el tipo de canal (como red social o foro de comunidad) y la privacidad que requiera, así podremos seleccionar el mejor conjunto de permisos para usted"; $a->strings["Channel Type"] = "Tipo de canal"; $a->strings["Read more about roles"] = "Leer más sobre los roles"; $a->strings["App installed."] = "Aplicación instalada."; @@ -2049,7 +2050,7 @@ $a->strings["sent you a private message"] = "enviarle un mensaje privado"; $a->strings["added your channel"] = "se añadió su canal"; $a->strings["posted an event"] = "publicó un evento"; $a->strings["Comanche page description language help"] = "Página de ayuda del lenguaje de descripción de páginas (PDL) Comanche"; -$a->strings["Layout Description"] = "Descripción del formato gráfico"; +$a->strings["Layout Description"] = "Descripción del formato"; $a->strings["Download PDL file"] = "Descargar el fichero PDL"; $a->strings["Welcome to %s"] = "Bienvenido a %s"; $a->strings["Lorem Ipsum"] = "Lorem Ipsum"; diff --git a/view/nl/strings.php b/view/nl/strings.php index ce98c8a3d..37bb0c32b 100644 --- a/view/nl/strings.php +++ b/view/nl/strings.php @@ -1761,17 +1761,18 @@ $a->strings["Destination URL"] = "Doel-URL"; $a->strings["Mark hub permanently offline"] = "Hub als permanent offline markeren"; $a->strings["Empty queue for this hub"] = "Berichtenwachtrij voor deze hub legen"; $a->strings["Last known contact"] = "Voor het laatst contact"; -$a->strings["%s user blocked/unblocked"] = array( +$a->strings["%s account blocked/unblocked"] = array( 0 => "%s account geblokkeerd/gedeblokkeerd", 1 => "%s accounts geblokkeerd/gedeblokkeerd", ); -$a->strings["%s user deleted"] = array( +$a->strings["%s account deleted"] = array( 0 => "%s account verwijderd", 1 => "%s accounts verwijderd", ); $a->strings["Account not found"] = "Account niet gevonden"; -$a->strings["User '%s' blocked"] = "Lid '%s' geblokkeerd"; -$a->strings["User '%s' unblocked"] = "Account '%s' gedeblokkeerd"; +$a->strings["Account '%s' deleted"] = "Account '%s' verwijderd"; +$a->strings["Account '%s' blocked"] = "Account '%s' geblokkeerd"; +$a->strings["Account '%s' unblocked"] = "Account '%s' gedeblokkeerd"; $a->strings["Users"] = "Accounts"; $a->strings["select all"] = "alles selecteren"; $a->strings["User registrations waiting for confirm"] = "Accounts die op goedkeuring wachten"; @@ -1785,8 +1786,8 @@ $a->strings["Register date"] = "Geregistreerd"; $a->strings["Last login"] = "Laatste keer ingelogd"; $a->strings["Expires"] = "Verloopt"; $a->strings["Service Class"] = "Abonnementen"; -$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Geselecteerde accounts (met bijbehorende kanalen) worden verwijderd!\\n\\nAlles wat deze accounts op deze hub hebben gepubliceerd wordt definitief verwijderd!\\n\\Weet je het zeker?"; -$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Account {0} (met bijbehorende kanalen) wordt verwijderd !\\n\\nAlles wat dit account op deze hub heeft gepubliceerd wordt definitief verwijderd!\\n\\nWeet je het zeker?"; +$a->strings["Selected accounts will be deleted!\\n\\nEverything these accounts had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Geselecteerde accounts (met bijbehorende kanalen) worden verwijderd!\\n\\nAlles wat deze accounts op deze hub hebben gepubliceerd wordt definitief verwijderd!\\n\\Weet je het zeker?"; +$a->strings["The account {0} will be deleted!\\n\\nEverything this account has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Account {0} (met bijbehorende kanalen) wordt verwijderd !\\n\\nAlles wat dit account op deze hub heeft gepubliceerd wordt definitief verwijderd!\\n\\nWeet je het zeker?"; $a->strings["%s channel censored/uncensored"] = array( 0 => "%s kanaal gecensureerd/ongecensureerd", 1 => "%s kanalen gecensureerd/ongecensureerd", diff --git a/view/pdl/mod_help.pdl b/view/pdl/mod_help.pdl new file mode 100644 index 000000000..bafad3839 --- /dev/null +++ b/view/pdl/mod_help.pdl @@ -0,0 +1,3 @@ +[region=aside] +[widget=helpindex][/widget] +[/region] diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css index 702c7238e..25436db5f 100644 --- a/view/theme/redbasic/css/style.css +++ b/view/theme/redbasic/css/style.css @@ -2296,3 +2296,11 @@ nav .badge.mail-update:hover { /*.channels_ckbx, .pending_ckbx, .users_ckbx { margin-top: -5px !important; }*/ + +.help-searchlist { + list-style-type: none; +} + +.help-searchlist a { + font-size: 130%; +}
\ No newline at end of file |