/** * A felhasználó képét tölti fel a szerverre, és készít egy kisebb méretű képet is. * * Ez a metódus kettő XHR kérést dolgoz fel. * Meghívásakor kap egy id nevű paramétert melynek értékei upload vagy crop * upload paraméterrel meghívva: feltölti a kiválasztott képet * crop paraméterrel meghívva: megvágja az eredeti képet és feltölti */ public function client_img_upload() { if ($this->request->is_ajax()) { // feltöltés helye $upload_path = Config::get('clientphoto.upload_path'); if ($this->request->has_params('upload')) { //képkezelő objektum létrehozása (a kép a szerveren a tmp könyvtárba kerül) $image = new Uploader($this->request->getFiles('img')); $tempfilename = 'temp_' . uniqid(); $width = Config::get('clientphoto.width', 150); $image->allowed(array('image/*')); $image->resize($width, null); $image->save($upload_path, $tempfilename); if ($image->checkError()) { $this->response->json(array("status" => 'error', "message" => $image->getError())); } else { $this->response->json(array("status" => 'success', "url" => $upload_path . $image->getDest('filename'), "width" => $image->getDest('width'), "height" => $image->getDest('height'))); } } else { if ($this->request->has_params('crop')) { // a croppic js küldi ezeket a POST adatokat $imgUrl = $this->request->get_post('imgUrl'); // original sizes $imgInitW = $this->request->get_post('imgInitW'); $imgInitH = $this->request->get_post('imgInitH'); // resized sizes //kerekítjük az értéket, mert lebegőpotos számot is kaphatunk és ez hibát okozna a kép generálásakor $imgW = round($this->request->get_post('imgW')); $imgH = round($this->request->get_post('imgH')); // offsets // megadja, hogy mennyit kell vágni a kép felső oldalából $top_crop = $this->request->get_post('imgY1'); // megadja, hogy mennyit kell vágni a kép bal oldalából $left_crop = $this->request->get_post('imgX1'); // crop box $cropW = $this->request->get_post('cropW'); $cropH = $this->request->get_post('cropH'); // rotation angle //$angle = $this->request->get_post('rotation']; //a $right_crop megadja, hogy mennyit kell vágni a kép jobb oldalából $right_crop = $imgW - $left_crop - $cropW; //a $bottom_crop megadja, hogy mennyit kell vágni a kép aljából $bottom_crop = $imgH - $top_crop - $cropH; //képkezelő objektum létrehozása (a feltöltött kép elérése a paraméter) $image = new Uploader($imgUrl); $newfilename = 'client_' . md5(uniqid()); $image->resize($imgW, null); $image->crop(array($top_crop, $right_crop, $bottom_crop, $left_crop)); $image->save($upload_path, $newfilename); if ($image->checkError()) { $this->response->json(array("status" => 'error', "message" => $image->getError())); } else { // temp kép törlése DI::get('file_helper')->delete($imgUrl); $this->response->json(array("status" => 'success', "url" => $upload_path . $image->getDest('filename'))); } } } } //is_ajax }
/** * Kép feltöltés */ private function _uploadPicture($files_array) { $upload_path = Config::get('blogphoto.upload_path'); $width = Config::get('blogphoto.width', 600); $height = Config::get('blogphoto.height', 400); $image = new Uploader($files_array); // új filenév $newfilename = 'blog_' . md5(uniqid()); // nagy kép $image->allowed(array('image/*')); $image->cropToSize($width, $height); $image->save($upload_path, $newfilename); $filename = $image->getDest('filename'); if ($image->checkError()) { Message::set('error', $image->getError()); return false; } else { // nézőkép $thumb_width = Config::get('blogphoto.thumb_width', 150); $thumb_height = $image->calcHeight($thumb_width); $image->cropToSize($thumb_width, $thumb_height); $image->save($upload_path, $newfilename . '_thumb'); } $image->cleanTemp(); // kép neve return $filename; }
/** * sends an email to the provided email address * * @param string $user_name felhasznalo neve * @param int $user_id user's id * @param string $user_email user's email * @param string $user_activation_hash user's mail verification hash string * @return boolean */ private function _sendVerificationEmail($user_name, $user_id, $user_email, $user_activation_hash) { // Email kezelő osztály behívása include LIBS . '/simple_mail_class.php'; $subject = Config::get('email.verification.subject'); $link = Config::get('email.verification.link'); $html = '<html><body><h3>Kedves ' . $user_name . '!</h3><p>A ' . $user_email . ' e-mail címmel regisztráltál a ---. Regisztrációd megtörtént, de jelenleg passzív.</p><a href="' . BASE_URL . 'regisztracio/' . $user_id . '/' . $user_activation_hash . '">' . $link . '</a><p>Az aktiválást követően a ----- oldalára jutsz, ahol bejelentkezhetsz a felhasználó neveddel és jelszavaddal. Annak érdekében, hogy segíthessünk a számodra leginkább megfelelő munka megtalálásában, töltsd ki a felhasználói profilodat. </p><p>Üdvözlettel:<br>A Multijob Diákszövetkezet csapata</p></body></html>'; $from_email = Config::get('email.from_email'); $from_name = Config::get('email.from_name'); // Létrehozzuk a SimpleMail objektumot $mail = new \System\Libs\SimpleMail(); $mail->setTo($user_email, $user_name)->setSubject($subject)->setFrom($from_email, $from_name)->addMailHeader('Reply-To', '*****@*****.**', 'Mail Bot')->addGenericHeader('MIME-Version', '1.0')->addGenericHeader('Content-Type', 'text/html; charset="utf-8"')->addGenericHeader('X-Mailer', 'PHP/' . phpversion())->setMessage($html)->setWrap(78); // final sending and check if ($mail->send()) { return true; } else { return false; } }
$settings = Config::get('db'); try { $connect = new \PDO('mysql:host=' . $settings['host'] . ';dbname=' . $settings['name'] . ';charset=utf8', $settings['user'], $settings['pass']); if(ENV == 'development'){ $connect->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); } } catch(\PDOException $e) { die('Database error: ' . $e->getMessage()); } return $connect; }); */ DI::set('uri', function () { return new \System\Libs\Uri(Config::get('language_default'), Config::get('allowed_languages')); }); DI::set('router', function () { return new \System\Libs\Router(); }); DI::set('request', function ($c) { return new \System\Libs\Request($c['uri'], $c['router']); }); DI::set('response', function () { return new \System\Libs\Response(); }); DI::set('auth', function () { return new \System\Libs\Auth(); }); // helpers --------------- DI::set('file_helper', function () {
/** * Kép feltöltés * @param array $files_array - $_FILES['valami'] * @return string */ private function _uploadImage($files_array) { $upload_path = Config::get('photogallery.upload_path'); $photo_width = Config::get('photogallery.width', 800); $photo_height = Config::get('photogallery.height', 600); $image = new Uploader($files_array); $newfilename = md5(uniqid()); $image->allowed(array('image/*')); $image->cropToSize($photo_width, $photo_height); $image->save($upload_path, $newfilename); $dest_filename = $image->getDest('filename'); if ($image->checkError()) { Message::set('error', $image->getError()); return false; } else { $thumb_width = Config::get('photogallery.thumb_width', 320); $thumb_height = Config::get('photogallery.thumb_height', 240); $image->cropToSize($thumb_width, $thumb_height); $image->save($upload_path, $newfilename . '_thumb'); } // visszatér a kép nevével return $dest_filename; }
/** * Adat visszaadása a config-ból * @param string $key * @param mixed $default */ public function getConfig($key, $default = null) { return Config::get($key, $default); }
/** * Felhasználó bejelentkezése * * @param string $username_or_email * @param string $password * @param bool $rememberme * @return bool */ public function login($username_or_email, $password, $rememberme = false) { // beviteli mezők validálás if (empty($username_or_email)) { $this->setError('username_field_empty'); return false; } if (empty($password)) { $this->setError('password_field_empty'); return false; } // user adatainak lekérdezése $this->user = $this->getUserData($username_or_email); // ha nincs ilyen user if (!$this->user) { $this->setError('login_failed'); return false; } // block login attempt if somebody has already failed 3 times and the last login attempt is less than 30sec ago if ($this->user->failed_logins >= 3 and $this->user->last_failed_login > time() - 30) { $this->setError('password_wrong_3_times'); return false; } // ha hibás a jelszó if (!$this->_verifyPassword($password, $this->user->password_hash)) { $this->_registerFailedLogin($username_or_email); return false; } // a user_active mező értékének vizsgálata if (!$this->_isActive($this->user->active)) { $this->setError('Az ön belépési engedélye fel van függesztve!'); return false; } // user login adatok eltárolása session-ben $user_data = array('id' => $this->user->id, 'name' => $this->user->name, 'email' => $this->user->email, 'role_id' => $this->user->role_id, 'photo' => $this->user->photo, 'provider_type' => $this->user->provider_type); Session::init(); Session::set(self::$logged_in, true); Session::set(self::$last_activity, time()); // bejelentkezés, illetve utolsó aktivitás ideje Session::set('user_data', $user_data); // adatok a pdo objektum execute metódusának $data = array(); // Ha a flhasználó bejelölte a "remember me" checkbox-ot, akkor létrehozunk egy cookie-t if ($rememberme) { // generálunk egy 64 karakter hosszú string-et $random_token_string = hash('sha256', mt_rand()); // adat a pdo objektum execute metódusának $data[':rememberme_token'] = $random_token_string; // generate cookie string that consists of user id, random string and combined hash of both $cookie_string_first_part = $this->user->id . ':' . $random_token_string; $cookie_string_hash = hash('sha256', $cookie_string_first_part); $cookie_string = $cookie_string_first_part . ':' . $cookie_string_hash; // cookie beállítása setcookie('rememberme', $cookie_string, time() + Config::get('cookie.runtime'), '/'); // setcookie('rememberme', $cookie_string, time() + Config::get('cookie.runtime'), "/", Config::get('cookie.domain')); } // generate integer-timestamp for saving of last-login date $last_login_timestamp = time(); // adatok a pdo objektum execute metódusának $data[':last_login_timestamp'] = $last_login_timestamp; $data[':id'] = $this->user->id; // sikeres bejelentkezés esetén adatok rögzítése az adatbázisban $this->_registerSuccessLogin($data, $rememberme); return true; }
/** * Slide képet méretezi és tölti fel a szerverre (thumb képet is) * (ez a metódus az update_slide() és add_slide() metódusokban hívódik meg!) * * @param array $files_array - $_FILES['valami'] * @return string (kép elérési útja) vagy false */ private function _uploadPicture($files_array) { // feltöltés helye $upload_path = Config::get('slider.upload_path'); $width = Config::get('slider.width', 1170); $height = Config::get('slider.height', 420); //képkezelő objektum létrehozása (a kép a szerveren a tmp könyvtárba kerül) $image = new \System\Libs\Uploader($files_array); $filename = 'slide_' . md5(uniqid()); $image->cropToSize($width, $height); $image->allowed(array('image/*')); $image->save($upload_path, $filename); $dest_image = $image->getDest('filename'); if ($image->checkError()) { Message::set('error', $image->getError()); return false; } else { // nézőkép $thumb_width = Config::get('slider.thumb_width', 200); $thumb_height = Config::get('slider.thumb_height', 72); $image->cropToSize($thumb_width, $thumb_height); $image->save($upload_path, $filename . '_thumb'); } $image->cleanTemp(); // ha nincs hiba visszadja a feltöltött kép nevét return $dest_image; }
/** * Új jelszó küldése a felhasználónak (elfelejtett jelszó esetén) * - lekérdezi, hogy van-e a $_POST-ban kapott email címmel rendelkező felhasználó * - generál egy 8 karakter hosszú jelszót és egy new_password_hash-t * - az új password hash-t az adatbázisba írja * - elküldi email-ben az új jelszót a felhasználónak * - ha az email küldése sikertelen, visszaírja az adatbázisba a régi password hash-t */ public function forgottenpw_AJAX() { if ($this->request->is_ajax()) { // a felhasználó email címe, amire küldjük az új jelszót $to_email = $this->request->get_post('user_email'); // lekérdezzük, hogy ehhez az email címhez tartozik-e user (lekérdezzük a nevet, és a password hash-t) $result = $this->user_model->getPasswordHash($to_email); // ha nincsen ilyen e-mail címmel regisztrált felhasználó if (empty($result)) { $message = array('status' => 'error', 'message' => 'Nincsen ilyen e-mail címmel regisztrált felhasználó!'); echo json_encode($message); exit; } $to_name = $result[0]['name']; $old_pw = $result[0]['password_hash']; // 8 karakter hosszú új jelszó generálása (str_shuffle összekeveri a stringet, substr levágja az első 8 karaktert) $new_password = substr(str_shuffle('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), 0, 8); $hash_cost_factor = Config::get('hash_cost_factor') !== null ? Config::get('hash_cost_factor') : null; $new_password_hash = password_hash($new_password, PASSWORD_DEFAULT, array('cost' => $hash_cost_factor)); // új jelszó hash beírása az adatbázisba $result = $this->user_model->setNewPassword($to_email, $new_password_hash); // ha hiba történt a adatbázisba íráskor if ($result === false) { $message = array('status' => 'error', 'message' => 'Adatbázis hiba!'); echo json_encode($message); exit; } // email küldés !!!!!!!!!! // settings adatok lekérdezése az adatbázisból $data = $this->user_model->get_settings(); $from_email = $data['email']; $from_name = $data['ceg']; $subject = "Üzenet érkezett a {$from_name} weblaptól"; $msg = <<<_msg <html> <body> <h2>Új jelszó</h2> <div> <p> Az ön új jelszava a {$from_name} weblaphoz. </p> <p> <strong>Az ön új jelszava: </strong> {$new_password} </p> </div> </body> </html> _msg; $result = $this->user_model->send_email($from_email, $from_name, $subject, $msg, $to_email, $to_name); if ($result) { $message = array('status' => 'success', 'message' => 'Új jelszó elküldve!'); echo json_encode($message); exit; } else { // régi password hash visszaírása az adatbázisba $this->user_model->setNewPassword($to_email, $old_pw); $message = array('status' => 'error', 'message' => 'Az új jelszó küldése sikertelen!'); echo json_encode($message); exit; } } else { $this->response->redirect('admin/error'); } }
/** * Hírlevél küldése */ public function send_newsletter() { header('Content-Type: text/event-stream'); // recommended to prevent caching of event data. header('Cache-Control: no-cache'); set_time_limit(0); //ob_implicit_flush(true); // NewsletterStat_model betöltése $this->loadModel('newsletterstat_model'); $newsletter_id = $this->request->get_query('newsletter_id'); //---------------- if (!isset($newsletter_id)) { $this->send_msg('CLOSE', 'Hibas newsletter_id!'); exit; } else { $newsletter_id = (int) $newsletter_id; } // TESZT futtatása (nincs küldés!) if ($this->debug) { $success = 0; $fail = 0; $max = 7; for ($i = 1; $i <= $max; $i++) { $number = rand(1000, 11000); $progress = round($i / $max * 100); //Progress //Hard work!! sleep(1); if ($number > 4000) { $success += 1; $this->send_msg($i, 'Sikeres | id:' . $newsletter_id . '| küldés a ' . $number . '@mail.hu címre', $progress); } else { $fail += 1; $this->send_msg($i, 'Sikertelen | id: ' . $newsletter_id . '| küldés a ' . $number . '@mail.hu címre', $progress); } } sleep(1); // adatok beírása a stats_newsletters táblába $data['sent_date'] = date('Y-m-d-G:i'); $data['newsletter_id'] = $newsletter_id; $data['recepients'] = $success + $fail; $data['send_success'] = $success; $data['send_fail'] = $fail; $this->newsletterstat_model->insertStat($data); //utolsó válasz $this->send_msg('CLOSE', '<br />Sikeres küldések száma: ' . $success . '<br />' . 'Sikertelen küldések száma: ' . $fail . '<br />'); exit; } else { $error = array(); $success = array(); $data['newsletter_id'] = $newsletter_id; $data['sent_date'] = date('Y-m-d-G:i'); $data['error'] = 1; // új rekord a stat_newsletter táblába (visszatér a last_insert_id-vel) $statid = $this->newsletterstat_model->insertStat($data); // statid lekérdezése //$statid = $this->newsletterstat_model->selectStatId(); // elküldendő hírlevél eleminek lekérdezése $newsletter_temp = $this->newsletter_model->selectNewsletter($newsletter_id); // e-mail címek, és hozzájuk tartozó user nevek (akiknek küldeni kell) $users_data = $this->newsletter_model->userEmails(); foreach ($newsletter_temp as $value) { $subject = $value['newsletter_subject']; $body = $value['newsletter_body']; } foreach ($users_data as $value) { $user_emails[] = $value['user_email']; $user_names[] = $value['user_name']; $user_ids[] = $value['user_id']; $user_unsubs[] = $value['user_unsubscribe_code']; } //az összes email_cím száma $all_email_address = count($user_emails); /*----- Email-ek küldése -------*/ // küldés simple mail-el történjen $simple_mail = false; // küldés simple mail-el if ($simple_mail === true) { // Létrehozzuk a SimpleMail objektumot $mail = new \System\Libs\SimpleMail(); //a ciklusok számát fogja számolni (vagyis hogy éppen mennyi emailt küldött el) $progress_counter = 0; foreach ($user_emails as $key => $mail_address) { /* //Since the tracking URL is a bit long, I usually put it in a variable of it's own $tracker = URL . 'track_open/' . $user_ids[$key] . '/' . $statid; //Add the tracker to the message. $message = '<img alt="" src="'.$tracker.'" width="1" height="1" border="0" />'; $unsubscribe_url = URL . 'leiratkozas/' . $user_ids[$key] . '/' . $user_unsubs[$key]; $unsubscribe = '<p>Leiratkozáshoz kattintson a következő linkre: <a href="' . $unsubscribe_url . '">Leiratkozás</a></p>'; */ $progress_counter += 1; //küldés állapota %-ban $progress = round($progress_counter / $all_email_address * 100); $mail->setTo($mail_address, $user_names[$key])->setSubject($subject)->setFrom('*****@*****.**', 'anonymous')->addMailHeader('Reply-To', '*****@*****.**', 'Mail Bot')->addGenericHeader('MIME-Version', '1.0')->addGenericHeader('Content-Type', 'text/html; charset="utf-8"')->addGenericHeader('X-Mailer', 'PHP/' . phpversion())->setMessage('<html><body>' . $body . '</body></html>')->setWrap(78); // final sending and check if ($mail->send()) { $success[] = $mail_address; //üzenet küldése $this->send_msg($progress_counter, 'Sikeres küldés a ' . $mail_address . ' címre', $progress); } else { $error[] = $mail_address; //üzenet küldése $this->send_msg($progress_counter, 'Sikertelen küldés a ' . $mail_address . ' címre', $progress); } $mail->reset(); } } else { // küldés PHPMailer-el $mail = new \PHPMailer(); $settings = Config::get('email.server'); if (true) { //SMTP beállítások!! $mail->isSMTP(); // Set mailer to use SMTP //$mail->SMTPDebug = PHPMAILER_DEBUG_MODE; // Enable verbose debug output $mail->SMTPAuth = $settings['smtp_auth']; // Enable SMTP authentication //$mail->SMTPKeepAlive = true; // SMTP connection will not close after each email sent, reduces SMTP overhead // Specify SMTP host server $mail->Host = $settings['smtp_host']; //$mail->Host = 'localhost'; $mail->Username = $settings['smtp_username']; // SMTP username $mail->Password = $settings['smtp_password']; // SMTP password $mail->Port = $settings['smtp_port']; // TCP port to connect to $mail->SMTPSecure = $settings['smtp_encryption']; // Enable TLS encryption, `ssl` also accepted } else { $mail->IsMail(); } $mail->CharSet = 'UTF-8'; //karakterkódolás beállítása $mail->WordWrap = 78; //sortörés beállítása (a default 0 - vagyis nincs) $mail->From = $settings['from_email']; //feladó e-mail címe $mail->FromName = $settings['from_name']; //feladó neve $mail->addReplyTo('*****@*****.**', 'Information'); //Set an alternative reply-to address $mail->Subject = $subject; // Tárgy megadása $mail->isHTML(true); // Set email format to HTML $mail->Body = '<html><body>' . $body . '</body></html>'; //a ciklusok számát fogja számolni (vagyis hogy éppen mennyi emailt küldött el) $progress_counter = 0; //email-ek elküldés ciklussal foreach ($user_emails as $key => $mail_address) { $progress_counter += 1; //küldés állapota %-ban $progress = round($progress_counter / $all_email_address * 100); $mail->addAddress($mail_address, $user_names[$key]); // Add a recipient (Name is optional) //$mail->addCC('*****@*****.**'); //$mail->addBCC('*****@*****.**'); //$mail->addStringAttachment('image_eleresi_ut_az_adatbazisban', 'YourPhoto.jpg'); //Assumes the image data is stored in the DB //$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments //$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name //$mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; // final sending and check if ($mail->send()) { $success[] = $mail_address; //folyamat alatti válaszüzenet küldése $this->send_msg($progress_counter, 'Sikeres küldés a ' . $mail_address . ' címre', $progress); } else { $error[] = $mail_address; //folyamat alatti válaszüzenet küldése $this->send_msg($progress_counter, 'Sikertelen küldés a ' . $mail_address . ' címre', $progress); } $mail->clearAddresses(); $mail->clearAttachments(); } } // ----- email küldés vége ------------- // ha volt sikeres küldés, adatbázisba írjuk az elküldés dátumát if (count($success) > 0) { // az adatbázisban módosítjuk az utolsó küldés mező tartalmát $lastsent_date = date('Y-m-d-G:i'); $this->newsletter_model->updateLastSentDate($newsletter_id, $lastsent_date); } // adatok beírása a stats_newsletters táblába $data['recepients'] = count($success) + count($error); $data['send_success'] = count($success); $data['send_fail'] = count($error); $data['error'] = 0; // adatok módosítása a newsletter_stats táblában $this->newsletterstat_model->updateStat($newsletter_id, $data); // utolsó válasz $this->send_msg('CLOSE', '<br />Sikeres küldések száma: ' . $data['send_success'] . '<br />' . 'Sikertelen küldések száma: ' . $data['send_fail'] . '<br />'); } // email küldés vége }