Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 2492

Přidáno uživatelem David Raška před více než 9 roky(ů)

Novinky:
refs #908: Verifikace e-mailu

Zobrazit rozdíly:

freenetis/branches/1.2/application/controllers/contacts.php
$grid_contacts->callback_field('type')
->callback('callback::additional_contacts_type_callback');
$grid_contacts->callback_field('verify')
->label('Verified contact')
->class('center')
->callback('callback::enabled_field');
$grid_contacts->field('value');
......
->icon_action('edit')
->url('contacts/edit/'.$user_id)
->class('popup_link');
$actions->add_conditional_action()
->condition('is_contact_verifiable')
->icon_action('approve')
->label('Verify contact')
->url('contacts/verify')
->class('popup_link');
}
if ($this->acl_check_delete(
......
{ // add whole contact
$contact_model->type = $form_values['type'];
$contact_model->value = $form_values['value'];
$contact_model->verify = 0;
$contact_model->save_throwable();
$contact_model->add($user);
......
}
$country_model->transaction_commit();
try
{
$this->send_verify_message($contact_model->id);
status::success('Verification message have been successfully sent.');
}
catch (Exception $ex)
{
status::error('Error - cant send Verification message', $ex);
Log::add_exception($ex);
}
status::success('Additional contacts have been successfully updated');
$this->redirect('contacts/show_by_user/',$user_id);
}
......
$contact_model->transaction_start();
$form_data = $form->as_array();
// contact
$changed = false;
if ($contact_model->value !== $form_data['value'])
{
$contact_model->verify = 0;
$changed = true;
}
$contact_model->value = $form_data['value'];
$contact_model->save_throwable();
// mail redirection
......
}
// ok
$contact_model->transaction_commit();
if ($changed)
{
try
{
$this->send_verify_message($contact_id);
status::success('Verification message have been successfully sent.');
}
catch (Exception $ex)
{
status::error('Error - cant send Verification message', $ex);
Log::add_exception($ex);
}
}
status::success('Additional contacts have been successfully updated');
$this->redirect('contacts/show_by_user/', $user_id);
}
......
}
}
}
/**
* Verify contact of user
* @param type $user_id
* @param type $contact_id
*/
public function verify($contact_id = NULL)
{
if (empty($contact_id) || !is_numeric($contact_id))
{
Controller::warning(PARAMETER);
}
$contact_model = new Contact_Model($contact_id);
if (!$contact_model->id)
{
Controller::error(RECORD);
}
$user_contacts_model = new Users_contacts_Model();
$user_id = $user_contacts_model->get_user_of_contact($contact_id);
$user = new User_Model($user_id);
// rights
if (!$this->acl_check_edit(
'Users_Controller', 'additional_contacts', $user->member_id
) || !condition::is_contact_verifiable($contact_model))
{
Controller::error(ACCESS);
}
$view = new View('main');
$view->title = __('Administration of additional contacts');
$enum_type_model = new Enum_type_Model();
$country_code = NULL;
if ($contact_model->type == Contact_Model::TYPE_PHONE)
{
$country_code = $contact_model->get_phone_prefix();
}
$form = new Forge("contacts/verify/$contact_id?verify");
$form->hidden('contact_id')
->value($contact_id);
$form->submit('Verify contact');
$form2 = new Forge("contacts/verify/$contact_id?send");
$form2->hidden('contact_id')
->value($contact_id);
$form2->submit('Send verify message');
if ($form->validate())
{
if (isset($_GET) && isset($_GET['verify']))
{
$form_array = $form->as_array();
try
{
$contact_model->transaction_start();
// contact
$contact_model->verify = 1;
$contact_model->save_throwable();
// ok
$contact_model->transaction_commit();
status::success('Contact have been successfully verified');
}
catch (Exception $ex)
{
$contact_model->transaction_rollback();
status::error('Error - cant verify additional contact', $ex);
Log::add_exception($ex);
}
$this->redirect('contacts/show_by_user/', $user_id);
}
else
{
try
{
if ($contact_model->verify == 0)
{
$contact_model->verify = text::random('numeric', 6);
}
$this->send_verify_message($contact_id);
status::success('Verification message have been successfully sent.');
}
catch (Exception $ex)
{
status::error('Error - cant send verification message', $ex);
Log::add_exception($ex);
}
$this->redirect('contacts/show_by_user/', $user_id);
}
}
else
{
// breadcrumbs navigation
$breadcrumbs = breadcrumbs::add()
->link('members/show_all', 'Members',
$this->acl_check_view('Members_Controller','members'))
->disable_translation()
->link('members/show/' . $user->member->id,
"ID ".$user->member->id." - ".$user->member->name,
$this->acl_check_view(
'Members_Controller','members',
$user->member->id
)
)->enable_translation()
->link('users/show_by_member/' . $user->member_id, 'Users',
$this->acl_check_view(
'Users_Controller', 'users', $user->member_id
)
)->disable_translation()
->link('users/show/'.$user->id,
"$user->name $user->surname ($user->login)",
$this->acl_check_view(
'Users_Controller','users', $user->member_id
)
)->enable_translation()
->link('contacts/show_by_user/' . $user_id,
'User contacts',
$this->acl_check_view(
'Users_Controller', 'additional_contacts',
$user->member_id
)
)->disable_translation()
->text($contact_model->value)
->enable_translation()
->text('Verify contact');
$view->breadcrumbs = $breadcrumbs->html();
$view->content = new View('contacts/verify');
$view->content->form = $form->html();
$view->content->form2 = $form2->html();
$view->content->contact_type = $enum_type_model->get_value(
$contact_model->type
);
$view->content->country_code = $country_code;
$view->content->value = $contact_model->value;
$view->render(TRUE);
}
}
/**
* Sends verification message
*
* @param mixed $user_id
* @param mixed $contact_id
*/
private function send_verify_message($contact_id)
{
$contact_model = new Contact_Model($contact_id);
$message_model = new Message_Model();
if ($contact_model->verify == 1)
{
return;
}
// find message
$verify_message = $message_model->
where('type', Message_Model::VERIFY_CONTACT_MESSAGE)->find();
$data = $contact_model->get_message_info_by_contact_id($contact_id)->current();
$data->verify_link = url_lang::site('contacts/verify/'.$contact_id, FALSE, FALSE);
if ($contact_model == Contact_Model::TYPE_EMAIL)
{
Message_Model::send_email(
$verify_message,
$contact_model->value,
$data
);
}
}
}
freenetis/branches/1.2/application/helpers/condition.php
}
}
/**
* Checks if user contact is verifiable by sending verify code or link
*
* @param object $item
* @return boolean
*/
public static function is_contact_verifiable($item)
{
return ($item->verify != 1 && $item->type == Contact_Model::TYPE_EMAIL);
}
}
freenetis/branches/1.2/application/i18n/cs_CZ/help.php
'connection_request_info_short' => 'Pro připojení neregistrované přípojky/zařízení vyplňte prosím tento formulář.',
'connection_request_user_pre_info' => 'V naší síti není přípojka (zařízení), kterou aktuálně používáte, zaregistrována a tudíž z ní nebude povolen přístup na internet, přejete si %s?',
'connection_request_mac_address' => 'Fyzická adresa zařízení, se kterým se snažíte přistoupit na internet (PC, notebook, mobil).',
'content_of_message' => 'Obsah zprávy pro přesměrování je možno díky zabudovanému editoru měnit jak ručně, tak s pomocí jeho palety formátování. V textu lze využít několik speciálních tagů ve složených závorkách, které se zobrazí podle IP adresy přesměrovaného člena. {member_name} zobrazí jméno člena, {member_id} ID člena, {ip_address} IP adresu, {subnet_name} název podsítě, {variable_symbol} variabilní symbol, {balance} zůstatek, {comment} osobní komentář.',
'content_of_message' => 'Obsah zprávy pro přesměrování je možno díky zabudovanému editoru měnit jak ručně, tak s pomocí jeho palety formátování. V textu lze využít několik speciálních tagů ve složených závorkách, které se zobrazí podle IP adresy přesměrovaného člena. {member_name} zobrazí jméno člena, {member_id} ID člena, {ip_address} IP adresu, {subnet_name} název podsítě, {variable_symbol} variabilní symbol, {balance} zůstatek, {comment} osobní komentář. Ve zprávě pro ověření kontaktu můžete použít hodnoty {contact} jako hodnotu kontaktu a {verify_link} jako adresu ověření kontaktu.',
'credit_subaccounts' => 'Kreditní podúčty jsou jinde ve Freenetisu zmíněny jako kreditní účty, ovšem z pohledu účetního, jde spíše o podúčty. Z pohledu účetního jde stále o jeden účet 221100. Zde jsou ovšem vypsány podúčty, které vyjadřují vnitřní rozdělení peněz na účtu a jde o peníze na účtech jednotlivých členů.',
'current_credit' => 'Aktuální stav vašeho kreditu. Z vašeho účtu je každý měsíc strháván členský příspěvek. V případě, že se blížíte k nule, nebo jste se dostali do mínusu, je třeba kredit dobít zaplacením členského příspěvku.',
'day_book' => 'Účetní deník obsahuje úplně všechny podvojné převody účetního systému Freenetisu.',
freenetis/branches/1.2/application/i18n/cs_CZ/texts.php
'add work' => 'Přidat práci',
'added' => 'Přidáno',
'added by' => 'Přidal',
'additional contacts have been successfully updated' => 'Další kontakty úspěšně uloženy',
'additional demolition of membership fees' => 'Dodatečné stržení členských příspěvků',
'additional payment for member fees before membership' => 'Doplatek členských přispěvků v době kdy nebyl uživatel členem',
'another contact information' => 'Další kontaktní informace',
......
'address point url' => 'URL databáze adresních bodů',
'address points' => 'Adresní body',
'address ranges' => 'Adresní rozsahy',
'additional contacts have been successfully updated' => 'Další kontakty úspěšně uloženy',
'administrate additional contacts' => 'Přidávání/editace dalších kontaktních informací',
'administrate variable symbols' => 'Přidávání/editace variabilních symbolů',
'administration' => 'Administrace',
......
'connection test expired' => 'Testovací připojení vypršelo',
'connections' => 'Připojení',
'constant symbol' => 'Konstantní symbol',
'contact have been successfully verified' => 'Kontakt byl úspěšně ověřen',
'contact is owned by another user' => 'Kontakt je vlastněn jiným uživatelem',
'contact is already in database' => 'Kontakt je již v databázi',
'contact data' => 'Kontaktní údaje',
......
'error - cant remove interface' => 'Chyba - nelze odstranit rozhraní.',
'error - cant remove vlan' => 'Chyba - nelze odstranit vlan.',
'error - cant restore membership' => 'Chyba - nelze obnovit členství.',
'error - cant send verification message' => 'Chyba - nelze odeslat oveřovací zprávu',
'error - cant set redirection' => 'Chyba - nelze nastavit přesměrování.',
'error - cant update account' => 'Chyba - nelze upravit účet.',
'error - cant update additional contacts' => 'Chyba - nelze upravit další kontakty.',
......
'error - cant update user' => 'Chyba - nelze upravit uživatele.',
'error - cant update variable symbols' => 'Chyba - nelze upravit variabilní symboly.',
'error - cant update work' => 'Chyba - nelze upravit práci.',
'error - cant verify contact' => 'Chyba - nelze ověřit kontakt',
'error - debtor credit boundary has not been set' => 'Chyba - hranice kreditu pro dlužníka nebyla nastavena.',
'error - during searching long term connections' => 'Chyba - během hledání dlouhotrvajícího připojení.',
'error - during extraction of data' => 'Chyba - během extrakcce dat.',
......
'not filled in' => 'Nevyplněno',
'not found' => 'Nenalezeno',
'not set' => 'Nenastaveno',
'not verified' => 'Neověřen',
'note' => 'Poznámka',
'notification message "%s" has been automatically activated' => 'Upozorňovací zpráva "%s" byla automaticky aktivována',
'notification setting' => 'Nastavení upozornění',
......
'send mail warning to users related with invoice' => 'Odeslat upozornění uživatelům spojených s fakturou',
'send message' => 'Odeslat zprávu',
'send sms notice about received payment to member' => 'Odeslat členovi SMS zprávu s oznámením o jeho přijaté platbě',
'send verify message' => 'Odelat ověřovací zprávu',
'select' => 'Vyber',
'select account type' => 'Vyber typ účtu',
'select action' => 'Vyber činnost',
......
'variables for qos' => 'Proměnné pro QoS',
'vat' => 'DPH',
'vat organization identifier' => 'DIČ',
'verification message have been successfully sent' => 'Ověřovací zpráva byla úspěšně odeslána',
'verified' => 'Ověřen',
'verified contact' => 'Ověřený kontakt',
'verify code' => 'Ověřovací kód',
'verify contact' => 'Ověřit kontakt',
'verify contact message' => 'Zpráva ověření kontaktu',
'version' => 'verze',
'vertical' => 'vertikální',
'very weak' => 'Velmi slabé',
freenetis/branches/1.2/application/i18n/en_US/help.php
'connection_request_info_short' => 'To connect unregistered connections/device please fill out this form.',
'connection_request_user_pre_info' => 'In our network the connection (device) that you are currently using is not registered and therefore it is not allowed to access the internet with it. Would you like to %s?',
'connection_request_mac_address' => 'The physical address of the device that you are trying to access the internet (PC, laptop, mobile, ...).',
'content_of_message' => 'The content of the message for redirection is possible thanks to the built-in editor to modify both manually and with its variety of formatting. In the text you can use some special tags in curly brackets, which are displayed by IP address redirected member. {member_name} display member\'s name, {member_id} Member ID, {ip_address} IP address, {subnet_name} subnet name, {variable_symbol} variable symbol, {balance} balance, {comment} personal commentary.',
'content_of_message' => 'The content of the message for redirection is possible thanks to the built-in editor to modify both manually and with its variety of formatting. In the text you can use some special tags in curly brackets, which are displayed by IP address redirected member. {member_name} display member\'s name, {member_id} Member ID, {ip_address} IP address, {subnet_name} subnet name, {variable_symbol} variable symbol, {balance} balance, {comment} personal commentary. In contact verify message, you can use {contact} as contact value and {verify_link} as contact verification address.',
'credit_subaccounts' => 'Credit sub-accounts are elsewhere in Freenetisu mentioned as credit accounts, but in terms of accounting, but rather a sub-accounts. From the perspective of accounting is still a single account 221100. Here, however, are sub-listed, which express the internal distribution of money in the account and the money goes to the accounts of individual members.',
'current_credit' => 'The current status of your credit. Membership fee is deducted monthly from account. In the event that you are approaching zero, or you get to minus, you need to recharge your credit by paying the membership fee.',
'day_book' => 'Accounting diary contains completely all double accounting system conversions Freenetisu.',
freenetis/branches/1.2/application/models/contact.php
* @property int $id
* @property int $type
* @property string $value
* @property int $verify
* @property ORM_Iterator $countries
* @property ORM_Iterator $users_contacts
* @property ORM_Iterator $private_users_contacts
......
{
return $this->db->query("
SELECT c.id, c.type, IF(n.country_code IS NULL, c.value,
CONCAT(n.country_code, c.value)) AS value, u.user_id
CONCAT(n.country_code, c.value)) AS value, c.verify,
u.user_id
FROM contacts c
LEFT JOIN users_contacts u ON u.contact_id = c.id
LEFT JOIN contacts_countries o ON o.contact_id = c.id
......
return '';
}
public function get_message_info_by_contact_id($contact_id)
{
if (!$contact_id || $contact_id === NULL)
{
return NULL;
}
return $this->db->query("
SELECT m.name as member_name,
m.id as member_id,
? as ip_address,
? as subnet_name,
(
SELECT GROUP_CONCAT(vs.variable_symbol) AS variable_symbol
FROM variable_symbols vs
LEFT JOIN accounts a ON a.id = vs.account_id
WHERE a.member_id = m.id
) AS variable_symbol,
IFNULL(a.balance,?) AS balance,
? as comment,
c.value as contact
FROM contacts c
LEFT JOIN users_contacts uc ON uc.contact_id = c.id
LEFT JOIN users u ON u.id = uc.user_id
LEFT JOIN members m ON m.id = u.member_id
LEFT JOIN accounts a ON a.member_id = m.id AND m.id <> 1
WHERE c.id = ?
", '???', '???','???','???',$contact_id);
}
}
freenetis/branches/1.2/application/models/message.php
*/
const FORMER_MEMBER_MESSAGE = 19;
/**
* notification e-mail
*/
const VERIFY_CONTACT_MESSAGE = 20;
// self-cancel constants
/**
......
self::INTERRUPTED_MEMBERSHIP_BEGIN_NOTIFY_MESSAGE => 'Membership interrupt begins notification',
self::INTERRUPTED_MEMBERSHIP_END_NOTIFY_MESSAGE => 'Membership interrupt ends notification',
self::FORMER_MEMBER_MESSAGE => 'Former member message',
self::VERIFY_CONTACT_MESSAGE => 'Verify contact message'
);
/**
......
$type == self::MONITORING_HOST_UP ||
$type == self::INTERRUPTED_MEMBERSHIP_BEGIN_NOTIFY_MESSAGE ||
$type == self::INTERRUPTED_MEMBERSHIP_END_NOTIFY_MESSAGE ||
$type == self::FORMER_MEMBER_MESSAGE
$type == self::FORMER_MEMBER_MESSAGE ||
$type == self::VERIFY_CONTACT_MESSAGE
);
}
......
$type != self::INTERRUPTED_MEMBERSHIP_MESSAGE &&
$type != self::INTERRUPTED_MEMBERSHIP_BEGIN_NOTIFY_MESSAGE &&
$type != self::INTERRUPTED_MEMBERSHIP_END_NOTIFY_MESSAGE &&
$type != self::FORMER_MEMBER_MESSAGE
$type != self::FORMER_MEMBER_MESSAGE &&
$type != self::VERIFY_CONTACT_MESSAGE
);
}
freenetis/branches/1.2/application/views/contacts/verify.php
<h2><?php echo __('Verify contact'); ?></h2><br />
<table cellspacing="0" class="form" id="form_table">
<tr>
<th><?php echo __('Type') ?>:</th>
<td><b><?php echo $contact_type; ?></b></td>
</tr>
<?php if (!empty($country_code)): ?>
<tr>
<th><?php echo __('Country code') ?>:</th>
<td><b><?php echo $country_code; ?></b></td>
</tr>
<?php endif; ?>
<tr>
<th><?php echo __('Value') ?>:</th>
<td><b><?php echo $value; ?></b></td>
</tr>
</table>
<?php echo $form; ?>
<?php echo $form2; ?>
freenetis/branches/1.2/application/views/members/show.php
<th>
<table class="picturebox">
<tr>
<td><?php echo __('E-mail') ?></td>
<td><?php echo __('E-mail') .' - ' . ($contact->verify == 1 ? __('Verified') : __('Not verified')) ?></td>
<td><?php if (Settings::get('email_enabled')):
echo form::open(url_lang::base().'email') ;
echo form::hidden('email_member_id', $member->id );
freenetis/branches/1.2/application/views/users/show.php
</tr>
<?php foreach ($contacts as $i => $contact):?>
<tr>
<th><?php echo $contact_types[$i] ?></th>
<th><?php echo $contact_types[$i] . ' - ' . ($contact->verify == 1 ? __('Verified') : __('Not verified')) ?></th>
<td><?php echo $contact->value ?></td>
</tr>
<?php endforeach; ?>
freenetis/branches/1.2/db_upgrades/upgrade_1.2.0~alpha8.php
<?php defined('SYSPATH') or die('No direct script access.');
/*
* This file is part of open source system FreenetIS
* and it is released under GPLv3 licence.
*
* More info about licence can be found:
* http://www.gnu.org/licenses/gpl-3.0.html
*
* More info about project can be found:
* http://www.freenetis.org/
*
*/
/**
* Adds new type of message for contact verification
* and verify flag to contacts table
*
* @author David Raška <jeffraska@gmail.com>
*/
$upgrade_sql['1.2.0~alpha8'] = array
(
"ALTER TABLE `contacts` ADD `verify` INT( 1 ) NOT NULL",
"INSERT INTO `messages` (`id` , `name` , `text` , `email_text` , `sms_text` , `type` , `self_cancel` , `ignore_whitelist` ) VALUES
(NULL , 'Verify contact', NULL ,
'<p>Verify your contact {contact} on <a href=\"{verify_link}\" target=\"_blank\">{verify_link}</a></p>',
NULL, '20', '1', '0');"
); // end of $upgrade_sql['1.2.0~alpha8']
freenetis/branches/1.2/version.php
* The current version of FreenetIS.
* This value must be changed by developers in a new release of FreenetIS.
*/
define('FREENETIS_VERSION', '1.2.0~alpha7');
define('FREENETIS_VERSION', '1.2.0~alpha8');

Také k dispozici: Unified diff