/* * This file is a part of Winix * and is not publicly distributed * * Copyright (c) 2008-2012, Tomasz Sowa * All rights reserved. * */ #include "notify.h" #include "templates/templates.h" #include "core/request.h" #include "core/config.h" #include "core/users.h" #include "core/dirs.h" #include "core/plugin.h" Notify::Notify() { } void Notify::SetCur(Cur * pcur) { cur = pcur; } void Notify::SetConfig(Config * pconfig) { config = pconfig; } void Notify::SetUsers(Users * pusers) { users = pusers; } void Notify::SetDirs(Dirs * pdirs) { dirs = pdirs; } void Notify::SetThreadManager(ThreadManager * pmanager) { thread_manager = pmanager; } void Notify::Init() { notify_thread.SetConfig(config); notify_thread.SetUsers(users); notify_thread.SetNotifyPool(¬ify_pool); notify_thread.SetPatterns(&patterns); thread_manager->Add(¬ify_thread); patterns.SetUTF8(config->utf8); patterns.SetDirectories(config->txt_templates_dir, config->txt_templates_dir_default); patterns.SetLocale(&TemplatesFunctions::locale); patterns.SetLocaleFilter(&TemplatesFunctions::locale_filter); notify_template_cms = AddTemplate(L"notify_email_cms.txt"); notify_template_activate_account = AddTemplate(L"notify_confirm_account.txt"); notify_template_reset_password = AddTemplate(L"notify_reset_password.txt"); plugin.Call((Session*)0, WINIX_NOTIFY_ADD_TEMPLATE); } void Notify::ReadTemplates() { patterns.Reload(); notify_thread.PatternsChanged(); } void Notify::ItemChanged(int notify_code, const Item & item) { if( notify_code == 0 ) return; msg.Clear(); msg.code = notify_code; msg.template_index = notify_template_cms; CreateItemLink(item, msg.item_link, msg.dir_link); ItemChanged(msg); } // raw form void Notify::ItemChanged(const NotifyMsg & msg) { notify_pool.Add(msg); notify_thread.WakeUpThread(); // we are in the first locked thread } void Notify::ActivateAccount(const std::wstring & name, const std::wstring & email, long code) { msg.Clear(); msg.code = WINIX_NOTIFY_CODE_CONFIRM_ACCOUNT; msg.name = name; msg.email = email; msg.lang = 0; // !! IMPROVE ME a better language can be chose msg.activate_code = code; msg.template_index = notify_template_activate_account; CreateActivateLink(name, code, msg.item_link); notify_pool.Add(msg); notify_thread.WakeUpThread(); // we are in the first locked thread } void Notify::ResetPassword(const std::wstring & name, const std::wstring & email, long code) { msg.Clear(); msg.code = WINIX_NOTIFY_CODE_RESET_PASSWORD; msg.name = name; msg.email = email; msg.lang = 0; // !! IMPROVE ME a better language can be chose msg.activate_code = code; msg.template_index = notify_template_reset_password; CreateResetPasswordLink(name, code, msg.item_link); notify_pool.Add(msg); notify_thread.WakeUpThread(); // we are in the first locked thread } size_t Notify::AddTemplate(const std::wstring & file_name) { return patterns.Add(file_name, false); } void Notify::CreateItemLink(const Item & item, std::wstring & item_link, std::wstring & dir_link) { tmp_path.clear(); if( item.type == Item::dir ) { dirs->MakePath(item.id, tmp_path); item_link = config->url_proto; item_link += config->base_url; // !! IMPROVE ME what about subdomains? item_link += tmp_path; dir_link = item_link; } else { dirs->MakePath(item.parent_id, tmp_path); item_link = config->url_proto; item_link += config->base_url; // !! IMPROVE ME what about subdomains? item_link += tmp_path; dir_link = item_link; item_link += item.url; } } void Notify::CreateActivateLink(const std::wstring & name, long code, std::wstring & link) { wchar_t buff[50]; link = config->url_proto; link += config->base_url;// !! IMPROVE ME what about subdomains? link += L"/pw/activate/login:"; UrlEncode(name, link, false); link += L"/code:"; Toa(code, buff, sizeof(buff)/sizeof(wchar_t)); link += buff; } void Notify::CreateResetPasswordLink(const std::wstring & name, long code, std::wstring & link) { wchar_t buff[50]; link = config->url_proto; link += config->base_url;// !! IMPROVE ME what about subdomains? link += L"/pw/resetpassword/login:"; UrlEncode(name, link, false); link += L"/code:"; Toa(code, buff, sizeof(buff)/sizeof(wchar_t)); link += buff; }