/common/extensions/invitation_manager/php/invitation_form.class.php
PHP | 270 lines | 199 code | 46 blank | 25 comment | 17 complexity | f39eb92c462e69f2f2e97344a965855c MD5 | raw file
Possible License(s): GPL-2.0, BSD-3-Clause, LGPL-2.1, LGPL-3.0, GPL-3.0, MIT
- <?php
- namespace common\extensions\invitation_manager;
-
- use common\libraries\Mail;
-
- use common\libraries\FormValidator;
- use common\libraries\Translation;
- use common\libraries\Utilities;
- use common\libraries\EqualityCondition;
- use common\libraries\AndCondition;
- use user\User;
- use user\UserDataManager;
- use admin\AdminDataManager;
- use rights\RightsDataManager;
- use common\libraries\Path;
- use PHPExcel_Reader_Excel2007;
-
- require_once Path :: get_plugin_path() . 'phpexcel/PHPExcel.php';
-
- class InvitationForm extends FormValidator
- {
-
- const IMPORT_FILE_NAME = 'email_address_file';
-
- private $invitation_manager;
- private $valid_email_regex = '/^((\"[^\"\f\n\r\t\v\b]+\")|([\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+(\.[\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+)*))@((\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\-])+\.)+[A-Za-z\-]+))$/';
-
- function __construct($invitation_manager, $action)
- {
- parent :: __construct('invitation_form', 'post', $action);
- $this->invitation_manager = $invitation_manager;
- $this->build_form();
- $this->setDefaults();
- }
-
- function build_form()
- {
- $this->addElement('category', Translation :: get('Invitation'));
-
- $this->add_information_message(null, null, Translation :: get('ExcelOfEmailAddresses'));
- $this->addElement('file', self :: IMPORT_FILE_NAME, Translation :: get('FileName'));
- // $this->addElement('textarea', Invitation :: PROPERTY_EMAIL, Translation :: get('EmailAddresses'), 'cols="70" rows="8"');
- // $this->addRule(Invitation :: PROPERTY_EMAIL, Translation :: get('ThisFieldIsRequired', null, Utilities :: COMMON_LIBRARIES), 'required');
- $this->add_forever_or_expiration_date_window(Invitation :: PROPERTY_EXPIRATION_DATE);
- $this->addElement('checkbox', Invitation :: PROPERTY_ANONYMOUS, Translation :: get('Anonymous'), null, 1);
-
- // $rights_templates = RightsDataManager :: get_instance()->retrieve_rights_templates();
- // while ($rights_template = $rights_templates->next_result())
- // {
- // $defaults[$rights_template->get_id()] = array('title' => $rights_template->get_name(), 'description', $rights_template->get_description(), 'class' => 'rights_template');
- // }
- //
- // $url = Path :: get(WEB_PATH) . 'rights/xml_feeds/xml_rights_template_feed.php';
- // $locale = array();
- // $locale['Display'] = Translation :: get('AddRightsTemplates');
- // $locale['Searching'] = Translation :: get('Searching', null, Utilities :: COMMON_LIBRARIES);
- // $locale['NoResults'] = Translation :: get('NoResults', null, Utilities :: COMMON_LIBRARIES);
- // $locale['Error'] = Translation :: get('Error', null, Utilities :: COMMON_LIBRARIES);
- // $hidden = true;
- //
- // $element_finder = $this->addElement('element_finder', 'rights_templates', null, $url, $locale, array());
- // $element_finder->setDefaultCollapsed(true);
-
-
- $this->addElement('category');
-
- $this->addElement('category', Translation :: get('InvitationMessage'));
- $this->add_textfield(Invitation :: PROPERTY_TITLE, Translation :: get('InvitationSubject'), true);
- //$this->addElement('text', Invitation :: PROPERTY_TITLE, Translation :: get('InvitationSubject'));
- $this->addRule(Invitation :: PROPERTY_TITLE, Translation :: get('ThisFieldIsRequired', null, Utilities :: COMMON_LIBRARIES), 'required');
- $this->add_html_editor(Invitation :: PROPERTY_MESSAGE, Translation :: get('InvitationBody'), true);
- $this->addElement('category');
-
- $checkboxes = array();
- $checkboxes[] = '<script type="text/javascript">';
- $checkboxes[] = '$(document).ready(function() {';
- $checkboxes[] = '$("input:checkbox[name=\'' . Invitation :: PROPERTY_ANONYMOUS . '\']").iphoneStyle({ checkedLabel: \'' . Translation :: get('ConfirmYes', null, Utilities :: COMMON_LIBRARIES) . '\', uncheckedLabel: \'' . Translation :: get('ConfirmNo', null, Utilities :: COMMON_LIBRARIES) . '\'});';
- $checkboxes[] = '});';
- $checkboxes[] = '</script>';
- $this->addElement('html', implode("\n", $checkboxes));
-
- $buttons[] = $this->createElement('style_submit_button', 'submit', Translation :: get('Invite'), array(
- 'class' => 'positive update'));
- $buttons[] = $this->createElement('style_reset_button', 'reset', Translation :: get('Reset', null, Utilities :: COMMON_LIBRARIES), array(
- 'class' => 'normal empty'));
- $this->addGroup($buttons, 'buttons', null, ' ', false);
- }
-
- /**
- * Sets default values.
- * @param array $defaults Default values for this form's parameters.
- */
- function setDefaults($defaults = array ())
- {
-
- $expiration_date = $this->invitation_manager->get_parent()->get_expiration_date();
- $defaults[Invitation :: PROPERTY_ANONYMOUS] = 0;
-
- if ($expiration_date == 0)
- {
- $defaults['forever'] = 1;
- }
- else
- {
- $defaults['forever'] = 0;
- $defaults[Invitation :: PROPERTY_EXPIRATION_DATE] = $expiration_date;
- }
- parent :: setDefaults($defaults);
- }
-
- function process()
- {
-
- $values = $this->exportValues();
- $array = explode('.', $_FILES[self :: IMPORT_FILE_NAME]['name']);
-
- $type = $array[count($array) - 1];
-
- if ($type != 'xlsx')
- {
- return false;
- }
-
- $PhpReader = new PHPExcel_Reader_Excel2007();
- $excel = $PhpReader->load($_FILES[self :: IMPORT_FILE_NAME]['tmp_name']);
- $worksheet = $excel->getActiveSheet();
-
- $excel_array = $worksheet->toArray();
- $emails = array();
-
- //each row in excel except row 1 = headers !
- for($i = 1; $i < count($excel_array); $i ++)
- {
- $emails[] = $excel_array[$i][0];
- }
-
- $invitation_parameters = new InvitationParameters();
- $invitation_parameters->set_emails_from_array($emails);
-
- $emails = $values[Invitation :: PROPERTY_EMAIL];
- if ($emails)
- {
- $invitation_parameters->set_emails_from_string($emails);
- }
-
- $emails = $invitation_parameters->get_emails();
- $properties = $invitation_parameters->get_properties();
- $existing_users = array();
-
- $parameters = $this->invitation_manager->get_parent()->get_url_parameters();
- $location_rights_ids = $this->invitation_manager->get_parent()->get_location_rights_ids();
- $rights_class_method = $this->invitation_manager->get_parent()->get_set_right_class_and_method();
-
- $anonymous = $values[Invitation :: PROPERTY_ANONYMOUS];
- if (! $anonymous)
- {
- $anonymous = 0;
- }
-
- $invitation_user = $this->invitation_manager->get_parent()->get_invitation_user();
- $invitation_user_email = $invitation_user->get_email();
- $invitation_user_name = $invitation_user->get_fullname();
-
- foreach ($emails as $email)
- {
- $email_condition = new EqualityCondition(User :: PROPERTY_EMAIL, $email);
- $users = UserDataManager :: get_instance()->retrieve_users($email_condition);
-
- $failures = 0;
- $succes = false;
-
- if ($users->size() > 0)
- {
- while ($user = $users->next_result())
- {
- $existing_users[] = $user->get_id();
- }
- }
- else
- {
- $invitation = null;
- $invitation_conditions = array();
- $invitation_conditions[] = new EqualityCondition(Invitation :: PROPERTY_EMAIL, $email);
- $invitation_conditions[] = new EqualityCondition(Invitation :: PROPERTY_PARAMETERS, $parameters);
- $invitation_condition = new AndCondition($invitation_conditions);
-
- $count = AdminDataManager :: get_instance()->count_invitations($invitation_condition);
-
- if ($count > 0)
- {
- $invitations = AdminDataManager :: get_instance()->retrieve_invitations($invitation_condition);
-
- $invitation = $invitations->next_result();
- if ($invitation)
- {
- $invitation->set_expiration_date($values[Invitation :: PROPERTY_EXPIRATION_DATE]);
- $invitation->set_anonymous($anonymous);
- $invitation->set_title($values[Invitation :: PROPERTY_TITLE]);
- $invitation->set_message($values[Invitation :: PROPERTY_MESSAGE]);
- $invitation->set_rights_templates($location_rights_ids);
- $invitation->set_rights_class_method($rights_class_method);
- $succes = $invitation->update();
- if (! $succes)
- {
- $failures ++;
- }
- }
- }
- else
- {
- $invitation = new Invitation();
- $invitation->set_email($email);
- $invitation->set_parameters($parameters);
- $invitation->set_rights_templates($location_rights_ids);
- $invitation->set_rights_class_method($rights_class_method);
- $invitation->set_expiration_date($values[Invitation :: PROPERTY_EXPIRATION_DATE]);
- $invitation->set_anonymous($anonymous);
- $invitation->set_title($values[Invitation :: PROPERTY_TITLE]);
- $invitation->set_message($values[Invitation :: PROPERTY_MESSAGE]);
- $succes = $invitation->create();
- if (! $succes)
- {
- $failures ++;
- }
- }
-
- if ($succes)
- {
-
- $from = array();
- $from[Mail :: NAME] = $invitation_user_name;
- $from[Mail :: EMAIL] = $invitation_user_email;
-
- $message = array();
- $message[] = $invitation->get_message();
- $message[] = '<br/>';
- $message[] = $this->invitation_manager->get_invitation_url($invitation);
- $message = implode('\n', $message);
-
- $mail = Mail :: factory($invitation->get_title(), $message, $email, $from);
- $reply = array();
- $reply[Mail :: NAME] = $invitation_user_name;
- $reply[Mail :: EMAIL] = $invitation_user_email;
- $mail->set_reply($reply);
-
- // Check whether it was sent successfully
- if ($mail->send() === FALSE)
- {
- $failures ++;
- }
- }
-
- }
- }
-
- $succes = $this->invitation_manager->get_parent()->process_existing_users($existing_users);
- if (! $succes)
- {
- $failures ++;
- }
-
- if ($failures > 0)
- {
- $succes = false;
- }
-
- return $succes;
- }
- }
- ?>