Ejemplo n.º 1
0
 public static function profileForm($fields)
 {
     global $parametersMod;
     global $site;
     $standardForm = new \Library\Php\Form\Standard($fields);
     return $standardForm->generateForm($parametersMod->getValue('community', 'user', 'translations', 'button_update'), $site->generateUrl());
 }
Ejemplo n.º 2
0
    public static function generateHtml($fields, $thank_you, $email_to, $button, $email_subject, $id, $layout = null)
    {
        global $site;
        global $module_url;
        global $log;
        switch ($layout) {
            default:
            case "default":
                $answer = '';
                $field = '';
                $field = new \Library\Php\Form\FieldHidden();
                $field->name = 'cm_group';
                $field->value = 'misc';
                $fields[] = $field;
                $field = new \Library\Php\Form\FieldHidden();
                $field->name = 'cm_name';
                $field->value = 'contact_form';
                $fields[] = $field;
                $field = new \Library\Php\Form\FieldHidden();
                $field->name = 'action';
                $field->value = 'contact_form';
                $fields[] = $field;
                $field = new \Library\Php\Form\FieldHidden();
                $field->name = 'module_group';
                $field->value = 'standard';
                $fields[] = $field;
                $field = new \Library\Php\Form\FieldHidden();
                $field->name = 'spec_id';
                $field->value = $id;
                $fields[] = $field;
                $field = new \Library\Php\Form\FieldHidden();
                $field->name = 'spec_url';
                $field->caption = 'URL';
                $field->value = $site->getCurrentUrl();
                $field->visible = false;
                $field->display = false;
                $fields[] = $field;
                $html_form = new \Library\Php\Form\Standard($fields);
                $answer .= $html_form->generateForm($button);
                return '
<div class="ipWidget ipWidgetContactForm">
  ' . $answer . '
</div>
';
        }
    }
Ejemplo n.º 3
0
 private function exportForm()
 {
     global $parametersMod;
     global $cms;
     $answer = '';
     $export_form = new \Library\Php\Form\Standard($this->exportFields);
     $answer .= $export_form->generateForm($parametersMod->getValue('developer', 'config_exp_imp', 'admin_translations', 'export_button'), $cms->generateUrl($cms->curModId, 'action=export'));
     return $answer;
 }
