Some doco work. Changed main.bb and added a return link to all .bb files and began planning new entries for user orientated documentation.

This commit is contained in:
root 2014-06-29 18:32:40 +02:00
parent 5df50c4a0b
commit a47971aefd
1306 changed files with 143807 additions and 40 deletions

4
doc/accounts.bb Normal file
View file

@ -0,0 +1,4 @@
This one still needs to be written.
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -0,0 +1,4 @@
This still needs to be written
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -1,2 +1,5 @@
* [zrl=[baseurl]/help/addons_gnusocial]Posting To Gnu Social[/zrl]
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -59,3 +59,6 @@ You now have several options to choose, if you desire, and those will need to be
If you don't choose this option, you will have an option to send a post to your GNUsocial instance by first opening the post (by clicking in the post text area) and clicking on the lock icon next to the Share button. Select the GNUsocial icon made up of three colored dialog baloons. Close that window, then make your post.
If all goes well, you have just cross-posted your RedMatrix post to your account on a GNUsocial instance.
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -127,4 +127,7 @@ Red proposed API extensions to the Twitter API
api/albums/permissions (R),J
api/albums/permissions/update (R),J
api/albums/destroy (R),J
api/friends/permissions (R),J
api/friends/permissions (R),J
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -65,7 +65,8 @@
<li>[rpost=title]Text to post[/rpost] The observer will be returned to their home hub to enter a post with the specified title and body. Both are optional <br />
<li>[qr]text to post[/qr] - create a QR code.<br />
<br>
Return to the <a href="/help/main">Main documentation page[/a]
</div>

View file

