define ( 'NETWORK_DIASPORA2', 'dspc'); // Diaspora connector
define ( 'NETWORK_STATUSNET', 'stac'); // Statusnet connector
define ( 'NETWORK_APPNET', 'apdn'); // app.net
-
+define ( 'NETWORK_NEWS', 'nntp'); // Network News Transfer Protocol
+define ( 'NETWORK_ICALENDAR', 'ical'); // iCalendar
define ( 'NETWORK_PHANTOM', 'unkn'); // Place holder
/**
NETWORK_TWITTER => (-14),
NETWORK_DIASPORA2 => (-15),
NETWORK_STATUSNET => (-16),
- NETWORK_APPNET => (-17),
+ NETWORK_APPNET => (-17),
+ NETWORK_NEWS => (-18),
+ NETWORK_ICALENDAR => (-19),
NETWORK_PHANTOM => (-127),
);
This text isn't importend for you, just wait for the next window.
The first line shows your name and your current IP address.
The right part of the window shows all users.
-The lower part of the window contains an input field.
+The lower part of the window contains an input field.
Jappix Mini
---
At first you have to get the current version. You can either pull it from [Github](https://github.com) like so:
- $> cd /var/www/virtual/YOURSPACE/html/addon; git pull
+ $> cd /var/www/virtual/YOURSPACE/html/addon; git pull
Or you can download a tar archive here: [jappixmini.tgz](https://github.com/friendica/friendica-addons/blob/master/jappixmini.tgz) (click at „view raw“).
Now add your Jabber/XMPP name, the domain/server (without "http"; just "jappix.com").
For „Jabber BOSH Host“ you could use "https://bind.jappix.com/".
+Note that you need another BOSH server if you do not use jappix.com for your XMPP account.
You can find further information in the „Configuration Help“-section below this fields.
At last you have enter your password (there are some more optional options, you can choose).
-Finish these steps with "send" to save the entries.
+Finish these steps with "send" to save the entries.
Now, you should find the chatbox at the lower right corner of your browser window.
-If you want to add contacts manually, you can click "add contact".
+If you want to add contacts manually, you can click "add contact".
* Try to reproduce a bug that needs more inquries and write down what you find out.
* If a bug looks fixed, ask the bug reporters for feedback to find out if the bug can be closed.
* Fix a bug if you can. Please make the pull request against the *develop* branch of the repository.
+ * There is a *Junior Job* label for issues we think might be a good point to start with.
+ But you don't have to limit yourself to those issues.
###Web interface
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 [helper]() or the [developer]() forum or [file an issue](https://github.com/friendica/friendica/issues).
+Also if you encounter installation issues, please let us know via the [helper](http://helpers.pyxis.uberspace.de/profile/helpers) or the [developer](https://friendika.openmindspace.org/profile/friendicadevelopers) forum or [file an issue](https://github.com/friendica/friendica/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.
+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.
+If you do not have a Friendica account yet, you can register a temporary one at [tryfriendica.de](https://tryfriendica.de) and join the forums mentioned above from there.
+The account will expire after 7 days, but you can ask the server admin to keep your account longer, should the problem not be resolved after that.
Before you begin: Choose a domain name or subdomain name for your server.
Put some thought into this. Changing it after installation is currently not supported.
* curl, gd, mysql, hash 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
+* Mysql 5.x or an equivalant alternative for MySQL (MariaDB etc.)
* the 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.
* If your hosting provider doesn't allow Unix shell access, you might have trouble getting everything to work.
Unpack the Friendica 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
+The Linux command to clone the repository into a directory "mywebsite" would be
+
+ git clone https://github.com/friendica/friendica.git mywebsite
- git clone https://github.com/friendica/friendica.git mywebsite
-
Make sure the folder *view/smarty3* exists and is writable by the webserver user
-
- mkdir view/smarty3
- chmod 777 view/smarty3
-
+
+ mkdir view/smarty3
+ chmod 777 view/smarty3
+
Get the addons by going into your website folder.
-
- cd mywebsite
-
+
+ cd mywebsite
+
Clone the addon repository (separately):
-
- git clone https://github.com/friendica/friendica-addons.git addon
-
+
+ git clone https://github.com/friendica/friendica-addons.git addon
+
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.
###Create a database
Set up a cron job or scheduled task to run the poller once every 5-10 minutes in order to perform background processing.
Example:
- cd /base/directory; /path/to/php include/poller.php
+ 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:
- */10 * * * * cd /home/myname/mywebsite; /usr/bin/php include/poller.php
+ */10 * * * * cd /home/myname/mywebsite; /usr/bin/php include/poller.php
You can generally find the location of PHP by executing "which php".
If you run into trouble with this section please contact your hosting provider for assistance.
To do this, edit the file ".htconfig.php" and look for a line describing your plugins.
On a fresh installation, it will look like this:
- $a->config['system']['addon'] = 'js_upload';
+ $a->config['system']['addon'] = 'js_upload';
It indicates the "js_upload" addon module is enabled.
You may add additional addons/plugins using this same line in the configuration file.
Change it to read
- $a->config['system']['addon'] = 'js_upload,poormancron';
+ $a->config['system']['addon'] = 'js_upload,poormancron';
+
+and save your changes.
-and save your changes.
+Once you have installed Friendica and created an admin account as part of the process, you can access the admin panel of your installation and do most of the server wide configuration from there
Updating your installation with git
---
You can get the latest changes at any time with
- cd mywebsite
- git pull
+ cd mywebsite
+ git pull
+
+The default branch to use it the ``master`` branch, which is the stable version of Friendica.
+If you want to use and test bleeding edge code please checkout the ``develop`` branch.
+The new features and fixes will be merged from ``develop`` into ``master`` when they are stable approx four times a year.
The addon tree has to be updated separately like so:
-
- cd mywebsite/addon
- git pull
+
+ cd mywebsite/addon
+ git pull
* [Zur Startseite der Hilfe](help)
-Du hast derzeit zwei Möglichkeiten, einen Chat auf Deiner Friendica-Seite zu betreiben
+Du hast derzeit zwei Möglichkeiten, einen Chat auf Deiner Friendica-Seite zu betreiben
* IRC - Internet Relay Chat
* Jappix
##IRC Plugin
-Sobald das Plugin aktiviert ist, kannst Du den Chat unter [deineSeite.de/irc](../irc) finden.
-Beachte aber, dass dieser Chat auch ohne Anmeldung auf Deiner Seite zugänglich ist und somit auch Fremde diesen Chat mitnutzen können.
+Sobald das Plugin aktiviert ist, kannst Du den Chat unter [deineSeite.de/irc](../irc) finden.
+Beachte aber, dass dieser Chat auch ohne Anmeldung auf Deiner Seite zugänglich ist und somit auch Fremde diesen Chat mitnutzen können.
-Wenn Du dem Link folgst, dann kommst Du zum Anmeldefenster des IR-Chats.
-Wähle nun einen Spitznamen (Nickname) und wähle einen Raum aus, in dem Du chatten willst.
-Hier kannst Du jeden Namen eingeben.
-Es kann also auch #tollerChatdessenNamenurichkenne sein.
+Wenn Du dem Link folgst, dann kommst Du zum Anmeldefenster des IR-Chats.
+Wähle nun einen Spitznamen (Nickname) und wähle einen Raum aus, in dem Du chatten willst.
+Hier kannst Du jeden Namen eingeben.
+Es kann also auch #tollerChatdessenNamenurichkenne sein.
Gib als nächstes noch die Captchas ein, um zu zeigen, dass es sich bei Dir um einen Menschen handelt und klicke auf "Connect".
-Im nächsten Fenster siehst Du zunächst viel Text beim Verbindungsaufbau, der allerdings für Dich nicht weiter von Bedeutung ist.
-Anschließend öffnet sich das Chat-Fenster.
-In den ersten Zeilen wird Dir Dein Name und Deine aktuelle IP-Adresse angezeigt.
-Rechts im Fenster siehst Du alle Teilnehmer des Chats.
+Im nächsten Fenster siehst Du zunächst viel Text beim Verbindungsaufbau, der allerdings für Dich nicht weiter von Bedeutung ist.
+Anschließend öffnet sich das Chat-Fenster.
+In den ersten Zeilen wird Dir Dein Name und Deine aktuelle IP-Adresse angezeigt.
+Rechts im Fenster siehst Du alle Teilnehmer des Chats.
Unten hast Du ein Eingabefeld, um Beiträge zu schreiben.
Weiter Informationen zu IRC findest Du zum Beispiel auf <a href="http://wiki.ubuntuusers.de/IRC" target="_blank">ubuntuusers.de</a>, in <a href="https://de.wikipedia.org/wiki/Internet_Relay_Chat" target="_blank">Wikipedia</a> oder bei <a href="http://www.irchelp.org/" target="_blank">icrhelp.org</a> (in Englisch).
##Jappix Mini
-Das Jappix Mini Plugin erlaubt das Erstellen einer Chatbox für Jabber/XMPP-Kontakte.
+Das Jappix Mini Plugin erlaubt das Erstellen einer Chatbox für Jabber/XMPP-Kontakte.
Ein Jabber/XMPP Account sollte vor der Installation bereits vorhanden sein.
Die ausführliche Anleitung dazu und eine Kontrolle, ob Du nicht sogar schon über Deinen E-Mail Anbieter einen Jabber-Account hast, findest Du unter <a href="http://einfachjabber.de" target="_blank">einfachjabber.de</a>.
Entpacke diese Datei (ggf. den entpackten Ordner in „jappixmini“ umbenennen) und lade sowohl den entpackten Ordner komplett als auch die .tgz Datei in den Addon Ordner Deiner Friendica Installation hoch.
-Nach dem Upload gehts in den Friendica Adminbereich und dort zu den Plugins.
+Nach dem Upload gehts in den Friendica Adminbereich und dort zu den Plugins.
Aktiviere das Jappixmini Addon und gehe anschließend über die Plugins Seitenleiste (dort wo auch die Twitter-, Impressums-, GNU Social-, usw. Einstellungen gemacht werden) zu den Jappix Grundeinstellungen.
-Setze hier den Haken zur Aktivierung des BOSH Proxys.
+Setze hier den Haken zur Aktivierung des BOSH Proxys.
Weiter gehts in den Einstellungen Deines Friendica Accounts.
2. Einstellungen
-Gehe bitte zu den Plugin-Einstellungen in Deinen Konto-Einstellungen (Account Settings).
+Gehe bitte zu den Plugin-Einstellungen in Deinen Konto-Einstellungen (Account Settings).
Scrolle ein Stück hinunter bis zu den Jappix Mini Addon settings.
Aktiviere hier zuerst das Addon.
-Trage nun Deinen Jabber/XMPP Namen ein, ebenfalls die entsprechende Domain bzw. den Server (ohne http, also zb einfach so: jappix.com).
+Trage nun Deinen Jabber/XMPP Namen ein, ebenfalls die entsprechende Domain bzw. den Server (ohne http, also zb einfach so: jappix.com).
Um das JavaScript Applet zum Chatten im Browser verwenden zu können, benötigst du einen BOSH Proxy.
Entweder betreibst du deinen eigenen (s. Dokumentation deines XMPP Servers) oder du verwendest einen öffentlichen BOSH Proxy.
Beachte aber, dass der Betreiber dieses Proxies den kompletten Datenverkehr über den Proxy mitlesen kann.
-Siehe dazu auch die „Configuration Help“ weiter unten.
-Gebe danach noch Dein Passwort an, und damit ist eigentlich schon fast alles geschafft.
-Die weiteren Einstellmöglichkeiten bleiben Dir überlassen, sind also optional.
+Siehe dazu auch die „Configuration Help“ unter den Eingabefeldern.
+Gebe danach noch Dein Passwort an, und damit ist eigentlich schon fast alles geschafft.
+Die weiteren Einstellmöglichkeiten bleiben Dir überlassen, sind also optional.
Jetzt noch auf „senden“ klicken und fertig.
-Deine Chatbox sollte jetzt irgendwo unten rechts im Browserfenster „kleben“.
-Falls Du manuell Kontakte hinzufügen möchtest, einfach den „Add Contact“-Knopf nutzen.
+Deine Chatbox sollte jetzt irgendwo unten rechts im Browserfenster „kleben“.
+Falls Du manuell Kontakte hinzufügen möchtest, einfach den „Add Contact“-Knopf nutzen.
-Viel Spass beim Chatten!
+Viel Spass beim Chatten!
Zunächst erstelle Dir per 'git clone https://github.com/friendica/friendica.git' ein funktionierendes Git-Paket auf Deinem System, auf dem Du die Entwicklung durchführst, und einen eigenen Github-Account.
-Erstelle Deine eigene Kopie (fork) der Ursprungsdaten auf Github, an der Du dann entspannt arbeiten kannst.
+Erstelle Deine eigene Kopie (fork) der Ursprungsdaten auf Github, an der Du dann entspannt arbeiten kannst.
Deine Arbeiten sollten mit einem neuen Arbeitszweig (branch) beginnen, den du vom develop Zweig des Repositories beginnst.
Die Anleitung unter [http://help.github.com/fork-a-repo/](http://help.github.com/fork-a-repo/) erklärt Dir genau, wie Du das tun musst.
Gehe dann nach getaner Arbeit zu Deiner Github-Seite und erstelle eine "Pull request", um Deine Änderungen in das Hauptprojekt einzugliedern (merge).
+Solltest du keine Idee haben, an welcher Stelle du einsteigen könntest.
+Wir haben einige Aufgaben auf github mit dem Schlagwort *Junior Job* versehen.
+Bei diesen Aufgaben gehen wir davon aus, dass sie geeignete Einstiegsstellen sind.
+Du musst dich aber natürlich nicht mit diesen Aufgaben beschäftigen um den Friendica Code zu verbeesern.
+
**Wichtig**
-Bitte hole Dir alle Änderungen aus dem Projektverzeichnis und führe sie mit Deiner Arbeit zusammen, **bevor** Du Deine "pull request" erstellst. Wir behalten es uns vor, Patches abzulehnen, die eine große Anzahl an Fehlern hervorrufen.
+Bitte hole Dir alle Änderungen aus dem Projektverzeichnis und führe sie mit Deiner Arbeit zusammen, **bevor** Du Deine "pull request" erstellst. Wir behalten es uns vor, Patches abzulehnen, die eine große Anzahl an Fehlern hervorrufen.
Dies gilt vor allem für Übersetzungen, da wir hier möglicherweise nicht alle feinen Unterschiede in konfliktären Versionen erkennen können.
-Außerdem: **teste Deine Änderungen!** Vergiss nicht, dass eine simple Fehlerlösung einen anderen Fehler auslösen kann.
+Außerdem: **teste Deine Änderungen!** Vergiss nicht, dass eine simple Fehlerlösung einen anderen Fehler auslösen kann.
Lass Deine Änderungen von einem erfahrenen Friendica-Entwickler gegenprüfen.
Eine ausführliche Anleitung zu Git findest Du unter <a href="https://git-scm.com/book/de/v1" target="_blank">https://git-scm.com/book/de/v1</a>.
// ovdje provjeri je li korisnik OK
$sUser = str_replace(array("%20", "(a)"), array(" ", "@"), $aCommand[1]);
$this->writeDebugLog("[debug] checking isuser for ". $sUser);
- $sQuery = "select * from user where nickname='". $db->escape($sUser) ."'";
+ $sQuery = "SELECT `uid` FROM `user` WHERE `nickname`='". $db->escape($sUser) ."'";
$this->writeDebugLog("[debug] using query ". $sQuery);
if ($oResult = q($sQuery)){
if ($oResult) {
$this->writeLog("[exAuth] invalid user: ". $sUser);
fwrite(STDOUT, pack("nn", 2, 0));
}
- $oResult->close();
+ //$oResult->close();
} else {
$this->writeLog("[MySQL] invalid query: ". $sQuery);
fwrite(STDOUT, pack("nn", 2, 0));
// ovdje provjeri prijavu
$sUser = str_replace(array("%20", "(a)"), array(" ", "@"), $aCommand[1]);
$this->writeDebugLog("[debug] doing auth for ". $sUser);
- $sQuery = "select * from user where password='".hash('whirlpool',$aCommand[3])."' and nickname='". $db->escape($sUser) ."'";
+ //$sQuery = "SELECT `uid`, `password` FROM `user` WHERE `password`='".hash('whirlpool',$aCommand[3])."' AND `nickname`='". $db->escape($sUser) ."'";
+ $sQuery = "SELECT `uid`, `password` FROM `user` WHERE `nickname`='". $db->escape($sUser) ."'";
$this->writeDebugLog("[debug] using query ". $sQuery);
if ($oResult = q($sQuery)){
- if ($oResult) {
+ $uid = $oResult[0]["uid"];
+ $Error = ($oResult[0]["password"] != hash('whirlpool',$aCommand[3]));
+/*
+ if ($oResult[0]["password"] == hash('whirlpool',$aCommand[3])) {
// korisnik OK
$this->writeLog("[exAuth] authentificated user ". $sUser ."@". $aCommand[2]);
fwrite(STDOUT, pack("nn", 2, 1));
fwrite(STDOUT, pack("nn", 2, 0));
}
$oResult->close();
+*/
} else {
$this->writeLog("[MySQL] invalid query: ". $sQuery);
+ $Error = true;
+ $uid = -1;
+ }
+ if ($Error) {
+ $oConfig = q("SELECT `v` FROM `pconfig` WHERE `uid`=%d AND `cat` = 'xmpp' AND `k`='password' LIMIT 1;", intval($uid));
+ $this->writeLog("[exAuth] got password ".$oConfig[0]["v"]);
+ $Error = ($aCommand[3] != $oConfig[0]["v"]);
+ }
+
+ if ($Error) {
+ $this->writeLog("[exAuth] authentification failed for user ". $sUser ."@". $aCommand[2]);
fwrite(STDOUT, pack("nn", 2, 0));
+ } else {
+ $this->writeLog("[exAuth] authentificated user ". $sUser ."@". $aCommand[2]);
+ fwrite(STDOUT, pack("nn", 2, 1));
}
}
break;
NETWORK_PUMPIO => t('pump.io'),
NETWORK_TWITTER => t('Twitter'),
NETWORK_DIASPORA2 => t('Diaspora Connector'),
- NETWORK_STATUSNET => t('Statusnet'),
+ NETWORK_STATUSNET => t('GNU Social'),
NETWORK_APPNET => t('App.net')
);
}
-function atom_author($tag,$name,$uri,$h,$w,$photo) {
+function atom_author($tag,$name,$uri,$h,$w,$photo,$geo) {
$o = '';
if(! $tag)
return $o;
$o .= "\t".'<link rel="avatar" type="image/jpeg" media:width="' . $w . '" media:height="' . $h . '" href="' . $photo . '" />' . "\r\n";
if ($tag == "author") {
+
+ if($geo)
+ $o .= '<georss:point>'.xmlify($geo).'</georss:point>'."\r\n";
+
$r = q("SELECT `profile`.`locality`, `profile`.`region`, `profile`.`country-name`,
`profile`.`name`, `profile`.`pub_keywords`, `profile`.`about`,
`profile`.`homepage`,`contact`.`nick` FROM `profile`
$o = "\r\n\r\n<entry>\r\n";
if(is_array($author))
- $o .= atom_author('author',$author['name'],$author['url'],80,80,$author['thumb']);
+ $o .= atom_author('author',$author['name'],$author['url'],80,80,$author['thumb'], $item['coord']);
else
- $o .= atom_author('author',(($item['author-name']) ? $item['author-name'] : $item['name']),(($item['author-link']) ? $item['author-link'] : $item['url']),80,80,(($item['author-avatar']) ? $item['author-avatar'] : $item['thumb']));
+ $o .= atom_author('author',(($item['author-name']) ? $item['author-name'] : $item['name']),(($item['author-link']) ? $item['author-link'] : $item['url']),80,80,(($item['author-avatar']) ? $item['author-avatar'] : $item['thumb']), $item['coord']);
if(strlen($item['owner-name']))
- $o .= atom_author('dfrn:owner',$item['owner-name'],$item['owner-link'],80,80,$item['owner-avatar']);
+ $o .= atom_author('dfrn:owner',$item['owner-name'],$item['owner-link'],80,80,$item['owner-avatar'], $item['coord']);
if(($item['parent'] != $item['id']) || ($item['parent-uri'] !== $item['uri']) || (($item['thr-parent'] !== '') && ($item['thr-parent'] !== $item['uri']))) {
$parent = q("SELECT `guid` FROM `item` WHERE `id` = %d", intval($item["parent"]));
}
if (!$serverret["success"] OR ($serverret["body"] == "") OR (sizeof($xmlobj) == 0) OR !is_object($xmlobj)) {
- $last_failure = datetime_convert();
- $failure = true;
+ // Workaround for bad configured servers (known nginx problem)
+ if ($serverret["debug"]["http_code"] != "403") {
+ $last_failure = datetime_convert();
+ $failure = true;
+ }
} elseif ($network == NETWORK_DIASPORA)
$last_contact = datetime_convert();
'url' => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/block',
'sel' => '',
'title' => t('Toggle Blocked status'),
+ 'id' => 'toggle-block-tab',
'accesskey' => 'b',
),
array(
'url' => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/ignore',
'sel' => '',
'title' => t('Toggle Ignored status'),
+ 'id' => 'toggle-ignore-tab',
'accesskey' => 'i',
),
'url' => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/archive',
'sel' => '',
'title' => t('Toggle Archive status'),
+ 'id' => 'toggle-archive-tab',
'accesskey' => 'v',
),
array(
'url' => $a->get_baseurl(true) . '/crepair/' . $contact_id,
'sel' => '',
'title' => t('Advanced Contact Settings'),
+ 'id' => 'repair-tab',
'accesskey' => 'r',
)
);
'url' => $a->get_baseurl(true) . '/suggest',
'sel' => '',
'title' => t('Suggest potential friends'),
+ 'id' => 'suggestions-tab',
'accesskey' => 'g',
),
array(
'url' => $a->get_baseurl(true) . '/contacts/all',
'sel' => ($all) ? 'active' : '',
'title' => t('Show all contacts'),
+ 'id' => 'showall-tab',
'accesskey' => 'l',
),
array(
'url' => $a->get_baseurl(true) . '/contacts',
'sel' => ((! $all) && (! $blocked) && (! $hidden) && (! $search) && (! $nets) && (! $ignored) && (! $archived)) ? 'active' : '',
'title' => t('Only show unblocked contacts'),
+ 'id' => 'showunblocked-tab',
'accesskey' => 'o',
),
'url' => $a->get_baseurl(true) . '/contacts/blocked',
'sel' => ($blocked) ? 'active' : '',
'title' => t('Only show blocked contacts'),
+ 'id' => 'showblocked-tab',
'accesskey' => 'b',
),
'url' => $a->get_baseurl(true) . '/contacts/ignored',
'sel' => ($ignored) ? 'active' : '',
'title' => t('Only show ignored contacts'),
+ 'id' => 'showignored-tab',
'accesskey' => 'i',
),
'url' => $a->get_baseurl(true) . '/contacts/archived',
'sel' => ($archived) ? 'active' : '',
'title' => t('Only show archived contacts'),
+ 'id' => 'showarchived-tab',
'accesskey' => 'y',
),
'url' => $a->get_baseurl(true) . '/contacts/hidden',
'sel' => ($hidden) ? 'active' : '',
'title' => t('Only show hidden contacts'),
+ 'id' => 'showhidden-tab',
'accesskey' => 'h',
),
$contact = $r[0];
- $msg1 = t('Repair Contact Settings');
+ $warning = t('<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact may stop working.');
+ $info = t('Please use your browser \'Back\' button <strong>now</strong> if you are uncertain what to do on this page.');
- $msg2 = t('<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact may stop working.');
- $msg3 = t('Please use your browser \'Back\' button <strong>now</strong> if you are uncertain what to do on this page.');
-
- $o .= '<h2>' . $msg1 . '</h2>';
-
- $o .= '<div class="error-message">' . $msg2 . EOL . EOL. $msg3 . '</div>';
-
- $o .= EOL . '<a href="contacts/' . $cid . '">' . t('Return to contact editor') . '</a>' . EOL;
+ $returnaddr = "contacts/$cid";
$allow_remote_self = get_config('system','allow_users_remote_self');
$tpl = get_markup_template('crepair.tpl');
$o .= replace_macros($tpl, array(
+ '$title' => t('Repair Contact Settings'),
+ '$warning' => $warning,
+ '$info' => $info,
+ '$returnaddr' => $returnaddr,
+ '$return' => t('Return to contact editor'),
'$update_profile' => update_profile,
'$udprofilenow' => t('Refetch contact data'),
'$label_name' => t('Name'),
'$label_photo' => t('New photo from this URL'),
'$label_remote_self' => t('Remote Self'),
'$allow_remote_self' => $allow_remote_self,
- '$remote_self' => array('remote_self', t('Mirror postings from this contact'), $contact['remote_self'], t('Mark this contact as remote_self, this will cause friendica to repost new entries from this contact.'), $remote_self_options),
+ '$remote_self' => array('remote_self',
+ t('Mirror postings from this contact'),
+ $contact['remote_self'],
+ t('Mark this contact as remote_self, this will cause friendica to repost new entries from this contact.'),
+ $remote_self_options
+ ),
'$contact_name' => htmlentities($contact['name']),
'$contact_nick' => htmlentities($contact['nick']),
'$contact_id' => $contact['id'],
'$poll' => $contact['poll'],
'$contact_attag' => $contact['attag'],
'$lbl_submit' => t('Submit')
- ));
+ ));
return $o;
}
$identities = $a->identities;
- foreach($identities as $key=>$id) {
- $identities[$key]['selected'] = (($id['nickname'] === $a->user['nickname']) ? ' selected="selected" ' : '');
+
+ //getting additinal information for each identity
+ foreach ($identities as $key=>$id) {
+ $thumb = q("SELECT `thumb` FROM `contact` WHERE `uid` = '%s' AND `self` = 1",
+ dbesc($id['uid'])
+ );
+
+ $identities[$key][thumb] = $thumb[0][thumb];
+
+ $identities[$key]['selected'] = (($id['nickname'] === $a->user['nickname']) ? true : false);
}
$o = replace_macros(get_markup_template('manage.tpl'), array(
$search = ((x($_GET,'search')) ? escape_tags($_GET['search']) : '');
if(x($_GET,'save')) {
- $r = q("select * from `search` where `uid` = %d and `term` = '%s' limit 1",
+ $r = q("SELECT * FROM `search` WHERE `uid` = %d AND `term` = '%s' LIMIT 1",
intval(local_user()),
dbesc($search)
);
if(! count($r)) {
- q("insert into `search` ( `uid`,`term` ) values ( %d, '%s') ",
+ q("INSERT INTO `search` ( `uid`,`term` ) VALUES ( %d, '%s') ",
intval(local_user()),
dbesc($search)
);
}
}
if(x($_GET,'remove')) {
- q("delete from `search` where `uid` = %d and `term` = '%s'",
+ q("DELETE FROM `search` WHERE `uid` = %d AND `term` = '%s'",
intval(local_user()),
dbesc($search)
);
$o = '';
- $r = q("select `id`,`term` from `search` WHERE `uid` = %d",
+ $r = q("SELECT `id`,`term` FROM `search` WHERE `uid` = %d",
intval(local_user())
);
// tabs
$tabs = array(
array(
- 'label' => t('Commented Order'),
- 'url'=>$a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . '?f=&order=comment' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''),
- 'sel'=>$all_active,
- 'title'=> t('Sort by Comment Date'),
+ 'label' => t('Commented Order'),
+ 'url' => $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . '?f=&order=comment' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''),
+ 'sel' => $all_active,
+ 'title' => t('Sort by Comment Date'),
+ 'id' => 'commented-order-tab',
'accesskey' => "e",
),
array(
- 'label' => t('Posted Order'),
- 'url'=>$a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . '?f=&order=post' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''),
- 'sel'=>$postord_active,
- 'title' => t('Sort by Post Date'),
+ 'label' => t('Posted Order'),
+ 'url' => $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . '?f=&order=post' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''),
+ 'sel' => $postord_active,
+ 'title' => t('Sort by Post Date'),
+ 'id' => 'posted-order-tab',
'accesskey' => "t",
),
);
if(feature_enabled(local_user(),'personal_tab')) {
$tabs[] = array(
- 'label' => t('Personal'),
- 'url' => $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&conv=1',
- 'sel' => $conv_active,
- 'title' => t('Posts that mention or involve you'),
+ 'label' => t('Personal'),
+ 'url' => $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&conv=1',
+ 'sel' => $conv_active,
+ 'title' => t('Posts that mention or involve you'),
+ 'id' => 'personal-tab',
'accesskey' => "r",
);
}
if(feature_enabled(local_user(),'new_tab')) {
$tabs[] = array(
- 'label' => t('New'),
- 'url' => $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ($len_naked_cmd ? '/' : '') . 'new' . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : ''),
- 'sel' => $new_active,
- 'title' => t('Activity Stream - by date'),
+ 'label' => t('New'),
+ 'url' => $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ($len_naked_cmd ? '/' : '') . 'new' . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : ''),
+ 'sel' => $new_active,
+ 'title' => t('Activity Stream - by date'),
+ 'id' => 'activitiy-by-date-tab',
'accesskey' => "w",
);
}
if(feature_enabled(local_user(),'link_tab')) {
$tabs[] = array(
- 'label' => t('Shared Links'),
- 'url'=>$a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&bmark=1',
- 'sel'=>$bookmarked_active,
- 'title'=> t('Interesting Links'),
+ 'label' => t('Shared Links'),
+ 'url' => $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&bmark=1',
+ 'sel' => $bookmarked_active,
+ 'title' => t('Interesting Links'),
+ 'id' => 'shared-links-tab',
'accesskey' => "b",
);
}
if(feature_enabled(local_user(),'star_posts')) {
$tabs[] = array(
- 'label' => t('Starred'),
- 'url'=>$a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&star=1',
- 'sel'=>$starred_active,
- 'title' => t('Favourite Posts'),
+ 'label' => t('Starred'),
+ 'url' => $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&star=1',
+ 'sel' => $starred_active,
+ 'title' => t('Favourite Posts'),
+ 'id' => 'starred-posts-tab',
'accesskey' => "m",
);
}
$def_acl = array('allow_cid' => '<' . intval($cid) . '>');
if($nets) {
- $r = q("select id from contact where uid = %d and network = '%s' and self = 0",
+ $r = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND network = '%s' AND `self` = 0",
intval(local_user()),
dbesc($nets)
);
$content = "";
if ($cid) {
- $contact = q("SELECT `nick` FROM `contact` WHERE `id` = %d AND `uid` = %d AND `forum`", intval($cid), intval(local_user()));
+ $contact = q("SELECT `nick` FROM `contact` WHERE `id` = %d AND `uid` = %d AND `forum`",
+ intval($cid),
+ intval(local_user())
+ );
if ($contact)
$content = "@".$contact[0]["nick"]."+".$cid;
}
);
if(count($r)) {
$sql_post_table = " INNER JOIN (SELECT DISTINCT(`parent`) FROM `item`
- WHERE 1 $sql_options AND `contact-id` = ".intval($cid)." and deleted = 0
+ WHERE 1 $sql_options AND `contact-id` = ".intval($cid)." AND `deleted` = 0
ORDER BY `item`.`received` DESC) AS `temp1`
ON $sql_table.$sql_parent = `temp1`.`parent` ";
$sql_extra = "";
-<?php
+<?php /** @file */
+
+/**
+ *
+ * Poke, prod, finger, or otherwise do unspeakable things to somebody - who must be a connection in your address book
+ * This function can be invoked with the required arguments (verb and cid and private and possibly parent) silently via ajax or
+ * other web request. You must be logged in and connected to a profile.
+ * If the required arguments aren't present, we'll display a simple form to choose a recipient and a verb.
+ * parent is a special argument which let's you attach this activity as a comment to an existing conversation, which
+ * may have started with somebody else poking (etc.) somebody, but this isn't necessary. This can be used in the more pokes
+ * plugin version to have entire conversations where Alice poked Bob, Bob fingered Alice, Alice hugged Bob, etc.
+ *
+ * private creates a private conversation with the recipient. Otherwise your profile's default post privacy is used.
+ *
+ */
require_once('include/security.php');
require_once('include/bbcode.php');
logger('poke: verb ' . $verb . ' contact ' . $contact_id, LOGGER_DEBUG);
- $r = q("SELECT * FROM `contact` WHERE `id` = %d and `uid` = %d LIMIT 1",
+ $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($contact_id),
intval($uid)
);
$target = $r[0];
if($parent) {
- $r = q("select uri, private, allow_cid, allow_gid, deny_cid, deny_gid
- from item where id = %d and parent = %d and uid = %d limit 1",
+ $r = q("SELECT `uri`, `private`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`
+ FROM `item` WHERE `id` = %d AND `parent` = %d AND `uid` = %d LIMIT 1",
intval($parent),
intval($parent),
intval($uid)
$id = '';
if(intval($_GET['c'])) {
- $r = q("select id,name from contact where id = %d and uid = %d limit 1",
+ $r = q("SELECT `id`,`name` FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($_GET['c']),
intval(local_user())
);
$base = $a->get_baseurl();
- $a->page['htmlhead'] .= '<script src="' . $a->get_baseurl(true) . '/library/jquery_ac/friendica.complete.js" ></script>';
- $a->page['htmlhead'] .= <<< EOT
-
-<script>$(document).ready(function() {
- var a;
- a = $("#poke-recip").autocomplete({
- serviceUrl: '$base/acl',
- minChars: 2,
- width: 350,
- onSelect: function(value,data) {
- $("#poke-recip-complete").val(data);
- }
- });
- a.setOptions({ params: { type: 'a' }});
-
-
-});
+ $head_tpl = get_markup_template('poke_head.tpl');
+ $a->page['htmlhead'] .= replace_macros($head_tpl,array(
+ '$baseurl' => $a->get_baseurl(true),
+ '$base' => $base
+ ));
-</script>
-EOT;
$parent = ((x($_GET,'parent')) ? intval($_GET['parent']) : '0');
-
$verbs = get_poke_verbs();
$shortlist = array();
if($ignore_year)
$dob = '0000-' . $dob;
}
-
+
$name = notags(trim($_POST['name']));
if(! strlen($name)) {
$hide_friends = (($_POST['hide-friends'] == 1) ? 1: 0);
-
+ set_pconfig(local_user(),'system','detailled_profile', (($_POST['detailled_profile'] == 1) ? 1: 0));
$changes = array();
$value = '';
return;
$arr = array();
- $arr['uri'] = $arr['parent-uri'] = item_new_uri($a->get_hostname(), local_user());
+ $arr['uri'] = $arr['parent-uri'] = item_new_uri($a->get_hostname(), local_user());
$arr['uid'] = local_user();
$arr['contact-id'] = $self[0]['id'];
$arr['wall'] = 1;
$arr['author-avatar'] = $arr['owner-avatar'] = $self[0]['thumb'];
$arr['verb'] = ACTIVITY_UPDATE;
$arr['object-type'] = ACTIVITY_OBJ_PROFILE;
-
+
$A = '[url=' . $self[0]['url'] . ']' . $self[0]['name'] . '[/url]';
$changes .= $ch;
}
- $prof = '[url=' . $self[0]['url'] . '?tab=profile' . ']' . t('public profile') . '[/url]';
+ $prof = '[url=' . $self[0]['url'] . '?tab=profile' . ']' . t('public profile') . '[/url]';
if($t == 1 && strlen($value)) {
$message = sprintf( t('%1$s changed %2$s to “%3$s”'), $A, $changes, $value);
}
else
$message = sprintf( t('%1$s has an updated %2$s, changing %3$s.'), $A, $prof, $changes);
-
- $arr['body'] = $message;
+
+ $arr['body'] = $message;
$arr['object'] = '<object><type>' . ACTIVITY_OBJ_PROFILE . '</type><title>' . $self[0]['name'] . '</title>'
. '<id>' . $self[0]['url'] . '/' . $self[0]['name'] . '</id>';
'$no_selected' => (($r[0]['hide-friends'] == 0) ? " checked=\"checked\" " : "")
));
+ $personal_account = !(in_array($a->user["page-flags"],
+ array(PAGE_COMMUNITY, PAGE_PRVGROUP)));
-
+ $detailled_profile = (get_pconfig(local_user(),'system','detailled_profile') AND $personal_account);
$f = get_config('system','birthday_input_format');
if(! $f)
$is_default = (($r[0]['is-default']) ? 1 : 0);
$tpl = get_markup_template("profile_edit.tpl");
$o .= replace_macros($tpl,array(
+ '$personal_account' => $personal_account,
+ '$detailled_profile' => $detailled_profile,
+
+ '$details' => array(
+ 'detailled_profile', //Name
+ t('Show more profile fields:'), //Label
+ $detailled_profile, //Value
+ '', //Help string
+ array(t('No'),t('Yes')) //Off - On strings
+ ),
+
'$multi_profiles' => feature_enabled(local_user(),'multi_profiles'),
'$form_security_token' => get_form_security_token("profile_edit"),
'$form_security_token_photo' => get_form_security_token("profile_photo"),
return $o;
}
-
+
//Profiles list.
else {
-
+
//If we don't support multi profiles, don't display this list.
if(!feature_enabled(local_user(),'multi_profiles')){
$r = q(
goaway($a->get_baseurl(true) . '/profiles/'.$r[0]['id']);
}
}
-
+
$r = q("SELECT * FROM `profile` WHERE `uid` = %d",
local_user());
if(count($r)) {
-
+
$tpl_header = get_markup_template('profile_listing_header.tpl');
$o .= replace_macros($tpl_header,array(
'$header' => t('Edit/Manage Profiles'),
'$cr_new' => t('Create New Profile'),
'$cr_new_link' => 'profiles/new?t=' . get_form_security_token("profile_new")
));
-
-
+
+
$tpl = get_markup_template('profile_entry.tpl');
-
+
foreach($r as $rr) {
$o .= replace_macros($tpl, array(
'$photo' => $a->get_cached_avatar_image($rr['thumb']),
'$id' => $rr['id'],
'$alt' => t('Profile Image'),
'$profile_name' => $rr['profile-name'],
- '$visible' => (($rr['is-default']) ? '<strong>' . t('visible to everybody') . '</strong>'
+ '$visible' => (($rr['is-default']) ? '<strong>' . t('visible to everybody') . '</strong>'
: '<a href="' . $a->get_baseurl(true) . '/profperm/' . $rr['id'] . '" />' . t('Edit visibility') . '</a>')
));
}
unset($_SESSION['theme']);\r
if(x($_SESSION,'mobile-theme'))\r
unset($_SESSION['mobile-theme']);\r
- \r
- \r
+\r
+\r
$tpl = get_markup_template("uimport.tpl");\r
return replace_macros($tpl, array(\r
'$regbutt' => t('Import'),\r
'title' => t("Move account"),\r
'intro' => t("You can import an account from another Friendica server."),\r
'instruct' => t("You need to export your account from the old server and upload it here. We will recreate your old account here with all your contacts. We will try also to inform your friends that you moved here."),\r
- 'warn' => t("This feature is experimental. We can't import contacts from the OStatus network (statusnet/identi.ca) or from Diaspora"),\r
+ 'warn' => t("This feature is experimental. We can't import contacts from the OStatus network (GNU Social/Statusnet) or from Diaspora"),\r
'field' => array('accountfile', t('Account file'),'<input id="id_accountfile" name="accountfile" type="file">', t('To export your account, go to "Settings->Export your personal data" and select "Export account"')),\r
- ), \r
+ ),\r
));\r
}\r
return UPDATE_SUCCESS;
}
+
+function update_1188() {
+
+ if (strlen(get_config('system','directory_submit_url')) AND
+ !strlen(get_config('system','directory'))) {
+ set_config('system','directory', dirname(get_config('system','directory_submit_url')));
+ del_config('system','directory_submit_url');
+ }
+
+ return UPDATE_SUCCESS;
+}
clip: rect(0,0,0,0);
border: 0;
}
+
+.itentity-match-wrapper {
+ float: left;
+ padding: 10px;
+ width: 120px;
+ height: 140px;
+ margin-bottom: 20px;
+}
+
+.identity-match-photo {
+ float: left;
+ text-align: center;
+ width: 120px;
+}
+
+.identity-match-name {
+ text-align: center;
+}
+
+.identity-match-details {
+ float: left;
+ text-align: center;
+ width: 120px;
+ overflow: hidden;
+ font-size: 10px;
+ font-weight: 500;
+ color: #999999;
+}
+
+.identity-match-break, .identity-match-end {
+ clear: both;
+}
+
+.identity-match-photo button {
+ border: none;
+ padding: 0;
+ margin: 0;
+ background: none;
+ height: 80px;
+ width: 80px;
+}
+
+.selected-identity img {
+ border: 2px solid #ff0000;
+}
+/* poke */
+#poke-desc {
+ margin: 5px 0 10px;
+}
+
+#poke-wrapper {
+ padding: 10px 0 0px;
+}
+
+#poke-recipient, #poke-action, #poke-privacy-settings {
+ margin: 10px 0 30px;
+}
+
+#poke-recip-label, #poke-action-label, #prvmail-message-label {
+ margin: 10px 0 10px;
+}
+
+{{include file="section_title.tpl"}}
+
+<div class="crepair-error-message">{{$warning}}</div><br>
+<div class="crepair-return">
+ {{$info}}<br>
+ <a href="{{$returnaddr}}">{{$return}}</a>
+</div>
+<br />
+
<form id="crepair-form" action="crepair/{{$contact_id}}" method="post" >
<h4>{{$contact_name}}</h4>
<h3>{{$title}}</h3>
<div id="identity-manage-desc">{{$desc}}</div>
<div id="identity-manage-choose">{{$choose}}</div>
+
<div id="identity-selector-wrapper">
<form action="manage" method="post" >
- <select name="identity" size="10" onchange="this.form.submit();" >
{{foreach $identities as $id}}
- <option {{$id.selected}} value="{{$id.uid}}">{{$id.username}} ({{$id.nickname}})</option>
- {{/foreach}}
+ <div class="itentity-match-wrapper {{if $id.selected}}selected-identity{{/if}}" id="identity-match-{{$id.uid}}">
+ <div class="identity-match-photo" id="identity-match-photo-{{$id.uid}}">
+ <button name="identity" value="{{$id.uid}}" onclick="this.form.submit();" title="{{$id.username}}">
+ <img src="{{$id.thumb}}" alt="{{$id.username}}" />
+ </button>
+ </div>
- </select>
- <div id="identity-select-break"></div>
+ <div class="identity-match-break"></div>
- {{*<!--<input id="identity-submit" type="submit" name="submit" value="{{$submit}}" />-->*}}
-</div></form>
+ <div class="identity-match-desc">
+ <div class="identity-match-name" id="identity-match-name-{{$id.uid}}">{{$id.username}}</div>
+ <div class="identity-match-details" id="identity-match-nick-{{$id.uid}}">({{$id.nickname}})</div>
+ </div>
+
+ <div class="identity-match-end"></div>
+ </div>
+ {{/foreach}}
+ </form>
+</div>
+
+
\ No newline at end of file
<div id="poke-desc">{{$desc}}</div>
-<form action="poke" method="get">
-<br />
-<br />
-
-<div id="poke-recip-label">{{$clabel}}</div>
-<br />
-<input id="poke-recip" type="text" size="64" maxlength="255" value="{{$name|escape:'html'}}" name="pokename" autocomplete="off" />
-<input id="poke-recip-complete" type="hidden" value="{{$id}}" name="cid" />
-<input id="poke-parent" type="hidden" value="{{$parent}}" name="parent" />
-<br />
-<br />
-<div id="poke-action-label">{{$choice}}</div>
-<br />
-<br />
-<select name="verb" id="poke-verb-select" >
-{{foreach $verbs as $v}}
-<option value="{{$v.0}}">{{$v.1}}</option>
-{{/foreach}}
-</select>
-<br />
-<br />
-<div id="poke-private-desc">{{$prv_desc}}</div>
-<input type="checkbox" name="private" {{if $parent}}disabled="disabled"{{/if}} value="1" />
-<br />
-<br />
-<input type="submit" name="submit" value="{{$submit|escape:'html'}}" />
-</form>
+
+<div id="poke-wrapper">
+ <form action="poke" method="get">
+
+ <div id="poke-recipient">
+ <div id="poke-recip-label">{{$clabel}}</div>
+ <input id="poke-recip" type="text" size="64" maxlength="255" value="{{$name|escape:'html'}}" name="pokename" autocomplete="off" />
+ <input id="poke-recip-complete" type="hidden" value="{{$id}}" name="cid" />
+ <input id="poke-parent" type="hidden" value="{{$parent}}" name="parent" />
+ </div>
+
+ <div id="poke-action">
+ <div id="poke-action-label">{{$choice}}</div>
+ <select name="verb" id="poke-verb-select" >
+ {{foreach $verbs as $v}}
+ <option value="{{$v.0}}">{{$v.1}}</option>
+ {{/foreach}}
+ </select>
+ </div>
+
+ <div id="poke-privacy-settings">
+ <div id="poke-private-desc">{{$prv_desc}}</div>
+ <input type="checkbox" name="private" {{if $parent}}disabled="disabled"{{/if}} value="1" />
+ </div>
+
+ <input type="submit" name="submit" value="{{$submit|escape:'html'}}" />
+
+ </form>
+</div>
--- /dev/null
+<script src="{{$baseurl}}/library/jquery_ac/friendica.complete.js" ></script>
+
+<script>$(document).ready(function() {
+ var a;
+ a = $("#poke-recip").autocomplete({
+ serviceUrl: '{{$base}}/acl',
+ minChars: 2,
+ width: 350,
+ onSelect: function(value,data) {
+ $("#poke-recip-complete").val(data);
+ }
+ });
+ a.setOptions({ params: { type: 'a' }});
+
+
+});
+
+</script>
\ No newline at end of file
<form id="profile-edit-form" name="form1" action="profiles/{{$profile_id}}" method="post" >
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+{{if $detailled_profile}}
+{{include file="field_yesno.tpl" field=$details}}
<div id="profile-edit-profile-name-wrapper" >
<label id="profile-edit-profile-name-label" for="profile-edit-profile-name" >{{$lbl_profname}} </label>
<input type="text" size="32" name="profile_name" id="profile-edit-profile-name" value="{{$profile_name|escape:'html'}}" /><div class="required">*</div>
</div>
<div class="profile-edit-submit-end"></div>
+{{else}}
+{{if $personal_account}}
+{{include file="field_yesno.tpl" field=$details}}
+{{/if}}
+<div id="profile-edit-profile-name-wrapper" >
+<label id="profile-edit-profile-name-label" for="profile-edit-profile-name" >{{$lbl_profname}} </label>
+<input type="text" size="32" name="profile_name" id="profile-edit-profile-name" value="{{$profile_name|escape:'html'}}" /><div class="required">*</div>
+</div>
+<div id="profile-edit-profile-name-end"></div>
+
+<div id="profile-edit-name-wrapper" >
+<label id="profile-edit-name-label" for="profile-edit-name" >{{$lbl_fullname}} </label>
+<input type="text" size="32" name="name" id="profile-edit-name" value="{{$name|escape:'html'}}" />
+</div>
+<div id="profile-edit-name-end"></div>
+
+{{if $personal_account}}
+<div id="profile-edit-gender-wrapper" >
+<label id="profile-edit-gender-label" for="gender-select" >{{$lbl_gender}} </label>
+{{$gender}}
+</div>
+<div id="profile-edit-gender-end"></div>
+
+<div id="profile-edit-dob-wrapper" >
+<label id="profile-edit-dob-label" for="dob-select" >{{$lbl_bd}} </label>
+<div id="profile-edit-dob" >
+{{$dob}} {{$age}}
+</div>
+</div>
+<div id="profile-edit-dob-end"></div>
+{{/if}}
+
+<div id="profile-edit-homepage-wrapper" >
+<label id="profile-edit-homepage-label" for="profile-edit-homepage" >{{$lbl_homepage}} </label>
+<input type="url" size="32" name="homepage" id="profile-edit-homepage" value="{{$homepage|escape:'html'}}" />
+</div>
+<div id="profile-edit-homepage-end"></div>
+
+{{$hide_friends}}
+
+<div id="profile-edit-address-wrapper" >
+<label id="profile-edit-address-label" for="profile-edit-address" >{{$lbl_address}} </label>
+<input type="text" size="32" name="address" id="profile-edit-address" value="{{$address|escape:'html'}}" />
+</div>
+<div id="profile-edit-address-end"></div>
+
+<div id="profile-edit-locality-wrapper" >
+<label id="profile-edit-locality-label" for="profile-edit-locality" >{{$lbl_city}} </label>
+<input type="text" size="32" name="locality" id="profile-edit-locality" value="{{$locality|escape:'html'}}" />
+</div>
+<div id="profile-edit-locality-end"></div>
+
+
+<div id="profile-edit-postal-code-wrapper" >
+<label id="profile-edit-postal-code-label" for="profile-edit-postal-code" >{{$lbl_zip}} </label>
+<input type="text" size="32" name="postal_code" id="profile-edit-postal-code" value="{{$postal_code|escape:'html'}}" />
+</div>
+<div id="profile-edit-postal-code-end"></div>
+
+<div id="profile-edit-country-name-wrapper" >
+<label id="profile-edit-country-name-label" for="profile-edit-country-name" >{{$lbl_country}} </label>
+<select name="country_name" id="profile-edit-country-name" onChange="Fill_States('{{$region}}');">
+<option selected="selected" >{{$country_name}}</option>
+<option>temp</option>
+</select>
+</div>
+<div id="profile-edit-country-name-end"></div>
+
+<div id="profile-edit-region-wrapper" >
+<label id="profile-edit-region-label" for="profile-edit-region" >{{$lbl_region}} </label>
+<select name="region" id="profile-edit-region" onChange="Update_Globals();" >
+<option selected="selected" >{{$region}}</option>
+<option>temp</option>
+</select>
+</div>
+<div id="profile-edit-region-end"></div>
+
+<div id="profile-edit-pubkeywords-wrapper" >
+<label id="profile-edit-pubkeywords-label" for="profile-edit-pubkeywords" >{{$lbl_pubkey}} </label>
+<input type="text" size="32" name="pub_keywords" id="profile-edit-pubkeywords" title="{{$lbl_ex2}}" value="{{$pub_keywords|escape:'html'}}" />
+</div><div id="profile-edit-pubkeywords-desc">{{$lbl_pubdsc}}</div>
+<div id="profile-edit-pubkeywords-end"></div>
+
+<div id="profile-edit-prvkeywords-wrapper" >
+<label id="profile-edit-prvkeywords-label" for="profile-edit-prvkeywords" >{{$lbl_prvkey}} </label>
+<input type="text" size="32" name="prv_keywords" id="profile-edit-prvkeywords" title="{{$lbl_ex2}}" value="{{$prv_keywords|escape:'html'}}" />
+</div><div id="profile-edit-prvkeywords-desc">{{$lbl_prvdsc}}</div>
+<div id="profile-edit-prvkeywords-end"></div>
+
+<div id="about-jot-wrapper" >
+<p id="about-jot-desc" >
+{{$lbl_about}}
+</p>
+
+<textarea rows="10" cols="72" id="profile-about-text" name="about" >{{$about}}</textarea>
+
+</div>
+<div id="about-jot-end"></div>
+
+<div class="profile-edit-submit-wrapper" >
+<input type="submit" name="submit" class="profile-edit-submit-button" value="{{$submit}}" />
+</div>
+<div class="profile-edit-submit-end"></div>
+ <input type="hidden" name="pdesc" id="profile-edit-pdesc" value="{{$pdesc}}" />
+ <input type="hidden" id="contact-jot-text" name="contact" value="{{$contact}}" />
+ <input type="hidden" name="hometown" id="profile-edit-hometown" value="{{$hometown}}" />
+ <input type="hidden" name="politic" id="profile-edit-politic" value="{{$politic}}" />
+ <input type="hidden" name="religion" id="profile-edit-religion" value="{{$religion}}" />
+ <input type="hidden" id="likes-jot-text" name="likes" value="{{$likes}}" />
+ <input type="hidden" id="dislikes-jot-text" name="dislikes" value="{{$dislikes}}" />
+ <input type="hidden" name="with" id="profile-edit-with" value="{{$with}}" />
+ <input type="hidden" name="howlong" id="profile-edit-howlong" value="{{$howlong}}" />
+ <input type="hidden" id="romance-jot-text" name="romance" value="{{$romance}}" />
+ <input type="hidden" id="work-jot-text" name="work" value="{{$work}}" />
+ <input type="hidden" id="education-jot-text" name="education" value="{{$education}}" />
+ <input type="hidden" id="interest-jot-text" name="interest" value="{{$interest}}" />
+ <input type="hidden" id="music-jot-text" name="music" value="{{$music}}" />
+ <input type="hidden" id="book-jot-text" name="book" value="{{$book}}" />
+ <input type="hidden" id="tv-jot-text" name="tv" value="{{$tv}}" />
+ <input type="hidden" id="film-jot-text" name="film" value="{{$film}}" />
+
+{{/if}}
</form>
</div>
<script type="text/javascript">Fill_Country('{{$country_name}}');Fill_States('{{$region}}');</script>
}
.wall-item-content-wrapper.comment {
-# margin-left: 50px;
+ /*margin-left: 50px;*/
background: #EEEEEE;
}
clear: both;\r
}\r
\r
+#poke-desc {\r
+ margin: 5px 0 10px;\r
+}\r
+\r
+#poke-wrapper {\r
+ padding: 10px 0 0px;\r
+}\r
+\r
+#poke-recipient, #poke-action, #poke-privacy-settings {\r
+ margin: 10px 0 30px;\r
+}\r
+\r
+#poke-recip-label, #poke-action-label, #prvmail-message-label {\r
+ margin: 10px 0 10px;\r
+}\r
+\r
#sidebar-group-list ul {\r
list-style-type: none;\r
}\r
margin: 10px;\r
}\r
\r
-#identity-manage-desc {\r
- margin-top:15px;\r
- margin-bottom: 15px;\r
+.itentity-match-wrapper {\r
+ float: left;\r
+ padding: 10px;\r
+ width: 120px;\r
+ height: 140px;\r
+ margin-bottom: 20px;\r
}\r
\r
-#identity-manage-choose {\r
- margin-bottom: 15px;\r
+.identity-match-photo {\r
+ float: left;\r
+ text-align: center;\r
+ width: 120px;\r
}\r
\r
-#identity-submit {\r
- margin-top: 20px;\r
+.identity-match-name {\r
+ text-align: center;\r
+}\r
+\r
+.identity-match-details {\r
+ float: left;\r
+ text-align: center;\r
+ width: 120px;\r
+ overflow: hidden;\r
+ font-size: 10px;\r
+ font-weight: 500;\r
+ color: #999999;\r
+}\r
+\r
+.identity-match-break, .identity-match-end {\r
+ clear: both;\r
+}\r
+\r
+.identity-match-photo button {\r
+ border: none;\r
+ padding: 0;\r
+ margin: 0;\r
+ background: none;\r
+ height: 80px;\r
+ width: 80px;\r
+}\r
+\r
+.selected-identity img {\r
+ border: 2px solid #ff0000;\r
}\r
\r
#photo-nav {\r
#recip {\r
\r
}\r
-.autocomplete-w1 { background: #ffffff; no-repeat bottom right; position:absolute; top:0px; left:0px; margin:6px 0 0 6px; /* IE6 fix: */ _background:none; _margin:1px 0 0 0; }\r
+.autocomplete-w1 { background: #ffffff no-repeat bottom right; position:absolute; top:0px; left:0px; margin:6px 0 0 6px; /* IE6 fix: */ _background:none; _margin:1px 0 0 0; }\r
.autocomplete { color:#000; border:1px solid #999; background:#FFF; cursor:default; text-align:left; max-height:350px; overflow:auto; margin:-6px 6px 6px -6px; /* IE6 specific: */ _height:350px; _margin:0; _overflow-x:hidden; }\r
.autocomplete .selected { background:#F0F0F0; }\r
.autocomplete div { padding:2px 5px; white-space:nowrap; overflow:hidden; }\r
clear: both;
}
+#poke-desc {
+ margin: 5px 0 10px;
+}
+
+#poke-wrapper {
+ padding: 10px 0 20px;
+}
+
+#poke-recipient, #poke-action, #poke-privacy-settings {
+ margin: 10px 0 30px;
+}
+
+#poke-recip-label, #poke-action-label, #prvmail-message-label {
+ margin: 10px 0 10px;
+}
+
#sidebar-group-list ul {
list-style-type: none;
}
margin: 10px;
}
-#identity-manage-desc {
- margin-top:15px;
- margin-bottom: 15px;
+.itentity-match-wrapper {
+ float: left;
+ padding: 10px;
+ width: 120px;
+ height: 140px;
+ margin-bottom: 20px;
}
-#identity-manage-choose {
- margin-bottom: 15px;
+.identity-match-photo {
+ float: left;
+ text-align: center;
+ width: 120px;
}
-#identity-submit {
- margin-top: 20px;
+.identity-match-name {
+ text-align: center;
+}
+
+.identity-match-details {
+ float: left;
+ text-align: center;
+ width: 120px;
+ overflow: hidden;
+ font-size: 10px;
+ font-weight: 500;
+ color: #999999;
+}
+
+.identity-match-break, .identity-match-end {
+ clear: both;
+}
+
+.identity-match-photo button {
+ border: none;
+ padding: 0;
+ margin: 0;
+ background: none;
+ height: 80px;
+ width: 80px;
+}
+
+.selected-identity img {
+ border: 2px solid #ff0000;
}
#photo-prev-link, #photo-next-link {
border: 1px solid #7C7D7B;
}
+/* ========== */
+/* = Poke = */
+/* ========== */
+#poke-recip {
+ float: none;
+}
+
/* ================= */
/* = Notifications = */
/* ================= */
border: none;
}
+
/* ========== */
/* = Events = */
/* ========== */
<input type="hidden" name="profile" value="{{$profile_name}}" />
<!-- Profile picture -->
+{{if $detailled_profile}}
<div class="toggle-section js-toggle-section">
<a class="section-caption js-section-toggler" href="javascript:;">{{$lbl_picture_section}} »</a>
<div class="js-section toggle-section-content hidden">
+{{/if}}
<div id="profile-photo-upload-wrapper">
<label id="profile-photo-upload-label" for="profile-photo-upload">{{$lbl_profile_photo}}:</label>
</div>
<div class="profile-edit-submit-end"></div>
+{{if $detailled_profile}}
</div>
</div>
-
+{{/if}}
</form>
<form id="profile-edit-form" name="form1" action="profiles/{{$profile_id}}" method="post" >
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
-
+
+{{if $detailled_profile}}
<!-- Basic information -->
<div class="toggle-section js-toggle-section">
<a class="section-caption js-section-toggler" href="javascript:;">{{$lbl_basic_section}} »</a>
<div class="js-section toggle-section-content hidden">
+ {{include file="field_yesno.tpl" field=$details}}
+
{{if $multi_profiles}}
<div id="profile-edit-profile-name-wrapper" >
<label id="profile-edit-profile-name-label" for="profile-edit-profile-name" >{{$lbl_profname}} </label>
</div>
</div>
+{{else}}
+
+{{if $personal_account}}
+{{include file="field_yesno.tpl" field=$details}}
+{{/if}}
+<div id="profile-edit-profile-name-wrapper" >
+<label id="profile-edit-profile-name-label" for="profile-edit-profile-name" >{{$lbl_profname}} </label>
+<input type="text" size="32" name="profile_name" id="profile-edit-profile-name" value="{{$profile_name|escape:'html'}}" /><div class="required">*</div>
+</div>
+<div id="profile-edit-profile-name-end"></div>
+
+<div id="profile-edit-name-wrapper" >
+<label id="profile-edit-name-label" for="profile-edit-name" >{{$lbl_fullname}} </label>
+<input type="text" size="32" name="name" id="profile-edit-name" value="{{$name|escape:'html'}}" />
+</div>
+<div id="profile-edit-name-end"></div>
+
+{{if $personal_account}}
+<div id="profile-edit-gender-wrapper" >
+<label id="profile-edit-gender-label" for="gender-select" >{{$lbl_gender}} </label>
+{{$gender}}
+</div>
+<div id="profile-edit-gender-end"></div>
+
+<div id="profile-edit-dob-wrapper" >
+<label id="profile-edit-dob-label" for="dob-select" >{{$lbl_bd}} </label>
+<div id="profile-edit-dob" >
+{{$dob}} {{$age}}
+</div>
+</div>
+<div id="profile-edit-dob-end"></div>
+{{/if}}
+
+ <div id="profile-edit-homepage-wrapper" >
+ <label id="profile-edit-homepage-label" for="profile-edit-homepage" >{{$lbl_homepage}} </label>
+ <input type="text" size="32" name="homepage" id="profile-edit-homepage" value="{{$homepage}}" />
+ </div>
+ <div id="profile-edit-homepage-end"></div>
+
+{{$hide_friends}}
+
+<div id="profile-edit-address-wrapper" >
+<label id="profile-edit-address-label" for="profile-edit-address" >{{$lbl_address}} </label>
+<input type="text" size="32" name="address" id="profile-edit-address" value="{{$address|escape:'html'}}" />
+</div>
+<div id="profile-edit-address-end"></div>
+
+<div id="profile-edit-locality-wrapper" >
+<label id="profile-edit-locality-label" for="profile-edit-locality" >{{$lbl_city}} </label>
+<input type="text" size="32" name="locality" id="profile-edit-locality" value="{{$locality|escape:'html'}}" />
+</div>
+<div id="profile-edit-locality-end"></div>
+
+
+<div id="profile-edit-postal-code-wrapper" >
+<label id="profile-edit-postal-code-label" for="profile-edit-postal-code" >{{$lbl_zip}} </label>
+<input type="text" size="32" name="postal_code" id="profile-edit-postal-code" value="{{$postal_code|escape:'html'}}" />
+</div>
+<div id="profile-edit-postal-code-end"></div>
+
+<div id="profile-edit-country-name-wrapper" >
+<label id="profile-edit-country-name-label" for="profile-edit-country-name" >{{$lbl_country}} </label>
+<select name="country_name" id="profile-edit-country-name" onChange="Fill_States('{{$region}}');">
+<option selected="selected" >{{$country_name}}</option>
+<option>temp</option>
+</select>
+</div>
+<div id="profile-edit-country-name-end"></div>
+<div id="profile-edit-region-wrapper" >
+<label id="profile-edit-region-label" for="profile-edit-region" >{{$lbl_region}} </label>
+<select name="region" id="profile-edit-region" onChange="Update_Globals();" >
+<option selected="selected" >{{$region}}</option>
+<option>temp</option>
+</select>
+</div>
+<div id="profile-edit-region-end"></div>
+
+<div id="profile-edit-pubkeywords-wrapper" >
+<label id="profile-edit-pubkeywords-label" for="profile-edit-pubkeywords" >{{$lbl_pubkey}} </label>
+<input type="text" size="32" name="pub_keywords" id="profile-edit-pubkeywords" title="{{$lbl_ex2}}" value="{{$pub_keywords|escape:'html'}}" />
+</div><div id="profile-edit-pubkeywords-desc">{{$lbl_pubdsc}}</div>
+<div id="profile-edit-pubkeywords-end"></div>
+
+<div id="profile-edit-prvkeywords-wrapper" >
+<label id="profile-edit-prvkeywords-label" for="profile-edit-prvkeywords" >{{$lbl_prvkey}} </label>
+<input type="text" size="32" name="prv_keywords" id="profile-edit-prvkeywords" title="{{$lbl_ex2}}" value="{{$prv_keywords|escape:'html'}}" />
+</div><div id="profile-edit-prvkeywords-desc">{{$lbl_prvdsc}}</div>
+<div id="profile-edit-prvkeywords-end"></div>
+
+<div id="about-jot-wrapper" >
+<p id="about-jot-desc" >
+{{$lbl_about}}
+</p>
+
+<textarea rows="10" cols="72" id="profile-about-text" name="about" >{{$about}}</textarea>
+
+</div>
+<div id="about-jot-end"></div>
+
+<div class="profile-edit-submit-wrapper" >
+<input type="submit" name="submit" class="profile-edit-submit-button" value="{{$submit}}" />
+</div>
+<div class="profile-edit-submit-end"></div>
+
+ <input type="hidden" name="pdesc" id="profile-edit-pdesc" value="{{$pdesc}}" />
+ <input type="hidden" id="contact-jot-text" name="contact" value="{{$contact}}" />
+ <input type="hidden" name="hometown" id="profile-edit-hometown" value="{{$hometown}}" />
+ <input type="hidden" name="politic" id="profile-edit-politic" value="{{$politic}}" />
+ <input type="hidden" name="religion" id="profile-edit-religion" value="{{$religion}}" />
+ <input type="hidden" id="likes-jot-text" name="likes" value="{{$likes}}" />
+ <input type="hidden" id="dislikes-jot-text" name="dislikes" value="{{$dislikes}}" />
+ <input type="hidden" name="with" id="profile-edit-with" value="{{$with}}" />
+ <input type="hidden" name="howlong" id="profile-edit-howlong" value="{{$howlong}}" />
+ <input type="hidden" id="romance-jot-text" name="romance" value="{{$romance}}" />
+ <input type="hidden" id="work-jot-text" name="work" value="{{$work}}" />
+ <input type="hidden" id="education-jot-text" name="education" value="{{$education}}" />
+ <input type="hidden" id="interest-jot-text" name="interest" value="{{$interest}}" />
+ <input type="hidden" id="music-jot-text" name="music" value="{{$music}}" />
+ <input type="hidden" id="book-jot-text" name="book" value="{{$book}}" />
+ <input type="hidden" id="tv-jot-text" name="tv" value="{{$tv}}" />
+ <input type="hidden" id="film-jot-text" name="film" value="{{$film}}" />
+
+{{/if}}
</form>
</div>