Ejemplo n.º 4
0
 function makeActions()
 {
     global $parametersMod;
     global $site;
     $site->requireTemplate('standard/content_management/widgets/misc/contact_form/template.php');
     $sql = "select * from `" . DB_PREF . "mc_misc_contact_form_field` where `contact_form` = '" . mysql_real_escape_string($_REQUEST['spec_id']) . "' order by id";
     $rs = mysql_query($sql);
     $fields = array();
     if (!$rs) {
         trigger_error("Can't get form fields " . $sql);
     } else {
         while ($lock = mysql_fetch_assoc($rs)) {
             switch ($lock['type']) {
                 case 'text':
                     $field = new \Library\Php\Form\FieldText();
                     break;
                 case 'text_multiline':
                     $field = new \Library\Php\Form\FieldTextarea();
                     break;
                 case 'file':
                     $field = new \Library\Php\Form\FieldFile();
                     break;
                 case 'email':
                     $field = new \Library\Php\Form\FieldEmail();
                     break;
                 case 'select':
                     $field = new \Library\Php\Form\FieldSelect();
                     $field->values = $this->prepare_for_select($this->db_values_to_array($lock['values']));
                     break;
                 case 'checkbox':
                     $field = new \Library\Php\Form\FieldCheckbox();
                     break;
                 case 'radio':
                     $field = new \Library\Php\Form\FieldRadio();
                     $field->values = $this->prepare_for_select($this->db_values_to_array($lock['values']));
                     break;
             }
             $field->caption = $lock['name'];
             $field->name = 'field_' . (sizeof($fields) + 1);
             $field->required = $lock['required'];
             $fields[] = $field;
         }
     }
     $htmlForm = new \Library\Php\Form\Standard($fields);
     $errors = $htmlForm->getErrors();
     $answer = '';
     if (sizeof($errors) > 0 || $htmlForm->detectSpam()) {
         $answer = $htmlForm->generateErrorAnswer($errors);
     } else {
         $sql = "select * from `" . DB_PREF . "mc_misc_contact_form` where `id` = '" . mysql_real_escape_string($_REQUEST['spec_id']) . "' limit 1";
         $rs = mysql_query($sql);
         if (!$rs) {
             trigger_error("Can't get contact form " . $sql);
         } elseif ($lock = mysql_fetch_assoc($rs)) {
             $email = Template::generateEmail($fields);
             $files = array();
             $from = $parametersMod->getValue('standard', 'configuration', 'main_parameters', 'email');
             foreach ($fields as $field) {
                 if (get_class($field) == 'Library\\Php\\Form\\FieldFile') {
                     if (!empty($_FILES[$field->name]) && $_FILES[$field->name]['error'] == 0) {
                         $file = array();
                         $file['real_name'] = $_FILES[$field->name]['tmp_name'];
                         $file['required_name'] = $_FILES[$field->name]['name'];
                         $files[] = $file;
                     }
                 }
                 if (get_class($field) == 'Library\\Php\\Form\\FieldEmail' && $field->postedValue() != '') {
                     $from = $field->postedValue();
                 }
             }
             $email_queue = new \Modules\administrator\email_queue\Module();
             $email_queue->addEmail($from, '', $lock['email_to'], '', $lock['email_subject'], $email, false, true, $files);
         } else {
             trigger_error("Unknown contact form id " . $sql);
         }
         $email_queue->send();
         $answer = '
         <html><head><meta http-equiv="Content-Type" content="text/html; charset=' . CHARSET . '" /></head><body>
         <script type="text/javascript">
           var form = parent.window.document.getElementById(\'' . $_REQUEST['spec_rand_name'] . '\');
           form.style.display = \'none\';
           //var txtNode = document.createTextNode("' . htmlspecialchars($lock['thank_you']) . '"); 
           var note = parent.window.document.createElement(\'p\');
           //note.appendChild(txtNode); //ie7 bug sometimes dont allow to add a textnode. 
           note.innerHTML = "' . htmlspecialchars($lock['thank_you']) . '";
           form.parentNode.appendChild(note);
         </script>
         </body></html>
       ';
     }
     echo $answer;
 }
Ejemplo n.º 5
0
 function makeActions()
 {
     global $site;
     global $parametersMod;
     global $session;
     global $log;
     $userZone = $site->getZoneByModule('community', 'user');
     if (!$userZone) {
         return;
     }
     if (isset($_REQUEST['action'])) {
         switch ($_REQUEST['action']) {
             case 'password_reset':
                 $standardForm = new \Library\Php\Form\Standard(\Modules\community\user\Config::getPasswordResetFields());
                 $errors = $standardForm->getErrors();
                 $tmpUser = Db::userByEmail($_POST['email']);
                 if (!$tmpUser) {
                     $errors['email'] = $parametersMod->getValue('community', 'user', 'errors', 'email_doesnt_exist');
                 }
                 if (!isset($_POST['password']) || $_POST['password'] == '' || $parametersMod->getValue('community', 'user', 'options', 'type_password_twice') && $_POST['password'] != $_POST['confirm_password']) {
                     $errors['password'] = $parametersMod->getValue('community', 'user', 'errors', 'passwords_dont_match');
                     $errors['confirm_password'] = $parametersMod->getValue('community', 'user', 'errors', 'passwords_dont_match');
                 }
                 if (sizeof($errors) > 0) {
                     $html = $standardForm->generateErrorAnswer($errors);
                 } else {
                     $tmp_code = md5(uniqid(rand(), true));
                     if ($parametersMod->getValue('community', 'user', 'options', 'encrypt_passwords')) {
                         $additionalFields['new_password'] = md5($_POST['password'] . \Modules\community\user\Config::$hashSalt);
                     } else {
                         $additionalFields['new_password'] = $_POST['password'];
                     }
                     $additionalFields['verification_code'] = $tmp_code;
                     $standardForm->updateDatabase(DB_PREF . 'm_community_user', 'id', $tmpUser['id'], $additionalFields);
                     $this->sendPasswordResetLink($_POST['email'], $tmp_code, $tmpUser['id']);
                     $html = "\n                <html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=" . CHARSET . "\" /></head><body>\n                <script type=\"text/javascript\">\n                  parent.window.location = '" . $site->generateUrl(null, $userZone->getName(), array(Config::$urlPasswordResetSentText)) . "';\n                </script>\n                </body></html>            \n            ";
                 }
                 echo $html;
                 \Db::disconnect();
                 exit;
                 break;
             case 'password_reset_verification':
                 $current = Db::userById($_REQUEST['id']);
                 if ($current && $current['verified']) {
                     if ($current['verification_code'] == $_REQUEST['code']) {
                         if ($current['new_password'] != '') {
                             if (Db::verifyNewPassword($current['id'])) {
                                 $site->dispatchEvent('community', 'user', 'password_reset', array('user_id' => $current['id']));
                                 header("location: " . $site->generateUrl(null, $userZone->getName(), array(Config::$urlPasswordResetVerified)));
                             } else {
                                 header("location: " . $site->generateUrl(null, $userZone->getName(), array(Config::$urlPasswordResetVerificationError)));
                             }
                         } else {
                             header("location: " . $site->generateUrl(null, $userZone->getName(), array(Config::$urlPasswordResetVerified)));
                         }
                     } else {
                         header("location: " . $site->generateUrl(null, $userZone->getName(), array(Config::$urlPasswordResetVerificationError)));
                     }
                 } else {
                     header("location: " . $site->generateUrl(null, $userZone->getName(), array(Config::$urlPasswordResetVerificationError)));
                 }
                 \Db::disconnect();
                 exit;
                 break;
             case 'register':
                 $html = '';
                 if (!$parametersMod->getValue('community', 'user', 'options', 'enable_registration')) {
                     \Db::disconnect();
                     exit;
                 }
                 $standardForm = new \Library\Php\Form\Standard(\Modules\community\user\Config::getRegistrationFields());
                 $errors = $standardForm->getErrors();
                 $sameEmailUser = Db::userByEmail($_POST['email']);
                 if ($_POST['email'] && $sameEmailUser) {
                     $errors['email'] = $parametersMod->getValue('community', 'user', 'errors', 'already_registered');
                 }
                 if ($parametersMod->getValue('community', 'user', 'options', 'login_type') == 'login') {
                     $sameLoginUser = Db::userByLogin($_POST['login']);
                     if ($sameLoginUser) {
                         $errors['login'] = $parametersMod->getValue('community', 'user', 'errors', 'already_registered');
                     }
                 }
                 if ($parametersMod->getValue('community', 'user', 'options', 'type_password_twice') && $_POST['password'] != $_POST['confirm_password']) {
                     $errors['password'] = $parametersMod->getValue('community', 'user', 'errors', 'passwords_dont_match');
                     $errors['confirm_password'] = $parametersMod->getValue('community', 'user', 'errors', 'passwords_dont_match');
                 }
                 if (sizeof($errors) > 0) {
                     $html = $standardForm->generateErrorAnswer($errors);
                 } else {
                     $tmp_code = md5(uniqid(rand(), true));
                     if ($parametersMod->getValue('community', 'user', 'options', 'encrypt_passwords')) {
                         $password = md5($_POST['password'] . \Modules\community\user\Config::$hashSalt);
                     } else {
                         $password = $_POST['password'];
                     }
                     if ($parametersMod->getValue('community', 'user', 'options', 'require_email_confirmation')) {
                         $verified = '0';
                     } else {
                         $verified = '1';
                     }
                     $insert_id = $standardForm->writeToDatabase(DB_PREF . 'm_community_user', array('verified' => $verified, 'verification_code' => $tmp_code, 'password' => $password, 'last_login' => date("Y-m-d"), 'language_id' => $site->currentLanguage['id']));
                     if ($insert_id !== false) {
                         $site->dispatchEvent('community', 'user', 'register', array('user_id' => $insert_id));
                         if ($parametersMod->getValue('community', 'user', 'options', 'require_email_confirmation')) {
                             $this->sendVerificationLink($_POST['email'], $tmp_code, $insert_id);
                             $html = "\n                    <html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=" . CHARSET . "\" /></head><body>\n                    <script type=\"text/javascript\">\n                      parent.window.location = '" . $site->generateUrl(null, $userZone->getName(), array(Config::$urlRegistrationVerificationRequired)) . "';\n                    </script>\n                    </body></html>\n                  ";
                         } else {
                             if ($parametersMod->getValue('community', 'user', 'options', 'autologin_after_registration')) {
                                 $tmpUser = Db::userById($insert_id);
                                 if ($tmpUser) {
                                     $this->login($tmpUser);
                                     $html = $this->redirectAfterLogin();
                                 }
                             } else {
                                 $html = "\n                      <html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=" . CHARSET . "\" /></head><body>\n                      <script type=\"text/javascript\">\n                        parent.window.location.href = '" . $site->generateUrl(null, $userZone->getName(), array(Config::$urlRegistrationVerified)) . "';\n                      </script>\n                      </body></html>\n                  ";
                             }
                         }
                     } else {
                         trigger_error("Cannot register new user");
                     }
                 }
                 echo $html;
                 \Db::disconnect();
                 exit;
                 break;
             case 'update_profile':
                 if ($session->loggedIn()) {
                     $standardForm = new \Library\Php\Form\Standard(\Modules\community\user\Config::getProfileFields());
                     $errors = $standardForm->getErrors();
                     $tmpUser = Db::userById($session->userId());
                     if (isset($_POST['email']) && $_POST['email'] != $tmpUser['email']) {
                         $user_by_new_email = Db::userByEmail($_POST['email']);
                         if ($user_by_new_email && $user_by_new_email['verified']) {
                             $errors['email'] = $parametersMod->getValue('community', 'user', 'errors', 'already_registered');
                         }
                     }
                     if ($parametersMod->getValue('community', 'user', 'options', 'type_password_twice') && $_POST['password'] != $_POST['confirm_password']) {
                         $errors['password'] = $parametersMod->getValue('community', 'user', 'errors', 'passwords_dont_match');
                         $errors['confirm_password'] = $parametersMod->getValue('community', 'user', 'errors', 'passwords_dont_match');
                     }
                     if (sizeof($errors) > 0) {
                         $html = $standardForm->generateErrorAnswer($errors);
                     } else {
                         if ($tmpUser) {
                             $additionalFields = array();
                             if (isset($_POST['email']) && $_POST['email'] != $tmpUser['email']) {
                                 $tmp_code = md5(uniqid(rand(), true));
                                 $additionalFields['new_email'] = $_POST['email'];
                                 $additionalFields['verification_code'] = $tmp_code;
                             }
                             if (isset($_POST['password']) && $_POST['password'] != '') {
                                 if ($parametersMod->getValue('community', 'user', 'options', 'encrypt_passwords')) {
                                     $additionalFields['password'] = md5($_POST['password'] . \Modules\community\user\Config::$hashSalt);
                                 } else {
                                     $additionalFields['password'] = $_POST['password'];
                                 }
                             }
                             $standardForm->updateDatabase(DB_PREF . 'm_community_user', 'id', $tmpUser['id'], $additionalFields);
                             $site->dispatchEvent('community', 'user', 'update_profile', array('user_id' => $tmpUser['id']));
                             if (isset($_POST['email']) && $_POST['email'] != $tmpUser['email']) {
                                 $this->sendUpdateVerificationLink($_POST['email'], $tmp_code, $tmpUser['id']);
                                 $html = "\n                    <html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=" . CHARSET . "\" /></head><body>\n                    <script type=\"text/javascript\">\n                      parent.window.location = '" . $site->generateUrl(null, $userZone->getName(), array(Config::$urlEmailVerificationRequired)) . "';\n                    </script>\n                    </body></html>\n                  ";
                             } else {
                                 $html = "\n                    <html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=" . CHARSET . "\" /></head><body>\n                    <script type=\"text/javascript\">\n                      parent.window.location = '" . $site->generateUrl(null, $userZone->getName(), array(Config::$urlProfile), array("message" => "updated")) . "';\n                    </script>\n                    </body></html>\n                  ";
                             }
                         } else {
                             trigger_error("Something goes wrong. " . $session->userId() . " " . $_POST['email']);
                         }
                     }
                     echo $html;
                     \Db::disconnect();
                     exit;
                 }
                 break;
             case 'login':
                 if ($parametersMod->getValue('community', 'user', 'options', 'login_type') == 'login') {
                     $tmpUser = Db::userByLogin($_POST['login']);
                 } else {
                     $tmpUser = Db::userByEmail($_POST['email']);
                 }
                 if ($parametersMod->getValue('community', 'user', 'options', 'encrypt_passwords')) {
                     $tmp_password = md5($_POST['password'] . \Modules\community\user\Config::$hashSalt);
                 } else {
                     $tmp_password = $_POST['password'];
                 }
                 if ($tmpUser && isset($_POST['password']) && $tmp_password == $tmpUser['password']) {
                     $this->login($tmpUser);
                     if ($parametersMod->getValue('community', 'user', 'options', 'enable_autologin') && isset($_POST['autologin']) && $_POST['autologin']) {
                         setCookie(Config::$autologinCookieName, json_encode(array('id' => $tmpUser['id'], 'pass' => md5($tmpUser['password'] . $tmpUser['created_on']))), time() + $parametersMod->getValue('community', 'user', 'options', 'autologin_time') * 60 * 60 * 24, Config::$autologinCookiePath, Config::getCookieDomain());
                     }
                     $html = $this->redirectAfterLogin();
                 } else {
                     $standardForm = new \Library\Php\Form\Standard(\Modules\community\user\Config::getRegistrationFields());
                     $errors = array();
                     $globalError = null;
                     $site->dispatchEvent('community', 'user', 'incorrect_login', array('post' => $_POST));
                     if ($parametersMod->getValue('community', 'user', 'options', 'login_type') == 'login') {
                         $globalError = $parametersMod->getValue('community', 'user', 'errors', 'incorrect_login_data');
                         $errors['login'] = '';
                     } else {
                         $globalError = $parametersMod->getValue('community', 'user', 'errors', 'incorrect_email_data');
                         $errors['email'] = '';
                     }
                     $errors['password'] = '';
                     $log->log('community/user', 'incorrect frontend login', $_SERVER['REMOTE_ADDR']);
                     $html = $standardForm->generateErrorAnswer($errors, $globalError);
                 }
                 echo $html;
                 \Db::disconnect();
                 exit;
                 break;
             case 'registration_verification':
                 $current = Db::userById($_REQUEST['id']);
                 if ($current) {
                     $sameEmailUser = Db::userByEmail($current['email']);
                     $sameLoginUser = Db::userByLogin($current['login']);
                     if ($current['verification_code'] == $_REQUEST['code']) {
                         if ($sameEmailUser && $sameEmailUser['id'] != $current['id']) {
                             header("location: " . $site->generateUrl(null, $userZone->getName(), array(Config::$urlVerificationErrorEmailExist)));
                         } elseif ($parametersMod->getValue('community', 'user', 'options', 'login_type') == 'login' && $sameLoginUser && $sameLoginUser != $current['id']) {
                             header("location: " . $site->generateUrl(null, $userZone->getName(), array(Config::$urlVerificationErrorUserExist)));
                         } else {
                             Db::verify($current['id']);
                             $site->dispatchEvent('community', 'user', 'registration_verification', array('user_id' => $current['id']));
                             if ($parametersMod->getValue('community', 'user', 'options', 'autologin_after_registration')) {
                                 $this->login($current);
                                 $this->redirectAfterLoginHeader();
                             } else {
                                 header("location: " . $site->generateUrl(null, $userZone->getName(), array(Config::$urlRegistrationVerified)));
                             }
                         }
                     } else {
                         header("location: " . $site->generateUrl(null, $userZone->getName(), array(Config::$urlRegistrationVerificationError)));
                     }
                 } else {
                     header("location: " . $site->generateUrl(null, $userZone->getName(), array(Config::$urlRegistrationVerificationError)));
                 }
                 \Db::disconnect();
                 exit;
                 break;
             case 'new_email_verification':
                 $sameEmailUser = Db::userById($_REQUEST['id']);
                 if ($sameEmailUser) {
                     if ($sameEmailUser['verification_code'] == $_REQUEST['code']) {
                         $user_with_new_email = Db::userByEmail($sameEmailUser['new_email']);
                         if ($user_with_new_email) {
                             if ($user_with_new_email['id'] == $sameEmailUser['id']) {
                                 header("location: " . $site->generateUrl(null, $userZone->getName(), array(Config::$urlRegistrationVerified)));
                             } else {
                                 header("location: " . $site->generateUrl(null, $userZone->getName(), array(Config::$urlNewEmailVerificationError)));
                             }
                         } else {
                             if ($sameEmailUser['new_email'] == '') {
                                 header("location: " . $site->generateUrl(null, $userZone->getName(), array(Config::$urlRegistrationVerified)));
                             } else {
                                 Db::verifyNewEmail($sameEmailUser['id']);
                                 $site->dispatchEvent('community', 'user', 'new_email_verification', array('user_id' => $sameEmailUser['id']));
                                 header("location: " . $site->generateUrl(null, $userZone->getName(), array(Config::$urlNewEmailVerified)));
                             }
                         }
                     } else {
                         header("location: " . $site->generateUrl(null, $userZone->getName(), array(Config::$urlNewEmailVerificationError)));
                     }
                 } else {
                     header("location: " . $site->generateUrl(null, $userZone->getName(), array(Config::$urlNewEmailVerificationError)));
                 }
                 \Db::disconnect();
                 exit;
                 break;
             case 'logout':
                 if ($session->loggedIn()) {
                     $site->dispatchEvent('community', 'user', 'logout', array('user_id' => $session->userId()));
                 }
                 $session->logout();
                 if ($parametersMod->getValue('community', 'user', 'options', 'enable_autologin')) {
                     setCookie(Config::$autologinCookieName, '', time() - 60, Config::$autologinCookiePath, Config::getCookieDomain());
                 }
                 header('location: ' . BASE_URL);
                 \Db::disconnect();
                 exit;
                 break;
             case 'renew_registration':
                 if (isset($_GET['id'])) {
                     if (Db::renewRegistration($_GET['id']) == 1) {
                         $site->dispatchEvent('community', 'user', 'renew_registration', array('user_id' => $_GET['id']));
                         header('location: ' . $site->generateUrl(null, $userZone->getName(), array(Config::$urlRenewedRegistration)));
                     } else {
                         header('location: ' . $site->generateUrl(null, $userZone->getName(), array(Config::$urlRenewRegistrationError)));
                     }
                 } else {
                     header('location: ' . $site->generateUrl(null, $userZone->getName(), array(Config::$urlRenewRegistrationError)));
                 }
                 \Db::disconnect();
                 exit;
                 break;
         }
     }
 }