@ -231,4 +231,7 @@ Raising more than our initial goal of funds, will speed up our development effor
[b]12. I have additional Questions[/]
Awesome. We'd be more than happy to chat. You can find us {HERE}
Awesome. We'd be more than happy to chat. You can find us {HERE}
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -24,4 +24,7 @@ Once you have done this, your channel is ready to use. At [observer.url] you wil
The &quot;Matrix&quot; 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 &quot;Can write to my &quot;public&quot; file storage&quot; than a personal account. For more information, see the permissions section.
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 &quot;Can write to my &quot;public&quot; file storage&quot; than a personal account. For more information, see the permissions section.
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -23,4 +23,4 @@ Example:
[code]https://friendicared.net/photos/test2/upload/
[/code]
Return to the [url=[baseurl]/help/main]Main documentation page[/url]
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -22,4 +22,6 @@ 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 &quot;filestorage/{{username}}&quot;; 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 &quot;personal&quot; or &quot;private&quot; 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 &quot;family&quot; and &quot;friends&quot; with permission granted to appropriate collections of channels.
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 &quot;filestorage/{{username}}&quot;; 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 &quot;personal&quot; or &quot;private&quot; 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 &quot;family&quot; and &quot;friends&quot; with permission granted to appropriate collections of channels.
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -179,4 +179,6 @@ The 'comment' tag is used to delimit comments. These comments will not appear on
[widget]channel[/widget]
[/region]
[/code]
[/code]
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -14,4 +14,6 @@ You may also connect with any channel by visiting the &quot;Connections&quot; pa
[b]Premium Channels[/b]
Some channels are designated &quot;Premium Channels&quot; 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.
Some channels are designated &quot;Premium Channels&quot; 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.
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -26,4 +26,6 @@ For intitial server setup run
To install Red for domain example.com, after the initial server setup run
[code]bash setup-debian.sh red example.com[/code]
[code]bash setup-debian.sh red example.com[/code]
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -48,5 +48,5 @@ Returns the translated variant of $string for the current language or $string (d
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;
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -42,4 +42,6 @@ Returns the translated variant of $string for the current language or $string (d
[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;
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;
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -64,4 +64,4 @@ In the interests of consistency we adopt the following code styling. We may acce
[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]
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -19,3 +19,5 @@
[b]Utilities[/b]
[*][url=http://beardyunixer.com:1234/?p=debian-install-script.git;a=tree]Debian Install Script[/url]
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -100,4 +100,6 @@ Ability to mark special posts with a star indicator
[b]Tag Cloud[/b]
Provide a personal tag cloud on your channel page
Provide a personal tag cloud on your channel page
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -100,4 +100,6 @@ one shown, substituting for your unique paths and settings:
You can generally find the location of PHP by executing &quot;which php&quot;. 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.
assistance. Red will not work correctly if you cannot perform this step.
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -96,4 +96,6 @@ Oh, and don't forget to rename the _init function in /php/theme.php to be _init(
At that point, if you need to add javascript or css files, add them to /js or /css, and then &quot;register&quot; 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.
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.
Return to the [url=[baseurl]/help/main]Main documentation page[/url]

View file

@ -1,42 +1,48 @@
[b]Red Matrix Documentation and Resources[/b]
[img][baseurl]/assets/hashlogo.png[/img]
[b]Contents[/b]
[size=large][b]Red Matrix Documentation[/b][/size]
[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]
[zrl=[baseurl]/help/about][b]What is the Red Matrix?[/b][/zrl]
Red Matrix is a decentralized communication and publishing platform that enables you to keep in control of your communication needs by automatic encryption and finely grained access control. It's you, and only you who decides who is allowed to see your stuff.
[b]Using the Red Matrix[/b]
[zrl=[baseurl]/help/features][b]Red Matrix Features[/b][/zrl]
The Red Matrix is already running as a global distributed network and proves its versatility and scalability from standalone to huge sites on a daily basis.
Think of standalone family communication platforms, distributed online communities, support forums, blogs and homepages. Or professional content providers with commercial premium channels and targeted content acces. Whatever you want, the Red Matrix is there to cater your creativity.
[zrl=[baseurl]/help/account_basics]Account Basics[/zrl]
[zrl=[baseurl]/help/what_is_zot][b]Got Zot? Well, you should.[/b][/zrl]
Zot is the great new communicaton protocol invented especially for the Red Matrix. As a user you are no longer bound to a single hoster thanks to "Nomadic Identities". Migrate easily to another server and keep your contacts intact, or clone it and run the same channel on several servers. Just in case one of them might shut down, you don't lose out. Plus once you are inside the Red Matrix there is no need for you to authenticate twice, even when accessing another Red Matrix site. Zot is what sets the Red Matrix apart.
[size=large][b]Getting Started[/b][/size]
[zrl=[baseurl]/help/registration]Account Registration[/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]
[zrl=[baseurl]/help/remove_account]Remove Account[/zrl]
[b]But Wait - There's More. MUCH More...[/b]
[size=large][b]Using the Red Matrix[/b][/size]
[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/bbcode]BBcode reference for posts and comments[/zrl]
[zrl=[baseurl]/help/checking_account_quota_usage]Checking Account Quota Usage[/zrl]
[zrl=[baseurl]/help/cloud_desktop_clients]Cloud Desktop Clients[/zrl]
[zrl=[baseurl]/help/AdvancedSearch]Advanced Directory Search[/zrl]
[zrl=[baseurl]/help/addons]Help With Addons[/zrl]
[b]For Hub Administrators[/b]
[size=large][b]For Hub Administrators[/b][/size]
[zrl=[baseurl]/help/install]Install[/zrl]
[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]
[size=large][b]Technical Documentation[/b][/size]
[zrl=[baseurl]/help/install]Install[/zrl]
[zrl=[baseurl]/help/comanche]Comanche Page Descriptions[/zrl]
[zrl=[baseurl]/help/Creating-Templates]Creating Comanche Templates[/zrl]
[zrl=[baseurl]/help/Widgets]Core Widgets[/zrl]
@ -53,13 +59,13 @@
[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]
[size=large][b]External Resources[/b][/size]
[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]
[size=large][b]About This Red Matrix Site[/b][/size]
[zrl=[baseurl]/siteinfo] Site/Version Info[/zrl]
[zrl=[baseurl]/siteinfo] [baseurl]/siteinfo[/zrl]

41
doc/old/Account-Basics.md Normal file
View file

@ -0,0 +1,41 @@
Account Basics
==============
* [Home](help)
**Registration**
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.
*Your Email Address*
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.
*Password*
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.
*Terms Of Service*
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.
*Register*
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.
*Create a Channel*
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**
* [Permissions](help/Permissions)
* [Profiles](help/Profiles)
* [Remove Account](help/Remove-Account)

57
doc/old/AdvancedSearch.md Normal file
View file

@ -0,0 +1,57 @@
Advanced Directory Search
=========================
Advanced Directory Search is enabled in "Expert Mode" from your Settings => Additional features page.
On the Directory page an option named "Advanced" will apear in the "Find Channels" widget (typically in the sidebar). Clicking "Advanced" will open another search box for entering advanced search requests.
Advanced requests include
* name=xxx
[Channel name contains xxx]
* address=xxx
[Channel address (webbie) contains xxx]
* locale=xxx
[Locale (typically 'city') contains xxx]
* region=xxx
[Region (state/territory) contains xxx]
* postcode=xxx
[Postcode or zip code contains xxx]
* country=xxx
[Country name contains xxx]
* gender=xxx
[Gender contains xxx]
* marital=xxx
[Marital status contains xxx]
* sexual=xxx
[Sexual preference contains xxx]
* keywords=xxx
[Keywords contain xxx]
There are many reasons why a match may not return what you're looking for, as many channels do not provide detailed information in their default (public) profile, and many of these fields allow free-text input in several languages - and this may be difficult to match precisely. For instance you may have better results finding somebody in the USA with 'country=u' (along with some odd channels from Deutschland and Bulgaria and Australia) because this could be represented in a profile as US, U.S.A, USA, United States, etc...
Future revisions of this tool may try to smooth over some of these difficulties.
Requests may be joined together with 'and', 'or', and 'and not'.
Terms containing spaces must be quoted.
Example:
name="charlie brown" and country=canada and not gender=female

27
doc/old/Channels.md Normal file
View file

@ -0,0 +1,27 @@
**Channels**
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 https://yourdomain/channel/username 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.

53
doc/old/Cloud.md Normal file
View file

@ -0,0 +1,53 @@
Personal Cloud Storage
======================
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.
**File Attachments**
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 "filestorage/$channel_nickname" replacing $channel_nickname with the nickname you provided during channel creation.
**Web Access**
Your files are visible on the web at the location "cloud/$channel_nickname" 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.
**WebDAV access**
This varies by operating system.
*Windows*
In Windows, open the Windows Explorer (file manager) and type "$yoursite\cloud\$channel_nickname" into the address bar. Replace $yoursite with the URL to your Red Matrix hub and $channel_nickname with the nickname for your channel.
You will be prompted for a username and password. For the username, you may supply either your account email address (which will select the default channel), or a channel nickname for the channel you wish to authenticate as. In either case use your account password for the password field. You will then be able to copy, drag/drop, edit, delete and otherwise work with files as if they were an attached disk drive.
*Linux KDE*
Simply log in to your hub as normal using Konqueror. Once logged in, visit webdavs://$yoursite/cloud. No further authentication is required.
*Linux GNOME*
Open a File browsing window (that's Nautilus), Select File > Connect to server from the menu. Type davs://$yoursite/cloud/$channel_nickname and click Connect. You will be prompted for your username and password. For the username, you may supply either your account email address (which will select the default channel) or a channel nickname.
*See Also*
- [Linux - Mounting the cloud as a file system](help/dav_davfs2)
**Permissions**
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/$channel_nickname"; 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.

169
doc/old/Comanche.md Normal file
View file

@ -0,0 +1,169 @@
Comanche Page Description Language
==================================
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 three layout templates, unless your site provides additional layouts.
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.
choklet
The choklet template provides a number of fluid layout styles which can be specified by flavour:
(default flavour) - a two column layout similar to the "default" template, but more fluid
bannertwo - a two column layout with a banner region, compatible with the "default" template on small displays
three - three column layout (adds a "right_aside" region to the default template)
edgestwo - two column layout with fixed side margins
edgesthree - three column layout with fixed side margins
full - three column layout with fixed side margins and adds a "header" region beneath the navigation bar
To choose a layout template, use the "template" tag.
[template]full[/template]
To choose the "choklet" template with the "three" flavour:
[template=three]choklet[/template]
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.
$nav - replaced with the site navigation bar content.
$content - replaced with the main page content.
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.
[theme]apw[/theme]
This will select the theme named "apw". By default your channel's preferred theme will be used.
[theme=dark]redbasic[/theme]
This will select the theme named "redbasic" and load the "dark" theme schema for this theme.
**Regions**
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.
[region=aside]....content goes here....[/region]
[region=nav]....content goes here....[/region]
**Menus and Blocks**
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.
[menu]mymenu[/menu]
This places the menu called "mymenu" at this location on the page, which must be inside a region.
[menu=horizontal-menu]mymenu[/menu]
This places the menu called "mymenu" at this location on the page, which must be inside a region. Additionally it adds the CSS class "horizontal-menu" to this menu. This *may* result in a menu that looks different than the default menu style, *if* the css for the current theme defines a "horizontal-menu" class.
[block]contributors[/block]
This places a block named "contributors" in this region.
**Widgets**
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
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
Widgets and arguments are specified with the 'widget' and 'var' tags.
[widget=recent_visitors][var=count]24[/var][/widget]
This loads the "recent_visitors" widget and supplies it with the argument "count" set to "24".
**Comments**
The 'comment' tag is used to delimit comments. These comments will not appear on the rendered page.
[comment]This is a comment[/comment]
**Complex Example**
Please note that pasting this example into a layout page is not likely to do anything useful as the chosen names (template, theme, regions, etc.) may not correspond to any existing webpage components.
[comment]use an existing page template which provides a banner region plus 3 columns beneath it[/comment]
[template]3-column-with-header[/template]
[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]
[var=count]24[/var]
[var=names_only]1[/var]
[/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]

View file

@ -0,0 +1,91 @@
Creating Page Templates
=======================
A page template for use with Comanche requires two files - a PHP template and a CSS file. Page templates will need to be installed by the system administrator of your site.
First choose a name. Here we'll create a template and call it "demo".
You will need to create the files "view/php/demo.php" and "view/css/demo.css" to hold the PHP template and CSS respectively.
To get a better idea of this process, let's look at an existing template - the "default" template. This is used by default throughout the application.
view/php/default.php
====================
<!DOCTYPE html >
<html>
<head>
<title><?php if(x($page,'title')) echo $page['title'] ?></title>
<script>var baseurl="<?php echo $a->get_baseurl() ?>";</script>
<?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>
</head>
<body>
<?php if(x($page,'nav')) echo $page['nav']; ?>
<aside id="region_1"><?php if(x($page,'aside')) echo $page['aside']; ?></aside>
<section id="region_2"><?php if(x($page,'content')) echo $page['content']; ?>
<div id="page-footer"></div>
<div id="pause"></div>
</section>
<aside id="region_3"><?php if(x($page,'right_aside')) echo $page['right_aside']; ?></aside>
<footer><?php if(x($page,'footer')) echo $page['footer']; ?></footer>
</body>
</html>
Here's is the corresponding CSS file
view/php/default.css
====================
aside#region_1 {
display: block;
width: 210px;
position: absolute;
top: 65px;
left: 0;
margin-left: 10px;
}
aside input[type='text'] {
width: 174px;
}
section {
position: absolute;
top: 65px;
left: 250px;
display: block;
right: 15px;
padding-bottom: 350px;
}
Some things you may notice when looking at these definitions:
* We have not specified any CSS for the "nav", "right_aside", or "footer" regions. In this template "nav" and "footer" will be the full page width and we will let the size and placement of these elements be controlled by the theme. "right_aside" is not currently used.
* There are elements on the page such as "page-footer" and "pause" for which there is no apparent content. This content will come from Javascript elements.
* Our default template uses absolute positioning. Modern web design often uses "float" div containers so that scrollbars aren't typically needed when viewing on small-screen devices.
To design a new template, it is best to start with an existing template, and modify it as desired. That is what we will do here.
The way that Comanche provides content inside a specific region is by using a region tag.
[region=aside][widget=profile][/widget][/region]
This example will place a "profile" widget in the "aside" region. But what it actually does is place the HTML for the widget into a code variable **$page['aside']**. Our default page template defines a region on the page (the CSS positions this as an absolute sidebar) and then inserts the contents of $page['aside'] (if it exists).
So if you wanted to create a template with a region named "foo", you would provide a place for it on the page, then include the contents of $page['foo'] wherever you wanted to use it, and then using Comanche, you could specify
[region=foo][widget=profile][/widget][/region]
and this would place a profile widget into the "foo" region you created.
Use the CSS file to position the region on the page where desired and optionally control its size.
[To be continued]

78
doc/old/DerivedTheme1.md Normal file
View file

@ -0,0 +1,78 @@
Creating a Derived Theme
========================
**Lesson 1**
A derived theme takes most of the settings from its "parent" theme and lets you change a few things to your liking without creating an entire theme package.
To create a derived theme, first choose a name. For our example we'll call our theme 'mytheme'. Hopefully you'll be a bit more creative. But throughout this document, wherever you see 'mytheme', replace that with the name you chose.
**Directory Structure**
First you need to create a theme directory structure. We'll keep it simple. We need a php directory and a css directory. Here are the Unix/Linux commands to do this. Assume that 'mywebsite' is your top level Red Matrix folder.
cd mywebsite
mkdir view/theme/mytheme
mkdir view/theme/mytheme/css
mkdir view/theme/mytheme/php
Great. Now we need a couple of files. The first one is your theme info file, which describes the theme.
It will be called view/theme/mytheme/php/theme.php (clever name huh?)
Inside it, put the following information - edit as needed
<?php
/**
* * Name: Mytheme
* * Description: Sample Derived theme
* * Version: 1.0
* * Author: Your Name
* * Compat: Red [*]
*
*/
function mytheme_init(&$a) {
$a->theme_info['extends'] = 'redbasic';
}
Remember to rename the mytheme_init function with your theme name. In this case we will be extending the theme 'redbasic'.
Now create another file. We call this a PCSS file, but it's really a PHP file.
The file is called view/theme/mytheme/php/style.php
In it, put the following:
<?php
require_once('view/theme/redbasic/php/style.php');
echo @file_get_contents('view/theme/mytheme/css/style.css');
That's it. This tells the software to read the PCSS information for the redbasic theme first, and then read our CSS file which will just consist of changes we want to make from our parent theme (redbasic).
Now create the actual CSS file for your theme. Put it in view/theme/mytheme/css/style.css (where we just told the software to look for it). For our example, we'll just change the body background color so you can see that it works. You can use any CSS you'd like.
body {
background-color: #DDD;
}
You've just successfully created a derived theme. This needs to be enabled in the admin "themes" panel, and then anybody on the site can use it by selecting it in Settings->Display Settings as their default theme.

55
doc/old/Developers.md Normal file
View file

@ -0,0 +1,55 @@
Red Developer Guide
===================
**Here is how you can join us.**
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 [https://github.com/friendica/red.git](https://github.com/friendica/red.git).
Follow the instructions provided here: [http://help.github.com/fork-a-repo/](http://help.github.com/fork-a-repo/)
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.
**Translations**
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 [https://www.transifex.com/projects/p/red-matrix/](https://www.transifex.com/projects/p/red-matrix/) 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.
[Translations - More Info](help/Translations)
**Important**
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: [https://github.com/friendica/red/wiki](https://github.com/friendica/red/wiki).
**Licensing**
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.
**Coding Style**
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.
* All comments should be in English.
* We use doxygen to generate documentation. This hasn't been consistently applied, but learning it and using it are highly encouraged.
* Indentation is accomplished primarily with tabs using a tab-width of 4.
* String concatenation and operators should be separated by whitespace. e.g. "$foo = $bar . 'abc';" instead of "$foo=$bar.'abc';"
* 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.
* 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.
* 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.

View file

@ -0,0 +1,27 @@
External Resources
==================
**Third-Party Themes**
* [APW](https://github.com/beardy-unixer/apw)
* [Redstrap](https://github.com/omigeot/redstrap3)
* [Pluto](https://github.com/23n/Pluto)
* [clean](https://bitbucket.org/tobiasd/red-clean)
**Third-Party Addons**
* [BBCode Extensions for Webpages/Wikis](https://github.com/beardy-unixer/red-addons-extra)
* [ABCjs integration - display scores in posts (WIP)](https://abcentric.net/git/abcjsplugin.git)
**Related projects**
* [Redshare for Firefox](https://addons.mozilla.org/en-US/firefox/addon/redshare/)
* [Red for Android](https://github.com/cvogeley/red-for-android)
* [feed2red.pl (posts Atom/RSS feeds to channels)](https://github.com/zzottel/feed2red)
**Utilities**
* [Debian Install Script](https://github.com/beardy-unixer/lowendscript-ng)

107
doc/old/Features.md Normal file
View file

@ -0,0 +1,107 @@
Extra Features
==============
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](settings/features) link of your [Settings](settings) page.
**Content Expiration**
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.
**Multiple Profiles**
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.
**Web Pages**
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.
**Private Notes**
On pages where it is available (your matrix page and personal web pages) provide a "widget" to create and store personal reminders and notes.
**Enhanced Photo Albums**
Provides a photo album viewer that is a bit prettier than the normal interface.
**Extended Identity Sharing**
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.
**Expert Mode**
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.
**Premium Channel**
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.
**Richtext Editor**
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.
**Post Preview**
Allows previewing posts and comments exactly as they would look on the page before publishing them.
**Channel Sources**
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.
**Even More Encryption**
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".
**Search by Date**
This provides the ability to select posts by date ranges
**Collections Filter**
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".
**Saved Searches**
Provides a search widget on your matrix page which can save selected search terms for re-use.
**Personal Tab**
Enable tab to display only matrix posts that you've interacted with in some way, as an author or a contributor to the conversation.
**New Tab**
Enables a tab to display all new matrix activity as a firehose or timeline.
**Affinity Tool**
Filter matrix stream activity by the depth of your relationships
**Edit Sent Posts**
Edit and correct posts and comments after sending
**Tagging**
Ability to tag existing posts, including those written by others.
**Post Categories**
Add categories to your channel posts
**Saved Folders**
Ability to file posts under folders or tags for later recall
**Dislike Posts**
Ability to dislike posts/comments
**Star Posts**
Ability to mark special posts with a star indicator
**Tag Cloud**
Provide a personal tag cloud on your channel page

135
doc/old/Hooks.md Normal file
View file

@ -0,0 +1,135 @@
Hooks - Complete List
=====================
* 'about_hook'
* 'account_settings'
* 'app_menu'
* 'atom_author'
* 'atom_entry'
* 'atom_feed'
* 'atom_feed_end'
* 'authenticate'
* 'avatar_lookup'
* 'bb2diaspora'
* 'bbcode'
* 'channel_remove'
* 'check_account_email'
* 'check_account_invite'
* 'check_account_password'
* 'connect_premium'
* 'connector_settings'
* 'contact_block_end'
* 'contact_edit'
* 'contact_edit_post'
* 'contact_photo_menu'
* 'contact_select_options'
* 'conversation_start'
* 'cron'
* 'directory_item'
* 'display_item'
* 'display_item'
* 'display_settings'
* 'display_settings_post'
* 'enotify'
* 'enotify_mail'
* 'enotify_store'
* 'event_created'
* 'event_updated'
* 'feature_enabled'
* 'feature_settings'
* 'feature_settings_post'
* 'follow'
* 'gender_selector'
* 'get_all_perms'
* 'get_features'
* 'get_widgets'
* 'global_permissions'
* 'home_content'
* 'home_init'
* 'html2bbcode'
* 'import_directory_profile'
* 'init_1'
* 'item_photo_menu'
* 'item_translate'
* 'jot_networks'
* 'jot_tool'
* 'logged_in'
* 'login_hook'
* 'logging_out'
* 'magic_auth'
* 'magic_auth_success'
* 'main_slider'
* 'marital_selector'
* 'mood_verbs'
* 'network_content_init'
* 'network_ping'
* 'network_tabs'
* 'network_to_name'
* 'notifier_end'
* 'notifier_normal'
* 'obj_verbs'
* 'oembed_probe'
* 'page_content_top'
* 'page_end'
* 'page_header'
* 'parse_atom'
* 'parse_link'
* 'pdl_selector'
* 'perm_is_allowed'
* 'personal_xrd'
* 'photo_post_end'
* 'photo_post_end'
* 'photo_upload_begin'
* 'photo_upload_end'
* 'photo_upload_file'
* 'photo_upload_form'
* 'poke_verbs'
* 'post_local'
* 'post_local_end'
* 'post_local_start'
* 'post_mail'
* 'post_mail_end'
* 'post_remote'
* 'post_remote_end'
* 'post_remote_update'
* 'post_remote_update_end'
* 'prepare_body'
* 'prepare_body_final'
* 'prepare_body_init'
* 'proc_run'
* 'profile_advanced'
* 'profile_edit'
* 'profile_post'
* 'profile_sidebar'
* 'profile_sidebar_enter'
* 'profile_tabs'
* 'register_account'
* 'render_location'
* 'settings_account'
* 'settings_form'
* 'settings_post'
* 'sexpref_selector'
* 'smilie'
* 'validate_channelname'
* 'webfinger'
* 'zid'
* 'zid_init'
***General Module Hooks***
* $a->module . '_mod_aftercontent'
* $a->module . '_mod_aside'
* $a->module . '_mod_content'
* $a->module . '_mod_init'
* $a->module . '_mod_post'
***General Selector Hooks***
* $a->module . '_post_' . $selname
* $a->module . '_post_' . $selname
* $a->module . '_post_' . $selname
* $a->module . '_pre_' . $selname
* $a->module . '_pre_' . $selname
* $a->module . '_pre_' . $selname

111
doc/old/Install.md Normal file
View file

@ -0,0 +1,111 @@
Red Installation
===============
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 (https://github.com/friendica/red/issues). 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. Put some thought into this - because changing it is currently not-supported. Things will break, and some of your friends may have difficulty communicating with you. We plan to address this limitation in a future release.
Decide if you will use SSL and obtain an SSL certificate before software installation. You SHOULD use SSL. If you use SSL, you MUST use a "browser-valid" certificate. You MUST NOT use self-signed certificates!
Please test your certificate prior to installation. A web tool for testing your certificate is available at "http://www.digicert.com/help/". When visiting your site for the first time, please use the SSL ("https://") URL if SSL is available. This will avoid problems later. The installation routine will not allow you to use a non browser-valid certificate.
This restriction is incorporated because public posts from you may for example contain references to images on your own hub. If your certificate is not known by the internet browser of users they get a warning message complaining about some security issues. Although these complains are not the real truth - there are no security issues with your encryption! - the users may be confused, nerved or even worse may become scared about Red Matrix having security issues. Use one of the free certification instances!
1. Requirements
- Apache with mod-rewrite enabled and "Options 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 https://github.com/friendica/red.git 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 https://github.com/friendica/red-addons.git 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.

View file

@ -0,0 +1,105 @@
File system layout:
===================
[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. http://sitename/foo 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
The Database:
=============
* abook - contact table, replaces Friendica 'contact'
* account - service provider account
* addon - registered plugins
* attach - file attachments
* auth_codes - OAuth usage
* cache - TBD
* challenge - old DFRN structure, may re-use or may deprecate
* channel - replaces Friendica 'user'
* clients - OAuth usage
* config - main configuration storage
* event - Events
* fcontact - friend suggestion stuff
* ffinder - friend suggestion stuff
* fserver - obsolete
* fsuggest - friend suggestion stuff
* gcign - ignored friend suggestions
* gcontact - social graph storage, obsolete
* glink - social graph storage - obsolete
* group - privacy groups
* group_member - privacy groups
* hook - plugin hook registry
* hubloc - Red location storage, ties a location to an xchan
* intro - DFRN introductions, may be obsolete
* item - posts
* item_id - other identifiers on other services for posts
* mail - private messages
* manage - may be unused in Red, table of accounts that can "su" each other
* notify - notifications
* notify-threads - need to factor this out and use item thread info on notifications
* outq - Red output queue
* pconfig - personal (per channel) configuration storage
* photo - photo storage
* profile - channel profiles
* profile_check - DFRN remote auth use, may be obsolete
* queue - old Friendica queue, obsolete
* register - registrations requiring admin approval
* session - web session storage
* site - site table to find directory peers
* spam - unfinished
* term - item taxonomy (categories, tags, etc.) table
* tokens - OAuth usage
* verify - general purpose verification structure
* xchan - replaces 'gcontact', list of known channels in the universe
* xlink - "friends of friends" linkages derived from poco
* xprof - if this hub is a directory server, contains basic public profile info of everybody in the network
* xtag - if this hub is a directory server, contains tags or interests of everybody in the network
How to theme Red - by Olivier Migeot
====================================
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 <theme>.
Oh, and don't forget to rename the _init function in <theme>/php/theme.php to be <theme>_init() instead of redbasic_init().
At that point, if you need to add javascript or css files, add them to <theme>/js or <theme>/css, and then "register" them in <theme>_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/<theme>/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.

260
doc/old/Plugins.md Normal file
View file

@ -0,0 +1,260 @@
Creating Plugins/Addons for the Red Matrix
==========================================
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.
mkdir addon
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.
mkdir addon/randplace
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
addon/randplace/randplace.php
The very first line of this file needs to be
<?php
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
/**
*
* 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>
*
*/
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:
* pluginname_load()
* pluginname_unload()
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
* pluginname_install()
* pluginname_uninstall()
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.
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');
}
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.
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');
}
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.
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;
}
Now let's add our functions to create and store preference settings.
/**
*
* 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>';
}
***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.
function randplace_module() { return; }
Once this function exists, the URL https://yoursite/randplace 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
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.
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
https://yoursite/randplace/something/somewhere/whatever
we will create an argc/argv list for use by your module functions
$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
***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:
* Friendica's pluginname_install() is pluginname_load()
* Friendica's pluginname_uninstall() is pluginname_unload()
The Red Matrix has _install and _uninstall functions but these are used differently.
* Friendica's "plugin_settings" hook is called "feature_settings"
* Friendica's "plugin_settings_post" hook is called "feature_settings_post"
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.

36
doc/old/Profiles.md Normal file
View file

@ -0,0 +1,36 @@
Profiles
========
* [Home](help)
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...
* Your real name or at least a nickname everybody knows
* A photo of **you**
* Your location on the planet, at least to a country level.
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.
**Keywords and Directory Search**
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](help/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.

11
doc/old/README.md Normal file
View file

@ -0,0 +1,11 @@
![the Red Matrix](images/rm-480x115.png)
The RedMatrix (aka "red") is an open source webapp platform providing a complete **decentralised** publishing, sharing, and communications system. It combines communications (private messaging, chat and social networking), and media management (photos, events, files, web pages, app distribution) with enough features to make your head spin.
What makes the RedMatrix unique is what we call "magic authentication" - which is based on our groundbreaking work in decentralised identity services. This ties all RedMatrix sites and channels together into a single super-network where the boundaries between different websites are blurred or seemingly non-existent; where "who you are" has nothing to do with "what computer you're connected to", and where website content can adapt itself according to who is viewing it.
Warning: After experiencing magic authentication and nomadic identity, you may find it disconcerting and a bit "primitive" to go back to the old internet. You shouldn't need hundreds of different passwords to use the web ... or be totally isolated from your friends and family because a server or router in another country is having "*issues*".
For the average person, the biggest advantage of decentralised identity is that you decide who you want to share your stuff with, and if somebody isn't on your list, they're not going to see it. It's all under your control (we're big on privacy). Use the RedMatrix as a social network or a business website or for personal cloud storage or media publishing - or any number of other uses; limited only by your imagination.
The Red Matrix is free and open source distributed under the MIT license.

23
doc/old/Remove-Account.md Normal file
View file

@ -0,0 +1,23 @@
Remove Account
==============
It is presently not possible to remove an account without asking your site administrator for assistance.
We'll have better doco when somebody finishes that bit.
Remove Channel
==============
Visit the URL
https://yoursite/removeme
(replace 'yoursite' with the domain name of your Red Matrix site).
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.

View file

@ -0,0 +1,76 @@
Red development - a guide to the schema system
==============================================
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:
if (! $foo)
$foo = 'bar';
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:
$foo = 'bar';
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:
* 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.
* banner_colour
The font colour of the banner element. Accepts an RGB or Hex value.
* bgcolour
Set the body background colour. Accepts an RGB or Hex value.
* background_image
Sets a background image. Accepts a URL or path.
* item_colour
Set the background colour of items. Accepts an RGB or Hex value.
* item_opacity
Set the opacity of items. Accepts a value from 0.01 to 1
* toolicon_colour
Set the colour of tool icons. Accepts an RGB or Hex value.
* toolicon_activecolour
Set the colour of active or hovered icon tools.
* font_size
Set the size of fonts in items and posts. Accepts px or em.
* body_font_size
Sets the size of fonts at the body level. Accepts px or em.
* font_colour
Sets the font colour. Accepts an RGB or Hex value.
* radius
Set the radius of corners. Accepts a numeral, and is always in px.
* shadow
Set the size of shadows shown with inline images. Accepts a numerical
value. Note shadows are not applied to smileys.
* converse_width
Set the maximum width of conversations. Accepts px, or %.
* nav_min_opacity
* top_photo
* reply_photo
* sloppy_photos
Determins whether photos are "sloppy" or aligned. Set or unset (1 or '')

View file

@ -0,0 +1,24 @@
Tags and Mentions
=================
Like many other platforms, Red uses a special notation inside messages to indicate "tags" or contextual links to other entities.
**Mentions**
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.
**Private Mentions**
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.
**Topical Tags**
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, #cars 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 numerica hashtag, please add some descriptive text such as #2012-elections.

View file

@ -0,0 +1,4 @@
Terms of Service
================
#include doc/SiteTOS.md;

62
doc/old/To-Do-Code.md Normal file
View file

@ -0,0 +1,62 @@
Project Code To-Do List
=======================
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.
* Documentation - see [Red Documentation Project To-Do List](help/To-Do)
* Infinite scroll to the directory pages
* Finish the anti-spam bayesian engine
* Integrate the "open site" list with the register page
* implement oembed provider interface
* implement openid server interface
* Write more webpage layouts
* Write more webpage widgets
* (Advanced) create a UI for building Comanche pages
* External post connectors - create standard interface
* External post connectors, add popular services
* templatise and translate the Web interface to webDAV
* Extend WebDAV to provide desktop access to photo albums
* service classes - provide a pluggable subscription payment gateway for premium accounts
* 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.
* Events module - fix permissions on events, and provide JS translation support for the calendar overview; integrate with calDAV
* Events module - event followups and RSVP
* Uploads - integrate https://github.com/blueimp/jQuery-File-Upload
* App taxonomy
* 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.
* Photos module - turn photos into normal conversations and fix tagging
* Provide RSS feed support which look like channels (in matrix only - copyright issues)
* 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.
* Implement owned and exchangeable "things".
* 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).
* Put mod_admin under Comanche
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.

23
doc/old/To-Do.md Normal file
View file

@ -0,0 +1,23 @@
Documentation we need to write
==============================
* 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)

91
doc/old/Translations.md Normal file
View file

@ -0,0 +1,91 @@
Translating the Red Matrix
==========================
Translation Process
-------------------
The strings used in the UI of Red is translated at [Transifex][1] and then
included in the git repository at github. If you want to help with translation
for any language, be it correcting terms or translating Red to a
currently not supported language, please register an account at transifex.com
and contact the Red translation team there.
Translating Red is simple. Just use the online tool at transifex. If you
don't want to deal with git & co. that is fine, we check the status of the
translations regularly and import them into the source tree at github so that
others can use them.
We do not include every translation from transifex in the source tree to avoid
a scattered and disturbed overall experience. As an uneducated guess we have a
lower limit of 50% translated strings before we include the language. This
limit is judging only by the amount of translated strings under the assumption
that the most prominent strings for the UI will be translated first by a
translation team. If you feel your translation useable before this limit,
please contact us and we will probably include your teams work in the source
tree.
If you want to get your work into the source tree yourself, feel free to do so
and contact us with and question that arises. The process is simple and
Red ships with all the tools necessary.
The location of the translated files in the source tree is
/view/LNG-CODE/
where LNG-CODE is the language code used, e.g. de for German or fr for French.
For the email templates (the *.tpl files) just place them into the directory
and you are done. The translated strings come as a "messages.po" file from
transifex which needs to be translated into the PHP file Red uses. To do
so, place the file in the directory mentioned above and use the "po2php"
utility from the util directory of your Red installation.
Assuming you want to convert the German localization which is placed in
view/de/messages.po you would do the following.
1. Navigate at the command prompt to the base directory of your
Red installation
2. Execute the po2php script, which will place the translation
in the strings.php file that is used by Red.
$> php util/po2php.php view/de/messages.po
The output of the script will be placed at view/de/strings.php where
froemdoca os expecting it, so you can test your translation mmediately.
3. Visit your Red page to check if it still works in the language you
just translated. If not try to find the error, most likely PHP will give
you a hint in the log/warnings.about the error.
For debugging you can also try to "run" the file with PHP. This should
not give any output if the file is ok but might give a hint for
searching the bug in the file.
$> php view/de/strings.php
4. commit the two files with a meaningful commit message to your git
repository, push it to your fork of the Red repository at github and
issue a pull request for that commit.
Utilities
---------
Additional to the po2php script there are some more utilities for translation
in the "util" directory of the Red source tree. If you only want to
translate Red into another language you wont need any of these tools most
likely but it gives you an idea how the translation process of Red
works.
For further information see the utils/README file.
Known Problems
--------------
* Red uses the language setting of the visitors browser to determain the
language for the UI. Most of the time this works, but there are some known
quirks.
* the early translations are based on the friendica translations, if you
some rough translations please let us know or fix them at Transifex.
Links
------
[1]: http://www.transifex.com/projects/p/red-matrix/

14
doc/old/Webpages.md Normal file
View file

@ -0,0 +1,14 @@
Creating Webpages
=================
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.

81
doc/old/Widgets.md Normal file
View file

@ -0,0 +1,81 @@
Core Widgets
============
Some/many of these widgets have restrictions which may restrict the type of page where they may appear or may require login
* clock - displays the current time
* args: military (1 or 0) - use 24 hour time as opposed to AM/PM
<br />&nbsp;<br />
* profile - displays a profile sidebar on pages which load profiles (pages with nickname in the URL)
* tagcloud - display a tagcloud of webpage items
* args: count - number of items to return (default 24)
<br />&nbsp;<br />
* collections - collection selector for the current logged in channel
* args: mode - one of "conversation", "group", "abook" depending on module
<br />&nbsp;<br />
* suggestions - friend suggestions for the current logged on channel
* follow - presents a text box for following another channel
* notes - private notes area for the current logged in channel if private_notes feature is enabled
* savedsearch - network/matrix search with save - must be logged in and savedsearch feature enabled
* filer - select filed items from network/matrix stream - must be logged in
* archive - date range selector for network and channel pages
* args: 'wall' - 1 or 0, limit to wall posts or network/matrix posts (default)
<br />&nbsp;<br />
* fullprofile - same as profile currently
* categories - categories filter (channel page)
* tagcloud_wall - tagcloud for channel page only
* affinity - affinity slider for network page - must be logged in
* settings_menu - sidebar menu for settings page, must be logged in
* mailmenu - sidebar menu for private message page - must be logged in
* design_tools - design tools menu for webpage building pages, must be logged in
* findpeople - tools to find other channels
* photo_albums - list photo albums of the current page owner with a selector menu
* vcard - mini profile sidebar for the person of interest (page owner, whatever)
* dirsafemode - directory selection tool - only on directory pages
* dirsort - directory selection tool - only on directory pages
* dirtags - directory tool - only on directory pages
* menu_preview - preview a menu - only on menu edit pages
* chatroom_list - list of chatrooms for the page owner
* bookmarkedchats - list of bookmarked chatrooms collected on this site for the current observer
* suggestedchats - "interesting" chatrooms chosen for the current observer
* item - displays a single webpage item by mid
* args: mid - message_id of webpage to display
<br />&nbsp;<br />
* photo - display a single photo
* args:
* url - URL of photo, must be http or https
* zrl - use zid authenticated link
* style - CSS style string
<br />&nbsp;<br />

View file

@ -0,0 +1,107 @@
# Zot - A High Level Overview
Here's a high level description of how zot works.
In this example, "Indigo" is going to send a public message from his website at "podunk.edu". "Nickordo" is a recipient on another site ("example.com").
Indigo first posts his message at podunk.edu. podunk.edu looks up who should receive the message and finds Nickordo. Nickordo usually posts from example.com so we add that destination to our list of recipients. We may also add other destinations for nickordo and anybody else that is following Indigo's posts.
In this example we find that we only have one known recipient at one known location.
We send a packet to example.com:
{
"type":"notify",
"sender":{
"guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA",
"guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q",
"url":"http:\/\/podunk.edu",
"url_sig":"T8Bp7j5DHHhQDCFcAHXfuhUfGk2P3inPbImwaXXF1xJd3TGgluoXyyKDx6WDm07x0hqbupoAoZB1qBP3_WfvWiJVAK4N1FD77EOYttUEHZ7L43xy5PCpojJQmkppGbPJc2jnTIc_F1vvGvw5fv8gBWZvPqTdb6LWF6FLrzwesZpi7j2rsioZ3wyUkqb5TDZaNNeWQrIEYXrEnWkRI_qTSOzx0dRTsGO6SpU1fPWuOOYMZG8Nh18nay0kLpxReuHCiCdxjXRVvk5k9rkcMbDBJcBovhiSioPKv_yJxcZVBATw3z3TTE95kGi4wxCEenxwhSpvouwa5b0hT7NS4Ay70QaxoKiLb3ZjhZaUUn4igCyZM0h6fllR5I6J_sAQxiMYD0v5ouIlb0u8YVMni93j3zlqMWdDUZ4WgTI7NNbo8ug9NQDHd92TPmSE1TytPTgya3tsFMzwyq0LZ0b-g-zSXWIES__jKQ7vAtIs9EwlPxqJXEDDniZ2AJ6biXRYgE2Kd6W_nmI7w31igwQTms3ecXe5ENI3ckEPUAq__llNnND7mxp5ZrdXzd5HHU9slXwDShYcW3yDeQLEwAVomTGSFpBrCX8W77n9hF3JClkWaeS4QcZ3xUtsSS81yLrp__ifFfQqx9_Be89WVyIOoF4oydr08EkZ8zwlAsbZLG7eLXY"
},
"callback":"\/post",
"version":1,
"secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467"
}
This packet says the following:
I'm Indigo and here is proof. I'm posting from podunk.edu and here is proof. I've got a package for you. The tracking number is "1eaa6613....".
Example.com accepts this packet and says "whoa, hold on - I don't know you. I want to prove who you are." So Example.com connects to podunk.edu through a "well-known URL" that we use for this purpose and looks up the "guid" mentioned above. It should return a bunch of information, one item of which is a public key. Example.com uses this key to verify the signatures in the message to verify that indeed there is a person named Indigo at podunk.edu. We only need to do this once. (Note that Indigo can post from any location. All we have to do is prove that it's Indigo and that Indigo can prove that he's posting from another site.)
Then example.com disconnects and flags that there's a message waiting at podunk.edu. Either immediately, or whenever the urge hits (depending on how important Indigo is to anybody on this site), example.com "calls" podunk.edu. It says something like this:
{
"type":"pickup",
"url":"http:\/\/example.com",
"callback_sig":"teE1_fLIqfyeCuZY4iS7sNU8jUlUuqYOYBiHLarkC99I9K-uSr8DAwVW8ZPZRK-uYdxRMuKFb6cumF_Gt9XjecCPBM8HkoXHOi_VselzJkxPwor4ZPtWYWWaFtRfcAm794LrWjdz62zdESTQd2JJIZWbrli1sUhK801BF3n0Ye6-X1MWhy9EUTVlNimOeRipcuD_srMhUcAXOEbLlrugZ8ovy2YBe6YOXkS8jj0RSFjsOduXAoVhQmNpcobSYsDvaQS3e3MvE6-oXE602zGQhuNLr7DIMt9PCdAeQo-ZM-DHlZGCkGk4O2oQFCXFzGPqLUMWDACGJfTfIWGoh_EJqT_SD5b_Yi_Wk9S1lj7vb-lmxe5JuIf7ezWzHoBT8vswnZxPYlidH2i9wapdzij9il_qqcCWWHIp7q_XkY_Zj52Z4r4gdmiqM-8y1c_1SDX7hrJFRwqL_PKFbEvyi5nMWTEzqp55Tay5Woiv19STK_H_8ufFfD9AOkYnk6rIOMsk9dn3a5tAFpDRyRndXkBWAXwiJjiND2zjue7BFu7Ty40THXcfYRh1a5XrAXcaGeYuagg-8J9tAufu9_LY3qGazFg8kRBVMOn4M8DRKSIhKj7z4MnbYL0s09gREojy4jqWO3VkaOjP2jUGzoPuUDLasudE1ehWFq0K_MTQNavgmp8",
"callback":"http:\/\/example.com\/post",
"secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467",
"secret_sig":"O7nB4_UJHBXi28Suwl9LBZF9hI_9KGVTgehnUlWF1oYMNRnBbVHB9lzUfAoalvp3STbU3xJbtD_S58tv6MfV7J5j2V_S1W5ex3dulmDGB8Pt_7Fe5mbEPmjQFcfv3Eg5dUjYIuDl0TDScfrHyImj7RZIWHbwd7wWVoMzzDa_o33klpYmKZCBvObCh55bRrlFkXZs_dRuOiPwkfX0C6_XES4OyOIYl45V30rdhmf-STrf4L9dKYy_axQ12RIwRcKychvVLwlUJn3bn9lgNXRRU_HTne-09OPcJbUOdcD3DkFoKOxMULBNKPHzsCau0ICYug7S0EP6LpCom_mW78s08LyVA1vYeFZjevBCiGecj57yIAQDYi6_rpWJfihYaWHRN0oqtScUR4Bdf0bQbEHxMs4zAtrOAxfyJCbi6U1pfnGgzXzB9ulOYGnVGNTF7Ey4K7FOZIBtk0ILY2JfvBUaVvVs8ttagOOHmhWhnbCvrnOFlkNdlce7zoJCSUJENUOCYmTRfwB_Jno5fAzRnrsYU3_Z-l1mzniU_OmUPz8mPEh7PwhkqAiVlyaM-q15gn7l2lAIDk9kp2X_iCme7v4V0ADN_DbpaI_0-6mPw5HLbKrCsA-sxlSMB4DO4lDCHYkauj0l25sbfroRWB_hax1O4Q0oWyOlVJLUqEC5nuUJCCE"
}
What this message says is: This is example.com, I have proof, and I'm here to pick up a package. Here's the tracking number, and here's proof that this is the tracking number you presumably sent to example.com.
Good enough. Podunk.edu checks out the story and indeed, it is example.com, and yes, there's a package waiting with that tracking number. Here's the package...
{
"success":1,
"pickup":{
"notify":{
"type":"notify",
"sender":{
"guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA",
"guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q",
"url":"http:\/\/z.podunk.edu",
"url_sig":"T8Bp7j5DHHhQDCFcAHXfuhUfGk2P3inPbImwaXXF1xJd3TGgluoXyyKDx6WDm07x0hqbupoAoZB1qBP3_WfvWiJVAK4N1FD77EOYttUEHZ7L43xy5PCpojJQmkppGbPJc2jnTIc_F1vvGvw5fv8gBWZvPqTdb6LWF6FLrzwesZpi7j2rsioZ3wyUkqb5TDZaNNeWQrIEYXrEnWkRI_qTSOzx0dRTsGO6SpU1fPWuOOYMZG8Nh18nay0kLpxReuHCiCdxjXRVvk5k9rkcMbDBJcBovhiSioPKv_yJxcZVBATw3z3TTE95kGi4wxCEenxwhSpvouwa5b0hT7NS4Ay70QaxoKiLb3ZjhZaUUn4igCyZM0h6fllR5I6J_sAQxiMYD0v5ouIlb0u8YVMni93j3zlqMWdDUZ4WgTI7NNbo8ug9NQDHd92TPmSE1TytPTgya3tsFMzwyq0LZ0b-g-zSXWIES__jKQ7vAtIs9EwlPxqJXEDDniZ2AJ6biXRYgE2Kd6W_nmI7w31igwQTms3ecXe5ENI3ckEPUAq__llNnND7mxp5ZrdXzd5HHU9slXwDShYcW3yDeQLEwAVomTGSFpBrCX8W77n9hF3JClkWaeS4QcZ3xUtsSS81yLrp__ifFfQqx9_Be89WVyIOoF4oydr08EkZ8zwlAsbZLG7eLXY"
},
"callback":"\/post",
"version":1,
"secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467"
},
"message":{
"message_id":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu",
"message_top":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu",
"message_parent":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu",
"created":"2012-11-20 04:04:16",
"edited":"2012-11-20 04:04:16",
"title":"",
"body":"Hi Nickordo",
"app":"",
"verb":"post",
"object_type":"",
"target_type":"",
"permalink":"",
"location":"",
"longlat":"",
"owner":{
"name":"Indigo",
"address":"indigo@podunk.edu",
"url":"http:\/\/podunk.edu",
"photo":{
"mimetype":"image\/jpeg",
"src":"http:\/\/podunk.edu\/photo\/profile\/m\/5"
},
"guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA",
"guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q"
},
"author":{
"name":"Indigo",
"address":"indigo@podunk.edu",
"url":"http:\/\/podunk.edu",
"photo":{
"mimetype":"image\/jpeg",
"src":"http:\/\/podunk.edu\/photo\/profile\/m\/5"
},
"guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA",
"guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q"
}
}
}
}
And that's the package (the original message). Example.com converts this into a form suitable for viewing by Nickordo and notifies Nickordo that there's a new message. Podunk.edu **might** discover that there are other packages waiting for example.com. If this happens it may also send any and all other waiting packages at this time. Each has the original tracking number attached.

24
doc/old/about.bb Normal file
View file

@ -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 (or channel as we call it) 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[i]*[/i], and messages[i]*[/i] will automagically continue to be available and accessible under your cloned channel. [i](*: only posts and messages as from the moment you cloned your channel)[/i]
[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]

33
doc/old/account_basics.bb Normal file
View file

@ -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 &quot;Register&quot; 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 &quot;Add a channel&quot; 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 &quot;choose a short nickname&quot; box is similar to a &quot;username&quot; 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]

2
doc/old/addons.bb Normal file
View file

@ -0,0 +1,2 @@
* [zrl=[baseurl]/help/addons_gnusocial]Posting To Gnu Social[/zrl]

View file

@ -0,0 +1,61 @@
[b]How to cross-post to a GNUsocial instance[/b]
Start on the GNUSocial instance where you have your account.
In the GNUSocial instance, go to Settings > Connections. In the right column under "Developers," click the link to "Register an OAuth client application to use with this instance of StatusNet." This link may be found at your instance here:
https://yourgnusocialinstance.org/settings/oauthapps
Next, click the link to Register a new application. That brings up the new application form. Here's what to do on each field.
Icon. I uploaded the RedMatrix icon located at this link, after saving it to my computer:
https://github.com/friendica/red/blob/master/images/rm-32.png
Name. Give the application an appropriate name. I called mine redmatrix. You might prefer r2g.
Description. Use this field to describe the purpose of the application. I put something to the effect of use for crossposting from RedMatrix to GNUsocial.
Source URL. Put the main domain name of the Red site you're using. Don't forget to put the "s" in https://yourredmatrixsite.com. If your Red installation is a subdomain, that would probably be called for.
Organization. Since RedMatrix is unorganized, I put that. If you use your installation for a group or business, that might be a good option.
Homepage. If your group is using a subdomain, you probably want to put your main domain URI here. Since I'm on a hosted site, I put redmatrix.me.
Callback URL. Leave blank.
Type of application: select "desktop."
Default access: select "Read-write."
All fields except the callback URL must be filled in.
Click on the save button.
Then click on the icon or the name of the application for the information you'll need to insert over on RedMatrix.
*****
Now open up a new tab or window and go to your RedMatrix account, to Settings > Feature settings. Find the StatusNet Posting Settings.
Insert the strings of numbers given on the GNUsocial site into the RedMatrix fields for Consumer Key and Consumer Secret.
The Base API Path (remember the trailing /) will be your instance domain, plus the /api/ following. It will probably look like this:
https://yourgnusocialinstance.org/api/
In case of doubt check on your GNUsocial instance site in order to find the domain URLs of the Request token, Access token, and Authorization. It will be the first part of the domains, minus the /oauth/....
StatusNet application name: Insert the name you gave to the application over on the GNUsocial site.
Click Submit.
A button will appear for you to "Sign in to StatusNet." Click it and that will open a tab or window on the GNUsocial site for you to click "Allow." Once clicked and successfully authorized, a security code number will appear. Copy it and go back to the RedMatrix app you just left and insert it in the field: "Copy the security code from StatusNet here." Click Submit.
If successful, your information from the GNUsocial instance should appear in the RedMatrix app.
You now have several options to choose, if you desire, and those will need to be confirmed by clicking "Submit" also. The most interesting is "Send public postings to StatusNet by default." This option automatically sends any post of yours made in your RedMatrix account to your GNUsocial instance.
If you don't choose this option, you will have an option to send a post to your GNUsocial instance by first opening the post (by clicking in the post text area) and clicking on the lock icon next to the Share button. Select the GNUsocial icon made up of three colored dialog baloons. Close that window, then make your post.
If all goes well, you have just cross-posted your RedMatrix post to your account on a GNUsocial instance.

130
doc/old/api_functions.bb Normal file
View file

@ -0,0 +1,130 @@
[b]Red Twitter API[/b]
The &quot;basic&quot; 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 &quot;dumb-down&quot; 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 &amp;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 &quot;friendships&quot; - 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

138
doc/old/api_functions.md Normal file
View file

@ -0,0 +1,138 @@
Red Twitter API
===============
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

73
doc/old/bbcode.html Normal file
View file

@ -0,0 +1,73 @@
<h3>BBcode reference</h3>
<div style="font-size: 14px;">
<br /><br />
<ul class="listdecimal" style="list-style-type: decimal;">
<li>[b]bold[/b] - <strong>bold</strong><br />
<li>[i]italic[/i] - <em>italic</em><br />
<li>[u]underlined[/u] - <u>underlined</u><br />
<li>[s]strike[/s] - <strike>strike</strike><br />
<li>[color=red]red[/color] - <span style="color: red;">red</span><br />
<li>[url=https://redmatrix.me]Red Matrix[/url] <a href="https://redmatrix.me">Red Matrix</a><br />
<li>[img]https://redmatrix.me/images/default_profile_photos/rainbow_man/48.jpg[/img] <img src="https://redmatrix.me/images/default_profile_photos/rainbow_man/48.jpg" alt="Image/photo" /><br />
<li>[img float=left]https://redmatrix.me/images/default_profile_photos/rainbow_man/48.jpg[/img] <img src="https://redmatrix.me/images/default_profile_photos/rainbow_man/48.jpg" style="float:left;" alt="Image/photo" /><br />
<div style="clear:both;"></div>
<li>[img float=right]https://redmatrix.me/images/default_profile_photos/rainbow_man/48.jpg[/img] <img src="https://redmatrix.me/images/default_profile_photos/rainbow_man/48.jpg" style="float:right;" alt="Image/photo" /><br />
<div style="clear:both;"></div>
<li>[code]code[/code] <code>code</code><br />
<li>[quote]quote[/quote] <blockquote>quote</blockquote><br />
<li>[quote=Author]Author? Me? No, no, no...[/quote] <br /><strong class="author">Author wrote:</strong><blockquote>Author? Me? No, no, no...</blockquote><br />
<li> [nobb] may be used to escape bbcode.</ul><br />
<br />You can make lists with:<br />
<ul class="listbullet" style="list-style-type: circle;">
<li>[list]<br />
<li>[list=1]<br />
<li>[list=i]<br />
<li>[list=I] <br />
<li>[list=a]<br />
<li>[list=A] <br />
<li>[ul]<br />
<li>[ol]
</ul>For example:<br />[ul]<br />[*] First list element<br />[*] Second list element<br />[/ul]<br /><br />Will render something like: <br />
<ul class="listbullet" style="list-style-type: circle;">
<li> First list element<br />
<li> Second list element</ul><br />
<br />There's also:<br />
<ul class="listloweralpha" style="list-style-type: lower-alpha;">
<li>[hr]<br />
<li>[video]video URL[/video]<br />
<li>[audio]audio URL[/audio]<br />
<li>[table]<br />
<li>[th] <br />
<li>[td]<br />
<li>[tr]<br />
<li>[center]<br />
<li>[font=courier]some text[/font] <span style="font-family: courier;">some text</span><br />
</ul><br />
<br />Tables? Yes!<br /><br />[table border=1]<br /> [tr]<br /> [th]Tables now[/th]<br /> [/tr]<br /> [tr]<br /> [td]Have headers[/td]<br /> [/tr]<br />[/table]<br /><br /><table border="1" ><tr><th>Tables now</th></tr><tr><td>Have headers</td></tr></table><br />All sizes, <br />From the [size=xx-small] - <span style="font-size: xx-small;">xx-small</span>.<br />To the [size=xx-large] - <span style="font-size: xx-large;">xx-large</span>.<br />To fit exactly <span style="font-size: 20px;">20px</span> use [size=20].<br /><br />
<p>Red Matrix specific codes</p>
<ul class="listbullet" style="list-style-type: circle;">
<li>[&amp;copy;] &copy; This works for many HTML entities<br />
<li>[zrl]https://redmatrix.me[/zrl] Magic-auth version of [url] tag<br />
<li>[zmg]https://redmatrix.me/some/photo.jpg[/zmg] Magic-auth version of [img] tag<br />
<br />
<li>[observer=1]Text to display if observer is authenticated in the matrix[/observer]
<li>[observer=0]Text to display if observer is <strong>not</strong> authenticated in the matrix[/observer]<br />
<li>[observer.baseurl] website of observer <br />
<li>[observer.url] channel URL of observer <br />
<li>[observer.name] name of observer <br />
<li>[observer.address] address (zot-id) of observer <br />
<li>[observer.photo] profile photo of observer <br />
<br />
<li>[spoiler] for hiding spoilers<br /><br />
<li>[rpost=title]Text to post[/rpost] The observer will be returned to their home hub to enter a post with the specified title and body. Both are optional <br />
<li>[qr]text to post[/qr] - create a QR code.<br />
</div>

234
doc/old/campaign.bb Normal file
View file

@ -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 &quot;any hardware&quot;, 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 &quot;Affinity Slider&quot;, 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 &quot;closeness&quot; 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&gt;
[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 &quot;Comanche&quot;, 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 (&quot;.pdl&quot;, pronounced &quot;puddle&quot;) 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}

27
doc/old/channels.bb Normal file
View file

@ -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 &quot;Me&quot;.
The most important features for a channel that represents &quot;me&quot; are:
Secure and private &quot;spam free&quot; communications
Identity and &quot;single-signon&quot; 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 &quot;me, on the internet&quot;.
You will be required to create your first channel as part of the sign up process. You can also create additonal channels from the &quot;Select channel&quot; 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 &quot;webbie&quot;. 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 &quot;llamas-are_kewl.123&quot;. &quot;llamasarecool&quot; 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 &quot;stream&quot;. This is where your recent activity will appear, in reverse chronological order. If you post in the box marked &quot;share&quot;, 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 &quot;About&quot; tab contains your &quot;profile&quot;, the photos page contain photo albums, and the events page contains events share by both yourself and your contacts.
The &quot;Matrix&quot; 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 &quot;Can write to my &quot;public&quot; file storage&quot; than a personal account. For more information, see the permissions section.

View file

@ -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]

25
doc/old/cloud.bb Normal file
View file

@ -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}}&quot; replacing {{username}} with the nickname you provided during channel creation.
[b]Web Access[/b]
Your files are visible on the web at the location &quot;cloud/{{username}}&quot; 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 &quot;filestorage/{{username}}&quot;; 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 &quot;personal&quot; or &quot;private&quot; 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 &quot;family&quot; and &quot;friends&quot; with permission granted to appropriate collections of channels.

View file

@ -0,0 +1,21 @@
[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]
[b]Server Notes[/b]
Note: There have been reported issues with clients that use "chunked transfer encoding", which includes Apple iOS services, and also the "AnyClient" and "CyberDuck" tools. These work fine for downloads, but uploads often end up with files of zero size. This is caused by an incorrect implemention of chunked encoding in some current FCGI (fast-cgi) implementations. Apache running with PHP as a module does not have these issues, but when running under FCGI you may need to use alternative clients or use the web uploader. At the time of this writing the issue has been open and no updates provided for at least a year. If you encounter zero size files with other clients, please check the client notes; as there are occasional configuration issues which can also produce these symptoms.
Return to the [zrl=[baseurl]/help/main]Main documentation page[/zrl]

182
doc/old/comanche.bb Normal file
View file

@ -0,0 +1,182 @@
[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 three layout templates, unless your site provides additional layouts (TODO list all templates)
[code]
default
The default template defines a &quot;nav&quot; region across the top, &quot;aside&quot; as a fixed width sidebar,
&quot;content&quot; for the main content region, and &quot;footer&quot; for a page footer.
full
The full template defines the same as the default template with the exception that there is no &quot;aside&quot; region.
choklet
The choklet template provides a number of fluid layout styles which can be specified by flavour:
(default flavour) - a two column layout similar to the "default" template, but more fluid
bannertwo - a two column layout with a banner region, compatible with the "default" template on small displays
three - three column layout (adds a "right_aside" region to the default template)
edgestwo - two column layout with fixed side margins
edgesthree - three column layout with fixed side margins
full - three column layout with fixed side margins and adds a "header" region beneath the navigation bar
[/code]
To choose a layout template, use the 'template' tag.
[code]
[template]full[/template]
[/code]
To choose the "choklet" template with the "three" flavour:
[code]
[template=three]choklet[/template]
[/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 &quot;macros&quot; 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 &quot;nav&quot; page region and $content is placed in the &quot;content&quot; 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 &quot;apw&quot;. By default your channel's preferred theme will be used.
[code]
[theme=passion]apw[/theme]
[/code]
This will select the theme named &quot;apw&quot; and select the &quot;passion&quot; schema (theme variant).
[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 &quot;mymenu&quot; at this location on the page, which must be inside a region.
[code]
[menu=horizontal]mymenu[/menu]
[/code]
This places the menu called &quot;mymenu&quot; at this location on the page, which must be inside a region. Additionally it applies the "horizontal" style to the menu. "horizontal" is defined in the redbasic theme. It may or may not be available in other themes.
[code]
[block]contributors[/block]
[/code]
This places a block named &quot;contributors&quot; 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 'var' tags.
[code]
[widget=recent_visitors][var=count]24[/var][/widget]
[/code]
This loads the &quot;recent_visitors&quot; widget and supplies it with the argument &quot;count&quot; set to &quot;24&quot;.
[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]
[template]3-column-with-header[/template]
[comment]Use the &quot;darknight&quot; 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]
[var=count]24[/var]
[var=names_only]1[/var]
[/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 &quot;wall&quot; feed and allow interaction if the observer is allowed to interact[/comment]
[widget]channel[/widget]
[/region]
[/code]

View file

@ -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 &quot;Can send me their channel stream and posts&quot; permission to &quot;Anybody in this network&quot; 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 &quot;connect&quot;. 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, &quot;Full Sharing&quot; 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 &quot;Submit&quot;.
You may also connect with any channel by visiting the &quot;Connections&quot; page of your site or the Directory and typing their &quot;webbie&quot; into the &quot;Add New Connection&quot; 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 &quot;bob@example.com&quot;. The process is the same as connecting via the &quot;Connect&quot; button - you will then be taken to the connection editor to set permissions.
[b]Premium Channels[/b]
Some channels are designated &quot;Premium Channels&quot; 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.

View file

@ -0,0 +1,33 @@
# Connecting To Channels #
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.
## Block/Ignore/Archive/Hide channels ##
Channels in your address book can have statuses such as *blocked*, *ignored*, *archived* and *hidden*. From your connections page you can see tabs that display the channels with those statuses. From your edit connection pages you can change the statuses of a channel.
Here's their meaning:
**Blocked:** the channel can't read your items regardless of permissions, nor can it write to your channel.
**Ignored:** the channel can read your items if it has permission, but can't write to your channel.
**Hidden:** the channel does not show up in your profile's connections list, noone can see you're connected, but beware they may still show up to your other connections, for example in post replies.
**Archived:** if a channel can't be reached for 30 days, it is automatically marked as archived. This keeps all the data but stops polling the channel for new information and removes it from autocomplete. If later you learn the channel has come back online, you may manually unarchive it.
## Premium Channels ##
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.

9
doc/old/dav_dolphin.bb Normal file
View file

@ -0,0 +1,9 @@
[b]Using The Cloud - Dolphin[/b]
Visit webdavs://example.com/cloud where &quot;example.com&quot; 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]

11
doc/old/dav_konqueror.bb Normal file
View file

@ -0,0 +1,11 @@
[b]Using The Cloud - Konqueror[/b]
Simply visit webdavs://example.com/cloud after logging in to your hub, where &quot;example.com&quot; 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]

86
doc/old/dav_mount.bb Normal file
View file

@ -0,0 +1,86 @@
[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 &quot;yes&quot; 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 &lt;DesktopUser&gt;[/code]
[b]Note:[/b] on some systems the user group may be different, i.e. - "network"
on Arch Linux. If in doubt, check the davfs documentation for your
particular OS.
Edit /etc/fstab
[code]nano /etc/fstab[/code]
to include your cloud directory by adding
[code]
[baseurl]/cloud/ /mount/point davfs user,noauto,uid=&lt;DesktopUser&gt;,file_mode=600,dir_mode=700 0 1
[/code]
Where [baseurl] is the URL of your hub, /mount/point is the location you want to mount the cloud, and &lt;DesktopUser&gt; 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][baseurl]/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]
[baseurl]/cloud &lt;username&gt; &lt;password&gt;
[/code]
Where &lt;username&gt; and &lt;password&gt; 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 [baseurl]/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.
[b]Troubleshooting[/b]
With some webservers and certain configurations, you may find davfs2 creating files with 0 bytes file size where other clients work just fine. This is generally caused by cache and locks. If you are affected by this issue, you need to edit your davfs2 configuration.
[code]nano /etc/davfs2/davfs2.conf[/code]
Your distribution will provide a sample configuration, and this file should already exist, however, most of it will be commented out with a # at the beginning of the line.
First step is to remove locks.
Edit the use_locks line so it reads [code]use_locks 0[/code].
Unmount your file system, remount your file system, and try copying over a file from the command line. Note you should copy a new file, and not overwrite an old one for this test. Leave it a minute or two then do [code]ls -l -h[/code] and check the file size of your new file is still greater than 0 bytes. If it is, stop there, and do nothing else.
If that still doesn't work, disable the cache. Note that this has a performance impact so should only be done if disabling locks didn't solve your problem. Edit the cache_size and set it to [code]cache_size 0[/code] and also set file_refresh to [code]file_refresh 0[/code]. Unmount your filesystem, remount your file system, and test it again.
If it [i]still[/i] doesn't work, there is one more thing you can try. (This one is caused by a bug in older versions of dav2fs itself, so updating to a new version may also help). Enable weak etag dropping by setting [code]drop_weak_etags 1[/code]. Unmount and remount your filesystem to apply the changes.
Return to the [zrl=[baseurl]/help/main]Main documentation page[/zrl]

9
doc/old/dav_nautilus.bb Normal file
View file

@ -0,0 +1,9 @@
[b]Using The Cloud - Nautilus[/b]
1. Open a File browsing window (that's Nautilus)
2. Select File &gt; Connect to server from the menu
3. Type davs://&lt;domain_name&gt;/cloud/&lt;your_username&gt; 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]

19
doc/old/dav_nemo.bb Normal file
View file

@ -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 &quot;davs://yourusername@friendicared.net/cloud&quot; in the address bar
2nd way
Menu &gt; file &gt; 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]

11
doc/old/dav_windows.bb Normal file
View file

@ -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 &quot;example.net&quot; 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]

43
doc/old/de/Home.md Normal file
View file

@ -0,0 +1,43 @@
Dokumentation und Ressourcen zur Red-Matrix
===========================================
**Inhalt**
* [Grundlagen zu Red-Konten](help/Kontengrundlagen)
* [Profile](help/Profile)
* [Channels](help/Channels)
* [Connecting to Channels](help/Connecting-to-Channels)
* [Permissions](help/Permissions)
* [Cloud Storage](help/Cloud)
* [But Wait - There's More. MUCH More...](help/Features)
* [Tags and Mentions](help/Tags-and-Mentions)
* [Web Pages](help/Webpages)
* [Remove Account](help/Remove-Account)
* [BBcode reference for posts and comments](help/bbcode)
**Technische Dokumentation**
* [Install](help/Install)
* [Comanche Page Descriptions](help/Comanche)
* [Plugins](help/Plugins)
* [Schemas](help/Schema-development)
* [Developers](help/Developers)
* [Intro for Developers](help/Intro-for-Developers)
* [API functions](help/api_functions)
* [Red Functions 101](help/dev-function-overview)
* [Code-Referenz (mit doxygen generiert, Englisch)](doc/html)
* [To-Do list for the Red Documentation Project](help/To-Do)
* [To-Do list for Developers](help/To-Do-Code)
**Externe Ressourcen**
* [External Resource Links](help/External-Resources)
* [Haupt-Website](https://github.com/friendica/red)
* [Plugins/Addons-Website](https://github.com/friendica/red-addons)
* [Assets-Website](https://github.com/friendica/red-assets)
* [Entwickler-Kanal](http://zothub.com/channel/one)
**Über**
* [Server- und Versionsinformationen](siteinfo)

View file

@ -0,0 +1,72 @@
Grundlagen zu Red-Konten
========================
* [Zurück zur Hilfe-Startseite](help)
**Registrieren**
Nicht alle Server in der Red-Matrix erlauben jedem, sich zu registrieren.
Wenn eine Registrierung möglich ist, erscheint unter dem Anmelde-Formular
ein Link mit dem Titel „Registrieren“, der Dich zur Registrierungs-Seite
des Servers führt. Auf manchen Servern wirst Du auf einen anderen Server
weitergeleitet, der Registrierungen erlaubt. Da alle Red-Server
miteinander verbunden sind, ist es egal, auf welchem Du Dich registrierst.
*Deine E-Mail-Adresse*
Bitte gib eine funktionierende E-Mail-Adresse an. Sie wird **nie**
veröffentlicht. Wenn Du willst, kannst Du Dir an diese Adresse
Benachrichtigungen schicken lassen, wenn Du neue Nachrichten oder Beiträge
erhalten hast. Sie wird außerdem benutzt, um vergessene Passwörter
wiederherstellen zu können.
*Passwort*
Gib ein Passwort Deiner Wahl ein und wiederhole es in der zweiten Box, um
sicherzugehen, dass Du Dich nicht vertippt hast. Da die Red-Matrix
dezentralisierten Identitäsnachweis beherrscht, kannst Du Dich mit Deinem
Konto auf vielen anderen Webseiten anmelden.
*Nutzungsbedingungen*
Klicke auf den Link, um die Nutzungsbedingungen dieses Servers zu lesen.
Wenn Du sie gelesen hast, setze den Haken im Registrierungsformular, um
sie zu akzeptieren.
*Registrieren*
Wenn Du alles ausgefüllt hast, klicke auf den „Registrieren“-Knopf. Bei
manchen Servern muss der Administrator Deiner Registrierung erst noch
zustimmen, bevor Du Dein Konto nutzen kannst. Falls das der Fall ist,
wird Dir das entsprechend angezeigt. Du erhältst dann eine E-Mail, wenn
die Registrierung vollendet wurde. (Sicherheitshalber auch Spam-Ordner
überprüfen!)
*Einen Kanal anlegen*
Als nächstes kommst Du direkt auf den „Kanal hinzufügen“-Bildschirm. Dein
erster Kanal wird normalerweise der sein, der Dich selbst repräsentiert.
Es ist also sinnvoll, Deinen Namen oder Dein Pseudonym als Kanal-Namen zu
verwenden.
Der Kanal-Name ist der Titel oder eine kurze Beschreibung des Kanals. Der
„Spitzname“ ist so etwas wie ein Benutzername. Was Du hier eingibst wird
Teil Deiner Kanal-Adresse, die Andere benutzen, um sich mit Dir zu
verbinden, und die Du selbst benutzt, um Dich auf anderen Servern
anzumelden. Die Kanal-Adresse sieht aus wie eine E-Mail-Adresse, zum
Beispiel so: spitzname@deinserver.xyz
Wenn Dein Kanal angelegt ist, geht es direkt weiter zu den Einstellungen.
Dort kannst Du Zugriffsrechte setzen, Funktionen zu- oder abschalten und
so weiter. Diese Punkte werden auf den entsprechenden Hilfeseiten erklärt.
**Siehe auch**
* [Permissions](help/Permissions)
* [Profile](help/Profile)
* [Remove Account](help/Remove-Account)

97
doc/old/de/Profile.md Normal file
View file

@ -0,0 +1,97 @@
Profile
=======
* [Zurück zur Hilfe-Startseite](help)
In Red kannst Du beliebig viele Profile anlegen. Du kannst mehrere Profile
nutzen, um verschiedenen Kontakten und Profilbesuchern unterschiedliche
Seiten Deiner Persönlichkeit zu zeigen. Das ist nicht das gleiche wie das
Anlegen mehrerer _Kanäle_.
Mehrere Kanäle erlauben es, komplett voneinander getrennte Informationen
zu verwalten. Du könntest zum Beispiel einen Kanal für Dich selbst
anlegen, einen für Deinen Schwimmverein, einen für Dein Blog und so weiter
und so fort.
Ein Profil erlaubt es, unterschiedlichen Leuten unterschiedliche
Informationen über einen Kanal zu präsentieren. Beispiel: In Deinem
Standard-Profil, das alle Profilbesucher zu sehen bekommen, könnte nur
Dein Vorname stehen, sonst keine weiteren Informationen. Freunde und
Bekannte könnten Deinen kompletten Realnamen und Deine Postadresse zu
sehen bekommen, und im Profil für Deinen engsten Freundeskreis könnten
peinliche Hobbies Trinkrekorde ihren Platz finden.
Jeder Kanal hat ein Standard-Profil (öffentliches Profil), das vor niemandem
versteckt werden kann (außer evtl. auf privaten Servern, die nicht mit der
Matrix verbunden sind). Du kannst und solltest Dich in der Auswahl dessen, was
Du im Standard-Profil von Dir preisgibst, stark einschränken.
Trotzdem: Wenn Du willst, dass Freunde Dich finden können, macht es Sinn,
folgende Informationen ins öffentliche Profil einzutragen:
* Deinen Realnamen oder zumindest einen Spitznamen, unter dem Dich jeder kennt
* Ein Foto, das auch wirklich Dich zeigt
* Deinen Wohnort, oder zumindest Land oder Bundesland
Ohne diese Informationen könnte es passieren, dass Du hier sehr einsam
bist. Die meisten Leute verbinden sich nicht mit jemandem, von dem sie nur
einen Fake-Namen und ein Foto sehen, das noch nicht einmal einen Menschen
zeigt.
Wenn Du Leute kennenlernen möchtest, die ähnliche Interessen haben wie Du,
nimm Dir einen Moment Zeit und füge einige Schlüsselwörter hinzu. Zum
Beispiel „Musik, Linux, Fotografie“ oder was auch immer. Danach können
andere dann im Verzeichnis suchen. Du kannst so viele Schlüsselwörter
eingeben wie Du möchtest.
Um alternative Profile zu erstellen, klicke auf „Profil ansehen“ im Menü
Deines Red-Servers und dann auf den Bleistift am Profilfoto. Dann kannst
Du existierende Profile bearbeiten, Dein Profilfoto verändern, Dinge zu
einem Profil hinzufügen oder ein neues Profil erstellen. Du kannst auch
ein Profil „klonen“, wenn Du nur einige wenige Einträge ändern willst,
ohne die ganzen Informationen noch einmal einzugeben. Klicke dazu auf das
Profil, das Du klonen willst, und wähle dann „Dieses Profil klonen“.
In der Liste Deiner Profile kannst Du auch bestimmen, wer ein bestimmtes
Profil zu sehen bekommt. Klicke dazu auf „Sichtbarkeit bearbeiten“ neben
dem Profil, um das es geht (gibt es nur bei Profilen, die nicht Dein
Standard-Profil sind). Klicke dann auf die Bilder derjenigen Kontakte, die
dieses Profil sehen sollen sie sind dann oben zu sehen. Wenn Du oben auf
ein Bild klickst, wird dieser Kontakt wieder aus der Gruppe derjenigen
herausgenommen, die dieses Profil zu sehen bekommen.
Hast Du einem Kontakt ein Profil zugeordnet, wird er immer dieses Profil
sehen, wenn er sich Dein Profil ansieht. Besucht er Deinen Red-Server,
ohne sich anzumelden, sieht er aber weiterhin Dein Standard-Profil.
Auf der allgemeinen „Einstellungen“-Seite gibt es eine Einstellung, mit
der Du festlegen kannst, ob Dein Standard-Profil in den Red-Verzeichnissen
veröffentlicht werden soll.
Wenn Du nicht möchtest, dass andere Dich finden können, ohne dass Du ihnen
Deine Kanal-Adresse gibst, kannst Du so verhindern, dass Dein Profil
veröffentlicht wird.
**Schlüsselwörter und Verzeichnissuche**
Im Verzeichnis (Kanal-Anzeiger) kannst Du nach Leuten suchen, die ihre
Profile veröffentlichen. Zum Beispiel, indem Du Namen oder Spitznamen
eingibst. Es werden aber auch viele andere Profilfelder durchsucht, zum
Beispiel Geschlecht, Wohnort, Hobbys, Arbeit/Anstellung und
Schule/Ausbildung und die Schlüsselwörter. Wenn Du Schlüsselwörter in Dein
Profil einträgst, können Dich Leute mit ähnlichen Interessen finden. Sie
werden außerdem bei den Kanal-Vorschlägen benutzt. Sie sind im Verzeichnis
nicht direkt sichtbar, wohl aber auf Deiner Profil-Seite.
In Verzeichnis-Suchen kann auch boolesche Logik benutzt werden. Du kannst
also nach „+lesbisch +Hamburg“ suchen, um Leute zu finden, deren sexuelle
Orientierung lesbisch ist (oder deren Schlüsselwörter „lesbisch“
enthalten), und die in Hamburg leben. Mehr Informationen über boolesche
Suchen findest Du im Abschnitt „Topical Tags“ auf der Hilfeseite
[Tags-and-Mentions](help/Tags-and-Mentions).
Auf Deiner „Verbindungen“-Seite und im Verzeichnis (Kanal-Anzeiger) gibt
es einen Link „Vorschläge“ bzw. „Kanal-Vorschläge“. Dort findest Du
Kanäle, die gleiche oder ähnliche Schlüsselwörter im Profil haben wie Du.
Je mehr Schlüsselwörter Du in Dein Standard-Profil einträgst, desto besser
werden die Suchergebnisse. Sie sind nach relevanz sortiert.

108
doc/old/de/features.bb Normal file
View file

@ -0,0 +1,108 @@
[size=24][b]Features der Red-Matrix[/b][/size]
[url=[baseurl]/help]Zurück zur Hilfe-Startseite[/url]
Die Red-Matrix ist ein Allzweck-Kommunikationsnetzwerk mit einigen einzigartigen Features. Sie wurde für eine große Bandbreite von Nutzern entwickelt, von Nutzern sozialer Netzwerke über technisch nicht interessierte Blogger bis hin zu PHP-Experten und erfahrenen Systemadministratoren.
Diese Seite listet einige der Kern-Features von Red auf, die in der offiziellen Distribution enthalten sind. Wie immer bei freier Open-Source-Software sind den Möglichkeiten keine Grenzen gesetzt. Beliebige Erweiterungen, Addons, Themes und Konfigurationen sind möglich.
[b][size=18]Entwickelt für Privatsphäre und Freiheit[/size][/b]
Eines der Design-Ziele von Red ist einfache Kommunikations über das Web, ohne die Privatsphäre zu vernachlässigen, wenn die Nutzer das Wünschen. Um dieses Ziel zu erreichen, verfügt Red über einige Features, die beliebige Stufen des Privatsphäre-Schutzes ermöglichen:
[b]Beziehungs-Tool[/b]
Wenn Du in der Red-Matrix einen Kontakt hinzufügst (und das Beziehungs-Tool aktiviert hast), hast Du die Möglichkeit, einen Grad der Freundschaft zu bestimmen. Bespiel: Wenn Du ein Blog eines Bekannten hinzufügst, könntest Du ihm den Freundschaftsgrad Bekannte (Acquaintances) geben.
[img]https://friendicared.net/photo/b07b0262e3146325508b81a9d1ae4a1e-0.png[/img]
Wenn Du aber den privaten Kanal eines Freundes hinzufügst, wäre der Freundschaftsgrad Freunde vermutlich passender.
Wenn Du allen Kontakten solche Freundschaftsgrade zugeordnet hast, kannst Du mit dem Beziehungs-Tool, das (sofern aktiviert) oben auf Deiner Matrix-Seite erscheint, bestimmen, welche Inhalte Du sehen willst. Indem Du die Schieberegler so einstellst, dass der linke auf Ich und der rechte auf Freunde steht, kannst Du dafür sorgen, dass nur Inhalte von Kontakten angezeigt werden, deren Freundschaftsgrad sich irgendwo im Bereich zwischen Ich, Beste Freunde und Freunde bewegt. Alle anderen Kontakte, zum Beispiel solche mit einem Freundschaftsgrad in der Nähe von Bekannte, werden nicht angezeigt.
Das Beziehungs-Tool erlaubt blitzschnelles Filtern von großen Mengen Inhalt, gruppiert nach Freundschaftsgrad.
[b]Zugriffsrechte[/b]
Wenn Du Inhalte mit anderen teilst, hast Du die Option, den Zugriff darauf einzuschränken. Wenn Du auf das Schloss unterhalb des Beitrags-Editors klickst, kannst Du auswählen, wer diesen Beitrag sehen darf, indem Du einfach auf die Namen klickst.
Diese Nachricht kann dann nur vom Absender und den eingestellten Empfängern betrachtet werden. Mit anderen Worten, sie erscheint nicht öffentlich auf einer Pinnwand.
[b]Verschlüsselung privater Nachrichten[/b]
Öffentliche Nachrichten werden in der Red-Matrix nicht verschlüsselt, bevor sie Deinen Server verlassen, und sie werden auch im Klartext in der Datenbank gespeichert.
Nachrichten mit eingeschränktem Empfängerkreis werden jedoch mit einem symmetrischen 256-bit-AES-CBC-Schlüssel verschlüsselt, der seinerseits mit Public-Key-Kryptografie auf Basis von 4096-bittigen RSA-Schlüsseln geschützt (nochmal verschlüsselt) wird, die mit dem sendenden Kanal verbunden sind.
Jeder Red-Kanal hat seinen eigenes 4096-bit-RSA-Schlüsselpaar, das erzeugt wird, wenn der Kanal erstellt wird.
[b]TLS/SSL[/b]
Red-Server, die TLS/SSL benutzen, verschlüsseln ihre Kommunikation vom Server zum Nutzer mit SSL. Nach den aktuellen Enthüllungen über das Umgehen von Verschlüsselung durch NSA, GHCQ und andere Dienste, sollte man jedoch nicht mehr savon ausgehen, dass diese Verbindungen nicht mitgelesen werden können.
[b]Kanal-Einstellungen[/b]
Für jeden Kanal kannst Du detaillierte Zugriffseinstellungen für verschiedenste Aspekte der Kommunikation festlegen. Unter den Sicherheits- und Privatsphäre-Einstellungen kann für jeden Punkt auf der linken Seite eine von 5-6 möglichen Optionen aus dem Menü gewählt werden.
[img]https://friendicared.net/photo/0f5be8da282858edd645b0a1a6626491.png[/img]
Die Optionen sind:
[ul][*]Niemand außer Du selbst
[*]Nur die, denen Du es explizit erlaubst
[*]All Deine Kontakte
[*]Jeder auf diesem Server
[*]Alle Red-Nutzer
[*]Jeder im Internet[/ul]
[b]Klone[/b]
Konten in der Red-Matrix werden auch als [i]nomadische Identitäten[/i] bezeichnet (eine ausführliche Erklärung dazu gibt es unter [url=[baseurl]/help/what_is_zot]What is Zot?[/url]). Nomadisch, weil bei anderen Diensten die Identität eines Nutzers an den Server oder die Plattform gebunden ist, auf der er ursprünglich erstellt wurde. Ein Facebook- oder Gmail-Konto ist and diese Dienste gekettet. Er funktioniert nicht ohne Facebook.com bzw. Gmail.com.
Bei Red ist das anders. Sagen wir, Du hast eine Red-Indentität namens tina@red.com. Die kannst Du auf einen anderen Server klonen, mit dem gleichen oder einem anderen Namen, zum Beispiel lebtEwig@matrixserver.info.
Beide Kanäle sind jetzt miteinander synchronisiert, das heißt, dass alle Kontakte und Einstellungen auf dem Klon immer die gleichen sind wie auf dem ursprünglichen Kanal. Es ist egal, ob Du eine Nachricht von dort aus oder vom Klon aus schickst. Alle Nachrichten sind in beiden Klonen vorhanden.
Das ist ein ziemlich revolutionäres Feature, wenn man sich einige Szenarien dazu ansieht:
[ul][*]Was passiert, wenn ein Server, auf dem sich Deine Identität befindet, plötzlich offline ist? Ohne Klone ist der Nutzer nicht in der Lage zu kommunzieren, bis der Server wieder online ist. Mit Klonen loggst Du Dich einfach bei Deinem geklonten Kanal ein und lebst glücklich bis an Dein Ende.
[*]Der Administrator Deines Red-Servers kann es sich nicht länger leisten, seinen für alle kostenlosen Server zu bezahlen. Er gibt bekannt, dass der Server in zwei Wochen vom Netz gehen wird. Zeit genug, um Deine Red-Kanäle auf andere Server zu klonen und somit Verbindungen und Freunde zu behalten.
[*]Was, wenn Dein Kanal staatlicher Zensur unterliegt? Dein Server-Admin wird gezwungen, Dein Konto und alle damit verbundenen Kanäle und Daten zu löschen. Durch Klone bietet die Red-Matrix Zensur-Resistenz. Wenn Du willst, kannst Du hunderte von Klonen haben, alle mit unterschiedlichen Namen und auf unterschiedlichen Servern überall im Internet.[/ul]
Red bietet interessante, neue Möglichkeiten in Bezug auf die Privatsphäre. Mehr dazu bald unter Tipps und Tricks zur privaten Kommunikation.
Klone unterliegen einigen Restriktionen. Eine vollständige Erklärung zum Klonen von Identitäten gibt es bald unter Klone.
[b]Kanal-Backups[/b]
In Red gibt es ein einfaches Ein-Klick-Backup, mit dem Du ein komplettes Backup Deiner Kanal-Einstellungen und Verbindungen herunterladen kannst.
Solche Backups sind ein Weg, um Klone zu erstellen, und können genutzt werden, um einen Kanal wiederherzustellen.
[b]Löschen von Konten[/b]
Konten und Kanäle können sofort gelöscht werden, indem Du einfach auf einen Link klickst. Das wars. Alle damit verbundenen Inhalte werden sofort aus der Matrix gelöscht (inklusiver aller Beiträge und sonstiger Inhalte, die von dem gelöschten Konto/Kanal erzeugt wurden).
[b][size=18]Erstellen von Inhalten[/size][/b]
[b]Beiträge schreiben[/b]
Red unterstützt diverse verschiedene Wege, um Inhalte zu erstellen, von einem grafischen Text-Editor über verschieden Markup-Sprachen bis hin zu reinem HTML.
Mit Red geliefert wird TinyMCE, ein WYSIWYG-Editor, der in den Einstellungen eingeschaltet werden kann. Ist er nicht aktiviert, können normale Beiträge mit BBCode (wie in Foren) formatiert werden.
Webseiten können außerdem in HTML, Markdown und Plain Text erstellt werden.
[b]Inhalte löschen[/b]
Alle Inhalte in der Matrix bleiben unter der Kontroller des Nutzers (bzw. Kanals), der sie ursprünglich erstellt hat. Alle Beiträge können jederzeit gelöscht werden, egal, ob sie auf dem Heimat-Server des Nutzers oder auf einem anderen Server erstellt wurden, an dem der Nutzer via Zot angemeldet war.
[b]Medien[/b]
Genau wie jedes andere Blog-System, soziale Netzwerk oder Mikro-Blogging-Dienst unterstützt Red das Hochladen von Dateien, das Einbetten von Bildern und Videos und das Verlinken von Seiten.
[b]Vorschau[/b]
Vor dem Absenden kann eine Vorschau von Beiträgen betrachtet werden.
[url=[baseurl]/help]Zurück zur Hilfe-Startseite[/url]

View file

@ -0,0 +1,38 @@
[size=24][b]Grundlagen zu Red-Konten[/b][/size]
[zrl=[baseurl]/help]Zurück zur Hilfe-Startseite[/zrl]
[b]Registrieren[/b]
Nicht alle Server in der Red-Matrix erlauben jedem, sich zu registrieren. Wenn eine Registrierung möglich ist, erscheint unter dem Anmelde-Formular ein Link mit dem Titel Registrieren, der Dich zur Registrierungs-Seite des Servers führt. Auf manchen Servern wirst Du auf einen anderen Server weitergeleitet, der Registrierungen erlaubt. Da alle Red-Server miteinander verbunden sind, ist es egal, auf welchem Du Dich registrierst.
[b]Deine E-Mail-Adresse[/b]
Bitte gib eine funktionierende E-Mail-Adresse an. Sie wird [b]nie[/b] veröffentlicht. Wenn Du willst, kannst Du Dir an diese Adresse Benachrichtigungen schicken lassen, wenn Du neue Nachrichten oder Beiträge erhalten hast. Sie wird außerdem benutzt, um vergessene Passwörter wiederherstellen zu können.
[b]Passwort[/b]
Gib ein Passwort Deiner Wahl ein und wiederhole es in der zweiten Box, um sicherzugehen, dass Du Dich nicht vertippt hast. Da die Red-Matrix dezentralisierten Identitäsnachweis beherrscht, kannst Du Dich mit Deinem Konto auf vielen anderen Webseiten anmelden.
[b]Nutzungsbedingungen[/b]
Klicke auf den Link, um die Nutzungsbedingungen dieses Servers zu lesen. Wenn Du sie gelesen hast, setze den Haken im Registrierungsformular, um sie zu akzeptieren.
[b]Registrieren[/b]
Wenn Du alles ausgefüllt hast, klicke auf den Registrieren-Knopf. Bei manchen Servern muss der Administrator Deiner Registrierung erst noch zustimmen, bevor Du Dein Konto nutzen kannst. Falls das der Fall ist, wird Dir das entsprechend angezeigt. Du erhältst dann eine E-Mail, wenn die Registrierung vollendet wurde. (Sicherheitshalber auch Spam-Ordner überprüfen!)
[b]Einen Kanal anlegen[/b]
Als nächstes kommst Du direkt auf den Kanal hinzufügen-Bildschirm. Dein erster Kanal wird normalerweise der sein, der Dich selbst repräsentiert. Es ist also sinnvoll, Deinen Namen oder Dein Pseudonym als Kanal-Namen zu verwenden.
Der Kanal-Name ist der Titel oder eine kurze Beschreibung des Kanals. Der Spitzname ist so etwas wie ein Benutzername. Was Du hier eingibst wird Teil Deiner Kanal-Adresse, die Andere benutzen, um sich mit Dir zu verbinden, und die Du selbst benutzt, um Dich auf anderen Servern anzumelden. Die Kanal-Adresse sieht aus wie eine E-Mail-Adresse, zum Beispiel so: spitzname@deinserver.xyz
Wenn Dein Kanal angelegt ist, geht es direkt weiter zu den Einstellungen. Dort kannst Du Zugriffsrechte setzen, Funktionen zu- oder abschalten und so weiter. Diese Punkte werden auf den entsprechenden Hilfeseiten erklärt.
[b]Siehe auch[/b]
[zrl=[baseurl]/help/permissions]Permissions[/zrl]
[zrl=[baseurl]/help/profile]Profile[/zrl]
[zrl=[baseurl]/help/remove_account]Remove Account[/zrl]

59
doc/old/de/main.bb Normal file
View file

@ -0,0 +1,59 @@
[size=24][b]Dokumentation und Ressourcen zur Red-Matrix[/b][/size]
[size=18][b]Inhalt[/b][/size]
[zrl=[baseurl]/help/redmatrix]Was ist die Red-Matrix?[/zrl]
[zrl=[baseurl]/help/features]Features der Red-Matrix[/zrl]
[zrl=[baseurl]/help/what_is_zot]What is Zot?[/zrl]
[b]Grundlegende Anleitung[/b]
[zrl=[baseurl]/help/kontengrundlagen]Grundlagen zu Konten[/zrl]
[zrl=[baseurl]/help/profile]Profile[/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]Aber Halt! Es gibt noch mehr! [i]Viel[/i] mehr [/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/bbcode]BBcode reference for posts and comments[/zrl]
[zrl=[baseurl]/help/checking_account_quota_usage]Checking Account Quota Usage[/zrl]
[zrl=[baseurl]/help/cloud_desktop_clients]Cloud Desktop Clients[/zrl]
[b]Für Administratoren[/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]Technische Dokumentation[/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=[baseurl]/doc/html/]Code Reference (doxygen generated - sets cookies)[/zrl]
[zrl=[baseurl]/help/to_do_doco]To-Do list for the Red Documentation Project[/zrl]
[zrl=[baseurl]/help/to_do_code]To-Do list for Developers[/zrl]
[zrl=[baseurl]/help/git_for_non_developers]Git for Non-Developers[/zrl]
[b]Externe Ressourcen[/b]
[zrl=[baseurl]/help/external-resource-links]External Resource Links[/zrl]
[url=https://github.com/friendica/red]Haupt-Website[/url]
[url=https://github.com/friendica/red-addons]Addons-Website[/url]
[url=https://zothub.com/channel/one]Entwickler-Kanal[/url]
[b]Über[/b]
[zrl=[baseurl]/siteinfo]Informationen zu diesem Server und der Red-Version[/zrl]

41
doc/old/de/profile.bb Normal file
View file

@ -0,0 +1,41 @@
[size=24][b]Profile[/b][/size]
[zrl=[baseurl]/help]Zurück zur Hilfe-Startseite[/zrl]
In Red kannst Du beliebig viele Profile anlegen. Du kannst mehrere Profile nutzen, um verschiedenen Kontakten und Profilbesuchern unterschiedliche Seiten Deiner Persönlichkeit zu zeigen. Das ist nicht das gleiche wie das Anlegen mehrerer [i]Kanäle.[/i]
Mehrere Kanäle erlauben es, komplett voneinander getrennte Informationen zu verwalten. Du könntest zum Beispiel einen Kanal für Dich selbst anlegen, einen für Deinen Schwimmverein, einen für Dein Blog und so weiter und so fort.
Ein Profil erlaubt es, unterschiedlichen Leuten unterschiedliche Informationen über einen Kanal zu präsentieren. Beispiel: In Deinem Standard-Profil, das alle Profilbesucher zu sehen bekommen, könnte nur Dein Vorname stehen, sonst keine weiteren Informationen. Freunde und Bekannte könnten Deinen kompletten Realnamen und Deine Postadresse zu sehen bekommen, und im Profil für Deinen engsten Freundeskreis könnten peinliche Hobbies Trinkrekorde ihren Platz finden.
Jeder Kanal hat ein Standard-Profil (öffentliches Profil), das vor niemandem versteckt werden kann (außer evtl. auf privaten Servern, die nicht mit der Matrix verbunden sind). Du kannst und solltest Dich in der Auswahl dessen, was Du im Standard-Profil von Dir preisgibst, stark einschränken.
Trotzdem: Wenn Du willst, dass Freunde Dich finden können, macht es Sinn, folgende Informationen ins öffentliche Profil einzutragen:
[ul][*] Deinen Realnamen oder zumindest einen Spitznamen, unter dem Dich jeder kennt
[*] Ein Foto, das auch wirklich Dich zeigt
[*] Deinen Wohnort, oder zumindest Land oder Bundesland[/ul]
Ohne diese Informationen könnte es passieren, dass Du hier sehr einsam bist. Die meisten Leute verbinden sich nicht mit jemandem, von dem sie nur einen Fake-Namen und ein Foto sehen, das noch nicht einmal einen Menschen zeigt.
Wenn Du Leute kennenlernen möchtest, die ähnliche Interessen haben wie Du, nimm Dir einen Moment Zeit und füge einige Schlüsselwörter hinzu. Zum Beispiel Musik, Linux, Fotografie oder was auch immer. Danach können andere dann im Verzeichnis suchen. Du kannst so viele Schlüsselwörter eingeben wie Du möchtest.
Um alternative Profile zu erstellen, besuche zunächst die Seite [zrl=[baseurl]/settings/features]Einstellungen > Zusätzliche Funktionen[/zrl] und aktiviere dort Mehrfachprofile. Ohne diese Aktivierung hast Du nur ein Profil, nämlich Dein Standard-Profil.
Klicke dann auf Profile bearbeiten im Menü Deines Red-Servers. Dort kannst Du existierende Profile bearbeiten, Dein Profilfoto verändern, Dinge zu einem Profil hinzufügen oder ein neues Profil erstellen. Du kannst auch ein Profil klonen, wenn Du nur einige wenige Einträge ändern willst, ohne die ganzen Informationen noch einmal einzugeben. Klicke dazu auf das Profil, das Du klonen willst, und wähle dann Dieses Profil klonen.
In der Liste Deiner Profile kannst Du auch bestimmen, wer ein bestimmtes Profil zu sehen bekommt. Klicke dazu auf Sichtbarkeit bearbeiten neben dem Profil, um das es geht (gibt es nur bei Profilen, die nicht Dein Standard-Profil sind). Klicke dann auf die Bilder derjenigen Kontakte, die dieses Profil sehen sollen sie sind dann oben zu sehen. Wenn Du oben auf ein Bild klickst, wird dieser Kontakt wieder aus der Gruppe derjenigen herausgenommen, die dieses Profil zu sehen bekommen.
Hast Du einem Kontakt ein Profil zugeordnet, wird er immer dieses Profil sehen, wenn er sich Dein Profil ansieht. Besucht er Deinen Red-Server, ohne sich anzumelden, sieht er aber weiterhin Dein Standard-Profil.
Auf der allgemeinen Einstellungen-Seite gibt es eine Einstellung, mit der Du festlegen kannst, ob Dein Standard-Profil in den Red-Verzeichnissen veröffentlicht werden soll.
Wenn Du nicht möchtest, dass andere Dich finden können, ohne dass Du ihnen
Deine Kanal-Adresse gibst, kannst Du so verhindern, dass Dein Profil
veröffentlicht wird.
[b]Schlüsselwörter und Verzeichnissuche[/b]
Im Verzeichnis (Kanal-Anzeiger) kannst Du nach Leuten suchen, die ihre Profile veröffentlichen. Zum Beispiel, indem Du Namen oder Spitznamen eingibst. Aktuell werden nur das Namensfeld und die Schlüsselwörter durchsucht. Wenn Du Schlüsselwörter in Dein Standard-Profil einträgst, können Dich Leute mit ähnlichen Interessen finden. Sie werden außerdem bei den Kanal-Vorschlägen benutzt. Sie sind im Verzeichnis nicht direkt sichtbar, wohl aber auf Deiner Profil-Seite.
Auf Deiner Verbindungen-Seite und im Verzeichnis (Kanal-Anzeiger) gibt es einen Link Vorschläge bzw. Kanal-Vorschläge. Dort findest Du Kanäle, die gleiche oder ähnliche Schlüsselwörter im Profil haben wie Du. Je mehr Schlüsselwörter Du in Dein Standard-Profil einträgst, desto besser werden die Suchergebnisse. Sie sind nach relevanz sortiert.

23
doc/old/de/redmatrix.bb Normal file
View file

@ -0,0 +1,23 @@
[size=24][b]Was ist die Red-Matrix?[/b][/size]
Die Red-Matrix ist ein dezentralisiertes Kommunikationsnetzwerk mit dem Ziel, Kommunikationsmöglichkeiten bereitzustellen, die Zensur umgehen, die Privatsphäre respektieren und somit frei sind von den Einschränkungen, die die heutigen kommerziellen Kommunikationsgiganten uns auferlegen. Diese stellen in erster Linie Spionagenetzwerke für zahlende Kunden aller Art zur Verfügung und monopolisieren und zentralisieren das ganze Internet was ursprünglich eben gerade nicht unter den revolutionären Zielen war, die einst zum World Wide Web führten.
Die Software der Red-Matrix ist frei, kostenlos und Open Source. Sie wurde entwickelt, um auf einem Raspberry Pi für 30, ebenso zu laufen wie auf den größten AMD- und Intel-Xeon-Multiprozessor-Servern. Sie kann für die Kommunikation zwischen einigen wenigen Einzelpersonen genutzt werden oder viele tausend Leute und mehr miteinander verbinden.
Ein weiteres Ziel ist es, von Können und Ressourcen unabhängig zu sein. Die Red-Matrix ist für den einfachen Computernutzer ebenso leicht bedienbar wie für Systemadministratoren und Entwickler.
Wie Du sie benutzt hängt davon ab, wie Du sie benutzen [i]willst.[/i]
Die Red-Matrix ist in PHP geschrieben, dadurch ist es einfach, sie auf jedweder heutigen Hosting-Plattform zu installieren, inklusive Self-Hosting zu Hause, auf Shared Servern wie bei [url=https://uberspace.de/]Uberspace[/url], [url=http://mediatemple.com/]Media Temple[/url] und [url=http://www.dreamhost.com/]Dreamhost[/url], oder auf virtuellen und dedizierten Servern, wie es sie zum Beispiel bei [url=https://www.linode.com]Linode[/url], [url=http://greenqloud.com]GreenQloud[/url] oder [url=https://aws.amazon.com]Amazon AWS[/url] gibt.
Mit anderen Worten, die Red-Matrix kann auf jeder Plattform laufen, die einen Web-Server, eine MySQL-kompatible Datenbank und PHP mitbringt.
Dabei bietet Red einige einzigartige Leckerbissen:
[b][color=grey]Ein-Klick-Identifikation:[/color][/b] Du kannst auf andere Server in der Red-Matrix zugreifen, indem Du einfach auf einen Link dorthin klickst. Die Authentifizierung wird ganz einfach automatisch hinter den Kulissen durchgeführt. Vergiss viele verschiedene Usernamen für verschiedene Seiten und die Passwörter dazu das tut alles die Matrix für Dich.
[b][color=grey]Klone:[/color][/b] Du kannst Deine Online-Identität klonen. Sie ist nicht mehr länger an einen bestimmten Server, eine Domain oder eine IP-Adresse gebunden. Importiere sie einfach auf einem anderen Red-Server (direkt online oder mit Hilfe eines vorher generierten Exports). Wenn Dein primärer Server plötzlich nicht mehr online ist, kein Problem, Deine Kontakte, Posts, Nachrichten und Inhalte sind automagisch weiterhin unter Deiner geklonten Identität verfügbar und zugreifbar.
[b][color=grey]Privatsphäre:[/color][/b] Red-Identitäten (Zot-IDs) können gelöscht, gesichert/heruntergeladen und geklont werden. Du hast volle Kontrolle über Deine Daten. Wenn Du Dich entscheidest, all Deine Daten und Deine Zot-ID zu löschen, musst Du nur auf einen Link klicken, und sie werden sofort von dem Server gelöscht. Keine Fragen, keine Umstände
[url=[baseurl]/help]Zurück zur Hilfe-Startseite[/url]

29
doc/old/debian_install.bb Normal file
View file

@ -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 &amp; 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]

View file

@ -0,0 +1,52 @@
Red development - some useful basic functions
=============================================
* get_account_id()
Returns numeric account_id if authenticated or 0. It is possible to be authenticated and not connected to a channel.
* local_user()
Returns authenticated numeric channel_id if authenticated and connected to a channel or 0. Sometimes referred to as $uid in the code.
* remote_user()
Returns authenticated string hash of Red global identifier, if authenticated via remote auth, or an empty string.
* get_app()
Returns the global app structure ($a).
* App::get_observer()
(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).
* get_config($family,$key), get_pconfig($uid,$family,$key)
Returns the config setting for $family and $key or false if unset.
* set_config($family,$key,$value), set_pconfig($uid,$family,$key,$value)
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).
* dbesc()
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()
* q($sql,$var1...)
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.
* t($string)
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.
* x($var), $x($array,$key)
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;

View file

@ -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-&gt;get_observer() or get_app()-&gt;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;

67
doc/old/developers.bb Normal file
View file

@ -0,0 +1,67 @@
[b]Red Developer Guide[/b]
We're pretty relaxed when it comes to developers. We don't have a lot of rules. Some of us are over-worked and if you want to help we're happy to let you help. That said, attention to a few guidelines will make the process smoother and make it easier to work together. We have developers from across the globe with different abilities and different cultural backgrounds and different levels of patience. Our primary rule is to respect others. Sometimes this is hard and sometimes we have very different opinions of how things should work, but if everybody makes an effort, we'll get along just fine.
[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 &quot;Pull request&quot; 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=[baseurl]/help/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]Concensus Building[/b]
Code changes which fix an obvious bug are pretty straight-forward. For instance if you click "Save" and the thing you're trying to save isn't saved, it's fairly obvious what the intended behaviour should be. Often when developing feature requests, it may affect large numbers of community members and it's possible that other members of the community won't agree with the need for the feature, or with your proposed implementation. They may not see something as a bug or a desirable feature.
We encourage concensus building within the community when it comes to any feature which might be considered controversial or where there isn't unanimous decision that the proposed feature is the correct way to accomplish the task. The first place to pitch your ideas is to [url=https://zothub.com/channel/one]Channel One[/url]. Others may have some input or be able to point out facets of your concept which might be problematic in our environment. But also, you may encounter opposition to your plan. This doesn't mean you should stop and/or ignore the feature. Listen to the concerns of others and try and work through any implementation issues.
There are places where opposition cannot be resolved. In these cases, please consider making your feature [b]optional[/b] or non-default behaviour that must be specifically enabled. This technique can often be used when a feature has significant but less than unanimous support. Those who desire the feature can turn it on and those who don't want it - will leave it turned off.
If a feature uses other networks or websites and or is only seen as desirable by a small minority of the community, consider making the functionality available via an addon or plugin. Once again, those who don't desire the feature won't need to install it. Plugins are relatively easy to create and "hooks" can be easily added or modified if the current hooks do not do what is needed to allow your plugin to work.
[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. &quot;$foo = $bar . 'abc';&quot; instead of &quot;$foo=$bar.'abc';&quot;[/li]
[li] Generally speaking, we use single quotes for string variables and double quotes for SQL statements. &quot;Here documents&quot; 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]

View file

@ -0,0 +1,21 @@
[b]External Resource Links[/b]
[b][color= grey][size=24]External Links[/size][/color][/b]
[b]Third-Party Themes[/b]
[*][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=http://beardyunixer.com:1234/?p=red-addons.git;a=tree]Webpage/Publishing orientated addons and modules[/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=http://beardyunixer.com:1234/?p=debian-install-script.git;a=tree]Debian Install Script[/url]

103
doc/old/extra_features.bb Normal file
View file

@ -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 &quot;yyyy-mm-dd hh:mm&quot; format, but in the English language you have a bit more freedom and can use most any recognisable date reference such as &quot;next Thursday&quot; or &quot;+1 day&quot;. 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 &quot;widget&quot; 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 &quot;what you see is what you get&quot; 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 &quot;end-to-end&quot; with a shared secret key. How the recipient learns the secret key is completely up to you. You can provide a hint such as &quot;the name of aunt Claire's first dog&quot;.
[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 &quot;circles&quot; or Disapora &quot;aspects&quot;.
[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

111
doc/old/features.bb Normal file
View file

@ -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 with any free and open source software, there may be many other extensions, additions, plugins, themes and configurations that are 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 &quot;Acquaintances&quot;.
[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 &quot;Friends&quot;.
At this point, Red's [i]Affinity Slider[/i] tool, which usually appears at the top of your &quot;Matrix&quot; 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 &quot;Me&quot; to &quot;Friends&quot;, only contacts (or channels) that are marked as &quot;Me&quot;, &quot;Best Friends&quot;, and &quot;Friends&quot; will be displayed on your page. All other channels and contacts, such as the contact added under affinity level &quot;Acquaintances&quot;, 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 &quot;Security and Privacy Settings&quot; 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 &lt;&lt;Private Communications Best Practices&gt;&gt; page.
Some caveats apply. For a full explanation of identity cloning, read the &lt;HOW TO CLONE MY IDENTITY&gt;.
[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 &quot;Settings.&quot;
For user who prefer not to use TinyMCE, content can be entered by typing BBCode markup.
Furthermore, when creating &quot;Websites&quot; or using &quot;Comanche&quot; 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]

View file

@ -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 &quot;fork&quot; 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]

View file

@ -0,0 +1,112 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.3.1"/>
<title>The Red Matrix: view/theme/redbasic/schema/BS-Default.php File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="rm-64.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">The Red Matrix
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('BS-Default_8php.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">BS-Default.php File Reference</div> </div>
</div><!--header-->
<div class="contents">
</div><!-- contents -->
</div><!-- doc-content -->

View file

@ -0,0 +1,120 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.3.1"/>
<title>The Red Matrix: include/BaseObject.php File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="rm-64.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">The Red Matrix
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('BaseObject_8php.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> </div>
<div class="headertitle">
<div class="title">BaseObject.php File Reference</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classBaseObject.html">BaseObject</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
</div><!-- doc-content -->

View file

@ -0,0 +1,533 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.3.1"/>
<title>The Red Matrix: include/Contact.php File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="rm-64.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">The Red Matrix
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('Contact_8php.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Contact.php File Reference</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a2f4f495d53f2a334ab75292af79d3c91"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Contact_8php.html#a2f4f495d53f2a334ab75292af79d3c91">rconnect_url</a> ($channel_id, $xchan)</td></tr>
<tr class="separator:a2f4f495d53f2a334ab75292af79d3c91"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae8803c330352cbf1e828eb7490edf47e"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Contact_8php.html#ae8803c330352cbf1e828eb7490edf47e">abook_connections</a> ($channel_id, $sql_conditions= '')</td></tr>
<tr class="separator:ae8803c330352cbf1e828eb7490edf47e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5b02c2a962ee55b1b7ca6c159d6e4c5"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Contact_8php.html#ad5b02c2a962ee55b1b7ca6c159d6e4c5">abook_self</a> ($channel_id)</td></tr>
<tr class="separator:ad5b02c2a962ee55b1b7ca6c159d6e4c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a87e699f74a1102b25e8aa0432d86a91e"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Contact_8php.html#a87e699f74a1102b25e8aa0432d86a91e">channelx_by_nick</a> ($nick)</td></tr>
<tr class="separator:a87e699f74a1102b25e8aa0432d86a91e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a483cda56f9e37c3a4a8773dcdfeb0258"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Contact_8php.html#a483cda56f9e37c3a4a8773dcdfeb0258">channelx_by_hash</a> ($hash)</td></tr>
<tr class="separator:a483cda56f9e37c3a4a8773dcdfeb0258"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3a0844dac1e86d523de5d2f432cfeebc"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Contact_8php.html#a3a0844dac1e86d523de5d2f432cfeebc">channelx_by_n</a> ($id)</td></tr>
<tr class="separator:a3a0844dac1e86d523de5d2f432cfeebc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6348a532c9d26cd1c9afbc9aa6aa8960"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Contact_8php.html#a6348a532c9d26cd1c9afbc9aa6aa8960">vcard_from_xchan</a> ($xchan, $observer=null, $mode= '')</td></tr>
<tr class="separator:a6348a532c9d26cd1c9afbc9aa6aa8960"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a024919623a830e8703ac4f23496dd66c"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Contact_8php.html#a024919623a830e8703ac4f23496dd66c">abook_toggle_flag</a> ($abook, $flag)</td></tr>
<tr class="separator:a024919623a830e8703ac4f23496dd66c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2fc191067dd571a79603c66b04b1ca15"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Contact_8php.html#a2fc191067dd571a79603c66b04b1ca15">user_remove</a> ($uid)</td></tr>
<tr class="separator:a2fc191067dd571a79603c66b04b1ca15"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6e64de7db60b7243dce45fb6347636ff"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Contact_8php.html#a6e64de7db60b7243dce45fb6347636ff">account_remove</a> ($account_id, $local=true)</td></tr>
<tr class="separator:a6e64de7db60b7243dce45fb6347636ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a186162051a5127069cc851d78740f205"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Contact_8php.html#a186162051a5127069cc851d78740f205">channel_remove</a> ($channel_id, $local=true)</td></tr>
<tr class="separator:a186162051a5127069cc851d78740f205"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a08845ce8c5b997d5edac38ae7118b5c8"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Contact_8php.html#a08845ce8c5b997d5edac38ae7118b5c8">mark_orphan_hubsxchans</a> ()</td></tr>
<tr class="separator:a08845ce8c5b997d5edac38ae7118b5c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acc12cda999c88c4d6185cca967c15125"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Contact_8php.html#acc12cda999c88c4d6185cca967c15125">remove_all_xchan_resources</a> ($xchan, $channel_id=0)</td></tr>
<tr class="separator:acc12cda999c88c4d6185cca967c15125"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a28e062c884331dbb5dfa713228c25ad6"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Contact_8php.html#a28e062c884331dbb5dfa713228c25ad6">contact_remove</a> ($channel_id, $abook_id)</td></tr>
<tr class="separator:a28e062c884331dbb5dfa713228c25ad6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a38daa1c210b78385307123450ca9a1fc"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Contact_8php.html#a38daa1c210b78385307123450ca9a1fc">terminate_friendship</a> ($user, $self, $contact)</td></tr>
<tr class="separator:a38daa1c210b78385307123450ca9a1fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a852fa476f0c70bde10a4f2533aec5f71"><td class="memItemLeft" align="right" valign="top"><a class="el" href="theme_2mytheme_2php_2default_8php.html#a3987f5547ceb7e36a210a66a06241a5a">if</a>(!function_exists('mark_for_death')) <br class="typebreak"/>
<a class="el" href="theme_2mytheme_2php_2default_8php.html#a3987f5547ceb7e36a210a66a06241a5a">if</a>(!function_exists('unmark_for_death'))&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Contact_8php.html#a852fa476f0c70bde10a4f2533aec5f71">random_profile</a> ()</td></tr>
<tr class="separator:a852fa476f0c70bde10a4f2533aec5f71"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ae8803c330352cbf1e828eb7490edf47e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">abook_connections </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$channel_id</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$sql_conditions</em> = <code>''</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="ad5b02c2a962ee55b1b7ca6c159d6e4c5"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">abook_self </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$channel_id</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="mod_2photos_8php.html#a062bed4d04d14fee8a53f4c9be673080">photos_post()</a>.</p>
</div>
</div>
<a class="anchor" id="a024919623a830e8703ac4f23496dd66c"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">abook_toggle_flag </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$abook</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$flag</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="connedit_8php.html#a795acb3d9d841f55c255d7611681ab67">connedit_content()</a>.</p>
</div>
</div>
<a class="anchor" id="a6e64de7db60b7243dce45fb6347636ff"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">account_remove </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$account_id</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$local</em> = <code>true</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="admin_8php.html#a62f10f90c47686c9c3c37c4c03a108d2">admin_page_users()</a>, <a class="el" href="admin_8php.html#a5a696706a3869800e65fb365214241b7">admin_page_users_post()</a>, and <a class="el" href="include_2chanman_8php.html#a21ba9a5c961e866ff27aee3ee67bf99b">chanman_remove_everything_from_network()</a>.</p>
</div>
</div>
<a class="anchor" id="a186162051a5127069cc851d78740f205"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">channel_remove </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$channel_id</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$local</em> = <code>true</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="Contact_8php.html#a6e64de7db60b7243dce45fb6347636ff">account_remove()</a>, <a class="el" href="admin_8php.html#ad6f87a764fd35f522c7b4c351d7878ec">admin_page_channels()</a>, <a class="el" href="admin_8php.html#a42e628f367c168add8013352ac74d33f">admin_page_channels_post()</a>, and <a class="el" href="removeme_8php.html#a7be08738beca44bb98a79e01cdb2ee88">removeme_post()</a>.</p>
</div>
</div>
<a class="anchor" id="a483cda56f9e37c3a4a8773dcdfeb0258"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">channelx_by_hash </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$hash</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="a3a0844dac1e86d523de5d2f432cfeebc"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">channelx_by_n </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$id</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="widgets_8php.html#a702e2fc0adc9b615999eca18b7311b5e">widget_photo_albums()</a>.</p>
</div>
</div>
<a class="anchor" id="a87e699f74a1102b25e8aa0432d86a91e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">channelx_by_nick </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$nick</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="mod_2photos_8php.html#ab950295cd77626f5fe65331a87693014">photos_init()</a>.</p>
</div>
</div>
<a class="anchor" id="a28e062c884331dbb5dfa713228c25ad6"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">contact_remove </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$channel_id</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$abook_id</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="connedit_8php.html#a795acb3d9d841f55c255d7611681ab67">connedit_content()</a>, and <a class="el" href="post_8php.html#af59e6a1dc22d19d9257b01cd7ccedb75">post_post()</a>.</p>
</div>
</div>
<a class="anchor" id="a08845ce8c5b997d5edac38ae7118b5c8"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">mark_orphan_hubsxchans </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>mark any hubs "offline" that haven't been heard from in more than 30 days Allow them to redeem themselves if they come back later. Then go through all those that are newly marked and see if any other hubs are attached to the controlling xchan that are still alive. If not, they're dead (although they could come back some day). </p>
<p>Referenced by <a class="el" href="poller_8php.html#a5f12df3a4738124b6c039971e87e76da">poller_run()</a>.</p>
</div>
</div>
<a class="anchor" id="a852fa476f0c70bde10a4f2533aec5f71"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="theme_2mytheme_2php_2default_8php.html#a3987f5547ceb7e36a210a66a06241a5a">if</a> (!function_exists('mark_for_death')) <a class="el" href="theme_2mytheme_2php_2default_8php.html#a3987f5547ceb7e36a210a66a06241a5a">if</a> (!function_exists('unmark_for_death')) random_profile </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="randprof_8php.html#abf5dba3c608b9304cbf68327cd31b090">randprof_init()</a>.</p>
</div>
</div>
<a class="anchor" id="a2f4f495d53f2a334ab75292af79d3c91"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">rconnect_url </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$channel_id</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$xchan</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="identity_8php.html#a432259b2cf5b6f59be53e71db9f2c7dc">profile_sidebar()</a>.</p>
</div>
</div>
<a class="anchor" id="acc12cda999c88c4d6185cca967c15125"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">remove_all_xchan_resources </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$xchan</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$channel_id</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="post_8php.html#af59e6a1dc22d19d9257b01cd7ccedb75">post_post()</a>.</p>
</div>
</div>
<a class="anchor" id="a38daa1c210b78385307123450ca9a1fc"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">terminate_friendship </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$user</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$self</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$contact</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="a2fc191067dd571a79603c66b04b1ca15"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">user_remove </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$uid</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="a6348a532c9d26cd1c9afbc9aa6aa8960"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">vcard_from_xchan </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$xchan</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$observer</em> = <code>null</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$mode</em> = <code>''</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="widgets_8php.html#abe03366fd22fd27d683518fa0765da50">widget_vcard()</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->

View file

@ -0,0 +1,19 @@
var Contact_8php =
[
[ "abook_connections", "Contact_8php.html#ae8803c330352cbf1e828eb7490edf47e", null ],
[ "abook_self", "Contact_8php.html#ad5b02c2a962ee55b1b7ca6c159d6e4c5", null ],
[ "abook_toggle_flag", "Contact_8php.html#a024919623a830e8703ac4f23496dd66c", null ],
[ "account_remove", "Contact_8php.html#a6e64de7db60b7243dce45fb6347636ff", null ],
[ "channel_remove", "Contact_8php.html#a186162051a5127069cc851d78740f205", null ],
[ "channelx_by_hash", "Contact_8php.html#a483cda56f9e37c3a4a8773dcdfeb0258", null ],
[ "channelx_by_n", "Contact_8php.html#a3a0844dac1e86d523de5d2f432cfeebc", null ],
[ "channelx_by_nick", "Contact_8php.html#a87e699f74a1102b25e8aa0432d86a91e", null ],
[ "contact_remove", "Contact_8php.html#a28e062c884331dbb5dfa713228c25ad6", null ],
[ "mark_orphan_hubsxchans", "Contact_8php.html#a08845ce8c5b997d5edac38ae7118b5c8", null ],
[ "random_profile", "Contact_8php.html#a852fa476f0c70bde10a4f2533aec5f71", null ],
[ "rconnect_url", "Contact_8php.html#a2f4f495d53f2a334ab75292af79d3c91", null ],
[ "remove_all_xchan_resources", "Contact_8php.html#acc12cda999c88c4d6185cca967c15125", null ],
[ "terminate_friendship", "Contact_8php.html#a38daa1c210b78385307123450ca9a1fc", null ],
[ "user_remove", "Contact_8php.html#a2fc191067dd571a79603c66b04b1ca15", null ],
[ "vcard_from_xchan", "Contact_8php.html#a6348a532c9d26cd1c9afbc9aa6aa8960", null ]
];

View file

@ -0,0 +1,120 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.3.1"/>
<title>The Red Matrix: include/ConversationObject.php File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="rm-64.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">The Red Matrix
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('ConversationObject_8php.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> </div>
<div class="headertitle">
<div class="title">ConversationObject.php File Reference</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConversation.html">Conversation</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
</div><!-- doc-content -->

View file

@ -0,0 +1,120 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.3.1"/>
<title>The Red Matrix: include/ITemplateEngine.php File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="rm-64.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">The Red Matrix
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('ITemplateEngine_8php.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> </div>
<div class="headertitle">
<div class="title">ITemplateEngine.php File Reference</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">interface &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="interfaceITemplateEngine.html">ITemplateEngine</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
</div><!-- doc-content -->

View file

@ -0,0 +1,120 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.3.1"/>
<title>The Red Matrix: include/ItemObject.php File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="rm-64.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">The Red Matrix
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('ItemObject_8php.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> </div>
<div class="headertitle">
<div class="title">ItemObject.php File Reference</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classItem.html">Item</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
</div><!-- doc-content -->

View file

@ -0,0 +1,122 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.3.1"/>
<title>The Red Matrix: include/ProtoDriver.php File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="rm-64.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">The Red Matrix
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('ProtoDriver_8php.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> </div>
<div class="headertitle">
<div class="title">ProtoDriver.php File Reference</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classProtoDriver.html">ProtoDriver</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classZotDriver.html">ZotDriver</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
</div><!-- doc-content -->

View file

@ -0,0 +1,112 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.3.1"/>
<title>The Red Matrix: view/theme/apw/README.md File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="rhash-64.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">The Red Matrix
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('README_8md.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">view/theme/apw/README.md File Reference</div> </div>
</div><!--header-->
<div class="contents">
</div><!-- contents -->
</div><!-- doc-content -->

View file

@ -0,0 +1,171 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.3.1"/>
<title>The Red Project: include/Scrape.php File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="r!-64.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">The Red Project
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('Scrape_8php.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> &#124;
<a href="#var-members">Variables</a> </div>
<div class="headertitle">
<div class="title">Scrape.php File Reference</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a32883beb7dbf311fc9bfa99200a7402c"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Scrape_8php.html#a32883beb7dbf311fc9bfa99200a7402c">probe_url</a> ($url, $mode=<a class="el" href="Scrape_8php.html#aa6b0bdcf6e8f9d44e699fd94d2207c98">PROBE_NORMAL</a>)</td></tr>
<tr class="separator:a32883beb7dbf311fc9bfa99200a7402c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:aa6b0bdcf6e8f9d44e699fd94d2207c98"><td class="memItemLeft" align="right" valign="top">const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Scrape_8php.html#aa6b0bdcf6e8f9d44e699fd94d2207c98">PROBE_NORMAL</a> (!function_exists('scrape_feed')) 0</td></tr>
<tr class="separator:aa6b0bdcf6e8f9d44e699fd94d2207c98"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="a32883beb7dbf311fc9bfa99200a7402c"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">probe_url </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$url</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$mode</em> = <code><a class="el" href="Scrape_8php.html#aa6b0bdcf6e8f9d44e699fd94d2207c98">PROBE_NORMAL</a></code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<h2 class="groupheader">Variable Documentation</h2>
<a class="anchor" id="aa6b0bdcf6e8f9d44e699fd94d2207c98"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const PROBE_NORMAL(!function_exists('scrape_feed')) 0</td>
</tr>
</table>
</div><div class="memdoc">
<p>Probe a network address to discover what kind of protocols we need to communicate with it.</p>
<p>Warning: this function is a bit touchy and there are some subtle dependencies within the logic flow. Edit with care.</p>
<p>PROBE_DIASPORA has a bias towards returning Diaspora information while PROBE_NORMAL has a bias towards dfrn/zot - in the case where an address (such as a <a class="el" href="namespaceFriendica.html">Friendica</a> address) supports more than one type of network. </p>
<p>Referenced by <a class="el" href="Scrape_8php.html#a32883beb7dbf311fc9bfa99200a7402c">probe_url()</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->

View file

@ -0,0 +1,5 @@
var Scrape_8php =
[
[ "probe_url", "Scrape_8php.html#a32883beb7dbf311fc9bfa99200a7402c", null ],
[ "PROBE_NORMAL", "Scrape_8php.html#aa6b0bdcf6e8f9d44e699fd94d2207c98", null ]
];

View file

@ -0,0 +1,137 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.3.1"/>
<title>The Red Matrix: mod/_well_known.php File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="rm-64.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">The Red Matrix
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('__well__known_8php.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">_well_known.php File Reference</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a6ebfa937a2024f0b5dab53f0ac90fed0"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="__well__known_8php.html#a6ebfa937a2024f0b5dab53f0ac90fed0">_well_known_init</a> (&amp;$a)</td></tr>
<tr class="separator:a6ebfa937a2024f0b5dab53f0ac90fed0"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="a6ebfa937a2024f0b5dab53f0ac90fed0"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">_well_known_init </td>
<td>(</td>
<td class="paramtype">&amp;&#160;</td>
<td class="paramname"><em>$a</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->

View file

@ -0,0 +1,4 @@
var __well__known_8php =
[
[ "_well_known_init", "__well__known_8php.html#a6ebfa937a2024f0b5dab53f0ac90fed0", null ]
];

View file

@ -0,0 +1,349 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.3.1"/>
<title>The Red Matrix: include/account.php File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="rm-64.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">The Red Matrix
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('account_8php.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">account.php File Reference</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ae052bd5558847bd38e89c213561a9771"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="account_8php.html#ae052bd5558847bd38e89c213561a9771">check_account_email</a> ($email)</td></tr>
<tr class="separator:ae052bd5558847bd38e89c213561a9771"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a144b4891022567668375b58ea61cfff0"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="account_8php.html#a144b4891022567668375b58ea61cfff0">check_account_password</a> ($password)</td></tr>
<tr class="separator:a144b4891022567668375b58ea61cfff0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaff7720423417a4333697894ffd9ddeb"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="account_8php.html#aaff7720423417a4333697894ffd9ddeb">check_account_invite</a> ($invite_code)</td></tr>
<tr class="separator:aaff7720423417a4333697894ffd9ddeb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a917d74aad0baf3e0c4b51cf1051e654f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="account_8php.html#a917d74aad0baf3e0c4b51cf1051e654f">check_account_admin</a> ($arr)</td></tr>
<tr class="separator:a917d74aad0baf3e0c4b51cf1051e654f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a43e3042b2723d76915a030bac3c668b6"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="account_8php.html#a43e3042b2723d76915a030bac3c668b6">account_total</a> ()</td></tr>
<tr class="separator:a43e3042b2723d76915a030bac3c668b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a141fe579c351c78209d425473f978eb5"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="account_8php.html#a141fe579c351c78209d425473f978eb5">create_account</a> ($arr)</td></tr>
<tr class="separator:a141fe579c351c78209d425473f978eb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a014de2d5d5c9785de5bf547a485822fa"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="account_8php.html#a014de2d5d5c9785de5bf547a485822fa">send_reg_approval_email</a> ($arr)</td></tr>
<tr class="separator:a014de2d5d5c9785de5bf547a485822fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa9c29c497c17d8f9344dce8631ad8761"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="account_8php.html#aa9c29c497c17d8f9344dce8631ad8761">send_verification_email</a> ($email, $password)</td></tr>
<tr class="separator:aa9c29c497c17d8f9344dce8631ad8761"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac5c570a2d46446bad4dd2501e9c5a4b1"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="account_8php.html#ac5c570a2d46446bad4dd2501e9c5a4b1">user_allow</a> ($hash)</td></tr>
<tr class="separator:ac5c570a2d46446bad4dd2501e9c5a4b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac1653efba62493b9d87513e1b6c04c83"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="account_8php.html#ac1653efba62493b9d87513e1b6c04c83">user_deny</a> ($hash)</td></tr>
<tr class="separator:ac1653efba62493b9d87513e1b6c04c83"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0d183a3cb4c67a0f5e906811df7a1fc9"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="account_8php.html#a0d183a3cb4c67a0f5e906811df7a1fc9">downgrade_accounts</a> ()</td></tr>
<tr class="separator:a0d183a3cb4c67a0f5e906811df7a1fc9"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="a43e3042b2723d76915a030bac3c668b6"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">account_total </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="account_8php.html#a141fe579c351c78209d425473f978eb5">create_account()</a>, and <a class="el" href="zfinger_8php.html#a8139b83a22ef98869adc10aa224027a0">zfinger_init()</a>.</p>
</div>
</div>
<a class="anchor" id="a917d74aad0baf3e0c4b51cf1051e654f"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">check_account_admin </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$arr</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="account_8php.html#a141fe579c351c78209d425473f978eb5">create_account()</a>.</p>
</div>
</div>
<a class="anchor" id="ae052bd5558847bd38e89c213561a9771"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">check_account_email </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$email</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="account_8php.html#a141fe579c351c78209d425473f978eb5">create_account()</a>, and <a class="el" href="register_8php.html#ae20c0cd40f738d6295de58b9202c83d5">register_init()</a>.</p>
</div>
</div>
<a class="anchor" id="aaff7720423417a4333697894ffd9ddeb"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">check_account_invite </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$invite_code</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="account_8php.html#a141fe579c351c78209d425473f978eb5">create_account()</a>, and <a class="el" href="register_8php.html#ae20c0cd40f738d6295de58b9202c83d5">register_init()</a>.</p>
</div>
</div>
<a class="anchor" id="a144b4891022567668375b58ea61cfff0"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">check_account_password </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$password</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="account_8php.html#a141fe579c351c78209d425473f978eb5">create_account()</a>, and <a class="el" href="register_8php.html#ae20c0cd40f738d6295de58b9202c83d5">register_init()</a>.</p>
</div>
</div>
<a class="anchor" id="a141fe579c351c78209d425473f978eb5"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">create_account </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$arr</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="register_8php.html#a51731dcc1917c58a790eb1c0f6132271">register_post()</a>.</p>
</div>
</div>
<a class="anchor" id="a0d183a3cb4c67a0f5e906811df7a1fc9"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">downgrade_accounts </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><a class="el" href="account_8php.html#a0d183a3cb4c67a0f5e906811df7a1fc9">downgrade_accounts()</a> Checks for accounts that have past their expiration date. If the account has a service class which is not the site default, the service class is reset to the site default and expiration reset to never. If the account has no service class it is expired and subsequently disabled. called from <a class="el" href="poller_8php.html">include/poller.php</a> as a scheduled task.</p>
<p>Reclaiming resources which are no longer within the service class limits is not the job of this function, but this can be implemented by plugin if desired. Default behaviour is to stop allowing additional resources to be consumed. </p>
<p>Referenced by <a class="el" href="poller_8php.html#a5f12df3a4738124b6c039971e87e76da">poller_run()</a>.</p>
</div>
</div>
<a class="anchor" id="a014de2d5d5c9785de5bf547a485822fa"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">send_reg_approval_email </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$arr</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="register_8php.html#a51731dcc1917c58a790eb1c0f6132271">register_post()</a>.</p>
</div>
</div>
<a class="anchor" id="aa9c29c497c17d8f9344dce8631ad8761"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">send_verification_email </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$email</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$password</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="register_8php.html#a51731dcc1917c58a790eb1c0f6132271">register_post()</a>.</p>
</div>
</div>
<a class="anchor" id="ac5c570a2d46446bad4dd2501e9c5a4b1"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">user_allow </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$hash</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="admin_8php.html#a5a696706a3869800e65fb365214241b7">admin_page_users_post()</a>, and <a class="el" href="regmod_8php.html#a7953df4e32e63946565e90cdd5d50409">regmod_content()</a>.</p>
</div>
</div>
<a class="anchor" id="ac1653efba62493b9d87513e1b6c04c83"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">user_deny </td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>$hash</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Referenced by <a class="el" href="admin_8php.html#a5a696706a3869800e65fb365214241b7">admin_page_users_post()</a>, and <a class="el" href="regmod_8php.html#a7953df4e32e63946565e90cdd5d50409">regmod_content()</a>.</p>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->

View file

@ -0,0 +1,14 @@
var account_8php =
[
[ "account_total", "account_8php.html#a43e3042b2723d76915a030bac3c668b6", null ],
[ "check_account_admin", "account_8php.html#a917d74aad0baf3e0c4b51cf1051e654f", null ],
[ "check_account_email", "account_8php.html#ae052bd5558847bd38e89c213561a9771", null ],
[ "check_account_invite", "account_8php.html#aaff7720423417a4333697894ffd9ddeb", null ],
[ "check_account_password", "account_8php.html#a144b4891022567668375b58ea61cfff0", null ],
[ "create_account", "account_8php.html#a141fe579c351c78209d425473f978eb5", null ],
[ "downgrade_accounts", "account_8php.html#a0d183a3cb4c67a0f5e906811df7a1fc9", null ],
[ "send_reg_approval_email", "account_8php.html#a014de2d5d5c9785de5bf547a485822fa", null ],
[ "send_verification_email", "account_8php.html#aa9c29c497c17d8f9344dce8631ad8761", null ],
[ "user_allow", "account_8php.html#ac5c570a2d46446bad4dd2501e9c5a4b1", null ],
[ "user_deny", "account_8php.html#ac1653efba62493b9d87513e1b6c04c83", null ]
];

View file

@ -0,0 +1,137 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.3.1"/>
<title>The Red Matrix: mod/achievements.php File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="rm-64.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">The Red Matrix
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('achievements_8php.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">achievements.php File Reference</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a35ae04ada0e227d19671f289a32fb30e"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="achievements_8php.html#a35ae04ada0e227d19671f289a32fb30e">achievements_content</a> (&amp;$a)</td></tr>
<tr class="separator:a35ae04ada0e227d19671f289a32fb30e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="a35ae04ada0e227d19671f289a32fb30e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">achievements_content </td>
<td>(</td>
<td class="paramtype">&amp;&#160;</td>
<td class="paramname"><em>$a</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->

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