'carnet/contacts/pdf' => $this->make_hook('pdf', AUTH_COOKIE),
'carnet/contacts/vcard' => $this->make_hook('vcard', AUTH_COOKIE),
'carnet/contacts/ical' => $this->make_hook('ical', AUTH_PUBLIC, 'user', NO_HTTPS),
+ 'carnet/contacts/csv' => $this->make_hook('csv', AUTH_PUBLIC, 'user', NO_HTTPS),
+ 'carnet/contacts/csv/birthday' => $this->make_hook('csv_birthday', AUTH_PUBLIC, 'user', NO_HTTPS),
'carnet/rss' => $this->make_hook('rss', AUTH_PUBLIC, 'user', NO_HTTPS),
);
SET last = FROM_UNIXTIME({?})
WHERE uid = {?}',
Get::i('read'), S::i('uid'));
- S::set('watch_last', Get::i('read'));
+ S::user()->invalidWatchCache();
Platal::session()->updateNbNotifs();
pl_redirect('carnet/panel');
}
private function getSinglePromotion(PlPage &$page, $promo)
{
- if (!ctype_digit($promo) || $promo < 1920 || $promo > date('Y')) {
+ if (!(is_int($promo) || ctype_digit($promo)) || $promo < 1920 || $promo > date('Y')) {
$page->trigError('Promotion invalide : ' . $promo . '.');
return null;
}
}
XDB::execute('INSERT IGNORE INTO watch_promo (uid, promo)
VALUES ' . implode(', ', $to_add));
+ S::user()->invalidWatchCache();
+ Platal::session()->updateNbNotifs();
}
private function delPromo(PlPage &$page, $promo)
XDB::execute('DELETE FROM watch_promo
WHERE ' . XDB::format('uid = {?}', S::i('uid')) . '
AND promo IN (' . implode(', ', $to_delete) . ')');
+ S::user()->invalidWatchCache();
+ Platal::session()->updateNbNotifs();
}
public function addNonRegistered(PlPage &$page, PlUser &$user)
{
XDB::execute('INSERT IGNORE INTO watch_nonins (uid, ni_id)
VALUES ({?}, {?})', S::i('uid'), $user->id());
+ S::user()->invalidWatchCache();
+ Platal::session()->updateNbNotifs();
}
public function delNonRegistered(PlPage &$page, PlUser &$user)
XDB::execute('DELETE FROM watch_nonins
WHERE uid = {?} AND ni_id = {?}',
S::i('uid'), $user->id());
+ S::user()->invalidWatchCache();
+ Platal::session()->updateNbNotifs();
}
public function handler_notifs(&$page, $action = null, $arg = null)
XDB::execute('UPDATE watch
SET actions = {?}
WHERE uid = {?}', $flags, S::i('uid'));
+ S::user()->invalidWatchCache();
+ Platal::session()->updateNbNotifs();
}
if (Env::has('flags_contacts')) {
XDB::execute('UPDATE watch
SET ' . XDB::changeFlag('flags', 'contacts', Env::b('contacts')) . '
WHERE uid = {?}', S::i('uid'));
+ S::user()->invalidWatchCache();
+ Platal::session()->updateNbNotifs();
}
if (Env::has('flags_mail')) {
XDB::execute('UPDATE watch
SET ' . XDB::changeFlag('flags', 'mail', Env::b('mail')) . '
WHERE uid = {?}', S::i('uid'));
+ S::user()->invalidWatchCache();
+ Platal::session()->updateNbNotifs();
}
$user = S::user();
$this->_add_rss_link($page);
$uid = S::i('uid');
- $user = Env::v('user');
+ $user = S::user();
// For XSRF protection, checks both the normal xsrf token, and the special RSS token.
// It allows direct linking to contact adding in the RSS feed.
}
switch (Env::v('action')) {
case 'retirer':
- if (($user = User::get(Env::v('user')))) {
+ if (($contact = User::get(Env::v('user')))) {
if (XDB::execute("DELETE FROM contacts
- WHERE uid = {?} AND contact = {?}", $uid, $user->id())) {
+ WHERE uid = {?} AND contact = {?}",
+ $uid, $contact->id())) {
+ Platal::session()->updateNbNotifs();
$page->trigSuccess("Contact retiré !");
}
}
break;
case 'ajouter':
- if (($user = User::get(Env::v('user')))) {
+ if (($contact = User::get(Env::v('user')))) {
if (XDB::execute("REPLACE INTO contacts (uid, contact)
- VALUES ({?}, {?})", $uid, $user->id())) {
+ VALUES ({?}, {?})",
+ $uid, $contact->id())) {
+ Platal::session()->updateNbNotifs();
$page->trigSuccess('Contact ajouté !');
} else {
$page->trigWarning('Contact déjà dans la liste !');
}
$search = false;
- $user = S::user();
require_once 'userset.inc.php';
);
}
+ function handler_csv_birthday(&$page, $alias = null, $hash = null)
+ {
+ $user = Platal::session()->tokenAuth($alias, $hash);
+ if (is_null($user)) {
+ if (S::logged()) {
+ $user == S::user();
+ } else {
+ return PL_FORBIDDEN;
+ }
+ }
+
+ $page->changeTpl('carnet/calendar.outlook.tpl', NO_SKIN);
+ $filter = new UserFilter(new UFC_Contact($user));
+ $profiles = $filter->iterProfiles();
+ $page->assign('events', PlIteratorUtils::map($profiles, array($this, 'buildBirthRef')));
+ $years = array(date("Y"));
+ for ($i = 1; $i <= 10; ++$i) {
+ $years[] = $years[0] + $i;
+ }
+ $page->assign('years', $years);
+ $lang = 'fr';
+ if (preg_match('/([a-zA-Z]{2,8})($|[^a-zA-Z])/', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches)) {
+ $lang = strtolower($matches[1]);
+ }
+ $page->assign('lang', $lang);
+ if ($lang == 'fr') {
+ $encoding = 'iso8859-15';
+ } else {
+ $encoding = 'utf-8';
+ }
+ pl_content_headers("text/comma-separated-values;charset=".$encoding);
+ }
function handler_ical(&$page, $alias = null, $hash = null)
{
$vcard->addProfiles($pf->getProfiles());
$vcard->show();
}
+
+ function handler_csv(&$page, $alias = null, $hash = null)
+ {
+ $user = Platal::session()->tokenAuth($alias, $hash);
+ if (is_null($user)) {
+ if (S::logged()) {
+ $user == S::user();
+ } else {
+ return PL_FORBIDDEN;
+ }
+ }
+
+ $page->changeTpl('carnet/mescontacts.outlook.tpl', NO_SKIN);
+ $pf = new ProfileFilter(new UFC_Contact($user));
+ require_once 'carnet/outlook.inc.php';
+ Outlook::output_profiles($pf->getProfiles(), 'fr');
+ }
}
// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: