diff options
author | friendica <info@friendica.com> | 2014-02-24 20:34:51 +1100 |
---|---|---|
committer | friendica <info@friendica.com> | 2014-02-24 20:34:51 +1100 |
commit | b2dc95f383c19b8a182875492f50ad5cb32256ab (patch) | |
tree | 300e73e91fe855b1d07c7110921455ef82c38b11 /doc | |
parent | 2ccff45221905981c6942f1f3064d477113e959e (diff) | |
parent | 5cc70f75a43438ad77542adf025d0ac3063b909b (diff) | |
download | volse-hubzilla-b2dc95f383c19b8a182875492f50ad5cb32256ab.tar.gz volse-hubzilla-b2dc95f383c19b8a182875492f50ad5cb32256ab.tar.bz2 volse-hubzilla-b2dc95f383c19b8a182875492f50ad5cb32256ab.zip |
Merge pull request #335 from beardy-unixer/master
Import doco from docs@friendicared.net
Diffstat (limited to 'doc')
39 files changed, 2507 insertions, 0 deletions
diff --git a/doc/about.bb b/doc/about.bb new file mode 100644 index 000000000..90992b925 --- /dev/null +++ b/doc/about.bb @@ -0,0 +1,24 @@ +[b]About[/b]
+
+The Red Matrix is a decentralized communication network, which aims to provide communication that is censorship-resistant, privacy-respecting, and thus free from the oppressive claws of contemporary corporate communication giants. These giants function primarily as spy networks for paying clients of all sorts and types, in addition to monopolizing and centralizing the Internet; a feature that was not part of the original and revolutionary goals that produced the World Wide Web.
+
+The Red Matrix is free and open source. It is designed to scale from a $35 Raspberry Pi, to top of the line AMD and Intel Xeon-powered multi-core enterprise servers. It can be used to support communication between a few individuals, or scale to many thousands and more.
+
+Red aims to be skill and resource agnostic. It is easy to use by everyday computer users, as well as by systems administrators and developers.
+
+How you use it depends on how you want to use it.
+
+It is written in the PHP scripting language, thus making it trivial to install on any hosting platform in use today. This includes self-hosting at home, at hosting providers such as [url=http://mediatemple.com/]Media Temple[/url] and [url=http://www.dreamhost.com/]Dreamhost[/url], or on virtual and dedicated servers, offered by the likes of [url=https://www.linode.com]Linode[/url], [url=http://greenqloud.com]GreenQloud[/url] or [url=https://aws.amazon.com]Amazon AWS[/url].
+
+In other words, the Red Matrix can run on any computing platform that comes with a web server, a MySQL-compatible database, and the PHP scripting language.
+
+Along the way, Red offers a number of unique goodies:
+
+[b][color= grey]Single-click user identification:[/color][/b] meaning you can access sites on the Red Matrix simply by clicking on links to remote sites. Authentication just happens automagically behind the scenes. Forget about remembering multiple user names with multiple passwords when accessing different sites online.
+
+[b][color= grey]Cloning:[/color][/b] of online identities. Your online presence no longer has to be tied to a single server, domain name or IP address. You can clone and import your identity to another server (or, a hub as servers are known in the Red Matrix). Now, should your primary hub go down, no worries, your contacts, posts, messages, and content will automagically continue to be available and accessible under your cloned identity.
+
+[b][color= grey]Privacy:[/color][/b] Red identities (Zot IDs) can be deleted, backed up/downloaded, and cloned. The user is in full control of their data. Should you decide to delete all your content and erase your Zot ID, all you have to do is click on a link and it's immediately deleted from the hub. No questions, no fuss.
+
+Return to the [url=[baseurl]/help/main]Main documentation page[/url]
+
diff --git a/doc/account_basics.bb b/doc/account_basics.bb new file mode 100644 index 000000000..902ff8bd0 --- /dev/null +++ b/doc/account_basics.bb @@ -0,0 +1,33 @@ +[b]Account Basics[/b]
+
+[b]Registration[/b]
+
+Not all Red Matrix sites allow open registration. If registration is allowed, you will see a "Register" link immediately below the login prompts on the site home page. Following this link will take you to the site Registration page. On some sites it may redirect you to another site which allow registrations. As all Red Matrix sites are linked, it does not matter where your account resides.
+
+[b]Your Email Address[/b]
+
+Please provide a valid email address. Your email address is never published. This address will be used to (optionally) send email notifications for incoming messages or items, and used to recover lost passwords.
+
+[b]Password[/b]
+
+Enter a password of your choice, and repeat it in the second box to ensure it was typed correctly. As the Red Matrix offers a decentralised identity, your account can log you in to many other websites.
+
+[b]Terms Of Service[/b]
+
+Click the link to read the site's terms of service. Once you've read them, tick the box in the register form to confirm.
+
+[b]Register[/b]
+
+Once you have provided the necessary details, click the 'Register' button. Some sites may require administrator approval before the registration is processed, and you will be alerted if this is the case. Please watch your email (including spam folders) for your registration approval.
+
+[b]Create a Channel[/b]
+
+Next, you will be presented with the "Add a channel" screen. Normally, your first channel will be one that represents you - so using your own name (or psuedonym) as the channel name is a good idea. The channel name should be thought of as a title, or brief description of your channel. The "choose a short nickname" box is similar to a "username" field. We will use whatever you enter here to create a channel address, which other people will use to connect to you, and you will use to log in to other sites. This looks like an email address, and takes the form nickname@siteyouregisteredat.xyz
+
+When your channel is created you will be taken straight to your settings page where you can define permissions, enable features, etc. All these things are covered in the appropriate section of the helpfiles.
+
+See Also
+
+[zrl=[baseurl]/help/permissions]Permissions[/zrl]
+[zrl=[baseurl]/help/profiles]Profiles[/zrl]
+[zrl=[baseurl]/help/remove_account]Remove Account[/zrl]
\ No newline at end of file diff --git a/doc/api_functions.bb b/doc/api_functions.bb new file mode 100644 index 000000000..13460c1b9 --- /dev/null +++ b/doc/api_functions.bb @@ -0,0 +1,130 @@ +[b]Red Twitter API[/b]
+
+The "basic" Red web API is based on the Twitter API, as this provides instant compatibility with a huge number of third-party clients and applications without requiring any code changes on their part. It is also a super-set of the StatusNet version of the Twitter API, as this also has existing wide support.
+
+Red has a lot more capability that isn't exposed in the Twitter interfaces or where we are forced to "dumb-down" the API functions to work with the primitive Twitter/StatusNet communications and privacy model. So we plan to extend the Twitter API in ways that will allow Red-specific clients to make full use of Red features without being crippled.
+
+A dedicated Red API is also being developed to work with native data structures and permissions and which do not require translating to different privacy and permission models and storage formats. This will be described in other documents. The prefix for all of the native endpoints is 'api/red'.
+
+Red provides multiple channels accesible via the same login account. With Red, any API function which requires authentication will accept a parameter &channel={channel_nickname} - and will select that channel and make it current before executing the API command. By default, the default channel associated with an account is selected.
+
+Red also provides an extended permission model. In the absence of any Red specific API calls to set permissions, they will be set to the default permissions settings which are associated with the current channel.
+
+Red will probably never be able to support the Twitter 'api/friendships' functions fully because Red is not a social network and has no concept of "friendships" - it only recognises permissions to do stuff (or not do stuff as the case may be).
+
+Legend: T= Twitter, S= StatusNet, F= Friendica, R= Red, ()=Not yet working, J= JSON only (XML formats deprecated)
+
+Twitter API compatible functions:
+
+ api/account/verify_credentials T,S,F,R
+ api/statuses/update T,S,F,R
+ api/users/show T,S,F,R
+ api/statuses/home_timeline T,S,F,R
+ api/statuses/friends_timeline T,S,F,R
+ api/statuses/public_timeline T,S,F,R
+ api/statuses/show T,S,F,R
+ api/statuses/retweet T,S,F,R
+ api/statuses/destroy T,S,F,(R)
+ api/statuses/mentions T,S,F,(R)
+ api/statuses/replies T,S,F,(R)
+ api/statuses/user_timeline T,S,F,(R)
+ api/favorites T,S,F,(R)
+ api/account/rate_limit_status T,S,F,R
+ api/help/test T,S,F,R
+ api/statuses/friends T,S,F,R
+ api/statuses/followers T,S,F,R
+ api/friends/ids T,S,F,R
+ api/followers/ids T,S,F,R
+ api/direct_messages/new T,S,F,(R)
+ api/direct_messages/conversation T,S,F,(R)
+ api/direct_messages/all T,S,F,(R)
+ api/direct_messages/sent T,S,F,(R)
+ api/direct_messages T,S,F,(R)
+ api/oauth/request_token T,S,F,R
+ api/oauth/access_token T,S,F,R
+
+Twitter API functions supported by StatusNet but not currently by Friendica or Red
+
+ api/favorites T,S
+ api/favorites/create T,S
+ api/favorites/destroy T,S
+ api/statuses/retweets_of_me T,S
+ api/friendships/create T,S
+ api/friendships/destroy T,S
+ api/friendships/exists T,S
+ api/friendships/show T,S
+ api/account/update_location T,S
+ api/account/update_profile_background_image T,S
+ api/account/update_profile_image T,S
+ api/blocks/create T,S
+ api/blocks/destroy T,S
+
+Twitter API functions not currently supported by StatusNet
+
+ api/statuses/retweeted_to_me T
+ api/statuses/retweeted_by_me T
+ api/direct_messages/destroy T
+ api/account/end_session T,(R)
+ api/account/update_delivery_device T
+ api/notifications/follow T
+ api/notifications/leave T
+ api/blocks/exists T
+ api/blocks/blocking T
+ api/lists T
+
+Statusnet compatible extensions to the Twitter API supported in both Friendica and Red
+
+ api/statusnet/version S,F,R
+ api/statusnet/config S,F,R
+
+Friendica API extensions to the Twitter API supported in both Friendica and Red
+
+ api/statuses/mediap F,R
+
+Red specific API extensions to the Twitter API not supported in Friendica
+
+ api/account/logout R
+ api/export/basic R,J
+ api/friendica/config R
+ api/red/config R
+ api/friendica/version R
+
+ api/red/version R
+
+ api/red/channel/export/basic R,J
+ api/red/channel/stream R,J (currently post only)
+ api/red/albums R,J
+ api/red/photos R,J (option album=xxxx)
+
+Red proposed API extensions to the Twitter API
+
+ api/statuses/edit (R),J
+ api/statuses/permissions (R),J
+ api/statuses/permissions/update (R),J
+ api/statuses/ids (R),J # search for existing message_id before importing a foreign post
+ api/files/show (R),J
+ api/files/destroy (R),J
+ api/files/update (R),J
+ api/files/permissions (R),J
+ api/files/permissions/update (R),J
+ api/pages/show (R),J
+ api/pages/destroy (R),J
+ api/pages/update (R),J
+ api/pages/permissions (R),J
+ api/pages/permissions/update (R),J
+ api/events/show (R),J
+ api/events/update (R),J
+ api/events/permissions (R),J
+ api/events/permissions/update (R),J
+ api/events/destroy (R),J
+ api/photos/show (R),J
+ api/photos/update (R),J
+ api/photos/permissions (R),J
+ api/photos/permissions/update (R),J
+ api/albums/destroy (R),J
+ api/albums/show (R),J
+ api/albums/update (R),J
+ api/albums/permissions (R),J
+ api/albums/permissions/update (R),J
+ api/albums/destroy (R),J
+ api/friends/permissions (R),J
\ No newline at end of file diff --git a/doc/campaign.bb b/doc/campaign.bb new file mode 100644 index 000000000..63a072d42 --- /dev/null +++ b/doc/campaign.bb @@ -0,0 +1,234 @@ +[b]Initial Indiegg pitch[/b]
+
+[b][color= grey][size=20]What have we done, and what we hope to achieve[/size][/color][/b]
+
+[b][color= grey][size=18]Single-click sign on, nomadic identity, censorship-resistance, privacy, self-hosting[/size][/color][/b]
+
+We started the Red Matrix project by asking ourselves a few questions:
+
+- Imagine if it was possible to just access the content of different web sites, without the need to enter usernames and passwords for every site. Such a feature would permit Single-Click user identification: the ability to access sites simply by clicking on links to remote sites.
+Authentication just happens automagically behind the scenes. Forget about remembering multiple user names with multiple passwords when accessing different sites online.
+
+We liked this idea and went ahead with coding it immediately. Today, single-click sign is in alpha state. It needs more love, which means a solid three months of full-time development efforts.
+
+- Think of your Facebook, Twitter, WordPress, or any other website where you currently have an account. Now imagine being able to clone your account, to make an exact duplicate of it (with all of your friends, posts and settings), then export your cloned account into another server that is part of this communication network. After you're done, both of your accounts are synced from the time they were cloned. It doesn't matter where you log in (at your original location, or where you imported your clone). You see the same content, the same friends, posts, and account settings.
+At that point, it is more appropriate to call your account an identity that is nomadic (it is not tied to one home, unless you choose to do so!).
+It's 2013, our online presence no longer has to be tied to a single server, domain name or IP address. We should be able to clone and import our identities to other servers. In such a network, it should only matter who you are, not where you are.
+
+We're very intrigued by the possibilities nomadic identities open up for freedom, censorship-resistance, and identity resilience. Consider the following scenarios:
+
+ -- Should a repressive government or corporation decide to delete your account, your cloned identity lives on, because it is located on another server, across the world, which is part of the same communication network. You can't be silenced!
+
+ -- What if there is a server meltdown, and your identity goes off line. No problem, you log into your clone and all is good.
+
+ -- Your server administrator can no longer afford to keep paying to support a free service (a labor love and principle, which all of us have participating in as system administrators of Friendica sites!). She notifies you that you must clone your account before the shutoff date. Rather than loose all your friends, and start from scratch by creating a new identity somewhere, you clone and move to another server.
+We feel this is especially helpful for the free web, where administrators of FOSS community sites are often faced with difficult financial decisions. Since many of them rely on donations, sometimes servers have to be taken offline, when costs become prohibitive for the brave DIY souls running those server. Nomadic identities should relieve some of the pressures associated with such situations.
+
+At the same time, we are also thinking of solutions that would make it possible for people running Red hubs to be financially sustainable. To that end, we're starting to implement service classes in our code, which would allow administrators to structure paid levels of service, if they choose to do so.
+
+Today, nomadic identity is currently in alpha state. It also needs more love, which means a solid three months of full-time development efforts.
+
+- Imagine a social network that is censorship-resistant, and privacy-respecting by design. It is not controlled by one mega-corporation, and where users cannot be easily censored by oppressive governments. So, in addition to nomadic identities, we are talking about decentralization, open source, freely software, that can run on any hardware that supports a database and a modern web browser. And we mean "any hardware", from a self-hosted $35 Raspberry Pi, to the very latest Intel Xeon and AMD Bulldozer-powered server behemoths.
+
+We've realized that privacy requires full control over content. We should be able to delete, backup and download all of our content, as well as associated account/identity information. To this end, we have already implemented the initial version of account export and backup.
+
+Concerned about pages and pages of posts from months and years past? The solution should be simple: visit your settings page, specify that all content older than 7 days, with the exception of starred posts, should be automatically deleted. Done, the clutter is gone! (Consider also the privacy and anti-mass surveillance implications of this feature. PRISM disclosures have hinted that three-letter spying agencies around the world are recording all internet traffic and storing it for a few days at a time. We feel that automatic post expiration becomes a rather useful feature in this context, and implementing it is one of our near future priorities.)
+
+[b][color= grey][size=18]The Affinity Slider and Access Control Lists[/size][/color][/b]
+
+- What if the permissions and access control lists that help secure modern operating systems were extended into a communication network that lived on the internet? This means somebody could log into this network from their home site, and with the simple click of a few buttons dynamically sort who can have access to their online content on a very fine level: from restricting others from seeing your latest blog post, to sharing your bookmarks with the world.
+
+We've coded the initial version of such a new feature. It is called the "Affinity Slider", and in our very-alpha user interface it looks like this.
+[img]https://friendicared.net/photo/b07b0262e3146325508b81a9d1ae4a1e-0.png[/img]
+
+{INSERT SCREENSHOT OF A MATRIX PAGE}
+
+Think of it as an easy way to filter content that you see, based on the degree of "closeness" to you. Move the slider to Friends, and only content coming from contacts you've tagged as friends is displayed on your home page. Uncluttering thousands of contacts, friends, RSS feeds, and other content should be a basic feature of modern communication on the web, but not at the expense of ease of use.
+
+In addition to the Affinity Slider, we also have the ACL (Access Control List). Say you want to share something with only 5 of your contacts (a blog, two friends from college, and two forums). You click on the padlock, choose the recipients, and that's it. Only those identities will recieve their posts. Furthermore, the post will be encrypted via PKI (pulic key encryption) to help maintain privacy. In the age of PRISM, we don't know all the details on what's safe out there, but we still think that privacy by design should be automatically present, invisible to the user, and easy to use.
+Attaching permissions to any data that lives on this network, potentially solves a great many headaches, while achieving simplicity in communication.
+
+Think of it this way: the internet is nothing, but a bunch of permissions and a folder of data. You, the user controls the permissions and thus the data that is relevant to you.
+
+[b][color= grey][size=20]The Matrix is Born![/size][/color][/b]
+
+After asking and striving to answer a number of such questions, we realized that we were imagining a general purpose communication network with a number of unique, and potentially game-changing, features. We called it the Red Matrix and started thinking of it as an over-lay on top of the internet as it exists today; an operating system re-invented as a communication network, with its own permissions, access control lists, protocol, connectors to others services, and open-ended possibilities via its API. The sum of the matrix is greater than it's parts. We're not building website, but a way for websites to link together and grow into something that is unique and ever-changing, with autonomy and privacy.
+
+It's a lot of work, for anyone. So far, we've got a team of a handful of volunteers, code geeks, brave early adopters, system administrators and other good people, willing to give the project a shot. We're motivated by our commitment to a free web, where privacy is built-in, and corporations don't have a stranglehold on our daily communication.
+
+We need your help to finish it and release it to the world!
+
+[b][color= grey][size=20]What have we written so far[/size][/color][/b]
+
+As of the today, the Red Matrix is in developer preview (alpha) state. It is not ready for everyday use, but some of the initial set of core features are implemented (again, in alpha state). These include:
+
+- Zot, the protocol powering the matrix
+- Single-signon logins.
+- Nomadic identities
+- Basic content manipulation: creation, deletion, rudimentary handling of photos, and media files
+- A bare-bones outline of the API and user documentation.
+
+
+[b][color= grey][size=20]Our TO-DO List[/size][/color][/b]
+
+However, in addition to finishing and polishing the above, there are a number of features that have to implemented to make the Red Matrix ready for daily use. If we meet our fundraising goal, we hope to dive into the following road map, by order of priority:
+
+- A professionally designed user interface (UI), interface that is adaptive to any user level, from end users who want to use the Matrix as a social network, to tinkerers who will put together a customized blog using Comanche, to hackers who will develop and extend the matrix using a built-in code editor, that hooks to the API and the git.
+
+- Comanche, our new markup language, similar to BBCode, with which to create elaborate and complex web pages by assembling them from a series of components - some of which are pre-built and others which can be defined on the fly. You can read more about it on our github wiki: https://github.com/friendica/red/wiki/Comanche
+
+- A unique help system that lives in the matrix, but is not based on the principles of a search engine. We have some interesting ideas about decentralizing help documentation, without going down the road of distributed search engines. Here's a hint: We shouldn't be searching at all, we should just be filtering what's already there in new, and cunning ways.
+
+- An appropriate logo, along with professionally done documentation system, both for our API, as well as users.
+
+- WordPress-like single button software upgrades
+
+- A built-in development environment, using an integrated web-based code editor such as Ace9
+
+[b][color= grey][size=20]What will the money be used for[/size][/color][/b]
+
+If we raise our targeted amount of funds, we plan to use it as follows:
+
+1) Fund 6 months {OR WHATEVER} of full time work for our current core developers, Mike, Thomas, and Tobias {ANYONE ELSE?]
+
+2) Pay a professional web developer to design an kick ass reference theme, along with a project logo.
+
+3) {WHAT ELSE?}
+
+[b][color= grey][size=20]Deadlines[/size][/color][/b]
+
+[b]March, 2014: Red Matrix Beta with the following features[/b]
+
+- {LIST FEATURES}
+
+[b][color= grey][size=20]Who We Are[/size][/color][/b]
+
+Mike: {FILL IN BIO, reference Friendica, etc.}
+
+Thomas: {bio blurb}
+
+Tobias: {bio blurb}
+
+Arto: {documentation, etc.}
+
+{WHO ELSE? WE NEED A TEAM, AT LEAST 3-4 PEOPLE}
+
+[b][color= grey][size=20]What Do I Get as a Supporter?[/size][/color][/b]
+
+Our ability to reach 1.0 stable release depends on your generosity and support. We appreciate your help, regardless of the amount! Here's what we're thinking as far as different contribution levels go:
+
+[b]$1: {CATCHY TAGLINE}[/b]
+
+We'll list your name on our initial supporters list, a Hall of Fame of the matrix!
+
+[b]$5:[/b]
+
+[b]$10: [/b]
+
+[b]$16: [/b]
+
+You get one of your Red Matrix t-shirts, as well as our undying gratitude.
+
+[b]$32: [/b]
+
+[b]$64 [/b]
+
+[b]128 [/b]
+
+[b]$256: [/b]
+
+[b]$512: [/b]
+
+[b]$1024 [/b]
+
+[b]$2048[/b]
+
+Each contributor at this level gets their own Red Matrix virtual private server, installed, hosted and supported by us for a period of 1 year.
+
+[b][color= grey][size=20]Why are we so excited about the Red Matrix?[/size][/color][/b]
+
+{SOMETHING ABOUT THE POTENTIAL IMPACT OF RED, ITS INNOVATIONS, ETC>
+
+[b][color= grey][size=20]Other Ways to Help[/size][/color][/b]
+
+We're a handful of volunteers, and we understand that not everyone can contribute by donating money. There are many other ways you can in getting the Matrix to version 1.0!
+
+First, you can checkout our source code on github: https://github.com/friendica/red
+
+Maybe you can dive in and help us out with some development.
+
+Second, you can install the current developer preview on a server and start compiling bug reports.
+
+Third, register at one of the public alpha Red hubs, and get a feel for what Red is trying to do!
+
+Perhaps you're good at writing and documenting stuff. Grab an account at one of the public alphas and give us a hand.
+
+[b][color= grey][size=20]Frequently Asked Questions[/size][/color][/b]
+
+[b]1. Is Red a social network?[/b]
+
+The Red Matrix is not a social network. We're thinking of it as a general purpose communication network, with sharing, and public/private communications built into the matrix.
+
+[b]2. What is the difference between Red and Friendica?[/b]
+
+What's the difference between a passport, and a postcard?
+
+Friendica is really, really good at sending postcards. It can do all sorts of things with postcards. It can send them to your friends. It can send them to people you don't know. It can put them in an envelope and send them privately. It can run them through a photocopier and plaster them all over the internet. It can even take postcards in one language and convert them to many others so your friends who speak a different language can read them.
+
+What Friendica can't do, is wave a postcard at somebody and expect them to believe that holding this postcard prove you are who you say you are. Sure, if you've been sending somebody postcards, they might accept that it is you in the picture, but somebody who has never heard of you will not accept ownership of a postcard as proof of identity.
+
+The Red Matrix offers a passport.
+
+You can still use it to send postcards. At the same time, when you wave your passport at somebody, they do accept it as proof of identity. No longer do you need to register at every single site you use. You already have an account - it's just not necessarily at our site - so we'll ask to see your passport instead.
+
+Once you've proven your identity, a Red hub lets you use our services, as though you'd registered with directly, and we'd verified your credentials as would have happened in the olden days. These resources can, of course, be anything at all.
+
+[b]2. Why did you choose PHP, instead of Ruby or Python?[/b]
+
+The reference implementation is in PHP. We chose PHP, because it is available everywhere, and is easily configurable. We understand the debates between proponents and opponents of PHP, Ruby and Python. Nothing prevents implementations of Zot and the matrix in those languages. In fact, people on the matrix have already started developing a version of Red in Python [SOURCE?], and there is talk about future implementations in C (aiming for blazing native performance) and Java. It's free and open source, so we feel it's only a matter of time, once Red is initially completed.
+
+[b]4. Other than PHP, what other technology does Red use?[/b]
+
+We use MySQL as our database (this include any forks such as, MariaDB or Percona), and any modern webserver (Apache, nginx, etc.).
+
+[b]5. How is the Affinity Slider different from Mozilla's Persona?[/b]
+{COMPLETE}
+
+[b]6. Does the Red Matrix use encryption? Details please![/b]
+
+Yes, we do our best to use free and open source encryption libraries to help achieve privacy from general, mass surveillance.
+
+Communication between web browsers and Red hubs is encrypted using SSL certificates.
+
+Private communication on the matrix is protected by AES symmetric encryption, which is itself protected by RSA PKI (public key encryption). By default, we use AES-256-CBC, and our RSA keys are set to 4096-bits.
+
+For more info on our initial implementation of encrypted communication, check out our source code at Github: https://github.com/friendica/red/blob/master/include/crypto.php
+
+[b]7. What do you mean by decentralization? [/b]
+
+
+[b]8. Can I build my own website with in the Red Matrix?[/b]
+
+Yes. The short explanation: We've got this spiffy idea we're calling "Comanche", which will allow non-programmers to build complete custom websites, and any such website will be able to connect to any other website or channel in the matrix. The goal of Comanche is to hide the technical complexities of communicating in the matrix, while encouraging people to use their creativity and put together their own unique presence on the matrix.
+
+The longer explanation: Comanche is a markup language, similar to bbcode, with which to create elaborate and complex web pages by assembling them from a series of components - some of which are pre-built and others which can be defined on the fly. Comanche uses a Page Description Language file (".pdl", pronounced "puddle") to create these pages. Bbcode is not a requirement; an XML PDL file could also be used. The tag delimiters would be different. Usage is the same.
+
+Additional information is available on our Github project wiki: https://github.com/friendica/red/wiki/Comanche
+
+Comanche is another one of our priorities for the next six months.
+
+[b]9. Where can I see some technical description of Zot?[/b]
+
+Our github wiki contains a number of high-level and technical descriptions of Zot, Comanche, and Red in general: https://github.com/friendica/red/wiki
+
+[b]10. What happens if you raise more than {TARGETED NUMBER}?[/b]
+
+Raising more than our initial goal of funds, will speed up our development efforts. More developers will be able to take time off from other jobs, and concentrate efforts on finishing Red.
+
+[b]11 Can I make a contribution via Bitcoin?[/b]
+
+{YES/NO}
+
+[b]12. I have additional Questions[/]
+
+Awesome. We'd be more than happy to chat. You can find us {HERE}
\ No newline at end of file diff --git a/doc/channels.bb b/doc/channels.bb new file mode 100644 index 000000000..3be1211a6 --- /dev/null +++ b/doc/channels.bb @@ -0,0 +1,27 @@ +[b]Channels[/b]
+
+Channels are simply collections of content stored in one place. A channel can represent anything. It could represent you, a website, a forum, photo albums, anything. For most people, their first channel with be "Me".
+
+The most important features for a channel that represents "me" are:
+
+Secure and private "spam free" communications
+
+Identity and "single-signon" across the entire network
+
+Privacy controls and permissions which extend to the entire network
+
+Directory services (like a phone book)
+
+In short, a channel that represents yourself is "me, on the internet".
+
+You will be required to create your first channel as part of the sign up process. You can also create additonal channels from the "Select channel" link.
+
+You will be asked to provide a channel name, and a short nick name. For a channel that represents yourself, it is a good idea to use your real name here to ensure your friends can find you, and connect to your channel. The short nickname will be used to generate a "webbie". This is a bit like a username, and will look like an email address, taking the form nickname@domain. You should put a little thought into what you want to use here. Imagine somebody asking for your webbie and having to tell them it is "llamas-are_kewl.123". "llamasarecool" would be a much better choice.
+
+Once you have created your channel, you will be taken to the settings page, where you can configure your channel, and set your default permissions.
+
+Once you have done this, your channel is ready to use. At [observer.url] you will find your channel "stream". This is where your recent activity will appear, in reverse chronological order. If you post in the box marked "share", the entry will appear at the top of your stream. You will also find links to all the other communication areas for this channel here. The "About" tab contains your "profile", the photos page contain photo albums, and the events page contains events share by both yourself and your contacts.
+
+The "Matrix" page contains all recent posts from across the matrix, again in reverse chronologial order. The exact posts that appear here depend largely on your permissions. At their most permissive, you will receive posts from complete strangers. At the other end of the scale, you may see posts from only your friends - or if you're feeling really anti-social, only your own posts.
+
+As mentioned at the start, many other kinds of channel are possible, however, the creation procedure is the same. The difference between channels lies primarily in the permissions assigned. For example, a channel for sharing documents with colleagues at work would probably want more permissive settings for "Can write to my "public" file storage" than a personal account. For more information, see the permissions section.
\ No newline at end of file diff --git a/doc/checking_account_quota_usage.bb b/doc/checking_account_quota_usage.bb new file mode 100644 index 000000000..198b15bfd --- /dev/null +++ b/doc/checking_account_quota_usage.bb @@ -0,0 +1,26 @@ +[b]Checking your account quota usage (service limits usage)[/b]
+
+Your hub might implement service class limits, assigning limits to the total size of file, photo, channels, top-level posts, etc., that can be created by an account holder for a specific service level.
+
+Here's how you can quickly check how much of your assigned quota you're currently using:
+
+[b][color= grey]Check file storage quota levels[/color][/b]
+Visit the following URL in your browser:
+[code]
+https://{Red-domain}/filestorage/{your_username}
+[/code]
+
+Example:
+[code]https://friendicared.net/filestorage/test2
+[/code]
+
+[b][color= grey]Check uploaded photos storage quota levels[/color][/b]
+[code]
+https://{Red-domain}photos/{your_username}/upload/
+[/code]
+
+Example:
+[code]https://friendicared.net/photos/test2/upload/
+[/code]
+
+Return to the [url=[baseurl]/help/main]Main documentation page[/url]
\ No newline at end of file diff --git a/doc/cloud.bb b/doc/cloud.bb new file mode 100644 index 000000000..8997b88fe --- /dev/null +++ b/doc/cloud.bb @@ -0,0 +1,25 @@ +[b]Personal Cloud Storage[/b]
+
+The Red Matrix provides an ability to store privately and/or share arbitrary files with friends.
+
+You may either upload files from your computer into your storage area, or copy them directly from the operating system using the WebDAV protocol.
+
+On many public servers there may be limits on disk usage.
+
+[b]File Attachments[/b]
+
+The quickest and easiest way to share files is through file attachments. In the row of icons below the status post editor is a tool to upload attachments. Click the tool, select a file and submit. After the file is uploaded, you will see an attachment code placed inside the text region. Do not edit this line or it may break the ability for your friends to see the attachment. You can use the post permissions dialogue box or privacy hashtags to restrict the visibility of the file - which will be set to match the permissions of the post your are sending.
+
+To delete attachments or change the permissions on the stored files, visit [observer.baseurl]/filestorage/{{username}}" replacing {{username}} with the nickname you provided during channel creation.
+
+[b]Web Access[/b]
+
+Your files are visible on the web at the location "cloud/{{username}}" to anybody who is allowed to view them. If the viewer has sufficient privileges, they may also have the ability to create new files and folders/directories.
+
+[b]WebDAV access[/b]
+
+See: [zrl=[baseurl]/help/cloud_desktop_clients]Cloud Desktop Clients[/zrl]
+
+[b]Permissions[/b]
+
+When using WebDAV, the file is created with your channel's default file permissions and this cannot be changed from within the operating system. It also may not be as restrictive as you would like. What we've found is that the preferred method of making files private is to first create folders or directories; then visit "filestorage/{{username}}"; select the directory and change the permissions. Do this before you put anything into the directory. The directory permissions take precedence so you can then put files or other folders into that container and they will be protected from unwanted viewers by the directory permissions. It is common for folks to create a "personal" or "private" folder which is restricted to themselves. You can use this as a personal cloud to store anything from anywhere on the web or any computer and it is protected from others. You might also create folders for "family" and "friends" with permission granted to appropriate collections of channels.
\ No newline at end of file diff --git a/doc/cloud_desktop_clients.bb b/doc/cloud_desktop_clients.bb new file mode 100644 index 000000000..b715678d9 --- /dev/null +++ b/doc/cloud_desktop_clients.bb @@ -0,0 +1,16 @@ +[b]Cloud Desktop Clients[/b]
+
+[b]Windows Clients[/b]
+
+[li][zrl=[baseurl]/help/dav_windows]Windows Internal Client[/zrl][/li]
+
+
+[b]Linux Clients[/b]
+
+[li][zrl=[baseurl]/help/dav_mount]Command Line as a Filesystem[/zrl][/li]
+[li][zrl=[baseurl]/help/dav_dolphin]Dolphin[/zrl][/li]
+[li][zrl=[baseurl]/help/dav_konqueror]Konqueror[/zrl][/li]
+[li][zrl=[baseurl]/help/dav_nautilus]Nautilus[/zrl][/li]
+[li][zrl=[baseurl]/help/dav_nemo]Nemo[/zrl][/li]
+
+Return to the [zrl=[baseurl]/help/main]Main documentation page[/zrl]
\ No newline at end of file diff --git a/doc/comanche.bb b/doc/comanche.bb new file mode 100644 index 000000000..ea2069b35 --- /dev/null +++ b/doc/comanche.bb @@ -0,0 +1,146 @@ +[b]Comanche Page Description Language[/b]
+
+Comanche is a markup language similar to bbcode with which to create elaborate and complex web pages by assembling them from a series of components - some of which are pre-built and others which can be defined on the fly. Comanche uses a Page Decription Language to create these pages.
+
+Comanche primarily chooses what content will appear in various regions of the page. The various regions have names and these names can change depending on what layout template you choose.
+
+Currently there are two layout templates, unless your site provides additional layouts (TODO list all templates)
+
+[code]
+ default
+
+ The default template defines a "nav" region across the top, "aside" as a fixed width sidebar,
+ "content" for the main content region, and "footer" for a page footer.
+
+
+ full
+
+ The full template defines the same as the default template with the exception that there is no "aside" region.
+[/code]
+
+To choose a layout template, use the 'layout' tag.
+
+[code]
+ [layout]full[/layout]
+[/code]
+
+The default template will be used if no other template is specified. The template can use any names it desires for content regions. You will be using 'region' tags to decide what content to place in the respective regions.
+
+
+Two "macros" have been defined for your use.
+[code]
+ $nav - replaced with the site navigation bar content.
+ $content - replaced with the main page content.
+[/code]
+
+By default, $nav is placed in the "nav" page region and $content is placed in the "content" region. You only need to use these macros if you wish to re-arrange where these items appear, either to change the order or to move them to other regions.
+
+
+To select a theme for your page, use the 'theme' tag.
+[code]
+ [theme]apw[/theme]
+[/code]
+This will select the theme named "apw". By default your channel's preferred theme will be used.
+
+
+[b]Regions[/b]
+
+Each region has a name, as noted above. You will specify the region of interest using a 'region' tag, which includes the name. Any content you wish placed in this region should be placed between the opening region tag and the closing tag.
+
+[code]
+ [region=aside]....content goes here....[/region]
+ [region=nav]....content goes here....[/region]
+[/code]
+
+
+[b]Menus and Blocks[/b]
+
+Your webpage creation tools allow you to create menus and blocks, in addition to page content. These provide a chunk of existing content to be placed in whatever regions and whatever order you specify. Each of these has a name which you define when the menu or block is created.
+[code]
+ [menu]mymenu[/menu]
+[/code]
+This places the menu called "mymenu" at this location on the page, which must be inside a region.
+[code]
+ [block]contributors[/block]
+[/code]
+This places a block named "contributors" in this region.
+
+
+[b]Widgets[/b]
+
+Widgets are executable apps provided by the system which you can place on your page. Some widgets take arguments which allows you to tailor the widget to your purpose. (TODO: list available widgets and arguments). The base system provides
+[code]
+ profile - widget which duplicates the profile sidebar of your channel page. This widget takes no arguments
+ tagcloud - provides a tag cloud of categories
+ count - maximum number of category tags to list
+[/code]
+
+
+Widgets and arguments are specified with the 'widget' and 'arg' tags.
+[code]
+ [widget=recent_visitors][arg=count]24[/arg][/widget]
+[/code]
+
+This loads the "recent_visitors" widget and supplies it with the argument "count" set to "24".
+
+
+[b]Comments[/b]
+
+The 'comment' tag is used to delimit comments. These comments will not appear on the rendered page.
+
+[code]
+ [comment]This is a comment[/comment]
+[/code]
+
+
+[b]Complex Example[/b]
+
+[code]
+ [comment]use an existing page template which provides a banner region plus 3 columns beneath it[/comment]
+
+ [layout]3-column-with-header[/layout]
+
+ [comment]Use the "darknight" theme[/comment]
+
+ [theme]darkknight[/theme]
+
+ [comment]Use the existing site navigation menu[/comment]
+
+ [region=nav]$nav[/region]
+
+ [region=side]
+
+ [comment]Use my chosen menu and a couple of widgets[/comment]
+
+ [menu]myfavouritemenu[/menu]
+
+ [widget=recent_visitors]
+ [arg=count]24[/arg]
+ [arg=names_only]1[/arg]
+ [/widget]
+
+ [widget=tagcloud][/widget]
+ [block]donate[/block]
+
+ [/region]
+
+
+
+ [region=middle]
+
+ [comment]Show the normal page content[/comment]
+
+ $content
+
+ [/region]
+
+
+
+ [region=right]
+
+ [comment]Show my condensed channel "wall" feed and allow interaction if the observer is allowed to interact[/comment]
+
+ [widget]channel[/widget]
+
+ [/region]
+[/code]
\ No newline at end of file diff --git a/doc/connecting_to_channels.bb b/doc/connecting_to_channels.bb new file mode 100644 index 000000000..b81abc7bd --- /dev/null +++ b/doc/connecting_to_channels.bb @@ -0,0 +1,17 @@ +[b]Connecting To Channels[/b]
+
+Connections in the Red Matrix can take on a great many different meanings. But let's keep it simple, you want to be friends with somebody like you are familiar with from social networking. How do you do it?
+
+First, you need to find some channels to connect to. There are two primary ways of doing this. Firstly, setting the "Can send me their channel stream and posts" permission to "Anybody in this network" will bring posts from complete strangers to your matrix. This will give you a lot of public content and should hopefully help you find interesting, entertaing people, forums, and channels.
+
+The next thing you can do is look at the Directory. The directory is available on every Red Matrix website which means searching from your own site will bring in results from the entire network. You can search by name, interest, location and keyword. This is incomplete, so we'll improve this paragraph later.
+
+To connect with other Red Matrix channels:
+
+Visit their profile by clicking their photograph in the directory, matrix, or comments, and it will open their channel home page in the channel viewer. At the left hand side of the screen, you will usually see a link called "connect". Click it, and you're done. Depending on the settings of the channel you are connecting to, you may need to wait for them to approve your connection, but no further action is needed on your part. Once you've initiated the connection, you will be taken to the connection editor. This allows you to assign specific permissions for this channel. If you don't allow any permissions, communication will be very limited. There are some quick links which you can use to avoid setting individual permissions. To provide a social network environment, "Full Sharing" is recommended. You may review the settings that are applied with the quick links to ensure they are suitable for the channel you are connecting with and adjust if necessary. Then scroll to the bottom of the page and click "Submit".
+
+You may also connect with any channel by visiting the "Connections" page of your site or the Directory and typing their "webbie" into the "Add New Connection" field. Use this method if somebody tells you their webbie and you wish to connect with them. A webbie looks like an email address; for example "bob@example.com". The process is the same as connecting via the "Connect" button - you will then be taken to the connection editor to set permissions.
+
+[b]Premium Channels[/b]
+
+Some channels are designated "Premium Channels" and may require some action on your part before a connection can be established. The Connect button will for these channels will take you to a page which lists in detail what terms the channel owner has set. If the terms are accepted, the connection will then proceed normally. In some cases, such as with celebrities and world-reknowned publishers, this may involve payment. If you do not agree to the terms, the connection will not proceed, or it may proceed but with reduced permissions allowed on your interactions with that channel.
\ No newline at end of file diff --git a/doc/dav_dolphin.bb b/doc/dav_dolphin.bb new file mode 100644 index 000000000..4429303d3 --- /dev/null +++ b/doc/dav_dolphin.bb @@ -0,0 +1,9 @@ +[b]Using The Cloud - Dolphin[/b]
+
+Visit webdavs://example.com/cloud where "example.com" is the URL of your hub.
+
+When prompted for a username and password, enter your username (the first part of your webbie - no @ or domain name) and password for your normal account.
+
+Note, if you are already logged in to the web interface via Konqueror, you will not be prompted for further authentication.
+
+Return to the [zrl=[baseurl]/help/main]Main documentation page[/zrl]
\ No newline at end of file diff --git a/doc/dav_konqueror.bb b/doc/dav_konqueror.bb new file mode 100644 index 000000000..f44c11fb2 --- /dev/null +++ b/doc/dav_konqueror.bb @@ -0,0 +1,11 @@ +[b]Using The Cloud - Konqueror[/b]
+
+Simply visit webdavs://example.com/cloud after logging in to your hub, where "example.com" is the URL of your hub.
+
+No further authentication is required if you are logged in to your hub in the normal manner.
+
+Additionally, if one has authenticated at a different hub during their normal browser session, your identity will be passed to the cloud for these hubs too - meaning you can access any private files on any server, as long as you have permissions to see them, as long as you have visited that site earlier in your session.
+
+This functionality is normally restricted to the web interface, and is not available to any desktop software other than KDE.
+
+Return to the [zrl=[baseurl]/help/main]Main documentation page[/zrl]
\ No newline at end of file diff --git a/doc/dav_mount.bb b/doc/dav_mount.bb new file mode 100644 index 000000000..f86e2a6e5 --- /dev/null +++ b/doc/dav_mount.bb @@ -0,0 +1,63 @@ +[b]Mounting As A Filesystem[/b]
+
+To install your cloud directory as a filesystem, you first need davfs2 installed. 99% of the time, this will be included in your distributions repositories. In Debian
+
+[code]apt-get install davfs2[/code]
+
+If you want to let normal users mount the filesystem
+
+[code] dpkg-reconfigure davfs2[/code]
+
+and select "yes" at the prompt.
+
+Now you need to add any user you want to be able to mount dav to the davfs2 group
+
+[code]usermod -aG davfs2 <DesktopUser>[/code]
+
+Edit /etc/fstab
+
+[code]nano /etc/fstab[/code]
+
+ to include your cloud directory by adding
+
+[code]
+example.com/cloud/ /mount/point davfs user,noauto,uid=<DesktopUser>,file_mode=600,dir_mode=700 0 1
+[/code]
+
+Where example.com is the URL of your hub, /mount/point is the location you want to mount the cloud, and <DesktopUser> is the user you log in to one your computer. Note that if you are mounting as a normal user (not root) the mount point must be in your home directory.
+
+For example, if I wanted to mount my cloud to a directory called 'cloud' in my home directory, and my username was bob, my fstab would be
+
+[code]example.com/cloud/ /home/bob/cloud davfs user,noauto,uid=bob,file_mode=600,dir_mode=700 0 1[/code]
+
+Now, create the mount point.
+
+[code]mkdir /home/bob/cloud[/code]
+
+and also create a directory file to store your credentials
+
+[code]mkdir /home/bob/.davfs2[/code]
+
+Create a file called 'secrets'
+
+[code]nano /home/bob/.davfs2/secrets[/code]
+
+and add your cloud login credentials
+
+[code]
+example.com/cloud <username> <password>
+[/code]
+
+Where <username> and <password> are the username and password [i]for your hub[/i].
+
+Don't let this file be writeable by anyone who doesn't need it with
+
+[code]chmod 600 /home/bob/.davfs2/secrets[/code]
+
+Finally, mount the drive.
+
+[code]mount example.com/cloud[/code]
+
+You can now find your cloud at /home/bob/cloud and use it as though it were part of your local filesystem - even if the applications you are using have no dav support themselves.
+
+Return to the [zrl=[baseurl]/help/main]Main documentation page[/zrl]
\ No newline at end of file diff --git a/doc/dav_nautilus.bb b/doc/dav_nautilus.bb new file mode 100644 index 000000000..d3c478aa0 --- /dev/null +++ b/doc/dav_nautilus.bb @@ -0,0 +1,9 @@ +[b]Using The Cloud - Nautilus[/b]
+
+1. Open a File browsing window (that's Nautilus)
+2. Select File > Connect to server from the menu
+3. Type davs://<domain_name>/cloud/<your_username> and click Connect
+4. You will be prompted for your username (same as above) and password
+5. Your personal DAV directory will be shown in the window
+
+Return to the [zrl=[baseurl]/help/main]Main documentation page[/zrl]
\ No newline at end of file diff --git a/doc/dav_nemo.bb b/doc/dav_nemo.bb new file mode 100644 index 000000000..a2553c1d5 --- /dev/null +++ b/doc/dav_nemo.bb @@ -0,0 +1,19 @@ +[b]Using The Cloud - Nemo[/b]
+
+For (file browser) Nemo 1.8.2 under Linux Mint 15, Cinnamon 1.8.8. Nemo ist the standard file browser there.
+
+1st way
+type "davs://yourusername@friendicared.net/cloud" in the address bar
+
+2nd way
+Menu > file > connect to server
+Fill the dialog
+- Server: friendicared.net
+- Type: Secure WebDAV (https)
+- Folder: /cloud
+- Username: yourusername
+- Passwort: yourpasswort
+
+Once open you can set a bookmark.
+
+Return to the [zrl=[baseurl]/help/main]Main documentation page[/zrl]
\ No newline at end of file diff --git a/doc/dav_windows.bb b/doc/dav_windows.bb new file mode 100644 index 000000000..600944b68 --- /dev/null +++ b/doc/dav_windows.bb @@ -0,0 +1,11 @@ +[b]Using The Cloud - Windows Internal Client[/b]
+
+RedDav using Windows 7 graphical user interface wizard:
+1. Left-click the Start-button to open the start menu.
+2. Right-click the My computer icon to access its menu.
+3. Left-click Map network drive... to open the connection dialog wizard.
+4. Type #^[url=https://example.net/cloud/your_user_name]https://example.net/cloud/your_user_name[/url] in the textbox and click the Complete button where "example.net" is the URL of your hub.
+5. Type your Red account's user name. IMPORTANT - NO at-sign or domain name.
+6. Type your Red password
+
+Return to the [zrl=[baseurl]/help/main]Main documentation page[/zrl]
\ No newline at end of file diff --git a/doc/debian_install.bb b/doc/debian_install.bb new file mode 100644 index 000000000..b2e74fdde --- /dev/null +++ b/doc/debian_install.bb @@ -0,0 +1,29 @@ +[b]Installing On Debian[/b]
+
+While following the instructions for any other installation will work on Debian, for this platform we also provide an install script which can be [zrl=https://friendicared.net/cloud/docs/debian-setup.sh]downloaded here[/zrl]
+
+[b]THIS SCRIPT IS MEANT TO BE RUN ON A NEW OR JUST REINSTALLED SERVER[/b]
+
+Some programs such as Apache & Samba are removed by this script.
+
+Note, this script will use Nginx as the webserver, and dropbear for ssh. It will also install PHP and MySQL from the DotDeb repository. The DotDeb is not an official Debian repository, though it is maintained by Debian developers.
+
+The file setup-debian.sh has to be on your server.
+
+For the initial setup git may not be installed on your server, to install git:
+
+[code]apt-get install git[/code]
+
+If wget is installed try
+
+[code]wget --no-check-certificate --timestamping [zrl=https://friendicared.net/cloud/docs/setup-debian.sh]https://friendicared.net/cloud/docs/debian-setup.sh[/zrl][/code]
+
+To install wget:
+[code]apt-get install wget[/code]
+
+For intitial server setup run
+[code]bash setup-debian.sh all[/code]
+
+To install Red for domain example.com, after the initial server setup run
+
+[code]bash setup-debian.sh red example.com[/code]
\ No newline at end of file diff --git a/doc/developer_function_primer.bb b/doc/developer_function_primer.bb new file mode 100644 index 000000000..8a41c81f4 --- /dev/null +++ b/doc/developer_function_primer.bb @@ -0,0 +1,45 @@ +[b]Red development - some useful basic functions[/b]
+
+[b]get_account_id()[/b]
+
+Returns numeric account_id if authenticated or 0. It is possible to be authenticated and not connected to a channel.
+
+[b]local_user()[/b]
+
+Returns authenticated numeric channel_id if authenticated and connected to a channel or 0. Sometimes referred to as $uid in the code.
+
+[b]remote_user()[/b]
+
+Returns authenticated string hash of Red global identifier, if authenticated via remote auth, or an empty string.
+
+[b]get_app()[/b]
+
+Returns the global app structure ($a).
+
+[b]App::get_observer()[/b]
+
+(App:: is usually assigned to the global $a), so $a->get_observer() or get_app()->get_observer() - returns an xchan structure representing the current viewer if authenticated (locally or remotely).
+
+[b]get_config($family,$key), get_pconfig($uid,$family,$key)[/b]
+
+Returns the config setting for $family and $key or false if unset.
+
+[b] set_config($family,$key,$value), set_pconfig($uid,$family,$key,$value)[/b]
+
+Sets the value of config setting for $family and $key to $value. Returns $value. The config versions operate on system-wide settings. The pconfig versions get/set the values for a specific integer uid (channel_id).
+
+[b]dbesc()[/b]
+
+Always escape strings being used in DB queries. This function returns the escaped string. Integer DB parameters should all be proven integers by wrapping with intval()
+
+[b]q($sql,$var1...)[/b]
+
+Perform a DB query with the SQL statement $sql. printf style arguments %s and %d are replaced with variable arguments, which should each be appropriately dbesc() or intval(). SELECT queries return an array of results or false if SQL or DB error. Other queries return true if the command was successful or false if it wasn't.
+
+[b]t($string)[/b]
+
+Returns the translated variant of $string for the current language or $string (default 'en' language) if the language is unrecognised or a translated version of the string does not exist.
+
+[b]x($var), $x($array,$key)[/b]
+
+Shorthand test to see if variable $var is set and is not empty. Tests vary by type. Returns false if $var or $key is not set. If variable is set, returns 1 if has 'non-zero' value, otherwise returns 0. -- e.g. x('') or x(0) returns 0;
\ No newline at end of file diff --git a/doc/developers.bb b/doc/developers.bb new file mode 100644 index 000000000..b925d31fb --- /dev/null +++ b/doc/developers.bb @@ -0,0 +1,52 @@ +[b]Red Developer Guide[/b]
+
+[b]Here is how you can join us.[/b]
+
+First, get yourself a working git package on the system where you will be
+doing development.
+
+Create your own github account.
+
+You may fork/clone the Red repository from [url=https://github.com/friendica/red.git]https://github.com/friendica/red.git[/url]
+
+Follow the instructions provided here: [url=http://help.github.com/fork-a-repo/]http://help.github.com/fork-a-repo/[/url]
+to create and use your own tracking fork on github
+
+Then go to your github page and create a "Pull request" when you are ready
+to notify us to merge your work.
+
+[b]Translations[/b]
+
+Our translations are managed through Transifex. If you wish to help out translating the Red Matrix to another language, sign up on transifex.com, visit [url=https://www.transifex.com/projects/p/red-matrix/]https://www.transifex.com/projects/p/red-matrix/[/url] and request to join one of the existing language teams or create a new one. Notify one of the core developers when you have a translation update which requires merging, or ask about merging it yourself if you're comfortable with git and PHP. We have a string file called 'messages.po' which is gettext compliant and a handful of email templates, and from there we automatically generate the application's language files.
+
+[zrl=https://friendicared.net/pages/doc/translations]Translations - More Info[/zrl]
+
+[b]Important[/b]
+
+Please pull in any changes from the project repository and merge them with your work **before** issuing a pull request. We reserve the right to reject any patch which results in a large number of merge conflicts. This is especially true in the case of language translations - where we may not be able to understand the subtle differences between conflicting versions.
+
+Also - **test your changes**. Don't assume that a simple fix won't break something else. If possible get an experienced Red developer to review the code.
+
+Further documentation can be found at the Github wiki pages at: [url=https://github.com/friendica/red/wiki]https://github.com/friendica/red/wiki[/url]
+
+[b]Licensing[/b]
+
+All code contributed to the project falls under the MIT license, unless otherwise specified. We will accept third-party code which falls under MIT, BSD and LGPL, but copyleft licensing (GPL, and AGPL) is only permitted in addons. It must be possible to completely remove the GPL (copyleft) code from the main project without breaking anything.
+
+[b]Coding Style[/b]
+
+In the interests of consistency we adopt the following code styling. We may accept patches using other styles, but where possible please try to provide a consistent code style. We aren't going to argue or debate the merits of this style, and it is irrelevant what project 'xyz' uses. This is not project 'xyz'. This is a baseline to try and keep the code readable now and in the future.
+
+[li] All comments should be in English.[/li]
+
+[li] We use doxygen to generate documentation. This hasn't been consistently applied, but learning it and using it are highly encouraged.[/li]
+
+[li] Indentation is accomplished primarily with tabs using a tab-width of 4.[/li]
+
+[li] String concatenation and operators should be separated by whitespace. e.g. "$foo = $bar . 'abc';" instead of "$foo=$bar.'abc';"[/li]
+
+[li] Generally speaking, we use single quotes for string variables and double quotes for SQL statements. "Here documents" should be avoided. Sometimes using double quoted strings with variable replacement is the most efficient means of creating the string. In most cases, you should be using single quotes.[/li]
+
+[li] Use whitespace liberally to enhance readability. When creating arrays with many elements, we will often set one key/value pair per line, indented from the parent line appropriately. Lining up the assignment operators takes a bit more work, but also increases readability.[/li]
+
+[li] Generally speaking, opening braces go on the same line as the thing which opens the brace. They are the last character on the line. Closing braces are on a line by themselves. [/li]
\ No newline at end of file diff --git a/doc/external-resource-links.bb b/doc/external-resource-links.bb new file mode 100644 index 000000000..09ac48a47 --- /dev/null +++ b/doc/external-resource-links.bb @@ -0,0 +1,22 @@ +[b]External Resource Links[/b]
+
+[b][color= grey][size=24]External Links[/size][/color][/b]
+[b]Third-Party Themes[/b]
+
+[*][url=https://github.com/beardy-unixer/apw]APW[/url]
+[*][url=https://github.com/omigeot/redstrap3]Redstrap[/url]
+[*][url=https://github.com/23n/Pluto]Pluto[/url]
+[*][url=https://bitbucket.org/tobiasd/red-clean]Clean[/url]
+
+[b]Third-Party Addons[/b]
+[*][url=https://github.com/beardy-unixer/red-addons-extra]BBCode Extensions for Webpages/Wikis[/url]
+[*][url=https://abcentric.net/git/abcjsplugin.git]ABCjs integration - display scores in posts (WIP)[/url]
+
+[b]Related Projects[/b]
+
+[*][url=https://addons.mozilla.org/en-US/firefox/addon/redshare/]Redshare for Firefox[/url]
+[*][url=https://github.com/cvogeley/red-for-android]Red for Android[/url]
+[*][url=https://github.com/zzottel/feed2red]feed2red.pl (posts Atom/RSS feeds to channel)[/url]
+
+[b]Utilities[/b]
+[*][url=https://github.com/beardy-unixer/lowendscript-ng]Debian Install Script[/url]
\ No newline at end of file diff --git a/doc/extra_features.bb b/doc/extra_features.bb new file mode 100644 index 000000000..91a16d365 --- /dev/null +++ b/doc/extra_features.bb @@ -0,0 +1,103 @@ +[b]Features[/b]
+
+The default interface of the Red Matrix was designed to be uncluttered. There are a huge number of extra features (some of which are extremely useful) which you can turn on and get the most of the application. These are found under the Extra Features link of your Settings page.
+
+[b]Content Expiration[/b]
+
+Remove posts/comments and/or private messages at a future time. An extra button is added to the post editor which asks you for an expiration. Typically this in "yyyy-mm-dd hh:mm" format, but in the English language you have a bit more freedom and can use most any recognisable date reference such as "next Thursday" or "+1 day". At the specified time (give or take approximately ten minutes based on the remote system's checking frequency) the post is removed.
+
+[b]Multiple Profiles[/b]
+
+The ability to create multiple profiles which are visible only to specific persons or groups. Your default profile may be visible to anybody, but secondary profiles can all contain different or additional information and can only be seen by those to whom that profile is assigned.
+
+[b]Web Pages[/b]
+
+Provides the ability to use web page design feaures and create custom webpages from your own content and also to design the pages with page layouts, custom menus, and content blocks.
+
+[b]Private Notes[/b]
+
+On pages where it is available (your matrix page and personal web pages) provide a "widget" to create and store personal reminders and notes.
+
+[b]Enhanced Photo Albums[/b]
+
+Provides a photo album viewer that is a bit prettier than the normal interface.
+
+[b]Extended Identity Sharing[/b]
+
+By default your identity travels with you as you browse the matrix to remote sites - and they know who you are and can show you content that only you can see. With Extended Identity Sharing you can provide this information to any website you visit from within the matrix.
+
+[b]Expert Mode[/b]
+
+This allows you to see some advanced configuration options that would confuse some people or cause support issues. In particular this can give you full control over theme features and colours - so that you can tweak a large number of settings of the display theme to your liking.
+
+[b]Premium Channel[/b]
+
+This allows you to set restrictions and terms on those that connect with your channel. This may be used by celebrities or anybody else who wishes to describe their channel to people who wish to connect with it. In certain cases you may be asked for payment in order to connect.
+
+[b]Richtext Editor[/b]
+
+The status post editor is plaintext, but the matrix allows a wide range of markup using BBcode. The visual editor provides "what you see is what you get" for many of the most frequently used markup tags.
+
+[b]Post Preview[/b]
+
+Allows previewing posts and comments exactly as they would look on the page before publishing them.
+
+[b]Channel Sources[/b]
+
+Automatically import and re-publish channel content from other channels or feeds. This allows you to create sub-channels and super-channels from content provided elsewhere. The rules are that the content must be public, and the channel owner must give you permission to source their channel.
+
+[b]Even More Encryption[/b]
+
+Private messages are encrypted during transport and storage. In this day and age, this encyption may not be enough if your communications are extremely sensitive. This options lets you provide optional encryption of content "end-to-end" with a shared secret key. How the recipient learns the secret key is completely up to you. You can provide a hint such as "the name of aunt Claire's first dog".
+
+[b]Search by Date[/b]
+
+This provides the ability to select posts by date ranges
+
+[b]Collections Filter[/b]
+
+Enable widget to display stream posts only from selected collections. This also toggles the outbound permissions while you are viewing a collection. This is analogous to Google "circles" or Disapora "aspects".
+
+[b]Saved Searches[/b]
+
+Provides a search widget on your matrix page which can save selected search terms for re-use.
+
+[b]Personal Tab[/b]
+
+Enable tab to display only matrix posts that you've interacted with in some way, as an author or a contributor to the conversation.
+
+[b]New Tab[/b]
+
+Enables a tab to display all new matrix activity as a firehose or timeline.
+
+[b]Affinity Tool[/b]
+
+Filter matrix stream activity by the depth of your relationships
+
+[b]Edit Sent Posts[/b]
+
+Edit and correct posts and comments after sending
+
+[b]Tagging[/b]
+
+Ability to tag existing posts, including those written by others.
+
+[b]Post Categories[/b]
+
+Add categories to your channel posts
+
+[b]Saved Folders[/b]
+
+Ability to file posts under folders or tags for later recall
+
+[b]Dislike Posts[/b]
+
+Ability to dislike posts/comments
+
+[b]Star Posts[/b]
+
+Ability to mark special posts with a star indicator
+
+[b]Tag Cloud[/b]
+
+Provide a personal tag cloud on your channel page
\ No newline at end of file diff --git a/doc/features.bb b/doc/features.bb new file mode 100644 index 000000000..8fcbef02f --- /dev/null +++ b/doc/features.bb @@ -0,0 +1,111 @@ +[b]Features[/b]
+
+[b][color= grey][size=24]Red Matrix Features[/size][/color][/b]
+
+
+The Red Matrix is a general-purpose communication network, with several unique features. It is designed to be used by the widest range of users on the web, from non-technical bloggers, to expert PHP programmers and seasoned systems administrators.
+
+This page lists some of the core features of Red that are bundled with the official. As we any free and open source software, there many other extensions, additions, plugins, themes and configurations that limited only by the needs and imagination of Red's users.
+
+[b][color= grey][size=20]Built for Privacy and Freedom[/size][/color][/b]
+
+One of the design goals of Red is to enable easy communication on the web, while preserving privacy, if so desired by users. To achieve this goal, Red includes a number of features allowing arbitrary levels of privacy:
+
+[b][color= grey]Affinity Slider[/color][/b]
+
+When adding contacts in the Red Matrix, users have the option of assigning affinity levels to the new member in their contact list. For example, when adding someone who happens to be a person who's blog you follow, you could assign their channel an affinity level of "Acquaintances".
+
+[img]https://friendicared.net/photo/b07b0262e3146325508b81a9d1ae4a1e-0.png[/img]
+
+On the other hand, when adding a friend's channel, they could be placed under the affinity level of "Friends".
+
+At this point, Red's [i]Affinity Slider[/i] tool, which usually appears at the top of your "Matrix" page, allows content on your Red account to be displayed by desired affinity levels. By moving the slider to cover all contacts with affinity levels of "Me" to "Friends", only contacts (or channels) that are marked as "Me", "Best Friends", and "Friends" will be displayed on your page. All other channels and contacts, such as the contact added under affinity level "Acquaintances", will not be displayed.
+
+The Affinity Slider allows instantaneous filtering of large amounts of content, grouped by levels of closeness.
+
+[b][color= grey]Access Control Lists[/color][/b]
+
+When sharing content with someone in their contact list, users have the option of restricting who sees the content. By clicking on the padlock underneath the sharing box, one could choose desired recipients of the post, by clicking on their names.
+
+Once sent, the message will be viewable only by the sender and the selected recipients. In other words, the message will not appear on any public walls.
+
+
+[b][color=grey]Private Message Encryption and Privacy Concerns[/color][/b]
+
+In the Red Matrix, public messages are not encrypted prior to leaving the originating server, they are also stored in the database in clear text.
+
+Messages marked [b][color=white]private[/color][/b], however, are encrypted with AES-CBC 256-bit symmetric cipher, which is then protected (encrypted in turn) by public key cryptography, based on 4096-bit RSA keys, associated with the channel that is sending the message.
+
+Each Red channel has it's own unique set of private and associated public RSA 4096-bit keys, generated when the channels is first created.
+
+[b][color= grey]TLS/SSL[/color][/b]
+
+For Red hubs that use TLS/SSL, client to server communications are encrypted via TLS/SSL. Given recent disclosures in the media regarding widespread, global surveillance and encryption circumvention by the NSA and GCHQ, it is reasonable to assume that HTTPS-protected communications may be compromised in various ways.
+
+[b][color= grey]Channel Settings[/color][/b]
+
+In Red, each channel allows fine-grained permissions to be set for various aspects of communication. For example, under the "Security and Privacy Settings" heading, each aspect on the left side of the page, has six (6) possible viewing/access options, that can be selected by clicking on the dropdown menu.
+
+[img]https://friendicared.net/photo/0f5be8da282858edd645b0a1a6626491.png[/img]
+
+The six options are:
+
+ - Nobody except yourself.
+ - Only those you specifically allow.
+ - Anybody in your address book.
+ - Anybody on this website.
+ - Anybody in this network.
+ - Anybody on the Internet.
+
+
+[b][color= grey]Account Cloning[/color][/b]
+
+Accounts in the Red Matrix are called to as [i]nomadic identities[/]. Nomadic, because a user's identity (see What is Zot? for the full explanation) is stuck to the hub where the identity was originally created. For example, when you created your Facebook, or Gmail account, it is tied to those services. They cannot function without Facebook.com or Gmail.com.
+
+By contrast, say you've created a Red identity called [b][color=white]tina@redhub.com[/color][/b]. You can clone it to another Red hub by choosing the same, or a different name: [b][color=white]liveForever@SomeRedMatrixHub.info[/color][/b]
+
+Both channels are now synchronized, which means all your contacts and preferences will be duplicated on your clone. It doesn't matter whether you send a post from your original hub, or the new hub. Posts will be mirrored on both accounts.
+
+This is a rather revolutionary feature, if we consider some scenarios:
+
+ - What happens if the hub where an identity is based, suddenly goes offline? Without cloning, a user will not be able to communicate until that hub comes back online. With cloning, you just log into your cloned account, and life goes on happily ever after.
+
+ - The administrator of your hub can no longer afford to pay for his free and public Red Matrix hub. He announces that the hub will be shutting down in two weeks. This gives you ample time to clone your identity(ies) and preserve your Red relationships, friends and content.
+
+ - What if your identity is subject to government censorship? Your hub provider is compelled to delete your account, along with any identities and associated data. With cloning, the Red Matrix offers [b][color=white]censorship resistance [/color][/b]. You can have hundreds of clones, if you wanted to, all named different, and existing on many different hubs, strewn around the internet.
+
+Red offers interesting new possibilities for privacy. You can read more at the <<Private Communications Best Practices>> page.
+
+Some caveats apply. For a full explanation of identity cloning, read the <HOW TO CLONE MY IDENTITY>.
+
+
+[b][color= grey]Account Backup[/color][/b]
+
+Red offers a simple, one-click account backup, where you can download a complete backup of your profile(s).
+
+Backups can then be used to clone or restore a profile.
+
+[b][color= grey]Account Deletion[/color][/b]
+
+Accounts can be immediately deleted by clicking on a link. That's it. All associated content is immediately deleted from the matrix (this includes posts and any other content produced by the deleted profile).
+
+[b][color=grey][size=20]Content Creation[/size][/color][/b]
+
+[b][color=white]Writing Posts[/color][/b]
+
+Red supports a number of different ways of adding content, from a graphical text editor, to various types of markup and pure HTML.
+
+Red bundles the TinyMCE rich text editor, which can be turned on under "Settings."
+For user who prefer not to use TinyMCE, content can be entered by typing BBCode markup.
+Furthermore, when creating "Websites" or using "Comanche" and its PCL[FINISH], content can be entered in HTML, Markdown and plain text.
+
+[b][color=white]Deletion of content[/color][/b]
+Any content created in the Red Matrix remains under the control of the user (or channel) that originally created. At any time, a user can delete a message, or a range of messages. The deletion process ensures that the content is deleted, regardless of whether it was posted on a channel's primary (home) hub, or on another hub, where the channel was remotely authenticated via Zot.
+
+[b][color=white]Media[/color][/b]
+Similar to any other modern blogging system, social network, or a micro-blogging service, Red supports the uploading of files, embedding of videos, linking web pages.
+
+[b][color=white]Previewing[/color][/b]
+Post can be previewed prior to sending.
+
+Return to the [url=[baseurl]/help/main]Main documentation page[/url]
\ No newline at end of file diff --git a/doc/git_for_non_developers.bb b/doc/git_for_non_developers.bb new file mode 100644 index 000000000..e68634da1 --- /dev/null +++ b/doc/git_for_non_developers.bb @@ -0,0 +1,46 @@ +[b]Git For Non-Developers[/b]
+
+So you're handling a translation, or you're contributing to a theme, and every time you make a pull request you have to talk to one of the developers before your changes can be merged in?
+
+Chances are, you just haven't found a quick how-to explaining how to keep things in sync on your end. It's really very easy.
+
+After you've created a fork of the repo (just click "fork" at github), you need to clone your own copy.
+
+For the sake of examples, we'll assume you're working on a theme called redexample (which does not exist).
+
+[code]git clone https://github.com/username/red.git[/code]
+
+Once you've done that, cd into the directory, and add an upstream.
+
+[code]
+cd red
+git remote add upstream https://github.com/friendica/red
+[/code]
+
+From now on, you can pull upstream changes with the command
+[code]git fetch upstream[/code]
+
+Before your changes can be merged automatically, you will often need to merge upstream changes.
+
+[code]
+git merge upstream/master
+[/code]
+
+You should always merge upstream before pushing any changes, and [i]must[/i] merge upstream with any pull requests to make them automatically mergeable.
+
+99% of the time, this will all go well. The only time it won't is if somebody else has been editing the same files as you - and often, only if they have been editing the same lines of the same files. If that happens, that would be a good time to request help until you get the hang of handling your own merge conflicts.
+
+Then you just need to add your changes [code]git add view/theme/redexample/[/code]
+
+This will add all the files in view/theme/redexample and any subdirectories. If your particular files are mixed throughout the code, you should add one at a time. Try not to do git add -a, as this will add everything, including temporary files (we mostly, but not always catch those with a .gitignore) and any local changes you have, but did not intend to commit.
+
+Once you have added all the files you have changed, you need to commit them. [code]git commit[/code]
+
+This will open up an editor where you can describe the changes you have made. Save this file, and exit the editor.
+
+Finally, push the changes to your own git
+[code]git push[/code]
+
+And that's it!
+
+Return to the [url=[baseurl]/help/main]Main documentation page[/url]
\ No newline at end of file diff --git a/doc/install.bb b/doc/install.bb new file mode 100644 index 000000000..ef9ed2ca6 --- /dev/null +++ b/doc/install.bb @@ -0,0 +1,103 @@ +[b]Red Installation[/b]
+
+Red should run on commodity hosting platforms - such as those used to host Wordpress blogs and Drupal websites. But be aware that Red is more than a simple web application. The kind of functionality offered by Red requires a bit more of the host system than the typical blog. Not every PHP/MySQL hosting provider will be able to support Red. Many will. But **please** review the requirements and confirm these with your hosting provider prior to installation.
+
+Also if you encounter installation issues, please let us know via the Github issue tracker (#^[url=https://github.com/friendica/red/issues]https://github.com/friendica/red/issues[/url]). Please be as clear as you can about your operating environment and provide as much detail as possible about any error messages you may see, so that we can prevent it from happening in the future. Due to the large variety of operating systems and PHP platforms in existence we may have only limited ability to debug your PHP installation or acquire any missing modules - but we will do our best to solve any general code issues.
+
+Before you begin: Choose a domain name or subdomain name for your server.
+
+1. Requirements
+ - Apache with mod-rewrite enabled and "AllowOverride All" so you can use a
+local .htaccess file
+
+ - PHP 5.3 or later
+ - PHP *command line* access with register_argc_argv set to true in the
+php.ini file
+ - curl, gd, mysql, and openssl extensions
+ - some form of email server or email gateway such that PHP mail() works
+ - mcrypt (optional; used for server-to-server message encryption)
+
+ - Mysql 5.x
+
+ - ability to schedule jobs with cron (Linux/Mac) or Scheduled Tasks
+(Windows) [Note: other options are presented in Section 7 of this document]
+
+ - Installation into a top-level domain or sub-domain (without a
+directory/path component in the URL) is preferred. Directory paths will
+not be as convenient to use and have not been thoroughly tested.
+
+
+ [Dreamhost.com offers all of the necessary hosting features at a
+reasonable price. If your hosting provider doesn't allow Unix shell access,
+you might have trouble getting everything to work.]
+
+2. Unpack the Red files into the root of your web server document area.
+
+ - If you are able to do so, we recommend using git to clone the source repository rather than to use a packaged tar or zip file. This makes the software much easier to update. The Linux command to clone the repository into a directory "mywebsite" would be
+
+ `git clone #^[url=https://github.com/friendica/red.git]https://github.com/friendica/red.git[/url] mywebsite`
+
+ - and then you can pick up the latest changes at any time with
+
+ `git pull`
+
+ - make sure folder *view/tpl/smarty3* exists and is writable by webserver
+
+ `mkdir view/tpl/smarty3`
+
+ `chmod 777 view/smarty3`
+
+ - For installing addons
+
+ - First you should be **on** your website folder
+
+ `cd mywebsite`
+
+ - Then you should clone the addon repository (separtely)
+
+ `git clone #^[url=https://github.com/friendica/red-addons.git]https://github.com/friendica/red-addons.git[/url] addon`
+
+ - For keeping the addon tree updated, you should be on you addon tree and issue a git pull
+
+ `cd mywebsite/addon`
+
+ `git pull`
+
+ - If you copy the directory tree to your webserver, make sure
+ that you also copy .htaccess - as "dot" files are often hidden
+ and aren't normally copied.
+
+
+3. Create an empty database and note the access details (hostname, username, password, database name).
+
+4. Visit your website with a web browser and follow the instructions. Please note any error messages and correct these before continuing.
+
+5. *If* the automated installation fails for any reason, check the following:
+
+ - ".htconfig.php" exists ... If not, edit htconfig.php and change system settings. Rename
+to .htconfig.php
+ - Database is populated. ... If not, import the contents of "database.sql" with phpmyadmin
+or mysql command line
+
+6. At this point visit your website again, and register your personal account.
+Registration errors should all be recoverable automatically.
+If you get any *critical* failure at this point, it generally indicates the
+database was not installed correctly. You might wish to move/rename
+.htconfig.php to another name and empty (called 'dropping') the database
+tables, so that you can start fresh.
+
+7. Set up a cron job or scheduled task to run the poller once every 15
+minutes in order to perform background processing. Example:
+
+ `cd /base/directory; /path/to/php include/poller.php`
+
+Change "/base/directory", and "/path/to/php" as appropriate for your situation.
+
+If you are using a Linux server, run "crontab -e" and add a line like the
+one shown, substituting for your unique paths and settings:
+
+`*/15 * * * * cd /home/myname/mywebsite; /usr/bin/php include/poller.php`
+
+You can generally find the location of PHP by executing "which php". If you
+have troubles with this section please contact your hosting provider for
+assistance. Red will not work correctly if you cannot perform this step.
\ No newline at end of file diff --git a/doc/intro_for_developers.bb b/doc/intro_for_developers.bb new file mode 100644 index 000000000..002088be3 --- /dev/null +++ b/doc/intro_for_developers.bb @@ -0,0 +1,99 @@ +[b]Red Developer Guide[/b]
+
+[b]File system layout:[/b]
+
+[addon] optional addons/plugins
+
+[boot.php] Every process uses this to bootstrap the application structure
+
+[doc] Help Files
+
+[images] core required images
+
+[include] The "model" in MVC - (back-end functions), also contains PHP "executables" for background processing
+
+[index.php] The front-end controller for web access
+
+[install] Installation and upgrade files and DB schema
+
+[js] core required javascript
+
+[library] Third party modules (must be license compatible)
+
+[mod] Controller modules based on URL pathname (e.g. #^[url=http://sitename/foo]http://sitename/foo[/url] loads mod/foo.php)
+
+[spec] protocol specifications
+
+[util] translation tools, main English string database and other miscellaneous utilities
+
+[version.inc] contains current version (auto-updated via cron for the master repository and distributed via git)
+
+[view] theming and language files
+
+[view/(css,js,img,php,tpl)] default theme files
+
+[view/(en,it,es ...)] language strings and resources
+
+[view/theme/] individual named themes containing (css,js,img,php,tpl) over-rides
+
+[b]The Database:[/b]
+
+ [li]abook - contact table, replaces Friendica 'contact'[/li]
+ [li]account - service provider account[/li]
+ [li]addon - registered plugins[/li]
+ [li]attach - file attachments[/li]
+ [li]auth_codes - OAuth usage[/li]
+ [li]cache - TBD[/li]
+ [li]challenge - old DFRN structure, may re-use or may deprecate[/li]
+ [li]channel - replaces Friendica 'user'[/li]
+ [li]clients - OAuth usage[/li]
+ [li]config - main configuration storage[/li]
+ [li]event - Events[/li]
+ [li]fcontact - friend suggestion stuff[/li]
+ [li]ffinder - friend suggestion stuff[/li]
+ [li]fserver - obsolete[/li]
+ [li]fsuggest - friend suggestion stuff[/li]
+ [li]gcign - ignored friend suggestions[/li]
+ [li]gcontact - social graph storage, obsolete[/li]
+ [li]glink - social graph storage - obsolete[/li]
+ [li]group - privacy groups[/li]
+ [li]group_member - privacy groups[/li]
+ [li]hook - plugin hook registry[/li]
+ [li]hubloc - Red location storage, ties a location to an xchan[/li]
+ [li]intro - DFRN introductions, may be obsolete[/li]
+ [li]item - posts[/li]
+ [li]item_id - other identifiers on other services for posts[/li]
+ [li]mail - private messages[/li]
+ [li]manage - may be unused in Red, table of accounts that can "su" each other[/li]
+ [li]notify - notifications[/li]
+ [li]notify-threads - need to factor this out and use item thread info on notifications[/li]
+ [li]outq - Red output queue[/li]
+ [li]pconfig - personal (per channel) configuration storage[/li]
+ [li]photo - photo storage[/li]
+ [li]profile - channel profiles[/li]
+ [li]profile_check - DFRN remote auth use, may be obsolete[/li]
+ [li]queue - old Friendica queue, obsolete[/li]
+ [li]register - registrations requiring admin approval[/li]
+ [li]session - web session storage[/li]
+ [li]site - site table to find directory peers[/li]
+ [li]spam - unfinished[/li]
+ [li]term - item taxonomy (categories, tags, etc.) table[/li]
+ [li]tokens - OAuth usage[/li]
+ [li]verify - general purpose verification structure[/li]
+ [li]xchan - replaces 'gcontact', list of known channels in the universe[/li]
+ [li]xlink - "friends of friends" linkages derived from poco[/li]
+ [li]xprof - if this hub is a directory server, contains basic public profile info of everybody in the network[/li]
+ [li]xtag - if this hub is a directory server, contains tags or interests of everybody in the network[/li]
+
+
+[b]How to theme Red - by Olivier Migeot[/b]
+
+This is a short documentation on what I found while trying to modify Red's appearance.
+
+First, you'll need to create a new theme. This is in /view/theme, and I chose to copy 'redbasic' since it's the only available for now. Let's assume I named it .
+
+Oh, and don't forget to rename the _init function in /php/theme.php to be _init() instead of redbasic_init().
+
+At that point, if you need to add javascript or css files, add them to /js or /css, and then "register" them in _init() through head_add_js('file.js') and head_add_css('file.css').
+
+Now you'll probably want to alter a template. These can be found in in /view/tpl OR view//tpl. All you should have to do is copy whatever you want to tweak from the first place to your theme's own tpl directory.
\ No newline at end of file diff --git a/doc/main.bb b/doc/main.bb new file mode 100644 index 000000000..7ae5d3736 --- /dev/null +++ b/doc/main.bb @@ -0,0 +1,59 @@ +[b]Red Matrix Documentation and Resources[/b]
+
+Contents
+
+[zrl=[baseurl]/help/about]What is the Red Matrix?[/zrl]
+[zrl=[baseurl]/help/features]Red Matrix Features[/zrl]
+[zrl=[baseurl]/help/what_is_zot] What is Zot?[/zrl]
+
+[b]Using the Red Matrix[/b]
+
+[zrl=[baseurl]/help/account_basics]Account Basics[/zrl]
+[zrl=[baseurl]/help/profiles]Profiles[/zrl]
+[zrl=[baseurl]/help/channels]Channels[/zrl]
+[zrl=[baseurl]/help/connecting_to_channels]Connecting to Channels[/zrl]
+[zrl=[baseurl]/help/permissions]Permissions[/zrl]
+[zrl=[baseurl]/help/cloud]Cloud Storage[/zrl]
+
+[b]But Wait - There's More. MUCH More...[/b]
+
+[zrl=[baseurl]/help/tags_and_mentions]Tags and Mentions[/zrl]
+[zrl=[baseurl]/help/webpages]Web Pages[/zrl]
+[zrl=[baseurl]/help/remove_account]Remove Account[/zrl]
+[zrl=[baseurl]/help/extra_features]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]
+
+[b]For Hub Administrators[/b]
+
+[zrl=[baseurl]/help/debian_install]Easy Install on Debian via script[/zrl]
+[zrl=[baseurl]/help/red2pi]Installing Red on the Raspberry Pi[/zrl]
+[zrl=[baseurl]/help/problems-following-an-update]Problems Following A Software Update[/zrl]
+[zrl=[baseurl]/help/troubleshooting]Troubleshooting Tips[/zrl]
+
+
+[b]Technical Documentation[/b]
+
+[zrl=[baseurl]/help/install]Install[/zrl]
+[zrl=[baseurl]/help/comanche]Comanche Page Descriptions[/zrl]
+[zrl=[baseurl]/help/plugins]Plugins[/zrl]
+[zrl=[baseurl]/help/schema_development]Schemas[/zrl]
+[zrl=[baseurl]/help/developers]Developers[/zrl]
+[zrl=[baseurl]/help/intro_for_developers]Intro for Developers[/zrl]
+[zrl=[baseurl]/help/api_functions]API functions[/zrl]
+[zrl=[baseurl]/help/developer_function_primer]Red Functions 101[/zrl]
+[zrl=https://friendicared.net/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/git_for_non_developers]Git for Non-Developers[/zrl]
+
+[b]External Resources[/b]
+
+[zrl=[baseurl]/help/external-resource-links]External Resource Links[/zrl]
+[url=https://github.com/friendica/red]Main Website[/url]
+[url=https://github.com/friendica/red-addons]Addon Website[/url]
+[url=https://zothub.com/channel/one]Development Channel[/url]
+
+[b]About[/b]
+
+[zrl=[baseurl]/siteinfo]Site/Version Info[/zrl]
diff --git a/doc/permissions.bb b/doc/permissions.bb new file mode 100644 index 000000000..69ee62139 --- /dev/null +++ b/doc/permissions.bb @@ -0,0 +1,97 @@ +[b]Permissions[/b]
+
+Permissions in the Red Matrix are more complete than you may be used to. This allows us to define more fine graded relationships than the black and white "this person is my friend, so they can do everything" or "this person is not my friend, so they can't do anything" permissions you may find elsewhere.
+
+[b]Default Permissions[/b]
+
+On your settings page, you will find a list of default permissions. These permissions are automatically applied to everybody unless you specify otherwise. The scope of these permissions varies from "Only me" to "Everybody" - though some scopes may not be available for some permissions. For example, you can't allow "anybody on the internet" to send you private messages, because we'd have no way to identify the sender, therefore no way to reply to them.
+
+The scopes of permissions are:
+
+[li]Nobody Except Yourself. This is self explanatory. Only you will be allowed to use this permission.[/li]
+
+[li]Only those you specifically allow. By default, people you are not connected to, and all new contacts will have this permission denied. You will be able to make exceptions for individual channels on their contact edit screen.[/li]
+
+[li]Anybody in your address book. Anybody you do not know will have this permission denied, but anybody you accept as a contact will have this permission approved. This is the way most legacy platforms handle permissions.[/li]
+
+[li]Anybody On This Website. Anybody using the same website as you will have permission approved. Anybody who registered at a different site will have this permission denied.[/li]
+
+[li]Anybody in this network. Anybody in the Red Matrix will have this permission approved. Even complete strangers. However, anybody not logged in/authenticated will have this permission denied.
+Anybody on the internet. Completely public. This permission will be approved for anybody at all.[/li]
+
+The individual permissions are:
+
+[i]Can view my "public" stream and posts.[/i]
+
+This permision determines who can view your channel "stream" that is, the non-private posts that appear on the "home" tab when you're logged in.
+
+[i]Can view my "public" channel profile.[/i]
+
+This permission determines who can view your channel's profile. This refers to the "about" tab
+
+[i]Can view my "public" photo albums.[/i]
+
+ This permission determines who can view your photo albums. Individual photographs may still be posted to a more private audience.
+
+[i]Can view my "public" address book.[/i]
+
+This permission determines who can view your contacts. These are the connections displayed in the "View connections" section.
+
+[i]Can view my "public" file storage.[/i]
+
+This permission determines who can view your public files. This isn't done yet, so this is placeholder text.
+
+[i]Can view my "public" pages.[/i]
+
+This permission determines who can view your public web pages. This isn't done yet, so this is placeholder text.
+
+[i]Can send me their channel stream and posts.[/i]
+
+This permission determines whose posts you will view. If your channel is a personal channel (ie, you as a person), you would probably want to set this to "anyone in my address book" at a minimum. A personal notes channel would probably want to choose "nobody except myself". Setting this to "Anybody in the network" will show you posts from complete strangers, which is a good form of discovery.
+
+[i]Can post on my channel page ("wall").[/i]
+
+This permission determines who can write to your wall when clicking through to your channel.
+
+[i]Can comment on my posts.[/i]
+
+This permission determines who can comment on posts you create. Normally, you would want this to match your "can view my public pages" permission
+
+[i]Can send me private mail messages.[/i]
+
+This determines who can send you private messages (zotmail).
+
+[i]Can post photos to my photo albums.[/i]
+
+This determines who can post photographs in your albums. This is very useful for forum-like channels where connections may not be connected to each other.
+
+[i]Can forward to all my channel contacts via post tags.[/i]
+
+Using @- mentions will reproduce a copy of your post on the profile specified, as though you posted on the channel wall. This determines if people can post to your channel in this way.
+
+[i]Can chat with me (when available).[/i]
+
+This determines who can join the public chat rooms created by your channel.
+
+[i]Can write to my "public" file storage.[/i]
+
+This determines who can upload files to your public file storage. This isn't done yet, so this is placeholder text.
+
+[i]Can edit my "public" pages.[/i]
+
+This determines who can edit your webpages. This is useful for wikis or sites with multiple editors.
+
+[i]Can administer my channel resources.[/i]
+
+This determines who can have full control of your channel. This should normally be set to "nobody except myself".
+
+[i]Note:[/i]
+Plugins/addons may provide special permission settings, so you may be offered additional permission settings beyond what is described here.
+
+If you have set any of these permissions to "only those I specifically allow", you may specify indivudal permissions on the connnection edit screen.
+
+[b]Affinity[/b]
+
+The connection edit screen offers a slider to select a degree of friendship with the connnection (this tool is enabled through the "Extra Features" tab of your Settings page). Think of this as a measure of how much you like or dislike them. 1 is for people you like, whose posts you want to see all the time. 99 is for people you don't care for, and whose posts you might only wish to look at occasionally. Once you've assigned a value here, you can use the affinity tool on the matrix page to filter content based on this number.
+
+The slider on the matrix page has both a minimum and maximum value. Posts will only be shown from people who fall between this range. Affinity has no relation to permissions, and is only useful in conjunction with the affinity tool feature.
\ No newline at end of file diff --git a/doc/plugins.bb b/doc/plugins.bb new file mode 100644 index 000000000..2440de762 --- /dev/null +++ b/doc/plugins.bb @@ -0,0 +1,257 @@ +[b]Plugins[/b]
+
+So you want to make the Red Matrix do something it doesn't already do. There are lots of ways. But let's learn how to write a plugin or addon.
+
+
+In your Red Matrix folder/directory, you will probably see a sub-directory called 'addon'. If you don't have one already, go ahead and create it.
+[code]
+ mkdir addon
+[/code]
+Then figure out a name for your addon. You probably have at least a vague idea of what you want it to do. For our example I'm going to create a plugin called 'randplace' that provides a somewhat random location for each of your posts. The name of your plugin is used to find the functions we need to access and is part of the function names, so to be safe, use only simple text characters.
+
+Once you've chosen a name, create a directory beneath 'addon' to hold your working file or files.
+[code]
+ mkdir addon/randplace
+[/code]
+Now create your plugin file. It needs to have the same name, and it's a PHP script, so using your favourite editor, create the file
+[code]
+ addon/randplace/randplace.php
+[/code]
+The very first line of this file needs to be
+[code]
+ <?php
+[/code]
+Then we're going to create a comment block to describe the plugin. There's a special format for this. We use /* ... */ comment-style and some tagged lines consisting of
+[code]
+ /**
+ *
+ * Name: Random Place (here you can use better descriptions than you could in the filename)
+ * Description: Sample Red Matrix plugin, Sets a random place when posting.
+ * Version: 1.0
+ * Author: Mike Macgirvin <mike@zothub.com>
+ *
+ */
+[/code]
+These tags will be seen by the site administrator when he/she installs or manages plugins from the admin panel. There can be more than one author. Just add another line starting with 'Author:'.
+
+The typical plugin will have at least the following functions:
+[code]
+ pluginname_load()
+ pluginname_unload()
+[/code]
+In our case, we'll call them randplace_load() and randplace_unload(), as that is the name of our plugin. These functions are called whenever we wish to either initialise the plugin or remove it from the current webpage. Also if your plugin requires things like altering the database schema before it can run for the very first time, you would likely place these instructions in the functions named
+[code]
+ pluginname_install()
+ pluginname_uninstall()
+[/code]
+
+Next we'll talk about **hooks**. Hooks are places in the Red Matrix code where we allow plugins to do stuff. There are a [lot of these](help/Hooks), and they each have a name. What we normally do is use the pluginname_load() function to register a "handler function" for any hooks you are interested in. Then when any of these hooks are triggered, your code will be called.
+
+We register hook handlers with the 'register_hook()' function. It takes 3 arguments. The first is the hook we wish to catch, the second is the filename of the file to find our handler function (relative to the base of your Red Matrix installation), and the third is the function name of your handler function. So let's create our randplace_load() function right now.
+
+[code]
+ function randplace_load() {
+ register_hook('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook');
+
+ register_hook('feature_settings', 'addon/randplace/randplace.php', 'randplace_settings');
+ register_hook('feature_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post');
+
+ }
+[/code]
+
+So we're going to catch three events, 'post_local' which is triggered when a post is made on the local system, 'feature_settings' to set some preferences for our plugin, and 'feature_settings_post' to store those settings.
+
+Next we'll create an unload function. This is easy, as it just unregisters our hooks. It takes exactly the same arguments.
+[code]
+ function randplace_unload() {
+ unregister_hook('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook');
+
+ unregister_hook('feature_settings', 'addon/randplace/randplace.php', 'randplace_settings');
+ unregister_hook('feature_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post');
+
+ }
+[/code]
+
+Hooks are called with two arguments. The first is always $a, which is our global App structure and contains a huge amount of information about the state of the web request we are processing; as well as who the viewer is, and what our login state is, and the current contents of the web page we're probably constructing.
+
+The second argument is specific to the hook you're calling. It contains information relevant to that particular place in the program, and often allows you to look at, and even change it. In order to change it, you need to add '&' to the variable name so it is passed to your function by reference. Otherwise it will create a copy and any changes you make will be lost when the hook process returns. Usually (but not always) the second argument is a named array of data structures. Please see the "hook reference" (not yet written as of this date) for details on any specific hook. Occasionally you may need to view the program source to see precisely how a given hook is called and how the results are processed.
+
+Let's go ahead and add some code to implement our post_local hook handler.
+[code]
+ function randplace_post_hook($a, &$item) {
+
+ /**
+ *
+ * An item was posted on the local system.
+ * We are going to look for specific items:
+ * - A status post by a profile owner
+ * - The profile owner must have allowed our plugin
+ *
+ */
+
+ logger('randplace invoked');
+
+ if(! local_user()) /* non-zero if this is a logged in user of this system */
+ return;
+
+ if(local_user() != $item['uid']) /* Does this person own the post? */
+ return;
+
+ if(($item['parent']) || ($item['item_restrict'])) {
+ /* If the item has a parent, or item_restrict is non-zero, this is a comment or something else, not a status post. */
+ return;
+ }
+
+ /* Retrieve our personal config setting */
+
+ $active = get_pconfig(local_user(), 'randplace', 'enable');
+
+ if(! $active)
+ return;
+ /**
+ *
+ * OK, we're allowed to do our stuff.
+ * Here's what we are going to do:
+ * load the list of timezone names, and use that to generate a list of world cities.
+ * Then we'll pick one of those at random and put it in the "location" field for the post.
+ *
+ */
+
+ $cities = array();
+ $zones = timezone_identifiers_list();
+ foreach($zones as $zone) {
+ if((strpos($zone,'/')) && (! stristr($zone,'US/')) && (! stristr($zone,'Etc/')))
+ $cities[] = str_replace('_', ' ',substr($zone,strpos($zone,'/') + 1));
+ }
+
+ if(! count($cities))
+ return;
+ $city = array_rand($cities,1);
+ $item['location'] = $cities[$city];
+
+ return;
+ }
+[/code]
+
+Now let's add our functions to create and store preference settings.
+[code]
+ /**
+ *
+ * Callback from the settings post function.
+ * $post contains the global $_POST array.
+ * We will make sure we've got a valid user account
+ * and that only our own submit button was clicked
+ * and if so set our configuration setting for this person.
+ *
+ */
+
+ function randplace_settings_post($a,$post) {
+ if(! local_user())
+ return;
+ if($_POST['randplace-submit'])
+ set_pconfig(local_user(),'randplace','enable',intval($_POST['randplace']));
+ }
+
+
+
+ /**
+ *
+ * Called from the Feature Setting form.
+ * The second argument is a string in this case, the HTML content region of the page.
+ * Add our own settings info to the string.
+ *
+ * For uniformity of settings pages, we use the following convention
+ * <div class="settings-block">
+ * <h3>title</h3>
+ * .... settings html - many elements will be floated...
+ * <div class="clear"></div> <!-- generic class which clears all floats -->
+ * <input type="submit" name="pluginnname-submit" class="settings-submit" ..... />
+ * </div>
+ */
+
+
+
+ function randplace_settings(&$a,&$s) {
+
+ if(! local_user())
+ return;
+
+ /* Add our stylesheet to the page so we can make our settings look nice */
+
+ head_add_css(/addon/randplace/randplace.css');
+
+ /* Get the current state of our config variable */
+
+ $enabled = get_pconfig(local_user(),'randplace','enable');
+
+ $checked = (($enabled) ? ' checked="checked" ' : '');
+
+ /* Add some HTML to the existing form */
+
+ $s .= '<div class="settings-block">';
+ $s .= '<h3>' . t('Randplace Settings') . '</h3>';
+ $s .= '<div id="randplace-enable-wrapper">';
+ $s .= '<label id="randplace-enable-label" for="randplace-checkbox">' . t('Enable Randplace Plugin') . '</label>';
+ $s .= '<input id="randplace-checkbox" type="checkbox" name="randplace" value="1" ' . $checked . '/>';
+ $s .= '</div><div class="clear"></div>';
+
+ /* provide a submit button */
+
+ $s .= '<div class="settings-submit-wrapper" ><input type="submit" name="randplace-submit" class="settings-submit" value="' . t('Submit') . '" /></div></div>';
+
+ }
+
+[/code]
+
+
+
+***Advanced Plugins***
+
+Sometimes your plugins want to provide a range of new functionality which isn't provided at all or is clumsy to provide using hooks. In this case your plugin can also act as a 'module'. A module in our case refers to a structured webpage handler which responds to a given URL. Then anything which accesses that URL will be handled completely by your plugin.
+
+The key to this is to create a simple function named pluginname_module() which does nothing.
+[code]
+ function randplace_module() { return; }
+[/code]
+Once this function exists, the URL #^[url=https://yoursite/randplace]https://yoursite/randplace[/url] will access your plugin as a module. Then you can define functions which are called at various points to build a webpage just like the modules in the mod/ directory. The typical functions and the order which they are called is
+[code]
+ modulename_init($a) // (e.g. randplace_init($a);) called first - if you wish to emit json or xml,
+ // you should do it here, followed by killme() which will avoid the default action of building a webpage
+ modulename_aside($a) // Often used to create sidebar content
+ modulename_post($a) // Called whenever the page is accessed via the "post" method
+ modulename_content($a) // called to generate the central page content. This function should return a string
+ // consisting of the central page content.
+[/code]
+Your module functions have access to the URL path as if they were standalone programs in the Unix operating system. For instance if you visit the page
+[code]
+ https://yoursite/randplace/something/somewhere/whatever
+[/code]
+we will create an argc/argv list for use by your module functions
+[code]
+ $x = argc(); $x will be 4, the number of path arguments after the sitename
+
+ for($x = 0; $x < argc(); $x ++)
+ echo $x . ' ' . argv($x);
+
+
+ 0 randplace
+ 1 something
+ 2 somewhere
+ 3 whatever
+[/code]
+
+***Porting Friendica Plugins***
+
+The Red Matrix uses a similar plugin architecture to the Friendica project. The authentication, identity, and permissions systems are completely different. Many Friendica can be ported reasonably easily by renaming a few functions - and then ensuring that the permissions model is adhered to. The functions which need to be renamed are:
+
+[li] Friendica's pluginname_install() is pluginname_load()[/li]
+
+[li] Friendica's pluginname_uninstall() is pluginname_unload()[/li]
+
+The Red Matrix has _install and _uninstall functions but these are used differently.
+
+[li] Friendica's "plugin_settings" hook is called "feature_settings"[/li]
+
+[li] Friendica's "plugin_settings_post" hook is called "feature_settings_post"[/li]
+
+Changing these will often allow your plugin to function, but please double check all your permission and identity code because the concepts behind it are completely different in the Red Matrix. Many structured data names (especially DB schema columns) are also quite different.
\ No newline at end of file diff --git a/doc/problems-following-an-update.bb b/doc/problems-following-an-update.bb new file mode 100644 index 000000000..bb2e07a07 --- /dev/null +++ b/doc/problems-following-an-update.bb @@ -0,0 +1,37 @@ +[b]Problems Following An Update[/b]
+
+A good 90% of all bugs encountered immediately after updating the code to the latest version are simple cache errors of one sort or another. If you update and find something very obvious is broken - like your matrix page doesn't load, notifications are missing, or comment boxes are missing - the chances are it's not a bug at all. Breaking basic functionality is the kind of thing developers tend to notice.
+
+If this happens to you, there are a few simple steps to take before resorting to the support forums:
+
+[b]Browser Cache[/b]
+
+Symptoms: Menus do not expand, ACL selector does not open, progress indicator does not display (or loops forever), Matrix and channel pages do not load.
+
+Force reload the page. Shift reload, or ctrl+f5. Occasionally, but very, very rarely, you will also need to clear the session data - which is achieved by restarting the browser.
+
+[b]FastCGI[/b]
+
+Symptoms: Incorrect variables. The basic UI mostly works, but displays incorrect content or is missing content entirely.
+
+If you're using php5-fpm, this problem is usually resolved with [code]service php5-fpm restart[/code]
+
+[b]Smarty Cache[/b]
+
+Symptoms:
+
+1) [zrl=https://beardyunixer.com/page/jargon/wsod]White Screen Of Death[/zrl]. This is most prevalent on the settings and admin pages.
+
+2) Missing icons, tabs, menus or features.
+
+We use the Smarty3 template engine to generate pages. These templates are compiled before they are displayed. Occasionally, a new or modified template will fail to overwrite the old compiled version. To clear the Smarty cache, delete all the files in view/tpl/smarty3/compiled [b]but do not delete the directory itself[/b]. Templates will then be recompiled on their next access.
+
+[b]Theme Issues[/b]
+
+There are many themes for The Red Matrix. Only Redbasic is officialy supported by the core developers. This applies [i]even if a core developer happens to support an additional theme[/i]. This means new features are only guaranteed to work in Redbasic.
+
+Redbasic uses a few javascript libraries that are done differently, or entirely absent in other themes. This means new features may only work properly in Redbasic. Before reporting an issue, therefore, you should switch to Redbasic to see if it exists there. If the issue goes away, this is not a bug - it's a theme that isn't up to date.
+
+Should you report an issue with the theme developers then? No. Theme developers use their themes. Chances are, they know. Give them two or three days to catch up and [i]then[/i] report the issue if it's still not fixed. There are two workarounds for this situation. Firstly, you can temporarily use Redbasic. Secondly, most themes are open source too - open a pull request and make yourself a friend.
+
+Return to the [url=[baseurl]/help/troubleshooting]Troubleshooting documentation page[/url]
\ No newline at end of file diff --git a/doc/profiles.bb b/doc/profiles.bb new file mode 100644 index 000000000..e9b1d5571 --- /dev/null +++ b/doc/profiles.bb @@ -0,0 +1,33 @@ +[b]Profiles[/b]
+
+Red has unlimited profiles. You may use different profiles to show different "sides of yourself" to different audiences. This is different to having different channels. Different channels allow for completely different sets of information. You may have a channel for yourself, a channel for your sports team, a channel for your website, or whatever else. A profile allows for finely graded "sides" of each channel. For example, your default public profile might say "Hello, I'm Fred, and I like laughing". You may show your close friends a profile that adds "and I also enjoy dwarf tossing".
+
+You always have a profile known as your "default" or "public" profile. This profile is always available to the general public and cannot be hidden (there may be rare exceptions on privately run or disconnected sites). You may, and probably should restrict the information you make available on your public profile.
+
+That said, if you want other friends to be able to find you, it helps to have the following information in your public profile...
+
+[li]Your real name or at least a nickname everybody knows[/li]
+[li]A photo of you[/li]
+[li]Your location on the planet, at least to a country level.[/li]
+
+Without this basic information, you could get very lonely here. Most people (even your best friends) will not try and connect with somebody that has a fake name or doesn't contain a real photo.
+
+In addition, if you'd like to meet people that share some general interests with you, please take a moment and add some "Keywords" to your profile. Such as "music, linux, photography" or whatever. You can add as many keywords as you like.
+
+To create an alternate profile, select "View Profile" from the menu of your Red Matrix site, then click on the pencil at your profile photo. You may edit an existing profile, change the profile photo, add things to a profile or create a new profile. You may also create a "clone" of an existing profile if you only wish to change a few items but don't wish to enter all the information again. To do that, click on the profile you want to clone and choose "Clone this profile" there.
+
+In the list of your profiles, you can also choose the contacts who can see a specific profile. Just click on "Edit visibility" next to the profile in question (only available for the profiles that are not your default profile) and then click on user images to add them to or remove them from the group of people who can see this profile.
+
+Once a profile has been selected, when the person views your profile, they will see the private profile you have assigned. If they are not authenticated, they will see your public profile.
+
+There is a setting which allows you to publish your profile to a directory and ensure that it can be found by others. You can change this setting on the "Settings" page.
+
+If you do not wish to be found be people unless you give them your channel address, you may leave your profile unpublished.
+
+[b]Keywords and Directory Search[/b]
+
+On the directory page, you may search for people with published profiles. The search is typically for your nickname or part of your full name. However this search will also match against other profile fields - such as gender, location, "about", work, and education. You may also include "Keywords" in your default profile - which may be used to search for common interests with other members. Keywords are used in the channel suggestion tool and although they aren't visible in the directory, they are shown if people visit your profile page.
+
+Directory searches are also able to use "boolean" logic so that you can search for "+lesbian +Florida" and find those who's sexual preference (or keywords) contain the world "lesbian" and that live in Florida. See the section on "Topical Tags" on the Tags-and-Mentions page for more information on performing boolean searches.
+
+On your Connnections page and in the directory there is a link to "Suggestions" or "Channel Suggestions", respectively. This will find channels who have matching and/or similar keywords. The more keywords you provide, the more relevant the search results that are returned. These are sorted by relevance.
\ No newline at end of file diff --git a/doc/red2pi.bb b/doc/red2pi.bb new file mode 100644 index 000000000..2abba8ec5 --- /dev/null +++ b/doc/red2pi.bb @@ -0,0 +1,349 @@ +[b]How to install the Red Matrix on a Raspberry Pi[/b]
+
+[zrl=[baseurl]/help/main] Back to the main page[/zrl]
+Last update 2014-02-22
+[hr]
+
+You just bought a Raspberry Pi and want to run the RED Matrix with your own domain name?
+
+Then this page is for you! You will:
+[list=1]
+[*] Install Raspberry OS (Debian Linux) on a Raspberry
+[*] Install Apache Web Server, PHP, MaySQL, phpMyAdmin
+[*] Register a free domain (dynamic DNS) and use it for your RED hub
+[*] Install the RED Matrix
+[*] Keep your Raspberry Pi and your Redmatrix up-to-date
+[*] TODO Running Friendica with SSL
+[*] TODO Make the webserver less vulnarable to attacks
+[/list]
+
+[size=large]1. Install Raspberry OS (Debian Linux)[/size]
+
+instructions under #^[url=http://www.raspberrypi.org/downloads]http://www.raspberrypi.org/downloads[/url]
+This page links to the quick start containing detailed instruction.
+
+[b]Format SD card[/b]
+
+using the programm gparted under Linux Mint 15
+
+format as FAT32
+
+[b]Download NOOBS (offline and network install)[/b]
+
+#^[url=http://downloads.raspberrypi.org/noobs]http://downloads.raspberrypi.org/noobs[/url]
+
+unzip
+
+copy unzipped files to SD card
+
+[b]Install Raspbian as OS on the Rasperry Pi[/b]
+
+connect with keyboard via USB
+
+connect with monitor via HDMI
+
+Insert SD card into Rasperry Pi
+
+Connect with power supply to switch on the Rasperry
+
+choose Raspbian as OS (> installs Raspbian....)
+
+wait for the coniguration program raspi-config (you can later start it by sudo raspi-config)
+
+[b]Configure Raspbian[/b]
+
+in raspi-config > advanced > choose to use ssh (!! You need this to connect to administrate your Pi from your PC !!)
+
+in raspi-config > change the password (of default user "pi" from "raspberry" to your password)
+
+in raspi-config (optional) > Internationalisation options > Change Locale > to de_DE.utf-8 utf-8 (for example)
+
+in raspi-config (optional) > Internationalisation options > Change Timezoe > set your timezone
+
+in raspi-config (optional) > Overlock > medium
+
+(Source #^[url=http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#]http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#[/url])
+
+
+[b]More[/b]
+
+[code]sudo reboot[/code]
+
+Now its time to connect the Pi to the network.
+[ul]
+[*] pull out keyboard
+[*] pull out monitor
+[*] you even can pull out the power supply (USB)
+[*] plug-in the network cable to the router
+[*] plug-in the power supply again
+[*] wait for a minute or to give the Pi time to boot and start ssh...
+[/ul]
+
+On your PC connect to the Pi to administrate (here update it).
+Open the console on the PC (Window: Start > cmd, Linux: Shell)
+
+Hint: use the router admin tool to find out the IP of your PI[code]ssh pi@192.168.178.37
+sudo apt-get update
+sudo apt-get dist-upgrade[/code]
+
+(Source #^[url=http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#]http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#[/url])
+
+
+
+[size=large]2. Install Apache Web Server, PHP, MaySQL, phpMyAdmin[/size]
+
+[b]Install Apache Webserver[/b]
+
+[code]sudo bash
+sudo groupadd www-data[/code] might exist already
+
+[code]sudo usermod -a -G www-data www-data
+sudo apt-get update
+sudo reboot[/code]
+
+wait...
+reconnect via ssh, example: [code]ssh pi@192.168.178.37
+sudo apt-get install apache2 apache2-doc apache2-utils[/code]
+
+Open webbrowser on PC and check #^[url=http://192.168.178.37]http://192.168.178.37[/url]
+Should show you a page like "It works"
+
+(Source #^[url=http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#]http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#[/url])
+
+
+[b]Install PHP, MaySQL, phpMyAdmin[/b]
+
+[code]sudo bash
+apt-get install libapache2-mod-php5 php5 php-pear php5-xcache php5-curl
+apt-get install php5-mysql
+apt-get install mysql-server mysql-client[/code] enter and note the mysql passwort
+
+[code]apt-get install phpmyadmin[/code]
+
+Configuring phpmyadmin
+- Select apache2
+- Configure database for phpmyadmin with dbconfig-common?: Choose Yes
+
+(Source #^[url=http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#]http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#[/url])
+
+
+[b]Test installation[/b]
+
+[code]cd /var/www[/code]
+
+create a php file to test the php installation[code]sudo nano phpinfo.php[/code]
+
+Insert into the file:[code]
+<?php
+ phpinfo();
+?>
+[/code]
+(save CTRL+0, ENTER, CTRL+X)
+
+open webbrowser on PC and try #^[url=http://192.168.178.37/phpinfo.php]http://192.168.178.37/phpinfo.php[/url] (page shows infos on php)
+
+connect phpMyAdmin with MySQL database [code]nano /etc/apache2/apache2.conf[/code]
+- CTRL+V... to the end of the file
+- Insert at the end of the file: (save CTRL+0, ENTER, CTRL+X)[code]Include /etc/phpmyadmin/apache.conf[/code]
+
+restart apache[code]/etc/init.d/apache2 restart
+sudo apt-get update
+sudo apt-get upgrade
+sudo reboot[/code]
+
+(Source #^[url=http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#]http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#[/url])
+
+
+[b]phpMyAdmin[/b]
+
+open webbrowser on PC and try #^[url=http://192.168.178.37/phpmyadmin]http://192.168.178.37/phpmyadmin[/url]
+
+(Source #^[url=http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#]http://www.manfred-steger.de/tuts/20-der-eigene-webserver-mit-dem-raspberry-pi#[/url])
+
+
+[b]Create an empty database... that is later used by RED[/b]
+
+open webbrowser on PC and try #^[url=http://192.168.178.37/phpmyadmin]http://192.168.178.37/phpmyadmin[/url]
+
+Create an empty database
+
+Note the access details (hostname, username, password, database name).
+
+
+[size=large]3. Selfhost[/size]
+
+(Source: #^[url=http://www.techjawab.com/2013/06/setup-dynamic-dns-dyndns-for-free-on.html]http://www.techjawab.com/2013/06/setup-dynamic-dns-dyndns-for-free-on.html[/url])
+
+#^[url=http://freedns.afraid.org/signup/]http://freedns.afraid.org/signup/[/url]
+
+[b]Step 1[/b]
+Register for a Free domain at #^[url=http://freedns.afraid.org/signup/]http://freedns.afraid.org/signup/[/url]
+(We will take techhome.homenet.org in this guide)
+
+[b]Step 2[/b]
+
+Logon to FreeDNS (where you just registered) and goto #^[url=http://freedns.afraid.org/dynamic/]http://freedns.afraid.org/dynamic/[/url]
+Right click on "Direct Link" and copy the URL and paste it somewhere.
+You should notice a large and unique alpha-numeric key in the URL, make a note of it as shown below:
+[code]http://freedns.afraid.org/dynamic/update.php?alphanumeric-key[/code]
+
+
+[b]Step 3[/b]
+Install inadyn using the following command:[code]sudo apt-get install inadyn[/code]
+
+[b]Step 4[/b]
+Configure inadyn using the below steps:[code]sudo nano /etc/inadyn.conf[/code]
+And add the following contains in it replacing the actual values:
+[code]
+--username [color=red]techhome[/color]
+--password [color=red]mypassword[/color]
+--update_period 3600
+--forced_update_period 14400
+--alias [color=red]techhome.homenet.org</b>,[color=red]alphanumeric key[/color]
+--background
+--dyndns_system default@freedns.afraid.org
+--syslog
+[/code]
+
+
+[b]Step 5[/b]
+
+Now, we need to ensure that the DNS updater (Inadyn) runs automatically after every re-boot[code]export EDITOR=gedit && sudo crontab -e[/code]
+Add the following line:[code]@reboot /usr/sbin/inadyn[/code]
+
+
+[b]Step 6[/b]
+
+Reboot system and then run the following command to ensure inadyn is running:[code]
+sudo reboot
+ps -A | grep inadyn
+[/code]
+Now your host is ready and up for accessing from internet...
+You can trying ssh-ing from another computer over the internet
+[code]ssh username@techhome.homenet.org[/code]
+Or, if any web server is running, then simply browse to #^[url=http://techhome.homenet.org]http://techhome.homenet.org[/url]
+Or, you can just ping it to test ping techhome.homenet.org
+To check the logs you can use this:
+[code]more /var/log/messages |grep INADYN[/code]
+
+
+[size=large]4. Install RED [/size]
+
+(Source: #^[zrl=https://friendicared.net/help/Install]https://friendicared.net/help/Install[/zrl])
+
+Linux Appache document root is /var/www/
+Two files exist there (created by the steps above): index.html, phpinfo.php
+
+
+[b]Install RED and its Addons[/b]
+
+Cleanup: Remove the directory www/ (Git will not create files and folders in directories that are not empty.) Make sure you are in directory var[code]pi@pi /var $ cd /var[/code]
+
+Remove directory[code]pi@pi /var $ sudo rm -rf www/[/code]
+
+Download the sources of RED from GIT
+[code]pi@pi /var $ sudo git clone https://github.com/friendica/red.git www[/code]
+
+Download the sources of the addons from GIT
+[code]pi@pi /var/www $ sudo git clone https://github.com/friendica/red-addons.git addon[/code]
+
+Make user www-data the owner of the whole red directory (including subdirectories and files)
+(TODO: This step has to be proofed by the next installation.)
+[code]pi@pi /var $ chown -R www-data:www-data /var/www/[/code]
+
+Check if you can update the sources from git[code]
+pi@pi /var $ cd www
+pi@pi /var/www $ git pull
+[/code]
+
+Check if you can update the addons
+[code]pi@pi /var/www $ cd addon/
+pi@pi /var/www/addon $ sudo git pull[/code]
+
+Make sure folder view/tpl/smarty3 exists and is writable by the webserver
+[code]pi@pi /var/www $ sudo chmod ou+w view/tpl/smarty3/[/code]
+
+Create .htconfig.php and is writable by the webserver
+[code]pi@pi /var/www $ sudo touch .htconfig.php
+pi@pi /var/www $ sudo chmod ou+w .htconfig.php[/code]
+
+Prevent search engines from indexing your site. Why? This can fill up your database.
+(Source: [url=http://wiki.pixelbits.de/redmatrix]Pixelbits[/url] )
+[code]pi@pi /var/www $ sudo touch robots.txt[/code]
+Open the file.
+[code]pi@pi /var/www $ sudo nano robots.txt[/code]
+Paste this text and save.
+[code]
+# Prevent search engines to index this site
+ User-agent: *
+ Disallow: /search
+[/code]
+
+
+[b]First start and initial configuration of your RED Matrix hub[/b]
+
+In browser open #^[zrl=http://einervonvielen.mooo.com/]http://einervonvielen.mooo.com/[/zrl]
+(Replace einervonvielen.mooo.com by your domain, see chapter selfhost. Be patient. It takes time.)
+(#^[zrl=http://einervonvielen.mooo.com/index.php?q=setup]http://einervonvielen.mooo.com/index.php?q=setup[/zrl])
+
+There might be errors like the following.
+
+Error: libCURL PHP module required but not installed.
+Solution:
+apt-get install php5-curl
+
+Error: Apache webserver mod-rewrite module is required but not installed.
+Solution
+(Source: #^[url=http://xmodulo.com/2013/01/how-to-enable-mod_rewrite-in-apache2-on-debian-ubuntu.html]http://xmodulo.com/2013/01/how-to-enable-mod_rewrite-in-apache2-on-debian-ubuntu.html[/url])
+The default installation of Apache2 comes with mod_rewrite installed. To check whether this is the case, verify the existence of /etc/apache2/mods-available/rewrite.load
+- pi@pi /var/www $ nano /etc/apache2/mods-available/rewrite.load
+ (You should find the contendt: LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so)
+To enable and load mod_rewrite, do the rest of steps.
+Create a symbolic link in /etc/apache2/mods-enabled
+- pi@pi /var/www $ sudo a2enmod rewrite
+Then open up the following file, and replace every occurrence of "AllowOverride None" with "AllowOverride all".
+- pi@pi /var/www $ sudo nano /etc/apache2/sites-available/default
+Finally, restart Apache2.
+- pi@pi /var/www $ sudo service apache2 restart
+
+Error store is writable (not checked)
+Solution:
+(TODO: Make writeable to group www-data only?)
+pi@pi /var/www $ sudo mkdir store
+pi@pi /var/www $ chown -R www-data:www-data /var/www/red/
+pi@pi /var/www $ sudo chmod ou+w view
+
+[b]More[/b]
+
+Set up a cron job to run the poller once every 15 minutes in order to perform background processing.
+- pi@pi /var/www $ which php
+Make sure you are in the document root directory of the webserver
+- pi@pi /var/www $ cd /var/www/
+Try to execute the poller in oder to make sure it works
+- pi@pi /var/www $ /usr/bin/php include/poller.php
+Create the cronjob
+- pi@pi /var/www $ crontab -e
+Enter
+- */15 * * * * cd /var/www/; /usr/bin/php include/poller.php
+- Save and exit.
+
+
+[size=large]5. Keep your Raspberry Pi and your Redmatrix up-to-date[/size]
+
+Git update of RED every day at 4 am and addons at 5 am every day
+Try if the command is working
+- pi@pi /var/www $ sudo git pull
+Create the cronjob
+- pi@pi /var/www $ crontab -e
+Enter the following to update RED at 4:01 am every day
+- 01 04 * * * cd /var/www/; sudo git pull
+Enter the following to update the addons at 5:01 am every day
+- 01 05 * * * cd /var/www/addon/; sudo git pull
+Enter the following to update the Raspberry Pi (Raspbian OS = Debian) at 6:01 am every day
+- 01 06 * * * sudo aptitude -y update && sudo aptitude -y safe-upgrade
+Save and exit.
+
+[size=large]6. Running Friendica with SSL[/size]
+
+Follow the instructions here:
+#^[url=https://github.com/friendica/friendica/wiki/Running-Friendica-with-SSL]https://github.com/friendica/friendica/wiki/Running-Friendica-with-SSL[/url]
\ No newline at end of file diff --git a/doc/remove_account.bb b/doc/remove_account.bb new file mode 100644 index 000000000..90ef1d7df --- /dev/null +++ b/doc/remove_account.bb @@ -0,0 +1,17 @@ +[b]Remove Account[/b]
+
+[b]Remove Account[/b]
+
+It is presently not possible to remove an account without asking your site administrator for assistance.
+
+[b]Remove Channel[/b]
+
+Visit the URL
+
+ [baseurl]/removeme
+
+You will need to confirm your password and the channel you are currently logged into will be removed.
+
+This is irreversible.
+
+If you have identity clones on other sites this only removes the channel instance which exists on this site.
\ No newline at end of file diff --git a/doc/schema_development.bb b/doc/schema_development.bb new file mode 100644 index 000000000..6b2c3d315 --- /dev/null +++ b/doc/schema_development.bb @@ -0,0 +1,74 @@ +[b]Red Development - A Guide To The Schema System[/b]
+
+A schema, in a nutshell, is a collection of settings for a bunch of variables to define
+certain elements of a theme. A schema is loaded as though it were part of config.php
+and has access to all the same information. Importantly, this means it is identity aware,
+and can be used to do some interesting things. One could, for example, restrict options
+by service class, or present different options to different members.
+
+By default, we filter only by whether or not expert mode is enabled. If expert mode is
+enabled, all options are presented to the member. If it is not, only scheme, background
+image, font face, and iconset are available as choices.
+
+A schema is loaded *after* the member's personal settings. Therefore, to allow a member
+to overwrite a particular aspect of a schema you would use the following syntax:
+[code]
+ if (! $foo)
+ $foo = 'bar';
+[/code]
+However, there are circumstances - particularly with positional elements - where it
+may be desirable (or necessary) to override a member's settings. In this case, the syntax
+is even simpler:
+[code]
+ $foo = 'bar';
+[/code]
+Members will not thank you for this, however, so only use it when it is required.
+
+If no personal options are set, and no schema is selected, we will first try to load a schema
+with the file name "default.php". This file should never be included with a theme. If it
+is, merge conflicts will occur as people update their code. Rather, this should be defined
+by administrators on a site by site basis.
+
+You schema does not need to - and should not - contain all of these values. Only the values
+that differ from the defaults should be listed. This gives you some very powerful options
+with very few lines of code.
+
+Note the options available differ with each theme. The options available with the Redbasic
+theme are as follows:
+
+[li] nav_colour
+ The colour of the navigation bar. Options are red, black and silver. Alternatively,
+ one can set $nav_bg_1, $nav_bg_2, $nav_bg_3 and $nav_bg_4 to provide gradient and
+ hover effects.[/li]
+[li] banner_colour
+ The font colour of the banner element. Accepts an RGB or Hex value.[/li]
+[li] bgcolour
+ Set the body background colour. Accepts an RGB or Hex value.[/li]
+[li] background_image
+ Sets a background image. Accepts a URL or path.[/li]
+[li] item_colour
+ Set the background colour of items. Accepts an RGB or Hex value.[/li]
+[li] item_opacity
+ Set the opacity of items. Accepts a value from 0.01 to 1[/li]
+[li] toolicon_colour
+ Set the colour of tool icons. Accepts an RGB or Hex value.[/li]
+[li] toolicon_activecolour
+ Set the colour of active or hovered icon tools.[/li]
+[li] font_size
+ Set the size of fonts in items and posts. Accepts px or em.[/li]
+[li] body_font_size
+ Sets the size of fonts at the body level. Accepts px or em.[/li]
+[li] font_colour
+ Sets the font colour. Accepts an RGB or Hex value.[/li]
+[li] radius
+ Set the radius of corners. Accepts a numeral, and is always in px.[/li]
+[li] shadow
+ Set the size of shadows shown with inline images. Accepts a numerical
+ value. Note shadows are not applied to smileys.[/li]
+[li] converse_width
+ Set the maximum width of conversations. Accepts px, or %.[/li]
+[li] nav_min_opacity[/li]
+[li] top_photo[/li]
+[li] reply_photo[/li]
+[li] sloppy_photos
+ Determins whether photos are "sloppy" or aligned. Set or unset (1 or '')[/li]
\ No newline at end of file diff --git a/doc/tags_and_mentions.bb b/doc/tags_and_mentions.bb new file mode 100644 index 000000000..0614a1e47 --- /dev/null +++ b/doc/tags_and_mentions.bb @@ -0,0 +1,23 @@ +[b]Tags And Mentions[/b]
+
+Like many other platforms, Red uses a special notation inside messages to indicate "tags" or contextual links to other entities.
+
+[b]Mentions[/b]
+
+Channels are tagged by simply preceding their name with the @ character. Unless their system blocks unsolicited "mentions", the person tagged will likely receive a "Mention" post/activity or become a direct participant in the conversation in the case of public posts.
+
+When you start to mention somebody, it will create an auto-complete box to select from your immediate connections. Select one as appropriate. Some connections will be displayed in different colours. A light blue entry (using the default theme) indicates a channel which will redeliver to others if tagged. This is generally a conversation group or forum. But be aware that when tagged, the message will also go to anybody they choose, in addition to anybody you choose.
+
+[b]Private Mentions[/b]
+
+If you wish to restrict a post to a single person or a number of people, you can do this by selecting channels or collections from the privacy tool. You can also just tag them with a privacy tag. A privacy tag is a name preceded by the two characters @! - and in addition to tagging these channels, will also change the privacy permissions of the post to include them (and perhaps restrict the post from "everybody" if this was the default). You can have more than one privacy tag, for instance @!bob and @!linda will send the post only to Bob and Linda (in addition to any recipients you selected with the privacy selector - if any).
+
+You may also tag public collections. When you create or edit a collection, there is a checkbox to allow the group members to be seen by others. If this box is checked for a collection and you tag (for instance) @!Friends - the post will be restricted to the Friends collection. Check that the collection is public before doing this - as there is no way to take back a post except to delete it. The collection name will appear in the post and will alert members of that collection that they are members of it.
+
+
+
+[b]Topical Tags[/b]
+
+Topical tags are indicated by preceding the tag name with the # character. This will create a link in the post to a generalised site search for the term provided. For example, #[zrl=https://friendicared.net/search?tag=cars]cars[/zrl] will provide a search link for all posts mentioning 'cars' on your site. Topical tags are generally a minimum of three characters in length. Shorter search terms are not likely to yield any search results, although this depends on the database configuration. The same rules apply as with names that spaces within tags are represented by the underscore character. It is therefore not possible to create a tag whose target contains an underscore.
+
+Topical tags are also not linked if they are purely numeric, e.g. #1. If you wish to use a numeric hashtag, please add some descriptive text such as #[zrl=https://friendicared.net/search?tag=2012-elections]2012-elections[/zrl].
\ No newline at end of file diff --git a/doc/to_do_code.bb b/doc/to_do_code.bb new file mode 100644 index 000000000..295095e87 --- /dev/null +++ b/doc/to_do_code.bb @@ -0,0 +1,51 @@ +[b]Project Code To-Do List[/b]
+
+We need much more than this, but here are areas where developers can help. Please edit this page when items are finished. Another place for developers to start is with the issues list.
+
+[li]Turn top-level Apps menu into an Apps page - which will probably require App plugins to have icons. Add documentation specifically to the plugin/addon documentation for creating apps. Add links to the App Store (which doesn't currently exist).[/li]
+
+[li]Documentation - see Red Documentation Project To-Do List[/li]
+
+[li]Infinite scroll to the directory pages[/li]
+
+[li]Finish the anti-spam bayesian engine[/li]
+
+[li]Integrate the "open site" list with the register page[/li]
+
+[li]Write more webpage layouts[/li]
+
+[li]Write more webpage widgets[/li]
+
+[li](Advanced) create a UI for building Comanche pages[/li]
+
+[li]templatise and translate the Web interface to webDAV[/li]
+
+[li]Extend WebDAV to provide desktop access to photo albums]/li]
+
+[li]service classes - provide a pluggable subscription payment gateway for premium accounts[/li]
+
+[li]service classes - account overview page showing resources consumed by channel. With special consideration this page can also be accessed at a meta level by the site admin to drill down on problematic accounts/channels.[/li]
+
+[li]Events module - bring back birthday reminders for friends, fix permissions on events, and provide JS translation support for the calendar overview; integrate with calDAV[/li]
+
+[li]Events module - event followups and RSVP[/li]
+
+[li]Uploads - integrate #^[url=https://github.com/blueimp/jQuery-File-Upload]https://github.com/blueimp/jQuery-File-Upload[/url][/li]
+
+[li]replace the tinymce visual editor and/or make the visual editor pluggable and responsive to different output formats. We probably want library/bbedit for bbcode. This needs a fair bit of work to catch up with our "enhanced bbcode", but start with images, links, bold and highlight and work from there.[/li]
+
+[li]Photos module - turn photos into normal conversations and fix tagging[/li]
+
+[li]Provide RSS feed support which look like channels (in matrix only - copyright issues)[/li]
+
+[li]Create mobile clients for the top platforms - which involves extending the API so that we can do stuff far beyond the current crop of Twitter/Statusnet clients. Ditto for mobile themes. We can probably use something like the Friendica Android app as a base to start from.[/li]
+
+[li]Activity Stream generation for liking things, liking channels and other combinations.[/li]
+
+[li]Implement owned and exchangeable "things".[/li]
+
+[li]Family Account creation - using service classes (an account holder can create a certain number of sub-accounts which are all tied to their subscription - if the subscription lapses they all go away).[/li]
+
+[li]Put mod_admin under Comanche[/li]
+
+In many cases some of the work has already been started and code exists so that you needn't start from scratch. Please contact one of the developer channels like Channel One (one@zothub.com) before embarking and we can tell you what we already have and provide some insights on how we envision these features fitting together.
\ No newline at end of file diff --git a/doc/to_do_doco.bb b/doc/to_do_doco.bb new file mode 100644 index 000000000..4505de31a --- /dev/null +++ b/doc/to_do_doco.bb @@ -0,0 +1,21 @@ +[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)
\ No newline at end of file diff --git a/doc/troubleshooting.bb b/doc/troubleshooting.bb new file mode 100644 index 000000000..ea7dbb11a --- /dev/null +++ b/doc/troubleshooting.bb @@ -0,0 +1,5 @@ +[b]Troubleshooting[/b]
+
+[li][zrl=[baseurl]/help/problems-following-an-update]Problems following an update[/zrl][/li]
+
+Return to the [url=[baseurl]/help/main]Main documentation page[/url]
\ No newline at end of file diff --git a/doc/webpages.bb b/doc/webpages.bb new file mode 100644 index 000000000..74760c8bf --- /dev/null +++ b/doc/webpages.bb @@ -0,0 +1,13 @@ +[b]Creating Web Pages[/b]
+
+Red enables users to create static webpages. To activate this feature, enable the web pages feature in your Additional Features section.
+
+Once enabled, a new tab will appear on your channel page labelled "Webpages". Clicking this link will take you to the webpage editor. Here you can create a post using either BBCode or the rich text editor.
+
+Pages will be accessible at mydomain/page/username/pagelinktitle
+
+The "page link title" box allows a user to specify the "pagelinktitle" of this URL. If no page link title is set, we will set one for you automatically, using the message ID of the item.
+
+Beneath the page creation box, a list of existing pages will appear with an "edit" link. Clicking this will take you to an editor, similar to that of the post editor, where you can make changes to your webpages.
+
+If you are the admin of a site, you can specify a channel whose webpages we will use at key points around the site. Presently, the only place this is implemented is the home page. If you specify the channel "admin" and then the channel called "admin" creates a webpage called "home", we will display it's content on your websites home page. We expect this functionality to be extended to other areas in future.
\ No newline at end of file diff --git a/doc/what_is_zot.bb b/doc/what_is_zot.bb new file mode 100644 index 000000000..a398a65a4 --- /dev/null +++ b/doc/what_is_zot.bb @@ -0,0 +1,61 @@ +[b]What is Zot?[/b]
+
+Zot is the protocol that powers the Red Matrix, providing three core capabilities: Communications, Identity, and Access Control.
+
+The functionality it provides can also be described as follows:
+
+ - a relationship online is just a bunch of permissions
+ - the internet is just another folder
+
+[b][color= grey][size=20]Communications[/size][/color][/b]
+
+Zot is a revolutionary protocol which provides [i]decentralised communications[/i] and [i]identity management[/i] across the matrix. The resulting platform can provide web services comparable to those offered by large corporate providers, but without the large corporate provider and their associated privacy issues, insatiable profit drive, and walled-garden mentality.
+
+Communications and social networking are an integral part of the matrix. Any channel (and any services provided by that channel) can make full use of feature-rich social communications on a global scale. These communications may be public or private - and private communications comprise not only fully encrypted transport, but also encrypted storage to help protect against accidental snooping and disclosure by rogue system administrators and internet service providers.
+
+Zot allows a wide array of background services in the matrix, from offering friend suggestions, to directory services. You can also perform other things which would typically only be possibly on a centralized provider - such as "Wall to Wall" posts. Priivate/multiple profiles can be easily created, and web content can be tailored to the viewer via the [i]Affinity Slider[/i].
+
+You won't find these features at all on other decentralized communication services. In addition to providing hub (server) decentralization, perhaps the most innovative and interesting Zot feature is its provision of [i]decentralized identity[/i] services.
+
+[b][color= grey][size=20]Identity[/size][/color][/b]
+
+Zot's identity layer is unique. It provides [i]invisible single sign-on[/i] across all sites in the matrix.
+
+It also provides [i]nomadic identity[/i], so that your communications with friends, family, and or anyone else you're communicating with won't be affected by the loss of your primary communication node - either temporarily or permanently.
+
+The important bits of your identity and relationships can be backed up to a thumb drive, or your laptop, and may appear at any node in the matrix at any time - with all your friends and preferences intact.
+
+Crucially, these nomadic instances are kept in sync so any instance can take over if another one is compromised or damaged. This protects you against not only major system failure, but also temporary site overloads and governmental manipulation or censorship.
+
+Nomadic identity, single sign-on, and Red's decentralization of hubs, we believe, introduce a high degree of degree of [i]resiliency[/i] and [i]persistence[/i] in internet communications, that are sorely needed amidst global trends towards corporate centralization, as well as mass and indiscriminate government surveillance and censorship.
+
+As you browse the matrix, viewing channels and their unique content, you are seamlessly authenticated as you go, even across completely different server hubs. No passwords to enter. Nothing to type. You're just greeted by name on every new site you visit.
+
+How does Zot do that? We call it [i]magic-auth[/i], because Red hides the details of the complexities that go into single sign-on logins, and nomadic identities, from the experience of browsing on the matrix. This is one of the design goals of Red: to increase privacy, and freedom on the web, while reducing the complexity and tedium brought by the need to enter new passwords and user names for every different sight that someone might visit online.
+
+You login only once on your home hub (or any nomadic backup hub you have chosen). This allows you to access any authenticated services provided anywhere in the matrix - such as shopping, blogs, forums, and access to private information. This is just like the services offered by large corporate providers with huge user databases; however you can be a member of this community, as well as a server on this network using a $35 Rasberry Pi. Your password isn't stored on a thousand different sites, or even worse, only on a few sites like Google and Facebook, beyond your direct control.
+
+You cannot be silenced. You cannot be removed from the matrix, unless you yourself choose to exit it.
+
+[b][color= grey][size=20]Access Control[/size][/color][/b]
+
+Zot's identity layer allows you to provide fine-grained permissions to any content you wish to publish - and these permissions extend across the Red Matrix. This is like having one super huge website made up of an army of small individual websites - and where each channel in the matrix can completely control their privacy and sharing preferences for any web resources they create.
+
+Currently, the matrix supports communications, photo albums, events, and files. This will be extended in the future to provide content management services (web pages) and cloud storage facilities, such as WebDAV and multi-media libraries. Every object and how it is shared and with whom is completely under your control.
+
+This type of control is available on large corporate providers such as Facebook and Google, because they own the user database. Within the matrix, there is no need for a huge user databaseon your machine - because the matrix [i]is[/i] your user database. It has what is essentially infinite capacity (limited by the total number of hubs online across the internet), and is spread amongst hundreds, and potentially millions of computers.
+
+Access can be granted or denied for any resource, to any channel, or any group of channels; anywhere within the matrix. Others can access your content if you permit them to do so, and they do not even need to have an account on your hub. Your private photos cannot be viewed, because permission really work; they are not an addon that was added as an afterthought. If you aren't on the list of allowed viewers for a particular photo, you aren't going to look at it.
+
+[b][color= grey][size=18]Additional Resources and Links[/size][/color][/b]
+
+For more detailed, technical information about Zot, check out the following links:
+
+ - [url=https://github.com/friendica/red/wiki/Zot---A-High-Level-Overview]A high level overview[/url]
+
+ - [url=https://github.com/friendica/red/wiki/zot]Zot development specification[/url]
+
+ - [url=https://github.com/friendica/red/blob/master/include/zot.php]Zot reference implementation in PHP[/url]
+
+
+Return to the [url=[baseurl]/help/main]Main documentation page[/url]
\ No newline at end of file |