initial commit
authorChuck Scott <cscott@gaslightmedia.com>
Mon, 18 May 2015 18:22:24 +0000 (14:22 -0400)
committerChuck Scott <cscott@gaslightmedia.com>
Mon, 18 May 2015 18:22:24 +0000 (14:22 -0400)
125 files changed:
classes/class.bAccessControl.php [new file with mode: 0644]
classes/class.bAdminRegistration.php [new file with mode: 0644]
classes/class.bAjax.php [new file with mode: 0644]
classes/class.bAuth.php [new file with mode: 0644]
classes/class.bAuthPermissionCollection.php [new file with mode: 0644]
classes/class.bCategoryList.php [new file with mode: 0644]
classes/class.bCronJob.php [new file with mode: 0644]
classes/class.bForm.php [new file with mode: 0644]
classes/class.bFrontForm.php [new file with mode: 0644]
classes/class.bFrontRegistration.php [new file with mode: 0644]
classes/class.bInstallation.php [new file with mode: 0644]
classes/class.bLevelForm.php [new file with mode: 0644]
classes/class.bLog.php [new file with mode: 0644]
classes/class.bMemberUtils.php [new file with mode: 0644]
classes/class.bMembers.php [new file with mode: 0644]
classes/class.bMembershipLevel.php [new file with mode: 0644]
classes/class.bMembershipLevelCustom.php [new file with mode: 0644]
classes/class.bMembershipLevelUtils.php [new file with mode: 0644]
classes/class.bMembershipLevels.php [new file with mode: 0644]
classes/class.bMessages.php [new file with mode: 0644]
classes/class.bPermission.php [new file with mode: 0644]
classes/class.bPermissionCollection.php [new file with mode: 0644]
classes/class.bProtection.php [new file with mode: 0644]
classes/class.bProtectionBase.php [new file with mode: 0644]
classes/class.bRegistration.php [new file with mode: 0644]
classes/class.bSession.php [new file with mode: 0644]
classes/class.bSettings.php [new file with mode: 0644]
classes/class.bTransactions.php [new file with mode: 0644]
classes/class.bTransfer.php [new file with mode: 0644]
classes/class.bUtils.php [new file with mode: 0644]
classes/class.miscUtils.php [new file with mode: 0644]
classes/class.simple-wp-membership.php [new file with mode: 0644]
classes/index.html [new file with mode: 0644]
css/index.html [new file with mode: 0644]
css/jquery.tools.dateinput.css [new file with mode: 0644]
css/swpm.addons.listing.css [new file with mode: 0644]
css/swpm.common.css [new file with mode: 0644]
css/validationEngine.jquery.css [new file with mode: 0644]
images/addons/form-shortcode-generator.png [new file with mode: 0644]
images/addons/mailchimp-integration.png [new file with mode: 0644]
images/addons/swpm-custom-messages.png [new file with mode: 0644]
images/addons/swpm-form-builder.png [new file with mode: 0644]
images/addons/swpm-login-redirection.png [new file with mode: 0644]
images/addons/swpm-older-posts-protection.png [new file with mode: 0644]
images/addons/wp-user-import.png [new file with mode: 0644]
images/index.html [new file with mode: 0644]
images/join-now-button-image.gif [new file with mode: 0644]
images/logo.png [new file with mode: 0644]
images/logo2.png [new file with mode: 0644]
images/next.gif [new file with mode: 0644]
images/prev.gif [new file with mode: 0644]
images/restricted-icon.png [new file with mode: 0644]
images/simple-membership-content-protection-usage.png [new file with mode: 0644]
includes/class-swpm-list-table.php [new file with mode: 0644]
index.html [new file with mode: 0644]
ipn/index.html [new file with mode: 0644]
ipn/swpm_handle_pp_ipn.php [new file with mode: 0644]
ipn/swpm_handle_subsc_ipn.php [new file with mode: 0644]
js/index.html [new file with mode: 0644]
js/jquery.tools18.min.js [new file with mode: 0644]
js/jquery.validationEngine-en.js [new file with mode: 0644]
js/jquery.validationEngine.js [new file with mode: 0644]
js/swpm.password-meter.js [new file with mode: 0644]
languages/swpm-da_DA.mo [new file with mode: 0644]
languages/swpm-da_DA.po [new file with mode: 0644]
languages/swpm-de_DE.mo [new file with mode: 0644]
languages/swpm-de_DE.po [new file with mode: 0644]
languages/swpm-es_ES.mo [new file with mode: 0644]
languages/swpm-es_ES.po [new file with mode: 0644]
languages/swpm-fr_FR.mo [new file with mode: 0644]
languages/swpm-fr_FR.po [new file with mode: 0644]
languages/swpm-lt_LT.mo [new file with mode: 0644]
languages/swpm-lt_LT.po [new file with mode: 0644]
languages/swpm-mk_MK.mo [new file with mode: 0644]
languages/swpm-mk_MK.po [new file with mode: 0644]
languages/swpm-nl_NL.mo [new file with mode: 0644]
languages/swpm-nl_NL.po [new file with mode: 0644]
languages/swpm-pl_PL.mo [new file with mode: 0644]
languages/swpm-pl_PL.po [new file with mode: 0644]
languages/swpm-pt_BR.mo [new file with mode: 0644]
languages/swpm-pt_BR.po [new file with mode: 0644]
languages/swpm-ro_RO.mo [new file with mode: 0644]
languages/swpm-ro_RO.po [new file with mode: 0644]
languages/swpm-ru_RU.mo [new file with mode: 0644]
languages/swpm-ru_RU.po [new file with mode: 0644]
languages/swpm-sv_SE.mo [new file with mode: 0644]
languages/swpm-sv_SE.po [new file with mode: 0644]
languages/swpm-tr_TR.mo [new file with mode: 0644]
languages/swpm-tr_TR.po [new file with mode: 0644]
languages/swpm-zh_CN.mo [new file with mode: 0644]
languages/swpm-zh_CN.po [new file with mode: 0644]
languages/swpm-zh_Hans.mo [new file with mode: 0644]
languages/swpm-zh_Hans.po [new file with mode: 0644]
languages/swpm.pot [new file with mode: 0644]
log.txt [new file with mode: 0644]
readme.txt [new file with mode: 0644]
simple-wp-membership.php [new file with mode: 0644]
views/account_delete_warning.php [new file with mode: 0644]
views/add.php [new file with mode: 0644]
views/admin-includes/swpm-payments-list-table.php [new file with mode: 0644]
views/admin_add.php [new file with mode: 0644]
views/admin_add_level.php [new file with mode: 0644]
views/admin_add_ons_page.php [new file with mode: 0644]
views/admin_addon_settings.php [new file with mode: 0644]
views/admin_category_list.php [new file with mode: 0644]
views/admin_edit.php [new file with mode: 0644]
views/admin_edit_level.php [new file with mode: 0644]
views/admin_member_form_common_js.php [new file with mode: 0644]
views/admin_member_form_common_part.php [new file with mode: 0644]
views/admin_members.php [new file with mode: 0644]
views/admin_membership_level_menu.php [new file with mode: 0644]
views/admin_membership_levels.php [new file with mode: 0644]
views/admin_membership_manage.php [new file with mode: 0644]
views/admin_payment_settings.php [new file with mode: 0644]
views/admin_payments_page.php [new file with mode: 0644]
views/admin_settings.php [new file with mode: 0644]
views/admin_tools_settings.php [new file with mode: 0644]
views/edit.php [new file with mode: 0644]
views/forgot_password.php [new file with mode: 0644]
views/index.html [new file with mode: 0644]
views/join_us.php [new file with mode: 0644]
views/loggedin.php [new file with mode: 0644]
views/login.php [new file with mode: 0644]
views/login_widget.php [new file with mode: 0644]
views/login_widget_logged.php [new file with mode: 0644]

diff --git a/classes/class.bAccessControl.php b/classes/class.bAccessControl.php
new file mode 100644 (file)
index 0000000..92c3c8f
--- /dev/null
@@ -0,0 +1,109 @@
+<?php
+class BAccessControl {
+    private $lastError;
+    private $moretags;
+    private static $_this;
+    private function __construct(){
+        $this->lastError = '';
+        $this->moretags  = array();
+    }
+    public static function get_instance(){
+        self::$_this = empty(self::$_this)? new BAccessControl():self::$_this;
+        return self::$_this;
+    }
+
+    public function can_i_read_post($id){
+        $this->lastError = '';
+        global $post;
+        $auth = BAuth::get_instance();
+        $protect_everything = BSettings::get_instance()->get_value('protect-everything');
+        if(!empty($protect_everything)){ 
+            $error_msg = BUtils::_( 'You need to login to view this content. ' ) . BSettings::get_instance()->get_login_link();
+            $this->lastError = apply_filters('swpm_not_logged_in_post_msg', $error_msg);
+            return false;                       
+        }
+        $protected = BProtection::get_instance();
+        if (!$protected->is_protected($id)){ return true;}        
+        if(!$auth->is_logged_in()){
+            $error_msg = BUtils::_( 'You need to login to view this content. ' ) . BSettings::get_instance()->get_login_link();
+            $this->lastError = apply_filters('swpm_not_logged_in_post_msg', $error_msg);
+            return false;            
+        }
+
+        if ($auth->is_expired_account()){
+            $error_msg = '<div class="swpm-account-expired-msg swpm-yellow-box">'.BUtils::_('Your account has expired. Please renew your account to gain access to this content.').'</div>';
+            $this->lastError = apply_filters('swpm_account_expired_msg', $error_msg);
+            return false;                        
+        }
+        $protect_older_posts = apply_filters('swpm_should_protect_older_post', false, $id);
+        if ($protect_older_posts){
+            $this->lastError = apply_filters ('swpm_restricted_post_msg_older_post', 
+                    BUtils::_('This content can only be viewed by members who joined on or before ' . date(get_option( 'date_format' ), strtotime($post->post_date)))) ;
+            return false;
+        }
+        $perms = BPermission::get_instance($auth->get('membership_level'));
+        if($perms->is_permitted($id)) {return true;}
+        $this->lastError = apply_filters ('swpm_restricted_post_msg', '<div class="swpm-no-access-msg">'.BUtils::_('This content is not permitted for your membership level.').'</div>') ;
+        return false;
+    }
+    public function can_i_read_comment($id){
+        $this->lastError = '';
+        $protected = BProtection::get_instance();
+        if (!$protected->is_protected_comment($id)){ return true;}
+        $auth = BAuth::get_instance();
+        if(!$auth->is_logged_in()){
+            $this->lastError = apply_filters('swpm_not_logged_in_comment_msg', BUtils::_("You need to login to view this content. ")
+                    . BSettings::get_instance()->get_login_link());
+            return false;            
+        }
+        if ($auth->is_expired_account()){
+            $error_msg = '<div class="swpm-account-expired-msg swpm-yellow-box">'.BUtils::_('Your account has expired. Please renew your account to gain access to this content.').'</div>';
+            $this->lastError = apply_filters('swpm_account_expired_msg', $error_msg);
+            return false;                        
+        }        
+        $perms = BPermission::get_instance($auth->get('membership_level'));
+        if($perms->is_permitted_comment($id)) {return true; }
+        $this->lastError = apply_filters ('swpm_restricted_comment_msg', '<div class="swpm-no-access-msg">'.BUtils::_("This content is not permitted for your membership level.").'</div>' );
+        return false;
+    }
+    public function why(){
+        return $this->lastError;
+    }
+    public function filter_post($id,$content){
+        if(in_array($id, $this->moretags)) {return $content; }
+        if($this->can_i_read_post($id)) {return $content; } 
+        $moretag = BSettings::get_instance()->get_value('enable-moretag');
+        if (empty($moretag)){
+            return $this->lastError;
+        }
+        $post = get_post($id);
+        $post_segments = explode( '<!--more-->', $post->post_content);
+
+        if (count($post_segments) >= 2){
+            if (BAuth::get_instance()->is_logged_in()){
+                $error_msg = '<div class="swpm-margin-top-10">' . BUtils::_(" The rest of the content is not permitted for your membership level.") . '</div>';
+                $this->lastError = apply_filters ('swpm_restricted_more_tag_msg', $error_msg);
+            }
+            else {
+                $error_msg = '<div class="swpm-margin-top-10">' . BUtils::_("You need to login to view the rest of the content. ") . BSettings::get_instance()->get_login_link() . '</div>';
+                $this->lastError = apply_filters('swpm_not_logged_in_more_tag_msg', $error_msg);
+            }
+
+            return do_shortcode($post_segments[0]) . $this->lastError;
+        }
+
+        return $this->lastError;
+    }
+    public function filter_comment($id,$content){
+        if($this->can_i_read_comment($id)) { return $content; }
+        return $this->lastError;
+    }
+    public function filter_post_with_moretag($id, $more_link, $more_link_text){
+        $this->moretags[] = $id;
+        if($this->can_i_read_post($id)) {
+            return $more_link;
+        }
+        $msg = BUtils::_("You need to login to view the rest of the content. ") . BSettings::get_instance()->get_login_link();
+        return apply_filters('swpm_not_logged_in_more_tag_msg', $msg);
+    }
+}
diff --git a/classes/class.bAdminRegistration.php b/classes/class.bAdminRegistration.php
new file mode 100644 (file)
index 0000000..84f5881
--- /dev/null
@@ -0,0 +1,92 @@
+<?php
+
+/**
+ * Description of BAdminRegistration
+ *
+ */
+class BAdminRegistration extends BRegistration {
+    public static function get_instance(){
+        self::$_intance = empty(self::$_intance)? new BAdminRegistration():self::$_intance;
+        return self::$_intance;
+    }
+    public function show_form() {
+
+    }
+
+    public function register() {
+        global $wpdb;
+        $member = BTransfer::$default_fields;
+        $form = new BForm($member);
+        if ($form->is_valid()) {
+            $member_info = $form->get_sanitized();
+            $account_status = BSettings::get_instance()->get_value('default-account-status', 'active');
+            $member_info['account_state'] = $account_status;
+            $plain_password = $member_info['plain_password'];
+            unset($member_info['plain_password']);
+            $wpdb->insert($wpdb->prefix . "swpm_members_tbl", $member_info);
+            /*             * ******************** register to wordpress ********** */
+            $query = $wpdb->prepare("SELECT role FROM " . $wpdb->prefix . "swpm_membership_tbl WHERE id = %d", $member_info['membership_level']) ;
+            $wp_user_info = array();
+            $wp_user_info['user_nicename'] = implode('-', explode(' ', $member_info['user_name']));
+            $wp_user_info['display_name'] = $member_info['user_name'];
+            $wp_user_info['user_email'] = $member_info['email'];
+            $wp_user_info['nickname'] = $member_info['user_name'];
+            if (isset($member_info['first_name'])){$wp_user_info['first_name'] = $member_info['first_name']; }
+            if (isset($member_info['last_name'])){$wp_user_info['last_name'] = $member_info['last_name'];}
+            $wp_user_info['user_login'] = $member_info['user_name'];
+            $wp_user_info['password'] = $plain_password;
+            $wp_user_info['role'] = $wpdb->get_var($query);
+            $wp_user_info['user_registered'] = date('Y-m-d H:i:s');
+            BUtils::create_wp_user($wp_user_info);
+            /*             * ******************** register to wordpress ********** */
+            $send_notification = BSettings::get_instance()->get_value('enable-notification-after-manual-user-add');
+            $member_info['plain_password'] = $plain_password;
+            $this->member_info = $member_info;
+            if (!empty($send_notification)){
+                $this->send_reg_email();
+            }
+            $message = array('succeeded' => true, 'message' => BUtils::_('Registration Successful.'));
+            BTransfer::get_instance()->set('status', $message);
+            wp_redirect('admin.php?page=simple_wp_membership'); 
+            return;
+        }
+        $message = array('succeeded' => false, 'message' => BUtils::_('Please correct the following:'), 'extra' => $form->get_errors());
+        BTransfer::get_instance()->set('status', $message);
+    }
+    public function edit($id){
+        global $wpdb;
+        $query = $wpdb->prepare("SELECT * FROM " . $wpdb->prefix . "swpm_members_tbl WHERE member_id = %d", $id);
+        $member = $wpdb->get_row($query, ARRAY_A);
+        $email_address = $member['email'];
+        $user_name = $member['user_name'];
+        unset($member['member_id']);
+        unset($member['user_name']);
+        $form = new BForm($member);
+        if ($form->is_valid()) {
+            $member = $form->get_sanitized(); 
+            BUtils::update_wp_user($user_name, $member);
+            unset($member['plain_password']);
+            $wpdb->update($wpdb->prefix . "swpm_members_tbl", $member, array('member_id' => $id));
+            $message = array('succeeded' => true, 'message' => 'Updated Successfully.');
+            do_action('swpm_admin_edit_custom_fields', $member + array('member_id'=>$id));
+            BTransfer::get_instance()->set('status', $message);
+            $send_notification = filter_input(INPUT_POST, 'account_status_change');
+            if (!empty($send_notification)){
+                $settings = BSettings::get_instance();
+                $from_address = $settings->get_value('email-from');
+                $headers = 'From: ' . $from_address . "\r\n";
+                $subject = filter_input(INPUT_POST,'notificationmailhead');
+                $body = filter_input(INPUT_POST, 'notificationmailbody');
+                $settings->set_value('account-change-email-body', $body)->set_value('account-change-email-subject', $subject)->save();                
+                $member['login_link'] = $settings->get_value('login-page-url');
+                $values = array_values($member);
+                $keys = array_map('swpm_enclose_var', array_keys($member));
+                $body = str_replace($keys, $values, $body);                
+                wp_mail($email_address, $subject, $body, $headers);                
+            }
+            wp_redirect('admin.php?page=simple_wp_membership');
+        }               
+        $message = array('succeeded' => false, 'message' => BUtils::_('Please correct the following:'), 'extra' => $form->get_errors());
+        BTransfer::get_instance()->set('status', $message);
+    }
+}
diff --git a/classes/class.bAjax.php b/classes/class.bAjax.php
new file mode 100644 (file)
index 0000000..7a48d9e
--- /dev/null
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Description of BAjax
+ *
+ * @author nur
+ */
+class BAjax {
+    public static function validate_email_ajax() {
+        global $wpdb;
+        $field_value = filter_input(INPUT_GET, 'fieldValue');
+        $field_id = filter_input(INPUT_GET, 'fieldId');
+        $member_id = filter_input(INPUT_GET, 'member_id');
+        if (!is_email($field_value)){
+            echo '[ "' . $field_id .  '",false, "'.BUtils::_('Invalid Email Address').'" ]' ;
+            exit;            
+        }
+        $table = $wpdb->prefix . "swpm_members_tbl";
+        $query = $wpdb->prepare("SELECT member_id FROM $table WHERE email = %s", $field_value);
+        $db_id = $wpdb->get_var($query) ;
+        $exists = ($db_id > 0) && $db_id != $member_id;
+        echo '[ "' . $field_id . (($exists) ? '",false, "&chi;&nbsp;'.BUtils::_('Aready taken').'"]' : '",true, "&radic;&nbsp;Available"]');
+        exit;
+    }
+
+    public static function validate_user_name_ajax() {
+        global $wpdb;
+        $field_value = filter_input(INPUT_GET, 'fieldValue');
+        $field_id = filter_input(INPUT_GET, 'fieldId');
+        $table = $wpdb->prefix . "swpm_members_tbl";
+        $query = $wpdb->prepare("SELECT COUNT(*) FROM $table WHERE user_name = %s", $field_value);
+        $exists = $wpdb->get_var($query) > 0;
+        echo '[ "' . $field_id . (($exists) ? '",false,"&chi;&nbsp;'. BUtils::_('Aready taken'). '"]' :
+            '",true,"&radic;&nbsp;'.BUtils::_('Available'). '"]');
+        exit;
+    }
+}
diff --git a/classes/class.bAuth.php b/classes/class.bAuth.php
new file mode 100644 (file)
index 0000000..1b4eaf0
--- /dev/null
@@ -0,0 +1,291 @@
+<?php
+
+class BAuth {
+
+    public $protected;
+    public $permitted;
+    private $isLoggedIn;
+    private $lastStatusMsg;
+    private static $_this;
+    public $userData;
+
+    private function __construct() {
+        $this->isLoggedIn = false;
+        $this->userData = null;
+        $this->protected = BProtection::get_instance();
+    }
+    private function init(){
+        $valid = $this->validate();
+        //Blog::log_simple_debug("init:". ($valid? "valid": "invalid"), true);
+        if (!$valid){
+            $this->authenticate();
+        }
+    }
+    public static function get_instance() {
+        if (empty(self::$_this)){
+            self::$_this = new BAuth();
+            self::$_this->init();
+        }
+        return self::$_this;
+    }
+
+    private function authenticate($user = null, $pass = null) {
+        global $wpdb;
+        $swpm_password = empty($pass)?filter_input(INPUT_POST, 'swpm_password') : $pass;
+        $swpm_user_name = empty($user)? apply_filters('swpm_user_name', filter_input(INPUT_POST, 'swpm_user_name')) : $user;
+        //Blog::log_simple_debug("Authenticate:" . $swpm_user_name, true);
+        if (!empty($swpm_user_name) && !empty($swpm_password)) {
+            $user = sanitize_user($swpm_user_name);
+            $pass = trim($swpm_password);
+            $query = "SELECT * FROM " . $wpdb->prefix . "swpm_members_tbl WHERE user_name = %s";
+            $userData = $wpdb->get_row($wpdb->prepare($query, $user));
+            $this->userData = $userData;
+            if (!$userData) {
+                $this->isLoggedIn = false;
+                $this->userData = null;
+                $this->lastStatusMsg = BUtils::_("User Not Found.");
+                return false;
+            }
+            $check = $this->check_password($pass, $userData->password);
+            if (!$check) {
+                $this->isLoggedIn = false;
+                $this->userData = null;
+                $this->lastStatusMsg = BUtils::_("Password Empty or Invalid.");
+                return false;
+            }
+            if ($this->check_constraints()) {
+                $rememberme = filter_input(INPUT_POST, 'rememberme');
+                $remember = empty($rememberme) ? false : true;
+                $this->set_cookie($remember);
+                $this->isLoggedIn = true;
+                $this->lastStatusMsg = "Logged In.";
+                Blog::log_simple_debug("swpm_login action.", true);
+                do_action('swpm_login', $user, $pass, $remember);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private function check_constraints() {
+        if (empty($this->userData)){
+            return false;
+        }
+        $enable_expired_login = BSettings::get_instance()->get_value('enable-expired-account-login', '');
+        
+        $can_login = true;
+        if( $this->userData->account_state == 'inactive'){
+            $this->lastStatusMsg = BUtils::_('Account is inactive.');
+            $can_login = false;
+        }
+        else if( $this->userData->account_state == 'pending'){
+            $this->lastStatusMsg = BUtils::_('Account is pending.');
+            $can_login = false;
+        }        
+        else if( ($this->userData->account_state == 'expired') && empty($enable_expired_login)  ){
+            $this->lastStatusMsg = BUtils::_('Account has expired.');
+            $can_login = false;
+        }        
+
+        if(!$can_login){
+            $this->isLoggedIn = false;
+            $this->userData = null;
+            return false;            
+        }
+        
+        if (BUtils::is_subscription_expired($this->userData)){
+            if ($this->userData->account_state == 'active'){
+                global $wpdb;
+                $wpdb->update( 
+                    $wpdb->prefix . 'swpm_members_tbl', 
+                    array( 'account_state' => 'expired'), 
+                    array( 'member_id' => $this->userData->member_id ), 
+                    array( '%s'), 
+                    array( '%d' ) 
+                );
+            }
+            if (empty($enable_expired_login)){
+                $this->lastStatusMsg = BUtils::_('Account has expired.');
+                $this->isLoggedIn = false;
+                $this->userData = null;
+                return false;
+            }
+        }
+        
+        $this->permitted = BPermission::get_instance($this->userData->membership_level);        
+        $this->lastStatusMsg = BUtils::_("You are logged in as:") . $this->userData->user_name;
+        $this->isLoggedIn = true;
+        return true;
+    }
+
+    private function check_password($password, $hash) {
+        global $wp_hasher;
+        if (empty($password)){
+            return false;
+        }
+        if (empty($wp_hasher)) {
+            require_once( ABSPATH . 'wp-includes/class-phpass.php');
+            $wp_hasher = new PasswordHash(8, TRUE);
+        }
+        return $wp_hasher->CheckPassword($password, $hash);
+    }
+    public function match_password($password){
+        if (!$this->is_logged_in()) {return false;} 
+        return $this->check_password($password, $this->get('password'));
+    }
+    public function login($user, $pass, $remember = '', $secure = '') {
+        Blog::log_simple_debug("login",true);
+        if ($this->isLoggedIn){
+            return;
+        }
+        if ($this->authenticate($user, $pass) && $this->validate()) {
+            $this->set_cookie($remember, $secure); 
+        } else {
+            $this->isLoggedIn = false;
+            $this->userData = null;
+        }
+        return $this->lastStatusMsg;
+    }
+
+    public function logout() {
+        if (!$this->isLoggedIn){
+            return;
+        }
+        setcookie(SIMPLE_WP_MEMBERSHIP_AUTH, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN);
+        setcookie(SIMPLE_WP_MEMBERSHIP_SEC_AUTH, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN);
+        $this->userData = null;
+        $this->isLoggedIn = false;
+        $this->lastStatusMsg = BUtils::_("Logged Out Successfully.");
+        do_action('swpm_logout');
+    }
+
+    private function set_cookie($remember = '', $secure = '') {
+        if ($remember){
+            $expiration = time() + 1209600; // 14 days
+            $expire = $expiration  + 43200; // 12 hours grace period 
+        }
+        else{
+            $expiration = time() + 172800; // 2 days.
+            $expire = $expiration;//The minimum cookie expiration should be at least couple of days.
+        }
+        
+        $expiration_timestamp = BUtils::get_expiration_timestamp($this->userData);
+        $enable_expired_login = BSettings::get_instance()->get_value('enable-expired-account-login', '');
+        // make sure cookie doesn't live beyond account expiration date.
+        // but if expired account login is enabled then ignore if account is expired
+        $expiration = empty($enable_expired_login)? min ($expiration,$expiration_timestamp) : $expiration;
+        $pass_frag = substr($this->userData->password, 8, 4);
+        $scheme = 'auth';
+        if (!$secure){
+            $secure = is_ssl();
+        }
+        $key = BAuth::b_hash($this->userData->user_name . $pass_frag . '|' . $expiration, $scheme);
+        $hash = hash_hmac('md5', $this->userData->user_name . '|' . $expiration, $key);
+        $auth_cookie = $this->userData->user_name . '|' . $expiration . '|' . $hash;
+        $auth_cookie_name = $secure ? SIMPLE_WP_MEMBERSHIP_SEC_AUTH : SIMPLE_WP_MEMBERSHIP_AUTH;
+        //setcookie($auth_cookie_name, $auth_cookie, $expire, PLUGINS_COOKIE_PATH, COOKIE_DOMAIN, $secure, true);
+        setcookie($auth_cookie_name, $auth_cookie, $expire, COOKIEPATH, COOKIE_DOMAIN, $secure, true);
+    }
+
+    private function validate() {
+        $auth_cookie_name = is_ssl() ? SIMPLE_WP_MEMBERSHIP_SEC_AUTH : SIMPLE_WP_MEMBERSHIP_AUTH;
+        if (!isset($_COOKIE[$auth_cookie_name]) || empty($_COOKIE[$auth_cookie_name])){
+            return false;
+        }
+        $cookie_elements = explode('|', $_COOKIE[$auth_cookie_name]);
+        if (count($cookie_elements) != 3){
+            return false;
+        }
+        Blog::log_simple_debug("validate:" . $_COOKIE[$auth_cookie_name],true);
+        list($username, $expiration, $hmac) = $cookie_elements;
+        $expired = $expiration;
+        // Allow a grace period for POST and AJAX requests
+        if (defined('DOING_AJAX') || 'POST' == $_SERVER['REQUEST_METHOD']){
+            $expired += HOUR_IN_SECONDS;
+        }
+        // Quick check to see if an honest cookie has expired
+        if ($expired < time()) {
+            $this->lastStatusMsg = BUtils::_("Session Expired."); //do_action('auth_cookie_expired', $cookie_elements);
+            return false;
+        }
+        Blog::log_simple_debug("validate:Session Expired",true);
+        global $wpdb;
+        $query = " SELECT * FROM " . $wpdb->prefix . "swpm_members_tbl WHERE user_name = %s";
+        $user = $wpdb->get_row($wpdb->prepare($query, $username));
+        if (empty($user)) {
+            $this->lastStatusMsg = BUtils::_("Invalid User Name");
+            return false;
+        }
+        Blog::log_simple_debug("validate:Invalid User Name:" . serialize($user),true);
+        $pass_frag = substr($user->password, 8, 4);
+        $key = BAuth::b_hash($username . $pass_frag . '|' . $expiration);
+        $hash = hash_hmac('md5', $username . '|' . $expiration, $key);
+        if ($hmac != $hash) {
+            $this->lastStatusMsg = BUtils::_("Sorry! Something went wrong");
+            return false;
+        }
+        Blog::log_simple_debug("validate:bad hash",true);
+        if ($expiration < time()){
+            $GLOBALS['login_grace_period'] = 1;
+        }
+        $this->userData = $user;
+        return $this->check_constraints();
+    }
+
+    public static function b_hash($data, $scheme = 'auth') {
+        $salt = wp_salt($scheme) . 'j4H!B3TA,J4nIn4.';
+        return hash_hmac('md5', $data, $salt);
+    }
+
+    public function is_logged_in() {
+        return $this->isLoggedIn;
+    }
+
+    public function get($key, $default = "") {
+        if (isset($this->userData->$key)){
+            return $this->userData->$key;
+        }
+        if (isset($this->permitted->$key)){
+            return $this->permitted->$key;
+        }
+        if (!empty($this->permitted)){
+            return $this->permitted->get($key, $default);
+        }
+        return $default;
+    }
+
+    public function get_message() {
+        return $this->lastStatusMsg;
+    }
+    public function get_expire_date(){
+        if ($this->isLoggedIn){
+            return BUtils::get_expire_date(
+                    $this->get('subscription_starts'),
+                    $this->get('subscription_period'),
+                    $this->get('subscription_duration_type'));
+        }
+        return "";
+    }
+    public function delete(){
+        if (!$this->is_logged_in()) {return ;}
+        $user_name = $this->get('user_name');
+        $user_id   = $this->get('member_id');
+        wp_clear_auth_cookie();
+        $this->logout();        
+        BMembers::delete_swpm_user_by_id($user_id);
+        BMembers::delete_wp_user($user_name);
+    }
+    
+    public function reload_user_data(){
+        if (!$this->is_logged_in()) {return ;}
+        global $wpdb;
+        $query = "SELECT * FROM " . $wpdb->prefix . "swpm_members_tbl WHERE member_id = %d";
+        $this->userData = $wpdb->get_row($wpdb->prepare($query, $this->userData->member_id));        
+        
+    }
+    public function is_expired_account(){
+        // should be called after logging in.        
+        if (!$this->is_logged_in()) {return null;}
+        return $this->get('account_state') === 'expired';
+    }
+}
diff --git a/classes/class.bAuthPermissionCollection.php b/classes/class.bAuthPermissionCollection.php
new file mode 100644 (file)
index 0000000..803c1a4
--- /dev/null
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Description of BAuthPermissionCollection
+ *
+ * @author nur
+ */
+class BAuthPermissionCollection extends BPermissionCollection{
+//put your code here
+}
diff --git a/classes/class.bCategoryList.php b/classes/class.bCategoryList.php
new file mode 100644 (file)
index 0000000..eca53dd
--- /dev/null
@@ -0,0 +1,108 @@
+<?php
+
+/**
+ * BCategoryList
+ *
+ * @author nur
+ */
+if (!class_exists('WP_List_Table')) {
+    require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
+}
+
+class BCategoryList extends WP_List_Table {
+
+    public $selected_level_id = 1;
+    public $category;
+
+    function __construct() {
+        parent::__construct(array(
+            'singular' => BUtils::_('Membership Level'),
+            'plural' => BUtils::_('Membership Levels'),
+            'ajax' => false
+        ));
+        $this->category = array();
+        $selected = filter_input(INPUT_POST, 'membership_level_id');
+        $this->selected_level_id = empty($selected) ? 1 : $selected;
+        $this->category = ($this->selected_level_id == 1) ?
+                BProtection::get_instance() :
+                BPermission::get_instance($this->selected_level_id);
+    }
+
+    function get_columns() {
+        return array(
+            'cb' => '<input type="checkbox" />'
+            , 'term_id' => BUtils::_('ID')
+            , 'name' => BUtils::_('Name')
+            , 'description' => BUtils::_('Description')
+            , 'count' => BUtils::_('Count')
+        );
+    }
+
+    function get_sortable_columns() {
+        return array(
+            'name' => array('name', true)
+        );
+    }
+
+    function column_default($item, $column_name) {
+        return stripslashes($item->$column_name);
+    }
+
+    function column_term_id($item) {
+        return $item->term_id;
+    }
+
+    function column_cb($item) {
+        return sprintf(
+                '<input type="checkbox" %s name="ids[]" value="%s" />', $this->category->in_categories($item->term_id) ? "checked" : "", $item->term_id
+        );
+    }
+
+    function prepare_items() {
+        $submitted = filter_input(INPUT_POST, 'update_category_list');
+        if (!empty($submitted)) {
+            $args = array('ids' => array(
+                    'filter' => FILTER_VALIDATE_INT,
+                    'flags' => FILTER_REQUIRE_ARRAY,
+            ));
+            $filtered = filter_input_array(INPUT_POST, $args);
+            $ids = $filtered['ids'];
+            $this->category->apply($ids, 'category')->save();
+            $message = array('succeeded' => true, 'message' => BUtils::_('Updated! '));
+            BTransfer::get_instance()->set('status', $message);
+        }
+        $all_categories = array();
+        $all_cat_ids = get_categories(array('hide_empty' => '0'));
+        $totalitems = count($all_cat_ids);
+        $perpage = 100;
+        $paged = !empty($_GET["paged"]) ? mysql_real_escape_string($_GET["paged"]) : '';
+        if (empty($paged) || !is_numeric($paged) || $paged <= 0) {
+            $paged = 1;
+        }
+        $totalpages = ceil($totalitems / $perpage);
+        $offset = 0;
+        if (!empty($paged) && !empty($perpage)) {
+            $offset = ($paged - 1) * $perpage;
+        }
+        for ($i = $offset; $i < ((int) $offset + (int) $perpage) && !empty($all_cat_ids[$i]); $i++) {
+            $all_categories[] = $all_cat_ids[$i];
+        }
+        $this->set_pagination_args(array(
+            "total_items" => $totalitems,
+            "total_pages" => $totalpages,
+            "per_page" => $perpage,
+        ));
+
+        $columns = $this->get_columns();
+        $hidden = array();
+        $sortable = $this->get_sortable_columns();
+
+        $this->_column_headers = array($columns, $hidden, $sortable);
+        $this->items = $all_categories;
+    }
+
+    function no_items() {
+        BUtils::e('No category found.');
+    }
+
+}
diff --git a/classes/class.bCronJob.php b/classes/class.bCronJob.php
new file mode 100644 (file)
index 0000000..7495996
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Description of BCronJob
+ *
+ * @author nur
+ */
+class BCronJob {
+    public function __construct() {
+        add_action('swpm_account_status_event', array(&$this, 'update_account_status'));
+        add_action('swpm_delete_pending_account_event',array(&$this, 'delete_pending_account'));
+    }
+    
+    public function update_account_status(){
+        global $wpdb;
+        for($counter = 0;; $counter += 100){
+            $query = $wpdb->prepare("SELECT member_id, membership_level, subscription_starts, account_state
+                    FROM {$wpdb->prefix}swpm_members_tbl LIMIT %d, 100", $counter);
+            $results = $wpdb->get_results($query);
+            if (empty($results)) {break;}
+            $expired = array();
+            foreach($results as $result){
+                $timestamp = BUtils::get_expiration_timestamp($result);
+                if ($timestamp < time() && $result->account_state == 'active'){
+                    $expired[] = $result->member_id;
+                }
+            }
+            if (count($expired)>0){
+                $query = "UPDATE {$wpdb->prefix}swpm_members_tbl 
+                SET account_state='expired'  WHERE member_id IN (" . implode(',', $expired) . ")";
+                $wpdb->query($query);
+            }
+        }
+    }
+    
+    public function delete_pending_account(){
+        global $wpdb;
+        $interval = BSettings::get_instance()->get_value('delete-pending-account');
+        if (empty($interval)) {return;}
+        for($counter = 0;; $counter += 100){
+            $query = $wpdb->prepare("SELECT member_id
+                                     FROM 
+                                        {$wpdb->prefix}swpm_members_tbl 
+                                    WHERE account_state='pending' 
+                                         AND subscription_starts < DATE_SUB(NOW(), INTERVAL %d MONTH) LIMIT %d, 100", 
+                                    $interval, $counter);
+            $results = $wpdb->get_results($query);
+            if (empty($results)) {break;}
+            $to_delete = array();
+            foreach($results as $result){               
+                    $to_delete[] = $result->member_id;                           
+            }
+            if (count($to_delete)>0){
+                Blog::log_simple_debug("Auto deleting pending account.", true);
+                $query = "DELETE FROM {$wpdb->prefix}swpm_members_tbl 
+                          WHERE member_id IN (" . implode(',', $to_delete) . ")";
+                $wpdb->query($query);
+            }
+        }        
+    }
+}
diff --git a/classes/class.bForm.php b/classes/class.bForm.php
new file mode 100644 (file)
index 0000000..031eeec
--- /dev/null
@@ -0,0 +1,308 @@
+<?php
+
+class BForm {
+
+    protected $fields;
+    protected $op;
+    protected $errors;
+    protected $sanitized;
+
+    public function __construct($fields) {
+        $this->fields = $fields;
+        $this->sanitized = array();
+        $this->validate_wp_user_email();
+        if ($this->is_valid()){
+            foreach ($fields as $key => $value){
+                $this->$key();
+            }
+        }
+    }
+    protected function validate_wp_user_email(){
+        $user_name = filter_input(INPUT_POST, 'user_name',FILTER_SANITIZE_STRING);
+        $email = filter_input(INPUT_POST, 'email', FILTER_UNSAFE_RAW);
+        if (empty($user_name)) {return;}
+        $user = get_user_by('login', $user_name);
+        if ($user && ($user->email != $email)){
+            $this->errors['wp_email'] =  BUtils::_('Wordpress account exists with given user name. But given email doesn\'t match.');
+            return;
+        }
+        $user = get_user_by('email', $email);
+        if($user && ($user_name != $user->login)){
+            $this->errors['wp_user'] =  BUtils::_('Wordpress account exists with given email. But given user name doesn\'t match.');
+
+        }
+    }
+    protected function user_name() {
+        global $wpdb;
+        if (!empty($this->fields['user_name'])){return;}
+        $user_name = filter_input(INPUT_POST, 'user_name',FILTER_SANITIZE_STRING);
+        if (empty($user_name)) {
+            $this->errors['user_name'] = BUtils::_('User name is required');
+            return;
+        }
+        if (preg_match("/^[a-zA-Z0-9!@#$%&*+\/=?^_`{|}~\.-]+$/", $user_name) === 0) {
+            $this->errors['user_name'] = BUtils::_('User name contains invalid character');
+            return;
+        }
+        $saned = sanitize_text_field($user_name);
+        $query = "SELECT count(member_id) FROM {$wpdb->prefix}swpm_members_tbl WHERE user_name= %s";
+        $result = $wpdb->get_var($wpdb->prepare($query, strip_tags($saned)));
+        if ($result > 0) {
+            if ($saned != $this->fields['user_name']) {
+                $this->errors['user_name'] = BUtils::_('User name already exists.');
+                return;
+            }
+        }
+        $this->sanitized['user_name'] = $saned;
+    }
+
+    protected function first_name() {
+        $first_name = filter_input(INPUT_POST, 'first_name', FILTER_SANITIZE_STRING);
+        if (empty($first_name)) {return;}
+        $this->sanitized['first_name'] = sanitize_text_field($first_name);
+    }
+
+    protected function last_name() {
+        $last_name = filter_input(INPUT_POST, 'last_name', FILTER_SANITIZE_STRING);
+        if (empty($last_name)) {return;}
+        $this->sanitized['last_name'] = sanitize_text_field($last_name);
+    }
+
+    protected function password() {
+        $password = filter_input(INPUT_POST, 'password',FILTER_UNSAFE_RAW);
+        $password_re = filter_input(INPUT_POST, 'password_re',FILTER_UNSAFE_RAW);
+        if (empty($this->fields['password']) && empty($password)) {
+            $this->errors['password'] = BUtils::_('Password is required');
+            return;
+        }
+        if (!empty($password)) {
+            $saned = sanitize_text_field($password);
+            $saned_re = sanitize_text_field($password_re);
+            if ($saned != $saned_re){
+                $this->errors['password'] = BUtils::_('Password mismatch');
+            }
+            $this->sanitized['plain_password'] = $password;
+            $this->sanitized['password'] = BUtils::encrypt_password(trim($password)); //should use $saned??;
+        }
+    }
+
+    protected function email() {
+        global $wpdb;
+        $email = filter_input(INPUT_POST, 'email', FILTER_UNSAFE_RAW);
+        if (empty($email)) {
+            $this->errors['email'] = BUtils::_('Email is required');
+            return;
+        }
+        if (!is_email($email)) {
+            $this->errors['email'] = BUtils::_('Email is invalid');
+            return;
+        }
+        $saned = sanitize_email($email);
+        $query = "SELECT count(member_id) FROM {$wpdb->prefix}swpm_members_tbl WHERE email= %s";
+        $member_id = filter_input(INPUT_GET, 'member_id', FILTER_SANITIZE_NUMBER_INT); 
+        if (!empty($member_id)) {
+            $query .= ' AND member_id !=%d';
+            $result = $wpdb->get_var($wpdb->prepare($query, strip_tags($saned), $member_id));
+        }
+        else{            
+            $result = $wpdb->get_var($wpdb->prepare($query, strip_tags($saned)));
+        }
+        
+        if ($result > 0) {
+            if ($saned != $this->fields['email']) {
+                $this->errors['email'] = BUtils::_('Email is already used.');
+                return;
+            }
+        }
+        $this->sanitized['email'] = $saned;
+    }
+
+    protected function phone() {
+        $phone = filter_input(INPUT_POST, 'phone', FILTER_UNSAFE_RAW);
+        if (empty($phone)) {return;}
+        $saned = wp_kses($phone, array());
+        $this->sanitized['phone'] = $saned;        
+        return;
+        //Not doing phone number validation
+        
+//        $saned = wp_kses($phone, array());
+//        $this->sanitized['phone'] = $saned;
+//        if (strlen($saned) > 9 && preg_match('/^((\+)?[1-9]{1,2})?([-\s\.])?((\(\d{1,4}\))|\d{1,4})(([-\s\.])?[0-9]{1,12}){1,2}$/', $saned)){
+//            $this->sanitized['phone'] = $saned;
+//        }
+//        else{
+//            $this->errors['phone'] = BUtils::_('Phone number is invalid');
+//        }
+    }
+
+    protected function address_street() {
+        $address_street = filter_input(INPUT_POST, 'address_street', FILTER_SANITIZE_STRING);
+        if (empty($address_street)) { return;}
+        $this->sanitized['address_street'] = wp_kses($address_street, array());
+    }
+
+    protected function address_city() {
+        $address_city = filter_input(INPUT_POST, 'address_city', FILTER_SANITIZE_STRING);
+        if (empty($address_city)){ return; }
+        $this->sanitized['address_city'] = wp_kses($address_city, array());
+    }
+
+    protected function address_state() {
+        $address_state = filter_input(INPUT_POST, 'address_state', FILTER_SANITIZE_STRING);
+        if (empty($address_state))  {return;}
+        $this->sanitized['address_state'] = wp_kses($address_state, array());
+    }
+
+    protected function address_zipcode() {
+        $address_zipcode = filter_input(INPUT_POST, 'address_zipcode', FILTER_UNSAFE_RAW);
+        if (empty($address_zipcode)){ return;}
+        $this->sanitized['address_zipcode'] = wp_kses($address_zipcode, array());
+    }
+
+    protected function country() {
+        $country = filter_input(INPUT_POST, 'country', FILTER_SANITIZE_STRING);
+        if (empty($country)){ return;}
+        $this->sanitized['country'] = wp_kses($country, array());
+    }
+
+    protected function company_name() {
+        $company_name = filter_input(INPUT_POST, 'company_name', FILTER_SANITIZE_STRING);
+        $this->sanitized['company_name'] = $company_name;
+    }
+
+    protected function member_since() {
+        $member_since = filter_input(INPUT_POST, 'member_since', FILTER_UNSAFE_RAW);
+        if (empty($member_since)) {return;}
+        if (preg_match('/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/', $member_since)){
+            $this->sanitized['member_since'] =  sanitize_text_field($member_since);
+            return;
+        }
+        $this->errors['member_since'] = BUtils::_('Member since field is invalid');
+
+    }
+
+    protected function subscription_starts() {
+        $subscription_starts = filter_input(INPUT_POST, 'subscription_starts', FILTER_SANITIZE_STRING);
+        if(empty($subscription_starts)) {return ;}
+        if (preg_match('/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/', $subscription_starts)){
+            $this->sanitized['subscription_starts'] =  sanitize_text_field($subscription_starts);
+            return;
+        }
+        $this->errors['subscription_starts'] = BUtils::_('Access starts field is invalid');
+    }
+
+    protected function gender() {
+        $gender = filter_input(INPUT_POST, 'gender', FILTER_SANITIZE_STRING);
+        if(empty($gender)) {return;}
+        if (in_array($gender, array('male', 'female', 'not specified'))){
+            $this->sanitized['gender'] = $gender;
+        }
+        else{
+            $this->errors['gender'] = BUtils::_('Gender field is invalid');
+        }
+    }
+
+    protected function account_state() {
+        $account_state = filter_input(INPUT_POST, 'account_state', FILTER_SANITIZE_STRING);
+        if(empty($account_state)) {return;}
+        if (in_array($account_state, array('active', 'pending', 'inactive', 'expired'))){
+            $this->sanitized['account_state'] = $account_state;
+        }
+        else{
+            $this->errors['account_state'] = BUtils::_('Account state field is invalid');
+        }
+    }
+
+    protected function membership_level() {
+        $membership_level = filter_input(INPUT_POST, 'membership_level', FILTER_SANITIZE_NUMBER_INT);
+        if ($membership_level == 1){
+            $this->errors['membership_level'] = BUtils::_('Invalid membership level');
+            return;
+        }
+        
+        if (empty($membership_level)) {return;}
+        $this->sanitized['membership_level'] = $membership_level;
+    }
+
+    protected function password_re() {
+
+    }
+
+    protected function last_accessed() {
+
+    }
+
+    protected function last_accessed_from_ip() {
+
+    }
+
+    protected function referrer() {
+
+    }
+
+    protected function extra_info() {
+
+    }
+
+    protected function reg_code() {
+
+    }
+
+    protected function txn_id() {
+
+    }
+
+    protected function subscr_id() {
+        $subscr_id = filter_input(INPUT_POST, 'subscr_id', FILTER_SANITIZE_STRING);
+        $this->sanitized['subscr_id'] = $subscr_id;
+    }
+
+    protected function flags() {
+
+    }
+
+    protected function more_membership_levels() {
+
+    }
+
+    protected function initial_membership_level() {
+
+    }
+
+    protected function home_page() {
+
+    }
+
+    protected function notes() {
+
+    }
+
+    protected function profile_image() {
+
+    }
+
+    protected function expiry_1st() {
+
+    }
+
+    protected function expiry_2nd() {
+
+    }
+
+    protected function member_id() {
+
+    }
+
+    public function is_valid() {
+        return count($this->errors) < 1;
+    }
+
+    public function get_sanitized() {
+        return $this->sanitized;
+    }
+
+    public function get_errors() {
+        return $this->errors;
+    }
+
+}
diff --git a/classes/class.bFrontForm.php b/classes/class.bFrontForm.php
new file mode 100644 (file)
index 0000000..92adc82
--- /dev/null
@@ -0,0 +1,7 @@
+<?php
+
+class BFrontForm extends BForm{
+       public function membership_level(){
+               
+       }
+}
\ No newline at end of file
diff --git a/classes/class.bFrontRegistration.php b/classes/class.bFrontRegistration.php
new file mode 100644 (file)
index 0000000..833d720
--- /dev/null
@@ -0,0 +1,206 @@
+<?php
+
+/**
+ * Description of BFrontRegistration
+ *
+ * @author nur
+ */
+class BFrontRegistration extends BRegistration {
+    public static function get_instance(){
+        self::$_intance = empty(self::$_intance)? new BFrontRegistration():self::$_intance;
+        return self::$_intance;
+    }
+    public function regigstration_ui($level){
+        $settings_configs = BSettings::get_instance();
+        $joinuspage_url = $settings_configs->get_value('join-us-page-url');
+        $membership_level = '';
+        $member_id = filter_input(INPUT_GET, 'member_id', FILTER_SANITIZE_NUMBER_INT);
+        $code = filter_input(INPUT_GET, 'code', FILTER_SANITIZE_STRING);
+        
+        global $wpdb;        
+        if (BUtils::is_paid_registration()){
+            $member = $member = BUtils::get_paid_member_info();
+            if (empty($member)){
+                BUtils::e('Error! Invalid Request. Could not find a match for the given security code and the user ID.');
+            }
+            $membership_level = $member->membership_level;
+        }
+        else if (!empty($level)) {            
+            $member = BTransfer::$default_fields;
+            $membership_level = absint($level);
+        }
+        if (empty($membership_level)) {
+            $joinuspage_link = '<a href="' . $joinuspage_url . '">Join us</a>';
+            BUtils::e('Free membership is disabled on this site. Please make a payment from the ' . $joinuspage_link . ' page to pay for a premium membership.');
+            return;
+        }
+        $form = apply_filters('swpm_registration_form_override', '', $membership_level);
+        if (!empty($form)) {return $form;}
+        
+        $mebership_info = BPermission::get_instance($membership_level);
+        $membership_level = $mebership_info->get('id');
+        if (empty($membership_level)) {
+            return "Membership Level Not Found.";
+        }
+        $level_identifier = md5($membership_level);
+        $membership_level_alias = $mebership_info->get('alias');
+        $swpm_registration_submit = filter_input(INPUT_POST, 'swpm_registration_submit');
+        if (!empty($swpm_registration_submit)){
+            $member = $_POST;
+        }
+        ob_start();
+        extract((array)$member, EXTR_SKIP);
+        include(SIMPLE_WP_MEMBERSHIP_PATH . 'views/add.php');
+        return ob_get_clean();
+    }
+    public function register() {
+        if($this->create_swpm_user()&&$this->create_wp_user()&&$this->send_reg_email()){
+            do_action('swpm_front_end_registration_complete');
+
+            $login_page_url = BSettings::get_instance()->get_value('login-page-url');
+            $after_rego_msg = '<p>'. BUtils::_('Registration Successful. '). BUtils::_('Please').' <a href="' . $login_page_url . '">'.BUtils::_('Login').'</a></p>';
+            $message = array('succeeded' => true, 'message' => $after_rego_msg);
+            BTransfer::get_instance()->set('status', $message);
+            return;
+        }
+    }
+    private function create_swpm_user(){
+        global $wpdb;
+        $member = BTransfer::$default_fields;
+        $form = new BFrontForm($member);
+        if (!$form->is_valid()) {
+            $message = array('succeeded' => false, 'message' => BUtils::_('Please correct the following'),
+                'extra' => $form->get_errors());
+            BTransfer::get_instance()->set('status', $message);
+            return false;
+        }
+        
+        
+        $member_info = $form->get_sanitized(); 
+        $free_level = BUtils::get_free_level();
+        $account_status = BSettings::get_instance()->get_value('default-account-status', 'active');
+        $member_info['last_accessed_from_ip'] = BTransfer::get_real_ip_addr();
+        $member_info['member_since'] = date("Y-m-d");
+        $member_info['subscription_starts'] = date("Y-m-d");
+        $member_info['account_state'] = $account_status;
+        $plain_password = $member_info['plain_password'];
+        unset($member_info['plain_password']);
+        
+        if (BUtils::is_paid_registration()){
+            $member_info['reg_code'] = '';
+            $member_id = filter_input(INPUT_GET, 'member_id', FILTER_SANITIZE_NUMBER_INT);
+            $code      = filter_input(INPUT_GET, 'code', FILTER_SANITIZE_STRING);            
+            $wpdb->update($wpdb->prefix . "swpm_members_tbl", $member_info,
+                    array('member_id' => $member_id,'reg_code'=>$code));
+            
+            $query = $wpdb->prepare('SELECT membership_level FROM ' . $wpdb->prefix . 'swpm_members_tbl WHERE member_id=%d', $member_id);
+            $member_info['membership_level'] = $wpdb->get_var( $query );            
+            $last_insert_id = $member_id;
+        }
+        else if (!empty($free_level)){
+            $member_info['membership_level'] = $free_level;
+            $wpdb->insert($wpdb->prefix . "swpm_members_tbl", $member_info);
+            $last_insert_id = $wpdb->insert_id;
+        }
+        else{
+            $message = array('succeeded' => false, 'message' => BUtils::_('Membership Level Couldn\'t be found.'));
+            BTransfer::get_instance()->set('status', $message);
+            return false;
+        }        
+        $member_info['plain_password'] = $plain_password;
+        $this->member_info = $member_info;
+        return true;
+    }
+    private function create_wp_user(){
+        global $wpdb;
+        $member_info = $this->member_info;
+        $query = $wpdb->prepare("SELECT role FROM " . $wpdb->prefix . "swpm_membership_tbl WHERE id = %d", $member_info['membership_level']) ;
+        $wp_user_info = array();
+        $wp_user_info['user_nicename'] = implode('-', explode(' ', $member_info['user_name']));
+        $wp_user_info['display_name'] = $member_info['user_name'];
+        $wp_user_info['user_email'] = $member_info['email'];
+        $wp_user_info['nickname'] = $member_info['user_name'];
+        $wp_user_info['first_name'] = $member_info['first_name'];
+        $wp_user_info['last_name'] = $member_info['last_name'];
+        $wp_user_info['user_login'] = $member_info['user_name'];
+        $wp_user_info['password'] = $member_info['plain_password'];
+        $wp_user_info['role'] = $wpdb->get_var($query);
+        $wp_user_info['user_registered'] = date('Y-m-d H:i:s');
+        BUtils::create_wp_user($wp_user_info);
+        return true;
+    }
+    public function edit() {
+        global $wpdb;
+        $auth = BAuth::get_instance();
+        if (!$auth->is_logged_in()) {
+            return;
+        }
+        $user_data = (array) $auth->userData;
+        unset($user_data['permitted']);
+        $form = new BForm($user_data);
+        if ($form->is_valid()) {
+            global $wpdb;
+            $member_info = $form->get_sanitized();
+            // update corresponding wp user.            
+            BUtils::update_wp_user($auth->get('user_name'),$member_info);
+            if (isset($member_info['plain_password'])) {
+                unset($member_info['plain_password']);
+            }
+            
+            $wpdb->update(
+                    $wpdb->prefix . "swpm_members_tbl", $member_info, array('member_id' => $auth->get('member_id'))); 
+            $auth->reload_user_data();
+            $message = array('succeeded' => true, 'message' => 'Profile Updated.');
+            BTransfer::get_instance()->set('status', $message);
+        } else {
+            $message = array('succeeded' => false, 'message' => BUtils::_('Please correct the following'),
+                'extra' => $form->get_errors());
+            BTransfer::get_instance()->set('status', $message);
+            return;
+        }
+    }
+
+    public function reset_password($email) {
+        $email = sanitize_email($email);
+        if (!is_email($email)) {
+            $message = '<div class="swpm-reset-pw-error">' . BUtils::_("Email address not valid.") . '</div>';
+            $message = array('succeeded' => false, 'message' => $message);
+            BTransfer::get_instance()->set('status', $message);
+            return;
+        }
+        global $wpdb;
+        $query = 'SELECT member_id,user_name,first_name, last_name FROM ' .
+                $wpdb->prefix . 'swpm_members_tbl ' .
+                ' WHERE email = %s';
+        $user = $wpdb->get_row($wpdb->prepare($query, $email));
+        if (empty($user)) {
+            $message = '<div class="swpm-reset-pw-error">' . BUtils::_("No user not found with that email address.") .'</div>';
+            $message .= '<div class="swpm-reset-pw-error-email">' . BUtils::_("Email Address: ") . $email .'</div>';
+            $message = array('succeeded' => false, 'message' => $message);
+            BTransfer::get_instance()->set('status', $message);
+            return;
+        }
+        $settings = BSettings::get_instance();
+        $password = wp_generate_password();
+
+        $password_hash = BUtils::encrypt_password(trim($password)); //should use $saned??;
+        $wpdb->update($wpdb->prefix . "swpm_members_tbl", array('password' => $password_hash), array('member_id' => $user->member_id));
+        
+        // update wp user pass.
+        BUtils::update_wp_user($user->user_name, array('plain_password'=>$password));
+        
+        $body = $settings->get_value('reset-mail-body');
+        $subject = $settings->get_value('reset-mail-subject');
+        $search = array('{user_name}', '{first_name}', '{last_name}', '{password}');
+        $replace = array($user->user_name, $user->first_name, $user->last_name, $password);
+        $body = str_replace($search, $replace, $body);
+        $from = $settings->get_value('email-from');
+        $headers = "From: " . $from . "\r\n";
+        wp_mail($email, $subject, $body, $headers);
+        $message = '<div class="swpm-reset-pw-success">' . BUtils::_("New password has been sent to your email address.") .'</div>';
+        $message .= '<div class="swpm-reset-pw-success-email">' . BUtils::_("Email Address: ") . $email .'</div>';
+        
+        $message = array('succeeded' => false, 'message' => $message);
+        BTransfer::get_instance()->set('status', $message);
+    }
+}
diff --git a/classes/class.bInstallation.php b/classes/class.bInstallation.php
new file mode 100644 (file)
index 0000000..8adb4d7
--- /dev/null
@@ -0,0 +1,243 @@
+<?php
+
+/**
+ * Description of BInstallation
+ *
+ * @author nur
+ */
+class BInstallation {
+
+    /*
+     * This function is capable of handing both single site or multi-site install and upgrade all in one.
+     */
+    static function run_safe_installer()
+    {  
+        global $wpdb;
+        
+        //Do this if multi-site setup
+        if (function_exists('is_multisite') && is_multisite()) 
+        {
+            // check if it is a network activation - if so, run the activation function for each blog id
+            if (isset($_GET['networkwide']) && ($_GET['networkwide'] == 1)) 
+            {
+                $old_blog = $wpdb->blogid;
+                // Get all blog ids
+                $blogids = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs");
+                foreach ($blogids as $blog_id) {
+                    switch_to_blog($blog_id);
+                    BInstallation::installer();
+                    BInstallation::initdb();
+                }
+                switch_to_blog($old_blog);
+                return;
+            }
+        }
+        
+        //Do this if single site standard install
+        BInstallation::installer();
+        BInstallation::initdb();
+    }
+    
+    public static function installer() {
+        global $wpdb;
+        require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
+        
+        $charset_collate = '';
+        if (!empty($wpdb->charset)){
+            $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
+        }else{
+            $charset_collate = "DEFAULT CHARSET=utf8";
+        }
+        if (!empty($wpdb->collate)){
+            $charset_collate .= " COLLATE $wpdb->collate";
+        }
+
+        $sql = "CREATE TABLE " . $wpdb->prefix . "swpm_members_tbl (
+                       member_id int(12) NOT NULL PRIMARY KEY AUTO_INCREMENT,
+                       user_name varchar(32) NOT NULL,
+                       first_name varchar(32) DEFAULT '',
+                       last_name varchar(32) DEFAULT '',
+                       password varchar(64) NOT NULL,
+                       member_since date NOT NULL DEFAULT '0000-00-00',
+                       membership_level smallint(6) NOT NULL,
+                       more_membership_levels VARCHAR(100) DEFAULT NULL,
+                       account_state enum('active','inactive','expired','pending','unsubscribed') DEFAULT 'pending',
+                       last_accessed datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+                       last_accessed_from_ip varchar(64) NOT NULL,
+                       email varchar(64) DEFAULT NULL,
+                       phone varchar(64) DEFAULT NULL,
+                       address_street varchar(255) DEFAULT NULL,
+                       address_city varchar(255) DEFAULT NULL,
+                       address_state varchar(255) DEFAULT NULL,
+                       address_zipcode varchar(255) DEFAULT NULL,
+                       home_page varchar(255) DEFAULT NULL,
+                       country varchar(255) DEFAULT NULL,
+                       gender enum('male','female','not specified') DEFAULT 'not specified',
+                       referrer varchar(255) DEFAULT NULL,
+                       extra_info text,
+                       reg_code varchar(255) DEFAULT NULL,
+                       subscription_starts date DEFAULT NULL,
+                       initial_membership_level smallint(6) DEFAULT NULL,
+                       txn_id varchar(64) DEFAULT '',
+                       subscr_id varchar(32) DEFAULT '',
+                       company_name varchar(100) DEFAULT '',
+                       notes text DEFAULT NULL,
+                       flags int(11) DEFAULT '0',
+                       profile_image varchar(255) DEFAULT ''
+          )" . $charset_collate . ";";
+        dbDelta($sql);
+
+        $sql = "CREATE TABLE " . $wpdb->prefix . "swpm_membership_tbl (
+                       id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
+                       alias varchar(127) NOT NULL,
+                       role varchar(255) NOT NULL DEFAULT 'subscriber',
+                       permissions tinyint(4) NOT NULL DEFAULT '0',
+                       subscription_period varchar(11) NOT NULL DEFAULT '-1',
+                        subscription_duration_type tinyint NOT NULL default 0,
+                       subscription_unit   VARCHAR(20)        NULL, 
+                       loginredirect_page  text NULL,
+                       category_list longtext,
+                       page_list longtext,
+                       post_list longtext,
+                       comment_list longtext,
+                       attachment_list longtext,
+                       custom_post_list longtext,
+                       disable_bookmark_list longtext,
+                       options longtext,
+                        protect_older_posts  tinyint(1) NOT NULL DEFAULT '0',
+                       campaign_name varchar(60) NOT NULL DEFAULT ''
+          )" . $charset_collate . " AUTO_INCREMENT=1 ;";
+        dbDelta($sql);
+        $sql = "SELECT * FROM " . $wpdb->prefix . "swpm_membership_tbl WHERE id = 1";
+        $results = $wpdb->get_row($sql);
+        if (is_null($results)) {
+            $sql = "INSERT INTO  " . $wpdb->prefix . "swpm_membership_tbl  (
+                       id ,
+                       alias ,
+                       role ,
+                       permissions ,
+                       subscription_period ,
+                       subscription_unit,
+                       loginredirect_page,
+                       category_list ,
+                       page_list ,
+                       post_list ,
+                       comment_list,
+                       disable_bookmark_list,
+                       options,
+                       campaign_name
+                       )VALUES (1 , 'Content Protection', 'administrator', '15', '0',NULL,NULL, NULL , NULL , NULL , NULL,NULL,NULL,'');";
+            $wpdb->query($sql);
+        }
+        $sql = "UPDATE  " . $wpdb->prefix . "swpm_membership_tbl SET subscription_duration_type = 1 WHERE subscription_unit='days' AND subscription_duration_type = 0";
+        $wpdb->query($sql);
+
+        $sql = "UPDATE  " . $wpdb->prefix . "swpm_membership_tbl SET subscription_duration_type = 2 WHERE subscription_unit='weeks' AND subscription_duration_type = 0";
+        $wpdb->query($sql);        
+        
+        $sql = "UPDATE  " . $wpdb->prefix . "swpm_membership_tbl SET subscription_duration_type = 3 WHERE subscription_unit='months' AND subscription_duration_type = 0";
+        $wpdb->query($sql);                
+        
+        $sql = "UPDATE  " . $wpdb->prefix . "swpm_membership_tbl SET subscription_duration_type = 4 WHERE subscription_unit='years' AND subscription_duration_type = 0";
+        $wpdb->query($sql);
+        $sql = "CREATE TABLE " . $wpdb->prefix . "swpm_membership_meta_tbl (
+                        id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+                        level_id int(11) NOT NULL,
+                        meta_key varchar(255) NOT NULL,
+                        meta_label varchar(255) NULL,
+                        meta_value text,
+                        meta_type varchar(255) NOT NULL DEFAULT 'text',
+                        meta_default text,
+                        meta_context varchar(255) NOT NULL DEFAULT 'default',
+                        KEY level_id (level_id),
+                        UNIQUE KEY meta_key_id (level_id,meta_key)
+          )" . $charset_collate . " AUTO_INCREMENT=1 ;";
+        dbDelta($sql);
+        
+        $sql = "CREATE TABLE " . $wpdb->prefix . "swpm_payments_tbl (
+                        id int(12) NOT NULL PRIMARY KEY AUTO_INCREMENT,
+                        email varchar(64) DEFAULT NULL,
+                        first_name varchar(32) DEFAULT '',
+                        last_name varchar(32) DEFAULT '',
+                        member_id varchar(16) DEFAULT '',
+                        membership_level varchar(16) DEFAULT '',
+                        txn_date date NOT NULL default '0000-00-00',
+                        txn_id varchar(128) NOT NULL default '',
+                        subscr_id varchar(128) NOT NULL default '',
+                        reference varchar(128) NOT NULL default '',
+                        payment_amount varchar(32) NOT NULL default '', 
+                        gateway varchar(16) DEFAULT '',
+                        status varchar(16) DEFAULT '',
+                        ip_address varchar(64) default ''
+                        )" . $charset_collate . ";";
+        dbDelta($sql);
+        
+        //Save the current DB version
+        update_option("swpm_db_version", SIMPLE_WP_MEMBERSHIP_DB_VER);
+    }
+
+    public static function initdb() {
+        $settings = BSettings::get_instance();
+
+        $installed_version = $settings->get_value('swpm-active-version');
+
+        //Set other default settings values
+        $reg_prompt_email_subject = "Complete your registration";
+        $reg_prompt_email_body = "Dear {first_name} {last_name}" .
+                "\n\nThank you for joining us!" .
+                "\n\nPlease complete your registration by visiting the following link:" .
+                "\n\n{reg_link}" .
+                "\n\nThank You";
+        $reg_email_subject = "Your registration is complete";
+        $reg_email_body = "Dear {first_name} {last_name}\n\n" .
+                "Your registration is now complete!\n\n" .
+                "Registration details:\n" .
+                "Username: {user_name}\n" .
+                "Password: {password}\n\n" .
+                "Please login to the member area at the following URL:\n\n" .
+                "{login_link}\n\n" .
+                "Thank You";
+
+        $upgrade_email_subject = "Subject for email sent after account upgrade";
+        $upgrade_email_body = "Dear {first_name} {last_name}" .
+                "\n\nYour Account Has Been Upgraded." .
+                "\n\nThank You";
+        $reset_email_subject = get_bloginfo('name') . ": New Password";
+        $reset_email_body = "Dear {first_name} {last_name}" .
+                "\n\nHere is your new password" .
+                "\n\nUser name: {user_name}" .
+                "\n\nPassword: {password}" .
+                "\n\nThank You";
+
+        $status_change_email_subject = "Account Updated!";
+        $status_change_email_body = "Dear {first_name} {last_name}," .
+                "\n\n Your account status has been updated!" .
+                " Please login to the member area at the following URL:" .
+                "\n\n {login_link}" .
+                "\n\nThank You";
+        
+        if (empty($installed_version)) {
+            //Do fresh install tasks
+
+            /*             * * Create the mandatory pages (if they are not there) ** */
+            miscUtils::create_mandatory_wp_pages();
+            /*             * * End of page creation ** */
+            $settings->set_value('reg-complete-mail-subject', stripslashes($reg_email_subject))
+                    ->set_value('reg-complete-mail-body', stripslashes($reg_email_body))
+                    ->set_value('reg-prompt-complete-mail-subject', stripslashes($reg_prompt_email_subject))
+                    ->set_value('reg-prompt-complete-mail-body', stripslashes($reg_prompt_email_body))
+                    ->set_value('upgrade-complete-mail-subject', stripslashes($upgrade_email_subject))
+                    ->set_value('upgrade-complete-mail-body', stripslashes($upgrade_email_body))
+                    ->set_value('reset-mail-subject', stripslashes($reset_email_subject))
+                    ->set_value('reset-mail-body', stripslashes($reset_email_body))
+                    ->set_value('account-change-email-subject', stripslashes($status_change_email_subject))
+                    ->set_value('account-change-email-body', stripslashes($status_change_email_body))                    
+                    ->set_value('email-from', trim(get_option('admin_email')));
+        }
+        if (version_compare($installed_version, SIMPLE_WP_MEMBERSHIP_VER) == -1) {
+            //Do upgrade tasks
+        }
+
+        $settings->set_value('swpm-active-version', SIMPLE_WP_MEMBERSHIP_VER)->save(); //save everything.
+    }
+}
diff --git a/classes/class.bLevelForm.php b/classes/class.bLevelForm.php
new file mode 100644 (file)
index 0000000..709046c
--- /dev/null
@@ -0,0 +1,126 @@
+<?php
+
+class BLevelForm {
+
+    protected $fields;
+    protected $op;
+    protected $errors;
+    protected $sanitized;
+
+    public function __construct($fields) {
+        $this->fields = $fields;
+        $this->sanitized = array();
+        foreach ($fields as $key => $value)
+            $this->$key();
+    }
+
+    protected function id() {
+        
+    }
+
+    protected function alias() {
+        $alias = filter_input(INPUT_POST, 'alias');
+        $this->sanitized['alias'] = sanitize_text_field($alias);
+    }
+
+    protected function role() {
+        $role = filter_input(INPUT_POST, 'role');
+        $this->sanitized['role'] = sanitize_text_field($role);
+    }
+
+    protected function permissions() {
+        $this->sanitized['permissions'] = 63;
+    }
+
+    protected function subscription_period() {
+        $subscript_duration_type = filter_input(INPUT_POST, 'subscription_duration_type');
+
+        if ($subscript_duration_type == BMembershipLevel::NO_EXPIRY) {
+            $this->sanitized['subscription_period'] = "";
+            return;
+        }
+
+        $subscription_period = filter_input(INPUT_POST, 'subscription_period_'. $subscript_duration_type);
+        if (($subscript_duration_type == BMembershipLevel::FIXED_DATE)){
+            $dateinfo = date_parse($subscription_period);
+            if ($dateinfo['warning_count']|| $dateinfo['error_count']){
+                $this->errors['subscription_period'] = BUtils::_("Date format is not valid.");
+                return;
+            }
+            $this->sanitized['subscription_period'] = sanitize_text_field($subscription_period);
+            return;
+        }
+        
+        if (!is_numeric($subscription_period)) {
+            $this->errors['subscription_period'] = BUtils::_("Access duration must be > 0.");
+            return;
+        }
+        $this->sanitized['subscription_period'] = sanitize_text_field($subscription_period);
+    }
+
+    protected function subscription_duration_type(){
+        $subscription_duration_type = filter_input(INPUT_POST, 'subscription_duration_type');
+        $this->sanitized['subscription_duration_type'] = $subscription_duration_type;
+        return;
+    }
+    protected function subscription_unit(){
+        
+    }
+    protected function loginredirect_page() {
+        
+    }
+
+    protected function category_list() {
+        
+    }
+
+    protected function page_list() {
+        
+    }
+
+    protected function post_list() {
+        
+    }
+
+    protected function comment_list() {
+        
+    }
+
+    protected function attachment_list() {
+        
+    }
+
+    protected function custom_post_list() {
+        
+    }
+
+    protected function disable_bookmark_list() {
+        
+    }
+
+    protected function options() {
+        
+    }
+
+    protected function campaign_name() {
+        
+    }
+
+    protected function protect_older_posts() {
+        $checked = filter_input(INPUT_POST, 'protect_older_posts');
+        $this->sanitized['protect_older_posts'] = empty($checked) ? 0 : 1;
+    }
+
+    public function is_valid() {
+        return count($this->errors) < 1;
+    }
+
+    public function get_sanitized() {
+        return $this->sanitized;
+    }
+
+    public function get_errors() {
+        return $this->errors;
+    }
+
+}
diff --git a/classes/class.bLog.php b/classes/class.bLog.php
new file mode 100644 (file)
index 0000000..3f81e88
--- /dev/null
@@ -0,0 +1,77 @@
+<?php
+
+class BLog {
+    private $error;
+    private $warn;
+    private $notice;
+    private static $intance;
+    private function __construct() {
+        $this->error  = array();
+        $this->warn   = array();
+        $this->notice = array();
+    }
+    public static function get_logger($context = ''){
+        $context = empty($context)? 'default': $context;
+        if (!isset(self::$intance[$context])){
+            self::$intance[$context] = new BLog();
+        }
+        return self::$intance[$context];
+    }
+    public function error($msg){
+        $this->error[] = $msg;
+    }
+    public function warn($msg){
+        $this->warn[] = $msg;
+    }
+    public function debug($msg){
+        $this->notice[] = $msg;
+    }
+    public function get($to_screen = false){
+        $msg = '';
+        foreach ($this->error as $error ){
+            $msg .= 'ERROR: ' . $error . ($to_screen?"<br/>":"\n");
+        }
+        foreach($this->warn as $warn){
+            $msg .= 'WARN: ' . $warn . ($to_screen?"<br/>":"\n");
+        }
+        foreach ($this->notice as $notice){
+            $msg = 'NOTICE: ' . $notice . ($to_screen?"<br/>":"\n");
+        }
+        return $msg;
+    }
+    public static function writeall($path = ''){
+        if (empty($path)) {$path = SIMPLE_WP_MEMBERSHIP_PATH . 'log.txt';}
+        $fp = fopen($path, 'a');
+        $date = date("Y-m-d H:i:s");
+        fwrite($fp, strtoupper($date) . ":\n");
+        fwrite($fp, str_repeat('-=', (strlen($date)+1.0)/2.0) . "\n");
+        foreach (self::$intance as $context=>$intance){
+            fwrite($fp, strtoupper($context) . ":\n");
+            fwrite($fp, str_repeat('=', strlen($context)+1) . "\n");
+            fwrite($fp, $intance->get());
+        }
+        fclose($fp);
+    }
+
+    public static function log_simple_debug($message, $success, $end = false) {
+        $settings = BSettings::get_instance();
+        $debug_enabled = $settings->get_value('enable-debug');
+        if (empty($debug_enabled)) {//Debug is not enabled
+            return;
+        }
+
+        //Lets write to the log file
+        $debug_log_file_name = SIMPLE_WP_MEMBERSHIP_PATH . 'log.txt';
+
+        // Timestamp
+        $text = '[' . date('m/d/Y g:i A') . '] - ' . (($success) ? 'SUCCESS :' : 'FAILURE :') . $message . "\n";
+        if ($end) {
+            $text .= "\n------------------------------------------------------------------\n\n";
+        }
+        // Write to log
+        $fp = fopen($debug_log_file_name, 'a');
+        fwrite($fp, $text);
+        fclose($fp);  // close file
+    }
+
+}
diff --git a/classes/class.bMemberUtils.php b/classes/class.bMemberUtils.php
new file mode 100644 (file)
index 0000000..60ce8fe
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * BMemberUtils
+ *
+ * @author nur
+ */
+abstract class BMemberUtils {
+
+    public static function is_member_logged_in() {
+        $auth = BAuth::get_instance();
+        if ($auth->is_logged_in()) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    public static function get_logged_in_members_id() {
+        $auth = BAuth::get_instance();
+        if (!$auth->is_logged_in()) {
+            return bUtils::_("User is not logged in.");
+        }
+        return $auth->userData->member_id;
+    }
+
+    public static function get_logged_in_members_level() {
+        $auth = BAuth::get_instance();
+        if (!$auth->is_logged_in()) {
+            return bUtils::_("User is not logged in.");
+        }
+        return $auth->userData->membership_level;
+    }
+
+}
diff --git a/classes/class.bMembers.php b/classes/class.bMembers.php
new file mode 100644 (file)
index 0000000..7311dd0
--- /dev/null
@@ -0,0 +1,198 @@
+<?php
+
+class BMembers extends WP_List_Table {
+
+    function __construct() {
+        parent::__construct(array(
+            'singular' => BUtils::_('Member'),
+            'plural' => BUtils::_('Members'),
+            'ajax' => false
+        ));
+    }
+
+    function get_columns() {
+        return array(
+            'cb' => '<input type="checkbox" />'
+            , 'member_id' => BUtils::_('ID')
+            , 'user_name' => BUtils::_('User Name')
+            , 'first_name' => BUtils::_('First Name')
+            , 'last_name' => BUtils::_('Last Name')
+            , 'email' => BUtils::_('Email')
+            , 'alias' => BUtils::_('Membership Level')
+            , 'subscription_starts' => BUtils::_('Access Starts')
+            , 'account_state' => BUtils::_('Account State')
+        );
+    }
+
+    function get_sortable_columns() {
+        return array(
+            'member_id' => array('member_id', true),
+            'user_name' => array('user_name', true)
+        );
+    }
+
+    function get_bulk_actions() {
+        $actions = array(
+            'bulk_delete' => BUtils::_('Delete')
+        );
+        return $actions;
+    }
+
+    function column_default($item, $column_name) {
+        return $item[$column_name];
+    }
+
+    function column_member_id($item) {
+        $actions = array(
+            'edit' => sprintf('<a href="admin.php?page=%s&member_action=edit&member_id=%s">Edit</a>', $_REQUEST['page'], $item['member_id']),
+            'delete' => sprintf('<a href="?page=%s&member_action=delete&member_id=%s"
+                                    onclick="return confirm(\'Are you sure you want to delete this entry?\')">Delete</a>', $_REQUEST['page'], $item['member_id']),
+        );
+        return $item['member_id'] . $this->row_actions($actions);
+    }
+
+    function column_cb($item) {
+        return sprintf(
+                '<input type="checkbox" name="members[]" value="%s" />', $item['member_id']
+        );
+    }
+
+    function prepare_items() {
+        global $wpdb;
+        $query = "SELECT * FROM " . $wpdb->prefix . "swpm_members_tbl";
+        $query .= " LEFT JOIN " . $wpdb->prefix . "swpm_membership_tbl";
+        $query .= " ON ( membership_level = id ) ";
+        $s = filter_input(INPUT_POST, 's');
+        if (!empty($s)){
+            $query .= " WHERE  user_name LIKE '%" . strip_tags($s) . "%' "
+                    . " OR first_name LIKE '%" . strip_tags($s) . "%' "
+                    . " OR last_name LIKE '%" . strip_tags($s) . "%' ";
+        }
+        $orderby = filter_input(INPUT_GET, 'orderby');
+        $orderby = empty($orderby) ? 'user_name' : $orderby ;
+        $order = filter_input(INPUT_GET, 'order');
+        $order = empty($order) ? 'DESC' : $order;
+        
+        $sortable_columns = $this->get_sortable_columns();
+        $orderby = BUtils::sanitize_value_by_array($orderby, $sortable_columns);
+        $order = BUtils::sanitize_value_by_array($order, array('DESC' => '1', 'ASC' => '1'));
+
+        $query.=' ORDER BY ' . $orderby . ' ' . $order;
+        $totalitems = $wpdb->query($query); //return the total number of affected rows
+        $perpage = 20;
+        $paged  = filter_input(INPUT_GET, 'paged');
+        if (empty($paged) || !is_numeric($paged) || $paged <= 0) {
+            $paged = 1;
+        }
+        $totalpages = ceil($totalitems / $perpage);
+        if (!empty($paged) && !empty($perpage)) {
+            $offset = ($paged - 1) * $perpage;
+            $query.=' LIMIT ' . (int) $offset . ',' . (int) $perpage;
+        }
+        $this->set_pagination_args(array(
+            "total_items" => $totalitems,
+            "total_pages" => $totalpages,
+            "per_page" => $perpage,
+        ));
+
+        $columns = $this->get_columns();
+        $hidden = array();
+        $sortable = $this->get_sortable_columns();
+
+        $this->_column_headers = array($columns, $hidden, $sortable);
+        $this->items = $wpdb->get_results($query, ARRAY_A);
+    }
+
+    function no_items() {
+        _e('No Member found.');
+    }
+
+    function process_form_request() {
+        if (isset($_REQUEST['member_id']))
+            return $this->edit(absint($_REQUEST['member_id']));
+        return $this->add();
+    }
+
+    function add() {
+        $form = apply_filters('swpm_admin_registration_form_override', '');
+        if (!empty($form)) {echo $form;return;}
+        global $wpdb;
+        $member = BTransfer::$default_fields;
+        $member['member_since'] = date('Y-m-d');
+        $member['subscription_starts'] = date('Y-m-d');
+        if (isset($_POST['createswpmuser'])) {
+            $member = $_POST;
+        }
+        extract($member, EXTR_SKIP);
+        $query = "SELECT * FROM " . $wpdb->prefix . "swpm_membership_tbl WHERE  id !=1 ";
+        $levels = $wpdb->get_results($query, ARRAY_A);
+        include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/admin_add.php');
+        return false;
+    }
+
+    function edit($id) {
+        global $wpdb;
+        $id = absint($id);
+        $query = "SELECT * FROM {$wpdb->prefix}swpm_members_tbl WHERE member_id = $id";
+        $member = $wpdb->get_row($query, ARRAY_A);
+        if (isset($_POST["editswpmuser"])) {
+            $_POST['user_name'] = $member['user_name'];
+            $_POST['email'] = $member['email'];
+            $member = $_POST;
+        }
+        extract($member, EXTR_SKIP);
+        $query = "SELECT * FROM " . $wpdb->prefix . "swpm_membership_tbl WHERE  id !=1 ";
+        $levels = $wpdb->get_results($query, ARRAY_A);
+        include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/admin_edit.php');
+        return false;
+    }
+
+    function delete() {
+        global $wpdb;
+        if (isset($_REQUEST['members'])) {
+            $members = $_REQUEST['members'];
+            if (!empty($members)) {
+                $members = array_map('absint', $members);
+                foreach ($members as $swpm_id) {
+                    $user_name = BUtils::get_user_by_id(absint($swpm_id));
+                    BMembers::delete_wp_user($user_name);
+                }
+                $query = "DELETE FROM " . $wpdb->prefix . "swpm_members_tbl WHERE member_id IN (" . implode(',', $members) . ")";
+                $wpdb->query($query);
+            }
+        }
+        else if (isset($_REQUEST['member_id'])) {
+            $id = absint($_REQUEST['member_id']);
+            BMembers::delete_user_by_id($id);
+        }
+    }
+    public static function delete_user_by_id($id){
+        $user_name = BUtils::get_user_by_id($id);
+        BMembers::delete_wp_user($user_name);
+        BMembers::delete_swpm_user_by_id($id);
+    }
+    
+    public static function delete_swpm_user_by_id($id){
+        global $wpdb;
+        $query = "DELETE FROM " . $wpdb->prefix . "swpm_members_tbl WHERE member_id = $id";
+        $wpdb->query($query);        
+    }
+    function show() {
+        include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/admin_members.php');
+    }
+
+    public static function delete_wp_user($user_name) {
+        $wp_user_id = username_exists($user_name);
+        $ud = get_userdata($wp_user_id);
+        if (!empty($ud) && (isset($ud->wp_capabilities['administrator']) || $ud->wp_user_level == 10)) {
+            BTransfer::get_instance()->set('status', 'For consistency, we do not allow deleting any associated wordpress account with administrator role.<br/>'
+                    . 'Please delete from <a href="users.php">Users</a> menu.');
+            return;
+        }
+        if ($wp_user_id) {
+            include_once(ABSPATH . 'wp-admin/includes/user.php');
+            wp_delete_user($wp_user_id, 1); //assigns all related to this user to admin.
+        }
+    }
+
+}
diff --git a/classes/class.bMembershipLevel.php b/classes/class.bMembershipLevel.php
new file mode 100644 (file)
index 0000000..747c1d0
--- /dev/null
@@ -0,0 +1,70 @@
+<?php
+
+/**
+ * Description of BMembershipLevel
+ *
+ * @author nur
+ */
+class BMembershipLevel {
+    const NO_EXPIRY  = 0;
+    const DAYS       = 1;
+    const WEEKS      = 2; 
+    const MONTHS     = 3;
+    const YEARS      = 4;
+    const FIXED_DATE = 5;
+    
+    private static $_instance = null;
+
+    private function __construct() {
+        ;
+    }
+
+    public static function get_instance() {
+        self::$_instance = empty(self::$_instance) ? new BMembershipLevel() : self::$_instance;
+        return self::$_instance;
+    }
+
+    public function create() {
+        global $wpdb;
+        $level = BTransfer::$default_level_fields;
+        $form = new BLevelForm($level);
+        if ($form->is_valid()) {
+            $level_info = $form->get_sanitized();
+            $wpdb->insert($wpdb->prefix . "swpm_membership_tbl", $level_info);
+            $id = $wpdb->insert_id;
+            $custom = apply_filters('swpm_admin_add_membership_level', array());
+            $this->save_custom_fields($id, $custom);
+            $message = array('succeeded' => true, 'message' => BUtils::_('Membership Level Creation Successful.'));
+            BTransfer::get_instance()->set('status', $message);
+            wp_redirect('admin.php?page=simple_wp_membership_levels');
+            return;
+        }
+        $message = array('succeeded' => false, 'message' => BUtils::_('Please correct the following:'), 'extra' => $form->get_errors());
+        BTransfer::get_instance()->set('status', $message);
+    }
+
+    public function edit($id) {
+        global $wpdb;
+        $query = $wpdb->prepare("SELECT * FROM " . $wpdb->prefix . "swpm_membership_tbl WHERE id = %d", $id);
+        $level = $wpdb->get_row($query, ARRAY_A);
+        $form = new BLevelForm($level);
+        if ($form->is_valid()) {
+            $wpdb->update($wpdb->prefix . "swpm_membership_tbl", $form->get_sanitized(), array('id' => $id));
+            //@todo meta table and collect all relevant info and pass as argument
+            $custom = apply_filters('swpm_admin_edit_membership_level', array(), $id);
+            $this->save_custom_fields($id, $custom);
+            $message = array('succeeded' => true, 'message' => BUtils::_('Updated Successfully.'));
+            BTransfer::get_instance()->set('status', $message);
+            wp_redirect('admin.php?page=simple_wp_membership_levels');
+            return;
+        }
+        $message = array('succeeded' => false, 'message' => BUtils::_('Please correct the following:'), 'extra' => $form->get_errors());
+        BTransfer::get_instance()->set('status', $message);
+    }
+    private function save_custom_fields($level_id, $data){
+        $custom_obj = BMembershipLevelCustom::get_instance_by_id($level_id);
+        foreach ($data as $item){
+            $custom_obj->set($item);
+        }
+    }
+}
diff --git a/classes/class.bMembershipLevelCustom.php b/classes/class.bMembershipLevelCustom.php
new file mode 100644 (file)
index 0000000..5ac7952
--- /dev/null
@@ -0,0 +1,93 @@
+<?php
+/**
+ * Description of BMembershipLevelCustom
+ *
+ * @author nur
+ */
+class BMembershipLevelCustom {
+    private static $instances = array();
+    private $level_id;
+    private $fields;
+    private function __construct() {
+        $this->fields = array();
+    }
+    public static function get_instance_by_id($level_id){
+        if (!isset(self::$instances[$level_id])){
+            self::$instances[$level_id] = new BMembershipLevelCustom();
+            self::$instances[$level_id]->level_id = $level_id;
+            self::$instances[$level_id]->load_by_id($level_id);
+        }
+        return self::$instances[$level_id];
+    }
+    public function load_by_id($level_id){
+        global $wpdb;
+        $query = 'SELECT * FROM ' . $wpdb->prefix . 'swpm_membership_meta_tbl WHERE level_id=%d';
+        $results = $wpdb->get_results($wpdb->prepare($query, $level_id), ARRAY_A);
+        foreach($results as $result){
+            $this->fields[$result['meta_key']] = $result;
+        }
+    }
+    public function set($item){
+        $meta_key = preg_replace('|[^A-Z0-9_]|i', '', $item['meta_key']);
+        $new = array(
+            'meta_key'=>$meta_key,
+            'level_id'=>$this->level_id,
+            'meta_label'=> isset($item['meta_label'])?$item['meta_label']:'',
+            'meta_value'=>$item['meta_value'],
+            'meta_type'=> isset($item['meta_type'])?$item['meta_type']:'text',
+            'meta_default'=> isset($item['meta_default'])?$item['meta_default']:'',
+            'meta_context'=> $item['meta_context'],
+            );
+        if (isset($this->fields[$meta_key])){
+            $new['id'] = $this->fields[$meta_key]['id'];
+            $this->fields[$meta_key] = $new;
+        }
+        else{
+            $this->fields[$meta_key] = $new;
+        }
+        $this->save($this->fields[$meta_key]);
+    return $this;
+    }
+    public function get($meta_key, $default=''){
+        $meta_key = preg_replace('|[^A-Z0-9_]|i', '', $meta_key);
+        if (isset($this->fields[$meta_key])){
+            return maybe_unserialize($this->fields[$meta_key]['meta_value']);
+
+        }
+        return $default;
+    }
+    public function get_by_context($context){
+        $result = array();
+        foreach ($this->fields as $key=>$field){
+            if ($field['meta_context'] == $context){
+                $result[$key] = $field;
+            }
+        }
+        return $result;
+    }
+    private function save($field){
+        global $wpdb;
+        if (!isset($field['meta_key'])){retern;} // cannot continue without key field.
+        $meta_key = preg_replace('|[^A-Z0-9_]|i', '', $field['meta_key']);
+        $query = $wpdb->prepare(
+                'REPLACE INTO ' . $wpdb->prefix. 'swpm_membership_meta_tbl
+                (level_id, meta_key, meta_label, meta_value, meta_type, meta_default, meta_context)
+                VALUES(%d, %s, %s, %s, %s, %s, %s); ',
+                $this->level_id,
+                $meta_key,
+                isset($field['meta_label'])? sanitize_text_field($field['meta_label']): '',
+                isset($field['meta_value'])? sanitize_text_field($field['meta_value']): '',
+                'text', // at the moment we have only one type
+                '',
+                isset($field['meta_context'])? sanitize_text_field($field['meta_context']): 'default'
+                );
+
+        $wpdb->query($query);
+    }
+    public static function get_value_by_key($level_id, $key, $default= ''){
+        return BMembershipLevelCustom::get_instance_by_id($level_id)->get($key, $default);
+    }
+    public static  function get_value_by_context($level_id, $context){
+        return BMembershipLevelCustom::get_instance_by_id($level_id)->get_by_context($context);
+    }
+}
diff --git a/classes/class.bMembershipLevelUtils.php b/classes/class.bMembershipLevelUtils.php
new file mode 100644 (file)
index 0000000..0a81afb
--- /dev/null
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * BMembershipLevelUtils
+ *
+ * @author nur
+ */
+abstract class BMembershipLevelUtils {
+
+}
diff --git a/classes/class.bMembershipLevels.php b/classes/class.bMembershipLevels.php
new file mode 100644 (file)
index 0000000..dd832a2
--- /dev/null
@@ -0,0 +1,156 @@
+<?php
+if( ! class_exists( 'WP_List_Table' ) )
+    require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
+
+class BMembershipLevels extends WP_List_Table{
+    function __construct(){
+        parent::__construct(array(
+            'singular'=>BUtils::_('Membership Level'),
+            'plural'  => BUtils::_('Membership Levels'),
+            'ajax'    => false
+        ));
+    }
+    function get_columns(){
+        return array(
+            'cb' => '<input type="checkbox" />'
+            ,'id'=>BUtils::_('ID')
+            ,'alias'=>BUtils::_('Membership Level')
+            ,'role'=>BUtils::_('Role')
+            ,'valid_for'=>BUtils::_('Access Valid For/Until')
+            );
+    }
+    function get_sortable_columns(){
+        return array(
+            'id' => array('id',true),
+            'alias' => array('alias',true)
+        );
+    }
+    function get_bulk_actions() {
+        $actions = array(
+            'bulk_delete'    => BUtils::_('Delete')
+        );
+        return $actions;
+    }
+    function column_default($item, $column_name){
+        if($column_name == 'valid_for'){
+            if($item['subscription_duration_type'] == BMembershipLevel::NO_EXPIRY) {return 'No Expiry';}
+            if($item['subscription_duration_type'] == BMembershipLevel::FIXED_DATE) {return date(get_option('date_format'), strtotime($item['subscription_period']));}
+            if($item['subscription_duration_type'] == BMembershipLevel::DAYS) {return $item['subscription_period'] ." Day(s)";}
+            if($item['subscription_duration_type'] == BMembershipLevel::WEEKS) {return $item['subscription_period'] ." Week(s)";}
+            if($item['subscription_duration_type'] == BMembershipLevel::MONTHS) {return $item['subscription_period'] ." Month(s)";}
+            if($item['subscription_duration_type'] == BMembershipLevel::YEARS) {return $item['subscription_period'] ." Year(s)";}
+        }
+        if($column_name == 'role') {return ucfirst($item['role']);}
+       return stripslashes($item[$column_name]);
+    }
+    function column_id($item){
+        $actions = array(
+            'edit'     => sprintf('<a href="admin.php?page=%s&level_action=edit&id=%s">Edit</a>',
+                                                                       $_REQUEST['page'],$item['id']),
+            'delete'    => sprintf('<a href="?page=%s&level_action=delete&id=%s"
+                                    onclick="return confirm(\'Are you sure you want to delete this entry?\')">Delete</a>',
+                                    $_REQUEST['page'],$item['id']),
+        );
+        return $item['id'] . $this->row_actions($actions);
+    }
+    function column_cb($item) {
+        return sprintf(
+            '<input type="checkbox" name="ids[]" value="%s" />', $item['id']
+        );
+    }
+    function prepare_items() {
+        global $wpdb;
+        $query  = "SELECT * FROM " .$wpdb->prefix . "swpm_membership_tbl WHERE  id !=1 ";
+        if(isset($_POST['s'])) $query .= " AND alias LIKE '%" . strip_tags($_POST['s']). "%' ";
+        $orderby = !empty($_GET["orderby"]) ? mysql_real_escape_string($_GET["orderby"]) : 'id';
+        $order = !empty($_GET["order"]) ? mysql_real_escape_string($_GET["order"]) : 'DESC';
+        
+        $sortable_columns = $this->get_sortable_columns();
+        $orderby = BUtils::sanitize_value_by_array($orderby, $sortable_columns);
+        $order = BUtils::sanitize_value_by_array($order, array('DESC' => '1', 'ASC' => '1'));
+        
+        if(!empty($orderby) && !empty($order)){ $query.=' ORDER BY '.$orderby.' '.$order; }
+        
+        $totalitems = $wpdb->query($query); //return the total number of affected rows
+        $perpage = 20;
+        $paged = !empty($_GET["paged"]) ? mysql_real_escape_string($_GET["paged"]) : '';
+        if(empty($paged) || !is_numeric($paged) || $paged<=0 ){ $paged=1; }
+        $totalpages = ceil($totalitems/$perpage);
+        if(!empty($paged) && !empty($perpage)){
+            $offset=($paged-1)*$perpage;
+               $query.=' LIMIT '.(int)$offset.','.(int)$perpage;
+        }
+        $this->set_pagination_args( array(
+            "total_items" => $totalitems,
+            "total_pages" => $totalpages,
+            "per_page" => $perpage,
+        ) );
+
+        $columns = $this->get_columns();
+        $hidden = array();
+        $sortable = $this->get_sortable_columns();
+
+        $this->_column_headers = array($columns, $hidden, $sortable);
+        $this->items = $wpdb->get_results($query, ARRAY_A);
+    }
+    function no_items() {
+        BUtils::e( 'No membership levels found.' );
+    }
+    function process_form_request(){
+        if(isset($_REQUEST['id'])){
+            return $this->edit($_REQUEST['id']);
+        }
+        return $this->add();
+
+    }
+    function add(){
+        global $wpdb;
+        $member = BTransfer::$default_fields;
+        if(isset($_POST['createswpmlevel'])){
+            $member = $_POST;
+        }
+        extract($member, EXTR_SKIP);
+        include_once(SIMPLE_WP_MEMBERSHIP_PATH.'views/admin_add_level.php');
+        return false;
+    }
+    function edit($id){
+        global $wpdb;
+        $query = $wpdb->prepare("SELECT * FROM {$wpdb->prefix}swpm_membership_tbl WHERE id = %d", absint($id));
+        $membership = $wpdb->get_row($query, ARRAY_A);
+        extract($membership, EXTR_SKIP);
+        include_once(SIMPLE_WP_MEMBERSHIP_PATH.'views/admin_edit_level.php');
+        return false;
+    }
+    function delete(){
+        global $wpdb;
+        if (isset($_REQUEST['ids'])){
+            $members = $_REQUEST['ids'];
+            if(!empty($members)){
+                $members = array_map('absint', $members);
+                $members = implode(',', $members);
+                $query = "DELETE FROM " .$wpdb->prefix . "swpm_membership_tbl WHERE id IN (" . $members . ")";
+                $wpdb->query($query);
+            }
+        }
+        else if(isset($_REQUEST['id'])){
+            $id = absint($_REQUEST['id']);
+            $query = $wpdb->prepare("DELETE FROM " .$wpdb->prefix . "swpm_membership_tbl WHERE id = %d", $id);
+            $wpdb->query($query);
+        }        
+    }
+    function show(){
+        $selected = 1;
+        include_once(SIMPLE_WP_MEMBERSHIP_PATH.'views/admin_membership_levels.php');
+    }
+    function manage(){
+        $selected = 2;
+         include_once(SIMPLE_WP_MEMBERSHIP_PATH.'views/admin_membership_manage.php');
+    }
+    function manage_categroy(){
+        $selected = 3;
+        include_once('class.bCategoryList.php');
+        $category_list = new BCategoryList();        
+        include_once(SIMPLE_WP_MEMBERSHIP_PATH.'views/admin_category_list.php');
+    }    
+}
+
diff --git a/classes/class.bMessages.php b/classes/class.bMessages.php
new file mode 100644 (file)
index 0000000..9bfac9f
--- /dev/null
@@ -0,0 +1,23 @@
+<?php
+/**
+ *
+ *
+ * @author nur
+ */
+class BMessages {
+    private $messages;
+    public function __construct() {
+        $this->messages = array();
+    }
+    public function get($key){
+        if(isset($this->messages[$key])){
+            $m = $this->messages[$key];
+            $this->messages[$key] ='';
+            return $m;
+        }
+        return '';
+    }
+    public function set($key, $value){
+        $this->messages[$key] = $value;
+    }
+}
diff --git a/classes/class.bPermission.php b/classes/class.bPermission.php
new file mode 100644 (file)
index 0000000..d1c8642
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+include_once('class.bProtectionBase.php');
+class BPermission extends bProtectionBase{
+    private static $_this = array();
+    private function __construct($level_id) {       
+        $this->init($level_id);
+    }
+
+    public static function get_instance($level_id) {
+        if ($level_id ==1 || $level_id == md5(1)){           
+            wp_die('Invalid Membership level!');
+        }        
+        $key = is_numeric($level_id)? md5($level_id): $level_id;
+        if (!isset(self::$_this[$key])){
+            self::$_this[$key] = new BPermission($level_id);
+        }
+                       
+        return self::$_this[$key];
+    }
+
+    public function is_permitted($id) {
+        return $this->post_in_parent_categories($id) || $this->post_in_categories($id) || $this->in_posts($id) || $this->in_pages($id) || $this->in_attachments($id) || $this->in_custom_posts($id);
+    }
+
+    public function is_permitted_attachment($id) {
+        return (($this->bitmap & 16) === 16) && $this->in_attachments($id);
+    }
+
+    public function is_permitted_custom_post($id) {
+        return (($this->bitmap & 32) === 32) && $this->in_custom_posts($id);
+    }
+
+    public function is_permitted_category($id) {
+        return (($this->bitmap & 1) === 1) && $this->in_categories($id);
+    }
+
+    public function is_post_in_permitted_category($post_id) {
+        return (($this->bitmap & 1) === 1) && $this->post_in_categories($post_id);
+    }
+
+    public function is_permitted_post($id) {
+        return (($this->bitmap & 4) === 4) && $this->in_posts($id);
+    }
+
+    public function is_permitted_page($id) {
+        return (($this->bitmap & 8) === 8) && $this->in_pages($id);
+    }
+
+    public function is_permitted_comment($id) {
+        return (($this->bitmap & 2) === 2) && $this->in_comments($id);
+    }
+
+    public function is_post_in_permitted_parent_category($post_id) {
+        return (($this->bitmap & 1) === 1) && $this->post_in_parent_categories($post_id);
+    }
+
+    public function is_permitted_parent_category($id) {
+        return (($this->bitmap & 1) === 1) && $this->in_parent_categories($id);
+    }
+}
diff --git a/classes/class.bPermissionCollection.php b/classes/class.bPermissionCollection.php
new file mode 100644 (file)
index 0000000..d0c1366
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+/**
+ * Description of bPermissionCollection
+ *
+ * @author nur
+ */
+class BPermissionCollection {
+    protected $permissions;
+    protected static $instance;
+    
+    protected function __construct() {
+        $this->permissions = array();
+    }
+    
+    public static function get_instance(){
+        self::$_this = empty(self::$_this)? new BPermissionCollection():self::$_this;
+        return self::$_this;
+    }    
+    
+    public function load($level_ids = array()){
+        if (empty($level_ids)){
+            global $wpdb;
+            $level_ids = $wpdb->get_col("SELECT id FROM {$wpdb->prefix}swpm_membership_tbl WHERE id != 1");
+        }
+        
+        foreach($level_ids as $id){
+            $this->permissions[] = BPermission::get_instance($id);
+        }
+    }
+    
+    public function get_permitted_levels($post_id){
+        $levels = array();
+        
+        foreach($this->permissions as $permission){
+            if ($permission->is_permitted($post_id)){
+                $levels[$permission->get($id)] = $permission->get('alias');
+            }
+        }
+        
+        return $levels;
+    }
+}
diff --git a/classes/class.bProtection.php b/classes/class.bProtection.php
new file mode 100644 (file)
index 0000000..be1f8b2
--- /dev/null
@@ -0,0 +1,66 @@
+<?php
+include_once('class.bProtectionBase.php');
+
+class BProtection extends BProtectionBase{
+    private static $_this;
+
+    private function __construct() {
+        $this->msg = "";
+        $this->init(1);
+    }
+
+    public static function get_instance() {
+        self::$_this = empty(self::$_this) ? (new BProtection()) : self::$_this;
+        return self::$_this;
+    }
+
+    public function is_protected($id) {
+        if ($this->post_in_parent_categories($id) || $this->post_in_categories($id)) {
+            $this->msg = '<p style="background: #FFF6D5; border: 1px solid #D1B655; color: #3F2502; margin: 10px 0px 10px 0px; padding: 5px 5px 5px 10px;">
+                    The category or parent category of this post is protected. You can change the category protection settings from the <a href="admin.php?page=eMember_membership_level_menu&level_action=2" target="_blank">manage content protection</a> menu.
+                    </p>';
+            return true;
+        }
+        return $this->in_posts($id) || $this->in_pages($id) || $this->in_attachments($id) || $this->in_custom_posts($id);
+    }
+
+    public function get_last_message() {
+        return $this->msg;
+    }
+
+    public function is_protected_post($id) {
+        return /* (($this->bitmap&4) != 4) && */ $this->in_posts($id);
+    }
+
+    public function is_protected_page($id) {
+        return /* (($this->bitmap&4) != 4) && */ $this->in_pages($id);
+    }
+
+    public function is_protected_attachment($id) {
+        return /* (($this->bitmap&16)!=16) && */ $this->in_attachments($id);
+    }
+
+    public function is_protected_custom_post($id) {
+        return /* (($this->bitmap&32)!=32) && */ $this->in_custom_posts($id);
+    }
+
+    public function is_protected_comment($id) {
+        return /* (($this->bitmap&2)!=2) && */ $this->in_comments($id);
+    }
+
+    public function is_post_in_protected_category($post_id) {
+        return /* (($this->bitmap&1)!=1) && */ $this->post_in_categories($post_id);
+    }
+
+    public function is_post_in_protected_parent_category($post_id) {
+        return /* (($this->bitmap&1)!=1) && */ $this->post_in_parent_categories($post_id);
+    }
+
+    public function is_protected_category($id) {
+        return /* (($this->bitmap&1)!=1) && */ $this->in_categories($id);
+    }
+
+    public function is_protected_parent_category($id) {
+        return /* (($this->bitmap&1)!=1) && */ $this->in_parent_categories($id);
+    }
+}
diff --git a/classes/class.bProtectionBase.php b/classes/class.bProtectionBase.php
new file mode 100644 (file)
index 0000000..065de48
--- /dev/null
@@ -0,0 +1,296 @@
+<?php
+
+abstract class BProtectionBase {
+
+    protected $bitmap;
+    protected $posts;
+    protected $pages;
+    protected $comments;
+    protected $categories;
+    protected $attachments;
+    protected $custom_posts;
+    protected $details;
+    protected $options;
+
+    private function __construct() {
+
+    }
+
+    protected function init($level_id) {
+        global $wpdb;
+        $this->owning_level_id = $level_id;
+        $query = $wpdb->prepare("SELECT * FROM {$wpdb->prefix}swpm_membership_tbl WHERE "
+                . (is_numeric($level_id) ? 'id = %d' : 'md5(id) = %s' ), $level_id);
+        $result = $wpdb->get_row($query);
+
+        $this->bitmap = isset($result->permissions) ? $result->permissions : 0;
+        $this->posts = isset($result->post_list) ? (array) unserialize($result->post_list) : array();
+        $this->pages = isset($result->page_list) ? (array) unserialize($result->page_list) : array();
+        $this->comments = isset($result->comment_list) ? (array) unserialize($result->comment_list) : array();
+        $this->categories = isset($result->category_list) ? (array) unserialize($result->category_list) : array();
+        $this->attachments = isset($result->attachment_list) ? (array) unserialize($result->attachment_list) : array();
+        $this->custom_posts = isset($result->custom_post_list) ? (array) unserialize($result->custom_post_list) : array();
+        $this->options = isset($result->options) ? (array) unserialize($result->options) : array();
+        $this->disable_bookmark = isset($result->disable_bookmark_list) ? (array) unserialize($result->disable_bookmark_list) : array();
+        $this->details = (array) $result;
+    }
+
+    public function apply($ids, $type) {
+        $post_types = get_post_types(array('public' => true, '_builtin' => false));
+        if (in_array($type, $post_types)) {
+            $type = 'custom_post';
+        }
+        return $this->update_perms($ids, true, $type);
+    }
+
+    public function remove($ids, $type) {
+        $post_types = get_post_types(array('public' => true, '_builtin' => false));
+        if (in_array($type, $post_types)) {
+            $type = 'custom_post';
+        }
+        return $this->update_perms($ids, false, $type);
+    }
+
+    public function get_options() {
+        return $this->options;
+    }
+
+    public function get_posts() {
+        return $this->posts;
+    }
+
+    public function get_pages() {
+        return $this->pages;
+    }
+
+    public function get_comments() {
+        return $this->comments;
+    }
+
+    public function get_categories() {
+        return $this->categories;
+    }
+
+    public function get_attachments() {
+        return $this->attachments;
+    }
+
+    public function get_custom_posts() {
+        return $this->custom_posts;
+    }
+
+    public function is_bookmark_disabled($id) {
+        $posts = isset($this->disable_bookmark['posts']) ?
+                (array) $this->disable_bookmark['posts'] : array();
+        $pages = isset($this->disable_bookmark['pages']) ?
+                (array) $this->disable_bookmark['pages'] : array();
+        return in_array($id, $pages) || in_array($id, $posts);
+    }
+
+    public function in_posts($id) {
+        return (/* ($this->bitmap&4)===4) && */in_array($id, (array) $this->posts));
+    }
+
+    public function in_pages($id) {
+        return (/* ($this->bitmap&8)===8) && */ in_array($id, (array) $this->pages));
+    }
+
+    public function in_attachments($id) {
+        return (/* ($this->bitmap&16)===16) && */in_array($id, (array) $this->attachments));
+    }
+
+    public function in_custom_posts($id) {
+        return (/* ($this->bitmap&32)===32) && */ in_array($id, (array) $this->custom_posts));
+    }
+
+    public function in_comments($id) {
+        return (/* ($this->bitmap&2)===2) && */ in_array($id, (array) $this->comments));
+    }
+
+    public function in_categories($id) {
+        if (empty($this->categories))
+            return false;
+        return (/* ($this->bitmap&1)===1) && */ in_array($id, (array) $this->categories));
+    }
+
+    public function post_in_categories($post_id) {
+        if (empty($this->categories))
+            return false;
+        return (/* ($this->bitmap&1)===1) && */ in_category((array) $this->categories, $post_id));
+    }
+
+    public function in_parent_categories($id) {
+        if (empty($this->categories))
+            return false;
+        $parents = explode(',', get_category_parents($id, false, ','));
+        $parents = array_unique($parents);
+        foreach ($parents as $parent) {
+            if (empty($parent))
+                continue;
+            if (/* (($this->bitmap&1)===1) && */(in_array($parent, (array) $this->categories)))
+                return true;
+        }
+        return false;
+    }
+
+    public function post_in_parent_categories($post_id) {
+        if (empty($this->categories))
+            return false;
+        $cats = get_the_category($post_id);
+        $parents = array();
+        foreach ($cats as $key => $cat) {
+            $parents = array_merge($parents, explode(',', get_category_parents($cat->cat_ID, false, ',')));
+        }
+        $parents = array_unique($parents);
+        foreach ($parents as $parent) {
+            if (empty($parent))
+                continue;
+            if (/* (($this->bitmap&1)===1) && */(in_array(get_cat_ID($parent), (array) $this->categories)))
+                return true;
+        }
+        return false;
+    }
+
+    public function add_posts($ids) {
+        return $this->update_perms($ids, true, 'post');
+    }
+
+    public function add_pages($ids) {
+        return $this->update_perms($ids, true, 'page');
+    }
+
+    public function add_attachments($ids) {
+        return $this->update_perms($ids, true, 'attachment');
+    }
+
+    public function add_comments($ids) {
+        return $this->update_perms($ids, true, 'comment');
+    }
+
+    public function add_categories($ids) {
+        return $this->update_perms($ids, true, 'category');
+    }
+
+    public function add_custom_posts($ids) {
+        return $this->update_perms($ids, true, 'custom_post');
+    }
+
+    public function remove_posts($ids) {
+        return $this->update_perms($ids, false, 'post');
+    }
+
+    public function remove_pages($ids) {
+        return $this->update_perms($ids, false, 'page');
+    }
+
+    public function remove_attachments($ids) {
+        return $this->update_perms($ids, false, 'attachment');
+    }
+
+    public function remove_comments($ids) {
+        return $this->update_perms($ids, false, 'comment');
+    }
+
+    public function remove_categories($ids) {
+        return $this->update_perms($ids, false, 'category');
+    }
+
+    public function remove_custom_posts($ids) {
+        return $this->update_perms($ids, false, 'custom_post');
+    }
+
+    private function update_perms($ids, $set, $type) {
+        $list = null;
+        $index = '';
+        if (empty($ids)) {
+            return $this;
+        }
+        $ids = (array) $ids;
+        switch ($type) {
+            case 'page':
+                $list = $this->pages;
+                $index = 'page_list';
+                break;
+            case 'post':
+                $list = $this->posts;
+                $index = 'post_list';
+                break;
+            case 'attachment':
+                $list = $this->attachments;
+                $index = 'attachment_list';
+                break;
+            case 'comment':
+                $list = $this->comments;
+                $index = 'comment_list';
+                break;
+            case 'category':
+                $list = $this->categories;
+                $index = 'category_list';
+                break;
+            case 'custom_post':
+                $list = $this->custom_posts;
+                $index = 'custom_post_list';
+                break;
+            default:
+                break;
+        }
+
+        if (!empty($index)) {
+            if ($set) {
+                $list = array_merge($list, $ids);
+                $list = array_unique($list);
+            } else {
+                $list = array_diff($list, $ids);
+            }
+            switch ($type) {
+                case 'page':
+                    $this->pages = $list;
+                    break;
+                case 'post':
+                    $this->posts = $list;
+                    break;
+                case 'attachment':
+                    $this->attachments = $list;
+                    break;
+                case 'comment':
+                    $this->comments = $list;
+                    break;
+                case 'category':
+                    $this->categories = $list;
+                    break;
+                case 'custom_post':
+                    $this->custom_posts = $list;
+                    break;
+                default:
+                    break;
+            }
+            $this->details[$index] = $list;
+        }
+        return $this;
+    }
+
+    public function save() {
+        global $wpdb;
+        $data = array();
+
+        $list_type = array('page_list', 'post_list', 'attachment_list',
+            'custom_post_list', 'comment_list', 'category_list');
+        foreach ($this->details as $key => $value) {
+            if ($key == 'id')
+                continue;
+            if (is_serialized($value) || !in_array($key, $list_type))
+                $data[$key] = $value;
+            else
+                $data[$key] = serialize($value);
+        }
+        $wpdb->update($wpdb->prefix . "swpm_membership_tbl", $data, array('id' => $this->owning_level_id));
+    }
+
+    public function get($key, $default = '') {
+        if (isset($this->details[$key])) {
+            return $this->details[$key];
+        }
+        return $default;
+    }
+
+}
diff --git a/classes/class.bRegistration.php b/classes/class.bRegistration.php
new file mode 100644 (file)
index 0000000..ecb3aaa
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * Description of BRegistration
+ *
+ * @author nur
+ */
+abstract class BRegistration {
+    protected $member_info = array();
+    protected static $_intance = null;
+    //public abstract static function get_instance();
+    protected function send_reg_email(){
+        global $wpdb;
+        if (empty($this->member_info)) {return false;}
+        $member_info = $this->member_info;
+        $settings = BSettings::get_instance();
+        $subject = $settings->get_value('reg-complete-mail-subject');
+        $body = $settings->get_value('reg-complete-mail-body');
+        $from_address = $settings->get_value('email-from');
+        $login_link = $settings->get_value('login-page-url');
+        $headers = 'From: ' . $from_address . "\r\n";
+        $member_info['membership_level_name'] = BPermission::get_instance($member_info['membership_level'])->get('alias');
+        $member_info['password'] = $member_info['plain_password'];
+        $member_info['login_link'] = $login_link;
+        $values = array_values($member_info);
+        $keys = array_map('swpm_enclose_var', array_keys($member_info));
+        $body = str_replace($keys, $values, $body);
+        $email = sanitize_email(filter_input(INPUT_POST, 'email', FILTER_UNSAFE_RAW));
+        wp_mail(trim($email), $subject, $body, $headers);
+        if ($settings->get_value('enable-admin-notification-after-reg')) {
+            $subject = "Notification of New Member Registration";
+            $body = "A new member has registered. The following email was sent to the member." .
+                    "\n\n-------Member Email----------\n" . $body .
+                    "\n\n------End------\n";
+            wp_mail($from_address, $subject, $body, $headers);
+        }
+        return true;
+    }
+}
+function swpm_enclose_var($n){
+    return '{'.$n .'}';
+}
diff --git a/classes/class.bSession.php b/classes/class.bSession.php
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/classes/class.bSettings.php b/classes/class.bSettings.php
new file mode 100644 (file)
index 0000000..be49a41
--- /dev/null
@@ -0,0 +1,395 @@
+<?php
+
+class BSettings {
+
+    private static $_this;
+    private $settings;
+    public $current_tab;
+    private $tabs;
+    private function __construct() {
+        $this->settings = (array) get_option('swpm-settings');
+    }
+    public function init_config_hooks(){
+        $page = filter_input(INPUT_GET, 'page');
+//        if($page == 'simple_wp_membership_settings'){
+        if(is_admin()){ // for frontend just load settings but dont try to render settings page.
+            $tab = filter_input(INPUT_GET, 'tab');
+            $tab = empty($tab)?filter_input(INPUT_POST, 'tab'):$tab;
+            $this->current_tab = empty($tab) ? 1 : $tab;
+            $this->tabs = array(1=> 'General Settings', 2=> 'Payment Settings',
+                                3=> 'Email Settings', 4=> 'Tools', 5=>'Advanced Settings', 6=> 'Addons Settings');                    
+            add_action('swpm-draw-tab', array(&$this, 'draw_tabs'));
+            $method = 'tab_' . $this->current_tab;
+            if (method_exists($this, $method)){
+                $this->$method();
+            }
+        }
+    }
+    private function tab_1() {
+                
+        register_setting('swpm-settings-tab-1', 'swpm-settings', array(&$this, 'sanitize_tab_1'));
+        
+        //This settings section has no heading
+        add_settings_section('swpm-general-post-submission-check', '',
+                array(&$this, 'swpm_general_post_submit_check_callback'), 'simple_wp_membership_settings');
+        
+        add_settings_section('swpm-documentation', BUtils::_('Plugin Documentation'),
+                array(&$this, 'swpm_documentation_callback'), 'simple_wp_membership_settings');
+        add_settings_section('general-settings', BUtils::_('General Settings'),
+                array(&$this, 'general_settings_callback'), 'simple_wp_membership_settings');
+        add_settings_field('enable-free-membership', BUtils::_('Enable Free Membership'),
+                array(&$this, 'checkbox_callback'), 'simple_wp_membership_settings', 'general-settings',
+                array('item' => 'enable-free-membership',
+                      'message'=> BUtils::_('Enable/disable registration for free membership level. When you enable this option, make sure to specify a free membership level ID in the field below.')));
+        add_settings_field('free-membership-id', BUtils::_('Free Membership Level ID'),
+                array(&$this, 'textfield_small_callback'), 'simple_wp_membership_settings', 'general-settings',
+                array('item' => 'free-membership-id',
+                      'message'=> BUtils::_('Assign free membership level ID')));
+        add_settings_field('enable-moretag', BUtils::_('Enable More Tag Protection'),
+                array(&$this, 'checkbox_callback'), 'simple_wp_membership_settings', 'general-settings',
+                array('item' => 'enable-moretag',
+                      'message'=> BUtils::_('Enables or disables "more" tag protection in the posts and pages. Anything after the More tag is protected. Anything before the more tag is teaser content.')));        
+        add_settings_field('hide-adminbar',  BUtils::_('Hide Adminbar'),
+                array(&$this, 'checkbox_callback'), 'simple_wp_membership_settings', 'general-settings',
+                array('item' => 'hide-adminbar',
+                      'message'=>BUtils::_('WordPress shows an admin toolbar to the logged in users of the site. Check this box if you want to hide that admin toolbar in the fronend of your site.')));
+        
+        add_settings_field('default-account-status',  BUtils::_('Default Account Status'),
+                array(&$this, 'selectbox_callback'), 'simple_wp_membership_settings', 'general-settings',
+                array('item' => 'default-account-status',
+                      'options'=>  BUtils::get_account_state_options(),
+                      'default'=>'active',
+                      'message'=>BUtils::_('Select the default account status for newly registered users. If you want to manually approve the members then you can set the status to "Pending".')));
+        add_settings_field('allow-account-deletion',  BUtils::_('Allow Account Deletion'),
+                array(&$this, 'checkbox_callback'), 'simple_wp_membership_settings', 'general-settings',
+                array('item' => 'allow-account-deletion',
+                      'options'=>  BUtils::get_account_state_options(),
+                      'message'=>BUtils::_('Allow users to delete their accounts.')));        
+        add_settings_field('delete-pending-account',  BUtils::_('Auto Delete Pending Account'),
+                array(&$this, 'selectbox_callback'), 'simple_wp_membership_settings', 'general-settings',
+                array('item' => 'delete-pending-account',
+                      'options'=>  array(0 => 'Do not delete', 1=>'Older than 1 month', 2=> 'Older than 2 months'),
+                      'default'=>'0',
+                      'message'=>BUtils::_('Select how long you want to keep "pending" account.')));        
+        /*add_settings_field('protect-everything',  BUtils::_('Protect Everything'),
+                array(&$this, 'checkbox_callback'), 'simple_wp_membership_settings', 'general-settings', 
+                array('item' => 'protect-everything',
+                      'message'=>BUtils::_('Check this box if you want to protect all posts/pages by default.')));*/
+        
+        add_settings_section('pages-settings', BUtils::_('Pages Settings'),
+                array(&$this, 'pages_settings_callback'), 'simple_wp_membership_settings');
+        add_settings_field('login-page-url', BUtils::_('Login Page URL'),
+                array(&$this, 'textfield_long_callback'), 'simple_wp_membership_settings', 'pages-settings',
+                array('item' => 'login-page-url',
+                      'message'=>''));
+        add_settings_field('registration-page-url', BUtils::_('Registration Page URL'),
+                array(&$this, 'textfield_long_callback'), 'simple_wp_membership_settings', 'pages-settings',
+                array('item' => 'registration-page-url',
+                      'message'=>''));
+        add_settings_field('join-us-page-url', BUtils::_('Join Us Page URL'),
+                array(&$this, 'textfield_long_callback'), 'simple_wp_membership_settings', 'pages-settings',
+                array('item' => 'join-us-page-url',
+                      'message'=>''));
+        add_settings_field('profile-page-url', BUtils::_('Edit Profile Page URL'),
+                array(&$this, 'textfield_long_callback'), 'simple_wp_membership_settings', 'pages-settings',
+                array('item' => 'profile-page-url',
+                      'message'=>''));
+        add_settings_field('reset-page-url', BUtils::_('Password Reset Page URL'),
+                array(&$this, 'textfield_long_callback'), 'simple_wp_membership_settings', 'pages-settings',
+                array('item' => 'reset-page-url',
+                      'message'=>''));
+
+        add_settings_section('debug-settings', BUtils::_('Test & Debug Settings'),
+                array(&$this, 'testndebug_settings_callback'), 'simple_wp_membership_settings');
+        
+        $debug_field_help_text = BUtils::_('Check this option to enable debug logging.');
+        $debug_field_help_text .= '<br />- View debug log file by clicking <a href="'.SIMPLE_WP_MEMBERSHIP_URL.'/log.txt" target="_blank">here</a>.';
+        $debug_field_help_text .= '<br />- Reset debug log file by clicking <a href="admin.php?page=simple_wp_membership_settings&swmp_reset_log=1" target="_blank">here</a>.';
+        add_settings_field('enable-debug', 'Enable Debug',
+                array(&$this, 'checkbox_callback'), 'simple_wp_membership_settings', 'debug-settings',
+                array('item' => 'enable-debug',
+                      'message'=> $debug_field_help_text));
+        add_settings_field('enable-sandbox-testing', BUtils::_('Enable Sandbox Testing'),
+                array(&$this, 'checkbox_callback'), 'simple_wp_membership_settings', 'debug-settings',
+                array('item' => 'enable-sandbox-testing',
+                      'message'=>BUtils::_('Enable this option if you want to do sandbox payment testing.')));
+
+    }
+
+    private function tab_2() {
+    }
+
+    private function tab_3() {
+        register_setting('swpm-settings-tab-3', 'swpm-settings', array(&$this, 'sanitize_tab_3'));
+
+        add_settings_section('email-misc-settings', BUtils::_('Email Misc. Settings'),
+                array(&$this, 'email_misc_settings_callback'), 'simple_wp_membership_settings');
+        add_settings_field('email-misc-from', BUtils::_('From Email Address'),
+                array(&$this, 'textfield_callback'), 'simple_wp_membership_settings', 'email-misc-settings',
+                array('item' => 'email-from',
+                    'message'=>''));
+
+        add_settings_section('reg-prompt-email-settings', BUtils::_('Email Settings (Prompt to Complete Registration )'),
+                array(&$this, 'reg_prompt_email_settings_callback'), 'simple_wp_membership_settings');
+        add_settings_field('reg-prompt-complete-mail-subject', BUtils::_('Email Subject'),
+                array(&$this, 'textfield_callback'), 'simple_wp_membership_settings', 'reg-prompt-email-settings',
+                array('item' => 'reg-prompt-complete-mail-subject',
+                      'message'=>''));
+        add_settings_field('reg-prompt-complete-mail-body', BUtils::_('Email Body'),
+                array(&$this, 'textarea_callback'), 'simple_wp_membership_settings', 'reg-prompt-email-settings',
+                array('item' => 'reg-prompt-complete-mail-body',
+                      'message'=>''));
+
+        add_settings_section('reg-email-settings', BUtils::_('Email Settings (Registration Complete)'),
+                array(&$this, 'reg_email_settings_callback'), 'simple_wp_membership_settings');
+        add_settings_field('reg-complete-mail-subject', BUtils::_('Email Subject'),
+                array(&$this, 'textfield_callback'), 'simple_wp_membership_settings', 'reg-email-settings',
+                array('item' => 'reg-complete-mail-subject',
+                      'message'=>''));
+        add_settings_field('reg-complete-mail-body', BUtils::_('Email Body'),
+                array(&$this, 'textarea_callback'), 'simple_wp_membership_settings', 'reg-email-settings',
+                array('item' => 'reg-complete-mail-body',
+                      'message'=>''));
+        add_settings_field('enable-admin-notification-after-reg', BUtils::_('Send Notification To Admin'),
+                array(&$this, 'checkbox_callback'), 'simple_wp_membership_settings', 'reg-email-settings',
+                array('item' => 'enable-admin-notification-after-reg',
+                      'message'=>''));
+        add_settings_field('enable-notification-after-manual-user-add', BUtils::_('Send Email to Member When Added via Admin Dashboard'),
+                array(&$this, 'checkbox_callback'), 'simple_wp_membership_settings', 'reg-email-settings',
+                array('item' => 'enable-notification-after-manual-user-add',
+                      'message'=>''));
+
+        add_settings_section('upgrade-email-settings', BUtils::_(' Email Settings (Account Upgrade Notification)'),
+                array(&$this, 'upgrade_email_settings_callback'), 'simple_wp_membership_settings');
+        add_settings_field('upgrade-complete-mail-subject', BUtils::_('Email Subject'),
+                array(&$this, 'textfield_callback'), 'simple_wp_membership_settings', 'upgrade-email-settings',
+                array('item' => 'upgrade-complete-mail-subject',
+                      'message'=>''));
+        add_settings_field('upgrade-complete-mail-body', BUtils::_('Email Body'),
+                array(&$this, 'textarea_callback'), 'simple_wp_membership_settings', 'upgrade-email-settings',
+                array('item' => 'upgrade-complete-mail-body',
+                      'message'=>''));
+    }
+    
+    private function tab_4(){
+    }
+    
+    private function tab_5(){
+        register_setting('swpm-settings-tab-5', 'swpm-settings', array(&$this, 'sanitize_tab_5'));
+
+        add_settings_section('advanced-settings', BUtils::_('Advanced Settings'),
+                array(&$this, 'advanced_settings_callback'), 'simple_wp_membership_settings');
+        
+        add_settings_field('enable-expired-account-login', BUtils::_('Enable Expired Account Login'),
+                array(&$this, 'checkbox_callback'), 'simple_wp_membership_settings', 'advanced-settings',
+                array('item' => 'enable-expired-account-login',
+                      'message'=>BUtils::_("When enabled, expired members will be able to log into the system but won't be able to view any protected content. This allows them to easily renew their account by making another payment.")));
+    }
+    
+    private function tab_6(){
+    }
+    
+    public static function get_instance() {
+        self::$_this = empty(self::$_this) ? new BSettings() : self::$_this;
+        return self::$_this;
+    }
+    public function selectbox_callback($args){
+        $item = $args['item'];
+        $options = $args['options'];
+        $default = $args['default'];
+        $msg = isset($args['message'])?$args['message']: '';
+        $selected = esc_attr($this->get_value($item), $default);
+        echo "<select name='swpm-settings[" . $item . "]' >";
+        foreach($options as $key => $value){
+            $is_selected = ($key == $selected)? 'selected="selected"': '';
+            echo '<option ' . $is_selected . ' value="'. esc_attr($key) . '">' . esc_attr($value) . '</option>';
+        }
+        echo '</select>';
+        echo '<br/><i>'.$msg.'</i>';        
+    }
+    public function checkbox_callback($args) {
+        $item = $args['item'];
+        $msg = isset($args['message'])?$args['message']: '';
+        $is = esc_attr($this->get_value($item));
+        echo "<input type='checkbox' $is name='swpm-settings[" . $item . "]' value=\"checked='checked'\" />";
+        echo '<br/><i>'.$msg.'</i>';
+    }
+
+    public function textarea_callback($args) {
+        $item = $args['item'];
+        $msg = isset($args['message'])?$args['message']: '';
+        $text = esc_attr($this->get_value($item));
+        echo "<textarea name='swpm-settings[" . $item . "]'  rows='6' cols='60' >" . $text . "</textarea>";
+        echo '<br/><i>'.$msg.'</i>';
+    }
+
+    public function textfield_small_callback($args) {
+        $item = $args['item'];
+        $msg = isset($args['message'])?$args['message']: '';
+        $text = esc_attr($this->get_value($item));
+        echo "<input type='text' name='swpm-settings[" . $item . "]'  size='5' value='" . $text . "' />";
+        echo '<br/><i>'.$msg.'</i>';
+    }
+
+    public function textfield_callback($args) {
+        $item = $args['item'];
+        $msg = isset($args['message'])?$args['message']: '';
+        $text = esc_attr($this->get_value($item));
+        echo "<input type='text' name='swpm-settings[" . $item . "]'  size='50' value='" . $text . "' />";
+        echo '<br/><i>'.$msg.'</i>';
+    }
+
+    public function textfield_long_callback($args) {
+        $item = $args['item'];
+        $msg = isset($args['message'])?$args['message']: '';
+        $text = esc_attr($this->get_value($item));
+        echo "<input type='text' name='swpm-settings[" . $item . "]'  size='100' value='" . $text . "' />";
+        echo '<br/><i>'.$msg.'</i>';
+    }
+
+    public function swpm_documentation_callback() {
+        ?>
+        <div style="background: none repeat scroll 0 0 #FFF6D5;border: 1px solid #D1B655;color: #3F2502;margin: 10px 0;padding: 5px 5px 5px 10px;text-shadow: 1px 1px #FFFFFF;">
+        <p>Visit the
+        <a target="_blank" href="https://simple-membership-plugin.com/">Simple Membership Plugin Site</a>
+        to read setup and configuration documentation. Please <a href="https://wordpress.org/support/view/plugin-reviews/simple-membership?filter=5" target="_blank">give us a rating</a> if you like the plugin.
+        </p>
+        </div>
+        <?php
+    }
+    
+    public function swpm_general_post_submit_check_callback(){
+        //Log file reset handler
+        if(isset($_REQUEST['swmp_reset_log'])){
+            if(miscUtils::reset_swmp_log_files()){
+                echo '<div id="message" class="updated fade"><p>Debug log files have been reset!</p></div>';
+            }
+            else{
+                echo '<div id="message" class="updated fade"><p>Debug log files could not be reset!</p></div>';
+            }
+        }
+        
+        //Show settings updated message
+        if(isset($_REQUEST['settings-updated'])){
+            echo '<div id="message" class="updated fade"><p>' . BUtils::_('Settings updated!') . '</p></div>';
+        }
+    }
+
+    public function general_settings_callback() {        
+        BUtils::e('General Plugin Settings.');
+    }
+
+    public function pages_settings_callback() {
+        BUtils::e('Page Setup and URL Related settings.');
+    }
+    public function testndebug_settings_callback(){
+        BUtils::e('Testing and Debug Related Settings.');
+    }
+    public function reg_email_settings_callback() {
+        BUtils::e('This email will be sent to your users when they complete the registration and become a member.');
+    }
+    public function email_misc_settings_callback(){
+        BUtils::e('Settings in this section apply to all emails.');
+    }
+    public function upgrade_email_settings_callback() {
+        BUtils::e('This email will be sent to your users after account upgrade.');
+    }
+    public function reg_prompt_email_settings_callback() {
+        BUtils::e('This email will be sent to prompt user to complete registration.');
+    }
+    public function advanced_settings_callback(){
+        BUtils::e('This page allows you to configure some advanced features of the plugin.');
+    }
+    
+    public function sanitize_tab_1($input) {
+        if (empty($this->settings)){
+            $this->settings = (array) get_option('swpm-settings');
+        }
+        $output = $this->settings;
+        //general settings block
+       
+        $output['hide-adminbar']          = isset($input['hide-adminbar'])? esc_attr($input['hide-adminbar']) : "";
+        $output['protect-everything']     = isset($input['protect-everything'])? esc_attr($input['protect-everything']) : "";
+        $output['enable-free-membership'] = isset($input['enable-free-membership'])? esc_attr($input['enable-free-membership']) : "";
+        $output['enable-moretag']         = isset($input['enable-moretag'])? esc_attr($input['enable-moretag']) : "";
+        $output['enable-debug']           = isset($input['enable-debug'])? esc_attr($input['enable-debug']) : "";        
+        $output['enable-sandbox-testing'] = isset($input['enable-sandbox-testing'])? esc_attr($input['enable-sandbox-testing']) : "";        
+        $output['allow-account-deletion'] = isset($input['allow-account-deletion'])? esc_attr($input['allow-account-deletion']) : "";
+        
+        $output['free-membership-id'] = ($input['free-membership-id'] != 1) ? absint($input['free-membership-id']) : '';
+        $output['login-page-url'] = esc_url($input['login-page-url']);
+        $output['registration-page-url'] = esc_url($input['registration-page-url']);
+        $output['profile-page-url'] = esc_url($input['profile-page-url']);
+        $output['reset-page-url'] = esc_url($input['reset-page-url']);
+        $output['join-us-page-url'] = esc_url($input['join-us-page-url']);
+        $output['default-account-status'] = esc_attr($input['default-account-status']);
+        return $output;
+    }
+
+    public function sanitize_tab_3($input) {
+        if (empty($this->settings)){
+            $this->settings = (array) get_option('swpm-settings');
+        }
+        $output = $this->settings;
+        $output['reg-complete-mail-subject'] = sanitize_text_field($input['reg-complete-mail-subject']);
+        $output['reg-complete-mail-body'] = wp_kses_data(force_balance_tags($input['reg-complete-mail-body']));
+
+        $output['upgrade-complete-mail-subject'] = sanitize_text_field($input['upgrade-complete-mail-subject']);
+        $output['upgrade-complete-mail-body'] = wp_kses_data(force_balance_tags($input['upgrade-complete-mail-body']));
+
+        $output['reg-prompt-complete-mail-subject'] = sanitize_text_field($input['reg-prompt-complete-mail-subject']);
+        $output['reg-prompt-complete-mail-body'] = wp_kses_data(force_balance_tags($input['reg-prompt-complete-mail-body']));
+        $output['email-from'] = trim($input['email-from']);
+        $output['enable-admin-notification-after-reg'] = isset($input['enable-admin-notification-after-reg'])? esc_attr($input['enable-admin-notification-after-reg']) : "";
+        $output['enable-notification-after-manual-user-add'] = isset($input['enable-notification-after-manual-user-add'])? esc_attr($input['enable-notification-after-manual-user-add']) : "";
+        
+        return $output;
+    }
+    
+    public function sanitize_tab_5($input){
+        if (empty($this->settings)){
+            $this->settings = (array) get_option('swpm-settings');
+        }
+        $output = $this->settings;
+        $output['enable-expired-account-login'] = isset($input['enable-expired-account-login'])? esc_attr($input['enable-expired-account-login']) : "";
+        
+        return $output;
+    }
+    public function get_value($key, $default = "") {
+        if (isset($this->settings[$key])){
+            return $this->settings[$key];
+        }
+        return $default;
+    }
+
+    public function set_value($key, $value) {
+        $this->settings[$key] = $value;
+        return $this;
+    }
+
+    public function save() {
+        update_option('swpm-settings', $this->settings);
+    }
+
+    public function draw_tabs() {
+        $current = $this->current_tab;
+        ?>
+        <h3 class="nav-tab-wrapper">
+            <?php foreach ($this->tabs as $id=>$label):?>
+            <a class="nav-tab <?php echo ($current == $id) ? 'nav-tab-active' : ''; ?>" href="admin.php?page=simple_wp_membership_settings&tab=<?php echo  $id?>"><?php echo  $label?></a>
+            <?php endforeach;?>
+        </h3>
+        <?php
+    }
+
+    public function get_login_link() {
+        $login  = $this->get_value('login-page-url');
+        $joinus = $this->get_value('join-us-page-url');
+        if (empty ($login) || empty($joinus)){
+            return '<span style="color:red;">Simple Membership is not configured correctly.'
+            . 'Please contact <a href="mailto:' . get_option('admin_email'). '">Admin</a>';
+        }
+        return BUtils::_('Please'). ' <a class="swpm-login-link" href="' . $login . '">' . BUtils::_('Login') . '</a>. '. BUtils::_('Not a Member?').' <a href="' . $joinus . '">'.BUtils::_('Join Us').'</a>';
+    }
+
+}
diff --git a/classes/class.bTransactions.php b/classes/class.bTransactions.php
new file mode 100644 (file)
index 0000000..1336de9
--- /dev/null
@@ -0,0 +1,55 @@
+<?php\r
+\r
+/*\r
+ * Provides some helpful functions to deal with the transactions\r
+ */\r
+\r
+class BTransactions {\r
+\r
+    static function save_txn_record($ipn_data, $items = array()) {\r
+        global $wpdb;\r
+        \r
+        $current_date = date("Y-m-d");\r
+        $custom_var = BTransactions::parse_custom_var($ipn_data['custom']);\r
+        \r
+        $txn_data = array();\r
+        $txn_data['email'] = $ipn_data['payer_email'];\r
+        $txn_data['first_name'] = $ipn_data['first_name'];\r
+        $txn_data['last_name'] = $ipn_data['last_name'];\r
+        $txn_data['last_name'] = $ipn_data['last_name'];\r
+        $txn_data['ip_address'] = $ipn_data['ip'];\r
+        $txn_data['member_id'] = $ipn_data['swpm_id'];\r
+        $txn_data['membership_level'] = $custom_var['subsc_ref'];\r
+\r
+        $txn_data['txn_date'] = $current_date;\r
+        $txn_data['txn_id'] = $ipn_data['txn_id'];\r
+        $txn_data['subscr_id'] = $ipn_data['subscr_id'];\r
+        $txn_data['reference'] = $custom_var['reference'];\r
+        $txn_data['payment_amount'] = $ipn_data['mc_gross'];\r
+        $txn_data['gateway'] = $ipn_data['gateway'];\r
+        $txn_data['status'] = $ipn_data['status'];\r
+        \r
+        $wpdb->insert($wpdb->prefix . "swpm_payments_tbl", $txn_data);\r
+        \r
+    }\r
+\r
+    static function parse_custom_var($custom) {\r
+        $delimiter = "&";\r
+        $customvariables = array();\r
+\r
+        $namevaluecombos = explode($delimiter, $custom);\r
+        foreach ($namevaluecombos as $keyval_unparsed) {\r
+            $equalsignposition = strpos($keyval_unparsed, '=');\r
+            if ($equalsignposition === false) {\r
+                $customvariables[$keyval_unparsed] = '';\r
+                continue;\r
+            }\r
+            $key = substr($keyval_unparsed, 0, $equalsignposition);\r
+            $value = substr($keyval_unparsed, $equalsignposition + 1);\r
+            $customvariables[$key] = $value;\r
+        }\r
+        \r
+        return $customvariables;\r
+    }\r
+\r
+}
\ No newline at end of file
diff --git a/classes/class.bTransfer.php b/classes/class.bTransfer.php
new file mode 100644 (file)
index 0000000..e77722b
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+
+class BTransfer {
+
+    public static $default_fields = array(
+        'first_name' => '', 'last_name' => '',
+        'user_name' => '', 'email' => '',
+        'password' => '',
+        'phone' => '', 'account_state' => '',
+        'member_since' => '', 'subscription_starts' => '',
+        'address_street' => '', 'address_city' => '',
+        'address_state' => '', 'address_zipcode' => '',
+        'company_name' => '', 'country' => '',
+        'gender' => 'not specified',
+        'membership_level' => '2');
+    public static $default_level_fields = array(
+        'alias' => '', 'role' => '',
+        'subscription_period' => '', 'subscription_duration_type' => BMembershipLevel::NO_EXPIRY);
+    public static $admin_messages = array();
+    private static $_this;
+    private $message;
+
+    private function __contruct() {
+        $this->message = get_option('swpm-messages');
+    }
+
+    public static function get_instance() {
+        self::$_this = empty(self::$_this) ? new BTransfer() : self::$_this;
+        self::$_this->message = get_option('swpm-messages');
+        return self::$_this;
+    }
+
+    public function get($key) {
+        $sesion_key = $_COOKIE['swpm_session'];
+        $m = '';
+        if (isset($this->message[$sesion_key])){
+            $m = $this->message[$sesion_key]->get($key);
+        }
+        update_option('swpm-messages', $this->message);
+        return $m;
+    }
+
+    public function set($key, $value) {
+        $sesion_key = $_COOKIE['swpm_session'];
+        if (!isset($this->message[$sesion_key])){
+            $this->message[$sesion_key] = new BMessages();
+        }
+        $this->message[$sesion_key]->set($key,$value);
+        update_option('swpm-messages', $this->message);
+    }
+
+    public static function get_real_ip_addr() {
+        if (!empty($_SERVER['HTTP_CLIENT_IP'])){
+            $ip = $_SERVER['HTTP_CLIENT_IP'];
+        }
+        else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
+            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
+        }
+        else{
+            $ip = $_SERVER['REMOTE_ADDR'];
+        }
+        return $ip;
+    }
+
+}
diff --git a/classes/class.bUtils.php b/classes/class.bUtils.php
new file mode 100644 (file)
index 0000000..bfcd0ec
--- /dev/null
@@ -0,0 +1,385 @@
+<?php
+
+/**
+ * BUtils
+ *
+ * @author nur
+ */
+abstract class BUtils {
+
+    public static function is_ajax() {
+        return defined('DOING_AJAX') && DOING_AJAX;
+    }
+
+    public static function subscription_type_dropdown($selected) {
+        return '<option ' . (($selected == BMembershipLevel::NO_EXPIRY) ? 'selected="selected"' : "") . ' value="' . BMembershipLevel::NO_EXPIRY . '">No Expiry</option>' .
+                '<option ' . (($selected == BMembershipLevel::DAYS) ? 'selected="selected"' : "") . ' value="' . BMembershipLevel::DAYS . '">Day(s)</option>' .
+                '<option ' . (($selected == BMembershipLevel::WEEKS) ? 'selected="selected"' : "") . ' value="' . BMembershipLevel::WEEKS . '">Week(s)</option>' .
+                '<option ' . (($selected == BMembershipLevel::MONTHS) ? 'selected="selected"' : "") . ' value="' . BMembershipLevel::MONTHS . '">Month(s)</option>' .
+                '<option ' . (($selected == BMembershipLevel::YEARS) ? 'selected="selected"' : "") . ' value="' . BMembershipLevel::YEARS . '">Year(s)</option>' .
+                '<option ' . (($selected == BMembershipLevel::FIXED_DATE) ? 'selected="selected"' : "") . ' value="' . BMembershipLevel::FIXED_DATE . '">Fixed Date</option>';
+    }
+
+    // $subscript_period must be integer.
+    public static function calculate_subscription_period_days($subcript_period, $subscription_duration_type) {
+        if ($subscription_duration_type == BMembershipLevel::NO_EXPIRY) {
+            return 'noexpire';
+        }
+        if (!is_numeric($subcript_period)) {
+            throw new Exception(" subcript_period parameter must be integer in BUtils::calculate_subscription_period_days method");
+        }
+        switch (strtolower($subscription_duration_type)) {
+            case BMembershipLevel::DAYS:
+                break;
+            case BMembershipLevel::WEEKS:
+                $subcript_period = $subcript_period * 7;
+                break;
+            case BMembershipLevel::MONTHS:
+                $subcript_period = $subcript_period * 30;
+                break;
+            case BMembershipLevel::YEARS:
+                $subcript_period = $subcript_period * 365;
+                break;
+        }
+        return $subcript_period;
+    }
+
+    public static function get_expiration_timestamp($user) {
+        $permission = BPermission::get_instance($user->membership_level);
+        if (BMembershipLevel::FIXED_DATE == $permission->get('subscription_duration_type')) {
+            return strtotime($permission->get('subscription_period'));
+        }
+        $days = self::calculate_subscription_period_days(
+                        $permission->get('subscription_period'), $permission->get('subscription_duration_type'));
+        if ($days == 'noexpire') {
+            return PHP_INT_MAX; // which is equivalent to
+        }
+        return strtotime($user->subscription_starts . ' ' . $days . ' days');
+    }
+
+    public static function is_subscription_expired($user) {
+        $expiration_timestamp = BUtils::get_expiration_timestamp($user);
+        return $expiration_timestamp < time();
+    }
+
+    public static function gender_dropdown($selected = 'not specified') {
+        return '<option ' . ((strtolower($selected) == 'male') ? 'selected="selected"' : "") . ' value="male">Male</option>' .
+                '<option ' . ((strtolower($selected) == 'female') ? 'selected="selected"' : "") . ' value="female">Female</option>' .
+                '<option ' . ((strtolower($selected) == 'not specified') ? 'selected="selected"' : "") . ' value="not specified">Not Specified</option>';
+    }
+
+    public static function get_account_state_options() {
+        return array('active' => BUtils::_('Active'),
+            'inactive' => BUtils::_('Inactive'),
+            'pending' => BUtils::_('Pending'),
+            'expired' => BUtils::_('Expired'),);
+    }
+
+    public static function account_state_dropdown($selected = 'active') {
+        $options = self::get_account_state_options();
+        $html = '';
+        foreach ($options as $key => $value) {
+            $html .= '<option ' . ((strtolower($selected) == $key) ? 'selected="selected"' : "") . '  value="' . $key . '"> ' . $value . '</option>';
+        }
+        return $html;
+    }
+
+    public static function membership_level_dropdown($selected = 0) {
+        $options = '';
+        global $wpdb;
+        $query = "SELECT alias, id FROM " . $wpdb->prefix . "swpm_membership_tbl WHERE id != 1";
+        $levels = $wpdb->get_results($query);
+        foreach ($levels as $level) {
+            $options .= '<option ' . ($selected == $level->id ? 'selected="selected"' : '') . ' value="' . $level->id . '" >' . $level->alias . '</option>';
+        }
+        return $options;
+    }
+
+    public static function get_all_membership_level_ids() {
+        global $wpdb;
+        $query = "SELECT id FROM " . $wpdb->prefix . "swpm_membership_tbl WHERE id != 1";
+        return $wpdb->get_col($query);
+    }
+
+    public static function get_user_by_id($swpm_id) {
+        global $wpdb;
+        $query = $wpdb->prepare("SELECT user_name FROM {$wpdb->prefix}swpm_members_tbl WHERE member_id = %d", $swpm_id);
+        return $wpdb->get_var($query);
+    }
+
+    public static function get_user_by_user_name($swpm_user_name) {
+        global $wpdb;
+        $query = $wpdb->prepare("SELECT member_id FROM {$wpdb->prefix}swpm_members_tbl WHERE user_name = %s", $swpm_user_name);
+        return $wpdb->get_var($query);
+    }
+
+    public static function get_registration_link($for = 'all', $send_email = false, $member_id = '') {
+        $members = array();
+        global $wpdb;
+        switch ($for) {
+            case 'one':
+                if (empty($member_id)) {
+                    return array();
+                }
+                $query = $wpdb->prepare("SELECT * FROM  {$wpdb->prefix}swpm_members_tbl WHERE member_id =  %d", $member_id);
+                $members = $wpdb->get_results($query);
+                break;
+            case 'all':
+                $query = "SELECT * FROM  {$wpdb->prefix}swpm_members_tbl WHERE reg_code != '' ";
+                $members = $wpdb->get_results($query);
+                break;
+        }
+        $settings = BSettings::get_instance();
+        $separator = '?';
+        $url = $settings->get_value('registration-page-url');
+        if (strpos($url, '?') !== false) {
+            $separator = '&';
+        }
+        $subject = $settings->get_value('reg-complete-mail-subject');
+        if (empty($subject)) {
+            $subject = "Please complete your registration";
+        }
+        $body = $settings->get_value('reg-complete-mail-body');
+        if (empty($body)) {
+            $body = "Please use the following link to complete your registration. \n {reg_link}";
+        }
+        $from_address = $settings->get_value('email-from');
+        $links = array();
+        foreach ($members as $member) {
+            $reg_url = $url . $separator . 'member_id=' . $member->member_id . '&code=' . $member->reg_code;
+            if (!empty($send_email) && empty($member->user_name)) {
+                $tags = array("{first_name}", "{last_name}", "{reg_link}");
+                $vals = array($member->first_name, $member->last_name, $reg_url);
+                $email_body = str_replace($tags, $vals, $body);
+                $headers = 'From: ' . $from_address . "\r\n";
+                wp_mail($member->email, $subject, $email_body, $headers);
+            }
+            $links[] = $reg_url;
+        }
+        return $links;
+    }
+
+    public static function update_wp_user_Role($wp_user_id, $role) {
+        $preserve_role = 'yes';
+        if ($preserve_role) {
+            return;
+        }
+        if (self::is_multisite_install()) {//MS install
+            return; //TODO - don't do this for MS install
+        }
+        $caps = get_user_meta($wp_user_id, 'wp_capabilities', true);
+        if (in_array('administrator', array_keys((array) $caps))) {
+            return;
+        }
+        do_action('set_user_role', $wp_user_id, $role); //Fire the action for other plugin(s)
+        wp_update_user(array('ID' => $wp_user_id, 'role' => $role));
+        $roles = new WP_Roles();
+        $level = $roles->roles[$role]['capabilities'];
+        if (isset($level['level_10']) && $level['level_10']) {
+            update_user_meta($wp_user_id, 'wp_user_level', 10);
+            return;
+        }
+        if (isset($level['level_9']) && $level['level_9']) {
+            update_user_meta($wp_user_id, 'wp_user_level', 9);
+            return;
+        }
+        if (isset($level['level_8']) && $level['level_8']) {
+            update_user_meta($wp_user_id, 'wp_user_level', 8);
+            return;
+        }
+        if (isset($level['level_7']) && $level['level_7']) {
+            update_user_meta($wp_user_id, 'wp_user_level', 7);
+            return;
+        }
+        if (isset($level['level_6']) && $level['level_6']) {
+            update_user_meta($wp_user_id, 'wp_user_level', 6);
+            return;
+        }
+        if (isset($level['level_5']) && $level['level_5']) {
+            update_user_meta($wp_user_id, 'wp_user_level', 5);
+            return;
+        }
+        if (isset($level['level_4']) && $level['level_4']) {
+            update_user_meta($wp_user_id, 'wp_user_level', 4);
+            return;
+        }
+        if (isset($level['level_3']) && $level['level_3']) {
+            update_user_meta($wp_user_id, 'wp_user_level', 3);
+            return;
+        }
+        if (isset($level['level_2']) && $level['level_2']) {
+            update_user_meta($wp_user_id, 'wp_user_level', 2);
+            return;
+        }
+        if (isset($level['level_1']) && $level['level_1']) {
+            update_user_meta($wp_user_id, 'wp_user_level', 1);
+            return;
+        }
+        if (isset($level['level_0']) && $level['level_0']) {
+            update_user_meta($wp_user_id, 'wp_user_level', 0);
+            return;
+        }
+    }
+
+    public static function update_wp_user($wp_user_name, $swpm_data) {
+        $wp_user_info = array();
+        if (isset($swpm_data['email'])) {
+            $wp_user_info['user_email'] = $swpm_data['email'];
+        }
+        if (isset($swpm_data['first_name'])) {
+            $wp_user_info['first_name'] = $swpm_data['first_name'];
+        }
+        if (isset($swpm_data['last_name'])) {
+            $wp_user_info['last_name'] = $swpm_data['last_name'];
+        }
+        if (isset($swpm_data['plain_password'])) {
+            $wp_user_info['user_pass'] = $swpm_data['plain_password'];
+        }
+
+        $wp_user = get_user_by('login', $wp_user_name);
+
+        if ($wp_user) {
+            $wp_user_info['ID'] = $wp_user->ID;
+            return wp_update_user($wp_user_info);
+        }
+        return false;
+    }
+
+    public static function create_wp_user($wp_user_data) {
+        if (self::is_multisite_install()) {//MS install
+            global $blog_id;
+            if ($wp_user_id = email_exists($wp_user_data['user_email'])) {// if user exists then just add him to current blog.
+                add_existing_user_to_blog(array('user_id' => $wp_user_id, 'role' => 'subscriber'));
+                return $wp_user_id;
+            }
+            $wp_user_id = wpmu_create_user($wp_user_data['user_login'], $wp_user_data['password'], $wp_user_data['user_email']);
+            $role = 'subscriber'; //TODO - add user as a subscriber first. The subsequent update user role function to update the role to the correct one
+            add_user_to_blog($blog_id, $wp_user_id, $role);
+        } else {//Single site install
+            $wp_user_id = email_exists($wp_user_data['user_email']);
+            if ($wp_user_id) {
+                return $wp_user_id;
+            }
+            $wp_user_id = wp_create_user($wp_user_data['user_login'], $wp_user_data['password'], $wp_user_data['user_email']);
+        }
+        $wp_user_data['ID'] = $wp_user_id;
+        wp_update_user($wp_user_data);
+        $user_info = get_userdata($wp_user_id);
+        $user_cap = (isset($user_info->wp_capabilities) && is_array($user_info->wp_capabilities)) ? array_keys($user_info->wp_capabilities) : array();
+        if (!in_array('administrator', $user_cap)) {
+            BUtils::update_wp_user_Role($wp_user_id, $wp_user_data['role']);
+        }
+        return $wp_user_id;
+    }
+
+    public static function is_multisite_install() {
+        if (function_exists('is_multisite') && is_multisite()) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    public static function _($msg) {
+        return __($msg, 'swpm');
+    }
+
+    public static function e($msg) {
+        _e($msg, 'swpm');
+    }
+
+    public static function is_admin() {
+        return current_user_can('manage_options');
+    }
+
+    public static function get_expire_date($start_date, $subscription_duration, $subscription_duration_type) {
+        if ($subscription_duration_type == BMembershipLevel::FIXED_DATE) { //will expire after a fixed date.
+            return date(get_option('date_format'), strtotime($subscription_duration));
+        }
+        $expires = self::calculate_subscription_period_days($subscription_duration, $subscription_duration_type);
+        if ($expires == 'noexpire') {// its set to no expiry until cancelled
+            return BUtils::_('Never');
+        }
+
+        return date(get_option('date_format'), strtotime($start_date . ' ' . $expires . ' days'));
+    }
+
+    public static function swpm_username_exists($user_name) {
+        global $wpdb;
+        $member_table = $wpdb->prefix . 'swpm_members_tbl';
+        $query = $wpdb->prepare('SELECT member_id FROM ' . $member_table . ' WHERE user_name=%s', sanitize_user($user_name));
+        return $wpdb->get_var($query);
+    }
+
+    public static function get_free_level() {
+        $encrypted = filter_input(INPUT_POST, 'level_identifier');
+        global $wpdb;
+        if (!empty($encrypted)) {
+            return BPermission::get_instance($encrypted)->get('id');
+        }
+
+        $is_free = BSettings::get_instance()->get_value('enable-free-membership');
+        $free_level = absint(BSettings::get_instance()->get_value('free-membership-id'));
+
+        return ($is_free) ? $free_level : null;
+    }
+
+    public static function is_paid_registration() {
+        $member_id = filter_input(INPUT_GET, 'member_id', FILTER_SANITIZE_NUMBER_INT);
+        $code = filter_input(INPUT_GET, 'code', FILTER_SANITIZE_STRING);
+        return !empty($member_id) && !empty($code);
+    }
+
+    public static function get_paid_member_info() {
+        $member_id = filter_input(INPUT_GET, 'member_id', FILTER_SANITIZE_NUMBER_INT);
+        $code = filter_input(INPUT_GET, 'code', FILTER_SANITIZE_STRING);
+        global $wpdb;
+        if (!empty($member_id) && !empty($code)) {
+            $query = 'SELECT * FROM ' . $wpdb->prefix . 'swpm_members_tbl WHERE member_id= %d AND reg_code=%s';
+            $query = $wpdb->prepare($query, $member_id, $code);
+            return $wpdb->get_row($query);
+        }
+        return null;
+    }
+
+    public static function account_delete_confirmation_ui($msg = "") {
+        ob_start();
+        include(SIMPLE_WP_MEMBERSHIP_PATH . 'views/account_delete_warning.php');
+        ob_get_flush();
+        wp_die("", "", array('back_link' => true));
+    }
+
+    public static function delete_account_button() {
+        $allow_account_deletion = BSettings::get_instance()->get_value('allow-account-deletion');
+        if (empty($allow_account_deletion)) {
+            return "";
+        }
+
+        return '<a href="/?delete_account=1"><div class="swpm-account-delete-button">' . BUtils::_("Delete Account") . '</div></a>';
+    }
+
+    public static function encrypt_password($plain_password) {
+        include_once(ABSPATH . WPINC . '/class-phpass.php');
+        $wp_hasher = new PasswordHash(8, TRUE);
+        $password_hash = $wp_hasher->HashPassword(trim($plain_password));
+        return $password_hash;
+    }
+
+    public static function get_restricted_image_url() {
+        return SIMPLE_WP_MEMBERSHIP_URL . '/images/restricted-icon.png';
+    }
+
+    /*
+     * Checks if the string exists in the array key value of the provided array. If it doesn't exist, it returns the first key element from the valid values.
+     */
+
+    public static function sanitize_value_by_array($val_to_check, $valid_values) {
+        $keys = array_keys($valid_values);
+        $keys = array_map('strtolower', $keys);
+        if (in_array($val_to_check, $keys)) {
+            return $val_to_check;
+        }
+        return reset($keys); //Return he first element from the valid values
+    }
+
+}
diff --git a/classes/class.miscUtils.php b/classes/class.miscUtils.php
new file mode 100644 (file)
index 0000000..de16ab7
--- /dev/null
@@ -0,0 +1,167 @@
+<?php\r
+\r
+class miscUtils {\r
+\r
+    public static function create_mandatory_wp_pages() {\r
+        $settings = BSettings::get_instance();\r
+\r
+        //Create join us page\r
+        $swpm_join_page_content = '<p style="color:red;font-weight:bold;">This page and the content has been automatically generated for you to give you a basic idea of how a "Join Us" page should look like. You can customize this page however you like it by editing this page from your WordPress page editor.</p>';\r
+        $swpm_join_page_content .= '<p style="font-weight:bold;">If you end up changing the URL of this page then make sure to update the URL value in the settings menu of the plugin.</p>';\r
+        $swpm_join_page_content .= '<p style="border-top:1px solid #ccc;padding-top:10px;margin-top:10px;"></p>\r
+                       <strong>Free Membership</strong>\r
+                       <br />\r
+                       You get unlimited access to free membership content\r
+                       <br />\r
+                       <em><strong>Price: Free!</strong></em>\r
+                       <br /><br />Link the following image to go to the Registration Page if you want your visitors to be able to create a free membership account<br /><br />\r
+                       <img title="Join Now" src="' . SIMPLE_WP_MEMBERSHIP_URL . '/images/join-now-button-image.gif" alt="Join Now Button" width="277" height="82" />\r
+                       <p style="border-bottom:1px solid #ccc;padding-bottom:10px;margin-bottom:10px;"></p>';\r
+        $swpm_join_page_content .= '<p><strong>You can register for a Free Membership or pay for one of the following membership options</strong></p>';\r
+        $swpm_join_page_content .= '<p style="border-top:1px solid #ccc;padding-top:10px;margin-top:10px;"></p>\r
+                       [ ==> Insert Payment Button For Your Paid Membership Levels Here <== ]\r
+                       <p style="border-bottom:1px solid #ccc;padding-bottom:10px;margin-bottom:10px;"></p>';\r
+\r
+        $swpm_join_page = array(\r
+            'post_title' => 'Join Us',\r
+            'post_name' => 'membership-join',\r
+            'post_content' => $swpm_join_page_content,\r
+            'post_parent' => 0,\r
+            'post_status' => 'publish',\r
+            'post_type' => 'page',\r
+            'comment_status' => 'closed',\r
+            'ping_status' => 'closed'\r
+        );\r
+\r
+        $join_page_obj = get_page_by_path('membership-join');\r
+        if (!$join_page_obj) {\r
+            $join_page_id = wp_insert_post($swpm_join_page);\r
+        } else {\r
+            $join_page_id = $join_page_obj->ID;\r
+            if ($join_page_obj->post_status == 'trash') { //For cases where page may be in trash, bring it out of trash\r
+                wp_update_post(array('ID' => $join_page_obj->ID, 'post_status' => 'publish'));\r
+            }\r
+        }\r
+        $swpm_join_page_permalink = get_permalink($join_page_id);\r
+        $settings->set_value('join-us-page-url', $swpm_join_page_permalink);\r
+\r
+        //Create registration page\r
+        $swpm_rego_page = array(\r
+            'post_title' => BUtils::_('Registration'),\r
+            'post_name' => 'membership-registration',\r
+            'post_content' => '[swpm_registration_form]',\r
+            'post_parent' => $join_page_id,\r
+            'post_status' => 'publish',\r
+            'post_type' => 'page',\r
+            'comment_status' => 'closed',\r
+            'ping_status' => 'closed'\r
+        );\r
+        $rego_page_obj = get_page_by_path('membership-registration');\r
+        if (!$rego_page_obj) {\r
+            $rego_page_id = wp_insert_post($swpm_rego_page);\r
+        } else {\r
+            $rego_page_id = $rego_page_obj->ID;\r
+            if ($rego_page_obj->post_status == 'trash') { //For cases where page may be in trash, bring it out of trash\r
+                wp_update_post(array('ID' => $rego_page_obj->ID, 'post_status' => 'publish'));\r
+            }\r
+        }\r
+        $swpm_rego_page_permalink = get_permalink($rego_page_id);\r
+        $settings->set_value('registration-page-url', $swpm_rego_page_permalink);\r
+\r
+        //Create login page\r
+        $swpm_login_page = array(\r
+            'post_title' => BUtils::_('Member Login'),\r
+            'post_name' => 'membership-login',\r
+            'post_content' => '[swpm_login_form]',\r
+            'post_parent' => 0,\r
+            'post_status' => 'publish',\r
+            'post_type' => 'page',\r
+            'comment_status' => 'closed',\r
+            'ping_status' => 'closed'\r
+        );\r
+        $login_page_obj = get_page_by_path('membership-login');\r
+        if (!$login_page_obj) {\r
+            $login_page_id = wp_insert_post($swpm_login_page);\r
+        } else {\r
+            $login_page_id = $login_page_obj->ID;\r
+            if ($login_page_obj->post_status == 'trash') { //For cases where page may be in trash, bring it out of trash\r
+                wp_update_post(array('ID' => $login_page_obj->ID, 'post_status' => 'publish'));\r
+            }\r
+        }\r
+        $swpm_login_page_permalink = get_permalink($login_page_id);\r
+        $settings->set_value('login-page-url', $swpm_login_page_permalink);\r
+\r
+        //Create profile page\r
+        $swpm_profile_page = array(\r
+            'post_title' => BUtils::_('Profile'),\r
+            'post_name' => 'membership-profile',\r
+            'post_content' => '[swpm_profile_form]',\r
+            'post_parent' => $login_page_id,\r
+            'post_status' => 'publish',\r
+            'post_type' => 'page',\r
+            'comment_status' => 'closed',\r
+            'ping_status' => 'closed'\r
+        );\r
+        $profile_page_obj = get_page_by_path('membership-profile');\r
+        if (!$profile_page_obj) {\r
+            $profile_page_id = wp_insert_post($swpm_profile_page);\r
+        } else {\r
+            $profile_page_id = $profile_page_obj->ID;\r
+            if ($profile_page_obj->post_status == 'trash') { //For cases where page may be in trash, bring it out of trash\r
+                wp_update_post(array('ID' => $profile_page_obj->ID, 'post_status' => 'publish'));\r
+            }\r
+        }\r
+        $swpm_profile_page_permalink = get_permalink($profile_page_id);\r
+        $settings->set_value('profile-page-url', $swpm_profile_page_permalink);\r
+\r
+        //Create reset page\r
+        $swpm_reset_page = array(\r
+            'post_title' => BUtils::_('Password Reset'),\r
+            'post_name' => 'password-reset',\r
+            'post_content' => '[swpm_reset_form]',\r
+            'post_parent' => $login_page_id,\r
+            'post_status' => 'publish',\r
+            'post_type' => 'page',\r
+            'comment_status' => 'closed',\r
+            'ping_status' => 'closed'\r
+        );\r
+        $reset_page_obj = get_page_by_path('password-reset');\r
+        if (!$profile_page_obj) {\r
+            $reset_page_id = wp_insert_post($swpm_reset_page);\r
+        } else {\r
+            $reset_page_id = $reset_page_obj->ID;\r
+            if ($reset_page_obj->post_status == 'trash') { //For cases where page may be in trash, bring it out of trash\r
+                wp_update_post(array('ID' => $reset_page_obj->ID, 'post_status' => 'publish'));\r
+            }\r
+        }\r
+        $swpm_reset_page_permalink = get_permalink($reset_page_id);\r
+        $settings->set_value('reset-page-url', $swpm_reset_page_permalink);\r
+\r
+        $settings->save(); //Save all settings object changes\r
+    }\r
+\r
+    public static function reset_swmp_log_files() {\r
+        $log_reset = true;\r
+        $logfile_list = array(\r
+            SIMPLE_WP_MEMBERSHIP_PATH.'/log.txt',\r
+        );\r
+\r
+        foreach ($logfile_list as $logfile) {\r
+            if (empty($logfile)) {\r
+                continue;\r
+            }\r
+\r
+            $text = '[' . date('m/d/Y g:i A') . '] - SUCCESS : Log file reset';\r
+            $text .= "\n------------------------------------------------------------------\n\n";\r
+            $fp = fopen($logfile, 'w');\r
+            if ($fp != FALSE) {\r
+                @fwrite($fp, $text);\r
+                @fclose($fp);\r
+            } else {\r
+                $log_reset = false;\r
+            }\r
+        }\r
+        return $log_reset;\r
+    }\r
+\r
+}
\ No newline at end of file
diff --git a/classes/class.simple-wp-membership.php b/classes/class.simple-wp-membership.php
new file mode 100644 (file)
index 0000000..879c887
--- /dev/null
@@ -0,0 +1,687 @@
+<?php
+
+include_once('class.bUtils.php');
+include_once('class.miscUtils.php');
+include_once('class.bSettings.php');
+include_once('class.bProtection.php');
+include_once('class.bPermission.php');
+include_once('class.bAuth.php');
+include_once('class.bAccessControl.php');
+include_once('class.bForm.php');
+include_once('class.bTransfer.php');
+include_once('class.bFrontForm.php');
+include_once('class.bLevelForm.php');
+include_once('class.bMembershipLevels.php');
+include_once('class.bLog.php');
+include_once('class.bMessages.php');
+include_once('class.bAjax.php');
+include_once('class.bRegistration.php');
+include_once('class.bFrontRegistration.php');
+include_once('class.bAdminRegistration.php');
+include_once('class.bMembershipLevel.php');
+include_once('class.bMembershipLevelCustom.php');
+include_once('class.bMembershipLevelUtils.php');
+include_once('class.bPermissionCollection.php');
+include_once('class.bAuthPermissionCollection.php');
+include_once('class.bTransactions.php');
+
+class SimpleWpMembership {
+    public function __construct() {
+        add_action('admin_menu', array(&$this, 'menu'));        
+        add_action('init', array(&$this, 'init'));
+
+        add_filter('the_content', array(&$this, 'filter_content'),11,1);
+        add_filter('widget_text', 'do_shortcode');
+        add_filter('show_admin_bar', array(&$this, 'hide_adminbar'));
+        add_filter('comment_text', array(&$this, 'filter_comment'));
+        add_filter('wp_get_attachment_url', array(&$this, 'filter_attachment_url'), 10, 2);
+        add_filter('wp_get_attachment_metadata', array(&$this, 'filter_attachment'), 10, 2);
+        add_filter('attachment_fields_to_save', array(&$this,'save_attachment_extra'), 10, 2);
+        add_filter('the_content_more_link', array(&$this, 'filter_moretag'), 10, 2 );
+
+        add_shortcode("swpm_registration_form", array(&$this, 'registration_form'));
+        add_shortcode('swpm_profile_form', array(&$this, 'profile_form'));
+        add_shortcode('swpm_login_form', array(&$this, 'login'));
+        add_shortcode('swpm_reset_form', array(&$this, 'reset'));
+
+       // List Members extension
+        add_shortcode('swpm_list_members', array(&$this, 'list_members'));
+
+        add_action('save_post', array(&$this, 'save_postdata'));
+        add_action('admin_notices', array(&$this, 'notices'));
+        add_action('wp_enqueue_scripts', array(&$this, 'front_library'));
+        add_action('load-toplevel_page_simple_wp_membership', array(&$this, 'admin_library'));
+        add_action('load-wp-membership_page_simple_wp_membership_levels', array(&$this, 'admin_library'));
+        add_action('profile_update', array(&$this, 'sync_with_wp_profile'), 10, 2);
+        add_action('wp_logout', array(&$this, 'wp_logout'));
+        add_action('wp_authenticate', array(&$this, 'wp_login'), 1, 2);
+        add_action('swpm_logout', array(&$this, 'swpm_logout'));        
+        
+        //AJAX hooks
+        add_action('wp_ajax_swpm_validate_email', 'BAjax::validate_email_ajax');
+        add_action('wp_ajax_nopriv_swpm_validate_email', 'BAjax::validate_email_ajax');
+        add_action('wp_ajax_swpm_validate_user_name', 'BAjax::validate_user_name_ajax');
+        add_action('wp_ajax_nopriv_swpm_validate_user_name', 'BAjax::validate_user_name_ajax');
+
+        //init is too early for settings api.
+        add_action('admin_init', array(&$this, 'admin_init_hook'));
+        add_action('plugins_loaded', array(&$this, "plugins_loaded"));
+        add_action('password_reset', array(&$this, 'wp_password_reset_hook'), 10, 2);
+    }
+    function wp_password_reset_hook( $user, $pass ) 
+    {
+        $swpm_id = BUtils::get_user_by_user_name($user->user_login);
+        if (!empty($swpm_id)){
+            $password_hash = BUtils::encrypt_password($pass);
+            global $wpdb;
+            $wpdb->update($wpdb->prefix . "swpm_members_tbl", array('password' => $password_hash), array('member_id' => $swpm_id));
+        }       
+    }
+    
+    public function save_attachment_extra($post, $attachment) {
+        $this->save_postdata($post['ID']);
+        return $post;
+    }
+    public function filter_attachment($content, $post_id){
+        if(is_admin()){//No need to filter on the admin side
+            return $content;
+        }
+        
+        $acl = BAccessControl::get_instance();
+        if (has_post_thumbnail($post_id)){ return $content;}
+        if ($acl->can_i_read_post($post_id)) {return $content;}
+        
+        
+        if (isset($content['file'])){
+            $content['file'] = 'restricted-icon.png';
+            $content['width'] = '400';
+            $content['height'] = '400';
+        }
+        
+        if (isset($content['sizes'])){
+            if ($content['sizes']['thumbnail']){
+                $content['sizes']['thumbnail']['file'] = 'restricted-icon.png';
+                $content['sizes']['thumbnail']['mime-type'] = 'image/png';
+            }
+            if ($content['sizes']['medium']){
+                $content['sizes']['medium']['file'] = 'restricted-icon.png';
+                $content['sizes']['medium']['mime-type'] = 'image/png';
+            }
+            if ($content['sizes']['post-thumbnail']){
+                $content['sizes']['post-thumbnail']['file'] = 'restricted-icon.png';
+                $content['sizes']['post-thumbnail']['mime-type'] = 'image/png';
+            }
+        }
+        return $content;
+    }
+    
+    public function filter_attachment_url($content, $post_id){
+        if(is_admin()){//No need to filter on the admin side
+            return $content;
+        }
+        $acl = BAccessControl::get_instance();
+        if (has_post_thumbnail($post_id)){return $content;}
+        
+        if ($acl->can_i_read_post($post_id)){return $content;}
+        
+        return BUtils::get_restricted_image_url();
+    }
+    
+    public function admin_init_hook(){
+        BSettings::get_instance()->init_config_hooks();
+        $addon_saved = filter_input(INPUT_POST, 'swpm-addon-settings');
+        if(!empty($addon_saved)){
+            do_action('swpm_addon_settings_save');
+        }
+    }
+    
+    public function hide_adminbar(){
+        if (!is_user_logged_in()){//Never show admin bar if the user is not even logged in
+            return false;
+        }
+        $hide = BSettings::get_instance()->get_value('hide-adminbar');
+        return $hide? FALSE: TRUE;
+    }
+    public function shutdown(){
+        BLog::writeall();
+    }
+    public static function swpm_login($user, $pass, $rememberme = true) {
+        if (is_user_logged_in()) {
+            $current_user = wp_get_current_user();
+            if ($current_user->user_login == $user){
+                return;
+            }
+        }
+        $user = wp_signon(array('user_login' => $user, 'user_password' => $pass, 'remember' => $rememberme), is_ssl());
+        if ( is_a( $user, 'WP_User' ) ) {
+            wp_set_current_user( $user->ID, $user->user_login );
+        }
+        do_action('swpm_after_login');
+        if (!BUtils::is_ajax()) {
+            wp_redirect(site_url());
+        }
+    }
+
+    public function swpm_logout() {
+        if (is_user_logged_in()) {
+            wp_logout();
+            wp_set_current_user(0);
+        }
+    }
+
+    public function wp_login($username, $password) {
+        $auth = BAuth::get_instance(); 
+        if (($auth->is_logged_in() &&($auth->userData->user_name == $username))) {
+            return;
+        }
+        if(!empty($username)) {$auth->login($username, $password, true);}
+    }
+
+    public function wp_logout() {
+        $auth = BAuth::get_instance();
+        if ($auth->is_logged_in()){
+            $auth->logout();
+        }
+    }
+
+    public function sync_with_wp_profile($wp_user_id) {
+        global $wpdb;
+        $wp_user_data = get_userdata($wp_user_id);
+        $query = $wpdb->prepare("SELECT * FROM " . $wpdb->prefix . "swpm_members_tbl WHERE " . ' user_name=%s', $wp_user_data->user_login);
+        $profile = $wpdb->get_row($query, ARRAY_A);
+        $profile = (array) $profile;
+        if (empty($profile)){
+            return;
+        }
+        $profile['user_name'] = $wp_user_data->user_login;
+        $profile['email'] = $wp_user_data->user_email;
+        $profile['password'] = $wp_user_data->user_pass;
+        $profile['first_name'] = $wp_user_data->user_firstname;
+        $profile['last_name'] = $wp_user_data->user_lastname;
+        $wpdb->update($wpdb->prefix . "swpm_members_tbl", $profile, array('member_id' => $profile['member_id']));
+    }
+
+    public function login() {
+        ob_start();
+        $auth = BAuth::get_instance();
+        if ($auth->is_logged_in()){
+            include(SIMPLE_WP_MEMBERSHIP_PATH . 'views/loggedin.php');
+        }
+        else {
+            $setting = BSettings::get_instance();
+            $password_reset_url = $setting->get_value('reset-page-url');
+            $join_url = $setting->get_value('join-us-page-url');
+
+            include(SIMPLE_WP_MEMBERSHIP_PATH . 'views/login.php');
+
+        }
+        return ob_get_clean();
+    }
+
+    public function reset() {
+        $succeeded = $this->notices();
+        if($succeeded){
+            return '';
+        }
+        ob_start();
+        include(SIMPLE_WP_MEMBERSHIP_PATH . 'views/forgot_password.php');
+        return ob_get_clean();
+    }
+    public function profile_form() {
+        $auth = BAuth::get_instance();
+        $this->notices();
+        if ($auth->is_logged_in()) {
+            $out = apply_filters('swpm_profile_form_override', '');
+            if (!empty($out)){return $out;}
+            $user_data = (array) $auth->userData;
+            $user_data['membership_level_alias'] = $auth->get('alias');
+            ob_start();
+            extract($user_data, EXTR_SKIP);
+            include(SIMPLE_WP_MEMBERSHIP_PATH . 'views/edit.php');
+            return ob_get_clean();
+        }
+        return BUtils::_( 'You are not logged in.');
+    }
+
+    public function notices() {
+        $message = BTransfer::get_instance()->get('status');
+        $succeeded = false;
+        if (empty($message)) { return false;}
+        if ($message['succeeded']) {
+            echo "<div id='message' class='updated'>";
+            $succeeded = true;
+        } else{
+            echo "<div id='message' class='error'>";
+        }
+        echo $message['message'];
+        $extra = isset($message['extra']) ? $message['extra'] : array();
+        if (is_string($extra)){
+            echo $extra;
+        }
+        else if (is_array($extra)) {
+            echo '<ul>';
+            foreach ($extra as $key => $value){
+                echo '<li>' . $value . '</li>';
+            }
+            echo '</ul>';
+        }
+        echo "</div>";
+        return $succeeded;
+    }
+
+    public function meta_box() {
+        if (function_exists('add_meta_box')) {
+            $post_types = get_post_types();
+            foreach ($post_types as $post_type => $post_type){
+                add_meta_box('swpm_sectionid',
+                        __('Simple WP Membership Protection', 'swpm'),
+                        array(&$this, 'inner_custom_box'), $post_type, 'advanced');
+            }
+        } else {//older version doesn't have custom post type so modification isn't needed.
+            add_action('dbx_post_advanced', array(&$this, 'show_old_custom_box'));
+            add_action('dbx_page_advanced', array(&$this, 'show_old_custom_box'));
+        }
+    }
+
+    public function show_old_custom_box() {
+        echo '<div class="dbx-b-ox-wrapper">' . "\n";
+        echo '<fieldset id="eMember_fieldsetid" class="dbx-box">' . "\n";
+        echo '<div class="dbx-h-andle-wrapper"><h3 class="dbx-handle">' .
+        __('Simple Membership Protection options', 'swpm') . "</h3></div>";
+        echo '<div class="dbx-c-ontent-wrapper"><div class="dbx-content">';
+        // output editing form
+        $this->inner_custom_box();
+        // end wrapper
+        echo "</div></div></fieldset></div>\n";
+    }
+
+    public function inner_custom_box() {
+        global $post, $wpdb;
+        $id = $post->ID;
+        // Use nonce for verification
+        $is_protected = BProtection::get_instance()->is_protected($id);
+        echo '<input type="hidden" name="swpm_noncename" id="swpm_noncename" value="' .
+        wp_create_nonce(plugin_basename(__FILE__)) . '" />';
+        // The actual fields for data entry
+        echo '<h4>' . __("Do you want to protect this content?", 'swpm') . '</h4>';
+        echo '<input type="radio" ' . ((!$is_protected) ? 'checked' : "") .
+                '  name="swpm_protect_post" value="1" /> No, Do not protect this content. <br/>';
+        echo '<input type="radio" ' . (($is_protected) ? 'checked' : "") .
+                '  name="swpm_protect_post" value="2" /> Yes, Protect this content.<br/>';
+        echo '<h4>' . __("Select the membership level that can access this content:", 'swpm') . "</h4>";
+        $query = "SELECT * FROM " . $wpdb->prefix . "swpm_membership_tbl WHERE  id !=1 ";
+        $levels = $wpdb->get_results($query, ARRAY_A);
+        foreach ($levels as $level) {
+            echo '<input type="checkbox" ' . (BPermission::get_instance($level['id'])->is_permitted($id) ? "checked='checked'" : "") .
+                    ' name="swpm_protection_level[' . $level['id'] . ']" value="' . $level['id'] . '" /> ' . $level['alias'] . "<br/>";
+        }
+    }
+
+    public function save_postdata($post_id) {
+        global $wpdb;
+        $post_type = filter_input(INPUT_POST,'post_type');
+        $swpm_protect_post = filter_input(INPUT_POST,'swpm_protect_post');
+        $swpm_noncename = filter_input(INPUT_POST, 'swpm_noncename');
+        if (wp_is_post_revision($post_id)){
+            return;
+        }
+        if (!wp_verify_nonce($swpm_noncename, plugin_basename(__FILE__))){
+            return $post_id;
+        }
+        if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE){
+            return $post_id;
+        }
+        if ('page' == $post_type ) {
+            if (!current_user_can('edit_page', $post_id)){
+                return $post_id;
+            }
+        } else {
+            if (!current_user_can('edit_post', $post_id)){
+                return $post_id;
+            }
+        }
+        if (empty($swpm_protect_post)){
+            return;
+        }
+        // OK, we're authenticated: we need to find and save the data
+        $isprotected = ($swpm_protect_post == 2);
+        $args =  array('swpm_protection_level'=>array(
+                            'filter' => FILTER_VALIDATE_INT,
+                            'flags'  => FILTER_REQUIRE_ARRAY,
+                           ));
+        $swpm_protection_level = filter_input_array(INPUT_POST, $args);
+        $swpm_protection_level = $swpm_protection_level['swpm_protection_level'];
+        if (!empty($post_type)) {
+            if($isprotected){
+                BProtection::get_instance()->apply(array($post_id),$post_type);
+            }
+            else{
+                BProtection::get_instance()->remove(array($post_id),$post_type);
+            }
+            BProtection::get_instance()->save();
+            $query = "SELECT id FROM " . $wpdb->prefix . "swpm_membership_tbl WHERE  id !=1 ";
+            $level_ids = $wpdb->get_col($query);
+            foreach ($level_ids as $level){
+                if(isset($swpm_protection_level[$level])){
+                    BPermission::get_instance($level)->apply(array($post_id), $post_type)->save();
+                }
+                else{
+                    BPermission::get_instance($level)->remove(array($post_id), $post_type)->save();
+                }
+            }
+        }
+        $enable_protection = array();
+        $enable_protection['protect'] = $swpm_protect_post;
+        $enable_protection['level'] = $swpm_protection_level;
+        return $enable_protection;
+    }
+
+    public function filter_comment($content) {
+        $acl = BAccessControl::get_instance();
+        global $comment;
+        return $acl->filter_post($comment->comment_post_ID, $content);
+    }
+
+    public function filter_content($content) {
+        if (is_preview()) {return $content;}
+        $acl = BAccessControl::get_instance();
+        global $post;
+        return $acl->filter_post($post->ID, $content);
+    }
+
+    public function filter_moretag($more_link, $more_link_text = "More") {
+        $moretag = BSettings::get_instance()->get_value('enable-moretag');
+        if (empty($moretag)) {return $more_link;}
+        $acl = BAccessControl::get_instance();
+        global $post;
+        return $acl->filter_post_with_moretag($post->ID, $more_link, $more_link_text);
+    }
+
+    public function admin_init() {
+        $createswpmuser = filter_input(INPUT_POST, 'createswpmuser');
+        if (!empty($createswpmuser)) {
+            BAdminRegistration::get_instance()->register();
+        }
+        $editswpmuser = filter_input(INPUT_POST, 'editswpmuser');
+        if (!empty($editswpmuser)) {
+            $id = filter_input(INPUT_GET, 'member_id', FILTER_VALIDATE_INT);
+            BAdminRegistration::get_instance()->edit($id);
+        }
+        $createswpmlevel = filter_input(INPUT_POST, 'createswpmlevel');
+        if (!empty($createswpmlevel)) {
+            BMembershipLevel::get_instance()->create();
+        }
+        $editswpmlevel = filter_input(INPUT_POST, 'editswpmlevel');
+        if (!empty($editswpmlevel)) {
+            $id = filter_input(INPUT_GET, 'id');
+            BMembershipLevel::get_instance()->edit($id);
+        }
+    }
+
+    public function init() {
+
+        //Set up localisation. First loaded ones will override strings present in later loaded file.
+        //Allows users to have a customized language in a different folder.
+        $locale = apply_filters( 'plugin_locale', get_locale(), 'swpm' );
+        load_textdomain( 'swpm', WP_LANG_DIR . "/swpm-$locale.mo" );
+       load_plugin_textdomain('swpm', false, SIMPLE_WP_MEMBERSHIP_DIRNAME. '/languages/');
+
+        if (!isset($_COOKIE['swpm_session'])) { // give a unique ID to current session.
+            $uid = md5(microtime());
+            $_COOKIE['swpm_session'] = $uid; // fake it for current session/
+            setcookie('swpm_session', $uid, 0, '/');
+        }
+
+        if(current_user_can('edit_pages')){ // admin stuff
+            $this->admin_init();
+        }
+        if (!is_admin()){ //frontend stuff
+            BAuth::get_instance();
+            $this->verify_and_delete_account();
+            $swpm_logout = filter_input(INPUT_GET, 'swpm-logout');
+            if (!empty($swpm_logout)) {
+                BAuth::get_instance()->logout();
+                wp_redirect(home_url());
+            }
+            $this->process_password_reset();
+            $this->register_member();
+            $this->edit_profile();
+        }
+        $this->swpm_ipn_listener();
+    }
+
+    public function swpm_ipn_listener() {
+        $swpm_process_ipn = filter_input(INPUT_GET, 'swpm_process_ipn');
+        if ($swpm_process_ipn == '1') {
+            include(SIMPLE_WP_MEMBERSHIP_PATH.'ipn/swpm_handle_pp_ipn.php');
+            exit;
+        }
+    }
+
+    public function process_password_reset() {
+        $message = "";
+        $swpm_reset = filter_input(INPUT_POST, 'swpm-reset');
+        $swpm_reset_email = filter_input(INPUT_POST, 'swpm_reset_email', FILTER_UNSAFE_RAW);
+        if (!empty($swpm_reset)) {
+            BFrontRegistration::get_instance()->reset_password($swpm_reset_email);
+        }
+    }
+
+    private function edit_profile() {
+        $swpm_editprofile_submit = filter_input(INPUT_POST, 'swpm_editprofile_submit');        
+        if (!empty($swpm_editprofile_submit)) {
+            BFrontRegistration::get_instance()->edit();
+            //todo: do a redirect
+        }
+    }
+
+    public function admin_library() {
+        $this->common_library();
+        wp_enqueue_script('password-strength-meter');
+        wp_enqueue_script('swpm.password-meter', SIMPLE_WP_MEMBERSHIP_URL . '/js/swpm.password-meter.js');
+        wp_enqueue_style('jquery.tools.dateinput', SIMPLE_WP_MEMBERSHIP_URL . '/css/jquery.tools.dateinput.css');
+        wp_enqueue_script('jquery.tools', SIMPLE_WP_MEMBERSHIP_URL . '/js/jquery.tools18.min.js');     
+        $settings = array('statusChangeEmailHead'=> BSettings::get_instance()->get_value('account-change-email-subject'),
+                          'statusChangeEmailBody'=> BSettings::get_instance()->get_value('account-change-email-body'));
+        wp_localize_script( 'swpm.password-meter', 'SwpmSettings', $settings );        
+    }
+
+    public function front_library() {
+        $this->common_library();
+    }
+
+    private function common_library() {
+        wp_enqueue_script('jquery');
+        wp_enqueue_style('swpm.common', SIMPLE_WP_MEMBERSHIP_URL . '/css/swpm.common.css');
+        wp_enqueue_style('validationEngine.jquery', SIMPLE_WP_MEMBERSHIP_URL . '/css/validationEngine.jquery.css');
+        wp_enqueue_script('jquery.validationEngine-en', SIMPLE_WP_MEMBERSHIP_URL . '/js/jquery.validationEngine-en.js');
+        wp_enqueue_script('jquery.validationEngine', SIMPLE_WP_MEMBERSHIP_URL . '/js/jquery.validationEngine.js');
+    }
+
+    public function registration_form($atts) {
+        $succeeded = $this->notices();
+        if($succeeded){
+            return;
+        }
+        $is_free = BSettings::get_instance()->get_value('enable-free-membership');
+        $free_level = absint(BSettings::get_instance()->get_value('free-membership-id'));        
+        $level = isset($atts['level'])? absint($atts['level']): ($is_free? $free_level: null);
+        return BFrontRegistration::get_instance()->regigstration_ui($level);
+    }
+
+    private function register_member() {
+        $registration = filter_input(INPUT_POST, 'swpm_registration_submit');
+        if (!empty($registration)) {
+            BFrontRegistration::get_instance()->register();
+        }
+    }
+
+    public function menu() {
+        $menu_parent_slug = 'simple_wp_membership';
+
+        add_menu_page(__("WP Membership", 'swpm'), __("WP Membership", 'swpm')
+                , 'edit_pages', $menu_parent_slug, array(&$this, "admin_members")
+                , SIMPLE_WP_MEMBERSHIP_URL . '/images/logo.png');
+        add_submenu_page($menu_parent_slug, __("Members", 'swpm'), __('Members', 'swpm'),
+                'edit_pages', 'simple_wp_membership', array(&$this, "admin_members"));
+        add_submenu_page($menu_parent_slug, __("Membership Levels", 'swpm'), __("Membership Levels", 'swpm'),
+                'manage_options', 'simple_wp_membership_levels', array(&$this, "admin_membership_levels"));
+        add_submenu_page($menu_parent_slug, __("Settings", 'swpm'), __("Settings", 'swpm'),
+                'manage_options', 'simple_wp_membership_settings', array(&$this, "admin_settings"));
+        add_submenu_page($menu_parent_slug, __("Payments", 'swpm'), __("Payments", 'swpm'),
+                'manage_options', 'simple_wp_membership_payments', array(&$this, "payments_menu"));
+        add_submenu_page($menu_parent_slug, __("Add-ons", 'swpm'), __("Add-ons", 'swpm'),
+                'manage_options', 'simple_wp_membership_addons', array(&$this, "add_ons_menu"));
+        
+        do_action('swpm_after_main_admin_menu', $menu_parent_slug);
+
+        $this->meta_box();
+    }
+
+    public function admin_membership_levels() {
+        include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'classes/class.bMembershipLevels.php');
+        $levels = new BMembershipLevels();
+        $level_action = filter_input(INPUT_GET, 'level_action');
+        $action2 = filter_input(INPUT_GET, 'action2');
+        $action = $level_action ? $level_action : ($action2 ? $action2 : "");
+        switch ($action) {
+            case 'add':
+            case 'edit':
+                $levels->process_form_request();
+                break;
+            case 'manage':
+                $levels->manage();
+                break;
+            case 'category_list':
+                $levels->manage_categroy();
+                break;
+            case 'delete':
+            case 'bulk_delete':
+                $levels->delete();
+            default:
+                $levels->show();
+                break;
+        }
+    }
+
+    public function admin_members() {
+        include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'classes/class.bMembers.php');
+        $members = new BMembers();
+        $action = filter_input(INPUT_GET, 'member_action');
+        $action = empty($action)? filter_input(INPUT_POST, 'action') : $action;
+        switch ($action) {
+            case 'add':
+            case 'edit':
+                $members->process_form_request();
+                break;
+            case 'delete':
+            case 'bulk_delete':
+                $members->delete();
+            default:
+                $members->show();
+                break;
+        }
+    }
+
+    public function admin_settings() {
+        $current_tab = BSettings::get_instance()->current_tab;
+        switch ($current_tab) {
+            case 6:
+                include(SIMPLE_WP_MEMBERSHIP_PATH . 'views/admin_addon_settings.php');
+                break;         
+            case 4:
+                $link_for = filter_input(INPUT_POST, 'swpm_link_for',FILTER_SANITIZE_STRING);
+                $member_id = filter_input(INPUT_POST, 'member_id',FILTER_SANITIZE_NUMBER_INT);
+                $send_email = filter_input(INPUT_POST, 'swpm_reminder_email',FILTER_SANITIZE_NUMBER_INT);
+                $links = BUtils::get_registration_link($link_for, $send_email, $member_id);
+                include(SIMPLE_WP_MEMBERSHIP_PATH . 'views/admin_tools_settings.php');
+                break;
+            case 2:
+                include(SIMPLE_WP_MEMBERSHIP_PATH . 'views/admin_payment_settings.php');
+                break;
+            default:
+                include(SIMPLE_WP_MEMBERSHIP_PATH . 'views/admin_settings.php');
+                break;
+        }
+    }
+    
+    public function payments_menu(){
+        include(SIMPLE_WP_MEMBERSHIP_PATH . 'views/admin_payments_page.php');
+    }
+    
+    public function add_ons_menu(){
+         include(SIMPLE_WP_MEMBERSHIP_PATH . 'views/admin_add_ons_page.php');
+    }
+
+    public function plugins_loaded(){
+        //Runs when plugins_loaded action gets fired
+        if(is_admin()){
+            //Check and run DB upgrade operation (if needed)
+            if (get_option('swpm_db_version') != SIMPLE_WP_MEMBERSHIP_DB_VER) {
+                include_once('class.bInstallation.php');
+                BInstallation::run_safe_installer();
+            }
+        }        
+    }
+    
+    public static function activate() {
+        wp_schedule_event(time(), 'daily', 'swpm_account_status_event');
+        wp_schedule_event(time(), 'daily', 'swpm_delete_pending_account_event');
+        include_once('class.bInstallation.php');
+        BInstallation::run_safe_installer();
+    }
+    
+    public function deactivate() {
+        wp_clear_scheduled_hook('swpm_account_status_event');
+        wp_clear_scheduled_hook('swpm_delete_pending_account_event');        
+    }
+    private function verify_and_delete_account(){
+        include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'classes/class.bMembers.php');
+        $delete_account = filter_input(INPUT_GET, 'delete_account');
+        if (empty($delete_account)) {return; }
+        $password = filter_input(INPUT_POST, 'account_delete_confirm_pass',FILTER_UNSAFE_RAW);
+
+        $auth = BAuth::get_instance();
+        if (!$auth->is_logged_in()){return;}
+        if (empty($password)){
+            BUtils::account_delete_confirmation_ui();
+        }
+        
+        $nonce_field = filter_input(INPUT_POST, 'account_delete_confirm_nonce');
+        if (empty($nonce_field) || !wp_verify_nonce($nonce_field, 'swpm_account_delete_confirm')){
+            BUtils::account_delete_confirmation_ui(BUtils::_("Sorry, Nonce verification failed."));
+        }       
+        if ($auth->match_password($password)){
+            $auth->delete();
+            wp_redirect(home_url());
+        }
+        else{
+            BUtils::account_delete_confirmation_ui(BUtils::_("Sorry, Password didn't match."));
+        }
+    }
+
+        public function list_members() {
+
+                $currentThemeDirectory = get_template_directory();
+                if (file_exists($currentThemeDirectory.'/simple-wp-membership/methods.php')) {
+
+                        $auth = BAuth::get_instance();
+                        $this->notices();
+                        if ($auth->is_logged_in()) {
+
+                                ob_start();
+
+                                if ($themeExtDir !== false) {
+                                        include_once($currentThemeDirectory.'/simple-wp-membership/methods.php');
+                                }
+
+                                return ob_get_clean();
+                        }
+                        return BUtils::_( 'You are not logged in.');
+                }
+        }
+
+
+
+
+}
diff --git a/classes/index.html b/classes/index.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/css/index.html b/css/index.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/css/jquery.tools.dateinput.css b/css/jquery.tools.dateinput.css
new file mode 100644 (file)
index 0000000..49a0e27
--- /dev/null
@@ -0,0 +1,159 @@
+/* get rid of those system borders being generated for A tags */
+a:active {
+  outline:none;
+}
+
+:focus {
+  -moz-outline-style:none;
+}
+/* For the details, see: http://flowplayer.org/tools/dateinput/index.html#skinning */
+
+/* the input field */
+.date {
+       border:1px solid #ccc;
+       font-size:13px;
+       padding:4px;
+       text-align:center;
+       width:178px;
+       
+       -moz-box-shadow:0 0 10px #eee inset;
+       -webkit-box-shadow:0 0 10px #eee inset;
+}
+
+/* calendar root element */
+#calroot {
+       /* place on top of other elements. set a higher value if nessessary */
+       z-index:10000;
+       
+       margin-top:-1px;
+       width:198px;
+       padding:2px;
+       background-color:#fff;
+       font-size:11px;
+       border:1px solid #ccc;
+       
+       -moz-border-radius:5px;
+       -webkit-border-radius:5px;
+       
+       -moz-box-shadow: 0 0 15px #666;
+       -webkit-box-shadow: 0 0 15px #666;      
+}
+
+/* head. contains title, prev/next month controls and possible month/year selectors */
+#calhead {     
+       padding:2px 0;
+       height:22px;
+} 
+
+#caltitle {
+       font-size:14px;
+       color:#0150D1;  
+       float:left;
+       text-align:center;
+       width:155px;
+       line-height:20px;
+       text-shadow:0 1px 0 #ddd;
+}
+
+#calnext, #calprev {
+       display:block;
+       width:20px;
+       height:20px;
+       background:transparent url(../images/prev.gif) no-repeat scroll center center;
+       float:left;
+       cursor:pointer;
+}
+
+#calnext {
+       background-image:url(../images/next.gif);
+       float:right;
+}
+
+#calprev.caldisabled, #calnext.caldisabled {
+       visibility:hidden;      
+}
+
+/* year/month selector */
+#caltitle select {
+       font-size:10px; 
+}
+
+/* names of the days */
+#caldays {
+       height:14px;
+       border-bottom:1px solid #ddd;
+}
+
+#caldays span {
+       display:block;
+       float:left;
+       width:28px;
+       text-align:center;
+}
+
+/* container for weeks */
+#calweeks {
+       background-color:#fff;
+       margin-top:4px;
+}
+
+/* single week */
+.calweek {
+       clear:left;
+       height:22px;
+}
+
+/* single day */
+.calweek a {
+       display:block;
+       float:left;
+       width:27px;
+       height:20px;
+       text-decoration:none;
+       font-size:11px;
+       margin-left:1px;
+       text-align:center;
+       line-height:20px;
+       color:#666;
+       -moz-border-radius:3px;
+       -webkit-border-radius:3px;              
+} 
+
+/* different states */
+.calweek a:hover, .calfocus {
+       background-color:#ddd;
+}
+
+/* sunday */
+a.calsun {
+       color:red;              
+}
+
+/* offmonth day */
+a.caloff {
+       color:#ccc;             
+}
+
+a.caloff:hover {
+       background-color:rgb(245, 245, 250);            
+}
+
+
+/* unselecteble day */
+a.caldisabled {
+       background-color:#efefef !important;
+       color:#ccc      !important;
+       cursor:default;
+}
+
+/* current day */
+#calcurrent {
+       background-color:#498CE2;
+       color:#fff;
+}
+
+/* today */
+#caltoday {
+       background-color:#333;
+       color:#fff;
+}
diff --git a/css/swpm.addons.listing.css b/css/swpm.addons.listing.css
new file mode 100644 (file)
index 0000000..04d84f2
--- /dev/null
@@ -0,0 +1,34 @@
+.swpm_addon_item_canvas{\r
+    background-color:#fff;\r
+    font-family:sans-serif,arial;\r
+    font-size:12px;\r
+    border:1px solid #ccc;\r
+    display:block;\r
+    float:left;\r
+    margin:3px 12px 12px 0;\r
+    padding:10px 0px 10px 10px;\r
+    position:relative;\r
+    width:222px;\r
+    height:340px;\r
+}\r
+.swpm_addon_item_canvas:hover{border-color:#999;}\r
+.swpm_addon_item_thumb img {height: 150px; width: 200px; padding: 5px; border: 1px solid #ccc;}\r
+.swpm_addon_item_thumb a img {border: 1px solid #ccc;}\r
+.swpm_addon_item_body{line-height:22px;height:170px;overflow:hidden;}\r
+.swpm_addon_item_name{font-size:16px;font-weight:bold;text-align: center;margin:10px 10px 10px 0px;}\r
+.swpm_addon_item_description{margin:10px 10px 5px 0px;text-align:justify;overflow:hidden;height:70px;}\r
+.swpm_addon_clear{clear:both;}\r
+.swpm_addon_item_details_link{\r
+    text-align: center;\r
+}\r
+.swpm_addon_item_details_link a{\r
+    border: 3px solid #2d3140;\r
+    color: #2d3140;\r
+    display: inline-block;\r
+    padding: 5px 15px;\r
+    text-decoration: none !important;\r
+}\r
+.swpm_addon_item_details_link a:hover{\r
+    background-color: #2d3140;\r
+    color: #FFF;    \r
+}\r
diff --git a/css/swpm.common.css b/css/swpm.common.css
new file mode 100644 (file)
index 0000000..eb33179
--- /dev/null
@@ -0,0 +1,101 @@
+/* General CSS */
+.swpm-margin-10{
+    margin: 10px;
+}
+.swpm-margin-top-10{
+    margin-top: 10px;
+}
+.swpm-margin-bottom-10{
+    margin-bottom: 10px;
+}
+
+.swpm-yellow-box{
+    margin: 10px 0 15px;
+    padding: 10px;
+    background-color: #FFFFE0;
+    border-color: #E6DB55;
+    border-radius: 3px 3px 3px 3px;
+    border-style: solid;
+    border-width: 1px;    
+}
+
+.swpm-grey-box{
+    margin: 10px 0 15px;
+    padding: 10px;
+    background-color: #DDDDDD;
+    border-color: #CCCCCC;
+    border-radius: 3px 3px 3px 3px;
+    border-style: solid;
+    border-width: 1px;
+}
+.swpm-green-box {
+    margin: 10px 0 15px;
+    padding: 10px;
+    background-color: #CCF4D6;
+    border-color: #059B53;
+    color: #043B14;
+    border-radius: 3px 3px 3px 3px;
+    border-style: solid;
+    border-width: 1px;
+}
+
+.swpm-red-box {
+    margin: 10px 0 15px;
+    padding: 10px;
+    background-color: #FFEBE8;
+    border-color: #CC0000;
+    color: #333333;
+    border-radius: 3px 3px 3px 3px;
+    border-style: solid;
+    border-width: 1px;
+}
+
+/* Login form CSS */
+.swpm-login-widget-form input,.swpm-login-widget-form checkbox{
+    width: auto;
+}
+.swpm-username-input, .swpm-password-input{
+    margin-bottom: 10px;
+}
+.swpm-login-submit{
+    margin-bottom: 10px;    
+}
+.swpm-login-widget-action-msg{
+    font-weight: bold;    
+}
+.swpm-logged-label{
+    font-weight: bold;
+}
+
+/* Password reset form CSS */
+.swpm-password-reset-widget-form table{
+    border: none;
+}
+swpm-password-reset-widget-form tr{
+    border: none;
+}
+.swpm-password-reset-widget-form td{
+    border: none;
+}
+
+/* Registration form CSS */
+.swpm-registration-widget-form td{
+    min-width: 100px;
+}
+
+.swpm-restricted{
+    font-weight: bold;
+    color:red;
+}
+.swpm-select-box-left{
+    margin: 0;
+    padding-bottom: 5px;
+}
+
+/* Edit profile form CSS */
+.swpm-account-delete-button{
+    text-align: center;
+}
+.swpm-account-delete-button a{
+    color: red !important;
+}
\ No newline at end of file
diff --git a/css/validationEngine.jquery.css b/css/validationEngine.jquery.css
new file mode 100644 (file)
index 0000000..51a3e4b
--- /dev/null
@@ -0,0 +1,143 @@
+.inputContainer {
+       position: relative;
+       float: left;
+}
+
+.formError {
+       position: absolute;
+       top: 300px;
+       left: 300px;
+       display: block;
+       z-index: 5000;
+       cursor: pointer;
+}
+
+.ajaxSubmit {
+       padding: 20px;
+       background: #55ea55;
+       border: 1px solid #999;
+       display: none
+}
+
+.formError .formErrorContent {
+       width: 100%;
+       background: #ee0101;
+       position:relative;
+       z-index:5001;
+       color: #fff;
+       font-weight: bolder;
+       width: 150px;
+       font-family: tahoma;
+       font-size: 11px;
+       border: 2px solid #ddd;
+       box-shadow: 0 0 6px #000;
+       -moz-box-shadow: 0 0 6px #000;
+       -webkit-box-shadow: 0 0 6px #000;
+       padding: 4px 10px 4px 10px;
+       border-radius: 6px;
+       -moz-border-radius: 6px;
+       -webkit-border-radius: 6px;
+}
+
+.greenPopup .formErrorContent {
+       background: #33be40;
+}
+
+.blackPopup .formErrorContent {
+       background: #393939;
+       color: #FFF;
+}
+
+.formError .formErrorArrow {
+       width: 15px;
+       margin: -2px 0 0 13px;
+  position:relative;
+  z-index: 5006;
+}
+
+.formError .formErrorArrowBottom {
+  box-shadow: none;
+  -moz-box-shadow: none;
+  -webkit-box-shadow: none;
+       margin: 0px 0 0 12px;
+  top:2px;
+}
+
+.formError .formErrorArrow div {
+       border-left: 2px solid #ddd;
+       border-right: 2px solid #ddd;
+       box-shadow: 0 2px 3px #444;
+       -moz-box-shadow: 0 2px 3px #444;
+       -webkit-box-shadow: 0 2px 3px #444;
+       font-size: 0px;
+       height: 1px;
+       background: #ee0101;
+       margin: 0 auto;
+       line-height: 0;
+       font-size: 0;
+       display: block;
+}
+
+.formError .formErrorArrowBottom div {
+  box-shadow: none;
+  -moz-box-shadow: none;
+  -webkit-box-shadow: none;
+}
+
+.greenPopup .formErrorArrow div {
+       background: #33be40;
+}
+
+.blackPopup .formErrorArrow div {
+       background: #393939;
+       color: #FFF;
+}
+
+.formError .formErrorArrow .line10 {
+       width: 15px;
+       border: none;
+}
+
+.formError .formErrorArrow .line9 {
+       width: 13px;
+       border: none;
+}
+
+.formError .formErrorArrow .line8 {
+       width: 11px;
+}
+
+.formError .formErrorArrow .line7 {
+       width: 9px;
+}
+
+.formError .formErrorArrow .line6 {
+       width: 7px;
+}
+
+.formError .formErrorArrow .line5 {
+       width: 5px;
+}
+
+.formError .formErrorArrow .line4 {
+       width: 3px;
+}
+
+.formError .formErrorArrow .line3 {
+       width: 1px;
+       border-left: 2px solid #ddd;
+       border-right: 2px solid #ddd;
+       border-bottom: 0 solid #ddd;
+}
+
+.formError .formErrorArrow .line2 {
+       width: 3px;
+       border: none;
+       background: #ddd;
+}
+
+.formError .formErrorArrow .line1 {
+       width: 1px;
+       border: none;
+       background: #ddd;
+}
\ No newline at end of file
diff --git a/images/addons/form-shortcode-generator.png b/images/addons/form-shortcode-generator.png
new file mode 100644 (file)
index 0000000..086e958
Binary files /dev/null and b/images/addons/form-shortcode-generator.png differ
diff --git a/images/addons/mailchimp-integration.png b/images/addons/mailchimp-integration.png
new file mode 100644 (file)
index 0000000..267278a
Binary files /dev/null and b/images/addons/mailchimp-integration.png differ
diff --git a/images/addons/swpm-custom-messages.png b/images/addons/swpm-custom-messages.png
new file mode 100644 (file)
index 0000000..cf2828f
Binary files /dev/null and b/images/addons/swpm-custom-messages.png differ
diff --git a/images/addons/swpm-form-builder.png b/images/addons/swpm-form-builder.png
new file mode 100644 (file)
index 0000000..fa28181
Binary files /dev/null and b/images/addons/swpm-form-builder.png differ
diff --git a/images/addons/swpm-login-redirection.png b/images/addons/swpm-login-redirection.png
new file mode 100644 (file)
index 0000000..69b535b
Binary files /dev/null and b/images/addons/swpm-login-redirection.png differ
diff --git a/images/addons/swpm-older-posts-protection.png b/images/addons/swpm-older-posts-protection.png
new file mode 100644 (file)
index 0000000..f694467
Binary files /dev/null and b/images/addons/swpm-older-posts-protection.png differ
diff --git a/images/addons/wp-user-import.png b/images/addons/wp-user-import.png
new file mode 100644 (file)
index 0000000..9a78550
Binary files /dev/null and b/images/addons/wp-user-import.png differ
diff --git a/images/index.html b/images/index.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/images/join-now-button-image.gif b/images/join-now-button-image.gif
new file mode 100644 (file)
index 0000000..6ef5bb8
Binary files /dev/null and b/images/join-now-button-image.gif differ
diff --git a/images/logo.png b/images/logo.png
new file mode 100644 (file)
index 0000000..6b3875c
Binary files /dev/null and b/images/logo.png differ
diff --git a/images/logo2.png b/images/logo2.png
new file mode 100644 (file)
index 0000000..eb9243d
Binary files /dev/null and b/images/logo2.png differ
diff --git a/images/next.gif b/images/next.gif
new file mode 100644 (file)
index 0000000..730fc3e
Binary files /dev/null and b/images/next.gif differ
diff --git a/images/prev.gif b/images/prev.gif
new file mode 100644 (file)
index 0000000..7ec2d6c
Binary files /dev/null and b/images/prev.gif differ
diff --git a/images/restricted-icon.png b/images/restricted-icon.png
new file mode 100644 (file)
index 0000000..fc0c6d1
Binary files /dev/null and b/images/restricted-icon.png differ
diff --git a/images/simple-membership-content-protection-usage.png b/images/simple-membership-content-protection-usage.png
new file mode 100644 (file)
index 0000000..f1822a2
Binary files /dev/null and b/images/simple-membership-content-protection-usage.png differ
diff --git a/includes/class-swpm-list-table.php b/includes/class-swpm-list-table.php
new file mode 100644 (file)
index 0000000..38a8142
--- /dev/null
@@ -0,0 +1,1138 @@
+<?php
+/**
+ * Base class for displaying a list of items in an ajaxified HTML table.
+ * Use this class to display list table.
+ * This will prevent list table from breaking when WordPress changes the implementation of core list table class in the future.
+ */
+
+class SWPM_List_Table {
+
+       /**
+        * The current list of items
+        *
+        * @since 3.1.0
+        * @var array
+        * @access public
+        */
+       public $items;
+
+       /**
+        * Various information about the current table
+        *
+        * @since 3.1.0
+        * @var array
+        * @access protected
+        */
+       protected $_args;
+
+       /**
+        * Various information needed for displaying the pagination
+        *
+        * @since 3.1.0
+        * @var array
+        */
+       protected $_pagination_args = array();
+
+       /**
+        * The current screen
+        *
+        * @since 3.1.0
+        * @var object
+        * @access protected
+        */
+       protected $screen;
+
+       /**
+        * Cached bulk actions
+        *
+        * @since 3.1.0
+        * @var array
+        * @access private
+        */
+       private $_actions;
+
+       /**
+        * Cached pagination output
+        *
+        * @since 3.1.0
+        * @var string
+        * @access private
+        */
+       private $_pagination;
+
+       /**
+        * The view switcher modes.
+        *
+        * @since 4.1.0
+        * @var array
+        * @access protected
+        */
+       protected $modes = array();
+
+       /**
+        * Stores the value returned by ->get_column_info()
+        *
+        * @var array
+        */
+       protected $_column_headers;
+
+       protected $compat_fields = array( '_args', '_pagination_args', 'screen', '_actions', '_pagination' );
+
+       protected $compat_methods = array( 'set_pagination_args', 'get_views', 'get_bulk_actions', 'bulk_actions',
+               'row_actions', 'months_dropdown', 'view_switcher', 'comments_bubble', 'get_items_per_page', 'pagination',
+               'get_sortable_columns', 'get_column_info', 'get_table_classes', 'display_tablenav', 'extra_tablenav',
+               'single_row_columns' );
+
+       /**
+        * Constructor.
+        *
+        * The child class should call this constructor from its own constructor to override
+        * the default $args.
+        *
+        * @since 3.1.0
+        * @access public
+        *
+        * @param array|string $args {
+        *     Array or string of arguments.
+        *
+        *     @type string $plural   Plural value used for labels and the objects being listed.
+        *                            This affects things such as CSS class-names and nonces used
+        *                            in the list table, e.g. 'posts'. Default empty.
+        *     @type string $singular Singular label for an object being listed, e.g. 'post'.
+        *                            Default empty
+        *     @type bool   $ajax     Whether the list table supports AJAX. This includes loading
+        *                            and sorting data, for example. If true, the class will call
+        *                            the {@see _js_vars()} method in the footer to provide variables
+        *                            to any scripts handling AJAX events. Default false.
+        *     @type string $screen   String containing the hook name used to determine the current
+        *                            screen. If left null, the current screen will be automatically set.
+        *                            Default null.
+        * }
+        */
+       public function __construct( $args = array() ) {
+               $args = wp_parse_args( $args, array(
+                       'plural' => '',
+                       'singular' => '',
+                       'ajax' => false,
+                       'screen' => null,
+               ) );
+
+               $this->screen = convert_to_screen( $args['screen'] );
+
+               add_filter( "manage_{$this->screen->id}_columns", array( $this, 'get_columns' ), 0 );
+
+               if ( !$args['plural'] )
+                       $args['plural'] = $this->screen->base;
+
+               $args['plural'] = sanitize_key( $args['plural'] );
+               $args['singular'] = sanitize_key( $args['singular'] );
+
+               $this->_args = $args;
+
+               if ( $args['ajax'] ) {
+                       // wp_enqueue_script( 'list-table' );
+                       add_action( 'admin_footer', array( $this, '_js_vars' ) );
+               }
+
+               if ( empty( $this->modes ) ) {
+                       $this->modes = array(
+                               'list'    => __( 'List View' ),
+                               'excerpt' => __( 'Excerpt View' )
+                       );
+               }
+       }
+
+       /**
+        * Make private properties readable for backwards compatibility.
+        *
+        * @since 4.0.0
+        * @access public
+        *
+        * @param string $name Property to get.
+        * @return mixed Property.
+        */
+       public function __get( $name ) {
+               if ( in_array( $name, $this->compat_fields ) ) {
+                       return $this->$name;
+               }
+       }
+
+       /**
+        * Make private properties settable for backwards compatibility.
+        *
+        * @since 4.0.0
+        * @access public
+        *
+        * @param string $name  Property to check if set.
+        * @param mixed  $value Property value.
+        * @return mixed Newly-set property.
+        */
+       public function __set( $name, $value ) {
+               if ( in_array( $name, $this->compat_fields ) ) {
+                       return $this->$name = $value;
+               }
+       }
+
+       /**
+        * Make private properties checkable for backwards compatibility.
+        *
+        * @since 4.0.0
+        * @access public
+        *
+        * @param string $name Property to check if set.
+        * @return bool Whether the property is set.
+        */
+       public function __isset( $name ) {
+               if ( in_array( $name, $this->compat_fields ) ) {
+                       return isset( $this->$name );
+               }
+       }
+
+       /**
+        * Make private properties un-settable for backwards compatibility.
+        *
+        * @since 4.0.0
+        * @access public
+        *
+        * @param string $name Property to unset.
+        */
+       public function __unset( $name ) {
+               if ( in_array( $name, $this->compat_fields ) ) {
+                       unset( $this->$name );
+               }
+       }
+
+       /**
+        * Make private/protected methods readable for backwards compatibility.
+        *
+        * @since 4.0.0
+        * @access public
+        *
+        * @param callable $name      Method to call.
+        * @param array    $arguments Arguments to pass when calling.
+        * @return mixed|bool Return value of the callback, false otherwise.
+        */
+       public function __call( $name, $arguments ) {
+               if ( in_array( $name, $this->compat_methods ) ) {
+                       return call_user_func_array( array( $this, $name ), $arguments );
+               }
+               return false;
+       }
+
+       /**
+        * Checks the current user's permissions
+        *
+        * @since 3.1.0
+        * @access public
+        * @abstract
+        */
+       public function ajax_user_can() {
+               die( 'function WP_List_Table::ajax_user_can() must be over-ridden in a sub-class.' );
+       }
+
+       /**
+        * Prepares the list of items for displaying.
+        * @uses WP_List_Table::set_pagination_args()
+        *
+        * @since 3.1.0
+        * @access public
+        * @abstract
+        */
+       public function prepare_items() {
+               die( 'function WP_List_Table::prepare_items() must be over-ridden in a sub-class.' );
+       }
+
+       /**
+        * An internal method that sets all the necessary pagination arguments
+        *
+        * @param array $args An associative array with information about the pagination
+        * @access protected
+        */
+       protected function set_pagination_args( $args ) {
+               $args = wp_parse_args( $args, array(
+                       'total_items' => 0,
+                       'total_pages' => 0,
+                       'per_page' => 0,
+               ) );
+
+               if ( !$args['total_pages'] && $args['per_page'] > 0 )
+                       $args['total_pages'] = ceil( $args['total_items'] / $args['per_page'] );
+
+               // Redirect if page number is invalid and headers are not already sent.
+               if ( ! headers_sent() && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) && $args['total_pages'] > 0 && $this->get_pagenum() > $args['total_pages'] ) {
+                       wp_redirect( add_query_arg( 'paged', $args['total_pages'] ) );
+                       exit;
+               }
+
+               $this->_pagination_args = $args;
+       }
+
+       /**
+        * Access the pagination args.
+        *
+        * @since 3.1.0
+        * @access public
+        *
+        * @param string $key Pagination argument to retrieve. Common values include 'total_items',
+        *                    'total_pages', 'per_page', or 'infinite_scroll'.
+        * @return int Number of items that correspond to the given pagination argument.
+        */
+       public function get_pagination_arg( $key ) {
+               if ( 'page' == $key )
+                       return $this->get_pagenum();
+
+               if ( isset( $this->_pagination_args[$key] ) )
+                       return $this->_pagination_args[$key];
+       }
+
+       /**
+        * Whether the table has items to display or not
+        *
+        * @since 3.1.0
+        * @access public
+        *
+        * @return bool
+        */
+       public function has_items() {
+               return !empty( $this->items );
+       }
+
+       /**
+        * Message to be displayed when there are no items
+        *
+        * @since 3.1.0
+        * @access public
+        */
+       public function no_items() {
+               _e( 'No items found.' );
+       }
+
+       /**
+        * Display the search box.
+        *
+        * @since 3.1.0
+        * @access public
+        *
+        * @param string $text The search button text
+        * @param string $input_id The search input id
+        */
+       public function search_box( $text, $input_id ) {
+               if ( empty( $_REQUEST['s'] ) && !$this->has_items() )
+                       return;
+
+               $input_id = $input_id . '-search-input';
+
+               if ( ! empty( $_REQUEST['orderby'] ) )
+                       echo '<input type="hidden" name="orderby" value="' . esc_attr( $_REQUEST['orderby'] ) . '" />';
+               if ( ! empty( $_REQUEST['order'] ) )
+                       echo '<input type="hidden" name="order" value="' . esc_attr( $_REQUEST['order'] ) . '" />';
+               if ( ! empty( $_REQUEST['post_mime_type'] ) )
+                       echo '<input type="hidden" name="post_mime_type" value="' . esc_attr( $_REQUEST['post_mime_type'] ) . '" />';
+               if ( ! empty( $_REQUEST['detached'] ) )
+                       echo '<input type="hidden" name="detached" value="' . esc_attr( $_REQUEST['detached'] ) . '" />';
+?>
+<p class="search-box">
+       <label class="screen-reader-text" for="<?php echo $input_id ?>"><?php echo $text; ?>:</label>
+       <input type="search" id="<?php echo $input_id ?>" name="s" value="<?php _admin_search_query(); ?>" />
+       <?php submit_button( $text, 'button', '', false, array('id' => 'search-submit') ); ?>
+</p>
+<?php
+       }
+
+       /**
+        * Get an associative array ( id => link ) with the list
+        * of views available on this table.
+        *
+        * @since 3.1.0
+        * @access protected
+        *
+        * @return array
+        */
+       protected function get_views() {
+               return array();
+       }
+
+       /**
+        * Display the list of views available on this table.
+        *
+        * @since 3.1.0
+        * @access public
+        */
+       public function views() {
+               $views = $this->get_views();
+               /**
+                * Filter the list of available list table views.
+                *
+                * The dynamic portion of the hook name, `$this->screen->id`, refers
+                * to the ID of the current screen, usually a string.
+                *
+                * @since 3.5.0
+                *
+                * @param array $views An array of available list table views.
+                */
+               $views = apply_filters( "views_{$this->screen->id}", $views );
+
+               if ( empty( $views ) )
+                       return;
+
+               echo "<ul class='subsubsub'>\n";
+               foreach ( $views as $class => $view ) {
+                       $views[ $class ] = "\t<li class='$class'>$view";
+               }
+               echo implode( " |</li>\n", $views ) . "</li>\n";
+               echo "</ul>";
+       }
+
+       /**
+        * Get an associative array ( option_name => option_title ) with the list
+        * of bulk actions available on this table.
+        *
+        * @since 3.1.0
+        * @access protected
+        *
+        * @return array
+        */
+       protected function get_bulk_actions() {
+               return array();
+       }
+
+       /**
+        * Display the bulk actions dropdown.
+        *
+        * @since 3.1.0
+        * @access protected
+        *
+        * @param string $which The location of the bulk actions: 'top' or 'bottom'.
+        *                      This is designated as optional for backwards-compatibility.
+        */
+       protected function bulk_actions( $which = '' ) {
+               if ( is_null( $this->_actions ) ) {
+                       $no_new_actions = $this->_actions = $this->get_bulk_actions();
+                       /**
+                        * Filter the list table Bulk Actions drop-down.
+                        *
+                        * The dynamic portion of the hook name, `$this->screen->id`, refers
+                        * to the ID of the current screen, usually a string.
+                        *
+                        * This filter can currently only be used to remove bulk actions.
+                        *
+                        * @since 3.5.0
+                        *
+                        * @param array $actions An array of the available bulk actions.
+                        */
+                       $this->_actions = apply_filters( "bulk_actions-{$this->screen->id}", $this->_actions );
+                       $this->_actions = array_intersect_assoc( $this->_actions, $no_new_actions );
+                       $two = '';
+               } else {
+                       $two = '2';
+               }
+
+               if ( empty( $this->_actions ) )
+                       return;
+
+               echo "<label for='bulk-action-selector-" . esc_attr( $which ) . "' class='screen-reader-text'>" . __( 'Select bulk action' ) . "</label>";
+               echo "<select name='action$two' id='bulk-action-selector-" . esc_attr( $which ) . "'>\n";
+               echo "<option value='-1' selected='selected'>" . __( 'Bulk Actions' ) . "</option>\n";
+
+               foreach ( $this->_actions as $name => $title ) {
+                       $class = 'edit' == $name ? ' class="hide-if-no-js"' : '';
+
+                       echo "\t<option value='$name'$class>$title</option>\n";
+               }
+
+               echo "</select>\n";
+
+               submit_button( __( 'Apply' ), 'action', '', false, array( 'id' => "doaction$two" ) );
+               echo "\n";
+       }
+
+       /**
+        * Get the current action selected from the bulk actions dropdown.
+        *
+        * @since 3.1.0
+        * @access public
+        *
+        * @return string|bool The action name or False if no action was selected
+        */
+       public function current_action() {
+               if ( isset( $_REQUEST['filter_action'] ) && ! empty( $_REQUEST['filter_action'] ) )
+                       return false;
+
+               if ( isset( $_REQUEST['action'] ) && -1 != $_REQUEST['action'] )
+                       return $_REQUEST['action'];
+
+               if ( isset( $_REQUEST['action2'] ) && -1 != $_REQUEST['action2'] )
+                       return $_REQUEST['action2'];
+
+               return false;
+       }
+
+       /**
+        * Generate row actions div
+        *
+        * @since 3.1.0
+        * @access protected
+        *
+        * @param array $actions The list of actions
+        * @param bool $always_visible Whether the actions should be always visible
+        * @return string
+        */
+       protected function row_actions( $actions, $always_visible = false ) {
+               $action_count = count( $actions );
+               $i = 0;
+
+               if ( !$action_count )
+                       return '';
+
+               $out = '<div class="' . ( $always_visible ? 'row-actions visible' : 'row-actions' ) . '">';
+               foreach ( $actions as $action => $link ) {
+                       ++$i;
+                       ( $i == $action_count ) ? $sep = '' : $sep = ' | ';
+                       $out .= "<span class='$action'>$link$sep</span>";
+               }
+               $out .= '</div>';
+
+               return $out;
+       }
+
+       /**
+        * Display a monthly dropdown for filtering items
+        *
+        * @since 3.1.0
+        * @access protected
+        *
+        * @param string $post_type
+        */
+       protected function months_dropdown( $post_type ) {
+               global $wpdb, $wp_locale;
+
+               /**
+                * Filter whether to remove the 'Months' drop-down from the post list table.
+                *
+                * @since 4.2.0
+                *
+                * @param bool   $disable   Whether to disable the drop-down. Default false.
+                * @param string $post_type The post type.
+                */
+               if ( apply_filters( 'disable_months_dropdown', false, $post_type ) ) {
+                       return;
+               }
+
+               $months = $wpdb->get_results( $wpdb->prepare( "
+                       SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month
+                       FROM $wpdb->posts
+                       WHERE post_type = %s
+                       ORDER BY post_date DESC
+               ", $post_type ) );
+
+               /**
+                * Filter the 'Months' drop-down results.
+                *
+                * @since 3.7.0
+                *
+                * @param object $months    The months drop-down query results.
+                * @param string $post_type The post type.
+                */
+               $months = apply_filters( 'months_dropdown_results', $months, $post_type );
+
+               $month_count = count( $months );
+
+               if ( !$month_count || ( 1 == $month_count && 0 == $months[0]->month ) )
+                       return;
+
+               $m = isset( $_GET['m'] ) ? (int) $_GET['m'] : 0;
+?>
+               <label for="filter-by-date" class="screen-reader-text"><?php _e( 'Filter by date' ); ?></label>
+               <select name="m" id="filter-by-date">
+                       <option<?php selected( $m, 0 ); ?> value="0"><?php _e( 'All dates' ); ?></option>
+<?php
+               foreach ( $months as $arc_row ) {
+                       if ( 0 == $arc_row->year )
+                               continue;
+
+                       $month = zeroise( $arc_row->month, 2 );
+                       $year = $arc_row->year;
+
+                       printf( "<option %s value='%s'>%s</option>\n",
+                               selected( $m, $year . $month, false ),
+                               esc_attr( $arc_row->year . $month ),
+                               /* translators: 1: month name, 2: 4-digit year */
+                               sprintf( __( '%1$s %2$d' ), $wp_locale->get_month( $month ), $year )
+                       );
+               }
+?>
+               </select>
+<?php
+       }
+
+       /**
+        * Display a view switcher
+        *
+        * @since 3.1.0
+        * @access protected
+        *
+        * @param string $current_mode
+        */
+       protected function view_switcher( $current_mode ) {
+?>
+               <input type="hidden" name="mode" value="<?php echo esc_attr( $current_mode ); ?>" />
+               <div class="view-switch">
+<?php
+                       foreach ( $this->modes as $mode => $title ) {
+                               $classes = array( 'view-' . $mode );
+                               if ( $current_mode == $mode )
+                                       $classes[] = 'current';
+                               printf(
+                                       "<a href='%s' class='%s' id='view-switch-$mode'><span class='screen-reader-text'>%s</span></a>\n",
+                                       esc_url( add_query_arg( 'mode', $mode ) ),
+                                       implode( ' ', $classes ),
+                                       $title
+                               );
+                       }
+               ?>
+               </div>
+<?php
+       }
+
+       /**
+        * Display a comment count bubble
+        *
+        * @since 3.1.0
+        * @access protected
+        *
+        * @param int $post_id          The post ID.
+        * @param int $pending_comments Number of pending comments.
+        */
+       protected function comments_bubble( $post_id, $pending_comments ) {
+               $pending_phrase = sprintf( __( '%s pending' ), number_format( $pending_comments ) );
+
+               if ( $pending_comments )
+                       echo '<strong>';
+
+               echo "<a href='" . esc_url( add_query_arg( 'p', $post_id, admin_url( 'edit-comments.php' ) ) ) . "' title='" . esc_attr( $pending_phrase ) . "' class='post-com-count'><span class='comment-count'>" . number_format_i18n( get_comments_number() ) . "</span></a>";
+
+               if ( $pending_comments )
+                       echo '</strong>';
+       }
+
+       /**
+        * Get the current page number
+        *
+        * @since 3.1.0
+        * @access public
+        *
+        * @return int
+        */
+       public function get_pagenum() {
+               $pagenum = isset( $_REQUEST['paged'] ) ? absint( $_REQUEST['paged'] ) : 0;
+
+               if( isset( $this->_pagination_args['total_pages'] ) && $pagenum > $this->_pagination_args['total_pages'] )
+                       $pagenum = $this->_pagination_args['total_pages'];
+
+               return max( 1, $pagenum );
+       }
+
+       /**
+        * Get number of items to display on a single page
+        *
+        * @since 3.1.0
+        * @access protected
+        *
+        * @param string $option
+        * @param int    $default
+        * @return int
+        */
+       protected function get_items_per_page( $option, $default = 20 ) {
+               $per_page = (int) get_user_option( $option );
+               if ( empty( $per_page ) || $per_page < 1 )
+                       $per_page = $default;
+
+               /**
+                * Filter the number of items to be displayed on each page of the list table.
+                *
+                * The dynamic hook name, $option, refers to the `per_page` option depending
+                * on the type of list table in use. Possible values include: 'edit_comments_per_page',
+                * 'sites_network_per_page', 'site_themes_network_per_page', 'themes_network_per_page',
+                * 'users_network_per_page', 'edit_post_per_page', 'edit_page_per_page',
+                * 'edit_{$post_type}_per_page', etc.
+                *
+                * @since 2.9.0
+                *
+                * @param int $per_page Number of items to be displayed. Default 20.
+                */
+               return (int) apply_filters( $option, $per_page );
+       }
+
+       /**
+        * Display the pagination.
+        *
+        * @since 3.1.0
+        * @access protected
+        *
+        * @param string $which
+        */
+       protected function pagination( $which ) {
+               if ( empty( $this->_pagination_args ) ) {
+                       return;
+               }
+
+               $total_items = $this->_pagination_args['total_items'];
+               $total_pages = $this->_pagination_args['total_pages'];
+               $infinite_scroll = false;
+               if ( isset( $this->_pagination_args['infinite_scroll'] ) ) {
+                       $infinite_scroll = $this->_pagination_args['infinite_scroll'];
+               }
+
+               $output = '<span class="displaying-num">' . sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) ) . '</span>';
+
+               $current = $this->get_pagenum();
+
+               $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
+
+               $current_url = remove_query_arg( array( 'hotkeys_highlight_last', 'hotkeys_highlight_first' ), $current_url );
+
+               $page_links = array();
+
+               $disable_first = $disable_last = '';
+               if ( $current == 1 ) {
+                       $disable_first = ' disabled';
+               }
+               if ( $current == $total_pages ) {
+                       $disable_last = ' disabled';
+               }
+               $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
+                       'first-page' . $disable_first,
+                       esc_attr__( 'Go to the first page' ),
+                       esc_url( remove_query_arg( 'paged', $current_url ) ),
+                       '&laquo;'
+               );
+
+               $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
+                       'prev-page' . $disable_first,
+                       esc_attr__( 'Go to the previous page' ),
+                       esc_url( add_query_arg( 'paged', max( 1, $current-1 ), $current_url ) ),
+                       '&lsaquo;'
+               );
+
+               if ( 'bottom' == $which ) {
+                       $html_current_page = $current;
+               } else {
+                       $html_current_page = sprintf( "%s<input class='current-page' id='current-page-selector' title='%s' type='text' name='paged' value='%s' size='%d' />",
+                               '<label for="current-page-selector" class="screen-reader-text">' . __( 'Select Page' ) . '</label>',
+                               esc_attr__( 'Current page' ),
+                               $current,
+                               strlen( $total_pages )
+                       );
+               }
+               $html_total_pages = sprintf( "<span class='total-pages'>%s</span>", number_format_i18n( $total_pages ) );
+               $page_links[] = '<span class="paging-input">' . sprintf( _x( '%1$s of %2$s', 'paging' ), $html_current_page, $html_total_pages ) . '</span>';
+
+               $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
+                       'next-page' . $disable_last,
+                       esc_attr__( 'Go to the next page' ),
+                       esc_url( add_query_arg( 'paged', min( $total_pages, $current+1 ), $current_url ) ),
+                       '&rsaquo;'
+               );
+
+               $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
+                       'last-page' . $disable_last,
+                       esc_attr__( 'Go to the last page' ),
+                       esc_url( add_query_arg( 'paged', $total_pages, $current_url ) ),
+                       '&raquo;'
+               );
+
+               $pagination_links_class = 'pagination-links';
+               if ( ! empty( $infinite_scroll ) ) {
+                       $pagination_links_class = ' hide-if-js';
+               }
+               $output .= "\n<span class='$pagination_links_class'>" . join( "\n", $page_links ) . '</span>';
+
+               if ( $total_pages ) {
+                       $page_class = $total_pages < 2 ? ' one-page' : '';
+               } else {
+                       $page_class = ' no-pages';
+               }
+               $this->_pagination = "<div class='tablenav-pages{$page_class}'>$output</div>";
+
+               echo $this->_pagination;
+       }
+
+       /**
+        * Get a list of columns. The format is:
+        * 'internal-name' => 'Title'
+        *
+        * @since 3.1.0
+        * @access public
+        * @abstract
+        *
+        * @return array
+        */
+       public function get_columns() {
+               die( 'function WP_List_Table::get_columns() must be over-ridden in a sub-class.' );
+       }
+
+       /**
+        * Get a list of sortable columns. The format is:
+        * 'internal-name' => 'orderby'
+        * or
+        * 'internal-name' => array( 'orderby', true )
+        *
+        * The second format will make the initial sorting order be descending
+        *
+        * @since 3.1.0
+        * @access protected
+        *
+        * @return array
+        */
+       protected function get_sortable_columns() {
+               return array();
+       }
+
+       /**
+        * Get a list of all, hidden and sortable columns, with filter applied
+        *
+        * @since 3.1.0
+        * @access protected
+        *
+        * @return array
+        */
+       protected function get_column_info() {
+               if ( isset( $this->_column_headers ) )
+                       return $this->_column_headers;
+
+               $columns = get_column_headers( $this->screen );
+               $hidden = get_hidden_columns( $this->screen );
+
+               $sortable_columns = $this->get_sortable_columns();
+               /**
+                * Filter the list table sortable columns for a specific screen.
+                *
+                * The dynamic portion of the hook name, `$this->screen->id`, refers
+                * to the ID of the current screen, usually a string.
+                *
+                * @since 3.5.0
+                *
+                * @param array $sortable_columns An array of sortable columns.
+                */
+               $_sortable = apply_filters( "manage_{$this->screen->id}_sortable_columns", $sortable_columns );
+
+               $sortable = array();
+               foreach ( $_sortable as $id => $data ) {
+                       if ( empty( $data ) )
+                               continue;
+
+                       $data = (array) $data;
+                       if ( !isset( $data[1] ) )
+                               $data[1] = false;
+
+                       $sortable[$id] = $data;
+               }
+
+               $this->_column_headers = array( $columns, $hidden, $sortable );
+
+               return $this->_column_headers;
+       }
+
+       /**
+        * Return number of visible columns
+        *
+        * @since 3.1.0
+        * @access public
+        *
+        * @return int
+        */
+       public function get_column_count() {
+               list ( $columns, $hidden ) = $this->get_column_info();
+               $hidden = array_intersect( array_keys( $columns ), array_filter( $hidden ) );
+               return count( $columns ) - count( $hidden );
+       }
+
+       /**
+        * Print column headers, accounting for hidden and sortable columns.
+        *
+        * @since 3.1.0
+        * @access public
+        *
+        * @param bool $with_id Whether to set the id attribute or not
+        */
+       public function print_column_headers( $with_id = true ) {
+               list( $columns, $hidden, $sortable ) = $this->get_column_info();
+
+               $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
+               $current_url = remove_query_arg( 'paged', $current_url );
+
+               if ( isset( $_GET['orderby'] ) )
+                       $current_orderby = $_GET['orderby'];
+               else
+                       $current_orderby = '';
+
+               if ( isset( $_GET['order'] ) && 'desc' == $_GET['order'] )
+                       $current_order = 'desc';
+               else
+                       $current_order = 'asc';
+
+               if ( ! empty( $columns['cb'] ) ) {
+                       static $cb_counter = 1;
+                       $columns['cb'] = '<label class="screen-reader-text" for="cb-select-all-' . $cb_counter . '">' . __( 'Select All' ) . '</label>'
+                               . '<input id="cb-select-all-' . $cb_counter . '" type="checkbox" />';
+                       $cb_counter++;
+               }
+
+               foreach ( $columns as $column_key => $column_display_name ) {
+                       $class = array( 'manage-column', "column-$column_key" );
+
+                       $style = '';
+                       if ( in_array( $column_key, $hidden ) )
+                               $style = 'display:none;';
+
+                       $style = ' style="' . $style . '"';
+
+                       if ( 'cb' == $column_key )
+                               $class[] = 'check-column';
+                       elseif ( in_array( $column_key, array( 'posts', 'comments', 'links' ) ) )
+                               $class[] = 'num';
+
+                       if ( isset( $sortable[$column_key] ) ) {
+                               list( $orderby, $desc_first ) = $sortable[$column_key];
+
+                               if ( $current_orderby == $orderby ) {
+                                       $order = 'asc' == $current_order ? 'desc' : 'asc';
+                                       $class[] = 'sorted';
+                                       $class[] = $current_order;
+                               } else {
+                                       $order = $desc_first ? 'desc' : 'asc';
+                                       $class[] = 'sortable';
+                                       $class[] = $desc_first ? 'asc' : 'desc';
+                               }
+
+                               $column_display_name = '<a href="' . esc_url( add_query_arg( compact( 'orderby', 'order' ), $current_url ) ) . '"><span>' . $column_display_name . '</span><span class="sorting-indicator"></span></a>';
+                       }
+
+                       $id = $with_id ? "id='$column_key'" : '';
+
+                       if ( !empty( $class ) )
+                               $class = "class='" . join( ' ', $class ) . "'";
+
+                       echo "<th scope='col' $id $class $style>$column_display_name</th>";
+               }
+       }
+
+       /**
+        * Display the table
+        *
+        * @since 3.1.0
+        * @access public
+        */
+       public function display() {
+               $singular = $this->_args['singular'];
+
+               $this->display_tablenav( 'top' );
+
+?>
+<table class="wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>">
+       <thead>
+       <tr>
+               <?php $this->print_column_headers(); ?>
+       </tr>
+       </thead>
+
+       <tbody id="the-list"<?php
+               if ( $singular ) {
+                       echo " data-wp-lists='list:$singular'";
+               } ?>>
+               <?php $this->display_rows_or_placeholder(); ?>
+       </tbody>
+
+       <tfoot>
+       <tr>
+               <?php $this->print_column_headers( false ); ?>
+       </tr>
+       </tfoot>
+
+</table>
+<?php
+               $this->display_tablenav( 'bottom' );
+       }
+
+       /**
+        * Get a list of CSS classes for the list table table tag.
+        *
+        * @since 3.1.0
+        * @access protected
+        *
+        * @return array List of CSS classes for the table tag.
+        */
+       protected function get_table_classes() {
+               return array( 'widefat', 'fixed', 'striped', $this->_args['plural'] );
+       }
+
+       /**
+        * Generate the table navigation above or below the table
+        *
+        * @since 3.1.0
+        * @access protected
+        * @param string $which
+        */
+       protected function display_tablenav( $which ) {
+               if ( 'top' == $which )
+                       wp_nonce_field( 'bulk-' . $this->_args['plural'] );
+?>
+       <div class="tablenav <?php echo esc_attr( $which ); ?>">
+
+               <div class="alignleft actions bulkactions">
+                       <?php $this->bulk_actions( $which ); ?>
+               </div>
+<?php
+               $this->extra_tablenav( $which );
+               $this->pagination( $which );
+?>
+
+               <br class="clear" />
+       </div>
+<?php
+       }
+
+       /**
+        * Extra controls to be displayed between bulk actions and pagination
+        *
+        * @since 3.1.0
+        * @access protected
+        *
+        * @param string $which
+        */
+       protected function extra_tablenav( $which ) {}
+
+       /**
+        * Generate the tbody element for the list table.
+        *
+        * @since 3.1.0
+        * @access public
+        */
+       public function display_rows_or_placeholder() {
+               if ( $this->has_items() ) {
+                       $this->display_rows();
+               } else {
+                       echo '<tr class="no-items"><td class="colspanchange" colspan="' . $this->get_column_count() . '">';
+                       $this->no_items();
+                       echo '</td></tr>';
+               }
+       }
+
+       /**
+        * Generate the table rows
+        *
+        * @since 3.1.0
+        * @access public
+        */
+       public function display_rows() {
+               foreach ( $this->items as $item )
+                       $this->single_row( $item );
+       }
+
+       /**
+        * Generates content for a single row of the table
+        *
+        * @since 3.1.0
+        * @access public
+        *
+        * @param object $item The current item
+        */
+       public function single_row( $item ) {
+               echo '<tr>';
+               $this->single_row_columns( $item );
+               echo '</tr>';
+       }
+
+       protected function column_default( $item, $column_name ) {}
+
+       protected function column_cb( $item ) {}
+
+       /**
+        * Generates the columns for a single row of the table
+        *
+        * @since 3.1.0
+        * @access protected
+        *
+        * @param object $item The current item
+        */
+       protected function single_row_columns( $item ) {
+               list( $columns, $hidden ) = $this->get_column_info();
+
+               foreach ( $columns as $column_name => $column_display_name ) {
+                       $class = "class='$column_name column-$column_name'";
+
+                       $style = '';
+                       if ( in_array( $column_name, $hidden ) )
+                               $style = ' style="display:none;"';
+
+                       $attributes = "$class$style";
+
+                       if ( 'cb' == $column_name ) {
+                               echo '<th scope="row" class="check-column">';
+                               echo $this->column_cb( $item );
+                               echo '</th>';
+                       }
+                       elseif ( method_exists( $this, 'column_' . $column_name ) ) {
+                               echo "<td $attributes>";
+                               echo call_user_func( array( $this, 'column_' . $column_name ), $item );
+                               echo "</td>";
+                       }
+                       else {
+                               echo "<td $attributes>";
+                               echo $this->column_default( $item, $column_name );
+                               echo "</td>";
+                       }
+               }
+       }
+
+       /**
+        * Handle an incoming ajax request (called from admin-ajax.php)
+        *
+        * @since 3.1.0
+        * @access public
+        */
+       public function ajax_response() {
+               $this->prepare_items();
+
+               ob_start();
+               if ( ! empty( $_REQUEST['no_placeholder'] ) ) {
+                       $this->display_rows();
+               } else {
+                       $this->display_rows_or_placeholder();
+               }
+
+               $rows = ob_get_clean();
+
+               $response = array( 'rows' => $rows );
+
+               if ( isset( $this->_pagination_args['total_items'] ) ) {
+                       $response['total_items_i18n'] = sprintf(
+                               _n( '1 item', '%s items', $this->_pagination_args['total_items'] ),
+                               number_format_i18n( $this->_pagination_args['total_items'] )
+                       );
+               }
+               if ( isset( $this->_pagination_args['total_pages'] ) ) {
+                       $response['total_pages'] = $this->_pagination_args['total_pages'];
+                       $response['total_pages_i18n'] = number_format_i18n( $this->_pagination_args['total_pages'] );
+               }
+
+               die( wp_json_encode( $response ) );
+       }
+
+       /**
+        * Send required variables to JavaScript land
+        *
+        * @access public
+        */
+       public function _js_vars() {
+               $args = array(
+                       'class'  => get_class( $this ),
+                       'screen' => array(
+                               'id'   => $this->screen->id,
+                               'base' => $this->screen->base,
+                       )
+               );
+
+               printf( "<script type='text/javascript'>list_args = %s;</script>\n", wp_json_encode( $args ) );
+       }
+}
diff --git a/index.html b/index.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ipn/index.html b/ipn/index.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ipn/swpm_handle_pp_ipn.php b/ipn/swpm_handle_pp_ipn.php
new file mode 100644 (file)
index 0000000..b54d73d
--- /dev/null
@@ -0,0 +1,354 @@
+<?php
+
+include_once('swpm_handle_subsc_ipn.php');
+
+class swpm_paypal_ipn_handler {
+
+    var $last_error;                 // holds the last error encountered
+    var $ipn_log = false;                    // bool: log IPN results to text file?
+    var $ipn_log_file;               // filename of the IPN log
+    var $ipn_response;               // holds the IPN response from paypal
+    var $ipn_data = array();         // array contains the POST values for IPN
+    var $fields = array();           // array holds the fields to submit to paypal
+    var $sandbox_mode = false;
+
+    function swpm_paypal_ipn_handler()
+    {
+        $this->paypal_url = 'https://www.paypal.com/cgi-bin/webscr';
+       $this->last_error = '';
+       $this->ipn_log_file = 'ipn_handle_debug_swpm.log';
+       $this->ipn_response = '';
+    }
+
+    function swpm_validate_and_create_membership()
+    {
+        // Check Product Name , Price , Currency , Receivers email ,
+        $error_msg = "";
+
+        // Read the IPN and validate
+        $gross_total = $this->ipn_data['mc_gross'];
+        $transaction_type = $this->ipn_data['txn_type'];
+        $txn_id = $this->ipn_data['txn_id'];        
+       $payment_status = $this->ipn_data['payment_status'];
+        
+        //Check payment status
+       if (!empty($payment_status))
+       {
+            if ($payment_status == "Denied") {
+                $this->debug_log("Payment status for this transaction is DENIED. You denied the transaction... most likely a cancellation of an eCheque. Nothing to do here.", false);
+                return false;
+            }
+            if ($payment_status == "Canceled_Reversal") {
+                $this->debug_log("This is a dispute closed notification in your favour. The plugin will not do anyting.", false);
+                return true;
+            }
+            if ($payment_status != "Completed" && $payment_status != "Processed" && $payment_status != "Refunded" && $payment_status != "Reversed")
+            {
+                $error_msg .= 'Funds have not been cleared yet. Transaction will be processed when the funds clear!';
+                $this->debug_log($error_msg,false);
+                return false;
+            }
+       }
+
+        //Check txn type
+        if ($transaction_type == "new_case") {
+            $this->debug_log('This is a dispute case. Nothing to do here.', true);
+            return true;
+        }
+        
+        $custom = $this->ipn_data['custom'];
+        $delimiter = "&";
+        $customvariables = array();
+
+        $namevaluecombos = explode($delimiter, $custom);
+        foreach ($namevaluecombos as $keyval_unparsed)
+        {
+            $equalsignposition = strpos($keyval_unparsed, '=');
+            if ($equalsignposition === false)
+            {
+                $customvariables[$keyval_unparsed] = '';
+                continue;
+            }
+            $key = substr($keyval_unparsed, 0, $equalsignposition);
+            $value = substr($keyval_unparsed, $equalsignposition + 1);
+            $customvariables[$key] = $value;
+        }
+        
+        //Handle refunds
+        if ($gross_total < 0)
+        {
+            // This is a refund or reversal
+            $this->debug_log('This is a refund notification. Refund amount: '.$gross_total,true);
+            swpm_handle_subsc_cancel_stand_alone($this->ipn_data,true);            
+            return true;
+        }
+        if (isset($this->ipn_data['reason_code']) && $this->ipn_data['reason_code'] == 'refund'){
+            $this->debug_log('This is a refund notification. Refund amount: '.$gross_total,true);
+            swpm_handle_subsc_cancel_stand_alone($this->ipn_data,true);            
+            return true;            
+        }
+
+        if (($transaction_type == "subscr_signup"))
+        {
+            $this->debug_log('Subscription signup IPN received... nothing to do here(handled by the subscription IPN handler)',true);
+            // Code to handle the signup IPN for subscription
+            $subsc_ref = $customvariables['subsc_ref'];
+
+            if (!empty($subsc_ref))
+            {
+                $this->debug_log('swpm integration is being used... creating member account... see the "subscription_handle_debug.log" file for details',true);
+                $swpm_id = $customvariables['swpm_id'];
+                swpm_handle_subsc_signup_stand_alone($this->ipn_data,$subsc_ref,$this->ipn_data['subscr_id'],$swpm_id);
+                //Handle customized subscription signup
+            }
+            return true;
+        }
+        else if (($transaction_type == "subscr_cancel") || ($transaction_type == "subscr_eot") || ($transaction_type == "subscr_failed"))
+        {
+            // Code to handle the IPN for subscription cancellation
+            swpm_handle_subsc_cancel_stand_alone($this->ipn_data);
+            $this->debug_log('Subscription cancellation IPN received... nothing to do here(handled by the subscription IPN handler)',true);
+            return true;
+        }
+        else
+        {
+            $cart_items = array();
+            $this->debug_log('Transaction Type: Buy Now/Subscribe',true);
+            $item_number = $this->ipn_data['item_number'];
+            $item_name = $this->ipn_data['item_name'];
+            $quantity = $this->ipn_data['quantity'];
+            $mc_gross = $this->ipn_data['mc_gross'];
+            $mc_currency = $this->ipn_data['mc_currency'];
+
+            $current_item = array(
+                                                               'item_number' => $item_number,
+                                                               'item_name' => $item_name,
+                                                               'quantity' => $quantity,
+                                                               'mc_gross' => $mc_gross,
+                                                               'mc_currency' => $mc_currency,
+                                                              );
+
+            array_push($cart_items, $current_item);
+        }
+
+        $counter = 0;
+        foreach ($cart_items as $current_cart_item)
+        {
+            $cart_item_data_num = $current_cart_item['item_number'];
+            $cart_item_data_name = trim($current_cart_item['item_name']);
+            $cart_item_data_quantity = $current_cart_item['quantity'];
+            $cart_item_data_total = $current_cart_item['mc_gross'];
+            $cart_item_data_currency = $current_cart_item['mc_currency'];
+            if(empty($cart_item_data_quantity))
+            {
+                    $cart_item_data_quantity = 1;
+            }
+            $this->debug_log('Item Number: '.$cart_item_data_num,true);
+            $this->debug_log('Item Name: '.$cart_item_data_name,true);
+            $this->debug_log('Item Quantity: '.$cart_item_data_quantity,true);
+            $this->debug_log('Item Total: '.$cart_item_data_total,true);
+            $this->debug_log('Item Currency: '.$cart_item_data_currency,true);
+
+
+            //*** Handle Membership Payment ***
+            //--------------------------------------------------------------------------------------
+            // ========= Need to find the (level ID) in the custom variable ============
+            $subsc_ref = $customvariables['subsc_ref'];//Membership level ID
+            $this->debug_log('Membership payment paid for membership level ID: '.$subsc_ref,true);
+            if (!empty($subsc_ref))
+            {
+                $swpm_id = "";
+                if(isset($customvariables['swpm_id'])){
+                    $swpm_id = $customvariables['swpm_id'];
+                }
+                if ($transaction_type == "web_accept")
+                {
+                    $this->debug_log('swpm integration is being used... creating member account... see the "subscription_handle_debug.log" file for details',true);
+                    swpm_handle_subsc_signup_stand_alone($this->ipn_data,$subsc_ref,$this->ipn_data['txn_id'],$swpm_id);
+                }
+                else if($transaction_type == "subscr_payment"){
+                    //swpm_update_member_subscription_start_date_if_applicable($this->ipn_data);
+                }
+            }
+            else
+            {
+                $this->debug_log('Membership level ID is missing in the payment notification! Cannot process this notification.',false);
+            }
+            //== End of Membership payment handling ==
+            $counter++;
+        }
+
+        /*** Do Post payment operation and cleanup ***/
+        //Save the transaction data
+        $this->debug_log('Saving transaction data to the database table.', true);
+        $this->ipn_data['gateway'] = 'paypal';
+        $this->ipn_data['status'] = $this->ipn_data['payment_status'];
+        BTransactions::save_txn_record($this->ipn_data, $cart_items);
+        $this->debug_log('Transaction data saved.', true);
+
+        
+        //WP Affiliate Plugin integration
+        if (function_exists('wp_aff_platform_install'))
+        {
+            $this->debug_log('WP Affiliate Platform is installed, checking if custom field has affiliate data...',true);
+            //It expects the value of the custom field to be like the following:
+            //<input type="hidden" name="custom" value="subsc_ref=4&ap_id=AFF_ID" />
+
+            $custom_field_val = $this->ipn_data['custom'];
+            $this->debug_log('Custom field value: '.$custom_field_val,true);
+            $findme = 'ap_id';
+            $pos = strpos($custom_field_val, $findme);
+            if($pos !== false){
+                parse_str($custom_field_val);
+                $referrer = $ap_id;
+            }else{
+                $this->debug_log('Could not find affiliate ID (ap_id) data in the custom field',true);
+            }
+
+            if(!empty($referrer))
+            {
+                    $total_tax = $this->ipn_data['tax'];
+                    if(empty($total_tax)){$total_tax = 0;}
+                    $total_shipping = 0;
+                    if(!empty($this->ipn_data['shipping'])){
+                            $total_shipping = $this->ipn_data['shipping'];
+                    }else if (!empty($this->ipn_data['mc_shipping'])){
+                            $total_shipping = $this->ipn_data['mc_shipping'];
+                    }
+                    $gross_sale_amt = $this->ipn_data['mc_gross'];
+                    $this->debug_log('Gross sale amount: '.$gross_sale_amt.' Tax: '.$total_tax.' Shipping: '.$total_shipping,true);
+                    $sale_amount = $gross_sale_amt - $total_shipping - $total_tax;
+
+                    $txn_id = $this->ipn_data['txn_id'];
+                    $item_id = $this->ipn_data['item_number'];
+                    $buyer_email = $this->ipn_data['payer_email'];
+                    $buyer_name = $this->ipn_data['first_name'] . " " .$this->ipn_data['last_name'];
+                    wp_aff_award_commission_unique($referrer,$sale_amount,$txn_id,$item_id,$buyer_email,'','',$buyer_name);
+                    $aff_details_debug = "Referrer: ".$referrer." Sale Amt: ".$sale_amount." Buyer Email: ".$buyer_email." Txn ID: ".$txn_id;
+                    $this->debug_log('Affiliate Commission Details => '.$aff_details_debug,true);
+            }
+            else
+            {
+                $this->debug_log("Referrer value is empty! No commission will be awarded for this sale",true);
+            }
+            
+            do_action('swpm_paypal_ipn_processed', $this->ipn_data);
+        }
+        return true;
+    }
+
+    function swpm_validate_ipn()
+    {
+      // parse the paypal URL
+      $url_parsed=parse_url($this->paypal_url);
+
+      // generate the post string from the _POST vars aswell as load the _POST vars into an arry
+      $post_string = '';
+      foreach ($_POST as $field=>$value) {
+         $this->ipn_data["$field"] = $value;
+         $post_string .= $field.'='.urlencode(stripslashes($value)).'&';
+      }
+
+      $this->post_string = $post_string;
+      $this->debug_log('Post string : '. $this->post_string,true);
+
+      $post_string.="cmd=_notify-validate"; // append ipn command
+
+      // open the connection to paypal
+      if($this->sandbox_mode){//connect to PayPal sandbox
+             $uri = 'ssl://'.$url_parsed['host'];
+             $port = '443';
+             $fp = fsockopen($uri,$port,$err_num,$err_str,30);
+      }
+      else{//connect to live PayPal site using standard approach
+       $fp = fsockopen($url_parsed['host'],"80",$err_num,$err_str,30);
+      }
+
+      if(!$fp)
+      {
+         // could not open the connection.  If loggin is on, the error message
+         // will be in the log.
+         $this->debug_log('Connection to '.$url_parsed['host']." failed.fsockopen error no. $errnum: $errstr",false);
+         return false;
+
+      }
+      else
+      {
+         // Post the data back to paypal
+         fputs($fp, "POST $url_parsed[path] HTTP/1.1\r\n");
+         fputs($fp, "Host: $url_parsed[host]\r\n");
+         fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
+         fputs($fp, "Content-length: ".strlen($post_string)."\r\n");
+         fputs($fp, "Connection: close\r\n\r\n");
+         fputs($fp, $post_string . "\r\n\r\n");
+
+         // loop through the response from the server and append to variable
+         while(!feof($fp)) {
+            $this->ipn_response .= fgets($fp, 1024);
+         }
+
+         fclose($fp); // close connection
+
+         $this->debug_log('Connection to '.$url_parsed['host'].' successfuly completed.',true);
+      }
+
+      //if (eregi("VERIFIED",$this->ipn_response))
+      if (strpos($this->ipn_response, "VERIFIED") !== false)
+      {
+         // Valid IPN transaction.
+         $this->debug_log('IPN successfully verified.',true);
+         return true;
+
+      }
+      else
+      {
+         // Invalid IPN transaction.  Check the log for details.
+         $this->debug_log('IPN validation failed.',false);
+         return false;
+      }
+   }
+
+    function debug_log($message,$success,$end=false)
+    {
+        BLog::log_simple_debug($message, $success, $end);
+    }
+}
+
+// Start of IPN handling (script execution)
+
+$ipn_handler_instance = new swpm_paypal_ipn_handler();
+
+$settings = BSettings::get_instance();
+$debug_enabled = $settings->get_value('enable-debug');
+if(!empty($debug_enabled))//debug is enabled in the system
+{
+       $debug_log = "log.txt"; // Debug log file name
+       echo 'Debug logging is enabled. Check the '.$debug_log.' file for debug output.';
+       $ipn_handler_instance->ipn_log = true;
+       $ipn_handler_instance->ipn_log_file = $debug_log;
+       if(empty($_POST))
+       {
+            $ipn_handler_instance->debug_log('This debug line was generated because you entered the URL of the ipn handling script in the browser.',true,true);
+            exit;
+       }
+}
+
+$sandbox_enabled = $settings->get_value('enable-sandbox-testing');
+if(!empty($sandbox_enabled)) // Sandbox testing enabled
+{
+    $ipn_handler_instance->paypal_url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
+    $ipn_handler_instance->sandbox_mode = true;
+}
+
+$ipn_handler_instance->debug_log('Paypal Class Initiated by '.$_SERVER['REMOTE_ADDR'],true);
+
+// Validate the IPN
+if ($ipn_handler_instance->swpm_validate_ipn())
+{
+    $ipn_handler_instance->debug_log('Creating product Information to send.',true);
+
+    if(!$ipn_handler_instance->swpm_validate_and_create_membership()){
+        $ipn_handler_instance->debug_log('IPN product validation failed.',false);
+    }
+}
+$ipn_handler_instance->debug_log('Paypal class finished.',true,true);
diff --git a/ipn/swpm_handle_subsc_ipn.php b/ipn/swpm_handle_subsc_ipn.php
new file mode 100644 (file)
index 0000000..45b9a5d
--- /dev/null
@@ -0,0 +1,222 @@
+<?php
+
+function swpm_handle_subsc_signup_stand_alone($ipn_data,$subsc_ref,$unique_ref,$swpm_id='')
+{
+    global $wpdb;
+    $settings = BSettings::get_instance();
+    $members_table_name = $wpdb->prefix . "swpm_members_tbl";
+    $membership_level_table = $wpdb->prefix . "swpm_membership_tbl";
+    $membership_level = $subsc_ref;
+
+    if(empty($swpm_id))
+    {
+        //Lets try to find an existing user profile for this payment
+        $email = $ipn_data['payer_email'];
+        $query_db = $wpdb->get_row($wpdb->prepare("SELECT * FROM $members_table_name WHERE email = %s", $email), OBJECT);
+        if(!$query_db){//try to retrieve the member details based on the unique_ref
+            swpm_debug_log_subsc("Could not find any record using the given email address (".$email."). Attempting to query database using the unique reference: ".$unique_ref,true);
+            if(!empty($unique_ref)){
+                    $query_db = $wpdb->get_row($wpdb->prepare("SELECT * FROM $members_table_name WHERE subscr_id = %s", $unique_ref), OBJECT);
+                    $swpm_id = $query_db->member_id;
+            }
+            else{
+                    swpm_debug_log_subsc("Unique reference is missing in the notification so we have to assume that this is not a payment for an existing member.",true);
+            }
+        }
+        else
+        {
+            $swpm_id = $query_db->member_id;
+            swpm_debug_log_subsc("Found a match in the member database. Member ID: ".$swpm_id,true);
+        }
+    }
+
+    if (!empty($swpm_id))
+    {
+        //This is payment from an existing member/user. Update the existing member account
+        swpm_debug_log_subsc("Modifying the existing membership profile... Member ID: ".$swpm_id,true);
+        
+        //Upgrade the member account        
+        $account_state = 'active';//This is renewal or upgrade of a previously active account. So the status should be set to active
+        $subscription_starts = (date ("Y-m-d"));
+        $subscr_id = $unique_ref;
+       
+        $resultset = $wpdb->get_row($wpdb->prepare("SELECT * FROM $members_table_name where member_id=%d", $swpm_id), OBJECT);
+        if(!$resultset){
+            swpm_debug_log_subsc("ERROR! Could not find a member account record for the given Member ID: ".$swpm_id,false);
+            return;
+        }
+        $old_membership_level = $resultset->membership_level;
+
+        swpm_debug_log_subsc("Not using secondary membership level feature... upgrading the current membership level.",true);
+        $updatedb = $wpdb->prepare("UPDATE $members_table_name SET account_state=%s, membership_level=%d,subscription_starts=%s,subscr_id=%s WHERE member_id=%d", $account_state, $membership_level, $subscription_starts, $subscr_id, $swpm_id);
+        $results = $wpdb->query($updatedb);
+        do_action('swpm_membership_changed', array('member_id'=>$swpm_id, 'from_level'=>$old_membership_level, 'to_level'=>$membership_level));
+
+        //Set Email details for the account upgrade notification
+        $email = $ipn_data['payer_email'];
+        $subject = $settings->get_value('upgrade-complete-mail-subject');
+        if (empty($subject)){
+            $subject = "Member Account Upgraded";
+        }
+        $body = $settings->get_value('upgrade-complete-mail-body');
+        if (empty($body)){
+            $body = "Your account has been upgraded successfully";
+        }
+        $from_address = get_option('admin_email');
+        $login_link = $settings->get_value('login-page-url');
+
+        $tags1 = array("{first_name}","{last_name}","{user_name}","{login_link}");
+        $vals1 = array($resultset->first_name,$resultset->last_name,$resultset->user_name,$login_link);
+        $email_body = str_replace($tags1,$vals1,$body);
+        $headers = 'From: '.$from_address . "\r\n";
+    }// End of existing user account upgrade
+    else
+    {
+        $default_account_status = $settings->get_value('default-account-status', 'active');
+        // create new member account
+        $data = array();
+        $data['user_name'] ='';
+        $data['password'] = '';
+
+        $data['first_name'] = $ipn_data['first_name'];
+        $data['last_name'] = $ipn_data['last_name'];
+        $data['email'] = $ipn_data['payer_email'];
+        $data['membership_level'] = $membership_level;
+        $data['subscr_id'] = $unique_ref;
+        $data['gender'] = 'not specified';
+
+        swpm_debug_log_subsc("Creating new member account. Membership level ID: ".$membership_level,true);
+
+        $data['address_street'] = $ipn_data['address_street'];
+        $data['address_city'] = $ipn_data['address_city'];
+        $data['address_state'] = $ipn_data['address_state'];
+        $data['address_zipcode'] = $ipn_data['address_zip'];
+        $data['country'] = $ipn_data['address_country'];
+        $data['member_since']  = $data['subscription_starts'] = $data['last_accessed'] = date ("Y-m-d");
+        $data['account_state'] = $default_account_status;
+        $reg_code = uniqid();//rand(10, 1000);
+        $md5_code = md5($reg_code);
+        $data['reg_code'] = $md5_code;
+        $data['referrer'] = $data['extra_info'] = $data['txn_id'] = '';
+        $data['subscr_id']= $subscr_id;
+
+        $wpdb->insert($members_table_name,  $data);//Create the member record
+        $results = $wpdb->get_row($wpdb->prepare("SELECT * FROM $members_table_name where subscr_id=%s and reg_code=%s",$subscr_id, $md5_code), OBJECT);
+        $id = $results->member_id; //Alternatively use $wpdb->insert_id;
+        if(empty($id)){
+            swpm_debug_log_subsc("Error! Failed to insert a new member record. This request will fail.",false);
+            return;
+        }
+        
+        $separator='?';
+        $url = $settings->get_value('registration-page-url');
+        if(strpos($url,'?')!==false){$separator='&';}
+
+        $reg_url = $url.$separator.'member_id='.$id.'&code='.$md5_code;
+        swpm_debug_log_subsc("Member signup URL: ".$reg_url,true);
+
+        $subject = $settings->get_value('reg-prompt-complete-mail-subject');
+        if (empty($subject)){
+            $subject = "Please complete your registration";
+        }
+        $body = $settings->get_value('reg-prompt-complete-mail-body');
+        if (empty($body)){
+            $body = "Please use the following link to complete your registration. \n {reg_link}";
+        }
+        $from_address = $settings->get_value('email-from');
+
+        $tags = array("{first_name}","{last_name}","{reg_link}");
+        $vals = array($data['first_name'],$data['last_name'],$reg_url);
+        $email_body    = str_replace($tags,$vals,$body);
+        $headers = 'From: '.$from_address . "\r\n";
+    }
+
+    wp_mail($email,$subject,$email_body,$headers);
+    swpm_debug_log_subsc("Member signup/upgrade completion email successfully sent to: ".$email,true);
+}
+
+function swpm_handle_subsc_cancel_stand_alone($ipn_data,$refund=false)
+{
+    if($refund)
+    {
+        $subscr_id = $ipn_data['parent_txn_id'];
+        swpm_debug_log_subsc("Refund notification check - check if a member account needs to be deactivated... parent_txn_id: ".$ipn_data['parent_txn_id'],true);
+    }
+    else
+    {
+        $subscr_id = $ipn_data['subscr_id'];
+    }
+
+    if(empty($subscr_id)){
+        swpm_debug_log_subsc("No subscr_id associated with this transaction. Nothing to do here.",true);
+        return;
+    }
+    
+    global $wpdb;
+    $members_table_name = $wpdb->prefix . "swpm_members_tbl";
+
+    swpm_debug_log_subsc("Retrieving member account from the database. Subscr_id: ".$subscr_id, true);
+    $resultset = $wpdb->get_row($wpdb->prepare("SELECT * FROM $members_table_name where subscr_id=%s", $subscr_id), OBJECT);
+    if($resultset)
+    {
+        //Deactivate this account as it is a refund or cancellation
+        $member_id = $resultset->member_id;
+        $account_state = 'inactive';
+        $updatedb = $wpdb->prepare("UPDATE $members_table_name SET account_state=%s WHERE member_id=%s", $account_state, $member_id);
+        $resultset = $wpdb->query($updatedb);
+        swpm_debug_log_subsc("Subscription cancellation received! Member account deactivated. Member ID: ".$member_id, true);
+    }
+    else
+    {
+       swpm_debug_log_subsc("No member found for the given subscriber ID: ".$subscr_id,false);
+       return;
+    }
+}
+
+function swpm_update_member_subscription_start_date_if_applicable($ipn_data)
+{
+    global $wpdb;
+    $members_table_name = $wpdb->prefix . "swpm_members_tbl";
+    $membership_level_table = $wpdb->prefix . "swpm_membership_tbl";
+    $email = $ipn_data['payer_email'];
+    $subscr_id = $ipn_data['subscr_id'];
+    $account_state = BSettings::get_instance()->get_value('default-account-status', 'active');
+    swpm_debug_log_subsc("Updating subscription start date if applicable for this subscription payment. Subscriber ID: ".$subscr_id." Email: ".$email,true);
+
+    //We can also query using the email address
+    $query_db = $wpdb->get_row($wpdb->prepare("SELECT * FROM $members_table_name WHERE subscr_id = %s", $subscr_id), OBJECT);
+    if($query_db){
+        $swpm_id = $query_db->member_id;
+        $current_primary_level = $query_db->membership_level;
+        swpm_debug_log_subsc("Found a record in the member table. The Member ID of the account to check is: ".$swpm_id." Membership Level: ".$current_primary_level,true);
+
+        $subscription_starts = (date ("Y-m-d"));
+
+        $updatedb = $wpdb->prepare("UPDATE $members_table_name SET account_state=%s,subscription_starts=%s WHERE member_id=%d", $account_state, $subscription_starts, $swpm_id);
+        $resultset = $wpdb->query($updatedb);
+        swpm_debug_log_subsc("Updated the member profile with current date as the subscription start date.",true);                
+    }else{
+        swpm_debug_log_subsc("Did not find a record in the members table for subscriber ID: ".$subscr_id,true);
+    }
+}
+
+function swpm_debug_log_subsc($message,$success,$end=false) 
+{
+    $settings = BSettings::get_instance();
+    $debug_enabled = $settings->get_value('enable-debug');
+    if (empty($debug_enabled)) {//Debug is not enabled
+        return;
+    }
+
+    $debug_log_file_name = SIMPLE_WP_MEMBERSHIP_PATH . 'log.txt';
+
+    // Timestamp
+    $text = '['.date('m/d/Y g:i A').'] - '.(($success)?'SUCCESS :':'FAILURE :').$message. "\n";
+    if ($end) {
+       $text .= "\n------------------------------------------------------------------\n\n";
+    }
+    // Write to log
+    $fp=fopen($debug_log_file_name,'a');
+    fwrite($fp, $text );
+    fclose($fp);  // close file
+}
diff --git a/js/index.html b/js/index.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/js/jquery.tools18.min.js b/js/jquery.tools18.min.js
new file mode 100644 (file)
index 0000000..5a50446
--- /dev/null
@@ -0,0 +1,51 @@
+/*!
+ * jQuery Tools v1.2.5 - The missing UI library for the Web
+ * 
+ * dateinput/dateinput.js
+ * overlay/overlay.js
+ * overlay/overlay.apple.js
+ * rangeinput/rangeinput.js
+ * scrollable/scrollable.js
+ * scrollable/scrollable.autoscroll.js
+ * scrollable/scrollable.navigator.js
+ * tabs/tabs.js
+ * tabs/tabs.slideshow.js
+ * toolbox/toolbox.expose.js
+ * toolbox/toolbox.flashembed.js
+ * toolbox/toolbox.history.js
+ * toolbox/toolbox.mousewheel.js
+ * tooltip/tooltip.js
+ * tooltip/tooltip.dynamic.js
+ * tooltip/tooltip.slide.js
+ * validator/validator.js
+ * 
+ * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
+ * 
+ * http://flowplayer.org/tools/
+ * 
+ * jquery.event.wheel.js - rev 1 
+ * Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)
+ * Liscensed under the MIT License (MIT-LICENSE.txt)
+ * http://www.opensource.org/licenses/mit-license.php
+ * Created: 2008-07-01 | Updated: 2008-07-14
+ * 
+ * -----
+ * 
+ */
+(function(a){a.tools=a.tools||{version:"v1.2.5"};var b=[],c,d=[75,76,38,39,74,72,40,37],e={};c=a.tools.dateinput={conf:{format:"mm/dd/yy",selectors:!1,yearRange:[-5,5],lang:"en",offset:[0,0],speed:0,firstDay:0,min:undefined,max:undefined,trigger:!1,css:{prefix:"cal",input:"date",root:0,head:0,title:0,prev:0,next:0,month:0,year:0,days:0,body:0,weeks:0,today:0,current:0,week:0,off:0,sunday:0,focus:0,disabled:0,trigger:0}},localize:function(b,c){a.each(c,function(a,b){c[a]=b.split(",")}),e[b]=c}},c.localize("en",{months:"January,February,March,April,May,June,July,August,September,October,November,December",shortMonths:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",days:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday",shortDays:"Sun,Mon,Tue,Wed,Thu,Fri,Sat"});function f(a,b){return 32-(new Date(a,b,32)).getDate()}function g(a,b){a=""+a,b=b||2;while(a.length<b)a="0"+a;return a}var h=/d{1,4}|m{1,4}|yy(?:yy)?|"[^"]*"|'[^']*'/g,i=a("<a/>");function j(a,b,c){var d=a.getDate(),f=a.getDay(),j=a.getMonth(),k=a.getFullYear(),l={d:d,dd:g(d),ddd:e[c].shortDays[f],dddd:e[c].days[f],m:j+1,mm:g(j+1),mmm:e[c].shortMonths[j],mmmm:e[c].months[j],yy:String(k).slice(2),yyyy:k},m=b.replace(h,function(a){return a in l?l[a]:a.slice(1,a.length-1)});return i.html(m).html()}function k(a){return parseInt(a,10)}function l(a,b){return a.getFullYear()===b.getFullYear()&&a.getMonth()==b.getMonth()&&a.getDate()==b.getDate()}function m(a){if(a){if(a.constructor==Date)return a;if(typeof a=="string"){var b=a.split("-");if(b.length==3)return new Date(k(b[0]),k(b[1])-1,k(b[2]));if(!/^-?\d+$/.test(a))return;a=k(a)}var c=new Date;c.setDate(c.getDate()+a);return c}}function n(c,g){var h=this,i=new Date,n=g.css,o=e[g.lang],p=a("#"+n.root),q=p.find("#"+n.title),r,s,t,u,v,w,x=c.attr("data-value")||g.value||c.val(),y=c.attr("min")||g.min,z=c.attr("max")||g.max,A;y===0&&(y="0"),x=m(x)||i,y=m(y||g.yearRange[0]*365),z=m(z||g.yearRange[1]*365);if(!o)throw"Dateinput: invalid language: "+g.lang;if(c.attr("type")=="date"){var B=a("<input/>");a.each("class,disabled,id,maxlength,name,readonly,required,size,style,tabindex,title,value".split(","),function(a,b){B.attr(b,c.attr(b))}),c.replaceWith(B),c=B}c.addClass(n.input);var C=c.add(h);if(!p.length){p=a("<div><div><a/><div/><a/></div><div><div/><div/></div></div>").hide().css({position:"absolute"}).attr("id",n.root),p.children().eq(0).attr("id",n.head).end().eq(1).attr("id",n.body).children().eq(0).attr("id",n.days).end().eq(1).attr("id",n.weeks).end().end().end().find("a").eq(0).attr("id",n.prev).end().eq(1).attr("id",n.next),q=p.find("#"+n.head).find("div").attr("id",n.title);if(g.selectors){var D=a("<select/>").attr("id",n.month),E=a("<select/>").attr("id",n.year);q.html(D.add(E))}var F=p.find("#"+n.days);for(var G=0;G<7;G++)F.append(a("<span/>").text(o.shortDays[(G+g.firstDay)%7]));a("body").append(p)}g.trigger&&(r=a("<a/>").attr("href","#").addClass(n.trigger).click(function(a){h.show();return a.preventDefault()}).insertAfter(c));var H=p.find("#"+n.weeks);E=p.find("#"+n.year),D=p.find("#"+n.month);function I(b,d,e){x=b,u=b.getFullYear(),v=b.getMonth(),w=b.getDate(),e=e||a.Event("api"),e.type="change",C.trigger(e,[b]);e.isDefaultPrevented()||(c.val(j(b,d.format,d.lang)),c.data("date",b),h.hide(e))}function J(b){b.type="onShow",C.trigger(b),a(document).bind("keydown.d",function(b){if(b.ctrlKey)return!0;var e=b.keyCode;if(e==8){c.val("");return h.hide(b)}if(e==27)return h.hide(b);if(a(d).index(e)>=0){if(!A){h.show(b);return b.preventDefault()}var f=a("#"+n.weeks+" a"),g=a("."+n.focus),i=f.index(g);g.removeClass(n.focus);if(e==74||e==40)i+=7;else if(e==75||e==38)i-=7;else if(e==76||e==39)i+=1;else if(e==72||e==37)i-=1;i>41?(h.addMonth(),g=a("#"+n.weeks+" a:eq("+(i-42)+")")):i<0?(h.addMonth(-1),g=a("#"+n.weeks+" a:eq("+(i+42)+")")):g=f.eq(i),g.addClass(n.focus);return b.preventDefault()}if(e==34)return h.addMonth();if(e==33)return h.addMonth(-1);if(e==36)return h.today();e==13&&(a(b.target).is("select")||a("."+n.focus).click());return a([16,17,18,9]).index(e)>=0}),a(document).bind("click.d",function(b){var d=b.target;!a(d).parents("#"+n.root).length&&d!=c[0]&&(!r||d!=r[0])&&(d!=document)&&h.hide(b)})}a.extend(h,{show:function(d){if(!(c.attr("readonly")||c.attr("disabled")||A)){d=d||a.Event(),d.type="onBeforeShow",C.trigger(d);if(d.isDefaultPrevented())return;a.each(b,function(){this.hide()}),A=!0,D.unbind("change").change(function(){h.setValue(E.val(),a(this).val())}),E.unbind("change").change(function(){h.setValue(a(this).val(),D.val())}),s=p.find("#"+n.prev).unbind("click").click(function(a){s.hasClass(n.disabled)||h.addMonth(-1);return!1}),t=p.find("#"+n.next).unbind("click").click(function(a){t.hasClass(n.disabled)||h.addMonth();return!1}),h.setValue(x);var e=c.offset();/iPad/i.test(navigator.userAgent)&&(e.top-=a(window).scrollTop()),p.css({top:e.top+c.outerHeight(true)+g.offset[0],left:e.left+g.offset[1]}),g.speed?p.show(g.speed,function(){J(d)}):(p.show(),J(d));return h}},setValue:function(b,c,d){var e=k(c)>=-1?new Date(k(b),k(c),k(d||1)):b||x;e<y?e=y:e>z&&(e=z),b=e.getFullYear(),c=e.getMonth(),d=e.getDate(),c==-1?(c=11,b--):c==12&&(c=0,b++);if(!A){I(e,g);return h}v=c,u=b;var j=new Date(b,c,1-g.firstDay),m=j.getDay(),p=f(b,c),r=f(b,c-1),w;if(g.selectors){D.empty(),a.each(o.months,function(c,d){y<new Date(b,c+1,-1)&&z>new Date(b,c,0)&&D.append(a("<option/>").html(d).attr("value",c))}),E.empty();var B=i.getFullYear();for(var C=B+g.yearRange[0];C<B+g.yearRange[1];C++)y<=new Date(C+1,-1,1)&&z>new Date(C,0,0)&&E.append(a("<option/>").text(C));D.val(c),E.val(b)}else q.html(o.months[c]+" "+b);H.empty(),s.add(t).removeClass(n.disabled);for(var F=m?0:-7,G,J;F<(m?42:35);F++)G=a("<a/>"),F%7===0&&(w=a("<div/>").addClass(n.week),H.append(w)),F<m?(G.addClass(n.off),J=r-m+F+1,e=new Date(b,c-1,J)):F<m+p?(J=F-m+1,e=new Date(b,c,J),l(x,e)?G.attr("id",n.current).addClass(n.focus):l(i,e)&&G.attr("id",n.today)):(G.addClass(n.off),J=F-p-m+1,e=new Date(b,c+1,J)),y&&e<y&&G.add(s).addClass(n.disabled),z&&e>z&&G.add(t).addClass(n.disabled),G.attr("href","#"+J).text(J).data("date",e),w.append(G);H.find("a").click(function(b){var c=a(this);c.hasClass(n.disabled)||(a("#"+n.current).removeAttr("id"),c.attr("id",n.current),I(c.data("date"),g,b));return!1}),n.sunday&&H.find(n.week).each(function(){var b=g.firstDay?7-g.firstDay:0;a(this).children().slice(b,b+1).addClass(n.sunday)});return h},setMin:function(a,b){y=m(a),b&&x<y&&h.setValue(y);return h},setMax:function(a,b){z=m(a),b&&x>z&&h.setValue(z);return h},today:function(){return h.setValue(i)},addDay:function(a){return this.setValue(u,v,w+(a||1))},addMonth:function(a){return this.setValue(u,v+(a||1),w)},addYear:function(a){return this.setValue(u+(a||1),v,w)},hide:function(b){if(A){b=a.Event(),b.type="onHide",C.trigger(b),a(document).unbind("click.d").unbind("keydown.d");if(b.isDefaultPrevented())return;p.hide(),A=!1}return h},getConf:function(){return g},getInput:function(){return c},getCalendar:function(){return p},getValue:function(a){return a?j(x,a,g.lang):x},isOpen:function(){return A}}),a.each(["onBeforeShow","onShow","change","onHide"],function(b,c){a.isFunction(g[c])&&a(h).bind(c,g[c]),h[c]=function(b){b&&a(h).bind(c,b);return h}}),c.bind("focus click",h.show).keydown(function(b){var c=b.keyCode;if(!A&&a(d).index(c)>=0){h.show(b);return b.preventDefault()}return b.shiftKey||b.ctrlKey||b.altKey||c==9?!0:b.preventDefault()}),m(c.val())&&I(x,g)}a.expr[":"].date=function(b){var c=b.getAttribute("type");return c&&c=="date"||a(b).data("dateinput")},a.fn.dateinput=function(d){if(this.data("dateinput"))return this;d=a.extend(!0,{},c.conf,d),a.each(d.css,function(a,b){!b&&a!="prefix"&&(d.css[a]=(d.css.prefix||"")+(b||a))});var e;this.each(function(){var c=new n(a(this),d);b.push(c);var f=c.getInput().data("dateinput",c);e=e?e.add(f):f});return e?e:this}})(jQuery);
+(function(a){a.tools=a.tools||{version:"v1.2.5"},a.tools.overlay={addEffect:function(a,b,d){c[a]=[b,d]},conf:{close:null,closeOnClick:!0,closeOnEsc:!0,closeSpeed:"fast",effect:"default",fixed:!a.browser.msie||a.browser.version>6,left:"center",load:!1,mask:null,oneInstance:!0,speed:"normal",target:null,top:"10%"}};var b=[],c={};a.tools.overlay.addEffect("default",function(b,c){var d=this.getConf(),e=a(window);d.fixed||(b.top+=e.scrollTop(),b.left+=e.scrollLeft()),b.position=d.fixed?"fixed":"absolute",this.getOverlay().css(b).fadeIn(d.speed,c)},function(a){this.getOverlay().fadeOut(this.getConf().closeSpeed,a)});function d(d,e){var f=this,g=d.add(f),h=a(window),i,j,k,l=a.tools.expose&&(e.mask||e.expose),m=Math.random().toString().slice(10);l&&(typeof l=="string"&&(l={color:l}),l.closeOnClick=l.closeOnEsc=!1);var n=e.target||d.attr("rel");j=n?a(n):null||d;if(!j.length)throw"Could not find Overlay: "+n;d&&d.index(j)==-1&&d.click(function(a){f.load(a);return a.preventDefault()}),a.extend(f,{load:function(d){if(f.isOpened())return f;var i=c[e.effect];if(!i)throw"Overlay: cannot find effect : \""+e.effect+"\"";e.oneInstance&&a.each(b,function(){this.close(d)}),d=d||a.Event(),d.type="onBeforeLoad",g.trigger(d);if(d.isDefaultPrevented())return f;k=!0,l&&a(j).expose(l);var n=e.top,o=e.left,p=j.outerWidth(true),q=j.outerHeight(true);typeof n=="string"&&(n=n=="center"?Math.max((h.height()-q)/2,0):parseInt(n,10)/100*h.height()),o=="center"&&(o=Math.max((h.width()-p)/2,0)),i[0].call(f,{top:n,left:o},function(){k&&(d.type="onLoad",g.trigger(d))}),l&&e.closeOnClick&&a.mask.getMask().one("click",f.close),e.closeOnClick&&a(document).bind("click."+m,function(b){a(b.target).parents(j).length||f.close(b)}),e.closeOnEsc&&a(document).bind("keydown."+m,function(a){a.keyCode==27&&f.close(a)});return f},close:function(b){if(!f.isOpened())return f;b=b||a.Event(),b.type="onBeforeClose",g.trigger(b);if(!b.isDefaultPrevented()){k=!1,c[e.effect][1].call(f,function(){b.type="onClose",g.trigger(b)}),a(document).unbind("click."+m).unbind("keydown."+m),l&&a.mask.close();return f}},getOverlay:function(){return j},getTrigger:function(){return d},getClosers:function(){return i},isOpened:function(){return k},getConf:function(){return e}}),a.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(b,c){a.isFunction(e[c])&&a(f).bind(c,e[c]),f[c]=function(b){b&&a(f).bind(c,b);return f}}),i=j.find(e.close||".close"),!i.length&&!e.close&&(i=a("<a class=\"close\"></a>"),j.prepend(i)),i.click(function(a){f.close(a)}),e.load&&f.load()}a.fn.overlay=function(c){var e=this.data("overlay");if(e)return e;a.isFunction(c)&&(c={onBeforeLoad:c}),c=a.extend(!0,{},a.tools.overlay.conf,c),this.each(function(){e=new d(a(this),c),b.push(e),a(this).data("overlay",e)});return c.api?e:this}})(jQuery);
+(function(a){var b=a.tools.overlay,c=a(window);a.extend(b.conf,{start:{top:null,left:null},fadeInSpeed:"fast",zIndex:9999});function d(a){var b=a.offset();return{top:b.top+a.height()/2,left:b.left+a.width()/2}}var e=function(b,e){var f=this.getOverlay(),g=this.getConf(),h=this.getTrigger(),i=this,j=f.outerWidth(true),k=f.data("img"),l=g.fixed?"fixed":"absolute";if(!k){var m=f.css("backgroundImage");if(!m)throw"background-image CSS property not set for overlay";m=m.slice(m.indexOf("(")+1,m.indexOf(")")).replace(/\"/g,""),f.css("backgroundImage","none"),k=a("<img src=\""+m+"\"/>"),k.css({border:0,display:"none"}).width(j),a("body").append(k),f.data("img",k)}var n=g.start.top||Math.round(c.height()/2),o=g.start.left||Math.round(c.width()/2);if(h){var p=d(h);n=p.top,o=p.left}g.fixed?(n-=c.scrollTop(),o-=c.scrollLeft()):(b.top+=c.scrollTop(),b.left+=c.scrollLeft()),k.css({position:"absolute",top:n,left:o,width:0,zIndex:g.zIndex}).show(),b.position=l,f.css(b),k.animate({top:f.css("top"),left:f.css("left"),width:j},g.speed,function(){f.css("zIndex",g.zIndex+1).fadeIn(g.fadeInSpeed,function(){i.isOpened()&&!a(this).index(f)?e.call():f.hide()})}).css("position",l)},f=function(b){var e=this.getOverlay().hide(),f=this.getConf(),g=this.getTrigger(),h=e.data("img"),i={top:f.start.top,left:f.start.left,width:0};g&&a.extend(i,d(g)),f.fixed&&h.css({position:"absolute"}).animate({top:"+="+c.scrollTop(),left:"+="+c.scrollLeft()},0),h.animate(i,f.closeSpeed,b)};b.addEffect("apple",e,f)})(jQuery);
+(function(a){a.tools=a.tools||{version:"v1.2.5"};var b;b=a.tools.rangeinput={conf:{min:0,max:100,step:"any",steps:0,value:0,precision:undefined,vertical:0,keyboard:!0,progress:!1,speed:100,css:{input:"range",slider:"slider",progress:"progress",handle:"handle"}}};var c,d;a.fn.drag=function(b){document.ondragstart=function(){return!1},b=a.extend({x:!0,y:!0,drag:!0},b),c=c||a(document).bind("mousedown mouseup",function(e){var f=a(e.target);if(e.type=="mousedown"&&f.data("drag")){var g=f.position(),h=e.pageX-g.left,i=e.pageY-g.top,j=!0;c.bind("mousemove.drag",function(a){var c=a.pageX-h,e=a.pageY-i,g={};b.x&&(g.left=c),b.y&&(g.top=e),j&&(f.trigger("dragStart"),j=!1),b.drag&&f.css(g),f.trigger("drag",[e,c]),d=f}),e.preventDefault()}else try{d&&d.trigger("dragEnd")}finally{c.unbind("mousemove.drag"),d=null}});return this.data("drag",!0)};function e(a,b){var c=Math.pow(10,b);return Math.round(a*c)/c}function f(a,b){var c=parseInt(a.css(b),10);if(c)return c;var d=a[0].currentStyle;return d&&d.width&&parseInt(d.width,10)}function g(a){var b=a.data("events");return b&&b.onSlide}function h(b,c){var d=this,h=c.css,i=a("<div><div/><a href='#'/></div>").data("rangeinput",d),j,k,l,m,n;b.before(i);var o=i.addClass(h.slider).find("a").addClass(h.handle),p=i.find("div").addClass(h.progress);a.each("min,max,step,value".split(","),function(a,d){var e=b.attr(d);parseFloat(e)&&(c[d]=parseFloat(e,10))});var q=c.max-c.min,r=c.step=="any"?0:c.step,s=c.precision;if(s===undefined)try{s=r.toString().split(".")[1].length}catch(t){s=0}if(b.attr("type")=="range"){var u=a("<input/>");a.each("class,disabled,id,maxlength,name,readonly,required,size,style,tabindex,title,value".split(","),function(a,c){u.attr(c,b.attr(c))}),u.val(c.value),b.replaceWith(u),b=u}b.addClass(h.input);var v=a(d).add(b),w=!0;function x(a,f,g,h){g===undefined?g=f/m*q:h&&(g-=c.min),r&&(g=Math.round(g/r)*r);if(f===undefined||r)f=g*m/q;if(isNaN(g))return d;f=Math.max(0,Math.min(f,m)),g=f/m*q;if(h||!j)g+=c.min;j&&(h?f=m-f:g=c.max-g),g=e(g,s);var i=a.type=="click";if(w&&k!==undefined&&!i){a.type="onSlide",v.trigger(a,[g,f]);if(a.isDefaultPrevented())return d}var l=i?c.speed:0,t=i?function(){a.type="change",v.trigger(a,[g])}:null;j?(o.animate({top:f},l,t),c.progress&&p.animate({height:m-f+o.width()/2},l)):(o.animate({left:f},l,t),c.progress&&p.animate({width:f+o.width()/2},l)),k=g,n=f,b.val(g);return d}a.extend(d,{getValue:function(){return k},setValue:function(b,c){y();return x(c||a.Event("api"),undefined,b,!0)},getConf:function(){return c},getProgress:function(){return p},getHandle:function(){return o},getInput:function(){return b},step:function(b,e){e=e||a.Event();var f=c.step=="any"?1:c.step;d.setValue(k+f*(b||1),e)},stepUp:function(a){return d.step(a||1)},stepDown:function(a){return d.step(-a||-1)}}),a.each("onSlide,change".split(","),function(b,e){a.isFunction(c[e])&&a(d).bind(e,c[e]),d[e]=function(b){b&&a(d).bind(e,b);return d}}),o.drag({drag:!1}).bind("dragStart",function(){y(),w=g(a(d))||g(b)}).bind("drag",function(a,c,d){if(b.is(":disabled"))return!1;x(a,j?c:d)}).bind("dragEnd",function(a){a.isDefaultPrevented()||(a.type="change",v.trigger(a,[k]))}).click(function(a){return a.preventDefault()}),i.click(function(a){if(b.is(":disabled")||a.target==o[0])return a.preventDefault();y();var c=o.width()/2;x(a,j?m-l-c+a.pageY:a.pageX-l-c)}),c.keyboard&&b.keydown(function(c){if(!b.attr("readonly")){var e=c.keyCode,f=a([75,76,38,33,39]).index(e)!=-1,g=a([74,72,40,34,37]).index(e)!=-1;if((f||g)&&!(c.shiftKey||c.altKey||c.ctrlKey)){f?d.step(e==33?10:1,c):g&&d.step(e==34?-10:-1,c);return c.preventDefault()}}}),b.blur(function(b){var c=a(this).val();c!==k&&d.setValue(c,b)}),a.extend(b[0],{stepUp:d.stepUp,stepDown:d.stepDown});function y(){j=c.vertical||f(i,"height")>f(i,"width"),j?(m=f(i,"height")-f(o,"height"),l=i.offset().top+m):(m=f(i,"width")-f(o,"width"),l=i.offset().left)}function z(){y(),d.setValue(c.value!==undefined?c.value:c.min)}z(),m||a(window).load(z)}a.expr[":"].range=function(b){var c=b.getAttribute("type");return c&&c=="range"||a(b).filter("input").data("rangeinput")},a.fn.rangeinput=function(c){if(this.data("rangeinput"))return this;c=a.extend(!0,{},b.conf,c);var d;this.each(function(){var b=new h(a(this),a.extend(!0,{},c)),e=b.getInput().data("rangeinput",b);d=d?d.add(e):e});return d?d:this}})(jQuery);
+(function(a){a.tools=a.tools||{version:"v1.2.5"},a.tools.scrollable={conf:{activeClass:"active",circular:!1,clonedClass:"cloned",disabledClass:"disabled",easing:"swing",initialIndex:0,item:null,items:".items",keyboard:!0,mousewheel:!1,next:".next",prev:".prev",speed:400,vertical:!1,touch:!0,wheelSpeed:0}};function b(a,b){var c=parseInt(a.css(b),10);if(c)return c;var d=a[0].currentStyle;return d&&d.width&&parseInt(d.width,10)}function c(b,c){var d=a(c);return d.length<2?d:b.parent().find(c)}var d;function e(b,e){var f=this,g=b.add(f),h=b.children(),i=0,j=e.vertical;d||(d=f),h.length>1&&(h=a(e.items,b)),a.extend(f,{getConf:function(){return e},getIndex:function(){return i},getSize:function(){return f.getItems().size()},getNaviButtons:function(){return m.add(n)},getRoot:function(){return b},getItemWrap:function(){return h},getItems:function(){return h.children(e.item).not("."+e.clonedClass)},move:function(a,b){return f.seekTo(i+a,b)},next:function(a){return f.move(1,a)},prev:function(a){return f.move(-1,a)},begin:function(a){return f.seekTo(0,a)},end:function(a){return f.seekTo(f.getSize()-1,a)},focus:function(){d=f;return f},addItem:function(b){b=a(b),e.circular?(h.children("."+e.clonedClass+":last").before(b),h.children("."+e.clonedClass+":first").replaceWith(b.clone().addClass(e.clonedClass))):h.append(b),g.trigger("onAddItem",[b]);return f},seekTo:function(b,c,k){b.jquery||(b*=1);if(e.circular&&b===0&&i==-1&&c!==0)return f;if(!e.circular&&b<0||b>f.getSize()||b<-1)return f;var l=b;b.jquery?b=f.getItems().index(b):l=f.getItems().eq(b);var m=a.Event("onBeforeSeek");if(!k){g.trigger(m,[b,c]);if(m.isDefaultPrevented()||!l.length)return f}var n=j?{top:-l.position().top}:{left:-l.position().left};i=b,d=f,c===undefined&&(c=e.speed),h.animate(n,c,e.easing,k||function(){g.trigger("onSeek",[b])});return f}}),a.each(["onBeforeSeek","onSeek","onAddItem"],function(b,c){a.isFunction(e[c])&&a(f).bind(c,e[c]),f[c]=function(b){b&&a(f).bind(c,b);return f}});if(e.circular){var k=f.getItems().slice(-1).clone().prependTo(h),l=f.getItems().eq(1).clone().appendTo(h);k.add(l).addClass(e.clonedClass),f.onBeforeSeek(function(a,b,c){if(!a.isDefaultPrevented()){if(b==-1){f.seekTo(k,c,function(){f.end(0)});return a.preventDefault()}b==f.getSize()&&f.seekTo(l,c,function(){f.begin(0)})}}),f.seekTo(0,0,function(){})}var m=c(b,e.prev).click(function(){f.prev()}),n=c(b,e.next).click(function(){f.next()});!e.circular&&f.getSize()>1&&(f.onBeforeSeek(function(a,b){setTimeout(function(){a.isDefaultPrevented()||(m.toggleClass(e.disabledClass,b<=0),n.toggleClass(e.disabledClass,b>=f.getSize()-1))},1)}),e.initialIndex||m.addClass(e.disabledClass)),e.mousewheel&&a.fn.mousewheel&&b.mousewheel(function(a,b){if(e.mousewheel){f.move(b<0?1:-1,e.wheelSpeed||50);return!1}});if(e.touch){var o={};h[0].ontouchstart=function(a){var b=a.touches[0];o.x=b.clientX,o.y=b.clientY},h[0].ontouchmove=function(a){if(a.touches.length==1&&!h.is(":animated")){var b=a.touches[0],c=o.x-b.clientX,d=o.y-b.clientY;f[j&&d>0||!j&&c>0?"next":"prev"](),a.preventDefault()}}}e.keyboard&&a(document).bind("keydown.scrollable",function(b){if(e.keyboard&&!b.altKey&&!b.ctrlKey&&!a(b.target).is(":input")){if(e.keyboard!="static"&&d!=f)return;var c=b.keyCode;if(j&&(c==38||c==40)){f.move(c==38?-1:1);return b.preventDefault()}if(!j&&(c==37||c==39)){f.move(c==37?-1:1);return b.preventDefault()}}}),e.initialIndex&&f.seekTo(e.initialIndex,0,function(){})}a.fn.scrollable=function(b){var c=this.data("scrollable");if(c)return c;b=a.extend({},a.tools.scrollable.conf,b),this.each(function(){c=new e(a(this),b),a(this).data("scrollable",c)});return b.api?c:this}})(jQuery);
+(function(a){var b=a.tools.scrollable;b.autoscroll={conf:{autoplay:!0,interval:3e3,autopause:!0}},a.fn.autoscroll=function(c){typeof c=="number"&&(c={interval:c});var d=a.extend({},b.autoscroll.conf,c),e;this.each(function(){var b=a(this).data("scrollable");b&&(e=b);var c,f=!0;b.play=function(){c||(f=!1,c=setInterval(function(){b.next()},d.interval))},b.pause=function(){c=clearInterval(c)},b.stop=function(){b.pause(),f=!0},d.autopause&&b.getRoot().add(b.getNaviButtons()).hover(b.pause,b.play),d.autoplay&&b.play()});return d.api?e:this}})(jQuery);
+(function(a){var b=a.tools.scrollable;b.navigator={conf:{navi:".navi",naviItem:null,activeClass:"active",indexed:!1,idPrefix:null,history:!1}};function c(b,c){var d=a(c);return d.length<2?d:b.parent().find(c)}a.fn.navigator=function(d){typeof d=="string"&&(d={navi:d}),d=a.extend({},b.navigator.conf,d);var e;this.each(function(){var b=a(this).data("scrollable"),f=d.navi.jquery?d.navi:c(b.getRoot(),d.navi),g=b.getNaviButtons(),h=d.activeClass,i=d.history&&a.fn.history;b&&(e=b),b.getNaviButtons=function(){return g.add(f)};function j(a,c,d){b.seekTo(c);if(i)location.hash&&(location.hash=a.attr("href").replace("#",""));else return d.preventDefault()}function k(){return f.find(d.naviItem||"> *")}function l(b){var c=a("<"+(d.naviItem||"a")+"/>").click(function(c){j(a(this),b,c)}).attr("href","#"+b);b===0&&c.addClass(h),d.indexed&&c.text(b+1),d.idPrefix&&c.attr("id",d.idPrefix+b);return c.appendTo(f)}k().length?k().each(function(b){a(this).click(function(c){j(a(this),b,c)})}):a.each(b.getItems(),function(a){l(a)}),b.onBeforeSeek(function(a,b){setTimeout(function(){if(!a.isDefaultPrevented()){var c=k().eq(b);!a.isDefaultPrevented()&&c.length&&k().removeClass(h).eq(b).addClass(h)}},1)});function m(a,b){var c=k().eq(b.replace("#",""));c.length||(c=k().filter("[href="+b+"]")),c.click()}b.onAddItem(function(a,c){c=l(b.getItems().index(c)),i&&c.history(m)}),i&&k().history(m)});return d.api?e:this}})(jQuery);
+(function(a){a.tools=a.tools||{version:"v1.2.5"},a.tools.tabs={conf:{tabs:"a",current:"current",onBeforeClick:null,onClick:null,effect:"default",initialIndex:0,event:"click",rotate:!1,history:!1},addEffect:function(a,c){b[a]=c}};var b={"default":function(a,b){this.getPanes().hide().eq(a).show(),b.call()},fade:function(a,b){var c=this.getConf(),d=c.fadeOutSpeed,e=this.getPanes();d?e.fadeOut(d):e.hide(),e.eq(a).fadeIn(c.fadeInSpeed,b)},slide:function(a,b){this.getPanes().slideUp(200),this.getPanes().eq(a).slideDown(400,b)},ajax:function(a,b){this.getPanes().eq(0).load(this.getTabs().eq(a).attr("href"),b)}},c;a.tools.tabs.addEffect("horizontal",function(b,d){c||(c=this.getPanes().eq(0).width()),this.getCurrentPane().animate({width:0},function(){a(this).hide()}),this.getPanes().eq(b).animate({width:c},function(){a(this).show(),d.call()})});function d(c,d,e){var f=this,g=c.add(this),h=c.find(e.tabs),i=d.jquery?d:c.children(d),j;h.length||(h=c.children()),i.length||(i=c.parent().find(d)),i.length||(i=a(d)),a.extend(this,{click:function(c,d){var i=h.eq(c);typeof c=="string"&&c.replace("#","")&&(i=h.filter("[href*="+c.replace("#","")+"]"),c=Math.max(h.index(i),0));if(e.rotate){var k=h.length-1;if(c<0)return f.click(k,d);if(c>k)return f.click(0,d)}if(!i.length){if(j>=0)return f;c=e.initialIndex,i=h.eq(c)}if(c===j)return f;d=d||a.Event(),d.type="onBeforeClick",g.trigger(d,[c]);if(!d.isDefaultPrevented()){b[e.effect].call(f,c,function(){d.type="onClick",g.trigger(d,[c])}),j=c,h.removeClass(e.current),i.addClass(e.current);return f}},getConf:function(){return e},getTabs:function(){return h},getPanes:function(){return i},getCurrentPane:function(){return i.eq(j)},getCurrentTab:function(){return h.eq(j)},getIndex:function(){return j},next:function(){return f.click(j+1)},prev:function(){return f.click(j-1)},destroy:function(){h.unbind(e.event).removeClass(e.current),i.find("a[href^=#]").unbind("click.T");return f}}),a.each("onBeforeClick,onClick".split(","),function(b,c){a.isFunction(e[c])&&a(f).bind(c,e[c]),f[c]=function(b){b&&a(f).bind(c,b);return f}}),e.history&&a.fn.history&&(a.tools.history.init(h),e.event="history"),h.each(function(b){a(this).bind(e.event,function(a){f.click(b,a);return a.preventDefault()})}),i.find("a[href^=#]").bind("click.T",function(b){f.click(a(this).attr("href"),b)}),location.hash&&e.tabs=="a"&&c.find("[href="+location.hash+"]").length?f.click(location.hash):(e.initialIndex===0||e.initialIndex>0)&&f.click(e.initialIndex)}a.fn.tabs=function(b,c){var e=this.data("tabs");e&&(e.destroy(),this.removeData("tabs")),a.isFunction(c)&&(c={onBeforeClick:c}),c=a.extend({},a.tools.tabs.conf,c),this.each(function(){e=new d(a(this),b,c),a(this).data("tabs",e)});return c.api?e:this}})(jQuery);
+(function(a){var b;b=a.tools.tabs.slideshow={conf:{next:".forward",prev:".backward",disabledClass:"disabled",autoplay:!1,autopause:!0,interval:3e3,clickable:!0,api:!1}};function c(b,c){var d=this,e=b.add(this),f=b.data("tabs"),g,h=!0;function i(c){var d=a(c);return d.length<2?d:b.parent().find(c)}var j=i(c.next).click(function(){f.next()}),k=i(c.prev).click(function(){f.prev()});a.extend(d,{getTabs:function(){return f},getConf:function(){return c},play:function(){if(g)return d;var b=a.Event("onBeforePlay");e.trigger(b);if(b.isDefaultPrevented())return d;g=setInterval(f.next,c.interval),h=!1,e.trigger("onPlay");return d},pause:function(){if(!g)return d;var b=a.Event("onBeforePause");e.trigger(b);if(b.isDefaultPrevented())return d;g=clearInterval(g),e.trigger("onPause");return d},stop:function(){d.pause(),h=!0}}),a.each("onBeforePlay,onPlay,onBeforePause,onPause".split(","),function(b,e){a.isFunction(c[e])&&a(d).bind(e,c[e]),d[e]=function(b){return a(d).bind(e,b)}}),c.autopause&&f.getTabs().add(j).add(k).add(f.getPanes()).hover(d.pause,function(){h||d.play()}),c.autoplay&&d.play(),c.clickable&&f.getPanes().click(function(){f.next()});if(!f.getConf().rotate){var l=c.disabledClass;f.getIndex()||k.addClass(l),f.onBeforeClick(function(a,b){k.toggleClass(l,!b),j.toggleClass(l,b==f.getTabs().length-1)})}}a.fn.slideshow=function(d){var e=this.data("slideshow");if(e)return e;d=a.extend({},b.conf,d),this.each(function(){e=new c(a(this),d),a(this).data("slideshow",e)});return d.api?e:this}})(jQuery);
+(function(a){a.tools=a.tools||{version:"v1.2.5"};var b;b=a.tools.expose={conf:{maskId:"exposeMask",loadSpeed:"slow",closeSpeed:"fast",closeOnClick:!0,closeOnEsc:!0,zIndex:9998,opacity:.8,startOpacity:0,color:"#fff",onLoad:null,onClose:null}};function c(){if(a.browser.msie){var b=a(document).height(),c=a(window).height();return[window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,b-c<20?c:b]}return[a(document).width(),a(document).height()]}function d(b){if(b)return b.call(a.mask)}var e,f,g,h,i;a.mask={load:function(j,k){if(g)return this;typeof j=="string"&&(j={color:j}),j=j||h,h=j=a.extend(a.extend({},b.conf),j),e=a("#"+j.maskId),e.length||(e=a("<div/>").attr("id",j.maskId),a("body").append(e));var l=c();e.css({position:"absolute",top:0,left:0,width:l[0],height:l[1],display:"none",opacity:j.startOpacity,zIndex:j.zIndex}),j.color&&e.css("backgroundColor",j.color);if(d(j.onBeforeLoad)===!1)return this;j.closeOnEsc&&a(document).bind("keydown.mask",function(b){b.keyCode==27&&a.mask.close(b)}),j.closeOnClick&&e.bind("click.mask",function(b){a.mask.close(b)}),a(window).bind("resize.mask",function(){a.mask.fit()}),k&&k.length&&(i=k.eq(0).css("zIndex"),a.each(k,function(){var b=a(this);/relative|absolute|fixed/i.test(b.css("position"))||b.css("position","relative")}),f=k.css({zIndex:Math.max(j.zIndex+1,i=="auto"?0:i)})),e.css({display:"block"}).fadeTo(j.loadSpeed,j.opacity,function(){a.mask.fit(),d(j.onLoad),g="full"}),g=!0;return this},close:function(){if(g){if(d(h.onBeforeClose)===!1)return this;e.fadeOut(h.closeSpeed,function(){d(h.onClose),f&&f.css({zIndex:i}),g=!1}),a(document).unbind("keydown.mask"),e.unbind("click.mask"),a(window).unbind("resize.mask")}return this},fit:function(){if(g){var a=c();e.css({width:a[0],height:a[1]})}},getMask:function(){return e},isLoaded:function(a){return a?g=="full":g},getConf:function(){return h},getExposed:function(){return f}},a.fn.mask=function(b){a.mask.load(b);return this},a.fn.expose=function(b){a.mask.load(b,this);return this}})(jQuery);
+(function(){var a=document.all,b="http://www.adobe.com/go/getflashplayer",c=typeof jQuery=="function",d=/(\d+)[^\d]+(\d+)[^\d]*(\d*)/,e={width:"100%",height:"100%",id:"_"+(""+Math.random()).slice(9),allowfullscreen:!0,allowscriptaccess:"always",quality:"high",version:[3,0],onFail:null,expressInstall:null,w3c:!1,cachebusting:!1};window.attachEvent&&window.attachEvent("onbeforeunload",function(){__flash_unloadHandler=function(){},__flash_savedUnloadHandler=function(){}});function f(a,b){if(b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function g(a,b){var c=[];for(var d in a)a.hasOwnProperty(d)&&(c[d]=b(a[d]));return c}window.flashembed=function(a,b,c){typeof a=="string"&&(a=document.getElementById(a.replace("#","")));if(a){typeof b=="string"&&(b={src:b});return new j(a,f(f({},e),b),c)}};var h=f(window.flashembed,{conf:e,getVersion:function(){var a,b;try{b=navigator.plugins["Shockwave Flash"].description.slice(16)}catch(c){try{a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"),b=a&&a.GetVariable("$version")}catch(e){try{a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"),b=a&&a.GetVariable("$version")}catch(f){}}}b=d.exec(b);return b?[b[1],b[3]]:[0,0]},asString:function(a){if(a===null||a===undefined)return null;var b=typeof a;b=="object"&&a.push&&(b="array");switch(b){case"string":a=a.replace(new RegExp("([\"\\\\])","g"),"\\$1"),a=a.replace(/^\s?(\d+\.?\d+)%/,"$1pct");return"\""+a+"\"";case"array":return"["+g(a,function(a){return h.asString(a)}).join(",")+"]";case"function":return"\"function()\"";case"object":var c=[];for(var d in a)a.hasOwnProperty(d)&&c.push("\""+d+"\":"+h.asString(a[d]));return"{"+c.join(",")+"}"}return String(a).replace(/\s/g," ").replace(/\'/g,"\"")},getHTML:function(b,c){b=f({},b);var d="<object width=\""+b.width+"\" height=\""+b.height+"\" id=\""+b.id+"\" name=\""+b.id+"\"";b.cachebusting&&(b.src+=(b.src.indexOf("?")!=-1?"&":"?")+Math.random()),b.w3c||!a?d+=" data=\""+b.src+"\" type=\"application/x-shockwave-flash\"":d+=" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"",d+=">";if(b.w3c||a)d+="<param name=\"movie\" value=\""+b.src+"\" />";b.width=b.height=b.id=b.w3c=b.src=null,b.onFail=b.version=b.expressInstall=null;for(var e in b)b[e]&&(d+="<param name=\""+e+"\" value=\""+b[e]+"\" />");var g="";if(c){for(var i in c)if(c[i]){var j=c[i];g+=i+"="+(/function|object/.test(typeof j)?h.asString(j):j)+"&"}g=g.slice(0,-1),d+="<param name=\"flashvars\" value='"+g+"' />"}d+="</object>";return d},isSupported:function(a){return i[0]>a[0]||i[0]==a[0]&&i[1]>=a[1]}}),i=h.getVersion();function j(c,d,e){if(h.isSupported(d.version))c.innerHTML=h.getHTML(d,e);else if(d.expressInstall&&h.isSupported([6,65]))c.innerHTML=h.getHTML(f(d,{src:d.expressInstall}),{MMredirectURL:location.href,MMplayerType:"PlugIn",MMdoctitle:document.title});else{c.innerHTML.replace(/\s/g,"")||(c.innerHTML="<h2>Flash version "+d.version+" or greater is required</h2><h3>"+(i[0]>0?"Your version is "+i:"You have no flash plugin installed")+"</h3>"+(c.tagName=="A"?"<p>Click here to download latest version</p>":"<p>Download latest version from <a href='"+b+"'>here</a></p>"),c.tagName=="A"&&(c.onclick=function(){location.href=b}));if(d.onFail){var g=d.onFail.call(this);typeof g=="string"&&(c.innerHTML=g)}}a&&(window[d.id]=document.getElementById(d.id)),f(this,{getRoot:function(){return c},getOptions:function(){return d},getConf:function(){return e},getApi:function(){return c.firstChild}})}c&&(jQuery.tools=jQuery.tools||{version:"v1.2.5"},jQuery.tools.flashembed={conf:e},jQuery.fn.flashembed=function(a,b){return this.each(function(){$(this).data("flashembed",flashembed(this,a,b))})})})();
+(function(a){var b,c,d,e;a.tools=a.tools||{version:"v1.2.5"},a.tools.history={init:function(g){e||(a.browser.msie&&a.browser.version<"8"?c||(c=a("<iframe/>").attr("src","javascript:false;").hide().get(0),a("body").append(c),setInterval(function(){var d=c.contentWindow.document,e=d.location.hash;b!==e&&a.event.trigger("hash",e)},100),f(location.hash||"#")):setInterval(function(){var c=location.hash;c!==b&&a.event.trigger("hash",c)},100),d=d?d.add(g):g,g.click(function(b){var d=a(this).attr("href");c&&f(d);if(d.slice(0,1)!="#"){location.href="#"+d;return b.preventDefault()}}),e=!0)}};function f(a){if(a){var b=c.contentWindow.document;b.open().close(),b.location.hash=a}}a(window).bind("hash",function(c,e){e?d.filter(function(){var b=a(this).attr("href");return b==e||b==e.replace("#","")}).trigger("history",[e]):d.eq(0).trigger("history",[e]),b=e}),a.fn.history=function(b){a.tools.history.init(this);return this.bind("history",b)}})(jQuery);
+(function(a){a.fn.mousewheel=function(a){return this[a?"bind":"trigger"]("wheel",a)},a.event.special.wheel={setup:function(){a.event.add(this,b,c,{})},teardown:function(){a.event.remove(this,b,c)}};var b=a.browser.mozilla?"DOMMouseScroll"+(a.browser.version<"1.9"?" mousemove":""):"mousewheel";function c(b){switch(b.type){case"mousemove":return a.extend(b.data,{clientX:b.clientX,clientY:b.clientY,pageX:b.pageX,pageY:b.pageY});case"DOMMouseScroll":a.extend(b,b.data),b.delta=-b.detail/3;break;case"mousewheel":b.delta=b.wheelDelta/120}b.type="wheel";return a.event.handle.call(this,b,b.delta)}})(jQuery);
+(function(a){a.tools=a.tools||{version:"v1.2.5"},a.tools.tooltip={conf:{effect:"toggle",fadeOutSpeed:"fast",predelay:0,delay:30,opacity:1,tip:0,position:["top","center"],offset:[0,0],relative:!1,cancelDefault:!0,events:{def:"mouseenter,mouseleave",input:"focus,blur",widget:"focus mouseenter,blur mouseleave",tooltip:"mouseenter,mouseleave"},layout:"<div/>",tipClass:"tooltip"},addEffect:function(a,c,d){b[a]=[c,d]}};var b={toggle:[function(a){var b=this.getConf(),c=this.getTip(),d=b.opacity;d<1&&c.css({opacity:d}),c.show(),a.call()},function(a){this.getTip().hide(),a.call()}],fade:[function(a){var b=this.getConf();this.getTip().fadeTo(b.fadeInSpeed,b.opacity,a)},function(a){this.getTip().fadeOut(this.getConf().fadeOutSpeed,a)}]};function c(b,c,d){var e=d.relative?b.position().top:b.offset().top,f=d.relative?b.position().left:b.offset().left,g=d.position[0];e-=c.outerHeight()-d.offset[0],f+=b.outerWidth()+d.offset[1],/iPad/i.test(navigator.userAgent)&&(e-=a(window).scrollTop());var h=c.outerHeight()+b.outerHeight();g=="center"&&(e+=h/2),g=="bottom"&&(e+=h),g=d.position[1];var i=c.outerWidth()+b.outerWidth();g=="center"&&(f-=i/2),g=="left"&&(f-=i);return{top:e,left:f}}function d(d,e){var f=this,g=d.add(f),h,i=0,j=0,k=d.attr("title"),l=d.attr("data-tooltip"),m=b[e.effect],n,o=d.is(":input"),p=o&&d.is(":checkbox, :radio, select, :button, :submit"),q=d.attr("type"),r=e.events[q]||e.events[o?p?"widget":"input":"def"];if(!m)throw"Nonexistent effect \""+e.effect+"\"";r=r.split(/,\s*/);if(r.length!=2)throw"Tooltip: bad events configuration for "+q;d.bind(r[0],function(a){clearTimeout(i),e.predelay?j=setTimeout(function(){f.show(a)},e.predelay):f.show(a)}).bind(r[1],function(a){clearTimeout(j),e.delay?i=setTimeout(function(){f.hide(a)},e.delay):f.hide(a)}),k&&e.cancelDefault&&(d.removeAttr("title"),d.data("title",k)),a.extend(f,{show:function(b){if(!h){l?h=a(l):e.tip?h=a(e.tip).eq(0):k?h=a(e.layout).addClass(e.tipClass).appendTo(document.body).hide().append(k):(h=d.next(),h.length||(h=d.parent().next()));if(!h.length)throw"Cannot find tooltip for "+d}if(f.isShown())return f;h.stop(!0,!0);var o=c(d,h,e);e.tip&&h.html(d.data("title")),b=b||a.Event(),b.type="onBeforeShow",g.trigger(b,[o]);if(b.isDefaultPrevented())return f;o=c(d,h,e),h.css({position:"absolute",top:o.top,left:o.left}),n=!0,m[0].call(f,function(){b.type="onShow",n="full",g.trigger(b)});var p=e.events.tooltip.split(/,\s*/);h.data("__set")||(h.bind(p[0],function(){clearTimeout(i),clearTimeout(j)}),p[1]&&!d.is("input:not(:checkbox, :radio), textarea")&&h.bind(p[1],function(a){a.relatedTarget!=d[0]&&d.trigger(r[1].split(" ")[0])}),h.data("__set",!0));return f},hide:function(c){if(!h||!f.isShown())return f;c=c||a.Event(),c.type="onBeforeHide",g.trigger(c);if(!c.isDefaultPrevented()){n=!1,b[e.effect][1].call(f,function(){c.type="onHide",g.trigger(c)});return f}},isShown:function(a){return a?n=="full":n},getConf:function(){return e},getTip:function(){return h},getTrigger:function(){return d}}),a.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","),function(b,c){a.isFunction(e[c])&&a(f).bind(c,e[c]),f[c]=function(b){b&&a(f).bind(c,b);return f}})}a.fn.tooltip=function(b){var c=this.data("tooltip");if(c)return c;b=a.extend(!0,{},a.tools.tooltip.conf,b),typeof b.position=="string"&&(b.position=b.position.split(/,?\s/)),this.each(function(){c=new d(a(this),b),a(this).data("tooltip",c)});return b.api?c:this}})(jQuery);
+(function(a){var b=a.tools.tooltip;b.dynamic={conf:{classNames:"top right bottom left"}};function c(b){var c=a(window),d=c.width()+c.scrollLeft(),e=c.height()+c.scrollTop();return[b.offset().top<=c.scrollTop(),d<=b.offset().left+b.width(),e<=b.offset().top+b.height(),c.scrollLeft()>=b.offset().left]}function d(a){var b=a.length;while(b--)if(a[b])return!1;return!0}a.fn.dynamic=function(e){typeof e=="number"&&(e={speed:e}),e=a.extend({},b.dynamic.conf,e);var f=e.classNames.split(/\s/),g;this.each(function(){var b=a(this).tooltip().onBeforeShow(function(b,h){var i=this.getTip(),j=this.getConf();g||(g=[j.position[0],j.position[1],j.offset[0],j.offset[1],a.extend({},j)]),a.extend(j,g[4]),j.position=[g[0],g[1]],j.offset=[g[2],g[3]],i.css({visibility:"hidden",position:"absolute",top:h.top,left:h.left}).show();var k=c(i);if(!d(k)){k[2]&&(a.extend(j,e.top),j.position[0]="top",i.addClass(f[0])),k[3]&&(a.extend(j,e.right),j.position[1]="right",i.addClass(f[1])),k[0]&&(a.extend(j,e.bottom),j.position[0]="bottom",i.addClass(f[2])),k[1]&&(a.extend(j,e.left),j.position[1]="left",i.addClass(f[3]));if(k[0]||k[2])j.offset[0]*=-1;if(k[1]||k[3])j.offset[1]*=-1}i.css({visibility:"visible"}).hide()});b.onBeforeShow(function(){var a=this.getConf(),b=this.getTip();setTimeout(function(){a.position=[g[0],g[1]],a.offset=[g[2],g[3]]},0)}),b.onHide(function(){var a=this.getTip();a.removeClass(e.classNames)}),ret=b});return e.api?ret:this}})(jQuery);
+(function(a){var b=a.tools.tooltip;a.extend(b.conf,{direction:"up",bounce:!1,slideOffset:10,slideInSpeed:200,slideOutSpeed:200,slideFade:!a.browser.msie});var c={up:["-","top"],down:["+","top"],left:["-","left"],right:["+","left"]};b.addEffect("slide",function(a){var b=this.getConf(),d=this.getTip(),e=b.slideFade?{opacity:b.opacity}:{},f=c[b.direction]||c.up;e[f[1]]=f[0]+"="+b.slideOffset,b.slideFade&&d.css({opacity:0}),d.show().animate(e,b.slideInSpeed,a)},function(b){var d=this.getConf(),e=d.slideOffset,f=d.slideFade?{opacity:0}:{},g=c[d.direction]||c.up,h=""+g[0];d.bounce&&(h=h=="+"?"-":"+"),f[g[1]]=h+"="+e,this.getTip().animate(f,d.slideOutSpeed,function(){a(this).hide(),b.call()})})})(jQuery);
+(function(a){a.tools=a.tools||{version:"v1.2.5"};var b=/\[type=([a-z]+)\]/,c=/^-?[0-9]*(\.[0-9]+)?$/,d=a.tools.dateinput,e=/^([a-z0-9_\.\-\+]+)@([\da-z\.\-]+)\.([a-z\.]{2,6})$/i,f=/^(https?:\/\/)?[\da-z\.\-]+\.[a-z\.]{2,6}[#&+_\?\/\w \.\-=]*$/i,g;g=a.tools.validator={conf:{grouped:!1,effect:"default",errorClass:"invalid",inputEvent:null,errorInputEvent:"keyup",formEvent:"submit",lang:"en",message:"<div/>",messageAttr:"data-message",messageClass:"error",offset:[0,0],position:"center right",singleError:!1,speed:"normal"},messages:{"*":{en:"Please correct this value"}},localize:function(b,c){a.each(c,function(a,c){g.messages[a]=g.messages[a]||{},g.messages[a][b]=c})},localizeFn:function(b,c){g.messages[b]=g.messages[b]||{},a.extend(g.messages[b],c)},fn:function(c,d,e){a.isFunction(d)?e=d:(typeof d=="string"&&(d={en:d}),this.messages[c.key||c]=d);var f=b.exec(c);f&&(c=i(f[1])),j.push([c,e])},addEffect:function(a,b,c){k[a]=[b,c]}};function h(b,c,d){var e=b.offset().top,f=b.offset().left,g=d.position.split(/,?\s+/),h=g[0],i=g[1];e-=c.outerHeight()-d.offset[0],f+=b.outerWidth()+d.offset[1],/iPad/i.test(navigator.userAgent)&&(e-=a(window).scrollTop());var j=c.outerHeight()+b.outerHeight();h=="center"&&(e+=j/2),h=="bottom"&&(e+=j);var k=b.outerWidth();i=="center"&&(f-=(k+c.outerWidth())/2),i=="left"&&(f-=k);return{top:e,left:f}}function i(a){function b(){return this.getAttribute("type")==a}b.key="[type="+a+"]";return b}var j=[],k={"default":[function(b){var c=this.getConf();a.each(b,function(b,d){var e=d.input;e.addClass(c.errorClass);var f=e.data("msg.el");f||(f=a(c.message).addClass(c.messageClass).appendTo(document.body),e.data("msg.el",f)),f.css({visibility:"hidden"}).find("p").remove(),a.each(d.messages,function(b,c){a("<p/>").html(c).appendTo(f)}),f.outerWidth()==f.parent().width()&&f.add(f.find("p")).css({display:"inline"});var g=h(e,f,c);f.css({visibility:"visible",position:"absolute",top:g.top,left:g.left}).fadeIn(c.speed)})},function(b){var c=this.getConf();b.removeClass(c.errorClass).each(function(){var b=a(this).data("msg.el");b&&b.css({visibility:"hidden"})})}]};a.each("email,url,number".split(","),function(b,c){a.expr[":"][c]=function(a){return a.getAttribute("type")===c}}),a.fn.oninvalid=function(a){return this[a?"bind":"trigger"]("OI",a)},g.fn(":email","Please enter a valid email address",function(a,b){return!b||e.test(b)}),g.fn(":url","Please enter a valid URL",function(a,b){return!b||f.test(b)}),g.fn(":number","Please enter a numeric value.",function(a,b){return c.test(b)}),g.fn("[max]","Please enter a value smaller than $1",function(a,b){if(b===""||d&&a.is(":date"))return!0;var c=a.attr("max");return parseFloat(b)<=parseFloat(c)?!0:[c]}),g.fn("[min]","Please enter a value larger than $1",function(a,b){if(b===""||d&&a.is(":date"))return!0;var c=a.attr("min");return parseFloat(b)>=parseFloat(c)?!0:[c]}),g.fn("[required]","Please complete this mandatory field.",function(a,b){if(a.is(":checkbox"))return a.is(":checked");return b}),g.fn("[pattern]",function(a){var b=new RegExp("^"+a.attr("pattern")+"$");return b.test(a.val())});function l(b,c,e){var f=this,i=c.add(f);b=b.not(":button, :image, :reset, :submit");function l(b,c,d){if(e.grouped||!b.length){var f;if(d===!1||a.isArray(d)){f=g.messages[c.key||c]||g.messages["*"],f=f[e.lang]||g.messages["*"].en;var h=f.match(/\$\d/g);h&&a.isArray(d)&&a.each(h,function(a){f=f.replace(this,d[a])})}else f=d[e.lang]||d;b.push(f)}}a.extend(f,{getConf:function(){return e},getForm:function(){return c},getInputs:function(){return b},reflow:function(){b.each(function(){var b=a(this),c=b.data("msg.el");if(c){var d=h(b,c,e);c.css({top:d.top,left:d.left})}});return f},invalidate:function(c,d){if(!d){var g=[];a.each(c,function(a,c){var d=b.filter("[name='"+a+"']");d.length&&(d.trigger("OI",[c]),g.push({input:d,messages:[c]}))}),c=g,d=a.Event()}d.type="onFail",i.trigger(d,[c]),d.isDefaultPrevented()||k[e.effect][0].call(f,c,d);return f},reset:function(c){c=c||b,c.removeClass(e.errorClass).each(function(){var b=a(this).data("msg.el");b&&(b.remove(),a(this).data("msg.el",null))}).unbind(e.errorInputEvent||"");return f},destroy:function(){c.unbind(e.formEvent+".V").unbind("reset.V"),b.unbind(e.inputEvent+".V").unbind("change.V");return f.reset()},checkValidity:function(c,g){c=c||b,c=c.not(":disabled");if(!c.length)return!0;g=g||a.Event(),g.type="onBeforeValidate",i.trigger(g,[c]);if(g.isDefaultPrevented())return g.result;var h=[];c.not(":radio:not(:checked)").each(function(){var b=[],c=a(this).data("messages",b),k=d&&c.is(":date")?"onHide.v":e.errorInputEvent+".v";c.unbind(k),a.each(j,function(){var a=this,d=a[0];if(c.filter(d).length){var h=a[1].call(f,c,c.val());if(h!==!0){g.type="onBeforeFail",i.trigger(g,[c,d]);if(g.isDefaultPrevented())return!1;var j=c.attr(e.messageAttr);if(j){b=[j];return!1}l(b,d,h)}}}),b.length&&(h.push({input:c,messages:b}),c.trigger("OI",[b]),e.errorInputEvent&&c.bind(k,function(a){f.checkValidity(c,a)}));if(e.singleError&&h.length)return!1});var m=k[e.effect];if(!m)throw"Validator: cannot find effect \""+e.effect+"\"";if(h.length){f.invalidate(h,g);return!1}m[1].call(f,c,g),g.type="onSuccess",i.trigger(g,[c]),c.unbind(e.errorInputEvent+".v");return!0}}),a.each("onBeforeValidate,onBeforeFail,onFail,onSuccess".split(","),function(b,c){a.isFunction(e[c])&&a(f).bind(c,e[c]),f[c]=function(b){b&&a(f).bind(c,b);return f}}),e.formEvent&&c.bind(e.formEvent+".V",function(a){if(!f.checkValidity(null,a))return a.preventDefault()}),c.bind("reset.V",function(){f.reset()}),b[0]&&b[0].validity&&b.each(function(){this.oninvalid=function(){return!1}}),c[0]&&(c[0].checkValidity=f.checkValidity),e.inputEvent&&b.bind(e.inputEvent+".V",function(b){f.checkValidity(a(this),b)}),b.filter(":checkbox, select").filter("[required]").bind("change.V",function(b){var c=a(this);(this.checked||c.is("select")&&a(this).val())&&k[e.effect][1].call(f,c,b)});var m=b.filter(":radio").change(function(a){f.checkValidity(m,a)});a(window).resize(function(){f.reflow()})}a.fn.validator=function(b){var c=this.data("validator");c&&(c.destroy(),this.removeData("validator")),b=a.extend(!0,{},g.conf,b);if(this.is("form"))return this.each(function(){var d=a(this);c=new l(d.find(":input"),d,b),d.data("validator",c)});c=new l(this,this.eq(0).closest("form"),b);return this.data("validator",c)}})(jQuery);
diff --git a/js/jquery.validationEngine-en.js b/js/jquery.validationEngine-en.js
new file mode 100644 (file)
index 0000000..7fd6587
--- /dev/null
@@ -0,0 +1,213 @@
+(function($){
+    $.fn.validationEngineLanguage = function(){
+    };
+    $.validationEngineLanguage = {
+        newLang: function(){
+            $.validationEngineLanguage.allRules = {
+                "required": { // Add your regex rules here, you can take telephone as an example
+                    "regex": "none",
+                    "alertText": "* This field is required",
+                    "alertTextCheckboxMultiple": "* Please select an option",
+                    "alertTextCheckboxe": "* This checkbox is required",
+                    "alertTextDateRange": "* Both date range fields are required"
+                },
+                "requiredInFunction": {
+                    "func": function(field, rules, i, options){
+                        return (field.val() == "test") ? true : false;
+                    },
+                    "alertText": "* Field must equal test"
+                },
+                "dateRange": {
+                    "regex": "none",
+                    "alertText": "* Invalid ",
+                    "alertText2": "Date Range"
+                },
+                "dateTimeRange": {
+                    "regex": "none",
+                    "alertText": "* Invalid ",
+                    "alertText2": "Date Time Range"
+                },
+                "minSize": {
+                    "regex": "none",
+                    "alertText": "* Minimum ",
+                    "alertText2": " characters required"
+                },
+                "maxSize": {
+                    "regex": "none",
+                    "alertText": "* Maximum ",
+                    "alertText2": " characters allowed"
+                },
+               "groupRequired": {
+                    "regex": "none",
+                    "alertText": "* You must fill one of the following fields"
+                },
+                "min": {
+                    "regex": "none",
+                    "alertText": "* Minimum value is "
+                },
+                "max": {
+                    "regex": "none",
+                    "alertText": "* Maximum value is "
+                },
+                "past": {
+                    "regex": "none",
+                    "alertText": "* Date prior to "
+                },
+                "future": {
+                    "regex": "none",
+                    "alertText": "* Date past "
+                },
+                "maxCheckbox": {
+                    "regex": "none",
+                    "alertText": "* Maximum ",
+                    "alertText2": " options allowed"
+                },
+                "minCheckbox": {
+                    "regex": "none",
+                    "alertText": "* Please select ",
+                    "alertText2": " options"
+                },
+                "equals": {
+                    "regex": "none",
+                    "alertText": "* Fields do not match"
+                },
+                "creditCard": {
+                    "regex": "none",
+                    "alertText": "* Invalid credit card number"
+                },
+                "phone": {
+                    // credit: jquery.h5validate.js / orefalo
+                    "regex": /^([\+][0-9]{1,3}[\ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9\ \.\-\/]{3,20})((x|ext|extension)[\ ]?[0-9]{1,4})?$/,
+                    "alertText": "* Invalid phone number"
+                },
+                "email": {
+                    // HTML5 compatible email regex ( http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#    e-mail-state-%28type=email%29 )
+                    "regex": /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
+                    "alertText": "* Invalid email address"
+                },
+                "SWPMUserName": {
+                "regex": /^[a-zA-Z0-9!@#$%&\'*+\/=?^_`{|}~\.-]+$/,
+                "alertText": "* Invalid User Name"
+                },
+                "integer": {
+                    "regex": /^[\-\+]?\d+$/,
+                    "alertText": "* Not a valid integer"
+                },
+                "number": {
+                    // Number, including positive, negative, and floating decimal. credit: orefalo
+                    "regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/,
+                    "alertText": "* Invalid floating decimal number"
+                },
+                "date": {
+                    // Check if date is valid by leap year
+                     "func": function (field) {
+                                var pattern = new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/);
+                                var match = pattern.exec(field.val());
+                                if (match == null)
+                                   return false;
+
+                                var year = match[1];
+                                var month = match[2]*1;
+                                var day = match[3]*1;
+                                var date = new Date(year, month - 1, day); // because months starts from 0.
+
+                                return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day);
+                        },
+                 "alertText": "* Invalid date, must be in YYYY-MM-DD format"
+                },
+                "ipv4": {
+                    "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/,
+                    "alertText": "* Invalid IP address"
+                },
+                "url": {
+                    "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,
+                    "alertText": "* Invalid URL"
+                },
+                "onlyNumberSp": {
+                    "regex": /^[0-9\ ]+$/,
+                    "alertText": "* Numbers only"
+                },
+                "onlyLetterSp": {
+                    "regex": /^[a-zA-Z\ \']+$/,
+                    "alertText": "* Letters only"
+                },
+                "onlyLetterNumber": {
+                    "regex": /^[0-9a-zA-Z]+$/,
+                    "alertText": "* No special characters allowed"
+                },
+                "onlyLetterNumberUnderscore": {
+                        "regex": /^[0-9a-zA-Z_]+$/,
+                        "alertText": "* Only number, character and underscore allowed"
+                },
+                "noapostrophe": {
+                "regex": /^[^\']+$/,
+                "alertText": "* Apostrophe character is not allowed."
+                },
+                // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings
+                "ajaxUserCall": {
+                    "url": "ajaxurl",
+                    // you may want to pass extra data on the ajax call
+                    "extraData": "&action=swpm_validate_user_name",
+                    "alertTextOk": "* This username is available",
+                    "alertText": "* This user is already taken",
+                    "alertTextLoad": "* Validating, please wait"
+                },
+                "ajaxEmailCall": {
+                    "url": "ajaxurl",
+                    // you may want to pass extra data on the ajax call
+                    "extraData": "&action=swpm_validate_email",
+                    "alertText": "* This email is already taken",
+                    "alertTextOk": "* This email is available",
+                    "alertTextLoad": "* Validating, please wait"
+                },
+                "ajaxUserCallPhp": {
+                    "url": "phpajax/ajaxValidateFieldUser.php",
+                    // you may want to pass extra data on the ajax call
+                    "extraData": "name=eric",
+                    // if you provide an "alertTextOk", it will show as a green prompt when the field validates
+                    "alertTextOk": "* This username is available",
+                    "alertText": "* This user is already taken",
+                    "alertTextLoad": "* Validating, please wait"
+                },
+                "ajaxNameCall": {
+                    // remote json service location
+                    "url": "ajaxValidateFieldName",
+                    // error
+                    "alertText": "* This name is already taken",
+                    // if you provide an "alertTextOk", it will show as a green prompt when the field validates
+                    "alertTextOk": "* This name is available",
+                    // speaks by itself
+                    "alertTextLoad": "* Validating, please wait"
+                },
+                "ajaxNameCallPhp": {
+                   // remote json service location
+                   "url": "phpajax/ajaxValidateFieldName.php",
+                   // error
+                   "alertText": "* This name is already taken",
+                   // speaks by itself
+                   "alertTextLoad": "* Validating, please wait"
+                },
+                "validate2fields": {
+                    "alertText": "* Please input HELLO"
+                },
+                   //tls warning:homegrown not fielded
+                "dateFormat":{
+                    "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/,
+                    "alertText": "* Invalid Date"
+                },
+                //tls warning:homegrown not fielded
+               "dateTimeFormat": {
+                       "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/,
+                    "alertText": "* Invalid Date or Date Format",
+                    "alertText2": "Expected Format: ",
+                    "alertText3": "mm/dd/yyyy hh:mm:ss AM|PM or ",
+                    "alertText4": "yyyy-mm-dd hh:mm:ss AM|PM"
+               }
+            };
+
+        }
+    };
+
+    $.validationEngineLanguage.newLang();
+
+})(jQuery);
\ No newline at end of file
diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js
new file mode 100644 (file)
index 0000000..6e9938d
--- /dev/null
@@ -0,0 +1,1194 @@
+/*
+ * Inline Form Validation Engine 2.1, jQuery plugin
+ *
+ * Copyright(c) 2010, Cedric Dugas
+ * http://www.position-absolute.com
+ *
+ * 2.0 Rewrite by Olivier Refalo
+ * http://www.crionics.com
+ *
+ * Form validation engine allowing custom regex rules to be added.
+ * Licensed under the MIT License
+ */
+(function($) {
+
+    var methods = {
+
+        /**
+         * Kind of the constructor, called before any action
+         * @param {Map} user options
+         */
+        init: function(options) {
+            var form = this;
+            if (!form.data('jqv') || form.data('jqv') == null ) {
+                methods._saveOptions(form, options);
+
+                // bind all formError elements to close on click
+                $(".formError").live("click", function() {
+                    $(this).fadeOut(150, function() {
+
+                        // remove prompt once invisible
+                        $(this).remove();
+                    });
+                });
+            }
+        },
+        /**
+         * Attachs jQuery.validationEngine to form.submit and field.blur events
+         * Takes an optional params: a list of options
+         * ie. jQuery("#formID1").validationEngine('attach', {promptPosition : "centerRight"});
+         */
+        attach: function(userOptions) {
+            var form = this;
+            var options;
+
+            if(userOptions)
+                options = methods._saveOptions(form, userOptions);
+            else
+                options = form.data('jqv');
+
+            if (!options.binded) {
+                                       if (options.bindMethod == "bind"){
+                        // bind fields
+                        form.find("[class*=validate]:not([type=checkbox])").bind(options.validationEventTrigger, methods._onFieldEvent);
+                        form.find("[class*=validate][type=checkbox]").bind("click", methods._onFieldEvent);
+
+                        // bind form.submit
+                        form.bind("submit", methods._onSubmitEvent);
+                                       } else if (options.bindMethod == "live") {
+                        // bind fields with LIVE (for persistant state)
+                        form.find("[class*=validate]:not([type=checkbox])").live(options.validationEventTrigger, methods._onFieldEvent);
+                        form.find("[class*=validate][type=checkbox]").live("click", methods._onFieldEvent);
+
+                        // bind form.submit
+                        form.live("submit", methods._onSubmitEvent);
+                                       }
+
+                options.binded = true;
+            }
+
+        },
+        /**
+         * Unregisters any bindings that may point to jQuery.validaitonEngine
+         */
+        detach: function() {
+            var form = this;
+            var options = form.data('jqv');
+            if (options.binded) {
+
+                // unbind fields
+                form.find("[class*=validate]").not("[type=checkbox]").unbind(options.validationEventTrigger, methods._onFieldEvent);
+                form.find("[class*=validate][type=checkbox]").unbind("click", methods._onFieldEvent);
+                // unbind form.submit
+                form.unbind("submit", methods.onAjaxFormComplete);
+                
+               
+                // unbind live fields (kill)
+                form.find("[class*=validate]").not("[type=checkbox]").die(options.validationEventTrigger, methods._onFieldEvent);
+                form.find("[class*=validate][type=checkbox]").die("click", methods._onFieldEvent);
+                // unbind form.submit
+                form.die("submit", methods.onAjaxFormComplete);
+                
+                form.removeData('jqv');
+            }
+        },
+        /**
+         * Validates the form fields, shows prompts accordingly.
+         * Note: There is no ajax form validation with this method, only field ajax validation are evaluated
+         *
+         * @return true if the form validates, false if it fails
+         */
+        validate: function() {
+            return methods._validateFields(this);
+        },
+        /**
+         * Validates one field, shows prompt accordingly.
+         * Note: There is no ajax form validation with this method, only field ajax validation are evaluated
+         *
+         * @return true if the form validates, false if it fails
+         */
+        validateField: function(el) {
+            var options = $(this).data('jqv');
+            return methods._validateField($(el), options);
+        },
+        /**
+         * Validates the form fields, shows prompts accordingly.
+         * Note: this methods performs fields and form ajax validations(if setup)
+         *
+         * @return true if the form validates, false if it fails, undefined if ajax is used for form validation
+         */
+        validateform: function() {
+            return methods._onSubmitEvent.call(this);
+        },
+        /**
+         * Displays a prompt on a element.
+         * Note that the element needs an id!
+         *
+         * @param {String} promptText html text to display type
+         * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
+         * @param {String} possible values topLeft, topRight, bottomLeft, centerRight, bottomRight
+         */
+        showPrompt: function(promptText, type, promptPosition, showArrow) {
+
+            var form = this.closest('form');
+            var options = form.data('jqv');
+            // No option, take default one
+                       if(!options) options = methods._saveOptions(this, options);
+            if(promptPosition)
+                options.promptPosition=promptPosition;
+            options.showArrow = showArrow==true;
+
+            methods._showPrompt(this, promptText, type, false, options);
+        },
+        /**
+         * Closes all error prompts on the page
+         */
+        hidePrompt: function() {
+                       var promptClass =  "."+ methods._getClassName($(this).attr("id")) + "formError"
+            $(promptClass).fadeTo("fast", 0.3, function() {
+                $(this).remove();
+            });
+        },
+        /**
+         * Closes form error prompts, CAN be invidual
+         */
+        hide: function() {
+               if($(this).is("form")){
+                        var closingtag = "parentForm"+$(this).attr('id');
+               }else{
+                       
+                       var closingtag = $(this).attr('id') +"formError"
+               }
+            $('.'+closingtag).fadeTo("fast", 0.3, function() {
+                $(this).remove();
+            });
+        },
+        /**
+         * Closes all error prompts on the page
+         */
+        hideAll: function() {
+            $('.formError').fadeTo("fast", 0.3, function() {
+                $(this).remove();
+            });
+        },
+        /**
+         * Typically called when user exists a field using tab or a mouse click, triggers a field
+         * validation
+         */
+        _onFieldEvent: function() {
+            var field = $(this);
+            var form = field.closest('form');
+            var options = form.data('jqv');
+            // validate the current field
+            methods._validateField(field, options);
+        },
+        /**
+         * Called when the form is submited, shows prompts accordingly
+         *
+         * @param {jqObject}
+         *            form
+         * @return false if form submission needs to be cancelled
+         */
+        _onSubmitEvent: function() {
+            var form = $(this);
+                       var options = form.data('jqv');
+   
+                       // validate each field (- skip field ajax validation, no necessary since we will perform an ajax form validation)
+            var r=methods._validateFields(form, true);
+               
+            if (r && options.ajaxFormValidation) {
+                methods._validateFormWithAjax(form, options);
+                return false;
+            }
+
+            if(options.onValidationComplete) {
+                options.onValidationComplete(form, r);
+                return false;
+            }
+            return r;
+        },
+
+        /**
+         * Return true if the ajax field validations passed so far
+         * @param {Object} options
+         * @return true, is all ajax validation passed so far (remember ajax is async)
+         */
+        _checkAjaxStatus: function(options) {
+            var status = true;
+            $.each(options.ajaxValidCache, function(key, value) {
+                if (!value) {
+                    status = false;
+                    // break the each
+                    return false;
+                }
+            });
+            return status;
+        },
+        /**
+         * Validates form fields, shows prompts accordingly
+         *
+         * @param {jqObject}
+         *            form
+         * @param {skipAjaxFieldValidation}
+         *            boolean - when set to true, ajax field validation is skipped, typically used when the submit button is clicked
+         *
+         * @return true if form is valid, false if not, undefined if ajax form validation is done
+         */
+        _validateFields: function(form, skipAjaxValidation) {
+            var options = form.data('jqv');
+
+            // this variable is set to true if an error is found
+            var errorFound = false;
+                       
+                       // Trigger hook, start validation
+                       form.trigger("jqv.form.validating")
+            // first, evaluate status of non ajax fields
+            form.find('[class*=validate]').not(':hidden').each( function() {
+                var field = $(this);
+                errorFound |= methods._validateField(field, options, skipAjaxValidation);
+            });
+            // second, check to see if all ajax calls completed ok
+            // errorFound |= !methods._checkAjaxStatus(options);
+                       
+            // thrird, check status and scroll the container accordingly
+                       form.trigger("jqv.form.result", [errorFound])
+                       
+            if (errorFound) {
+                               
+                if (options.scroll) {
+
+                    // get the position of the first error, there should be at least one, no need to check this
+                    //var destination = form.find(".formError:not('.greenPopup'):first").offset().top;
+
+                    // look for the visually top prompt
+                    var destination = Number.MAX_VALUE;
+
+                    var lst = $(".formError:not('.greenPopup')");
+                    for (var i = 0; i < lst.length; i++) {
+                        var d = $(lst[i]).offset().top;
+                        if (d < destination)
+                            destination = d;
+                    }
+
+                    if (!options.isOverflown)
+                        $("html:not(:animated),body:not(:animated)").animate({
+                            scrollTop: destination
+                        }, 1100);
+                    else {
+                        var overflowDIV = $(options.overflownDIV);
+                        var scrollContainerScroll = overflowDIV.scrollTop();
+                        var scrollContainerPos = -parseInt(overflowDIV.offset().top);
+
+                        destination += scrollContainerScroll + scrollContainerPos - 5;
+                        var scrollContainer = $(options.overflownDIV + ":not(:animated)");
+
+                        scrollContainer.animate({
+                            scrollTop: destination
+                        }, 1100);
+                    }
+                }
+                return false;
+            }
+            return true;
+        },
+        /**
+         * This method is called to perform an ajax form validation.
+         * During this process all the (field, value) pairs are sent to the server which returns a list of invalid fields or true
+         *
+         * @param {jqObject} form
+         * @param {Map} options
+         */
+        _validateFormWithAjax: function(form, options) {
+
+            var data = form.serialize();
+                       var url = (options.ajaxFormValidationURL) ? options.ajaxFormValidationURL : form.attr("action");
+            $.ajax({
+                type: "GET",
+                url: url,
+                cache: false,
+                dataType: "json",
+                data: data,
+                form: form,
+                methods: methods,
+                options: options,
+                beforeSend: function() {
+                    return options.onBeforeAjaxFormValidation(form, options);
+                },
+                error: function(data, transport) {
+                    methods._ajaxError(data, transport);
+                },
+                success: function(json) {
+
+                    if (json !== true) {
+
+                        // getting to this case doesn't necessary means that the form is invalid
+                        // the server may return green or closing prompt actions
+                        // this flag helps figuring it out
+                        var errorInForm=false;
+                        for (var i = 0; i < json.length; i++) {
+                            var value = json[i];
+                                               
+                            var errorFieldId = value[0];
+                            var errorField = $($("#" + errorFieldId)[0]);
+                                                       
+                            // make sure we found the element
+                            if (errorField.length == 1) {
+                                                               
+                                // promptText or selector
+                                var msg = value[2];
+                                                               // if the field is valid
+                                if (value[1] == true) {
+
+                                    if (msg == ""  || !msg){
+                                        // if for some reason, status==true and error="", just close the prompt
+                                        methods._closePrompt(errorField);
+                                    } else {
+                                        // the field is valid, but we are displaying a green prompt
+                                        if (options.allrules[msg]) {
+                                            var txt = options.allrules[msg].alertTextOk;
+                                            if (txt)
+                                                msg = txt;
+                                        }
+                                        methods._showPrompt(errorField, msg, "pass", false, options, true);
+                                    }
+
+                                } else {
+                                    // the field is invalid, show the red error prompt
+                                    errorInForm|=true;
+                                    if (options.allrules[msg]) {
+                                        var txt = options.allrules[msg].alertText;
+                                        if (txt)
+                                            msg = txt;
+                                    }
+                                    methods._showPrompt(errorField, msg, "", false, options, true);
+                                }
+                            }
+                        }
+                        options.onAjaxFormComplete(!errorInForm, form, json, options);
+                    } else
+                        options.onAjaxFormComplete(true, form, "", options);
+                }
+            });
+
+        },
+        /**
+         * Validates field, shows prompts accordingly
+         *
+         * @param {jqObject}
+         *            field
+         * @param {Array[String]}
+         *            field's validation rules
+         * @param {Map}
+         *            user options
+         * @return true if field is valid
+         */
+        _validateField: function(field, options, skipAjaxValidation) {
+            if (!field.attr("id"))
+                $.error("jQueryValidate: an ID attribute is required for this field: " + field.attr("name") + " class:" +
+                field.attr("class"));
+
+            var rulesParsing = field.attr('class');
+            var getRules = /validate\[(.*)\]/.exec(rulesParsing);
+            if (!getRules)
+                return false;
+            var str = getRules[1];
+            var rules = str.split(/\[|,|\]/);
+
+            // true if we ran the ajax validation, tells the logic to stop messing with prompts
+            var isAjaxValidator = false;
+            var fieldName = field.attr("name");
+            var promptText = "";
+                       var required = false;
+            var equals   = true;
+            options.isError = false;
+            options.showArrow = true;
+            optional = false;
+
+            for (var i = 0; i < rules.length; i++) {
+
+                var errorMsg = undefined;
+                switch (rules[i]) {
+
+                    case "optional":
+                        optional = true;
+                        break;
+                    case "required":
+                        required = true;
+                        errorMsg = methods._required(field, rules, i, options);
+                        break;
+                    case "custom":
+                        errorMsg = methods._customRegex(field, rules, i, options);
+                        break;
+                    case "ajax":
+                        // ajax has its own prompts handling technique
+                                               if(!skipAjaxValidation){
+                                                       methods._ajax(field, rules, i, options);
+                               isAjaxValidator = true;
+                                               }
+                        break;
+                    case "minSize":
+                        errorMsg = methods._minSize(field, rules, i, options);
+                        break;
+                    case "maxSize":
+                        errorMsg = methods._maxSize(field, rules, i, options);
+                        break;
+                    case "min":
+                        errorMsg = methods._min(field, rules, i, options);
+                        break;
+                    case "max":
+                        errorMsg = methods._max(field, rules, i, options);
+                        break;
+                    case "past":
+                        errorMsg = methods._past(field, rules, i, options);
+                        break;
+                    case "future":
+                        errorMsg = methods._future(field, rules, i, options);
+                        break;
+                    case "maxCheckbox":
+                        errorMsg = methods._maxCheckbox(field, rules, i, options);
+                        field = $($("input[name='" + fieldName + "']"));
+                        break;
+                    case "minCheckbox":
+                        errorMsg = methods._minCheckbox(field, rules, i, options);
+                        field = $($("input[name='" + fieldName + "']"));
+                        break;
+                    case "equals":
+                        errorMsg = methods._equals(field, rules, i, options);
+                        if (errorMsg !== undefined) equals = false;
+                        break;
+                    case "funcCall":
+                        errorMsg = methods._funcCall(field, rules, i, options);
+                        break;
+
+                    default:
+                    //$.error("jQueryValidator rule not found"+rules[i]);
+                }
+
+                if (errorMsg !== undefined) {
+                    promptText += errorMsg + "<br/>";
+                    options.isError = true;
+                                       
+                }
+
+            }
+            // If the rules required is not added, an empty field is not validated
+            if(!required){
+               if(field.val() == "") options.isError = false;
+            }
+            // Hack for radio/checkbox group button, the validation go into the
+            // first radio/checkbox of the group
+            var fieldType = field.attr("type");
+
+            if ((fieldType == "radio" || fieldType == "checkbox") && $("input[name='" + fieldName + "']").size() > 1) {
+                field = $($("input[name='" + fieldName + "'][type!=hidden]:first"));
+                options.showArrow = false;
+            }
+
+            if (options.isError || !equals){
+                               
+                methods._showPrompt(field, promptText, "", false, options);
+            }else{
+                               if (!isAjaxValidator) methods._closePrompt(field);
+                       }
+                       field.closest('form').trigger("jqv.field.error", [field, options.isError, promptText])
+            return options.isError || (!equals);
+        },
+        /**
+         * Required validation
+         *
+         * @param {jqObject} field
+         * @param {Array[String]} rules
+         * @param {int} i rules index
+         * @param {Map}
+         *            user options
+         * @return an error string if validation failed
+         */
+        _required: function(field, rules, i, options) {
+            switch (field.attr("type")) {
+                case "text":
+                case "password":
+                case "textarea":
+                case "file":
+                default:
+                    if (!field.val())
+                        return options.allrules[rules[i]].alertText;
+                    break;
+                case "radio":
+                case "checkbox":
+                    var name = field.attr("name");
+                    if ($("input[name='" + name + "']:checked").size() == 0) {
+
+                        if ($("input[name='" + name + "']").size() == 1)
+                            return options.allrules[rules[i]].alertTextCheckboxe;
+                        else
+                            return options.allrules[rules[i]].alertTextCheckboxMultiple;
+                    }
+                    break;
+                // required for <select>
+                case "select-one":
+                    // added by paul@kinetek.net for select boxes, Thank you
+                    if (!field.val())
+                        return options.allrules[rules[i]].alertText;
+                    break;
+                case "select-multiple":
+                    // added by paul@kinetek.net for select boxes, Thank you
+                    if (!field.find("option:selected").val())
+                        return options.allrules[rules[i]].alertText;
+                    break;
+            }
+        },
+        /**
+         * Validate Regex rules
+         *
+         * @param {jqObject} field
+         * @param {Array[String]} rules
+         * @param {int} i rules index
+         * @param {Map}
+         *            user options
+         * @return an error string if validation failed
+         */
+        _customRegex: function(field, rules, i, options) {
+            var customRule = rules[i + 1];
+                       var rule = options.allrules[customRule];
+                       if(!rule) {
+                               alert("jqv:custom rule not found "+customRule);
+                               return;
+                       }
+                       
+                       var ex=rule.regex;
+                       if(!ex) {
+                               alert("jqv:custom regex not found "+customRule);
+                               return;
+                       }
+            var pattern = new RegExp(ex);
+
+            if (!pattern.test(field.attr('value')))
+                return options.allrules[customRule].alertText;
+        },
+        /**
+         * Validate custom function outside of the engine scope
+         *
+         * @param {jqObject} field
+         * @param {Array[String]} rules
+         * @param {int} i rules index
+         * @param {Map}
+         *            user options
+         * @return an error string if validation failed
+         */
+        _funcCall: function(field, rules, i, options) {
+            var functionName = rules[i + 1];
+            var fn = window[functionName];
+            if (typeof(fn) == 'function')
+                return fn(field, rules, i, options);
+
+        },
+        /**
+         * Field match
+         *
+         * @param {jqObject} field
+         * @param {Array[String]} rules
+         * @param {int} i rules index
+         * @param {Map}
+         *            user options
+         * @return an error string if validation failed
+         */
+        _equals: function(field, rules, i, options) {
+            var equalsField = rules[i + 1];
+
+            if (field.attr('value') != $("#" + equalsField).attr('value')){
+                field.css('border','1px solid red');
+                $("#" + equalsField).css('border', '1px solid red');
+                return options.allrules.equals.alertText;
+            }
+            else{
+                field.css('border','');
+                $("#" + equalsField).css('border', '');                
+            }
+                
+        },
+        /**
+         * Check the maximum size (in characters)
+         *
+         * @param {jqObject} field
+         * @param {Array[String]} rules
+         * @param {int} i rules index
+         * @param {Map}
+         *            user options
+         * @return an error string if validation failed
+         */
+        _maxSize: function(field, rules, i, options) {
+            var max = rules[i + 1];
+            var len = field.attr('value').length;
+
+            if (len > max) {
+                var rule = options.allrules.maxSize;
+                return rule.alertText + max + rule.alertText2;
+            }
+        },
+        /**
+         * Check the minimum size (in characters)
+         *
+         * @param {jqObject} field
+         * @param {Array[String]} rules
+         * @param {int} i rules index
+         * @param {Map}
+         *            user options
+         * @return an error string if validation failed
+         */
+        _minSize: function(field, rules, i, options) {
+            var min = rules[i + 1];
+            var len = field.attr('value').length;
+
+            if (len < min) {
+                var rule = options.allrules.minSize;
+                return rule.alertText + min + rule.alertText2;
+            }
+        },
+        /**
+         * Check number minimum value
+         *
+         * @param {jqObject} field
+         * @param {Array[String]} rules
+         * @param {int} i rules index
+         * @param {Map}
+         *            user options
+         * @return an error string if validation failed
+         */
+        _min: function(field, rules, i, options) {
+            var min = parseFloat(rules[i + 1]);
+            var len = parseFloat(field.attr('value'));
+
+            if (len < min) {
+                var rule = options.allrules.min;
+                if (rule.alertText2) return rule.alertText + min + rule.alertText2;
+                return rule.alertText + min;
+            }
+        },
+        /**
+         * Check number maximum value
+         *
+         * @param {jqObject} field
+         * @param {Array[String]} rules
+         * @param {int} i rules index
+         * @param {Map}
+         *            user options
+         * @return an error string if validation failed
+         */
+        _max: function(field, rules, i, options) {
+            var max = parseFloat(rules[i + 1]);
+            var len = parseFloat(field.attr('value'));
+
+            if (len >max ) {
+                var rule = options.allrules.max;
+                if (rule.alertText2) return rule.alertText + max + rule.alertText2;
+                //orefalo: to review, also do the translations
+                return rule.alertText + max;
+            }
+        },
+        /**
+         * Checks date is in the past
+         *
+         * @param {jqObject} field
+         * @param {Array[String]} rules
+         * @param {int} i rules index
+         * @param {Map}
+         *            user options
+         * @return an error string if validation failed
+         */
+        _past: function(field, rules, i, options) {
+
+            var p=rules[i + 1];
+            var pdate = (p.toLowerCase() == "now")? new Date():methods._parseDate(p);
+            var vdate = methods._parseDate(field.attr('value'));
+
+            if (vdate > pdate ) {
+                var rule = options.allrules.past;
+                if (rule.alertText2) return rule.alertText + methods._dateToString(pdate) + rule.alertText2;
+                return rule.alertText + methods._dateToString(pdate);
+            }
+        },
+        /**
+         * Checks date is in the past
+         *
+         * @param {jqObject} field
+         * @param {Array[String]} rules
+         * @param {int} i rules index
+         * @param {Map}
+         *            user options
+         * @return an error string if validation failed
+         */
+        _future: function(field, rules, i, options) {
+
+            var p=rules[i + 1];
+            var pdate = (p.toLowerCase() == "now")? new Date():methods._parseDate(p);
+            var vdate = methods._parseDate(field.attr('value'));
+
+            if (vdate < pdate ) {
+                var rule = options.allrules.future;
+                if (rule.alertText2) return rule.alertText + methods._dateToString(pdate) + rule.alertText2;
+                return rule.alertText + methods._dateToString(pdate);
+            }
+        },
+        /**
+         * Max number of checkbox selected
+         *
+         * @param {jqObject} field
+         * @param {Array[String]} rules
+         * @param {int} i rules index
+         * @param {Map}
+         *            user options
+         * @return an error string if validation failed
+         */
+        _maxCheckbox: function(field, rules, i, options) {
+
+            var nbCheck = rules[i + 1];
+            var groupname = field.attr("name");
+            var groupSize = $("input[name='" + groupname + "']:checked").size();
+            if (groupSize > nbCheck) {
+                options.showArrow = false;
+                return options.allrules.maxCheckbox.alertText;
+            }
+        },
+        /**
+         * Min number of checkbox selected
+         *
+         * @param {jqObject} field
+         * @param {Array[String]} rules
+         * @param {int} i rules index
+         * @param {Map}
+         *            user options
+         * @return an error string if validation failed
+         */
+        _minCheckbox: function(field, rules, i, options) {
+
+            var nbCheck = rules[i + 1];
+            var groupname = field.attr("name");
+            var groupSize = $("input[name='" + groupname + "']:checked").size();
+            if (groupSize < nbCheck) {
+                options.showArrow = false;
+                return options.allrules.minCheckbox.alertText + " " + nbCheck + " " +
+                options.allrules.minCheckbox.alertText2;
+            }
+        },
+        /**
+         * Ajax field validation
+         *
+         * @param {jqObject} field
+         * @param {Array[String]} rules
+         * @param {int} i rules index
+         * @param {Map}
+         *            user options
+         * @return nothing! the ajax validator handles the prompts itself
+         */
+        _ajax: function(field, rules, i, options) {
+                       
+                       
+            var errorSelector = rules[i + 1];
+            var rule = options.allrules[errorSelector];
+            var extraData = rule.extraData;
+
+            if (!extraData)
+                extraData = "";
+
+            if (!options.isError) {
+                $.ajax({
+                    type: "GET",
+                    url: rule.url,
+                    cache: false,
+                    dataType: "json",
+                    data: "fieldId=" + field.attr("id") + "&fieldValue=" + field.attr("value") + "&extraData=" + extraData,
+                    field: field,
+                    rule: rule,
+                    methods: methods,
+                    options: options,
+                    beforeSend: function() {
+                        // build the loading prompt
+                        var loadingText = rule.alertTextLoad;
+                        if (loadingText)
+                            methods._showPrompt(field, loadingText, "load", true, options);
+                    },
+                    error: function(data, transport) {
+                        methods._ajaxError(data, transport);
+                    },
+                    success: function(json) {
+                                               
+                        // asynchronously called on success, data is the json answer from the server
+                        var errorFieldId = json[0];
+                        var errorField = $($("#" + errorFieldId)[0]);
+                        // make sure we found the element
+                        if (errorField.length == 1) {
+                            var status = json[1];
+                            if (!status) {
+                                // Houston we got a problem
+                                options.ajaxValidCache[errorFieldId] = false;
+                                options.isError = true;
+                                var promptText = rule.alertText;
+                                methods._showPrompt(errorField, promptText, "", true, options);
+                            } else {
+                                if (options.ajaxValidCache[errorFieldId] !== undefined)
+                                    options.ajaxValidCache[errorFieldId] = true;
+
+                                // see if we should display a green prompt
+                                var alertTextOk = rule.alertTextOk;
+                                if (alertTextOk)
+                                    methods._showPrompt(errorField, alertTextOk, "pass", true, options);
+                                else
+                                    methods._closePrompt(errorField);
+                            }
+                        }
+                    }
+                });
+            }
+        },
+        /**
+         * Common method to handle ajax errors
+         *
+         * @param {Object} data
+         * @param {Object} transport
+         */
+        _ajaxError: function(data, transport) {
+            if(data.status == 0 && transport == null)
+                alert("The page is not served from a server! ajax call failed");
+            else if(typeof console != "undefined")
+                console.log("Ajax error: " + data.status + " " + transport);
+        },
+        /**
+         * date -> string
+         *
+         * @param {Object} date
+         */
+        _dateToString: function(date) {
+
+            return date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate();
+        },
+        /**
+         * Parses an ISO date
+         * @param {String} d
+         */
+        _parseDate: function(d) {
+
+            var dateParts = d.split("-");
+            if(dateParts!==d)
+                dateParts = d.split("/");
+            return new Date(dateParts[0], (dateParts[1] - 1) ,dateParts[2]);
+        },
+        /**
+         * Builds or updates a prompt with the given information
+         *
+         * @param {jqObject} field
+         * @param {String} promptText html text to display type
+         * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
+         * @param {boolean} ajaxed - use to mark fields than being validated with ajax
+         * @param {Map} options user options
+         */
+        _showPrompt: function(field, promptText, type, ajaxed, options, ajaxform) {
+            var prompt = methods._getPrompt(field);
+                       // The ajax submit errors are not see has an error in the form,
+                       // When the form errors are returned, the engine see 2 bubbles, but those are ebing closed by the engine at the same time
+                       // Because no error was found befor submitting
+                       if(ajaxform) prompt = false;
+            if (prompt)
+                methods._updatePrompt(field, prompt, promptText, type, ajaxed, options);
+            else
+                methods._buildPrompt(field, promptText, type, ajaxed, options);
+        },
+        /**
+         * Builds and shades a prompt for the given field.
+         *
+         * @param {jqObject} field
+         * @param {String} promptText html text to display type
+         * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
+         * @param {boolean} ajaxed - use to mark fields than being validated with ajax
+         * @param {Map} options user options
+         */
+        _buildPrompt: function(field, promptText, type, ajaxed, options) {
+
+            // create the prompt
+            var prompt = $('<div>');
+            prompt.addClass(methods._getClassName(field.attr("id")) + "formError");
+            // add a class name to identify the parent form of the prompt
+            if(field.is(":input")) prompt.addClass("parentForm"+methods._getClassName(field.parents('form').attr("id")));
+            prompt.addClass("formError");
+
+            switch (type) {
+                case "pass":
+                    prompt.addClass("greenPopup");
+                    break;
+                case "load":
+                    prompt.addClass("blackPopup");
+            }
+            if (ajaxed)
+                prompt.addClass("ajaxed");
+
+            // create the prompt content
+            var promptContent = $('<div>').addClass("formErrorContent").html(promptText).appendTo(prompt);
+            // create the css arrow pointing at the field
+            // note that there is no triangle on max-checkbox and radio
+            if (options.showArrow) {
+                var arrow = $('<div>').addClass("formErrorArrow");
+
+                switch (options.promptPosition) {
+                    case "bottomLeft":
+                    case "bottomRight":
+                        prompt.find(".formErrorContent").before(arrow);
+                        arrow.addClass("formErrorArrowBottom").html('<div class="line1"><!-- --></div><div class="line2"><!-- --></div><div class="line3"><!-- --></div><div class="line4"><!-- --></div><div class="line5"><!-- --></div><div class="line6"><!-- --></div><div class="line7"><!-- --></div><div class="line8"><!-- --></div><div class="line9"><!-- --></div><div class="line10"><!-- --></div>');
+                        break;
+                    case "topLeft":
+                    case "topRight":
+                        arrow.html('<div class="line10"><!-- --></div><div class="line9"><!-- --></div><div class="line8"><!-- --></div><div class="line7"><!-- --></div><div class="line6"><!-- --></div><div class="line5"><!-- --></div><div class="line4"><!-- --></div><div class="line3"><!-- --></div><div class="line2"><!-- --></div><div class="line1"><!-- --></div>');
+                        prompt.append(arrow);
+                        break;
+                }
+            }
+
+            //Cedric: Needed if a container is in position:relative
+            // insert prompt in the form or in the overflown container?
+            if (options.isOverflown)
+               field.before(prompt);
+            else
+               $("body").append(prompt);
+
+            var pos = methods._calculatePosition(field, prompt, options);
+            prompt.css({
+                "top": pos.callerTopPosition,
+                "left": pos.callerleftPosition,
+                "marginTop": pos.marginTopSize,
+                "opacity": 0
+            });
+
+            return prompt.animate({
+                "opacity": 0.87
+            });
+
+        },
+        /**
+         * Updates the prompt text field - the field for which the prompt
+         * @param {jqObject} field
+         * @param {String} promptText html text to display type
+         * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
+         * @param {boolean} ajaxed - use to mark fields than being validated with ajax
+         * @param {Map} options user options
+         */
+        _updatePrompt: function(field, prompt, promptText, type, ajaxed, options) {
+                       
+            if (prompt) {
+                if (type == "pass")
+                    prompt.addClass("greenPopup");
+                else
+                    prompt.removeClass("greenPopup");
+
+                if (type == "load")
+                    prompt.addClass("blackPopup");
+                else
+                    prompt.removeClass("blackPopup");
+
+                if (ajaxed)
+                    prompt.addClass("ajaxed");
+                else
+                    prompt.removeClass("ajaxed");
+
+                prompt.find(".formErrorContent").html(promptText);
+
+                var pos = methods._calculatePosition(field, prompt, options);
+                prompt.animate({
+                    "top": pos.callerTopPosition,
+                    "marginTop": pos.marginTopSize
+                });
+            }
+        },
+        /**
+         * Closes the prompt associated with the given field
+         *
+         * @param {jqObject}
+         *            field
+         */
+        _closePrompt: function(field) {
+
+            var prompt = methods._getPrompt(field);
+            if (prompt)
+                prompt.fadeTo("fast", 0, function() {
+                    prompt.remove();
+                });
+        },
+        closePrompt: function(field) {
+            return methods._closePrompt(field);
+        },
+        /**
+         * Returns the error prompt matching the field if any
+         *
+         * @param {jqObject}
+         *            field
+         * @return undefined or the error prompt (jqObject)
+         */
+        _getPrompt: function(field) {
+
+            var className = "." + methods._getClassName(field.attr("id")) + "formError";
+            var match = $(className)[0];
+            if (match)
+                return $(match);
+        },
+        /**
+         * Calculates prompt position
+         *
+         * @param {jqObject}
+         *            field
+         * @param {jqObject}
+         *            the prompt
+         * @param {Map}
+         *            options
+         * @return positions
+         */
+        _calculatePosition: function(field, promptElmt, options) {
+
+            var promptTopPosition, promptleftPosition, marginTopSize;
+            var fieldWidth = field.width();
+            var promptHeight = promptElmt.height();
+
+            var overflow = options.isOverflown;
+            if (overflow) {
+                // is the form contained in an overflown container?
+                promptTopPosition = promptleftPosition = 0;
+                // compensation for the arrow
+                marginTopSize = -promptHeight;
+            } else {
+                var offset = field.offset();
+                promptTopPosition = offset.top;
+                promptleftPosition = offset.left;
+                marginTopSize = 0;
+            }
+
+            switch (options.promptPosition) {
+
+                default:
+                case "topRight":
+                    if (overflow)
+                        // Is the form contained in an overflown container?
+                        promptleftPosition += fieldWidth - 30;
+                    else {
+                        promptleftPosition += fieldWidth - 30;
+                        promptTopPosition += -promptHeight;
+                    }
+                    break;
+                case "topLeft":
+                    promptTopPosition += -promptHeight - 10;
+                    break;
+                case "centerRight":
+                    promptleftPosition += fieldWidth + 13;
+                    break;
+                case "bottomLeft":
+                    promptTopPosition = promptTopPosition + field.height() + 15;
+                    break;
+                case "bottomRight":
+                    promptleftPosition += fieldWidth - 30;
+                    promptTopPosition += field.height() + 5;
+            }
+
+            return {
+                "callerTopPosition": promptTopPosition + "px",
+                "callerleftPosition": promptleftPosition + "px",
+                "marginTopSize": marginTopSize + "px"
+            };
+        },
+        /**
+         * Saves the user options and variables in the form.data
+         *
+         * @param {jqObject}
+         *            form - the form where the user option should be saved
+         * @param {Map}
+         *            options - the user options
+         * @return the user options (extended from the defaults)
+         */
+        _saveOptions: function(form, options) {
+
+            // is there a language localisation ?
+            if ($.validationEngineLanguage)
+                var allRules = $.validationEngineLanguage.allRules;
+            else
+                $.error("jQuery.validationEngine rules are not loaded, plz add localization files to the page");
+
+            var userOptions = $.extend({
+
+                // Name of the event triggering field validation
+                validationEventTrigger: "blur",
+                // Automatically scroll viewport to the first error
+                scroll: true,
+                // Opening box position, possible locations are: topLeft,
+                // topRight, bottomLeft, centerRight, bottomRight
+                promptPosition: "topRight",
+                bindMethod:"bind",
+                               // internal, automatically set to true when it parse a _ajax rule
+                               inlineAjax: false,
+                // if set to true, the form data is sent asynchronously via ajax to the form.action url (get)
+                ajaxFormValidation: false,
+                // Ajax form validation callback method: boolean onComplete(form, status, errors, options)
+                // retuns false if the form.submit event needs to be canceled.
+                               ajaxFormValidationURL: false,
+                // The url to send the submit ajax validation (default to action)
+                onAjaxFormComplete: $.noop,
+                // called right before the ajax call, may return false to cancel
+                onBeforeAjaxFormValidation: $.noop,
+                // Stops form from submitting and execute function assiciated with it
+                onValidationComplete: false,
+
+                // Used when the form is displayed within a scrolling DIV
+                isOverflown: false,
+                overflownDIV: "",
+
+                // --- Internals DO NOT TOUCH or OVERLOAD ---
+                // validation rules and i18
+                allrules: allRules,
+                // true when form and fields are binded
+                binded: false,
+                // set to true, when the prompt arrow needs to be displayed
+                showArrow: true,
+                // did one of the validation fail ? kept global to stop further ajax validations
+                isError: false,
+                // Caches field validation status, typically only bad status are created.
+                // the array is used during ajax form validation to detect issues early and prevent an expensive submit
+                ajaxValidCache: {}
+
+            }, options);
+
+            form.data('jqv', userOptions);
+            return userOptions;
+        },
+        
+        /**
+         * Removes forbidden characters from class name
+         * @param {String} className
+         */
+        _getClassName: function(className) {
+               return className.replace(":","_").replace(".","_");
+        }
+    };
+
+    /**
+     * Plugin entry point.
+     * You may pass an action as a parameter or a list of options.
+     * if none, the init and attach methods are being called.
+     * Remember: if you pass options, the attached method is NOT called automatically
+     *
+     * @param {String}
+     *            method (optional) action
+     */
+    $.fn.validationEngine = function(method) {
+
+        var form = $(this);
+                 if(!form[0]) return false;  // stop here if the form does not exist
+                 
+        if (typeof(method) == 'string' && method.charAt(0) != '_' && methods[method]) {
+
+            // make sure init is called once
+            if(method != "showPrompt" && method != "hidePrompt" && method != "hide" && method != "hideAll") 
+               methods.init.apply(form);
+             
+            return methods[method].apply(form, Array.prototype.slice.call(arguments, 1));
+        } else if (typeof method == 'object' || !method) {
+            // default constructor with or without arguments
+                       methods.init.apply(form, arguments);
+            return methods.attach.apply(form);
+        } else {
+            $.error('Method ' + method + ' does not exist in jQuery.validationEngine');
+        }
+    };
+})(jQuery);
\ No newline at end of file
diff --git a/js/swpm.password-meter.js b/js/swpm.password-meter.js
new file mode 100644 (file)
index 0000000..1e53aba
--- /dev/null
@@ -0,0 +1,41 @@
+(function($){
+    function check_pass_strength() {
+        var type = $('#swpm-profile-page').attr('type'), pass1 = $('#pass1').val(), pass2 = $('#pass2').val(), strength;
+        if (type === 'edit' && pass1.length === 0 && pass2.length === 0){            
+            $('#pass1').closest('tr').removeClass('form-required');
+        }
+        else{
+            $('#pass1').closest('tr').addClass('form-required');
+        }        
+        $('#pass-strength-result').removeClass('short bad good strong');
+        if ( ! pass1 ) {
+            $('#pass-strength-result').html( pwsL10n.empty );
+            return;
+        }
+
+        strength = wp.passwordStrength.meter( pass1, wp.passwordStrength.userInputBlacklist(), pass2 );
+        switch ( strength ) {
+            case 2:
+                $('#pass-strength-result').addClass('bad').html( pwsL10n['bad'] );
+                break;
+            case 3:
+                $('#pass-strength-result').addClass('good').html( pwsL10n['good'] );
+                break;
+            case 4:
+                $('#pass-strength-result').addClass('strong').html( pwsL10n['strong'] );
+                break;
+            case 5:
+                $('#pass-strength-result').addClass('short').html( pwsL10n['mismatch'] );
+                break;
+            default:
+                $('#pass-strength-result').addClass('short').html( pwsL10n['short'] );
+        }
+    }
+
+    $(document).ready( function() {
+        $('#pass1').val('').keyup( check_pass_strength );
+        $('#pass2').val('').keyup( check_pass_strength );
+        $('#pass-strength-result').show();
+    });
+
+})(jQuery);
diff --git a/languages/swpm-da_DA.mo b/languages/swpm-da_DA.mo
new file mode 100644 (file)
index 0000000..5b3198c
Binary files /dev/null and b/languages/swpm-da_DA.mo differ
diff --git a/languages/swpm-da_DA.po b/languages/swpm-da_DA.po
new file mode 100644 (file)
index 0000000..667b54c
--- /dev/null
@@ -0,0 +1,934 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Simple Membership\n"
+"POT-Creation-Date: 2015-01-27 14:50+1000\n"
+"PO-Revision-Date: 2015-02-07 20:18+0100\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.7.4\n"
+"X-Poedit-KeywordsList: __;_e\n"
+"X-Poedit-Basepath: .\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Language: da_DK\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: simple-membership/classes/class.bAccessControl.php:21
+#: simple-membership/classes/class.bAccessControl.php:28
+#: simple-membership/classes/class.bAccessControl.php:48
+msgid "You need to login to view this content. "
+msgstr "Du skal logge ind for at se dette indhold."
+
+#: simple-membership/classes/class.bAccessControl.php:35
+#: simple-membership/classes/class.bAccessControl.php:39
+#: simple-membership/classes/class.bAccessControl.php:54
+msgid "You are not allowed to view this content"
+msgstr "Du har ikke tilladelse til at se dette indhold."
+
+#: simple-membership/classes/class.bAccessControl.php:72
+msgid "You do no have permission to view rest of the content"
+msgstr "Du har ikke tilladelse til at se resten af indholdet."
+
+#: simple-membership/classes/class.bAccessControl.php:76
+#: simple-membership/classes/class.bAccessControl.php:94
+msgid "You need to login to view the rest of the content. "
+msgstr "Du skal logge ind for at se resten af indholdet."
+
+#: simple-membership/classes/class.bAdminRegistration.php:49
+msgid "Registration Successful."
+msgstr "Du er nu registreret."
+
+#: simple-membership/classes/class.bAdminRegistration.php:54
+#: simple-membership/classes/class.bAdminRegistration.php:89
+#: simple-membership/classes/class.bMembershipLevel.php:42
+#: simple-membership/classes/class.bMembershipLevel.php:60
+msgid "Please correct the following:"
+msgstr "Korriger venligst følgende:"
+
+#: simple-membership/classes/class.bAjax.php:17
+#: simple-membership/classes/class.bAjax.php:28
+msgid "Aready taken"
+msgstr "Anvendes allerede af en anden."
+
+#: simple-membership/classes/class.bAjax.php:29
+msgid "Available"
+msgstr "Ledig"
+
+#: simple-membership/classes/class.bAuth.php:46
+#: simple-membership/classes/class.bFrontRegistration.php:173
+msgid "User Not Found."
+msgstr "Bruger ikke fundet."
+
+#: simple-membership/classes/class.bAuth.php:53
+msgid "Password Empty or Invalid."
+msgstr "Kodeord er tomt eller ugyldigt."
+
+#: simple-membership/classes/class.bAuth.php:76
+msgid "Account is inactive."
+msgstr "Kontoen er inaktiv."
+
+#: simple-membership/classes/class.bAuth.php:93
+msgid "Account has expired."
+msgstr "Kontoen er udløbet."
+
+#: simple-membership/classes/class.bAuth.php:100
+msgid "You are logged in as:"
+msgstr "Du er logget ind som:"
+
+#: simple-membership/classes/class.bAuth.php:139
+msgid "Logged Out Successfully."
+msgstr "Du er nu logget ud."
+
+#: simple-membership/classes/class.bAuth.php:186
+msgid "Session Expired."
+msgstr "Session udløbet."
+
+#: simple-membership/classes/class.bAuth.php:194
+msgid "Invalid User Name"
+msgstr "Ugyldigt brugernavn"
+
+#: simple-membership/classes/class.bAuth.php:202
+msgid "Sorry! Something went wrong"
+msgstr "Beklager. Noget gik galt."
+
+#: simple-membership/classes/class.bCategoryList.php:15
+#: simple-membership/classes/class.bMembers.php:21
+#: simple-membership/classes/class.bMembershipLevels.php:8
+#: simple-membership/classes/class.bMembershipLevels.php:17
+#: simple-membership/views/add.php:30
+#: simple-membership/views/admin_member_form_common_part.php:2
+#: simple-membership/views/edit.php:52
+msgid "Membership Level"
+msgstr "Medlemskatergori"
+
+#: simple-membership/classes/class.bCategoryList.php:16
+#: simple-membership/classes/class.bMembershipLevels.php:9
+#: simple-membership/classes/class.simple-wp-membership.php:464
+msgid "Membership Levels"
+msgstr "Medlemskategorier"
+
+#: simple-membership/classes/class.bCategoryList.php:29
+#: simple-membership/classes/class.bMembers.php:16
+#: simple-membership/classes/class.bMembershipLevels.php:16
+msgid "ID"
+msgstr "ID"
+
+#: simple-membership/classes/class.bCategoryList.php:30
+msgid "Name"
+msgstr "Navn"
+
+#: simple-membership/classes/class.bCategoryList.php:31
+msgid "Description"
+msgstr "Beskrivelse"
+
+#: simple-membership/classes/class.bCategoryList.php:32
+msgid "Count"
+msgstr "Antal"
+
+#: simple-membership/classes/class.bCategoryList.php:63
+msgid "Updated! "
+msgstr "Opdateret."
+
+#: simple-membership/classes/class.bForm.php:26
+msgid ""
+"Wordpress account exists with given user name. But given email doesn't match."
+msgstr "Wordpress kontoen er oprettet, men email adressen matcher ikke."
+
+#: simple-membership/classes/class.bForm.php:31
+msgid ""
+"Wordpress account exists with given email. But given user name doesn't match."
+msgstr "Email adressen matcher en Wordpress konto, men ikke denne."
+
+#: simple-membership/classes/class.bForm.php:40
+msgid "User name is required"
+msgstr "Brugernavn er påkrævet"
+
+#: simple-membership/classes/class.bForm.php:44
+msgid "User name contains invalid character"
+msgstr "Brugernavn indeholder ugyldige karakterer."
+
+#: simple-membership/classes/class.bForm.php:52
+msgid "User name already exists."
+msgstr "Brugernavnet eksisterer allerede."
+
+#: simple-membership/classes/class.bForm.php:75
+msgid "Password is required"
+msgstr "Kodeord er påkrævet."
+
+#: simple-membership/classes/class.bForm.php:82
+msgid "Password mismatch"
+msgstr "Kodeordene matcher ikke."
+
+#: simple-membership/classes/class.bForm.php:98
+msgid "Email is required"
+msgstr "Email er påkrævet."
+
+#: simple-membership/classes/class.bForm.php:102
+msgid "Email is invalid"
+msgstr "Ugyldig email."
+
+#: simple-membership/classes/class.bForm.php:118
+msgid "Email is already used."
+msgstr "Email er allerede i brug."
+
+#: simple-membership/classes/class.bForm.php:184
+msgid "Member since field is invalid"
+msgstr "Medlem siden feltet er ugyldigt."
+
+#: simple-membership/classes/class.bForm.php:195
+msgid "Access starts field is invalid"
+msgstr "Adgangsfeltet er ugyldigt."
+
+#: simple-membership/classes/class.bForm.php:205
+msgid "Gender field is invalid"
+msgstr "Kønsfeltet er ugyldigt."
+
+#: simple-membership/classes/class.bForm.php:216
+msgid "Account state field is invalid"
+msgstr "Kontostatus feltet er ugyldigt."
+
+#: simple-membership/classes/class.bForm.php:223
+msgid "Invalid membership level"
+msgstr "Ugyldigt medlemskategori."
+
+#: simple-membership/classes/class.bFrontRegistration.php:61
+msgid "Registration Successful. "
+msgstr "Registrering fuldendt."
+
+#: simple-membership/classes/class.bFrontRegistration.php:61
+#: simple-membership/classes/class.bSettings.php:367
+msgid "Please"
+msgstr "Venligst"
+
+#: simple-membership/classes/class.bFrontRegistration.php:61
+#: simple-membership/classes/class.bSettings.php:367
+#: simple-membership/views/login.php:21
+msgid "Login"
+msgstr "Login"
+
+#: simple-membership/classes/class.bFrontRegistration.php:72
+#: simple-membership/classes/class.bFrontRegistration.php:152
+msgid "Please correct the following"
+msgstr "Ret venligst følgende:"
+
+#: simple-membership/classes/class.bFrontRegistration.php:106
+msgid "Membership Level Couldn't be found."
+msgstr "Medlemskategorien findes ikke."
+
+#: simple-membership/classes/class.bFrontRegistration.php:162
+msgid "Email Address Not Valid."
+msgstr "Email adressen er ugyldig."
+
+#: simple-membership/classes/class.bFrontRegistration.php:193
+msgid "New password has been sent to your email address."
+msgstr "Et nyt kodeord er blevet sendt til din email adresse."
+
+#: simple-membership/classes/class.bLevelForm.php:47
+msgid "Date format is not valid."
+msgstr "Datoformatet er ugyldigt."
+
+#: simple-membership/classes/class.bLevelForm.php:54
+msgid "Access duration must be > 0."
+msgstr "Tidsbegrænsningen skal være større end 0."
+
+#: simple-membership/classes/class.bMembers.php:7
+msgid "Member"
+msgstr "Medlem"
+
+#: simple-membership/classes/class.bMembers.php:8
+#: simple-membership/classes/class.simple-wp-membership.php:462
+msgid "Members"
+msgstr "Medlemmer"
+
+#: simple-membership/classes/class.bMembers.php:17
+#: simple-membership/views/add.php:6 simple-membership/views/edit.php:4
+msgid "User Name"
+msgstr "Brugernavn"
+
+#: simple-membership/classes/class.bMembers.php:18
+#: simple-membership/views/add.php:22
+#: simple-membership/views/admin_member_form_common_part.php:15
+#: simple-membership/views/edit.php:20
+msgid "First Name"
+msgstr "Fornavn"
+
+#: simple-membership/classes/class.bMembers.php:19
+#: simple-membership/views/add.php:26
+#: simple-membership/views/admin_member_form_common_part.php:19
+#: simple-membership/views/edit.php:24
+msgid "Last Name"
+msgstr "Efternavn"
+
+#: simple-membership/classes/class.bMembers.php:20
+#: simple-membership/views/add.php:10 simple-membership/views/edit.php:8
+msgid "Email"
+msgstr "Email"
+
+#: simple-membership/classes/class.bMembers.php:22
+#: simple-membership/views/admin_member_form_common_part.php:11
+msgid "Access Starts"
+msgstr "Adgang starter"
+
+#: simple-membership/classes/class.bMembers.php:23
+msgid "Account State"
+msgstr "Konto status"
+
+#: simple-membership/classes/class.bMembers.php:35
+#: simple-membership/classes/class.bMembershipLevels.php:29
+msgid "Delete"
+msgstr "Slet"
+
+#: simple-membership/classes/class.bMembers.php:101
+msgid "No Member found."
+msgstr "Ingen medlemmer fundet."
+
+#: simple-membership/classes/class.bMembershipLevel.php:37
+msgid "Membership Level Creation Successful."
+msgstr "Oprettelsen af medlem er fuldendt."
+
+#: simple-membership/classes/class.bMembershipLevel.php:56
+msgid "Updated Successfully."
+msgstr "Opdatering er fuldendt."
+
+#: simple-membership/classes/class.bMembershipLevels.php:18
+msgid "Role"
+msgstr "Rolle"
+
+#: simple-membership/classes/class.bMembershipLevels.php:19
+msgid "Access Valid For/Until"
+msgstr "Adgang gyldig i / indtil"
+
+#: simple-membership/classes/class.bSettings.php:30
+msgid "Plugin Documentation"
+msgstr "Plugin dokumentation"
+
+#: simple-membership/classes/class.bSettings.php:32
+msgid "General Settings"
+msgstr "Generel opsætning"
+
+#: simple-membership/classes/class.bSettings.php:34
+msgid "Enable Free Membership"
+msgstr "Tillad gratis medlemskab."
+
+#: simple-membership/classes/class.bSettings.php:37
+msgid "Enable/disable registration for free membership level"
+msgstr "Tillad / stop registrering af gratismedlemskaber."
+
+#: simple-membership/classes/class.bSettings.php:38
+msgid "Free Membership Level ID"
+msgstr "Gratis medlemskab niveau"
+
+#: simple-membership/classes/class.bSettings.php:41
+msgid "Assign free membership level ID"
+msgstr "Tildel gratis medlemskab niveau"
+
+#: simple-membership/classes/class.bSettings.php:42
+msgid "Enable More Tag Protection"
+msgstr "Tillad beskyttelse af flere tags."
+
+#: simple-membership/classes/class.bSettings.php:45
+msgid ""
+"Enables or disables \"more\" tag protection in the posts and pages. Anything "
+"after the More tag is protected. Anything before the more tag is teaser "
+"content."
+msgstr ""
+"Tillad eller stop \"more\" tag beskyttelse in indlæg og sider. Alt efter "
+"'mere' tag vil være beskyttet. Alt før 'mere' tag kan ses."
+
+#: simple-membership/classes/class.bSettings.php:46
+msgid "Hide Adminbar"
+msgstr "Skjul administrationsværktøjslinie"
+
+#: simple-membership/classes/class.bSettings.php:49
+msgid ""
+"WordPress shows an admin toolbar to the logged in users of the site. Check "
+"this box if you want to hide that admin toolbar in the fronend of your site."
+msgstr ""
+"WordPress viser en administrationsværktøjslinie til brugere der er logget på "
+"på denne side. Marker hvis du ønsker at skjule administrationsværktøjslinien."
+
+#: simple-membership/classes/class.bSettings.php:51
+msgid "Default Account Status"
+msgstr "Normalt konto status"
+
+#: simple-membership/classes/class.bSettings.php:56
+msgid ""
+"Select the default account status for newly registered users. If you want to "
+"manually approve the members then you can set the status to \"Pending\"."
+msgstr ""
+"Vælg den normale konto status for nyregistrerede brugere. Hvis du ønsker at "
+"godkende medlemmerne manuelt, kan du sætte status som  \"Afventer\"."
+
+#: simple-membership/classes/class.bSettings.php:62
+msgid "Pages Settings"
+msgstr "Sideopsætning"
+
+#: simple-membership/classes/class.bSettings.php:64
+msgid "Login Page URL"
+msgstr "Login side URL"
+
+#: simple-membership/classes/class.bSettings.php:68
+msgid "Registration Page URL"
+msgstr "Registreringsside URL"
+
+#: simple-membership/classes/class.bSettings.php:72
+msgid "Join Us Page URL"
+msgstr "Bliv medlem side URL"
+
+#: simple-membership/classes/class.bSettings.php:76
+msgid "Edit Profile Page URL"
+msgstr "Skift profilside URL"
+
+#: simple-membership/classes/class.bSettings.php:80
+msgid "Password Reset Page URL"
+msgstr "Kodeord reset side URL"
+
+#: simple-membership/classes/class.bSettings.php:85
+msgid "Test & Debug Settings"
+msgstr "Test & fejlrettelser indstillinger"
+
+#: simple-membership/classes/class.bSettings.php:91
+msgid "Enable Sandbox Testing"
+msgstr "Tillad sandbox test"
+
+#: simple-membership/classes/class.bSettings.php:94
+msgid "Enable this option if you want to do sandbox payment testing."
+msgstr "Tillad denne hvis du vil teste i sandbox."
+
+#: simple-membership/classes/class.bSettings.php:104
+msgid "Email Misc. Settings"
+msgstr "Diverse email indstillinger"
+
+#: simple-membership/classes/class.bSettings.php:106
+msgid "From Email Address"
+msgstr "Afsender email adresse"
+
+#: simple-membership/classes/class.bSettings.php:111
+msgid "Email Settings (Prompt to Complete Registration )"
+msgstr "Email indstillinger (spørg for at færdiggøre registrering)"
+
+#: simple-membership/classes/class.bSettings.php:113
+#: simple-membership/classes/class.bSettings.php:124
+#: simple-membership/classes/class.bSettings.php:143
+msgid "Email Subject"
+msgstr "Email emne"
+
+#: simple-membership/classes/class.bSettings.php:117
+#: simple-membership/classes/class.bSettings.php:128
+#: simple-membership/classes/class.bSettings.php:147
+msgid "Email Body"
+msgstr "Email tekst"
+
+#: simple-membership/classes/class.bSettings.php:122
+msgid "Email Settings (Registration Complete)"
+msgstr "Email indstillinger (fuldendt registrering)"
+
+#: simple-membership/classes/class.bSettings.php:132
+msgid "Send Notification To Admin"
+msgstr "Send besked til administrator"
+
+#: simple-membership/classes/class.bSettings.php:136
+msgid "Send Email to Member When Added via Admin Dashboard"
+msgstr "Send email til medlem som tilføjes via administrationskontrolpanelet."
+
+#: simple-membership/classes/class.bSettings.php:141
+msgid " Email Settings (Account Upgrade Notification)"
+msgstr "Email indstillinger (besked om kontoopgradering)"
+
+#: simple-membership/classes/class.bSettings.php:367
+msgid "Not a Member?"
+msgstr "Ikke medlem?"
+
+#: simple-membership/classes/class.bSettings.php:367
+#: simple-membership/views/login.php:27
+msgid "Join Us"
+msgstr "Meld dig ind"
+
+#: simple-membership/classes/class.bUtils.php:63
+msgid "Active"
+msgstr "Aktiv"
+
+#: simple-membership/classes/class.bUtils.php:64
+msgid "Inactive"
+msgstr "Inaktiv"
+
+#: simple-membership/classes/class.bUtils.php:65
+msgid "Pending"
+msgstr "Afventer"
+
+#: simple-membership/classes/class.bUtils.php:66
+msgid "Expired"
+msgstr "Udløbet"
+
+#: simple-membership/classes/class.bUtils.php:251
+msgid "Never"
+msgstr "Aldrig"
+
+#: simple-membership/classes/class.miscUtils.php:51
+msgid "Registration"
+msgstr "Registrering"
+
+#: simple-membership/classes/class.miscUtils.php:74
+msgid "Member Login"
+msgstr "Medlemslogin"
+
+#: simple-membership/classes/class.miscUtils.php:97
+msgid "Profile"
+msgstr "Profil"
+
+#: simple-membership/classes/class.miscUtils.php:120
+msgid "Password Reset"
+msgstr "Kodeord reset"
+
+#: simple-membership/classes/class.simple-wp-membership.php:184
+msgid "You are not logged in."
+msgstr "Du er ikke logget ind."
+
+#: simple-membership/classes/class.simple-wp-membership.php:215
+msgid "Simple WP Membership Protection"
+msgstr "Simple WP Membership beskyttelse"
+
+#: simple-membership/classes/class.simple-wp-membership.php:228
+msgid "Simple Membership Protection options"
+msgstr "Simple Membership Protection valgmuligheder"
+
+#: simple-membership/classes/class.simple-wp-membership.php:244
+msgid "Do you want to protect this content?"
+msgstr "Vil du beskytte dette indhold?"
+
+#: simple-membership/classes/class.simple-wp-membership.php:249
+msgid "Select the membership level that can access this content:"
+msgstr "Vælg medlemskategori der kan tilgå dette indhold:"
+
+#: simple-membership/classes/class.simple-wp-membership.php:459
+msgid "WP Membership"
+msgstr "WP medlemskab"
+
+#: simple-membership/classes/class.simple-wp-membership.php:466
+msgid "Settings"
+msgstr "Indstillinger"
+
+#: simple-membership/classes/class.simple-wp-membership.php:468
+msgid "Add-ons"
+msgstr "Plugin"
+
+#: simple-membership/views/add.php:14 simple-membership/views/admin_add.php:19
+#: simple-membership/views/admin_edit.php:17
+#: simple-membership/views/edit.php:12 simple-membership/views/login.php:11
+msgid "Password"
+msgstr "Kodeord"
+
+#: simple-membership/views/add.php:18 simple-membership/views/edit.php:16
+msgid "Repeat Password"
+msgstr "Gentag kodeord"
+
+#: simple-membership/views/add.php:37
+msgid "Register"
+msgstr "Registrer"
+
+#: simple-membership/views/admin_add.php:6
+msgid "Add Member"
+msgstr "Tilmeld medlem"
+
+#: simple-membership/views/admin_add.php:7
+msgid "Create a brand new user and add it to this site."
+msgstr "Tilmeld helt ny bruger til denne hjemmeside."
+
+#: simple-membership/views/admin_add.php:11
+msgid "User name"
+msgstr "Brugernavn"
+
+#: simple-membership/views/admin_add.php:11
+#: simple-membership/views/admin_add.php:15
+#: simple-membership/views/admin_add_level.php:11
+#: simple-membership/views/admin_add_level.php:15
+#: simple-membership/views/admin_add_level.php:19
+#: simple-membership/views/admin_edit.php:9
+#: simple-membership/views/admin_edit.php:13
+#: simple-membership/views/admin_edit_level.php:10
+#: simple-membership/views/admin_edit_level.php:14
+#: simple-membership/views/admin_edit_level.php:18
+msgid "(required)"
+msgstr "(påkrævet)"
+
+#: simple-membership/views/admin_add.php:15
+#: simple-membership/views/admin_edit.php:13
+msgid "E-mail"
+msgstr "Email"
+
+#: simple-membership/views/admin_add.php:19
+msgid "(twice, required)"
+msgstr "(to gange, påkrævet)"
+
+#: simple-membership/views/admin_add.php:24
+#: simple-membership/views/admin_edit.php:21
+msgid "Strength indicator"
+msgstr "Styrkeindikator"
+
+#: simple-membership/views/admin_add.php:25
+#: simple-membership/views/admin_edit.php:22
+msgid ""
+"Hint: The password should be at least seven characters long. To make it "
+"stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
+"$ % ^ &amp; )."
+msgstr ""
+"Råd: Kodeordet skal være mindst syv karakterer langt. For at gøre det "
+"stærkere, brug store og små bogstaver, tal og symboler som ! \" ? $ % ^ "
+"&amp; )."
+
+#: simple-membership/views/admin_add.php:29
+#: simple-membership/views/admin_edit.php:26
+#: simple-membership/views/loggedin.php:7
+msgid "Account Status"
+msgstr "Kontostatus"
+
+#: simple-membership/views/admin_add.php:36
+msgid "Add New Member "
+msgstr "Tilmeld nyt medlem"
+
+#: simple-membership/views/admin_addon_settings.php:2
+#: simple-membership/views/admin_payment_settings.php:2
+#: simple-membership/views/admin_settings.php:2
+#: simple-membership/views/admin_tools_settings.php:2
+msgid "Simple WP Membership::Settings"
+msgstr "Simple WP Membership indstillinger"
+
+#: simple-membership/views/admin_addon_settings.php:7
+msgid ""
+"Some of the simple membership plugin's addon settings and options will be "
+"displayed here (if you have them)"
+msgstr ""
+"Nogle af de Simple Membership plugin indstillinger vil blive vist her (hvis "
+"du har dem)."
+
+#: simple-membership/views/admin_add_level.php:6
+msgid "Create new membership level."
+msgstr "Opret ny medlemskategori."
+
+#: simple-membership/views/admin_add_level.php:11
+#: simple-membership/views/admin_edit_level.php:10
+msgid "Membership Level Name"
+msgstr "Medlemskategori navn"
+
+#: simple-membership/views/admin_add_level.php:15
+#: simple-membership/views/admin_edit_level.php:14
+msgid "Default WordPress Role"
+msgstr "Standard WordPress rolle"
+
+#: simple-membership/views/admin_add_level.php:19
+#: simple-membership/views/admin_edit_level.php:18
+msgid "Access Duration"
+msgstr "Adgangsvarighed"
+
+#: simple-membership/views/admin_add_level.php:22
+msgid "No Expiry (Access for this level will not expire until cancelled"
+msgstr ""
+"Intet udløb (adgang til denne medlemskategori vil ikke udløbe med mindre den "
+"slettes)."
+
+#: simple-membership/views/admin_add_level.php:23
+#: simple-membership/views/admin_add_level.php:25
+#: simple-membership/views/admin_add_level.php:27
+#: simple-membership/views/admin_add_level.php:29
+#: simple-membership/views/admin_edit_level.php:22
+#: simple-membership/views/admin_edit_level.php:25
+#: simple-membership/views/admin_edit_level.php:28
+#: simple-membership/views/admin_edit_level.php:31
+msgid "Expire After"
+msgstr "Udløber efter"
+
+#: simple-membership/views/admin_add_level.php:24
+#: simple-membership/views/admin_edit_level.php:23
+msgid "Days (Access expires after given number of days)"
+msgstr "Dage (adgang udløber efter et givent antal dage)"
+
+#: simple-membership/views/admin_add_level.php:26
+msgid "Weeks (Access expires after given number of weeks"
+msgstr "Uger (adgang udløber efter et givent antal uger)"
+
+#: simple-membership/views/admin_add_level.php:28
+#: simple-membership/views/admin_edit_level.php:29
+msgid "Months (Access expires after given number of months)"
+msgstr "Måneder (adgang udløber efter et givent antal måneder)"
+
+#: simple-membership/views/admin_add_level.php:30
+#: simple-membership/views/admin_edit_level.php:32
+msgid "Years (Access expires after given number of years)"
+msgstr "År (adgang udløber efter et givent antal år)"
+
+#: simple-membership/views/admin_add_level.php:31
+#: simple-membership/views/admin_edit_level.php:34
+msgid "Fixed Date Expiry"
+msgstr "Fast udløbsdato"
+
+#: simple-membership/views/admin_add_level.php:32
+#: simple-membership/views/admin_edit_level.php:35
+msgid "(Access expires on a fixed date)"
+msgstr "(Adgang udløber på en bestemt dato)"
+
+#: simple-membership/views/admin_add_level.php:36
+msgid "Access to older posts."
+msgstr "Adgang til ældre indlæg."
+
+#: simple-membership/views/admin_add_level.php:39
+msgid "Only allow access to posts published after the user's join date."
+msgstr "Tillad kun adgang til indlæg udgivet efter brugerens indmeldelsesdato."
+
+#: simple-membership/views/admin_add_level.php:45
+msgid "Add New Membership Level "
+msgstr "Opret ny medlemskategori."
+
+#: simple-membership/views/admin_add_ons_page.php:6
+msgid "Simple WP Membership::Add-ons"
+msgstr "Simple WP Membership :: Plugin"
+
+#: simple-membership/views/admin_category_list.php:2
+msgid "Simple WP Membership::Categories"
+msgstr "Simple WP Membership :: Kategorier"
+
+#: simple-membership/views/admin_category_list.php:7
+msgid ""
+"First of all, globally protect the category on your site by selecting "
+"\"General Protection\" from the drop-down box below and then select the "
+"categories that should be protected from non-logged in users."
+msgstr ""
+"Vælg ført global beskyttelse af kategorien på din internetside ved at vælge "
+"\"General Protection\" fra dropdown boksen nedenfor, og vælg så de "
+"kategorier som skal beskyttes mod brugere, der ikke er logget ind."
+
+#: simple-membership/views/admin_category_list.php:10
+msgid ""
+"Next, select an existing membership level from the drop-down box below and "
+"then select the categories you want to grant access to (for that particular "
+"membership level)."
+msgstr ""
+"Vælg derefter en eksistererende medlemskategori fra dropdown boksen "
+"herunder, og vælg så de kategorier du ønsker at give medlemskategorien "
+"adgang til."
+
+#: simple-membership/views/admin_edit.php:5
+msgid "Edit Member"
+msgstr "Ret medlem"
+
+#: simple-membership/views/admin_edit.php:6
+msgid "Edit existing member details."
+msgstr "Ret eksisterende medlemsindstillinger."
+
+#: simple-membership/views/admin_edit.php:9
+#: simple-membership/views/login.php:5
+msgid "Username"
+msgstr "Brugernavn"
+
+#: simple-membership/views/admin_edit.php:17
+msgid "(twice, leave empty to retain old password)"
+msgstr "(to gange, efterlad tomt for at bevare nuværende kodeord)"
+
+#: simple-membership/views/admin_edit.php:33
+msgid "Notify User"
+msgstr "Send besked til bruger"
+
+#: simple-membership/views/admin_edit.php:40
+msgid "Edit User "
+msgstr "Ret bruger"
+
+#: simple-membership/views/admin_edit_level.php:5
+msgid "Edit membership level"
+msgstr "Ret medlemskategori"
+
+#: simple-membership/views/admin_edit_level.php:6
+msgid "Edit membership level."
+msgstr "Ret medlemskategori."
+
+#: simple-membership/views/admin_edit_level.php:21
+msgid "No Expiry (Access for this level will not expire until cancelled)"
+msgstr ""
+"Intet udløb (adgang til denne kategori udløber ikke med mindre kategorien "
+"slettes)."
+
+#: simple-membership/views/admin_edit_level.php:26
+msgid "Weeks (Access expires after given number of weeks)"
+msgstr "Uger (adgang udløber efter et givent antal uger)"
+
+#: simple-membership/views/admin_edit_level.php:40
+msgid "Protect Older Posts (optional)"
+msgstr "Beskyt ældre indlæg (valgfrit)"
+
+#: simple-membership/views/admin_edit_level.php:43
+msgid ""
+"Only allow access to protected posts published after the members's join date."
+msgstr ""
+"Beskyt kun adgang til beskyttede indlæg udgivet efter medlemmets "
+"indmeldelsesdato."
+
+#: simple-membership/views/admin_edit_level.php:51
+msgid "Edit Membership Level "
+msgstr "Ret medlemskategori"
+
+#: simple-membership/views/admin_members.php:2
+msgid "Simple WP Membership::Members"
+msgstr "Simple WP Membership :: Medlemmer"
+
+#: simple-membership/views/admin_members.php:3
+#: simple-membership/views/admin_members.php:19
+#: simple-membership/views/admin_membership_levels.php:20
+msgid "Add New"
+msgstr "Opret ny"
+
+#: simple-membership/views/admin_members.php:9
+#: simple-membership/views/admin_membership_levels.php:10
+msgid "search"
+msgstr "søg"
+
+#: simple-membership/views/admin_membership_levels.php:2
+msgid "Simple WP Membership::Membership Levels"
+msgstr "Simple WP Membership :: Medlemskategori"
+
+#: simple-membership/views/admin_membership_level_menu.php:2
+msgid "Membership level"
+msgstr "Medlemskategori"
+
+#: simple-membership/views/admin_membership_level_menu.php:3
+msgid "Manage Content Production"
+msgstr "Håndter indholdsproduktion"
+
+#: simple-membership/views/admin_membership_level_menu.php:4
+msgid "Category Protection"
+msgstr "Kategoribeskyttelse"
+
+#: simple-membership/views/admin_membership_manage.php:17
+msgid "Example Content Protection Settings"
+msgstr "Eksempel på indstillinger af indholdsbeskyttelse"
+
+#: simple-membership/views/admin_member_form_common_part.php:23
+msgid "Gender"
+msgstr "Køn"
+
+#: simple-membership/views/admin_member_form_common_part.php:30
+#: simple-membership/views/edit.php:28
+msgid "Phone"
+msgstr "Telefon"
+
+#: simple-membership/views/admin_member_form_common_part.php:34
+#: simple-membership/views/edit.php:32
+msgid "Street"
+msgstr "Gade"
+
+#: simple-membership/views/admin_member_form_common_part.php:38
+#: simple-membership/views/edit.php:36
+msgid "City"
+msgstr "By"
+
+#: simple-membership/views/admin_member_form_common_part.php:42
+#: simple-membership/views/edit.php:40
+msgid "State"
+msgstr "Stat"
+
+#: simple-membership/views/admin_member_form_common_part.php:46
+#: simple-membership/views/edit.php:44
+msgid "Zipcode"
+msgstr "Postnummer"
+
+#: simple-membership/views/admin_member_form_common_part.php:50
+#: simple-membership/views/edit.php:48
+msgid "Country"
+msgstr "Land"
+
+#: simple-membership/views/admin_member_form_common_part.php:54
+msgid "Company"
+msgstr "Virksomhed"
+
+#: simple-membership/views/admin_member_form_common_part.php:58
+msgid "Member Since"
+msgstr "Medlem siden"
+
+#: simple-membership/views/admin_payment_settings.php:33
+msgid "PayPal Integration Settings"
+msgstr "PayPal integrationsindstillinger"
+
+#: simple-membership/views/admin_payment_settings.php:36
+msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
+msgstr "Generer \"avancerede muligheder\" kode til din PayPal knap"
+
+#: simple-membership/views/admin_payment_settings.php:39
+msgid "Enter the Membership Level ID"
+msgstr "Indtast medlemskategori ID"
+
+#: simple-membership/views/admin_payment_settings.php:41
+msgid "Generate Code"
+msgstr "Generer kode"
+
+#: simple-membership/views/admin_tools_settings.php:9
+msgid "Generate a Registration Completion link"
+msgstr "Generer et registrering komplet link"
+
+#: simple-membership/views/admin_tools_settings.php:12
+msgid ""
+"You can manually generate a registration completion link here and give it to "
+"your customer if they have missed the email that was automatically sent out "
+"to them after the payment."
+msgstr ""
+"Du kan generere et registrering komplet link manuelt her og give det til dit "
+"medlem, hvis medlemmet ikke har emailen, som blev sendt automatisk "
+"umiddelbart efter betaling."
+
+#: simple-membership/views/admin_tools_settings.php:17
+msgid "Generate Registration Completion Link"
+msgstr "Generer registrering komplet link"
+
+#: simple-membership/views/admin_tools_settings.php:20
+msgid "OR"
+msgstr "ELLER"
+
+#: simple-membership/views/admin_tools_settings.php:21
+msgid "For All Pending Registrations"
+msgstr "For alle afventende registreringer"
+
+#: simple-membership/views/admin_tools_settings.php:24
+msgid "Registration Completion Links Will Appear Below:"
+msgstr "Registrering komplet links vil fremgå herunder:"
+
+#: simple-membership/views/admin_tools_settings.php:31
+msgid "Send Registration Reminder Email too"
+msgstr "Send også email med registreringspåmindelse"
+
+#: simple-membership/views/admin_tools_settings.php:34
+msgid "Submit"
+msgstr "Send"
+
+#: simple-membership/views/edit.php:58
+msgid "Update"
+msgstr "Opdater"
+
+#: simple-membership/views/forgot_password.php:5
+msgid "Email Address"
+msgstr "Email adresse"
+
+#: simple-membership/views/forgot_password.php:12
+msgid "Reset Password"
+msgstr "Opdater kodeord"
+
+#: simple-membership/views/loggedin.php:3
+msgid "Logged in as"
+msgstr "Logged ind som"
+
+#: simple-membership/views/loggedin.php:11
+msgid "Membership"
+msgstr "Medlemskab"
+
+#: simple-membership/views/loggedin.php:15
+msgid "Account Expiry"
+msgstr "Kontoudløb"
+
+#: simple-membership/views/loggedin.php:19
+msgid "Logout"
+msgstr "Log ud"
+
+#: simple-membership/views/login.php:18
+msgid "Remember Me"
+msgstr "Påmind mig"
+
+#: simple-membership/views/login.php:24
+msgid "Forgot Password"
+msgstr "Glemt kodeord"
diff --git a/languages/swpm-de_DE.mo b/languages/swpm-de_DE.mo
new file mode 100644 (file)
index 0000000..6b2e65f
Binary files /dev/null and b/languages/swpm-de_DE.mo differ
diff --git a/languages/swpm-de_DE.po b/languages/swpm-de_DE.po
new file mode 100644 (file)
index 0000000..d700414
--- /dev/null
@@ -0,0 +1,710 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: simple membership plugin depal\n"
+"POT-Creation-Date: 2014-08-28 19:28+1000\n"
+"PO-Revision-Date: 2014-10-10 09:44+0100\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.6.9\n"
+"X-Poedit-KeywordsList: __;_e\n"
+"X-Poedit-Basepath: .\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Language: en_US\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: classes/class.bAccessControl.php:23 classes/class.bAccessControl.php:40
+msgid "You are not allowed to view this content"
+msgstr "Sie haben keine Berechtigung diesen Inhalt zu sehen."
+
+#: classes/class.bAccessControl.php:26 classes/class.bAccessControl.php:43
+msgid "You need to login to view this content. "
+msgstr "Sie müssen Sich einloggen um den Inhalt lesen zu können."
+
+#: classes/class.bAdminRegistration.php:48
+#: classes/class.bFrontRegistration.php:64
+msgid "Registration Successful."
+msgstr "Registrierung erfolgreich"
+
+#: classes/class.bAdminRegistration.php:53
+#: classes/class.bAdminRegistration.php:73
+#: classes/class.bMembershipLevel.php:36 classes/class.bMembershipLevel.php:54
+msgid "Please correct the following:"
+msgstr "Bitte korrigieren Sie folgendes:"
+
+#: classes/class.bAjax.php:16 classes/class.bAjax.php:28
+msgid "Aready taken"
+msgstr "bereits verwendet"
+
+#: classes/class.bAjax.php:29
+msgid "Available"
+msgstr "verfügbar"
+
+#: classes/class.bAuth.php:48 classes/class.bFrontRegistration.php:179
+msgid "User Not Found."
+msgstr "Benutzer unbekannt"
+
+#: classes/class.bAuth.php:55
+msgid "Password Empty or Invalid."
+msgstr "kein oder ungültiges Passwort"
+
+#: classes/class.bAuth.php:79
+msgid "Account is inactive."
+msgstr "Account in inaktiv"
+
+#: classes/class.bAuth.php:89
+msgid "You are logged in as:"
+msgstr "eingeloggt als:"
+
+#: classes/class.bAuth.php:128
+msgid "Logged Out Successfully."
+msgstr "Sie haben Sich erfolgreich ausgeloggt"
+
+#: classes/class.bAuth.php:170
+msgid "Session Expired."
+msgstr "Sitzung abgelaufen"
+
+#: classes/class.bAuth.php:179
+msgid "Invalid User Name"
+msgstr "Ungültiger Benutzername"
+
+#: classes/class.bAuth.php:187
+msgid "Bad Cookie Hash"
+msgstr "Bad Cookie Hash"
+
+#: classes/class.bForm.php:26
+msgid ""
+"Wordpress account exists with given user name. But given email doesn't match."
+msgstr ""
+"Es existiert bereits ein Account mit den angegebenen Benutzernamen. Die E-"
+"Mail Adresse passt nicht zum Benutznamen"
+
+#: classes/class.bForm.php:31
+msgid ""
+"Wordpress account exists with given email. But given user name doesn't match."
+msgstr ""
+"Es existiert bereits ein Account mit der angegebenen E-Mail Adresse. Der "
+"Benutzername passt nicht zur E-Mail Adresse"
+
+#: classes/class.bForm.php:40
+msgid "User name is required"
+msgstr "Benutzername erforderlich"
+
+#: classes/class.bForm.php:49
+msgid "User name already exists."
+msgstr "Benutzername wird bereits verwendet"
+
+#: classes/class.bForm.php:72
+msgid "Password is required"
+msgstr "Passwort erforderlich"
+
+#: classes/class.bForm.php:79
+msgid "Password mismatch"
+msgstr "Passwörter stimmen nicht überein"
+
+#: classes/class.bForm.php:95
+msgid "Email is required"
+msgstr "E-Mail Adresse erforderlich"
+
+#: classes/class.bForm.php:99
+msgid "Email is invalid"
+msgstr "ungültige E-Mail Adresse"
+
+#: classes/class.bForm.php:112
+msgid "Email is already used."
+msgstr "E-Mail Adresse wird bereits verwendet"
+
+#: classes/class.bForm.php:178
+msgid "Member since field is invalid"
+msgstr "\"Mitglied seit\" Feld ist inkorrekt"
+
+#: classes/class.bForm.php:189
+msgid "Subscription starts field is invalid"
+msgstr "\"Mitgliedschaft beginnt am\" Feld ist inkorrekt"
+
+#: classes/class.bForm.php:199
+msgid "Gender field is invalid"
+msgstr "Feld \"Geschlecht\" ist inkorrekt"
+
+#: classes/class.bForm.php:210
+msgid "Account state field is invalid"
+msgstr "Accountstatus Feld ist ungültig"
+
+#: classes/class.bFrontRegistration.php:64 classes/class.bSettings.php:326
+msgid "Please"
+msgstr "Bitte"
+
+#: classes/class.bFrontRegistration.php:64 classes/class.bSettings.php:326
+#: views/login.php:21
+msgid "Login"
+msgstr "Login"
+
+#: classes/class.bFrontRegistration.php:79
+#: classes/class.bFrontRegistration.php:158
+msgid "Please correct the following"
+msgstr "Bitte korrigieren Sie folgendes"
+
+#: classes/class.bFrontRegistration.php:92
+msgid "Membership Level Couldn't be found."
+msgstr "Mitgliedschaftslevel konnte nicht gefunden werden"
+
+#: classes/class.bFrontRegistration.php:168
+msgid "Email Address Not Valid."
+msgstr "Ungültige E-Mail Adresse"
+
+#: classes/class.bFrontRegistration.php:199
+msgid "New password has been sent to your email address."
+msgstr "Ein neues Passwort wurde an Ihre E-Mail Adresse versandt"
+
+#: classes/class.bLevelForm.php:31
+msgid "Subscriptoin duration must be > 0."
+msgstr "Mitgliedschaft muss länger als 0 sein"
+
+#: classes/class.bMembers.php:7
+msgid "Member"
+msgstr "Mitglied"
+
+#: classes/class.bMembers.php:8 classes/class.simple-wp-membership.php:467
+msgid "Members"
+msgstr "Mitglieder"
+
+#: classes/class.bMembers.php:16 classes/class.bMembershipLevels.php:16
+msgid "ID"
+msgstr "ID"
+
+#: classes/class.bMembers.php:17 views/add.php:5 views/edit.php:4
+#: views/login.php:5
+msgid "User Name"
+msgstr "Benutzername"
+
+#: classes/class.bMembers.php:18 views/add.php:21
+#: views/admin_member_form_common_part.php:2 views/edit.php:20
+msgid "First Name"
+msgstr "Vorname"
+
+#: classes/class.bMembers.php:19 views/add.php:25
+#: views/admin_member_form_common_part.php:6 views/edit.php:24
+msgid "Last Name"
+msgstr "Nachname"
+
+#: classes/class.bMembers.php:20 views/add.php:9 views/edit.php:8
+msgid "Email"
+msgstr "E-Mail Adresse"
+
+#: classes/class.bMembers.php:21 classes/class.bMembershipLevels.php:8
+#: classes/class.bMembershipLevels.php:17 views/add.php:64
+#: views/admin_member_form_common_part.php:55 views/edit.php:52
+msgid "Membership Level"
+msgstr "Mitgliedschaft"
+
+#: classes/class.bMembers.php:22 views/admin_member_form_common_part.php:78
+msgid "Subscription Starts"
+msgstr "Mitgliedschaft beginnt"
+
+#: classes/class.bMembers.php:23
+msgid "Account State"
+msgstr "Account Status"
+
+#: classes/class.bMembers.php:35 classes/class.bMembershipLevels.php:29
+msgid "Delete"
+msgstr "Löschen"
+
+#: classes/class.bMembers.php:100
+msgid "No Member found."
+msgstr "Kein Benutzer gefunden."
+
+#: classes/class.bMembershipLevel.php:31
+msgid "Membership Level Creation Successful."
+msgstr "Mitgliedschaftslevel erfolgreich hergestellt"
+
+#: classes/class.bMembershipLevel.php:50
+msgid "Updated Successfully."
+msgstr "Update erfolgreich"
+
+#: classes/class.bMembershipLevels.php:9
+#: classes/class.simple-wp-membership.php:469
+msgid "Membership Levels"
+msgstr "Migliedschaftslevels"
+
+#: classes/class.bMembershipLevels.php:18
+msgid "Role"
+msgstr "Rolle"
+
+#: classes/class.bMembershipLevels.php:19
+msgid "Subscription Valid For"
+msgstr "Mitgliedschaft gültig für"
+
+#: classes/class.bSettings.php:28
+msgid "Plugin Documentation"
+msgstr "Plugin Dokumentation"
+
+#: classes/class.bSettings.php:30
+msgid "General Settings"
+msgstr "Allgemeine Einstellungen"
+
+#: classes/class.bSettings.php:32
+msgid "Enable Free Membership"
+msgstr "Kostenlose Mitgliedschaft freischalten"
+
+#: classes/class.bSettings.php:35
+msgid "Enable/disable registration for free membership level"
+msgstr "Registrieren für kostenlose Mitgliedschaft aktivieren/deaktivieren"
+
+#: classes/class.bSettings.php:36
+msgid "Free Membership Level ID"
+msgstr "Kostenlose Mitgliedschaft "
+
+#: classes/class.bSettings.php:39
+msgid "Assign free membership level ID"
+msgstr "Kostenlose Mitgliedschafts-ID zuweisen"
+
+#: classes/class.bSettings.php:40
+msgid "Hide Adminbar"
+msgstr "Adminbar verstecken"
+
+#: classes/class.bSettings.php:43
+msgid ""
+"WordPress shows an admin toolbar to the logged in users of the site. Check "
+"this box if you want to hide that admin toolbar in the fronend of your site."
+msgstr ""
+"Füe eingeloggte User ist in WordPress die Admin Toolbar standardmäßig "
+"sichtbar. Setzen Sie ein Häkchen um die Admin Toolbar auszublenden"
+
+#: classes/class.bSettings.php:45
+msgid "Pages Settings"
+msgstr "Seiteneinstellungen"
+
+#: classes/class.bSettings.php:47
+msgid "Login Page URL"
+msgstr "Login Seite URL"
+
+#: classes/class.bSettings.php:51
+msgid "Registration Page URL"
+msgstr "Registrierungsseite URL"
+
+#: classes/class.bSettings.php:55
+msgid "Join Us Page URL"
+msgstr "Mit"
+
+#: classes/class.bSettings.php:59
+msgid "Edit Profile Page URL"
+msgstr "Profilseite URL"
+
+#: classes/class.bSettings.php:63
+msgid "Password Reset Page URL"
+msgstr "Passwort zurücksetzen URL"
+
+#: classes/class.bSettings.php:68
+msgid "Test & Debug Settings"
+msgstr "Test & Debug Einstellungen"
+
+#: classes/class.bSettings.php:74
+msgid "Enable Sandbox Testing"
+msgstr "Sandkasten Tests aktivieren"
+
+#: classes/class.bSettings.php:77
+msgid "Enable this option if you want to do sandbox payment testing."
+msgstr "Aktivieren Sie diese Option um die Sandkasten-Bezahlmethode zu testen"
+
+#: classes/class.bSettings.php:90
+msgid "Email Misc. Settings"
+msgstr "Diverse E-Mail Einstellungen"
+
+#: classes/class.bSettings.php:92
+msgid "From Email Address"
+msgstr "\"von\" E-Mail Adresse"
+
+#: classes/class.bSettings.php:97
+msgid "Email Settings (Prompt to Complete Registration )"
+msgstr "E-Mail Einstellungen (vor vollständiger Registrierung)"
+
+#: classes/class.bSettings.php:99 classes/class.bSettings.php:110
+#: classes/class.bSettings.php:129
+msgid "Email Subject"
+msgstr "E-Mail Betreff"
+
+#: classes/class.bSettings.php:103 classes/class.bSettings.php:114
+#: classes/class.bSettings.php:133
+msgid "Email Body"
+msgstr "E-Mail Text"
+
+#: classes/class.bSettings.php:108
+msgid "Email Settings (Registration Complete)"
+msgstr "E-Mail Einstellungen (Registrierung abgeschlossen)"
+
+#: classes/class.bSettings.php:118
+msgid "Send Notification To Admin"
+msgstr "Administrator benachrichtigen"
+
+#: classes/class.bSettings.php:122
+msgid "Send Email to Member When Added via Admin Dashboard"
+msgstr ""
+"Mitglied mit E-Mail benachrichtigen wenn er vom Administrator hinzugefügt "
+"wird"
+
+#: classes/class.bSettings.php:127
+msgid " Email Settings (Account Upgrade Notification)"
+msgstr "E-Mail Einstellungen (Account Upgrade Benachrichtigung)"
+
+#: classes/class.bSettings.php:326
+msgid "Not a Member?"
+msgstr "Kein Zugang?"
+
+#: classes/class.bSettings.php:326 views/login.php:30
+msgid "Join Us"
+msgstr "Mitgliedschaftsseite URL"
+
+#: classes/class.bUtils.php:32 views/admin_member_form_common_part.php:66
+msgid "Active"
+msgstr "Aktiv"
+
+#: classes/class.bUtils.php:33 views/admin_member_form_common_part.php:67
+msgid "Inactive"
+msgstr "Inaktiv"
+
+#: classes/class.bUtils.php:34 views/admin_member_form_common_part.php:68
+msgid "Pending"
+msgstr "ausstehend"
+
+#: classes/class.bUtils.php:35 views/admin_member_form_common_part.php:69
+msgid "Expired"
+msgstr "abgelaufen"
+
+#: classes/class.bUtils.php:225
+msgid "Never"
+msgstr "nie"
+
+#: classes/class.miscUtils.php:51
+msgid "Registration"
+msgstr "Registrierung"
+
+#: classes/class.miscUtils.php:74
+msgid "Member Login"
+msgstr "Mitglieder Login"
+
+#: classes/class.miscUtils.php:97
+msgid "Profile"
+msgstr "Profil"
+
+#: classes/class.miscUtils.php:120
+msgid "Password Reset"
+msgstr "Passwort zurücksetzen"
+
+#: classes/class.simple-wp-membership.php:178
+msgid "You are not logged in."
+msgstr "Sie sind nicht eingeloggt"
+
+#: classes/class.simple-wp-membership.php:209
+msgid "Simple WP Membership Protection"
+msgstr "Einfacher WP Mitgliedschaftsschutz"
+
+#: classes/class.simple-wp-membership.php:222
+msgid "Simple Membership Protection options"
+msgstr "Schutz-Einstellungen für Simple Membership"
+
+#: classes/class.simple-wp-membership.php:238
+msgid "Do you want to protect this content?"
+msgstr "Möchten Sie diesen Inhalt schützen?"
+
+#: classes/class.simple-wp-membership.php:243
+msgid "Select the membership level that can access this content:"
+msgstr "Migliedschaftslevel auswählen mit Zugang zu diesem Inhalt:"
+
+#: classes/class.simple-wp-membership.php:375
+msgid "Display SWPM Login."
+msgstr "Zeige SWPM Login"
+
+#: classes/class.simple-wp-membership.php:377
+msgid "SWPM Login"
+msgstr "SWPM Login"
+
+#: classes/class.simple-wp-membership.php:464
+msgid "WP Membership"
+msgstr "WP Mitgliedschaft"
+
+#: classes/class.simple-wp-membership.php:471
+msgid "Settings"
+msgstr "Einstellungen"
+
+#: views/add.php:13 views/admin_member_form_common_part.php:45
+#: views/edit.php:12 views/login.php:11
+msgid "Password"
+msgstr "Passwort"
+
+#: views/add.php:17 views/edit.php:16
+msgid "Repeat Password"
+msgstr "Passwort wiederholen"
+
+#: views/add.php:29 views/admin_member_form_common_part.php:10
+msgid "Gender"
+msgstr "Geschlecht"
+
+#: views/add.php:36 views/admin_member_form_common_part.php:17
+#: views/edit.php:28
+msgid "Phone"
+msgstr "Telefon"
+
+#: views/add.php:40 views/admin_member_form_common_part.php:21
+#: views/edit.php:32
+msgid "Street"
+msgstr "Straße"
+
+#: views/add.php:44 views/admin_member_form_common_part.php:25
+#: views/edit.php:36
+msgid "City"
+msgstr "Stadt"
+
+#: views/add.php:48 views/admin_member_form_common_part.php:29
+#: views/edit.php:40
+msgid "State"
+msgstr "Bundesland"
+
+#: views/add.php:52 views/admin_member_form_common_part.php:33
+#: views/edit.php:44
+msgid "Zipcode"
+msgstr "PLZ"
+
+#: views/add.php:56 views/admin_member_form_common_part.php:37
+#: views/edit.php:48
+msgid "Country"
+msgstr "Land"
+
+#: views/add.php:60 views/admin_member_form_common_part.php:41
+msgid "Company"
+msgstr "Firma"
+
+#: views/add.php:71
+msgid "Register"
+msgstr "Registrieren"
+
+#: views/admin_add.php:6
+msgid "Add Member"
+msgstr "Mitglied hinzufügen"
+
+#: views/admin_add.php:7
+msgid "Create a brand new user and add it to this site."
+msgstr "Einen neuen Benutzer erstellen und ihn zu dieser Seite hinzufügen"
+
+#: views/admin_add.php:11
+msgid "User name"
+msgstr "Benutzername"
+
+#: views/admin_add.php:11 views/admin_add.php:15 views/admin_add_level.php:11
+#: views/admin_add_level.php:15 views/admin_add_level.php:19
+#: views/admin_edit.php:9 views/admin_edit.php:13
+#: views/admin_edit_level.php:10 views/admin_edit_level.php:14
+#: views/admin_edit_level.php:18
+msgid "(required)"
+msgstr "(Pflichtfeld)"
+
+#: views/admin_add.php:15 views/admin_edit.php:13
+msgid "E-mail"
+msgstr "E-Mail"
+
+#: views/admin_add.php:19
+msgid "Add New Member "
+msgstr "Einen neuen Mitglied hinzufügen"
+
+#: views/admin_add_level.php:6
+msgid "Create new membership level."
+msgstr "Neues Mitgliedschaftslevel erstellen"
+
+#: views/admin_add_level.php:11 views/admin_edit_level.php:10
+msgid "Membership Level Name"
+msgstr "Name des Mitgliedschaftslevels"
+
+#: views/admin_add_level.php:15 views/admin_edit_level.php:14
+msgid "Default WordPress Role"
+msgstr "Standard WordPress Rolle"
+
+#: views/admin_add_level.php:19 views/admin_edit_level.php:18
+msgid "Subscription Duration"
+msgstr "Dauer der Mitgliedschaft"
+
+#: views/admin_add_level.php:26 views/admin_edit_level.php:27
+msgid "No Expiry"
+msgstr "Kein Ablauf"
+
+#: views/admin_add_level.php:55
+msgid "Add New Membership Level "
+msgstr "Neues Mitgliedschaftslevel hinzufügen"
+
+#: views/admin_edit.php:5
+msgid "Edit Member"
+msgstr "Mitglied ändern"
+
+#: views/admin_edit.php:6
+msgid "Edit existing member details."
+msgstr "Benutzer Details ändern"
+
+#: views/admin_edit.php:9
+msgid "Username"
+msgstr "Benutzername"
+
+#: views/admin_edit.php:18
+msgid "Edit User "
+msgstr "Benutzer ändern"
+
+#: views/admin_edit_level.php:5
+msgid "Edit membership level"
+msgstr "Mitgliedschaftslevel ändern"
+
+#: views/admin_edit_level.php:6
+msgid "Edit membership level."
+msgstr "Mitgliedschaftslevel ändern."
+
+#: views/admin_edit_level.php:54
+msgid "Edit Membership Level "
+msgstr "Mitgliedschaftslevel ändern"
+
+#: views/admin_members.php:2
+msgid "Simple WP Membership::Members"
+msgstr "Simple WP Membership::Members"
+
+#: views/admin_members.php:3 views/admin_members.php:19
+#: views/admin_membership_levels.php:21
+msgid "Add New"
+msgstr "Neu"
+
+#: views/admin_members.php:9 views/admin_membership_levels.php:11
+msgid "search"
+msgstr "suchen"
+
+#: views/admin_membership_levels.php:3
+msgid "Simple WP Membership::Membership Levels"
+msgstr "Simple WP Membership::Mitgliedschaftslevels"
+
+#: views/admin_membership_level_menu.php:2
+msgid "Membership level"
+msgstr "Mitgliedschaftslevel"
+
+#: views/admin_membership_level_menu.php:3
+msgid "Manage Content Production"
+msgstr "Content Herstellung steuern"
+
+#: views/admin_membership_manage.php:17
+msgid "Example Content Protection Settings"
+msgstr "Beispiel Inhaltsschutz Einstellungen"
+
+#: views/admin_member_form_common_part.php:45
+msgid "(twice, required)"
+msgstr "(zweimal, erforderlich)"
+
+#: views/admin_member_form_common_part.php:50
+msgid "Strength indicator"
+msgstr "Stärke"
+
+#: views/admin_member_form_common_part.php:51
+msgid ""
+"Hint: The password should be at least seven characters long. To make it "
+"stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
+"$ % ^ &amp; )."
+msgstr ""
+"Hinweis: Das Passwort muss mindestens 7 Zeichen lang sein. Abwechselnde Groß-"
+"und Kleinschreibung, Nummern und Symbole erhöhen die Sicherheit"
+
+#: views/admin_member_form_common_part.php:64 views/loggedin.php:7
+#: views/login_widget_logged.php:6
+msgid "Account Status"
+msgstr "Account Status"
+
+#: views/admin_member_form_common_part.php:74
+msgid "Member Since"
+msgstr "Mitglied seit"
+
+#: views/admin_payment_settings.php:2 views/admin_settings.php:2
+#: views/admin_tools_settings.php:2
+msgid "Simple WP Membership::Settings"
+msgstr "Simple WP Membership Einstellungen"
+
+#: views/admin_payment_settings.php:33
+msgid "PayPal Integration Settings"
+msgstr "Paypal Integrationseinstellungen"
+
+#: views/admin_payment_settings.php:36
+msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
+msgstr ""
+"Generiere den \"fortgeschrittene Variablen\" Code für den Paypal Button"
+
+#: views/admin_payment_settings.php:39
+msgid "Enter the Membership Level ID"
+msgstr "Mitgliedschaftslevel ID eingeben"
+
+#: views/admin_payment_settings.php:41
+msgid "Generate Code"
+msgstr "Code generieren"
+
+#: views/admin_tools_settings.php:9
+msgid "Generate a Registration Completion link"
+msgstr "Einen \"Registrierung abgeschlossen\" Link generieren"
+
+#: views/admin_tools_settings.php:12
+msgid ""
+"You can manually generate a registration completion link here and give it to "
+"your customer if they have missed the email that was automatically sent out "
+"to them after the payment."
+msgstr ""
+"Sie können hier manuell einen \"Registrierung abgeschlossen\" Link "
+"generieren falls Ihr Kunde die automatische E-Mail verlegt hat."
+
+#: views/admin_tools_settings.php:17
+msgid "Generate Registration Completion Link"
+msgstr "\"Registrierung Abgeschlossen\" Link generieren"
+
+#: views/admin_tools_settings.php:20
+msgid "OR"
+msgstr "ODER"
+
+#: views/admin_tools_settings.php:21
+msgid "For All Pending Registrations"
+msgstr "Für alle ausstehenden Registrierungen"
+
+#: views/admin_tools_settings.php:24
+msgid "Registration Completion Links Will Appear Below:"
+msgstr "Registrierung Abgeschlossen Links werden auftauen unter:"
+
+#: views/admin_tools_settings.php:31
+msgid "Send Registration Reminder Email too"
+msgstr "Registrierungserinnerung per E-Mail verschicken"
+
+#: views/admin_tools_settings.php:34
+msgid "Submit"
+msgstr "abschicken"
+
+#: views/edit.php:58
+msgid "Update"
+msgstr "Aktualisieren"
+
+#: views/forgot_password.php:5
+msgid "Email Address"
+msgstr "E-Mail Adresse"
+
+#: views/forgot_password.php:12
+msgid "Reset Password"
+msgstr "Passwort zurücksetzen"
+
+#: views/loggedin.php:3 views/login_widget_logged.php:3
+msgid "Logged in as"
+msgstr "Eingeloggt als"
+
+#: views/loggedin.php:11 views/login_widget_logged.php:9
+msgid "Membership"
+msgstr "Mitgliedschaft"
+
+#: views/loggedin.php:15 views/login_widget_logged.php:12
+msgid "Account Expiry"
+msgstr "Account verfällt am"
+
+#: views/loggedin.php:19 views/login_widget_logged.php:16
+msgid "Logout"
+msgstr "ausloggen"
+
+#: views/login.php:17
+msgid "Remember Me"
+msgstr "Anmeldedaten speichern"
+
+#: views/login.php:26
+msgid "Forgot Password"
+msgstr "Passwort vergessen"
diff --git a/languages/swpm-es_ES.mo b/languages/swpm-es_ES.mo
new file mode 100644 (file)
index 0000000..03aedfb
Binary files /dev/null and b/languages/swpm-es_ES.mo differ
diff --git a/languages/swpm-es_ES.po b/languages/swpm-es_ES.po
new file mode 100644 (file)
index 0000000..50dae07
--- /dev/null
@@ -0,0 +1,971 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Simple Membership\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-01-27 14:50+1000\n"
+"PO-Revision-Date: 2015-02-02 16:38-0400\n"
+"Last-Translator: e-rgonomy.com <info@e-rgonomy.com>\n"
+"Language-Team: e-rgonomy.com <info@e-rgonomy.com>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 1.7.4\n"
+"X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;"
+"__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;"
+"_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;"
+"esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;"
+"esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
+"X-Poedit-Basepath: .\n"
+"X-Loco-Target-Locale: es_ES\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: simple-membership/classes/class.bAccessControl.php:21
+#: simple-membership/classes/class.bAccessControl.php:28
+#: simple-membership/classes/class.bAccessControl.php:48
+msgid "You need to login to view this content. "
+msgstr "Necesita identificarse para ver este contenido"
+
+#: simple-membership/classes/class.bAccessControl.php:35
+#: simple-membership/classes/class.bAccessControl.php:39
+#: simple-membership/classes/class.bAccessControl.php:54
+msgid "You are not allowed to view this content"
+msgstr "Usted no tiene permiso para ver este contenido"
+
+#: simple-membership/classes/class.bAccessControl.php:72
+msgid "You do no have permission to view rest of the content"
+msgstr "No dispone de los permisos para ver el resto del contenido."
+
+#: simple-membership/classes/class.bAccessControl.php:76
+#: simple-membership/classes/class.bAccessControl.php:94
+msgid "You need to login to view the rest of the content. "
+msgstr "Necesita identificarse antes de ver el resto del contenido."
+
+#: simple-membership/classes/class.bAdminRegistration.php:49
+msgid "Registration Successful."
+msgstr "Registro completado"
+
+#: simple-membership/classes/class.bAdminRegistration.php:54
+#: simple-membership/classes/class.bAdminRegistration.php:89
+#: simple-membership/classes/class.bMembershipLevel.php:42
+#: simple-membership/classes/class.bMembershipLevel.php:60
+msgid "Please correct the following:"
+msgstr "Por favor, corrija lo siguiente:"
+
+#: simple-membership/classes/class.bAjax.php:17
+#: simple-membership/classes/class.bAjax.php:28
+msgid "Aready taken"
+msgstr "No disponible"
+
+#: simple-membership/classes/class.bAjax.php:29
+msgid "Available"
+msgstr "Disponible"
+
+#: simple-membership/classes/class.bAuth.php:46
+#: simple-membership/classes/class.bFrontRegistration.php:173
+msgid "User Not Found."
+msgstr "Usuario no encontrado."
+
+#: simple-membership/classes/class.bAuth.php:53
+msgid "Password Empty or Invalid."
+msgstr "Contraseña vacía o no válida."
+
+#: simple-membership/classes/class.bAuth.php:76
+msgid "Account is inactive."
+msgstr "Esta cuenta está inactiva."
+
+#: simple-membership/classes/class.bAuth.php:93
+msgid "Account has expired."
+msgstr "Su cuenta ha expirado."
+
+#: simple-membership/classes/class.bAuth.php:100
+msgid "You are logged in as:"
+msgstr "Identificado como:"
+
+#: simple-membership/classes/class.bAuth.php:139
+msgid "Logged Out Successfully."
+msgstr "Se ha cerrado la sesión correctamente."
+
+#: simple-membership/classes/class.bAuth.php:186
+msgid "Session Expired."
+msgstr "Sesión finalizada."
+
+#: simple-membership/classes/class.bAuth.php:194
+msgid "Invalid User Name"
+msgstr "Nombre de usuario no válido"
+
+#: simple-membership/classes/class.bAuth.php:202
+msgid "Sorry! Something went wrong"
+msgstr "Algo va mal."
+
+#: simple-membership/classes/class.bCategoryList.php:15
+#: simple-membership/classes/class.bMembers.php:21
+#: simple-membership/classes/class.bMembershipLevels.php:8
+#: simple-membership/classes/class.bMembershipLevels.php:17
+#: simple-membership/views/add.php:30
+#: simple-membership/views/admin_member_form_common_part.php:2
+#: simple-membership/views/edit.php:52
+msgid "Membership Level"
+msgstr "Nivel de membresía"
+
+#: simple-membership/classes/class.bCategoryList.php:16
+#: simple-membership/classes/class.bMembershipLevels.php:9
+#: simple-membership/classes/class.simple-wp-membership.php:464
+msgid "Membership Levels"
+msgstr "Niveles de membresía."
+
+#: simple-membership/classes/class.bCategoryList.php:29
+#: simple-membership/classes/class.bMembers.php:16
+#: simple-membership/classes/class.bMembershipLevels.php:16
+msgid "ID"
+msgstr "ID"
+
+#: simple-membership/classes/class.bCategoryList.php:30
+msgid "Name"
+msgstr "Nombre"
+
+#: simple-membership/classes/class.bCategoryList.php:31
+msgid "Description"
+msgstr "Descripción"
+
+#: simple-membership/classes/class.bCategoryList.php:32
+msgid "Count"
+msgstr "Contador"
+
+#: simple-membership/classes/class.bCategoryList.php:63
+msgid "Updated! "
+msgstr "¡Actualizado!"
+
+#: simple-membership/classes/class.bForm.php:26
+msgid ""
+"Wordpress account exists with given user name. But given email doesn't match."
+msgstr ""
+"Ya existe una cuenta con este nombre de usuario, pero el correo electrónico "
+"proporcionado no coincide."
+
+#: simple-membership/classes/class.bForm.php:31
+msgid ""
+"Wordpress account exists with given email. But given user name doesn't match."
+msgstr ""
+"Existe una cuenta con el mail proporcionado, pero el nombre usuario no "
+"coincide."
+
+#: simple-membership/classes/class.bForm.php:40
+msgid "User name is required"
+msgstr "Debe de escribir un nombre de usuario."
+
+#: simple-membership/classes/class.bForm.php:44
+msgid "User name contains invalid character"
+msgstr "El nombre de usuario contiene carácteres no válidos"
+
+#: simple-membership/classes/class.bForm.php:52
+msgid "User name already exists."
+msgstr "El nombre de usuario ya está en uso."
+
+#: simple-membership/classes/class.bForm.php:75
+msgid "Password is required"
+msgstr "Debe escribir una contraseña."
+
+#: simple-membership/classes/class.bForm.php:82
+msgid "Password mismatch"
+msgstr "Contraseña incorrecta"
+
+#: simple-membership/classes/class.bForm.php:98
+msgid "Email is required"
+msgstr "Debe de proporcionar un email o correo electrónico"
+
+#: simple-membership/classes/class.bForm.php:102
+msgid "Email is invalid"
+msgstr "El correo electrónico proporcionado no es válido"
+
+#: simple-membership/classes/class.bForm.php:118
+msgid "Email is already used."
+msgstr "El mail o correo electrónico proporcionado ya está en uso."
+
+#: simple-membership/classes/class.bForm.php:184
+msgid "Member since field is invalid"
+msgstr "La fecha introducida en \"Miembro desde\" no es válida (dd/mm/aaaa)"
+
+#: simple-membership/classes/class.bForm.php:195
+msgid "Access starts field is invalid"
+msgstr "La fecha de comienzo no es válida"
+
+#: simple-membership/classes/class.bForm.php:205
+msgid "Gender field is invalid"
+msgstr "El valor introducido en el campo \"Genero\" no es válido"
+
+#: simple-membership/classes/class.bForm.php:216
+msgid "Account state field is invalid"
+msgstr "El valor introducido en el campo \"Estado de la cuenta\" no es válido"
+
+#: simple-membership/classes/class.bForm.php:223
+msgid "Invalid membership level"
+msgstr "Nivel de membresía no válido."
+
+#: simple-membership/classes/class.bFrontRegistration.php:61
+msgid "Registration Successful. "
+msgstr "Registro correcto."
+
+#: simple-membership/classes/class.bFrontRegistration.php:61
+#: simple-membership/classes/class.bSettings.php:367
+msgid "Please"
+msgstr "Por favor"
+
+#: simple-membership/classes/class.bFrontRegistration.php:61
+#: simple-membership/classes/class.bSettings.php:367
+#: simple-membership/views/login.php:21
+msgid "Login"
+msgstr "Identificarse"
+
+#: simple-membership/classes/class.bFrontRegistration.php:72
+#: simple-membership/classes/class.bFrontRegistration.php:152
+msgid "Please correct the following"
+msgstr "Por favor, corrija lo siguiente"
+
+#: simple-membership/classes/class.bFrontRegistration.php:106
+msgid "Membership Level Couldn't be found."
+msgstr "El nivel de membresía no ha sido encontrado."
+
+#: simple-membership/classes/class.bFrontRegistration.php:162
+msgid "Email Address Not Valid."
+msgstr "El email o correo electrónico proporcionado no es válido."
+
+#: simple-membership/classes/class.bFrontRegistration.php:193
+msgid "New password has been sent to your email address."
+msgstr "La nueva contraseña ha sido enviada a su email o correo electrónico."
+
+#: simple-membership/classes/class.bLevelForm.php:47
+msgid "Date format is not valid."
+msgstr "El formato de fecha no es válido."
+
+#: simple-membership/classes/class.bLevelForm.php:54
+msgid "Access duration must be > 0."
+msgstr "La duración del acceso debe ser mayor a 0."
+
+#: simple-membership/classes/class.bMembers.php:7
+msgid "Member"
+msgstr "Miembro"
+
+#: simple-membership/classes/class.bMembers.php:8
+#: simple-membership/classes/class.simple-wp-membership.php:462
+msgid "Members"
+msgstr "Miembros"
+
+#: simple-membership/classes/class.bMembers.php:17
+#: simple-membership/views/add.php:6 simple-membership/views/edit.php:4
+msgid "User Name"
+msgstr "Nombre de usuario"
+
+#: simple-membership/classes/class.bMembers.php:18
+#: simple-membership/views/add.php:22
+#: simple-membership/views/admin_member_form_common_part.php:15
+#: simple-membership/views/edit.php:20
+msgid "First Name"
+msgstr "Nombre"
+
+#: simple-membership/classes/class.bMembers.php:19
+#: simple-membership/views/add.php:26
+#: simple-membership/views/admin_member_form_common_part.php:19
+#: simple-membership/views/edit.php:24
+msgid "Last Name"
+msgstr "Apellidos"
+
+#: simple-membership/classes/class.bMembers.php:20
+#: simple-membership/views/add.php:10 simple-membership/views/edit.php:8
+msgid "Email"
+msgstr "Email"
+
+#: simple-membership/classes/class.bMembers.php:22
+#: simple-membership/views/admin_member_form_common_part.php:11
+msgid "Access Starts"
+msgstr "El acceso comienza"
+
+#: simple-membership/classes/class.bMembers.php:23
+msgid "Account State"
+msgstr "Estado de la cuenta"
+
+#: simple-membership/classes/class.bMembers.php:35
+#: simple-membership/classes/class.bMembershipLevels.php:29
+msgid "Delete"
+msgstr "Eliminar"
+
+#: simple-membership/classes/class.bMembers.php:101
+msgid "No Member found."
+msgstr "No se han encontrado miembros."
+
+#: simple-membership/classes/class.bMembershipLevel.php:37
+msgid "Membership Level Creation Successful."
+msgstr "Tipo de miembros creado con éxito."
+
+#: simple-membership/classes/class.bMembershipLevel.php:56
+msgid "Updated Successfully."
+msgstr "Actualizado con éxito."
+
+#: simple-membership/classes/class.bMembershipLevels.php:18
+msgid "Role"
+msgstr "Rol"
+
+#: simple-membership/classes/class.bMembershipLevels.php:19
+msgid "Access Valid For/Until"
+msgstr "Acceso válido para/hasta"
+
+#: simple-membership/classes/class.bSettings.php:30
+msgid "Plugin Documentation"
+msgstr "Documentación del Plugin"
+
+#: simple-membership/classes/class.bSettings.php:32
+msgid "General Settings"
+msgstr "Ajustes Generales"
+
+#: simple-membership/classes/class.bSettings.php:34
+msgid "Enable Free Membership"
+msgstr "Habilitar nivel gratuito"
+
+#: simple-membership/classes/class.bSettings.php:37
+msgid "Enable/disable registration for free membership level"
+msgstr "Permitir/Denegar registro para el nivel de miembros gratuitos"
+
+#: simple-membership/classes/class.bSettings.php:38
+msgid "Free Membership Level ID"
+msgstr "ID Categoría de miembros gratuitos"
+
+#: simple-membership/classes/class.bSettings.php:41
+msgid "Assign free membership level ID"
+msgstr "Asignar nivel ID a los miembros gratuitos"
+
+#: simple-membership/classes/class.bSettings.php:42
+msgid "Enable More Tag Protection"
+msgstr "Activar más protección de etiquetas"
+
+#: simple-membership/classes/class.bSettings.php:45
+msgid ""
+"Enables or disables \"more\" tag protection in the posts and pages. Anything "
+"after the More tag is protected. Anything before the more tag is teaser "
+"content."
+msgstr ""
+"Activar o desactivar más protección en las entradas y páginas. Todo lo que "
+"se incluya bajo el tag \"MÁS\" es restringido, el resto es accesible a todos."
+
+#: simple-membership/classes/class.bSettings.php:46
+msgid "Hide Adminbar"
+msgstr "Esconder Barra superior de inicio de sesión"
+
+#: simple-membership/classes/class.bSettings.php:49
+msgid ""
+"WordPress shows an admin toolbar to the logged in users of the site. Check "
+"this box if you want to hide that admin toolbar in the fronend of your site."
+msgstr ""
+"WordPress muestra la barra de herramientas para iniciado sesión. Marcar esta "
+"casilla si desea ocultar esta barra."
+
+#: simple-membership/classes/class.bSettings.php:51
+msgid "Default Account Status"
+msgstr "Estado de lal cuenta por defecto"
+
+#: simple-membership/classes/class.bSettings.php:56
+msgid ""
+"Select the default account status for newly registered users. If you want to "
+"manually approve the members then you can set the status to \"Pending\"."
+msgstr ""
+"Seleccionar una cuenta por defecto para nuevos registros. Si desea aprobar "
+"manualmente los miembros, establezca el estado a \"Pendiente\"."
+
+#: simple-membership/classes/class.bSettings.php:62
+msgid "Pages Settings"
+msgstr "Ajustes de las páguinas"
+
+#: simple-membership/classes/class.bSettings.php:64
+msgid "Login Page URL"
+msgstr "URL Página de Inicio de sesión"
+
+#: simple-membership/classes/class.bSettings.php:68
+msgid "Registration Page URL"
+msgstr "URL Página de registro"
+
+#: simple-membership/classes/class.bSettings.php:72
+msgid "Join Us Page URL"
+msgstr "URL Página de \"Unete a nosotros\""
+
+#: simple-membership/classes/class.bSettings.php:76
+msgid "Edit Profile Page URL"
+msgstr "URL Página de Editar Perfil"
+
+#: simple-membership/classes/class.bSettings.php:80
+msgid "Password Reset Page URL"
+msgstr "URL Página de Restablecer contraseña"
+
+#: simple-membership/classes/class.bSettings.php:85
+msgid "Test & Debug Settings"
+msgstr "Ajustes de Test & Debug"
+
+#: simple-membership/classes/class.bSettings.php:91
+msgid "Enable Sandbox Testing"
+msgstr "Permitir Test Sandbox"
+
+#: simple-membership/classes/class.bSettings.php:94
+msgid "Enable this option if you want to do sandbox payment testing."
+msgstr "Permitir esta opción si quiere testear pagos Sandbox"
+
+#: simple-membership/classes/class.bSettings.php:104
+msgid "Email Misc. Settings"
+msgstr "Ajustes Email Misc."
+
+#: simple-membership/classes/class.bSettings.php:106
+msgid "From Email Address"
+msgstr "Correo electrónico del remitente"
+
+#: simple-membership/classes/class.bSettings.php:111
+msgid "Email Settings (Prompt to Complete Registration )"
+msgstr "Ajustes de Mail (solicitud para completar el registro)"
+
+#: simple-membership/classes/class.bSettings.php:113
+#: simple-membership/classes/class.bSettings.php:124
+#: simple-membership/classes/class.bSettings.php:143
+msgid "Email Subject"
+msgstr "Asunto del mensaje"
+
+#: simple-membership/classes/class.bSettings.php:117
+#: simple-membership/classes/class.bSettings.php:128
+#: simple-membership/classes/class.bSettings.php:147
+msgid "Email Body"
+msgstr "Cuerpo del mensaje"
+
+#: simple-membership/classes/class.bSettings.php:122
+msgid "Email Settings (Registration Complete)"
+msgstr "Ajustes Mail (Registro Completado)"
+
+#: simple-membership/classes/class.bSettings.php:132
+msgid "Send Notification To Admin"
+msgstr "Enviar notificación al Administrador"
+
+#: simple-membership/classes/class.bSettings.php:136
+msgid "Send Email to Member When Added via Admin Dashboard"
+msgstr "Enviar mail al miembro cuando ha sido añadido por el administrador"
+
+#: simple-membership/classes/class.bSettings.php:141
+msgid " Email Settings (Account Upgrade Notification)"
+msgstr "Ajustes Mail (Notificación de actualización de la cuenta)"
+
+#: simple-membership/classes/class.bSettings.php:367
+msgid "Not a Member?"
+msgstr "¿No estas registrado?"
+
+#: simple-membership/classes/class.bSettings.php:367
+#: simple-membership/views/login.php:27
+msgid "Join Us"
+msgstr "Únete a nosotros"
+
+#: simple-membership/classes/class.bUtils.php:63
+msgid "Active"
+msgstr "Activo"
+
+#: simple-membership/classes/class.bUtils.php:64
+msgid "Inactive"
+msgstr "Inactivo"
+
+#: simple-membership/classes/class.bUtils.php:65
+msgid "Pending"
+msgstr "Pendiente"
+
+#: simple-membership/classes/class.bUtils.php:66
+msgid "Expired"
+msgstr "Caducado"
+
+#: simple-membership/classes/class.bUtils.php:251
+msgid "Never"
+msgstr "Nunca"
+
+#: simple-membership/classes/class.miscUtils.php:51
+msgid "Registration"
+msgstr "Registro"
+
+#: simple-membership/classes/class.miscUtils.php:74
+msgid "Member Login"
+msgstr "Iniciar sesión"
+
+#: simple-membership/classes/class.miscUtils.php:97
+msgid "Profile"
+msgstr "Perfil de usuario"
+
+#: simple-membership/classes/class.miscUtils.php:120
+msgid "Password Reset"
+msgstr "Restablecer la contraseña"
+
+#: simple-membership/classes/class.simple-wp-membership.php:184
+msgid "You are not logged in."
+msgstr "Usted no ha iniciado sesión."
+
+#: simple-membership/classes/class.simple-wp-membership.php:215
+msgid "Simple WP Membership Protection"
+msgstr "Protección de Simple WP Membership"
+
+#: simple-membership/classes/class.simple-wp-membership.php:228
+msgid "Simple Membership Protection options"
+msgstr "Opciones de protección de Simple Membership"
+
+#: simple-membership/classes/class.simple-wp-membership.php:244
+msgid "Do you want to protect this content?"
+msgstr "Quieres proteger este contenido?"
+
+#: simple-membership/classes/class.simple-wp-membership.php:249
+msgid "Select the membership level that can access this content:"
+msgstr "Selecciona los tipos de usuarios que pueden acceder a este contenido:"
+
+#: simple-membership/classes/class.simple-wp-membership.php:459
+msgid "WP Membership"
+msgstr "WP Membership"
+
+#: simple-membership/classes/class.simple-wp-membership.php:466
+msgid "Settings"
+msgstr "Ajustes"
+
+#: simple-membership/classes/class.simple-wp-membership.php:468
+msgid "Add-ons"
+msgstr "Extensiones"
+
+#: simple-membership/views/add.php:14 simple-membership/views/admin_add.php:19
+#: simple-membership/views/admin_edit.php:17
+#: simple-membership/views/edit.php:12 simple-membership/views/login.php:11
+msgid "Password"
+msgstr "Contraseña"
+
+#: simple-membership/views/add.php:18 simple-membership/views/edit.php:16
+msgid "Repeat Password"
+msgstr "Repetir contraseña"
+
+#: simple-membership/views/add.php:37
+msgid "Register"
+msgstr "Registrarse"
+
+#: simple-membership/views/admin_add.php:6
+msgid "Add Member"
+msgstr "Añadir Miembro"
+
+#: simple-membership/views/admin_add.php:7
+msgid "Create a brand new user and add it to this site."
+msgstr "Crear un nuevo usuario y agregarlo a esta web."
+
+#: simple-membership/views/admin_add.php:11
+msgid "User name"
+msgstr "Nombre de usuario"
+
+#: simple-membership/views/admin_add.php:11
+#: simple-membership/views/admin_add.php:15
+#: simple-membership/views/admin_add_level.php:11
+#: simple-membership/views/admin_add_level.php:15
+#: simple-membership/views/admin_add_level.php:19
+#: simple-membership/views/admin_edit.php:9
+#: simple-membership/views/admin_edit.php:13
+#: simple-membership/views/admin_edit_level.php:10
+#: simple-membership/views/admin_edit_level.php:14
+#: simple-membership/views/admin_edit_level.php:18
+msgid "(required)"
+msgstr "(obligatorio)"
+
+#: simple-membership/views/admin_add.php:15
+#: simple-membership/views/admin_edit.php:13
+msgid "E-mail"
+msgstr "Email"
+
+#: simple-membership/views/admin_add.php:19
+msgid "(twice, required)"
+msgstr "(escríbalo dos veces, Obligatorio)"
+
+#: simple-membership/views/admin_add.php:24
+#: simple-membership/views/admin_edit.php:21
+msgid "Strength indicator"
+msgstr "Indicador de seguridad"
+
+#: simple-membership/views/admin_add.php:25
+#: simple-membership/views/admin_edit.php:22
+msgid ""
+"Hint: The password should be at least seven characters long. To make it "
+"stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
+"$ % ^ &amp; )."
+msgstr ""
+"Sugerencia: La contraseña debe tener al menos siete caracteres. Para hacerlo "
+"más seguro, utilizar letras mayúsculas y minúsculas, números y símbolos "
+"como! ? \"$% ^ & amp; )."
+
+#: simple-membership/views/admin_add.php:29
+#: simple-membership/views/admin_edit.php:26
+#: simple-membership/views/loggedin.php:7
+msgid "Account Status"
+msgstr "Estado de la cuenta"
+
+#: simple-membership/views/admin_add.php:36
+msgid "Add New Member "
+msgstr "Añadir nuevo miembro"
+
+#: simple-membership/views/admin_addon_settings.php:2
+#: simple-membership/views/admin_payment_settings.php:2
+#: simple-membership/views/admin_settings.php:2
+#: simple-membership/views/admin_tools_settings.php:2
+msgid "Simple WP Membership::Settings"
+msgstr "Simple WP Membership::Ajustes"
+
+#: simple-membership/views/admin_addon_settings.php:7
+msgid ""
+"Some of the simple membership plugin's addon settings and options will be "
+"displayed here (if you have them)"
+msgstr ""
+"Algunas de las extensiones de este plugin y sus opciones se muestran aquí "
+"(si estuvieran instalados)"
+
+#: simple-membership/views/admin_add_level.php:6
+msgid "Create new membership level."
+msgstr "Crear nueva categoría de usuario"
+
+#: simple-membership/views/admin_add_level.php:11
+#: simple-membership/views/admin_edit_level.php:10
+msgid "Membership Level Name"
+msgstr "Nombre de la categoría de usuario"
+
+#: simple-membership/views/admin_add_level.php:15
+#: simple-membership/views/admin_edit_level.php:14
+msgid "Default WordPress Role"
+msgstr "Rol en Wordpress por defecto"
+
+#: simple-membership/views/admin_add_level.php:19
+#: simple-membership/views/admin_edit_level.php:18
+msgid "Access Duration"
+msgstr "Duración del acceso"
+
+#: simple-membership/views/admin_add_level.php:22
+msgid "No Expiry (Access for this level will not expire until cancelled"
+msgstr "Sin expiración (el acceso a este nivel no expirará hasta que se anule)"
+
+#: simple-membership/views/admin_add_level.php:23
+#: simple-membership/views/admin_add_level.php:25
+#: simple-membership/views/admin_add_level.php:27
+#: simple-membership/views/admin_add_level.php:29
+#: simple-membership/views/admin_edit_level.php:22
+#: simple-membership/views/admin_edit_level.php:25
+#: simple-membership/views/admin_edit_level.php:28
+#: simple-membership/views/admin_edit_level.php:31
+msgid "Expire After"
+msgstr "Expira después"
+
+#: simple-membership/views/admin_add_level.php:24
+#: simple-membership/views/admin_edit_level.php:23
+msgid "Days (Access expires after given number of days)"
+msgstr "Días (el acceso expirará después del número establecido de días)"
+
+#: simple-membership/views/admin_add_level.php:26
+msgid "Weeks (Access expires after given number of weeks"
+msgstr "Semanas (el acceso expirará después del número establecido de semanas)"
+
+#: simple-membership/views/admin_add_level.php:28
+#: simple-membership/views/admin_edit_level.php:29
+msgid "Months (Access expires after given number of months)"
+msgstr "Meses (el acceso expirará después del número establecido de meses)"
+
+#: simple-membership/views/admin_add_level.php:30
+#: simple-membership/views/admin_edit_level.php:32
+msgid "Years (Access expires after given number of years)"
+msgstr "Años (el acceso expirará después del número establecido de años)"
+
+#: simple-membership/views/admin_add_level.php:31
+#: simple-membership/views/admin_edit_level.php:34
+msgid "Fixed Date Expiry"
+msgstr "Fecha de expiración"
+
+#: simple-membership/views/admin_add_level.php:32
+#: simple-membership/views/admin_edit_level.php:35
+msgid "(Access expires on a fixed date)"
+msgstr "(El acceso expira a una fecha establecida)"
+
+#: simple-membership/views/admin_add_level.php:36
+msgid "Access to older posts."
+msgstr "Acceso a entradas antiguas."
+
+#: simple-membership/views/admin_add_level.php:39
+msgid "Only allow access to posts published after the user's join date."
+msgstr ""
+"Solo permite acceso a las entradas publicadas después de la fecha de alta "
+"del miembro."
+
+#: simple-membership/views/admin_add_level.php:45
+msgid "Add New Membership Level "
+msgstr "Añadir nueva categoriza de usuario"
+
+#: simple-membership/views/admin_add_ons_page.php:6
+msgid "Simple WP Membership::Add-ons"
+msgstr "Simple WP Membership::Extensiones"
+
+#: simple-membership/views/admin_category_list.php:2
+msgid "Simple WP Membership::Categories"
+msgstr "Simple WP Membership::Categorías"
+
+#: simple-membership/views/admin_category_list.php:7
+msgid ""
+"First of all, globally protect the category on your site by selecting "
+"\"General Protection\" from the drop-down box below and then select the "
+"categories that should be protected from non-logged in users."
+msgstr ""
+"Primero, proteja las categorías en su wen seleccionando \"General Protection"
+"\" desde la siguiente casilla desplegable y marque las categorías que desea "
+"proteger de los usuarios no registrados."
+
+#: simple-membership/views/admin_category_list.php:10
+msgid ""
+"Next, select an existing membership level from the drop-down box below and "
+"then select the categories you want to grant access to (for that particular "
+"membership level)."
+msgstr ""
+"Segundo, seleccione un nivel de membresía existente de la casilla "
+"desplegable y seleccione las categorías a las cuales permitir acceso (para "
+"ese nivel en concreto)."
+
+#: simple-membership/views/admin_edit.php:5
+msgid "Edit Member"
+msgstr "Editar usuario"
+
+#: simple-membership/views/admin_edit.php:6
+msgid "Edit existing member details."
+msgstr "Editar detalles de usuario existente"
+
+#: simple-membership/views/admin_edit.php:9
+#: simple-membership/views/login.php:5
+msgid "Username"
+msgstr "Nombre de usuario"
+
+#: simple-membership/views/admin_edit.php:17
+msgid "(twice, leave empty to retain old password)"
+msgstr "(dos veces, dejar en blanco pra conservar la actual contraseña)"
+
+#: simple-membership/views/admin_edit.php:33
+msgid "Notify User"
+msgstr "Notificar usuario"
+
+#: simple-membership/views/admin_edit.php:40
+msgid "Edit User "
+msgstr "Editar usuario"
+
+#: simple-membership/views/admin_edit_level.php:5
+msgid "Edit membership level"
+msgstr "Editar categoría de usuario"
+
+#: simple-membership/views/admin_edit_level.php:6
+msgid "Edit membership level."
+msgstr "Editar categoría de usuario"
+
+#: simple-membership/views/admin_edit_level.php:21
+msgid "No Expiry (Access for this level will not expire until cancelled)"
+msgstr "Sin expiración (el acceso a este nivel no expirará hasta que se anule)"
+
+#: simple-membership/views/admin_edit_level.php:26
+msgid "Weeks (Access expires after given number of weeks)"
+msgstr "Semanas (el acceso expirará después del número establecido de semanas)"
+
+#: simple-membership/views/admin_edit_level.php:40
+msgid "Protect Older Posts (optional)"
+msgstr "Protejer entradas antiguas (opcional)"
+
+#: simple-membership/views/admin_edit_level.php:43
+msgid ""
+"Only allow access to protected posts published after the members's join date."
+msgstr ""
+"Solo permite acceso a entradas protegidas a partir de la fecha de alta del "
+"miembro."
+
+#: simple-membership/views/admin_edit_level.php:51
+msgid "Edit Membership Level "
+msgstr "Editar categoría de usuario"
+
+#: simple-membership/views/admin_members.php:2
+msgid "Simple WP Membership::Members"
+msgstr "Simple WP Membership::Usuarios"
+
+#: simple-membership/views/admin_members.php:3
+#: simple-membership/views/admin_members.php:19
+#: simple-membership/views/admin_membership_levels.php:20
+msgid "Add New"
+msgstr "Añadir nuevo"
+
+#: simple-membership/views/admin_members.php:9
+#: simple-membership/views/admin_membership_levels.php:10
+msgid "search"
+msgstr "Buscar"
+
+#: simple-membership/views/admin_membership_levels.php:2
+msgid "Simple WP Membership::Membership Levels"
+msgstr "Simple WP Membership::Categorías de usuario"
+
+#: simple-membership/views/admin_membership_level_menu.php:2
+msgid "Membership level"
+msgstr "Categoría de usuario"
+
+#: simple-membership/views/admin_membership_level_menu.php:3
+msgid "Manage Content Production"
+msgstr "Gestionar la producción de contenido"
+
+#: simple-membership/views/admin_membership_level_menu.php:4
+msgid "Category Protection"
+msgstr "Protección de categoría"
+
+#: simple-membership/views/admin_membership_manage.php:17
+msgid "Example Content Protection Settings"
+msgstr "Ejemplo de Ajustes de contenido protegido"
+
+#: simple-membership/views/admin_member_form_common_part.php:23
+msgid "Gender"
+msgstr "Sexo"
+
+#: simple-membership/views/admin_member_form_common_part.php:30
+#: simple-membership/views/edit.php:28
+msgid "Phone"
+msgstr "Teléfono"
+
+#: simple-membership/views/admin_member_form_common_part.php:34
+#: simple-membership/views/edit.php:32
+msgid "Street"
+msgstr "Calle"
+
+#: simple-membership/views/admin_member_form_common_part.php:38
+#: simple-membership/views/edit.php:36
+msgid "City"
+msgstr "Ciudad"
+
+#: simple-membership/views/admin_member_form_common_part.php:42
+#: simple-membership/views/edit.php:40
+msgid "State"
+msgstr "Provincia"
+
+#: simple-membership/views/admin_member_form_common_part.php:46
+#: simple-membership/views/edit.php:44
+msgid "Zipcode"
+msgstr "Código Postal"
+
+#: simple-membership/views/admin_member_form_common_part.php:50
+#: simple-membership/views/edit.php:48
+msgid "Country"
+msgstr "País"
+
+#: simple-membership/views/admin_member_form_common_part.php:54
+msgid "Company"
+msgstr "Empresa o Institución"
+
+#: simple-membership/views/admin_member_form_common_part.php:58
+msgid "Member Since"
+msgstr "Miembro desde"
+
+#: simple-membership/views/admin_payment_settings.php:33
+msgid "PayPal Integration Settings"
+msgstr "Ajustes de integración con Paypal"
+
+#: simple-membership/views/admin_payment_settings.php:36
+msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
+msgstr "Generar código de \"variables avanzadas\" para su botón de Paypal"
+
+#: simple-membership/views/admin_payment_settings.php:39
+msgid "Enter the Membership Level ID"
+msgstr "Introduzca el ID de la categoría de usuario"
+
+#: simple-membership/views/admin_payment_settings.php:41
+msgid "Generate Code"
+msgstr "General el código"
+
+#: simple-membership/views/admin_tools_settings.php:9
+msgid "Generate a Registration Completion link"
+msgstr "Generar link para completar registro"
+
+#: simple-membership/views/admin_tools_settings.php:12
+msgid ""
+"You can manually generate a registration completion link here and give it to "
+"your customer if they have missed the email that was automatically sent out "
+"to them after the payment."
+msgstr ""
+"Puede generar manualmente un link para completar el registro aquí y enviarlo "
+"al usuario si ha perdido el correo electrónico que se envía automáticamente "
+"a ellos después del pago."
+
+#: simple-membership/views/admin_tools_settings.php:17
+msgid "Generate Registration Completion Link"
+msgstr "Generar link para completar registro"
+
+#: simple-membership/views/admin_tools_settings.php:20
+msgid "OR"
+msgstr "o"
+
+#: simple-membership/views/admin_tools_settings.php:21
+msgid "For All Pending Registrations"
+msgstr "Para todos los registros pendientes"
+
+#: simple-membership/views/admin_tools_settings.php:24
+msgid "Registration Completion Links Will Appear Below:"
+msgstr "Los enlaces para completar el registro aparecerán bajo:"
+
+#: simple-membership/views/admin_tools_settings.php:31
+msgid "Send Registration Reminder Email too"
+msgstr "Enviar también recordatorio del mail de registro"
+
+#: simple-membership/views/admin_tools_settings.php:34
+msgid "Submit"
+msgstr "Enviar"
+
+#: simple-membership/views/edit.php:58
+msgid "Update"
+msgstr "Actualizar"
+
+#: simple-membership/views/forgot_password.php:5
+msgid "Email Address"
+msgstr "Email"
+
+#: simple-membership/views/forgot_password.php:12
+msgid "Reset Password"
+msgstr "Restablecer Contraseña"
+
+#: simple-membership/views/loggedin.php:3
+msgid "Logged in as"
+msgstr "Sesión iniciada como"
+
+#: simple-membership/views/loggedin.php:11
+msgid "Membership"
+msgstr "Membresía"
+
+#: simple-membership/views/loggedin.php:15
+msgid "Account Expiry"
+msgstr "Valido hasta"
+
+#: simple-membership/views/loggedin.php:19
+msgid "Logout"
+msgstr "Cerrar sesión"
+
+#: simple-membership/views/login.php:18
+msgid "Remember Me"
+msgstr "Recordarme"
+
+#: simple-membership/views/login.php:24
+msgid "Forgot Password"
+msgstr "Contraseña Perdida?"
+
+#~ msgid "Bad Cookie Hash"
+#~ msgstr "Bad Cookie Hash"
+
+#~ msgid "Display SWPM Login."
+#~ msgstr "Display SWPM login."
+
+#~ msgid "SWPM Login"
+#~ msgstr "SWPM login"
+
+#~ msgid "Subscription Duration"
+#~ msgstr "Duración de la subscripción"
+
+#~ msgid "No Expiry"
+#~ msgstr "No caduca"
+
+#~ msgid "Subscription starts field is invalid"
+#~ msgstr ""
+#~ "La fecha introducida en \"Subscripción desde\" no es válida (dd/mm/aaaa)\n"
+
+#~ msgid "Subscriptoin duration must be > 0."
+#~ msgstr "El tiempo de subscripción ha de ser mayor que 0."
+
+#~ msgid "Subscription Starts"
+#~ msgstr "Inició de subscripción"
+
+#~ msgid "Subscription Valid For"
+#~ msgstr "Subscripción valida por"
diff --git a/languages/swpm-fr_FR.mo b/languages/swpm-fr_FR.mo
new file mode 100644 (file)
index 0000000..b8e3bcd
Binary files /dev/null and b/languages/swpm-fr_FR.mo differ
diff --git a/languages/swpm-fr_FR.po b/languages/swpm-fr_FR.po
new file mode 100644 (file)
index 0000000..aaab9ae
--- /dev/null
@@ -0,0 +1,895 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: swpm\n"
+"POT-Creation-Date: 2014-07-08 14:22+1000\n"
+"PO-Revision-Date: 2014-07-18 20:10+0100\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.6.6\n"
+"X-Poedit-KeywordsList: __;_e\n"
+"X-Poedit-Basepath: .\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"Language: fr_FR\n"
+"X-Poedit-SearchPath-0: E:\\Portal\\Project Material\\NetBeans Workspace"
+"\\simple-membership\\simple-membership\n"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bAdminRegistration.php:45
+#: Workspace\simple-membership\simple-membership/classes/class.bFrontRegistration.php:58
+msgid "Registration Successful."
+msgstr "Enregistrement Réussi."
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bAdminRegistration.php:50
+#: Workspace\simple-membership\simple-membership/classes/class.bAdminRegistration.php:69
+#: Workspace\simple-membership\simple-membership/classes/class.bMembershipLevel.php:36
+#: Workspace\simple-membership\simple-membership/classes/class.bMembershipLevel.php:54
+msgid "Please correct the following:"
+msgstr "S'il vous plait, veuillez corriger ce qui suit :"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bAjax.php:16
+#: Workspace\simple-membership\simple-membership/classes/class.bAjax.php:28
+msgid "Aready taken"
+msgstr "Déjà pris"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bAjax.php:29
+msgid "Available"
+msgstr "Disponible"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bAuth.php:47
+#: Workspace\simple-membership\simple-membership/classes/class.bFrontRegistration.php:173
+msgid "User Not Found."
+msgstr "Utilisateur Introuvable"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bAuth.php:54
+msgid "Password Empty or Invalid."
+msgstr "Mot de passe Vide ou Invalide"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bAuth.php:78
+msgid "Account is inactive."
+msgstr "Le Compte est Inactif."
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bAuth.php:88
+msgid "You are logged in as:"
+msgstr "Vous êtes connecté en tant que :"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bAuth.php:127
+msgid "Logged Out Successfully."
+msgstr "Déconnexion réussie"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bAuth.php:169
+msgid "Session Expired."
+msgstr "Session expirée"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bAuth.php:178
+msgid "Invalid User Name"
+msgstr "Nom d'Utilisateur Invalide"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bAuth.php:186
+msgid "Bad Cookie Hash"
+msgstr "Mauvais Hash Cookie"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bForm.php:26
+msgid ""
+"Wordpress account exists with given user name. But given email doesn't match."
+msgstr ""
+"Le compte WordPress  existe avec ce prénom utilisateur. Mais l'email ne "
+"correspond pas."
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bForm.php:31
+msgid ""
+"Wordpress account exists with given email. But given user name doesn't match."
+msgstr ""
+"Le compte WordPress existe avec cet email utilisateur. Mais le nom ne "
+"correspond pas."
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bForm.php:40
+msgid "User name is required"
+msgstr "Un nom d'utilisateur est requis"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bForm.php:49
+msgid "User name already exists."
+msgstr "Le nom d'utilisateur existe déjà."
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bForm.php:72
+msgid "Password is required"
+msgstr "Le mot de passe est demandé"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bForm.php:79
+msgid "Password mismatch"
+msgstr "Le mot de passe ne correspond pas"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bForm.php:95
+msgid "Email is required"
+msgstr "L'email est demandé"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bForm.php:99
+msgid "Email is invalid"
+msgstr "L'email est invalide"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bForm.php:112
+msgid "Email is already used."
+msgstr "L'email est déjà utilisé."
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bForm.php:128
+msgid "Phone number is invalid"
+msgstr "Le numéro de téléphone est invalide"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bForm.php:174
+msgid "Member since field is invalid"
+msgstr "Le champ \"Membre depuis\" est invalide"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bForm.php:185
+msgid "Subscription starts field is invalid"
+msgstr "Le champ \"Inscription commence\" est invalide"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bForm.php:195
+msgid "Gender field is invalid"
+msgstr "Le champ \"Genre\" est invalide"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bForm.php:206
+msgid "Account state field is invalid"
+msgstr "Le champ \"Etat de l'abonné\" est invalide"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bFrontRegistration.php:58
+msgid "Please"
+msgstr "S'il vous plait,"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bFrontRegistration.php:58
+#: Workspace\simple-membership\simple-membership/views/login.php:21
+msgid "Login"
+msgstr "Connexion"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bFrontRegistration.php:73
+#: Workspace\simple-membership\simple-membership/classes/class.bFrontRegistration.php:152
+msgid "Please correct the following"
+msgstr "Veuillez corriger ce qui suit"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bFrontRegistration.php:86
+msgid "Membership Level Couldn't be found."
+msgstr "Le niveau d'abonnement est introuvable"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bFrontRegistration.php:162
+msgid "Email Address Not Valid."
+msgstr "Adresse Mail Invalide"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bFrontRegistration.php:193
+msgid "New password has been sent to your email address."
+msgstr "Le nouveau mot de passe été envoyé à votre adresse mail"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bLevelForm.php:31
+msgid "Subscriptoin duration must be > 0."
+msgstr "La durée de d'abonnement doit être > 0."
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bMembers.php:7
+msgid "Member"
+msgstr "Membre"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bMembers.php:8
+#: Workspace\simple-membership\simple-membership/classes/class.simple-wp-membership.php:437
+msgid "Members"
+msgstr "Membres"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bMembers.php:16
+#: Workspace\simple-membership\simple-membership/classes/class.bMembershipLevels.php:16
+msgid "ID"
+msgstr "Identifiant"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bMembers.php:17
+#: Workspace\simple-membership\simple-membership/views/add.php:5
+#: Workspace\simple-membership\simple-membership/views/edit.php:4
+#: Workspace\simple-membership\simple-membership/views/login.php:5
+msgid "User Name"
+msgstr "Nom d'Utilisateur"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bMembers.php:18
+#: Workspace\simple-membership\simple-membership/views/add.php:21
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:2
+#: Workspace\simple-membership\simple-membership/views/edit.php:20
+msgid "First Name"
+msgstr "Prénom"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bMembers.php:19
+#: Workspace\simple-membership\simple-membership/views/add.php:25
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:6
+#: Workspace\simple-membership\simple-membership/views/edit.php:24
+msgid "Last Name"
+msgstr "Nom"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bMembers.php:20
+#: Workspace\simple-membership\simple-membership/views/add.php:9
+#: Workspace\simple-membership\simple-membership/views/edit.php:8
+msgid "Email"
+msgstr "Email"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bMembers.php:21
+#: Workspace\simple-membership\simple-membership/classes/class.bMembershipLevels.php:8
+#: Workspace\simple-membership\simple-membership/classes/class.bMembershipLevels.php:17
+#: Workspace\simple-membership\simple-membership/views/add.php:64
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:55
+#: Workspace\simple-membership\simple-membership/views/edit.php:52
+msgid "Membership Level"
+msgstr "Niveau d'Abonnement"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bMembers.php:22
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:78
+msgid "Subscription Starts"
+msgstr "Inscription à partir de"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bMembers.php:23
+msgid "Account State"
+msgstr "Etat de l'abonné"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bMembers.php:35
+#: Workspace\simple-membership\simple-membership/classes/class.bMembershipLevels.php:29
+msgid "Delete"
+msgstr "Supprimer"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bMembers.php:98
+msgid "No Member found."
+msgstr "Aucun Membre trouvé."
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bMembershipLevel.php:31
+msgid "Membership Level Creation Successful."
+msgstr "Création du Niveau d'Abonnement réussie"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bMembershipLevel.php:50
+msgid "Updated Successfully."
+msgstr "Mise à jour Réussie"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bMembershipLevels.php:9
+#: Workspace\simple-membership\simple-membership/classes/class.simple-wp-membership.php:439
+msgid "Membership Levels"
+msgstr "Niveaux d'Abonnement"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bMembershipLevels.php:18
+msgid "Role"
+msgstr "Rôle"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bMembershipLevels.php:19
+msgid "Subscription Valid For"
+msgstr "Inscription Valide pour"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:28
+msgid "Plugin Documentation"
+msgstr "Plugin Documentation"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:30
+msgid "General Settings"
+msgstr "Paramétrages"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:32
+msgid "Enable Free Membership"
+msgstr "Activer l'Accès Gratuit"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:35
+msgid "Enable/disable registration for free membership level"
+msgstr "Activer/Désactiver l'enregistrement pour l'accès gratuit"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:36
+msgid "Free Membership Level ID"
+msgstr "ID du Niveau Accès Gratuit"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:39
+msgid "Assign free membership level ID"
+msgstr "Attibuer un ID pour le Niveau Accès Gratuit"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:40
+msgid "Hide Adminbar"
+msgstr "Cacher la barre d'Admin"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:43
+msgid ""
+"WordPress shows an admin toolbar to the logged in users of the site. Check "
+"this box if you want to hide that admin toolbar in the fronend of your site."
+msgstr ""
+"WordPress montre une barre d'admin pour les utilisateurs connectés du site. "
+"Cochez cette case si vous souhaitez masquer cette barre d'admin dans le "
+"frontend de votre site."
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:45
+msgid "Pages Settings"
+msgstr "Page des paramétres"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:47
+msgid "Login Page URL"
+msgstr "URL de connexion"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:51
+msgid "Registration Page URL"
+msgstr "URL d'Enregistrement"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:55
+msgid "Join Us Page URL"
+msgstr "URL \"Nous Rejoindre\""
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:59
+msgid "Edit Profile Page URL"
+msgstr "URL Edition du profil"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:63
+msgid "Password Reset Page URL"
+msgstr "URL Modifier Mot de Passe"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:68
+msgid "Test & Debug Settings"
+msgstr "Tests et Débugs"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:74
+msgid "Enable Sandbox Testing"
+msgstr "Activer la SandBox"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:77
+msgid "Enable this option if you want to do sandbox payment testing."
+msgstr "Activer cette option si vous voulez tester le paiement par la SandBox"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:90
+msgid "Email Misc. Settings"
+msgstr "Paramètres Email"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:92
+msgid "From Email Address"
+msgstr "De :"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:97
+msgid "Email Settings (Prompt to Complete Registration )"
+msgstr "Paramètres Email (Indique une Inscription Complète)"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:99
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:110
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:129
+msgid "Email Subject"
+msgstr "Sujet "
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:103
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:114
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:133
+msgid "Email Body"
+msgstr "Corps"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:108
+msgid "Email Settings (Registration Complete)"
+msgstr "Paramètres Email (Inscription Complète)"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:118
+msgid "Send Notification To Admin"
+msgstr "Envoie une Notification à l'Admin"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:122
+msgid "Send Email to Member When Added via Admin Dashboard"
+msgstr "Envoie un Mail au Membre quand il est ajouté par le Tableau de Bord"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.bSettings.php:127
+msgid " Email Settings (Account Upgrade Notification)"
+msgstr "Paramètres Email (Notification de mise à jour de Compte)"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.miscUtils.php:51
+msgid "Registration"
+msgstr "Inscription"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.miscUtils.php:74
+msgid "Member Login"
+msgstr "Nom du Membre Utilisateur"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.miscUtils.php:97
+msgid "Profile"
+msgstr "Profil"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.miscUtils.php:120
+msgid "Password Reset"
+msgstr "RAZ Mot de Passe"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.simple-wp-membership.php:181
+msgid "Simple WP Membership Protection"
+msgstr "Simple WP Membership Protection"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.simple-wp-membership.php:194
+msgid "Simple Membership Protection options"
+msgstr "Simple WP Membership Protection"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.simple-wp-membership.php:210
+msgid "Do you want to protect this content?"
+msgstr "Voulez-vous protéger ce contenu ?"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.simple-wp-membership.php:215
+msgid "Select the membership level that can access this content:"
+msgstr "Sélectionnez le niveau d'adhésion qui peut accéder à ce contenu :"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.simple-wp-membership.php:347
+msgid "Display SWPM Login."
+msgstr "Display SWPM Login."
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.simple-wp-membership.php:349
+msgid "SWPM Login"
+msgstr "SWPM Login"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.simple-wp-membership.php:434
+msgid "WP Membership"
+msgstr "Abonné WP"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/classes/class.simple-wp-membership.php:441
+msgid "Settings"
+msgstr "Paramètres"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/add.php:13
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:45
+#: Workspace\simple-membership\simple-membership/views/edit.php:12
+#: Workspace\simple-membership\simple-membership/views/login.php:11
+msgid "Password"
+msgstr "Mot de Passe"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/add.php:17
+#: Workspace\simple-membership\simple-membership/views/edit.php:16
+msgid "Repeat Password"
+msgstr "Répétez le Mot de Passe"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/add.php:29
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:10
+msgid "Gender"
+msgstr "Genre"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/add.php:36
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:17
+#: Workspace\simple-membership\simple-membership/views/edit.php:28
+msgid "Phone"
+msgstr "Téléphone"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/add.php:40
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:21
+#: Workspace\simple-membership\simple-membership/views/edit.php:32
+msgid "Street"
+msgstr "Rue"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/add.php:44
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:25
+#: Workspace\simple-membership\simple-membership/views/edit.php:36
+msgid "City"
+msgstr "Ville"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/add.php:48
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:29
+#: Workspace\simple-membership\simple-membership/views/edit.php:40
+msgid "State"
+msgstr "Etat"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/add.php:52
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:33
+#: Workspace\simple-membership\simple-membership/views/edit.php:44
+msgid "Zipcode"
+msgstr "Code postal"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/add.php:56
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:37
+#: Workspace\simple-membership\simple-membership/views/edit.php:48
+msgid "Country"
+msgstr "Pays"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/add.php:60
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:41
+msgid "Company"
+msgstr "Entreprise"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/add.php:71
+msgid "Register"
+msgstr "Enregistrer"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_add.php:6
+msgid "Add Member"
+msgstr "Ajouter un Membre"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_add.php:7
+msgid "Create a brand new user and add it to this site."
+msgstr "Créer un nouveau utilisateur et l'ajouter à ce site."
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_add.php:11
+msgid "User name"
+msgstr "Nom d'Utilisateur"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_add.php:11
+#: Workspace\simple-membership\simple-membership/views/admin_add.php:15
+#: Workspace\simple-membership\simple-membership/views/admin_add_level.php:11
+#: Workspace\simple-membership\simple-membership/views/admin_add_level.php:15
+#: Workspace\simple-membership\simple-membership/views/admin_add_level.php:19
+#: Workspace\simple-membership\simple-membership/views/admin_edit.php:9
+#: Workspace\simple-membership\simple-membership/views/admin_edit.php:13
+#: Workspace\simple-membership\simple-membership/views/admin_edit_level.php:10
+#: Workspace\simple-membership\simple-membership/views/admin_edit_level.php:14
+#: Workspace\simple-membership\simple-membership/views/admin_edit_level.php:18
+msgid "(required)"
+msgstr "(requis)"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_add.php:15
+#: Workspace\simple-membership\simple-membership/views/admin_edit.php:13
+msgid "E-mail"
+msgstr "Email"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_add.php:19
+msgid "Add New Member "
+msgstr "Ajouter un Nouveau Membre"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_add_level.php:6
+msgid "Create new membership level."
+msgstr "Créer un nouveau niveau d'adhésion."
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_add_level.php:11
+#: Workspace\simple-membership\simple-membership/views/admin_edit_level.php:10
+msgid "Membership Level Name"
+msgstr "Nom du Niveau d'Adhésion."
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_add_level.php:15
+#: Workspace\simple-membership\simple-membership/views/admin_edit_level.php:14
+msgid "Default WordPress Role"
+msgstr "Rôle WordPress par défaut"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_add_level.php:19
+#: Workspace\simple-membership\simple-membership/views/admin_edit_level.php:18
+msgid "Subscription Duration"
+msgstr "Durée d'Inscription"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_add_level.php:26
+#: Workspace\simple-membership\simple-membership/views/admin_edit_level.php:27
+msgid "No Expiry"
+msgstr "Pas d'Expiration"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_add_level.php:55
+msgid "Add New Membership Level "
+msgstr "Ajouter le Nouveau Niveau d'Adhésion"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_edit.php:5
+msgid "Edit Member"
+msgstr "Editer le Membre"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_edit.php:6
+msgid "Edit existing member details."
+msgstr "Editer les détails du membre existant."
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_edit.php:9
+msgid "Username"
+msgstr "Nom d'Utilisateur"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_edit.php:17
+msgid "Edit User "
+msgstr "Editer l'Utilisateur"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_edit_level.php:5
+msgid "Edit membership level"
+msgstr "Editer le Niveau d'Adhésion"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_edit_level.php:6
+msgid "Edit membership level."
+msgstr "Editer le Niveau d'Adhésion."
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_edit_level.php:54
+msgid "Edit Membership Level "
+msgstr "Editer le Niveau d'Adhésion"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_members.php:2
+msgid "Simple WP Membership::Members"
+msgstr "Simple WP Membership::Members"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_members.php:3
+#: Workspace\simple-membership\simple-membership/views/admin_members.php:19
+#: Workspace\simple-membership\simple-membership/views/admin_membership_levels.php:21
+msgid "Add New"
+msgstr "Ajouter Nouveau"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_members.php:9
+#: Workspace\simple-membership\simple-membership/views/admin_membership_levels.php:11
+msgid "search"
+msgstr "recherche"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_membership_levels.php:3
+msgid "Simple WP Membership::Membership Levels"
+msgstr "Simple WP Membership::Membership Levels"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_membership_level_menu.php:2
+msgid "Membership level"
+msgstr "Niveau d'Adhésion"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_membership_level_menu.php:3
+msgid "Manage Content Production"
+msgstr "Contrôler le Contenu"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_membership_manage.php:17
+msgid "Example Content Protection Settings"
+msgstr "Exemple de Paramètres de Protection"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:45
+msgid "(twice, required)"
+msgstr "(requis, deux fois)"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:50
+msgid "Strength indicator"
+msgstr "Indicateur de sûreté"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:51
+msgid ""
+"Hint: The password should be at least seven characters long. To make it "
+"stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
+"$ % ^ &amp; )."
+msgstr ""
+"Remarque : Le mot de passe doit comporter au moins sept caractères. Pour le "
+"rendre plus fort, utiliser des majuscules et des minuscules, des chiffres et "
+"des symboles comme ! \" ? $ % ^)."
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:64
+#: Workspace\simple-membership\simple-membership/views/loggedin.php:7
+#: Workspace\simple-membership\simple-membership/views/login_widget_logged.php:6
+msgid "Account Status"
+msgstr "Statut du Compte"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:66
+msgid "Active"
+msgstr "Actif"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:67
+msgid "Inactive"
+msgstr "Inanctif"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:68
+msgid "Pending"
+msgstr "En attente"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:69
+msgid "Expired"
+msgstr "Expiré"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_member_form_common_part.php:74
+msgid "Member Since"
+msgstr "Membre Depuis "
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_payment_settings.php:2
+#: Workspace\simple-membership\simple-membership/views/admin_settings.php:2
+#: Workspace\simple-membership\simple-membership/views/admin_tools_settings.php:2
+msgid "Simple WP Membership::Settings"
+msgstr "Simple WP Membership::Settings"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_payment_settings.php:33
+msgid "PayPal Integration Settings"
+msgstr "PayPal Intégration"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_payment_settings.php:36
+msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
+msgstr "Générer le \"Advanced Variables\" Code pour votre bouton PayPal"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_payment_settings.php:39
+msgid "Enter the Membership Level ID"
+msgstr "Entrez l'ID de niveau d'adhésion"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_payment_settings.php:41
+msgid "Generate Code"
+msgstr "Générer le Code"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_tools_settings.php:9
+msgid "Generate a Registration Completion link"
+msgstr "Générer un lien d'achèvement d'enregistrement"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_tools_settings.php:12
+msgid ""
+"You can manually generate a registration completion link here and give it to "
+"your customer if they have missed the email that was automatically sent out "
+"to them after the payment."
+msgstr ""
+"Vous pouvez manuellement générer un lien d'achèvement d'inscription ici et "
+"le donner à vos clients si ils ont raté l'email qui leur est automatiquement "
+"envoyé après le paiement."
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_tools_settings.php:17
+msgid "Generate Registration Completion Link"
+msgstr "Générer le lien de fin d'inscription"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_tools_settings.php:20
+msgid "OR"
+msgstr "OU"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_tools_settings.php:21
+msgid "For All Pending Registrations"
+msgstr "Pour Toutes Les Inscriptions en Attente"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_tools_settings.php:24
+msgid "Registration Completion Links Will Appear Below:"
+msgstr "Les Liens d'Achèvement d'Enregistrement apparaissent ci-dessous :"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_tools_settings.php:31
+msgid "Send Registration Reminder Email too"
+msgstr "Envoyer l'E-mail de rappel d'enregistrement aussi"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/admin_tools_settings.php:34
+msgid "Submit"
+msgstr "Soumettre"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/edit.php:58
+msgid "Update"
+msgstr "Mise à jour"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/forgot_password.php:5
+msgid "Email Address"
+msgstr "Adresse Email"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/forgot_password.php:12
+msgid "Reset Password"
+msgstr "RAZ Mot de Passe"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/loggedin.php:3
+#: Workspace\simple-membership\simple-membership/views/login_widget_logged.php:3
+msgid "Logged in as"
+msgstr "Connecté en tant que "
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/loggedin.php:11
+#: Workspace\simple-membership\simple-membership/views/login_widget_logged.php:9
+msgid "Membership"
+msgstr "Adhésion"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/loggedin.php:15
+#: Workspace\simple-membership\simple-membership/views/login_widget_logged.php:13
+msgid "Logout"
+msgstr "Déconnecter"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/login.php:17
+msgid "Remember Me"
+msgstr "Se Souvenir de Moi"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/login.php:26
+msgid "Forgot Password"
+msgstr "Mot de Passe Oublié"
+
+#: E:\Portal\Project Material\NetBeans
+#: Workspace\simple-membership\simple-membership/views/login.php:30
+msgid "Join Us"
+msgstr "Nous Rejoindre"
diff --git a/languages/swpm-lt_LT.mo b/languages/swpm-lt_LT.mo
new file mode 100644 (file)
index 0000000..da191b7
Binary files /dev/null and b/languages/swpm-lt_LT.mo differ
diff --git a/languages/swpm-lt_LT.po b/languages/swpm-lt_LT.po
new file mode 100644 (file)
index 0000000..01cdfe6
--- /dev/null
@@ -0,0 +1,519 @@
+msgid ""\r
+msgstr ""\r
+"Project-Id-Version: Simple WordPress Membership\n"\r
+"Report-Msgid-Bugs-To: \n"\r
+"POT-Creation-Date: 2014-07-30 17:30+0800\n"\r
+"PO-Revision-Date: Wed Apr 29 2015 08:34:54 GMT+0100 (GMT Daylight Time)\n"\r
+"Last-Translator: Elurija <e.eimaite@gmail.com>\n"\r
+"Language-Team: \n"\r
+"Language: Lithuanian\n"\r
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10 >= 2 "\r
+"&&(n%100<10||n%100 >= 20)? 1 : 2)\n"\r
+"MIME-Version: 1.0\n"\r
+"Content-Type: text/plain; charset=UTF-8\n"\r
+"Content-Transfer-Encoding: 8bit\n"\r
+"X-Poedit-SourceCharset: UTF-8\n"\r
+"X-Generator: Loco - https://localise.biz/\n"\r
+"X-Poedit-Basepath: .\n"\r
+"X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;"\r
+"__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;"\r
+"_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;"\r
+"esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;"\r
+"esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"\r
+"X-Poedit-SearchPath-0: .\n"\r
+"X-Loco-Target-Locale: lt_LT"\r
+\r
+msgid " Email Settings (Account Upgrade Notification)"\r
+msgstr "El. pašto nustatymai"\r
+\r
+msgid "(required)"\r
+msgstr "(būtina)"\r
+\r
+msgid "(twice, required)"\r
+msgstr "(du kartus, būtina)"\r
+\r
+msgid "Account State"\r
+msgstr "Paskyros būsena"\r
+\r
+msgid "Account Status"\r
+msgstr "Paskyros statusas"\r
+\r
+msgid "Account is inactive."\r
+msgstr "Paskyra neaktyvi"\r
+\r
+msgid "Account state field is invalid"\r
+msgstr "Paskyros būsena neteisinga"\r
+\r
+msgid "Active"\r
+msgstr "Aktyvi (-us)"\r
+\r
+msgid "Add Member"\r
+msgstr "Pridėti narį"\r
+\r
+msgid "Add New"\r
+msgstr "Pridėjti naują"\r
+\r
+msgid "Add New Member "\r
+msgstr "Pridėti naują narį"\r
+\r
+msgid "Add New Membership Level "\r
+msgstr "Pridėti naują narystės lygį"\r
+\r
+msgid "Aready taken"\r
+msgstr "Jau naudojamas kito nario"\r
+\r
+msgid "Assign free membership level ID"\r
+msgstr "Pridėkite nemomamos narystės ID"\r
+\r
+msgid "Available"\r
+msgstr "Laisvas"\r
+\r
+msgid "Bad Cookie Hash"\r
+msgstr "Blogas sausainiuko hash"\r
+\r
+msgid "City"\r
+msgstr "Miestas"\r
+\r
+msgid "Company"\r
+msgstr "Įmonė"\r
+\r
+msgid "Country"\r
+msgstr "Šalos"\r
+\r
+msgid "Create a brand new user and add it to this site."\r
+msgstr "Sukurkite naują vartotoją ir pridėkite jį prie svetainės"\r
+\r
+msgid "Create new membership level."\r
+msgstr "Sukurkite naują narystės lygį"\r
+\r
+msgid "Default WordPress Role"\r
+msgstr "Numatyta Wordpress rolė"\r
+\r
+msgid "Delete"\r
+msgstr "Trinti"\r
+\r
+msgid "Display SWPM Login."\r
+msgstr "Rodyti SWPM prisijungimą"\r
+\r
+msgid "Do you want to protect this content?"\r
+msgstr "Ar norite apsaugoti šią informaciją?"\r
+\r
+msgid "E-mail"\r
+msgstr "El. paštas"\r
+\r
+msgid "Edit Member"\r
+msgstr "Redaguokite narį"\r
+\r
+msgid "Edit Membership Level "\r
+msgstr "Redaguokite narystės lygį"\r
+\r
+msgid "Edit Profile Page URL"\r
+msgstr "Profilio redagavimo puslapio URL"\r
+\r
+msgid "Edit User "\r
+msgstr "Redaguoti vartotoją"\r
+\r
+msgid "Edit existing member details."\r
+msgstr "Redaguoti nario duomenis"\r
+\r
+msgid "Edit membership level"\r
+msgstr "Redaguoti narystės lygį\n"\r
+\r
+msgid "Edit membership level."\r
+msgstr "Redaguoti narystės lygį"\r
+\r
+msgid "Email"\r
+msgstr "El. paštas"\r
+\r
+msgid "Email Address"\r
+msgstr "El. paštas"\r
+\r
+msgid "Email Address Not Valid."\r
+msgstr "El. paštas neteisingas"\r
+\r
+msgid "Email Body"\r
+msgstr "El. paštas tekstas"\r
+\r
+msgid "Email Misc. Settings"\r
+msgstr "El. paštas kiti nustatymai"\r
+\r
+msgid "Email Settings (Prompt to Complete Registration )"\r
+msgstr "El. pašto nustatymai (skatina užbaigti registraciją)"\r
+\r
+msgid "Email Settings (Registration Complete)"\r
+msgstr "El. pašto nustatymai (registracija pavyko)"\r
+\r
+msgid "Email Subject"\r
+msgstr "El. pašto tema"\r
+\r
+msgid "Email is already used."\r
+msgstr "El. paštas jau naudojamas"\r
+\r
+msgid "Email is invalid"\r
+msgstr "El. pašto neteisingas"\r
+\r
+msgid "Email is required"\r
+msgstr "El. paštas - būtina"\r
+\r
+msgid "Enable Free Membership"\r
+msgstr "Aktyvuoti nemokamą narystę"\r
+\r
+msgid "Enable Sandbox Testing"\r
+msgstr "Aktyvuoti testavimą"\r
+\r
+msgid "Enable this option if you want to do sandbox payment testing."\r
+msgstr "Aktyvuokite, jei norite testuoti mokėjimus."\r
+\r
+msgid "Enable/disable registration for free membership level"\r
+msgstr "Aktyvuokite / Išjunkite registraciją nemokamai narystei"\r
+\r
+msgid "Enter the Membership Level ID"\r
+msgstr "Įveskite narystės lygio ID"\r
+\r
+msgid "Example Content Protection Settings"\r
+msgstr "Pavyzdyniai turinio apsaugojimo nustatymai"\r
+\r
+msgid "Expired"\r
+msgstr "Nebegalioja"\r
+\r
+msgid "First Name"\r
+msgstr "Vardas"\r
+\r
+msgid "For All Pending Registrations"\r
+msgstr "Visos nepatvirtintoms registracijoms"\r
+\r
+msgid "Forgot Password"\r
+msgstr "Pamiršau slaptažodį"\r
+\r
+msgid "Free Membership Level ID"\r
+msgstr "Nemokamos narystės lygio ID"\r
+\r
+msgid "From Email Address"\r
+msgstr "Nuo el. pašto adresas"\r
+\r
+msgid "Gender"\r
+msgstr "Lytis"\r
+\r
+msgid "Gender field is invalid"\r
+msgstr "Lyties laukelio užpildytas neteisingai"\r
+\r
+msgid "General Settings"\r
+msgstr "Pagrindiniai nustatymai"\r
+\r
+msgid "Generate Code"\r
+msgstr "Generuoti kodą"\r
+\r
+msgid "Generate Registration Completion Link"\r
+msgstr "Generuoti registracijos baigimo nuorodą"\r
+\r
+msgid "Generate a Registration Completion link"\r
+msgstr "Generuoti registracijos baigimo nuorodą"\r
+\r
+msgid "Generate the \"Advanced Variables\" Code for your PayPal button"\r
+msgstr ""\r
+"Generuoti \n"\r
+"\"Advanced Variables\" \n"\r
+"kodą Paypal mygtukui"\r
+\r
+msgid "Hide Adminbar"\r
+msgstr "Slėpti Adminbar"\r
+\r
+msgid ""\r
+"Hint: The password should be at least seven characters long. To make it "\r
+"stronger, use upper and lower case letters, numbers and symbols like ! \" ? $ "\r
+"% ^ &amp; )."\r
+msgstr ""\r
+"! Slaptažodis turėtų būti bent iš 7 ženklų. Naudokite didžiąsias ir mažasias "\r
+"raides, skaičius bei simbolius tokius kaip \n"\r
+" ! \" ? $ % ^ &amp; "\r
+\r
+msgid "ID"\r
+msgstr "ID"\r
+\r
+msgid "Inactive"\r
+msgstr "Neaktyvus"\r
+\r
+msgid "Invalid User Name"\r
+msgstr "Vartotojo vardas neteisingas"\r
+\r
+msgid "Join Us"\r
+msgstr "Prisijunkite"\r
+\r
+msgid "Join Us Page URL"\r
+msgstr "Prisijungimo URL"\r
+\r
+msgid "Last Name"\r
+msgstr "Pavardė"\r
+\r
+msgctxt "Level"\r
+msgid "Add New"\r
+msgstr "Pridėti naują (lygį)"\r
+\r
+msgid "Logged Out Successfully."\r
+msgstr "Sėkmingai atsijungėte"\r
+\r
+msgid "Logged in as"\r
+msgstr "Prisjungęs kaip"\r
+\r
+msgid "Login"\r
+msgstr "Prisijungti"\r
+\r
+msgid "Login Page URL"\r
+msgstr "Prisijungimo URL"\r
+\r
+msgid "Logout"\r
+msgstr "Atsijungti"\r
+\r
+msgid "Manage Content Production"\r
+msgstr "Valdykite turinio produkciją"\r
+\r
+msgid "Member"\r
+msgstr "Narys"\r
+\r
+msgid "Member Login"\r
+msgstr "Narių prisijungimas"\r
+\r
+msgid "Member Since"\r
+msgstr "Narys nuo"\r
+\r
+msgid "Member since field is invalid"\r
+msgstr "Narys nuo laukelis neteisingas"\r
+\r
+msgid "Members"\r
+msgstr "Nariai"\r
+\r
+msgid "Membership"\r
+msgstr "Narystė"\r
+\r
+msgid "Membership Level"\r
+msgstr "Narystės lygis"\r
+\r
+msgid "Membership Level Couldn't be found."\r
+msgstr "Narystės lygis nerastas"\r
+\r
+msgid "Membership Level Creation Successful."\r
+msgstr "Narystės lygis sėkmingai sukurtas."\r
+\r
+msgid "Membership Level Name"\r
+msgstr "Narystės lygio pavadinimas"\r
+\r
+msgid "Membership Levels"\r
+msgstr "Narystės lygiai."\r
+\r
+msgid "Membership level"\r
+msgstr "Narystės lygis"\r
+\r
+msgid "New password has been sent to your email address."\r
+msgstr "Naujas slaptaždis išsiųstas į Jūsų el. paštą."\r
+\r
+msgid "No Expiry"\r
+msgstr "Nėra galiojimo"\r
+\r
+msgid "No Member found."\r
+msgstr "Toks narys nerastas"\r
+\r
+msgid "OR"\r
+msgstr "arba"\r
+\r
+msgid "Pages Settings"\r
+msgstr "Puslapio nustatymai"\r
+\r
+msgid "Password"\r
+msgstr "Slaptažodis"\r
+\r
+msgid "Password Empty or Invalid."\r
+msgstr "Slaptažodžio laukelis tuščias arba neteisingas"\r
+\r
+msgid "Password Reset"\r
+msgstr "Keisti slaptažodį"\r
+\r
+msgid "Password Reset Page URL"\r
+msgstr "Slaptažodžio keitimo nuoroda"\r
+\r
+msgid "Password is required"\r
+msgstr "Slaptažodis būtinas"\r
+\r
+msgid "Password mismatch"\r
+msgstr "Slaptažodžiai skirtingi"\r
+\r
+msgid "PayPal Integration Settings"\r
+msgstr "Paypal integravimo nustatymai"\r
+\r
+msgid "Pending"\r
+msgstr "Nepatvirtinta"\r
+\r
+msgid "Phone"\r
+msgstr "Tel numeris"\r
+\r
+msgid "Phone number is invalid"\r
+msgstr "Neteisingas tel numeris"\r
+\r
+msgid "Please"\r
+msgstr "Prašome"\r
+\r
+msgid "Please correct the following"\r
+msgstr "Ištaisykite "\r
+\r
+msgid "Please correct the following:"\r
+msgstr "Ištaisykite "\r
+\r
+msgid "Plugin Documentation"\r
+msgstr "Įskiepio dokumentai"\r
+\r
+msgid "Profile"\r
+msgstr "Profilis"\r
+\r
+msgid "Register"\r
+msgstr "Registruokitės"\r
+\r
+msgid "Registration"\r
+msgstr "Registracija"\r
+\r
+msgid "Registration Completion Links Will Appear Below:"\r
+msgstr "Registracijos baigimo nuoroda atsiras žemiau:"\r
+\r
+msgid "Registration Page URL"\r
+msgstr "Regsitracijos puslapio URL"\r
+\r
+msgid "Registration Successful."\r
+msgstr "Registracija sėkminga"\r
+\r
+msgid "Remember Me"\r
+msgstr "Prisiminti mane"\r
+\r
+msgid "Repeat Password"\r
+msgstr "Pakartoti slaptažodį"\r
+\r
+msgid "Reset Password"\r
+msgstr "Atkurti slaptaždį"\r
+\r
+msgid "Role"\r
+msgstr "Rolė"\r
+\r
+msgid "SWPM Login"\r
+msgstr "SWPM prisijungimas"\r
+\r
+msgid "Select the membership level that can access this content:"\r
+msgstr "Pasirinkite narystės lygį, kuris turės prieigą prie šio turinio:"\r
+\r
+msgid "Send Email to Member When Added via Admin Dashboard"\r
+msgstr ""\r
+"Siųskite el. laiška nariui, kai jis yra pridedamas per administracijos "\r
+"valdymo pultą"\r
+\r
+msgid "Send Notification To Admin"\r
+msgstr "Siųsti pranešimą administratoriui"\r
+\r
+msgid "Send Registration Reminder Email too"\r
+msgstr "Siųsti registracijos priminimą"\r
+\r
+msgid "Session Expired."\r
+msgstr "Sesija baigėsi"\r
+\r
+msgid "Settings"\r
+msgstr "Nustatymai"\r
+\r
+msgid "Simple Membership Protection options"\r
+msgstr "Simple Membership Protection nustatymai"\r
+\r
+msgid "Simple WP Membership Protection"\r
+msgstr "SWPM apsauga"\r
+\r
+msgid "Simple WP Membership::Members"\r
+msgstr "SWPM:Nariai"\r
+\r
+msgid "Simple WP Membership::Membership Levels"\r
+msgstr "SWPM:Narystės lygiai"\r
+\r
+msgid "Simple WP Membership::Settings"\r
+msgstr "SWPM:Nustatymai"\r
+\r
+msgid "State"\r
+msgstr "Savivaldybė"\r
+\r
+msgid "Street"\r
+msgstr "Gatvė"\r
+\r
+msgid "Strength indicator"\r
+msgstr "Sudėtingumo indikatorius"\r
+\r
+msgid "Submit"\r
+msgstr "Pateikti"\r
+\r
+msgid "Subscription Duration"\r
+msgstr "Prenumeratos trukmė"\r
+\r
+msgid "Subscription Starts"\r
+msgstr "Prenumerata prasideda"\r
+\r
+msgid "Subscription Valid For"\r
+msgstr "Prenumerata galioja"\r
+\r
+msgid "Subscription starts field is invalid"\r
+msgstr "Prenumeratos pradžios laukelis neteisingas"\r
+\r
+msgid "Subscriptoin duration must be > 0."\r
+msgstr "Prenumeratos trukmė turi būti daugiau > 0."\r
+\r
+msgid "Test & Debug Settings"\r
+msgstr "Testavimo ir Debug nustatymai"\r
+\r
+msgid "Update"\r
+msgstr "Atnaujinti"\r
+\r
+msgid "Updated Successfully."\r
+msgstr "Sėkmingai atnaujinta."\r
+\r
+msgid "User Name"\r
+msgstr "Vartotojo vardas"\r
+\r
+msgid "User Not Found."\r
+msgstr "Nėra tokio vartotojo."\r
+\r
+msgid "User name"\r
+msgstr "Vartotojo vardas"\r
+\r
+msgid "User name already exists."\r
+msgstr "Toks vartotojo vardas jau yra"\r
+\r
+msgid "User name is required"\r
+msgstr "Vartotojo vardas yra privalomas"\r
+\r
+msgid "Username"\r
+msgstr "Vartotojo vardas"\r
+\r
+msgid "WP Membership"\r
+msgstr "WP Narystė"\r
+\r
+msgid ""\r
+"WordPress shows an admin toolbar to the logged in users of the site. Check "\r
+"this box if you want to hide that admin toolbar in the fronend of your site."\r
+msgstr ""\r
+"WordPress rodo administracijos panelę prisijungusiems nariams. Uždėkite "\r
+"varnelę, jei nenorite, kad ji būtų rodoma."\r
+\r
+msgid "Wordpress account exists with given email. But given user name doesn't match."\r
+msgstr "Paskyra su tokiu el. paštu egzistuoja, tačiau nesutampa vartotojo vardai."\r
+\r
+msgid "Wordpress account exists with given user name. But given email doesn't match."\r
+msgstr ""\r
+"Toks vartotojo vardas jau yra užregistruotas. Tačiau nesutampa el. pašto "\r
+"adresai."\r
+\r
+msgid "You are logged in as:"\r
+msgstr "Esate prisijungęs kaip:"\r
+\r
+msgid ""\r
+"You can manually generate a registration completion link here and give it to "\r
+"your customer if they have missed the email that was automatically sent out "\r
+"to them after the payment."\r
+msgstr ""\r
+"Čia galite rankiniu būdu generuoti registracijos užbaigimo nuorodą ir duoti "\r
+"ją pirkėjams, jei jie negavo/ištrynė el. laišką, kuris buvo siųstas po "\r
+"apmokėjimo,  su registracijos nuoroda."\r
+\r
+msgid "Zipcode"\r
+msgstr "Pašto kodas"\r
+\r
+msgid "search"\r
+msgstr "ieškoti"\r
diff --git a/languages/swpm-mk_MK.mo b/languages/swpm-mk_MK.mo
new file mode 100644 (file)
index 0000000..4afc643
Binary files /dev/null and b/languages/swpm-mk_MK.mo differ
diff --git a/languages/swpm-mk_MK.po b/languages/swpm-mk_MK.po
new file mode 100644 (file)
index 0000000..5dcf328
--- /dev/null
@@ -0,0 +1,713 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: simple membership\n"
+"POT-Creation-Date: 2014-08-28 19:28+1000\n"
+"PO-Revision-Date: 2014-11-26 16:05+0100\n"
+"Last-Translator: Ivo Ivanov <ivo@arslamina.com>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.6.9\n"
+"X-Poedit-KeywordsList: __;_e\n"
+"X-Poedit-Basepath: .\n"
+"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
+"Language: mk_MK\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: classes/class.bAccessControl.php:23 classes/class.bAccessControl.php:40
+msgid "You are not allowed to view this content"
+msgstr "Не е дозволено да ја видите содржината"
+
+#: classes/class.bAccessControl.php:26 classes/class.bAccessControl.php:43
+msgid "You need to login to view this content. "
+msgstr "Потребно е да се најавите за да ја видите содржината."
+
+#: classes/class.bAdminRegistration.php:48
+#: classes/class.bFrontRegistration.php:64
+msgid "Registration Successful."
+msgstr "Регистрацијата е успешна."
+
+#: classes/class.bAdminRegistration.php:53
+#: classes/class.bAdminRegistration.php:73
+#: classes/class.bMembershipLevel.php:36 classes/class.bMembershipLevel.php:54
+msgid "Please correct the following:"
+msgstr "Ве молам поправете го следново:"
+
+#: classes/class.bAjax.php:16 classes/class.bAjax.php:28
+msgid "Aready taken"
+msgstr "Веќе постои"
+
+#: classes/class.bAjax.php:29
+msgid "Available"
+msgstr "Достапни"
+
+#: classes/class.bAuth.php:48 classes/class.bFrontRegistration.php:179
+msgid "User Not Found."
+msgstr "Корисникот не е најден."
+
+#: classes/class.bAuth.php:55
+msgid "Password Empty or Invalid."
+msgstr "Лозинката е празна или неважечка"
+
+#: classes/class.bAuth.php:79
+msgid "Account is inactive."
+msgstr "Сметката не е активна."
+
+#: classes/class.bAuth.php:89
+msgid "You are logged in as:"
+msgstr "Најавени сте како:"
+
+#: classes/class.bAuth.php:128
+msgid "Logged Out Successfully."
+msgstr "Успешно се одјавивте."
+
+#: classes/class.bAuth.php:170
+msgid "Session Expired."
+msgstr "Сесијата е истечена."
+
+#: classes/class.bAuth.php:179
+msgid "Invalid User Name"
+msgstr "Непостоечко корисничко име"
+
+#: classes/class.bAuth.php:187
+msgid "Bad Cookie Hash"
+msgstr "Лош Хаш на колачето"
+
+#: classes/class.bForm.php:26
+msgid ""
+"Wordpress account exists with given user name. But given email doesn't match."
+msgstr ""
+"Веќе постои Wordpress сметка со даденото корисничко име. Но дадената email "
+"адреса не се совпаѓа."
+
+#: classes/class.bForm.php:31
+msgid ""
+"Wordpress account exists with given email. But given user name doesn't match."
+msgstr ""
+"Веќе постои Wordpress сметка со дадената email адреса. Но даденото кориснико "
+"име не се совпаѓа."
+
+#: classes/class.bForm.php:40
+msgid "User name is required"
+msgstr "Корисничкото име е потребно"
+
+#: classes/class.bForm.php:49
+msgid "User name already exists."
+msgstr "Корисничкото име веќе постои"
+
+#: classes/class.bForm.php:72
+msgid "Password is required"
+msgstr "Потребна е лозинката"
+
+#: classes/class.bForm.php:79
+msgid "Password mismatch"
+msgstr "Лозинката не одговара"
+
+#: classes/class.bForm.php:95
+msgid "Email is required"
+msgstr "Потребна е email адреса"
+
+#: classes/class.bForm.php:99
+msgid "Email is invalid"
+msgstr "Email адресата не се совпаѓа"
+
+#: classes/class.bForm.php:112
+msgid "Email is already used."
+msgstr "Email адресата веќе се користи."
+
+#: classes/class.bForm.php:178
+msgid "Member since field is invalid"
+msgstr "Член од - полето е невалидно"
+
+#: classes/class.bForm.php:189
+msgid "Subscription starts field is invalid"
+msgstr "Полето за старт на претплатата е невалидно"
+
+#: classes/class.bForm.php:199
+msgid "Gender field is invalid"
+msgstr "Полето за пол е невалидно"
+
+#: classes/class.bForm.php:210
+msgid "Account state field is invalid"
+msgstr "Статусот на сметката е невалиден"
+
+#: classes/class.bFrontRegistration.php:64 classes/class.bSettings.php:326
+msgid "Please"
+msgstr "Ве молиме"
+
+#: classes/class.bFrontRegistration.php:64 classes/class.bSettings.php:326
+#: views/login.php:21
+msgid "Login"
+msgstr "Најави се"
+
+#: classes/class.bFrontRegistration.php:79
+#: classes/class.bFrontRegistration.php:158
+msgid "Please correct the following"
+msgstr "Ве молиме извршете поправка на следново"
+
+#: classes/class.bFrontRegistration.php:92
+msgid "Membership Level Couldn't be found."
+msgstr "Корисничкото ниво не е пронајдено."
+
+#: classes/class.bFrontRegistration.php:168
+msgid "Email Address Not Valid."
+msgstr "Email адресата е невалидна"
+
+#: classes/class.bFrontRegistration.php:199
+msgid "New password has been sent to your email address."
+msgstr "Нова лозинка е пратена на Вашата email адреса."
+
+#: classes/class.bLevelForm.php:31
+msgid "Subscriptoin duration must be > 0."
+msgstr "Времетраењето на претплатата мора да биде > 0. "
+
+#: classes/class.bMembers.php:7
+msgid "Member"
+msgstr "Член"
+
+#: classes/class.bMembers.php:8 classes/class.simple-wp-membership.php:467
+msgid "Members"
+msgstr "Членови"
+
+#: classes/class.bMembers.php:16 classes/class.bMembershipLevels.php:16
+msgid "ID"
+msgstr "ID"
+
+#: classes/class.bMembers.php:17 views/add.php:5 views/edit.php:4
+#: views/login.php:5
+msgid "User Name"
+msgstr "Корисничко име"
+
+#: classes/class.bMembers.php:18 views/add.php:21
+#: views/admin_member_form_common_part.php:2 views/edit.php:20
+msgid "First Name"
+msgstr "Име"
+
+#: classes/class.bMembers.php:19 views/add.php:25
+#: views/admin_member_form_common_part.php:6 views/edit.php:24
+msgid "Last Name"
+msgstr "Презиме"
+
+#: classes/class.bMembers.php:20 views/add.php:9 views/edit.php:8
+msgid "Email"
+msgstr "Email"
+
+#: classes/class.bMembers.php:21 classes/class.bMembershipLevels.php:8
+#: classes/class.bMembershipLevels.php:17 views/add.php:64
+#: views/admin_member_form_common_part.php:55 views/edit.php:52
+msgid "Membership Level"
+msgstr "Ниво на членство"
+
+#: classes/class.bMembers.php:22 views/admin_member_form_common_part.php:78
+msgid "Subscription Starts"
+msgstr "Претплатата почнува"
+
+#: classes/class.bMembers.php:23
+msgid "Account State"
+msgstr "Состојба на сметката"
+
+#: classes/class.bMembers.php:35 classes/class.bMembershipLevels.php:29
+msgid "Delete"
+msgstr "Избриши"
+
+#: classes/class.bMembers.php:100
+msgid "No Member found."
+msgstr "Членот не е пронајден."
+
+#: classes/class.bMembershipLevel.php:31
+msgid "Membership Level Creation Successful."
+msgstr "Создавањето на корисничкото ниво е успешно."
+
+#: classes/class.bMembershipLevel.php:50
+msgid "Updated Successfully."
+msgstr "Ажурирањето е успешно."
+
+#: classes/class.bMembershipLevels.php:9
+#: classes/class.simple-wp-membership.php:469
+msgid "Membership Levels"
+msgstr "Нивоа на членство"
+
+#: classes/class.bMembershipLevels.php:18
+msgid "Role"
+msgstr "Улога"
+
+#: classes/class.bMembershipLevels.php:19
+msgid "Subscription Valid For"
+msgstr "Преплатата е важечка до"
+
+#: classes/class.bSettings.php:28
+msgid "Plugin Documentation"
+msgstr "Документација за приклучоците"
+
+#: classes/class.bSettings.php:30
+msgid "General Settings"
+msgstr "Општи поставки"
+
+#: classes/class.bSettings.php:32
+msgid "Enable Free Membership"
+msgstr "Вклучи го Бесплатното Членство"
+
+#: classes/class.bSettings.php:35
+msgid "Enable/disable registration for free membership level"
+msgstr "Вклучи/исклучи ја регистрацијата за приклучокот за бесплатно членство"
+
+#: classes/class.bSettings.php:36
+msgid "Free Membership Level ID"
+msgstr "ИД на ниво за Бесплатно Членство"
+
+#: classes/class.bSettings.php:39
+msgid "Assign free membership level ID"
+msgstr "Доделете ID на нивото за слободно членство"
+
+#: classes/class.bSettings.php:40
+msgid "Hide Adminbar"
+msgstr "Скријте го Администраторскиот алатник"
+
+#: classes/class.bSettings.php:43
+msgid ""
+"WordPress shows an admin toolbar to the logged in users of the site. Check "
+"this box if you want to hide that admin toolbar in the fronend of your site."
+msgstr ""
+"WordPress прикажува администраторски алатник на најавените корисници на "
+"страницата. Селектирајте ја оваа рамка ако закате да го скриете "
+"администраторскиот алатник на интерфејсот на вашата страница."
+
+#: classes/class.bSettings.php:45
+msgid "Pages Settings"
+msgstr "Подесувања на Страниците"
+
+#: classes/class.bSettings.php:47
+msgid "Login Page URL"
+msgstr "URL за Страницата за Најавување"
+
+#: classes/class.bSettings.php:51
+msgid "Registration Page URL"
+msgstr "URL за Страницата за Регистрација"
+
+#: classes/class.bSettings.php:55
+msgid "Join Us Page URL"
+msgstr "URL за Приклучи се страницата"
+
+#: classes/class.bSettings.php:59
+msgid "Edit Profile Page URL"
+msgstr "URL за Страницата за Уредување на Профилот"
+
+#: classes/class.bSettings.php:63
+msgid "Password Reset Page URL"
+msgstr "URL за Страницата за Ресетирање на Лозинката"
+
+#: classes/class.bSettings.php:68
+msgid "Test & Debug Settings"
+msgstr "Подесувања за тестирање на Sandbox"
+
+#: classes/class.bSettings.php:74
+msgid "Enable Sandbox Testing"
+msgstr "Овозможи Sandbox Тестирање"
+
+#: classes/class.bSettings.php:77
+msgid "Enable this option if you want to do sandbox payment testing."
+msgstr ""
+"Селектирајте ја оваа опција ако сакате да ја тестирате sandbox опцијата за "
+"плаќање"
+
+#: classes/class.bSettings.php:90
+msgid "Email Misc. Settings"
+msgstr "Email Разновидни Подесувања"
+
+#: classes/class.bSettings.php:92
+msgid "From Email Address"
+msgstr "Од Email Адреса"
+
+#: classes/class.bSettings.php:97
+msgid "Email Settings (Prompt to Complete Registration )"
+msgstr "Email Поставувања (Известување за Комплетирање на Регистрацијата)"
+
+#: classes/class.bSettings.php:99 classes/class.bSettings.php:110
+#: classes/class.bSettings.php:129
+msgid "Email Subject"
+msgstr "Тема на Email"
+
+#: classes/class.bSettings.php:103 classes/class.bSettings.php:114
+#: classes/class.bSettings.php:133
+msgid "Email Body"
+msgstr "Тело на Email"
+
+#: classes/class.bSettings.php:108
+msgid "Email Settings (Registration Complete)"
+msgstr "Email Подесувања (Регистрацијата е Комплетирана)"
+
+#: classes/class.bSettings.php:118
+msgid "Send Notification To Admin"
+msgstr "Прати Известување До Администраторот"
+
+#: classes/class.bSettings.php:122
+msgid "Send Email to Member When Added via Admin Dashboard"
+msgstr ""
+"Прати Email порака на Членот кој е додаден преку Администраторската табла"
+
+#: classes/class.bSettings.php:127
+msgid " Email Settings (Account Upgrade Notification)"
+msgstr "Email Подесувања (Известување за Надградба на Сметката)"
+
+#: classes/class.bSettings.php:326
+msgid "Not a Member?"
+msgstr "Не сте член?"
+
+#: classes/class.bSettings.php:326 views/login.php:30
+msgid "Join Us"
+msgstr "Придружете ни се"
+
+#: classes/class.bUtils.php:32 views/admin_member_form_common_part.php:66
+msgid "Active"
+msgstr "Активен"
+
+#: classes/class.bUtils.php:33 views/admin_member_form_common_part.php:67
+msgid "Inactive"
+msgstr "Неактивен"
+
+#: classes/class.bUtils.php:34 views/admin_member_form_common_part.php:68
+msgid "Pending"
+msgstr "Во тек"
+
+#: classes/class.bUtils.php:35 views/admin_member_form_common_part.php:69
+msgid "Expired"
+msgstr "Истечена"
+
+#: classes/class.bUtils.php:225
+msgid "Never"
+msgstr "Никогаш"
+
+#: classes/class.miscUtils.php:51
+msgid "Registration"
+msgstr "Регистрација"
+
+#: classes/class.miscUtils.php:74
+msgid "Member Login"
+msgstr "Најавување на членовите"
+
+#: classes/class.miscUtils.php:97
+msgid "Profile"
+msgstr "Профил"
+
+#: classes/class.miscUtils.php:120
+msgid "Password Reset"
+msgstr "Ресетирање на лозинката"
+
+#: classes/class.simple-wp-membership.php:178
+msgid "You are not logged in."
+msgstr "Не сте најавени."
+
+#: classes/class.simple-wp-membership.php:209
+msgid "Simple WP Membership Protection"
+msgstr "Едноставна WP Заштита за Членството"
+
+#: classes/class.simple-wp-membership.php:222
+msgid "Simple Membership Protection options"
+msgstr "Подесувања за Заштитата за Слободно Членство"
+
+#: classes/class.simple-wp-membership.php:238
+msgid "Do you want to protect this content?"
+msgstr "Дали сакате да ја заштитите оваа содржина?"
+
+#: classes/class.simple-wp-membership.php:243
+msgid "Select the membership level that can access this content:"
+msgstr "Изберете го нивото на членство што има пристап до оваа содржина"
+
+#: classes/class.simple-wp-membership.php:375
+msgid "Display SWPM Login."
+msgstr "Прикажи го SWPM најавувањето."
+
+#: classes/class.simple-wp-membership.php:377
+msgid "SWPM Login"
+msgstr "SWPM Најавување"
+
+#: classes/class.simple-wp-membership.php:464
+msgid "WP Membership"
+msgstr "WP Членство"
+
+#: classes/class.simple-wp-membership.php:471
+msgid "Settings"
+msgstr "Подесувања"
+
+#: views/add.php:13 views/admin_member_form_common_part.php:45
+#: views/edit.php:12 views/login.php:11
+msgid "Password"
+msgstr "Лозинка"
+
+#: views/add.php:17 views/edit.php:16
+msgid "Repeat Password"
+msgstr "Повторете ја лозинката"
+
+#: views/add.php:29 views/admin_member_form_common_part.php:10
+msgid "Gender"
+msgstr "Пол"
+
+#: views/add.php:36 views/admin_member_form_common_part.php:17
+#: views/edit.php:28
+msgid "Phone"
+msgstr "Телефон"
+
+#: views/add.php:40 views/admin_member_form_common_part.php:21
+#: views/edit.php:32
+msgid "Street"
+msgstr "Улица"
+
+#: views/add.php:44 views/admin_member_form_common_part.php:25
+#: views/edit.php:36
+msgid "City"
+msgstr "Град"
+
+#: views/add.php:48 views/admin_member_form_common_part.php:29
+#: views/edit.php:40
+msgid "State"
+msgstr "Држава"
+
+#: views/add.php:52 views/admin_member_form_common_part.php:33
+#: views/edit.php:44
+msgid "Zipcode"
+msgstr "Поштенски код"
+
+#: views/add.php:56 views/admin_member_form_common_part.php:37
+#: views/edit.php:48
+msgid "Country"
+msgstr "Држава"
+
+#: views/add.php:60 views/admin_member_form_common_part.php:41
+msgid "Company"
+msgstr "Компанија"
+
+#: views/add.php:71
+msgid "Register"
+msgstr "Регистрирај"
+
+#: views/admin_add.php:6
+msgid "Add Member"
+msgstr "Додади Член"
+
+#: views/admin_add.php:7
+msgid "Create a brand new user and add it to this site."
+msgstr "Креирај сосема нов корисник и додади го на оваа страница."
+
+#: views/admin_add.php:11
+msgid "User name"
+msgstr "Корисничко име"
+
+#: views/admin_add.php:11 views/admin_add.php:15 views/admin_add_level.php:11
+#: views/admin_add_level.php:15 views/admin_add_level.php:19
+#: views/admin_edit.php:9 views/admin_edit.php:13
+#: views/admin_edit_level.php:10 views/admin_edit_level.php:14
+#: views/admin_edit_level.php:18
+msgid "(required)"
+msgstr "(потребно)"
+
+#: views/admin_add.php:15 views/admin_edit.php:13
+msgid "E-mail"
+msgstr "E-mail адреса"
+
+#: views/admin_add.php:19
+msgid "Add New Member "
+msgstr "Додади Нов Член"
+
+#: views/admin_add_level.php:6
+msgid "Create new membership level."
+msgstr "Креирај Ново Ниво на Членство."
+
+#: views/admin_add_level.php:11 views/admin_edit_level.php:10
+msgid "Membership Level Name"
+msgstr "Има на Нивото на Членство"
+
+#: views/admin_add_level.php:15 views/admin_edit_level.php:14
+msgid "Default WordPress Role"
+msgstr "Стандрадна WordPress Улога"
+
+#: views/admin_add_level.php:19 views/admin_edit_level.php:18
+msgid "Subscription Duration"
+msgstr "Времетраење на Претплатата"
+
+#: views/admin_add_level.php:26 views/admin_edit_level.php:27
+msgid "No Expiry"
+msgstr "Не Завршува."
+
+#: views/admin_add_level.php:55
+msgid "Add New Membership Level "
+msgstr "Додади Ново Ниво на Членство."
+
+#: views/admin_edit.php:5
+msgid "Edit Member"
+msgstr "Уреди го Членот"
+
+#: views/admin_edit.php:6
+msgid "Edit existing member details."
+msgstr "Уреди ги детаљите за постоечки член"
+
+#: views/admin_edit.php:9
+msgid "Username"
+msgstr "Корисничко Име"
+
+#: views/admin_edit.php:18
+msgid "Edit User "
+msgstr "Уреди го Корисникот"
+
+#: views/admin_edit_level.php:5
+msgid "Edit membership level"
+msgstr "Уреди го Нивото на Членство"
+
+#: views/admin_edit_level.php:6
+msgid "Edit membership level."
+msgstr "Уреди го Нивото на Членство."
+
+#: views/admin_edit_level.php:54
+msgid "Edit Membership Level "
+msgstr "Уреди го Нивото на Членство"
+
+#: views/admin_members.php:2
+msgid "Simple WP Membership::Members"
+msgstr "Едноставно WP Членство::Членови"
+
+#: views/admin_members.php:3 views/admin_members.php:19
+#: views/admin_membership_levels.php:21
+msgid "Add New"
+msgstr "Додади нов"
+
+#: views/admin_members.php:9 views/admin_membership_levels.php:11
+msgid "search"
+msgstr "барај"
+
+#: views/admin_membership_levels.php:3
+msgid "Simple WP Membership::Membership Levels"
+msgstr "Едноставно WP Членство::Нивоа на Членство"
+
+#: views/admin_membership_level_menu.php:2
+msgid "Membership level"
+msgstr "Ниво на Членство"
+
+#: views/admin_membership_level_menu.php:3
+msgid "Manage Content Production"
+msgstr "Управувај со Производството на Содржина"
+
+#: views/admin_membership_manage.php:17
+msgid "Example Content Protection Settings"
+msgstr "Пример за Параметри за Заштита на Содржината"
+
+#: views/admin_member_form_common_part.php:45
+msgid "(twice, required)"
+msgstr "(двапати, потребно)"
+
+#: views/admin_member_form_common_part.php:50
+msgid "Strength indicator"
+msgstr "Индикатор на Јачина"
+
+#: views/admin_member_form_common_part.php:51
+msgid ""
+"Hint: The password should be at least seven characters long. To make it "
+"stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
+"$ % ^ &amp; )."
+msgstr ""
+"Совет: Лозинката треба да биде најмалку седум карактери долга. За да ја "
+"направите појака, користете големи и мали букви, броеви и симболи како ! "
+"\" ? $ % ^ &amp; )."
+
+#: views/admin_member_form_common_part.php:64 views/loggedin.php:7
+#: views/login_widget_logged.php:6
+msgid "Account Status"
+msgstr "Статус на Сметката"
+
+#: views/admin_member_form_common_part.php:74
+msgid "Member Since"
+msgstr "Член Од"
+
+#: views/admin_payment_settings.php:2 views/admin_settings.php:2
+#: views/admin_tools_settings.php:2
+msgid "Simple WP Membership::Settings"
+msgstr "Едноставно WP Членство::Подесувања"
+
+#: views/admin_payment_settings.php:33
+msgid "PayPal Integration Settings"
+msgstr "Подесувања за Интеграција со PayPal"
+
+#: views/admin_payment_settings.php:36
+msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
+msgstr "Генерирај го \"Напредни Променливи\" Кодот за твоето PayPal копче"
+
+#: views/admin_payment_settings.php:39
+msgid "Enter the Membership Level ID"
+msgstr "Внеси го ID за Нивото на Членство"
+
+#: views/admin_payment_settings.php:41
+msgid "Generate Code"
+msgstr "Генерирај Код"
+
+#: views/admin_tools_settings.php:9
+msgid "Generate a Registration Completion link"
+msgstr "Генерирај линк за Комплетирање на регистрацијата"
+
+#: views/admin_tools_settings.php:12
+msgid ""
+"You can manually generate a registration completion link here and give it to "
+"your customer if they have missed the email that was automatically sent out "
+"to them after the payment."
+msgstr ""
+"Ти можеш рачно да генерираш линк за комплетирање на регистрацијата и да го "
+"дадеш на твоите корисници ако тие го пропуштиле emailот што им бил пратен "
+"веднаш по плаќањето."
+
+#: views/admin_tools_settings.php:17
+msgid "Generate Registration Completion Link"
+msgstr "Генерирај линк за комплетирање на регистрацијата"
+
+#: views/admin_tools_settings.php:20
+msgid "OR"
+msgstr "ИЛИ"
+
+#: views/admin_tools_settings.php:21
+msgid "For All Pending Registrations"
+msgstr "За Сите Регистрации што се во тек"
+
+#: views/admin_tools_settings.php:24
+msgid "Registration Completion Links Will Appear Below:"
+msgstr "Линковите за Комплетирање на Регистрацијата ќе се појават подолу"
+
+#: views/admin_tools_settings.php:31
+msgid "Send Registration Reminder Email too"
+msgstr "Прати Email Потсетник за Регистрација исто така"
+
+#: views/admin_tools_settings.php:34
+msgid "Submit"
+msgstr "Внеси"
+
+#: views/edit.php:58
+msgid "Update"
+msgstr "Надгради"
+
+#: views/forgot_password.php:5
+msgid "Email Address"
+msgstr "Email адреса"
+
+#: views/forgot_password.php:12
+msgid "Reset Password"
+msgstr "Ресетирај ја Лозинката"
+
+#: views/loggedin.php:3 views/login_widget_logged.php:3
+msgid "Logged in as"
+msgstr "Најавени сте како"
+
+#: views/loggedin.php:11 views/login_widget_logged.php:9
+msgid "Membership"
+msgstr "Членство"
+
+#: views/loggedin.php:15 views/login_widget_logged.php:12
+msgid "Account Expiry"
+msgstr "Сметката Истекува"
+
+#: views/loggedin.php:19 views/login_widget_logged.php:16
+msgid "Logout"
+msgstr "Одјави се"
+
+#: views/login.php:17
+msgid "Remember Me"
+msgstr "Запомни Ме"
+
+#: views/login.php:26
+msgid "Forgot Password"
+msgstr "Ја заборавивте лозинката"
diff --git a/languages/swpm-nl_NL.mo b/languages/swpm-nl_NL.mo
new file mode 100644 (file)
index 0000000..4c680d9
Binary files /dev/null and b/languages/swpm-nl_NL.mo differ
diff --git a/languages/swpm-nl_NL.po b/languages/swpm-nl_NL.po
new file mode 100644 (file)
index 0000000..04e6c83
--- /dev/null
@@ -0,0 +1,709 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: simple membership\n"
+"POT-Creation-Date: 2014-08-28 19:28+1000\n"
+"PO-Revision-Date: 2015-01-13 22:29+0100\n"
+"Last-Translator: \n"
+"Language-Team: Henk Rostohar <h.g.rostohar@gmail.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.7.3\n"
+"X-Poedit-KeywordsList: __;_e\n"
+"X-Poedit-Basepath: .\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Language: nl_NL\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: classes/class.bAccessControl.php:23 classes/class.bAccessControl.php:40
+msgid "You are not allowed to view this content"
+msgstr "U bent niet gemachtigd deze inhoud te bekijken."
+
+#: classes/class.bAccessControl.php:26 classes/class.bAccessControl.php:43
+msgid "You need to login to view this content. "
+msgstr "U moet inloggen om deze inhoud te kunnen bekijken."
+
+#: classes/class.bAdminRegistration.php:48
+#: classes/class.bFrontRegistration.php:64
+msgid "Registration Successful."
+msgstr "Registratie is gelukt."
+
+#: classes/class.bAdminRegistration.php:53
+#: classes/class.bAdminRegistration.php:73
+#: classes/class.bMembershipLevel.php:36 classes/class.bMembershipLevel.php:54
+msgid "Please correct the following:"
+msgstr "Corrigeer het volgende:"
+
+#: classes/class.bAjax.php:16 classes/class.bAjax.php:28
+msgid "Aready taken"
+msgstr "Reeds uitgevoerd"
+
+#: classes/class.bAjax.php:29
+msgid "Available"
+msgstr "Beschikbaar"
+
+#: classes/class.bAuth.php:48 classes/class.bFrontRegistration.php:179
+msgid "User Not Found."
+msgstr "Gebruiker onbekend."
+
+#: classes/class.bAuth.php:55
+msgid "Password Empty or Invalid."
+msgstr "Password is niet ingevuld of ongeldig."
+
+#: classes/class.bAuth.php:79
+msgid "Account is inactive."
+msgstr "Dit account is niet actief."
+
+#: classes/class.bAuth.php:89
+msgid "You are logged in as:"
+msgstr "U bent ingelogd als:"
+
+#: classes/class.bAuth.php:128
+msgid "Logged Out Successfully."
+msgstr "U bent met succes uitgelogd."
+
+#: classes/class.bAuth.php:170
+msgid "Session Expired."
+msgstr "Uw sessie is verlopen."
+
+#: classes/class.bAuth.php:179
+msgid "Invalid User Name"
+msgstr "Ongeldige gebruikersnaam"
+
+#: classes/class.bAuth.php:187
+msgid "Bad Cookie Hash"
+msgstr "Verkeerde Cookie hash"
+
+#: classes/class.bForm.php:26
+msgid ""
+"Wordpress account exists with given user name. But given email doesn't match."
+msgstr ""
+"Het Wordpress account met deze gebruikersnaam bestaat. Maar het email adres "
+"klopt niet. "
+
+#: classes/class.bForm.php:31
+msgid ""
+"Wordpress account exists with given email. But given user name doesn't match."
+msgstr ""
+"Dit Wordpress account met dit email adres bestaat maar de gebruikersnaam "
+"klopt niet."
+
+#: classes/class.bForm.php:40
+msgid "User name is required"
+msgstr "De gebruikersnaam is vereist."
+
+#: classes/class.bForm.php:49
+msgid "User name already exists."
+msgstr "Deze gebruikersnaam bestaat reeds."
+
+#: classes/class.bForm.php:72
+msgid "Password is required"
+msgstr "Password is vereist"
+
+#: classes/class.bForm.php:79
+msgid "Password mismatch"
+msgstr "Password klopt niet"
+
+#: classes/class.bForm.php:95
+msgid "Email is required"
+msgstr "Email adres is vereist"
+
+#: classes/class.bForm.php:99
+msgid "Email is invalid"
+msgstr "Email adres is niet geldig"
+
+#: classes/class.bForm.php:112
+msgid "Email is already used."
+msgstr "Email adres is al in gebruik."
+
+#: classes/class.bForm.php:178
+msgid "Member since field is invalid"
+msgstr "Lid sinds veld is ongeldig"
+
+#: classes/class.bForm.php:189
+msgid "Subscription starts field is invalid"
+msgstr "Inschrijving start veld is ongeldig"
+
+#: classes/class.bForm.php:199
+msgid "Gender field is invalid"
+msgstr "Geslacht veld is ongeldig"
+
+#: classes/class.bForm.php:210
+msgid "Account state field is invalid"
+msgstr "Account status veld is ongeldig"
+
+#: classes/class.bFrontRegistration.php:64 classes/class.bSettings.php:326
+msgid "Please"
+msgstr "Alstublieft"
+
+#: classes/class.bFrontRegistration.php:64 classes/class.bSettings.php:326
+#: views/login.php:21
+msgid "Login"
+msgstr "Login"
+
+#: classes/class.bFrontRegistration.php:79
+#: classes/class.bFrontRegistration.php:158
+msgid "Please correct the following"
+msgstr "Corrigeer het volgende"
+
+#: classes/class.bFrontRegistration.php:92
+msgid "Membership Level Couldn't be found."
+msgstr "Lidmaatschap niveau kon niet worden gevonden."
+
+#: classes/class.bFrontRegistration.php:168
+msgid "Email Address Not Valid."
+msgstr "Email adres is ongeldig."
+
+#: classes/class.bFrontRegistration.php:199
+msgid "New password has been sent to your email address."
+msgstr "Een nieuw password is naar uw email adres verzonden."
+
+#: classes/class.bLevelForm.php:31
+msgid "Subscriptoin duration must be > 0."
+msgstr "Duur van lidmaatschap moet groter zijn dan 0."
+
+#: classes/class.bMembers.php:7
+msgid "Member"
+msgstr "Lid"
+
+#: classes/class.bMembers.php:8 classes/class.simple-wp-membership.php:467
+msgid "Members"
+msgstr "Leden"
+
+#: classes/class.bMembers.php:16 classes/class.bMembershipLevels.php:16
+msgid "ID"
+msgstr "ID"
+
+#: classes/class.bMembers.php:17 views/add.php:5 views/edit.php:4
+#: views/login.php:5
+msgid "User Name"
+msgstr "Gebruikersnaam"
+
+#: classes/class.bMembers.php:18 views/add.php:21
+#: views/admin_member_form_common_part.php:2 views/edit.php:20
+msgid "First Name"
+msgstr "Voornaam"
+
+#: classes/class.bMembers.php:19 views/add.php:25
+#: views/admin_member_form_common_part.php:6 views/edit.php:24
+msgid "Last Name"
+msgstr "Achternaam"
+
+#: classes/class.bMembers.php:20 views/add.php:9 views/edit.php:8
+msgid "Email"
+msgstr "Email adres"
+
+#: classes/class.bMembers.php:21 classes/class.bMembershipLevels.php:8
+#: classes/class.bMembershipLevels.php:17 views/add.php:64
+#: views/admin_member_form_common_part.php:55 views/edit.php:52
+msgid "Membership Level"
+msgstr "Lidmaatschap niveau"
+
+#: classes/class.bMembers.php:22 views/admin_member_form_common_part.php:78
+msgid "Subscription Starts"
+msgstr "Inschrijving start"
+
+#: classes/class.bMembers.php:23
+msgid "Account State"
+msgstr "Account status"
+
+#: classes/class.bMembers.php:35 classes/class.bMembershipLevels.php:29
+msgid "Delete"
+msgstr "Verwijder"
+
+#: classes/class.bMembers.php:100
+msgid "No Member found."
+msgstr "Geen lid gevonden"
+
+#: classes/class.bMembershipLevel.php:31
+msgid "Membership Level Creation Successful."
+msgstr "Lidmaatschap niveau met succes aangemaakt."
+
+#: classes/class.bMembershipLevel.php:50
+msgid "Updated Successfully."
+msgstr "Succesvolle Update"
+
+#: classes/class.bMembershipLevels.php:9
+#: classes/class.simple-wp-membership.php:469
+msgid "Membership Levels"
+msgstr "Lidmaatschap niveaus"
+
+#: classes/class.bMembershipLevels.php:18
+msgid "Role"
+msgstr "Rol"
+
+#: classes/class.bMembershipLevels.php:19
+msgid "Subscription Valid For"
+msgstr "Inschrijving geldig voor"
+
+#: classes/class.bSettings.php:28
+msgid "Plugin Documentation"
+msgstr "Plugin Documentatie"
+
+#: classes/class.bSettings.php:30
+msgid "General Settings"
+msgstr "Algemene instellingen"
+
+#: classes/class.bSettings.php:32
+msgid "Enable Free Membership"
+msgstr "Inschakelen gratis Lidmaatschap"
+
+#: classes/class.bSettings.php:35
+msgid "Enable/disable registration for free membership level"
+msgstr "Inschakelen/uitschakelen van registratie voor gratis Lidmaatschap"
+
+#: classes/class.bSettings.php:36
+msgid "Free Membership Level ID"
+msgstr "Gratis Lidmaatschap Niveau ID"
+
+#: classes/class.bSettings.php:39
+msgid "Assign free membership level ID"
+msgstr "Toewijzen gratis Lidmaatschap Niveau ID"
+
+#: classes/class.bSettings.php:40
+msgid "Hide Adminbar"
+msgstr "Verberg de adminbalk"
+
+#: classes/class.bSettings.php:43
+msgid ""
+"WordPress shows an admin toolbar to the logged in users of the site. Check "
+"this box if you want to hide that admin toolbar in the fronend of your site."
+msgstr ""
+"Wordpress toont aan de ingelogde gebruikers een adminbalk. Vink dit hokje "
+"aan als je de adminbalk in het frontend van je website wilt verbergen."
+
+#: classes/class.bSettings.php:45
+msgid "Pages Settings"
+msgstr "Pagina instellingen"
+
+#: classes/class.bSettings.php:47
+msgid "Login Page URL"
+msgstr "Login pagina URL"
+
+#: classes/class.bSettings.php:51
+msgid "Registration Page URL"
+msgstr "Registratie pagina URL"
+
+#: classes/class.bSettings.php:55
+msgid "Join Us Page URL"
+msgstr "Join Us pagina URL"
+
+#: classes/class.bSettings.php:59
+msgid "Edit Profile Page URL"
+msgstr "Wijzig Profiel pagina URL"
+
+#: classes/class.bSettings.php:63
+msgid "Password Reset Page URL"
+msgstr "Password Reset pagina URL"
+
+#: classes/class.bSettings.php:68
+msgid "Test & Debug Settings"
+msgstr "Test & Debug instellingen"
+
+#: classes/class.bSettings.php:74
+msgid "Enable Sandbox Testing"
+msgstr "Sandbox Testen inschakelen"
+
+#: classes/class.bSettings.php:77
+msgid "Enable this option if you want to do sandbox payment testing."
+msgstr "Schakel deze optie in als je sandbox testbetalingen wilt uitvoeren."
+
+#: classes/class.bSettings.php:90
+msgid "Email Misc. Settings"
+msgstr "Diverse email instellingen"
+
+#: classes/class.bSettings.php:92
+msgid "From Email Address"
+msgstr "Van Email Adres"
+
+#: classes/class.bSettings.php:97
+msgid "Email Settings (Prompt to Complete Registration )"
+msgstr "Email instellingen (Invullen om de registratie te voltooien)"
+
+#: classes/class.bSettings.php:99 classes/class.bSettings.php:110
+#: classes/class.bSettings.php:129
+msgid "Email Subject"
+msgstr "Email onderwerp"
+
+#: classes/class.bSettings.php:103 classes/class.bSettings.php:114
+#: classes/class.bSettings.php:133
+msgid "Email Body"
+msgstr "Email Body"
+
+#: classes/class.bSettings.php:108
+msgid "Email Settings (Registration Complete)"
+msgstr "Email instellingen (Registratie voltooid)"
+
+#: classes/class.bSettings.php:118
+msgid "Send Notification To Admin"
+msgstr "Stuur een bericht naar de beheerder"
+
+#: classes/class.bSettings.php:122
+msgid "Send Email to Member When Added via Admin Dashboard"
+msgstr "Stuur een email naar het aangemelde lid via het beheerders dashboard"
+
+#: classes/class.bSettings.php:127
+msgid " Email Settings (Account Upgrade Notification)"
+msgstr "Email instellingen (Bericht van Account Upgrade)"
+
+#: classes/class.bSettings.php:326
+msgid "Not a Member?"
+msgstr "Geen lid?"
+
+#: classes/class.bSettings.php:326 views/login.php:30
+msgid "Join Us"
+msgstr "Join Us"
+
+#: classes/class.bUtils.php:32 views/admin_member_form_common_part.php:66
+msgid "Active"
+msgstr "Actief"
+
+#: classes/class.bUtils.php:33 views/admin_member_form_common_part.php:67
+msgid "Inactive"
+msgstr "Niet actief"
+
+#: classes/class.bUtils.php:34 views/admin_member_form_common_part.php:68
+msgid "Pending"
+msgstr "In afwachting"
+
+#: classes/class.bUtils.php:35 views/admin_member_form_common_part.php:69
+msgid "Expired"
+msgstr "Verlopen"
+
+#: classes/class.bUtils.php:225
+msgid "Never"
+msgstr "Nooit"
+
+#: classes/class.miscUtils.php:51
+msgid "Registration"
+msgstr "Registratie"
+
+#: classes/class.miscUtils.php:74
+msgid "Member Login"
+msgstr "Leden login"
+
+#: classes/class.miscUtils.php:97
+msgid "Profile"
+msgstr "Profiel"
+
+#: classes/class.miscUtils.php:120
+msgid "Password Reset"
+msgstr "Password resetten"
+
+#: classes/class.simple-wp-membership.php:178
+msgid "You are not logged in."
+msgstr "U bent niet ingelogd."
+
+#: classes/class.simple-wp-membership.php:209
+msgid "Simple WP Membership Protection"
+msgstr "Simple WP Membership afscherming"
+
+#: classes/class.simple-wp-membership.php:222
+msgid "Simple Membership Protection options"
+msgstr "Simple Membership Afscherm opties"
+
+#: classes/class.simple-wp-membership.php:238
+msgid "Do you want to protect this content?"
+msgstr "Wil je deze inhoud verbergen?"
+
+#: classes/class.simple-wp-membership.php:243
+msgid "Select the membership level that can access this content:"
+msgstr "Selecteer de Lidmaatschap niveaus die toegang hebben tot deze inhoud:"
+
+#: classes/class.simple-wp-membership.php:375
+msgid "Display SWPM Login."
+msgstr "Toon SWPM login"
+
+#: classes/class.simple-wp-membership.php:377
+msgid "SWPM Login"
+msgstr "SWPM Login"
+
+#: classes/class.simple-wp-membership.php:464
+msgid "WP Membership"
+msgstr "WP Lidmaatschap"
+
+#: classes/class.simple-wp-membership.php:471
+msgid "Settings"
+msgstr "Instellingen"
+
+#: views/add.php:13 views/admin_member_form_common_part.php:45
+#: views/edit.php:12 views/login.php:11
+msgid "Password"
+msgstr "Password"
+
+#: views/add.php:17 views/edit.php:16
+msgid "Repeat Password"
+msgstr "Herhaal password"
+
+#: views/add.php:29 views/admin_member_form_common_part.php:10
+msgid "Gender"
+msgstr "Geslacht"
+
+#: views/add.php:36 views/admin_member_form_common_part.php:17
+#: views/edit.php:28
+msgid "Phone"
+msgstr "Telefoon"
+
+#: views/add.php:40 views/admin_member_form_common_part.php:21
+#: views/edit.php:32
+msgid "Street"
+msgstr "Straat"
+
+#: views/add.php:44 views/admin_member_form_common_part.php:25
+#: views/edit.php:36
+msgid "City"
+msgstr "Plaats"
+
+#: views/add.php:48 views/admin_member_form_common_part.php:29
+#: views/edit.php:40
+msgid "State"
+msgstr "Provincie"
+
+#: views/add.php:52 views/admin_member_form_common_part.php:33
+#: views/edit.php:44
+msgid "Zipcode"
+msgstr "Postcode"
+
+#: views/add.php:56 views/admin_member_form_common_part.php:37
+#: views/edit.php:48
+msgid "Country"
+msgstr "Land"
+
+#: views/add.php:60 views/admin_member_form_common_part.php:41
+msgid "Company"
+msgstr "Bedrijf"
+
+#: views/add.php:71
+msgid "Register"
+msgstr "Registreer"
+
+#: views/admin_add.php:6
+msgid "Add Member"
+msgstr "Voeg een lid toe"
+
+#: views/admin_add.php:7
+msgid "Create a brand new user and add it to this site."
+msgstr "Maak een nieuwe gebruiker en voeg deze toe aan deze webste."
+
+#: views/admin_add.php:11
+msgid "User name"
+msgstr "Gebruikersnaam"
+
+#: views/admin_add.php:11 views/admin_add.php:15 views/admin_add_level.php:11
+#: views/admin_add_level.php:15 views/admin_add_level.php:19
+#: views/admin_edit.php:9 views/admin_edit.php:13
+#: views/admin_edit_level.php:10 views/admin_edit_level.php:14
+#: views/admin_edit_level.php:18
+msgid "(required)"
+msgstr "(vereist)"
+
+#: views/admin_add.php:15 views/admin_edit.php:13
+msgid "E-mail"
+msgstr "E-mail"
+
+#: views/admin_add.php:19
+msgid "Add New Member "
+msgstr "Voeg een nieuw lid toe"
+
+#: views/admin_add_level.php:6
+msgid "Create new membership level."
+msgstr "Maak een nieuw Lidmaatschap niveau"
+
+#: views/admin_add_level.php:11 views/admin_edit_level.php:10
+msgid "Membership Level Name"
+msgstr "Lidmaatschap Niveau Naam"
+
+#: views/admin_add_level.php:15 views/admin_edit_level.php:14
+msgid "Default WordPress Role"
+msgstr "Default WordPress Role"
+
+#: views/admin_add_level.php:19 views/admin_edit_level.php:18
+msgid "Subscription Duration"
+msgstr "Inschrijftermijn"
+
+#: views/admin_add_level.php:26 views/admin_edit_level.php:27
+msgid "No Expiry"
+msgstr "Verloopt niet"
+
+#: views/admin_add_level.php:55
+msgid "Add New Membership Level "
+msgstr "Voeg een nieuw lidmaatschap niveau toe"
+
+#: views/admin_edit.php:5
+msgid "Edit Member"
+msgstr "Wijzig lid"
+
+#: views/admin_edit.php:6
+msgid "Edit existing member details."
+msgstr "Wijzig gegevens bestaand lid."
+
+#: views/admin_edit.php:9
+msgid "Username"
+msgstr "Gebruikersnaam"
+
+#: views/admin_edit.php:18
+msgid "Edit User "
+msgstr "Wijzig gebruiker"
+
+#: views/admin_edit_level.php:5
+msgid "Edit membership level"
+msgstr "Wijzig  lidmaatschap niveau"
+
+#: views/admin_edit_level.php:6
+msgid "Edit membership level."
+msgstr "Wijzig  lidmaatschap niveau."
+
+#: views/admin_edit_level.php:54
+msgid "Edit Membership Level "
+msgstr "Wijzig  lidmaatschap niveau"
+
+#: views/admin_members.php:2
+msgid "Simple WP Membership::Members"
+msgstr "Simple WP Membership::Leden"
+
+#: views/admin_members.php:3 views/admin_members.php:19
+#: views/admin_membership_levels.php:21
+msgid "Add New"
+msgstr "Voeg nieuw toe"
+
+#: views/admin_members.php:9 views/admin_membership_levels.php:11
+msgid "search"
+msgstr "zoeken"
+
+#: views/admin_membership_levels.php:3
+msgid "Simple WP Membership::Membership Levels"
+msgstr "Simple WP Membership::Lidmaatschap niveaus"
+
+#: views/admin_membership_level_menu.php:2
+msgid "Membership level"
+msgstr "Lidmaatschap niveau"
+
+#: views/admin_membership_level_menu.php:3
+msgid "Manage Content Production"
+msgstr "Beheer de inhouds productie"
+
+#: views/admin_membership_manage.php:17
+msgid "Example Content Protection Settings"
+msgstr "Voorbeeld inhoud afscherm instellingen"
+
+#: views/admin_member_form_common_part.php:45
+msgid "(twice, required)"
+msgstr "(tweemaal, vereist)"
+
+#: views/admin_member_form_common_part.php:50
+msgid "Strength indicator"
+msgstr "Sterkte indicator"
+
+#: views/admin_member_form_common_part.php:51
+msgid ""
+"Hint: The password should be at least seven characters long. To make it "
+"stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
+"$ % ^ &amp; )."
+msgstr ""
+"Hint: Het password moet minstens zeven karakters bevatten. Om het sterker te "
+"maken gebruikt u hoofdletters en kleine letters, nummers en symbolen "
+"zoals ! ? / $ %  ^ & ; ) \""
+
+#: views/admin_member_form_common_part.php:64 views/loggedin.php:7
+#: views/login_widget_logged.php:6
+msgid "Account Status"
+msgstr "Account Status"
+
+#: views/admin_member_form_common_part.php:74
+msgid "Member Since"
+msgstr "Lid sinds"
+
+#: views/admin_payment_settings.php:2 views/admin_settings.php:2
+#: views/admin_tools_settings.php:2
+msgid "Simple WP Membership::Settings"
+msgstr "Simple WP Membership::Instellingen"
+
+#: views/admin_payment_settings.php:33
+msgid "PayPal Integration Settings"
+msgstr "PayPal Integratie Instellingen"
+
+#: views/admin_payment_settings.php:36
+msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
+msgstr "Genereer de \"Geavanceerde Variabelen\" Code voor je PayPal knop"
+
+#: views/admin_payment_settings.php:39
+msgid "Enter the Membership Level ID"
+msgstr "Voer het Lidmaatschap niveau ID in"
+
+#: views/admin_payment_settings.php:41
+msgid "Generate Code"
+msgstr "Genereer de code"
+
+#: views/admin_tools_settings.php:9
+msgid "Generate a Registration Completion link"
+msgstr "Genereer een Registratie Voltooid link"
+
+#: views/admin_tools_settings.php:12
+msgid ""
+"You can manually generate a registration completion link here and give it to "
+"your customer if they have missed the email that was automatically sent out "
+"to them after the payment."
+msgstr ""
+"Je kunt hier zelf een Registratie Compleet link genereren en aan je klant "
+"geven als zij de automatische email die hen was toegezonden na betaling "
+"hebben gemist."
+
+#: views/admin_tools_settings.php:17
+msgid "Generate Registration Completion Link"
+msgstr "Genereer Registratie Voltooid link"
+
+#: views/admin_tools_settings.php:20
+msgid "OR"
+msgstr "OF"
+
+#: views/admin_tools_settings.php:21
+msgid "For All Pending Registrations"
+msgstr "Voor alle wachtende registraties"
+
+#: views/admin_tools_settings.php:24
+msgid "Registration Completion Links Will Appear Below:"
+msgstr "De Registratie Voltooid link zal hieronder verschijnen:"
+
+#: views/admin_tools_settings.php:31
+msgid "Send Registration Reminder Email too"
+msgstr "Stuur ook een Registratie herinnering "
+
+#: views/admin_tools_settings.php:34
+msgid "Submit"
+msgstr "Verstuur"
+
+#: views/edit.php:58
+msgid "Update"
+msgstr "Update"
+
+#: views/forgot_password.php:5
+msgid "Email Address"
+msgstr "Email Adres"
+
+#: views/forgot_password.php:12
+msgid "Reset Password"
+msgstr "Reset Password"
+
+#: views/loggedin.php:3 views/login_widget_logged.php:3
+msgid "Logged in as"
+msgstr "Ingelogd als"
+
+#: views/loggedin.php:11 views/login_widget_logged.php:9
+msgid "Membership"
+msgstr "Lidmaatschap"
+
+#: views/loggedin.php:15 views/login_widget_logged.php:12
+msgid "Account Expiry"
+msgstr "Account verloopt"
+
+#: views/loggedin.php:19 views/login_widget_logged.php:16
+msgid "Logout"
+msgstr "Logout"
+
+#: views/login.php:17
+msgid "Remember Me"
+msgstr "Herinner mij"
+
+#: views/login.php:26
+msgid "Forgot Password"
+msgstr "Password vergeten"
diff --git a/languages/swpm-pl_PL.mo b/languages/swpm-pl_PL.mo
new file mode 100644 (file)
index 0000000..2a63bab
Binary files /dev/null and b/languages/swpm-pl_PL.mo differ
diff --git a/languages/swpm-pl_PL.po b/languages/swpm-pl_PL.po
new file mode 100644 (file)
index 0000000..a2b530c
--- /dev/null
@@ -0,0 +1,708 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: simple membership\n"
+"POT-Creation-Date: 2014-08-28 19:28+1000\n"
+"PO-Revision-Date: 2014-12-09 14:05+0100\n"
+"Last-Translator: Przemysław Maj <maytki@o2.pl>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.7.1\n"
+"X-Poedit-KeywordsList: __;_e\n"
+"X-Poedit-Basepath: .\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+"Language: pl\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: classes/class.bAccessControl.php:23 classes/class.bAccessControl.php:40
+msgid "You are not allowed to view this content"
+msgstr "Nie masz uprawnień, aby zobaczyć treść posta."
+
+#: classes/class.bAccessControl.php:26 classes/class.bAccessControl.php:43
+msgid "You need to login to view this content. "
+msgstr "Musisz się zalogować aby zobaczyć treść posta."
+
+#: classes/class.bAdminRegistration.php:48
+#: classes/class.bFrontRegistration.php:64
+msgid "Registration Successful."
+msgstr "Instalacja zakończona powodzeniem"
+
+#: classes/class.bAdminRegistration.php:53
+#: classes/class.bAdminRegistration.php:73
+#: classes/class.bMembershipLevel.php:36 classes/class.bMembershipLevel.php:54
+msgid "Please correct the following:"
+msgstr "Popraw następujące:"
+
+#: classes/class.bAjax.php:16 classes/class.bAjax.php:28
+msgid "Aready taken"
+msgstr "Zajęte"
+
+#: classes/class.bAjax.php:29
+msgid "Available"
+msgstr "Dostępny"
+
+#: classes/class.bAuth.php:48 classes/class.bFrontRegistration.php:179
+msgid "User Not Found."
+msgstr "Nie znaleziono użytkownika"
+
+#: classes/class.bAuth.php:55
+msgid "Password Empty or Invalid."
+msgstr "Zle wpisane hasło"
+
+#: classes/class.bAuth.php:79
+msgid "Account is inactive."
+msgstr "Konto jest nieaktywne."
+
+#: classes/class.bAuth.php:89
+msgid "You are logged in as:"
+msgstr "Jesteś zalogowany jako:"
+
+#: classes/class.bAuth.php:128
+msgid "Logged Out Successfully."
+msgstr "Wylogowano poprawnie"
+
+#: classes/class.bAuth.php:170
+msgid "Session Expired."
+msgstr "Sesja wygasła"
+
+#: classes/class.bAuth.php:179
+msgid "Invalid User Name"
+msgstr "Zła nazwa użytkownika"
+
+#: classes/class.bAuth.php:187
+msgid "Bad Cookie Hash"
+msgstr "Złe ciasteczko :/"
+
+#: classes/class.bForm.php:26
+msgid ""
+"Wordpress account exists with given user name. But given email doesn't match."
+msgstr "Użytkownik o takiej nazwie istnieje, ale ma inny adres email"
+
+#: classes/class.bForm.php:31
+msgid ""
+"Wordpress account exists with given email. But given user name doesn't match."
+msgstr ""
+"Użytkownik o takim adresie email istnieje, ale ma inną nazwę użytkownika"
+
+#: classes/class.bForm.php:40
+msgid "User name is required"
+msgstr "Nazwa użytkownika wymagana"
+
+#: classes/class.bForm.php:49
+msgid "User name already exists."
+msgstr "Podaj inną nazwę użytkownika (ta jest zajęta)"
+
+#: classes/class.bForm.php:72
+msgid "Password is required"
+msgstr "Wymagane hasło"
+
+#: classes/class.bForm.php:79
+msgid "Password mismatch"
+msgstr "Podano różne hasła!"
+
+#: classes/class.bForm.php:95
+msgid "Email is required"
+msgstr "Wymagany email"
+
+#: classes/class.bForm.php:99
+msgid "Email is invalid"
+msgstr "Błędny email"
+
+#: classes/class.bForm.php:112
+msgid "Email is already used."
+msgstr "Taki adres email jest już użyty"
+
+#: classes/class.bForm.php:178
+msgid "Member since field is invalid"
+msgstr "Pole \"użytkownik\" jest nieprawidłowe"
+
+#: classes/class.bForm.php:189
+msgid "Subscription starts field is invalid"
+msgstr "Pole \"subskrybcja od\" jest nierawidłowe"
+
+#: classes/class.bForm.php:199
+msgid "Gender field is invalid"
+msgstr "Pole \"płeć\" jest nieprawidłowa"
+
+#: classes/class.bForm.php:210
+msgid "Account state field is invalid"
+msgstr "Pole \"Account State\" jest nieprawidłowe"
+
+#: classes/class.bFrontRegistration.php:64 classes/class.bSettings.php:326
+msgid "Please"
+msgstr "Proszę"
+
+#: classes/class.bFrontRegistration.php:64 classes/class.bSettings.php:326
+#: views/login.php:21
+msgid "Login"
+msgstr "Login"
+
+#: classes/class.bFrontRegistration.php:79
+#: classes/class.bFrontRegistration.php:158
+msgid "Please correct the following"
+msgstr "Proszę poprawić następujące"
+
+#: classes/class.bFrontRegistration.php:92
+msgid "Membership Level Couldn't be found."
+msgstr "Pozim członkowstwa nie znaleziony"
+
+#: classes/class.bFrontRegistration.php:168
+msgid "Email Address Not Valid."
+msgstr "Adres email jest nieważny"
+
+#: classes/class.bFrontRegistration.php:199
+msgid "New password has been sent to your email address."
+msgstr "Nowe hasło zostało wysłane na podany adres email"
+
+#: classes/class.bLevelForm.php:31
+msgid "Subscriptoin duration must be > 0."
+msgstr "Czas trwania subskrybcji musi być większy od 0"
+
+#: classes/class.bMembers.php:7
+msgid "Member"
+msgstr "Członek"
+
+#: classes/class.bMembers.php:8 classes/class.simple-wp-membership.php:467
+msgid "Members"
+msgstr "Członkowie"
+
+#: classes/class.bMembers.php:16 classes/class.bMembershipLevels.php:16
+msgid "ID"
+msgstr "ID"
+
+#: classes/class.bMembers.php:17 views/add.php:5 views/edit.php:4
+#: views/login.php:5
+msgid "User Name"
+msgstr "Nazwa użytkownika"
+
+#: classes/class.bMembers.php:18 views/add.php:21
+#: views/admin_member_form_common_part.php:2 views/edit.php:20
+msgid "First Name"
+msgstr "Imię"
+
+#: classes/class.bMembers.php:19 views/add.php:25
+#: views/admin_member_form_common_part.php:6 views/edit.php:24
+msgid "Last Name"
+msgstr "Nazwisko"
+
+#: classes/class.bMembers.php:20 views/add.php:9 views/edit.php:8
+msgid "Email"
+msgstr "email"
+
+#: classes/class.bMembers.php:21 classes/class.bMembershipLevels.php:8
+#: classes/class.bMembershipLevels.php:17 views/add.php:64
+#: views/admin_member_form_common_part.php:55 views/edit.php:52
+msgid "Membership Level"
+msgstr "Poziom dostępu"
+
+#: classes/class.bMembers.php:22 views/admin_member_form_common_part.php:78
+msgid "Subscription Starts"
+msgstr "Subskrybcja od"
+
+#: classes/class.bMembers.php:23
+msgid "Account State"
+msgstr "Account State"
+
+#: classes/class.bMembers.php:35 classes/class.bMembershipLevels.php:29
+msgid "Delete"
+msgstr "Skasuj"
+
+#: classes/class.bMembers.php:100
+msgid "No Member found."
+msgstr "Niue ma takiego użytkownika"
+
+#: classes/class.bMembershipLevel.php:31
+msgid "Membership Level Creation Successful."
+msgstr "Dodano nowy poziom członkowstwa"
+
+#: classes/class.bMembershipLevel.php:50
+msgid "Updated Successfully."
+msgstr "Aktualizacja pomyślna"
+
+#: classes/class.bMembershipLevels.php:9
+#: classes/class.simple-wp-membership.php:469
+msgid "Membership Levels"
+msgstr "Poziom członkowstwa"
+
+#: classes/class.bMembershipLevels.php:18
+msgid "Role"
+msgstr "Uprawnienia"
+
+#: classes/class.bMembershipLevels.php:19
+msgid "Subscription Valid For"
+msgstr "Subskrybcja ważna przez"
+
+#: classes/class.bSettings.php:28
+msgid "Plugin Documentation"
+msgstr "Plugin Documentation"
+
+#: classes/class.bSettings.php:30
+msgid "General Settings"
+msgstr "Główne ustawienia"
+
+#: classes/class.bSettings.php:32
+msgid "Enable Free Membership"
+msgstr "Pozwól na darmowe członkostwo"
+
+#: classes/class.bSettings.php:35
+msgid "Enable/disable registration for free membership level"
+msgstr "Włącz / wyłącz rejestrację dla darmowyego członkowstwa"
+
+#: classes/class.bSettings.php:36
+msgid "Free Membership Level ID"
+msgstr "Level ID darmowego członkowstwa"
+
+#: classes/class.bSettings.php:39
+msgid "Assign free membership level ID"
+msgstr "Przyciel Level ID do darmowego członkowstwa"
+
+#: classes/class.bSettings.php:40
+msgid "Hide Adminbar"
+msgstr "Showaj Adminibar"
+
+#: classes/class.bSettings.php:43
+msgid ""
+"WordPress shows an admin toolbar to the logged in users of the site. Check "
+"this box if you want to hide that admin toolbar in the fronend of your site."
+msgstr ""
+"WordPress pokazuje pasek narzędzi administratora dla zalogowanych "
+"użytkowników witryny . Zaznacz to pole, jeśli chcesz ukryć ten pasek na "
+"swojej stronie"
+
+#: classes/class.bSettings.php:45
+msgid "Pages Settings"
+msgstr "Ustawienia strony"
+
+#: classes/class.bSettings.php:47
+msgid "Login Page URL"
+msgstr "Strona logowania"
+
+#: classes/class.bSettings.php:51
+msgid "Registration Page URL"
+msgstr "Strona rejestracji"
+
+#: classes/class.bSettings.php:55
+msgid "Join Us Page URL"
+msgstr "Strona dołącz do nas"
+
+#: classes/class.bSettings.php:59
+msgid "Edit Profile Page URL"
+msgstr "Strona edycji profilu"
+
+#: classes/class.bSettings.php:63
+msgid "Password Reset Page URL"
+msgstr "Strona zmiany hasła"
+
+#: classes/class.bSettings.php:68
+msgid "Test & Debug Settings"
+msgstr "Ustawienia testów i debugowania"
+
+#: classes/class.bSettings.php:74
+msgid "Enable Sandbox Testing"
+msgstr "Włącz testy sandbox "
+
+#: classes/class.bSettings.php:77
+msgid "Enable this option if you want to do sandbox payment testing."
+msgstr "Włącz tę opcję, jeśli chcesz zrobić testy płatności  (sandbox)"
+
+#: classes/class.bSettings.php:90
+msgid "Email Misc. Settings"
+msgstr "Różne ustawienia email"
+
+#: classes/class.bSettings.php:92
+msgid "From Email Address"
+msgstr "z adresu email"
+
+#: classes/class.bSettings.php:97
+msgid "Email Settings (Prompt to Complete Registration )"
+msgstr "Ustawienia poczty e-mail (Podpowiedź do zakończenia rejestracji )"
+
+#: classes/class.bSettings.php:99 classes/class.bSettings.php:110
+#: classes/class.bSettings.php:129
+msgid "Email Subject"
+msgstr "Temat email"
+
+#: classes/class.bSettings.php:103 classes/class.bSettings.php:114
+#: classes/class.bSettings.php:133
+msgid "Email Body"
+msgstr "Treść email"
+
+#: classes/class.bSettings.php:108
+msgid "Email Settings (Registration Complete)"
+msgstr "Ustawienia email (rejestracja zakończona)"
+
+#: classes/class.bSettings.php:118
+msgid "Send Notification To Admin"
+msgstr "Wyślij powiadomienie do administratora"
+
+#: classes/class.bSettings.php:122
+msgid "Send Email to Member When Added via Admin Dashboard"
+msgstr "Wyślij email to dodanego użytkownika przez panel administratora"
+
+#: classes/class.bSettings.php:127
+msgid " Email Settings (Account Upgrade Notification)"
+msgstr ""
+
+#: classes/class.bSettings.php:326
+msgid "Not a Member?"
+msgstr "Nie masz konta?"
+
+#: classes/class.bSettings.php:326 views/login.php:30
+msgid "Join Us"
+msgstr "Dołącz do nas."
+
+#: classes/class.bUtils.php:32 views/admin_member_form_common_part.php:66
+msgid "Active"
+msgstr "Aktywuj"
+
+#: classes/class.bUtils.php:33 views/admin_member_form_common_part.php:67
+msgid "Inactive"
+msgstr "Nieaktywny"
+
+#: classes/class.bUtils.php:34 views/admin_member_form_common_part.php:68
+msgid "Pending"
+msgstr "Oczekuje"
+
+#: classes/class.bUtils.php:35 views/admin_member_form_common_part.php:69
+msgid "Expired"
+msgstr "Wygasło"
+
+#: classes/class.bUtils.php:225
+msgid "Never"
+msgstr "Nigdy"
+
+#: classes/class.miscUtils.php:51
+msgid "Registration"
+msgstr "Rejestracja"
+
+#: classes/class.miscUtils.php:74
+msgid "Member Login"
+msgstr "Strona logowania"
+
+#: classes/class.miscUtils.php:97
+msgid "Profile"
+msgstr "Twój profil"
+
+#: classes/class.miscUtils.php:120
+msgid "Password Reset"
+msgstr "Reset hasła"
+
+#: classes/class.simple-wp-membership.php:178
+msgid "You are not logged in."
+msgstr "Nie jesteś zalogowany"
+
+#: classes/class.simple-wp-membership.php:209
+msgid "Simple WP Membership Protection"
+msgstr "Simple WP Membership Protection"
+
+#: classes/class.simple-wp-membership.php:222
+msgid "Simple Membership Protection options"
+msgstr "Simple Membership Protection options"
+
+#: classes/class.simple-wp-membership.php:238
+msgid "Do you want to protect this content?"
+msgstr "Czy chcesz "
+
+#: classes/class.simple-wp-membership.php:243
+msgid "Select the membership level that can access this content:"
+msgstr "Wybierz poziom dostępu do tej zawartości"
+
+#: classes/class.simple-wp-membership.php:375
+msgid "Display SWPM Login."
+msgstr "Wyświetl SWPM Login"
+
+#: classes/class.simple-wp-membership.php:377
+msgid "SWPM Login"
+msgstr "SWPM Login"
+
+#: classes/class.simple-wp-membership.php:464
+msgid "WP Membership"
+msgstr "WP Membership"
+
+#: classes/class.simple-wp-membership.php:471
+msgid "Settings"
+msgstr "Ustawienia"
+
+#: views/add.php:13 views/admin_member_form_common_part.php:45
+#: views/edit.php:12 views/login.php:11
+msgid "Password"
+msgstr "Hasło"
+
+#: views/add.php:17 views/edit.php:16
+msgid "Repeat Password"
+msgstr "Powtórz hasło"
+
+#: views/add.php:29 views/admin_member_form_common_part.php:10
+msgid "Gender"
+msgstr "Płeć"
+
+#: views/add.php:36 views/admin_member_form_common_part.php:17
+#: views/edit.php:28
+msgid "Phone"
+msgstr "Nr telefonu"
+
+#: views/add.php:40 views/admin_member_form_common_part.php:21
+#: views/edit.php:32
+msgid "Street"
+msgstr "Ulica"
+
+#: views/add.php:44 views/admin_member_form_common_part.php:25
+#: views/edit.php:36
+msgid "City"
+msgstr "Miasto"
+
+#: views/add.php:48 views/admin_member_form_common_part.php:29
+#: views/edit.php:40
+msgid "State"
+msgstr "Województwo"
+
+#: views/add.php:52 views/admin_member_form_common_part.php:33
+#: views/edit.php:44
+msgid "Zipcode"
+msgstr "Kod pocztowy"
+
+#: views/add.php:56 views/admin_member_form_common_part.php:37
+#: views/edit.php:48
+msgid "Country"
+msgstr "Kraj"
+
+#: views/add.php:60 views/admin_member_form_common_part.php:41
+msgid "Company"
+msgstr "Firma"
+
+#: views/add.php:71
+msgid "Register"
+msgstr "Rejestruj"
+
+#: views/admin_add.php:6
+msgid "Add Member"
+msgstr "Dodaj użytkownika"
+
+#: views/admin_add.php:7
+msgid "Create a brand new user and add it to this site."
+msgstr "Dodaj nowego użytkownika do tej strony"
+
+#: views/admin_add.php:11
+msgid "User name"
+msgstr "Nazwa użytkownika"
+
+#: views/admin_add.php:11 views/admin_add.php:15 views/admin_add_level.php:11
+#: views/admin_add_level.php:15 views/admin_add_level.php:19
+#: views/admin_edit.php:9 views/admin_edit.php:13
+#: views/admin_edit_level.php:10 views/admin_edit_level.php:14
+#: views/admin_edit_level.php:18
+msgid "(required)"
+msgstr "(wymagane)"
+
+#: views/admin_add.php:15 views/admin_edit.php:13
+msgid "E-mail"
+msgstr "E-mail"
+
+#: views/admin_add.php:19
+msgid "Add New Member "
+msgstr "Dodaj nowego członka"
+
+#: views/admin_add_level.php:6
+msgid "Create new membership level."
+msgstr "Stwórz nowy poziom dostępu"
+
+#: views/admin_add_level.php:11 views/admin_edit_level.php:10
+msgid "Membership Level Name"
+msgstr "Nazwa poziomu dostępu"
+
+#: views/admin_add_level.php:15 views/admin_edit_level.php:14
+msgid "Default WordPress Role"
+msgstr "Domyślna uprawnienia WordPress"
+
+#: views/admin_add_level.php:19 views/admin_edit_level.php:18
+msgid "Subscription Duration"
+msgstr "Czas trwania subskrybcji"
+
+#: views/admin_add_level.php:26 views/admin_edit_level.php:27
+msgid "No Expiry"
+msgstr "Nie wygasło"
+
+#: views/admin_add_level.php:55
+msgid "Add New Membership Level "
+msgstr "Dodaj nowy pozim dostępu"
+
+#: views/admin_edit.php:5
+msgid "Edit Member"
+msgstr "Edycja użytkownika"
+
+#: views/admin_edit.php:6
+msgid "Edit existing member details."
+msgstr "Edytuj istniejącego użytkownika"
+
+#: views/admin_edit.php:9
+msgid "Username"
+msgstr "Użytkownik"
+
+#: views/admin_edit.php:18
+msgid "Edit User "
+msgstr "Edycja użytkownika"
+
+#: views/admin_edit_level.php:5
+msgid "Edit membership level"
+msgstr "Edycja poziomu dostępu"
+
+#: views/admin_edit_level.php:6
+msgid "Edit membership level."
+msgstr "Edycja poziomu dostępu"
+
+#: views/admin_edit_level.php:54
+msgid "Edit Membership Level "
+msgstr "Edycja poziomu dostępu"
+
+#: views/admin_members.php:2
+msgid "Simple WP Membership::Members"
+msgstr "Simple WP Membership::Użytkownicy"
+
+#: views/admin_members.php:3 views/admin_members.php:19
+#: views/admin_membership_levels.php:21
+msgid "Add New"
+msgstr "Dodaj nowy"
+
+#: views/admin_members.php:9 views/admin_membership_levels.php:11
+msgid "search"
+msgstr "Szukaj"
+
+#: views/admin_membership_levels.php:3
+msgid "Simple WP Membership::Membership Levels"
+msgstr "Simple WP Membership::Poziom członkowstwa"
+
+#: views/admin_membership_level_menu.php:2
+msgid "Membership level"
+msgstr "Poziom dostępu"
+
+#: views/admin_membership_level_menu.php:3
+msgid "Manage Content Production"
+msgstr "Zarządzanie ustawieniami ochrony zawartości"
+
+#: views/admin_membership_manage.php:17
+msgid "Example Content Protection Settings"
+msgstr "Przykład ustawienia ochrony zawartości"
+
+#: views/admin_member_form_common_part.php:45
+msgid "(twice, required)"
+msgstr "(dwukrotnie, wymagane)"
+
+#: views/admin_member_form_common_part.php:50
+msgid "Strength indicator"
+msgstr "Wskaźnik siły"
+
+#: views/admin_member_form_common_part.php:51
+msgid ""
+"Hint: The password should be at least seven characters long. To make it "
+"stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
+"$ % ^ &amp; )."
+msgstr ""
+"Podpowiedź: Hasło powinno mieć conajmniej 7 znaków. Aby było silniejsze "
+"można używać dużych i małych liter, znaków, symboli takich jak  ! \" ? $ % ^ "
+"&amp; )"
+
+#: views/admin_member_form_common_part.php:64 views/loggedin.php:7
+#: views/login_widget_logged.php:6
+msgid "Account Status"
+msgstr "Status konta"
+
+#: views/admin_member_form_common_part.php:74
+msgid "Member Since"
+msgstr "Użytkownik od"
+
+#: views/admin_payment_settings.php:2 views/admin_settings.php:2
+#: views/admin_tools_settings.php:2
+msgid "Simple WP Membership::Settings"
+msgstr "Simple WP Membership::Ustawienia"
+
+#: views/admin_payment_settings.php:33
+msgid "PayPal Integration Settings"
+msgstr "PayPal Ustawienia integracyjne"
+
+#: views/admin_payment_settings.php:36
+msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
+msgstr "Genrowany  \"Advanced Variables\" kod dla twojego przycisku PayPal"
+
+#: views/admin_payment_settings.php:39
+msgid "Enter the Membership Level ID"
+msgstr "Wpisz ID poziomu "
+
+#: views/admin_payment_settings.php:41
+msgid "Generate Code"
+msgstr "Wygeneruj kod"
+
+#: views/admin_tools_settings.php:9
+msgid "Generate a Registration Completion link"
+msgstr "Generowanie linku zakończenia rejestracji"
+
+#: views/admin_tools_settings.php:12
+msgid ""
+"You can manually generate a registration completion link here and give it to "
+"your customer if they have missed the email that was automatically sent out "
+"to them after the payment."
+msgstr ""
+"Tutaj można ręcznie wygenerować link zakończenia rejestracji i wysłać go do "
+"klienta , jeśli nie został pominięty e-mail , który został automatycznie "
+"wysłany po dokonaniu płatności ."
+
+#: views/admin_tools_settings.php:17
+msgid "Generate Registration Completion Link"
+msgstr "Generowanie linku zakończenia rejestracji"
+
+#: views/admin_tools_settings.php:20
+msgid "OR"
+msgstr "lub"
+
+#: views/admin_tools_settings.php:21
+msgid "For All Pending Registrations"
+msgstr "Dla wszystkich oczekujących rejestracji"
+
+#: views/admin_tools_settings.php:24
+msgid "Registration Completion Links Will Appear Below:"
+msgstr "Link zakończenia rejestracji pojawi się poniżej :"
+
+#: views/admin_tools_settings.php:31
+msgid "Send Registration Reminder Email too"
+msgstr "Wyślij przypomnienie o rejestracji na email"
+
+#: views/admin_tools_settings.php:34
+msgid "Submit"
+msgstr "Wyślij"
+
+#: views/edit.php:58
+msgid "Update"
+msgstr "Aktualizacja"
+
+#: views/forgot_password.php:5
+msgid "Email Address"
+msgstr "adres email"
+
+#: views/forgot_password.php:12
+msgid "Reset Password"
+msgstr "Reset hasła"
+
+#: views/loggedin.php:3 views/login_widget_logged.php:3
+msgid "Logged in as"
+msgstr "Jesteś zalogowany jako"
+
+#: views/loggedin.php:11 views/login_widget_logged.php:9
+msgid "Membership"
+msgstr "Członkostwo"
+
+#: views/loggedin.php:15 views/login_widget_logged.php:12
+msgid "Account Expiry"
+msgstr "Konto straciło ważność"
+
+#: views/loggedin.php:19 views/login_widget_logged.php:16
+msgid "Logout"
+msgstr "Wyloguj"
+
+#: views/login.php:17
+msgid "Remember Me"
+msgstr "Pamiętaj mnie"
+
+#: views/login.php:26
+msgid "Forgot Password"
+msgstr "Zapomniałeś hasła"
diff --git a/languages/swpm-pt_BR.mo b/languages/swpm-pt_BR.mo
new file mode 100644 (file)
index 0000000..5f393d5
Binary files /dev/null and b/languages/swpm-pt_BR.mo differ
diff --git a/languages/swpm-pt_BR.po b/languages/swpm-pt_BR.po
new file mode 100644 (file)
index 0000000..1fe2549
--- /dev/null
@@ -0,0 +1,711 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: simple membership\n"
+"POT-Creation-Date: 2014-08-28 19:28+1000\n"
+"PO-Revision-Date: 2015-04-11 11:19-0300\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.7.5\n"
+"X-Poedit-KeywordsList: __;_e\n"
+"X-Poedit-Basepath: .\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"Language: pt_BR\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: classes/class.bAccessControl.php:23 classes/class.bAccessControl.php:40
+msgid "You are not allowed to view this content"
+msgstr "Você não tem permissão para visualizar este conteúdo"
+
+#: classes/class.bAccessControl.php:26 classes/class.bAccessControl.php:43
+msgid "You need to login to view this content. "
+msgstr "Você precisa fazer o login para visualizar este conteúdo. "
+
+#: classes/class.bAdminRegistration.php:48
+#: classes/class.bFrontRegistration.php:64
+msgid "Registration Successful."
+msgstr "Registo bem sucedido."
+
+#: classes/class.bAdminRegistration.php:53
+#: classes/class.bAdminRegistration.php:73
+#: classes/class.bMembershipLevel.php:36 classes/class.bMembershipLevel.php:54
+msgid "Please correct the following:"
+msgstr "Corrija o seguinte:"
+
+#: classes/class.bAjax.php:16 classes/class.bAjax.php:28
+msgid "Aready taken"
+msgstr "Já em uso"
+
+#: classes/class.bAjax.php:29
+msgid "Available"
+msgstr "Disponível"
+
+#: classes/class.bAuth.php:48 classes/class.bFrontRegistration.php:179
+msgid "User Not Found."
+msgstr "Usuário não encontrado."
+
+#: classes/class.bAuth.php:55
+msgid "Password Empty or Invalid."
+msgstr "Senha vazia ou inválida."
+
+#: classes/class.bAuth.php:79
+msgid "Account is inactive."
+msgstr "A conta está inativa."
+
+#: classes/class.bAuth.php:89
+msgid "You are logged in as:"
+msgstr "Você está logado como:"
+
+#: classes/class.bAuth.php:128
+msgid "Logged Out Successfully."
+msgstr "Desconectado com sucesso."
+
+#: classes/class.bAuth.php:170
+msgid "Session Expired."
+msgstr "Sessão expirada."
+
+#: classes/class.bAuth.php:179
+msgid "Invalid User Name"
+msgstr "Nome de Usuário Inválido"
+
+#: classes/class.bAuth.php:187
+msgid "Bad Cookie Hash"
+msgstr "Bad Cookie Hash"
+
+#: classes/class.bForm.php:26
+msgid ""
+"Wordpress account exists with given user name. But given email doesn't match."
+msgstr ""
+"Já existe conta Wordpress com o nome de usuário fornecido. Mas o e-mail dado "
+"não corresponde."
+
+#: classes/class.bForm.php:31
+msgid ""
+"Wordpress account exists with given email. But given user name doesn't match."
+msgstr ""
+"Já existe conta Wordpress com o e-mail fornecido. Mas o nome de usuário dado "
+"não corresponde."
+
+#: classes/class.bForm.php:40
+msgid "User name is required"
+msgstr "O nome de usuário é obrigatório"
+
+#: classes/class.bForm.php:49
+msgid "User name already exists."
+msgstr "Nome do usuário já existe."
+
+#: classes/class.bForm.php:72
+msgid "Password is required"
+msgstr "A senha é requerida"
+
+#: classes/class.bForm.php:79
+msgid "Password mismatch"
+msgstr "Senha incompatível"
+
+#: classes/class.bForm.php:95
+msgid "Email is required"
+msgstr "O e-mail é obrigatório"
+
+#: classes/class.bForm.php:99
+msgid "Email is invalid"
+msgstr "O e-mail é inválido"
+
+#: classes/class.bForm.php:112
+msgid "Email is already used."
+msgstr "O e-mail já está sendo usado."
+
+#: classes/class.bForm.php:178
+msgid "Member since field is invalid"
+msgstr "Campo Membro desde é inválido"
+
+#: classes/class.bForm.php:189
+msgid "Subscription starts field is invalid"
+msgstr "Campo Início de Assinatura é inválido"
+
+#: classes/class.bForm.php:199
+msgid "Gender field is invalid"
+msgstr "Campo Sexo é inválido"
+
+#: classes/class.bForm.php:210
+msgid "Account state field is invalid"
+msgstr "Campo de Status da Conta é inválido"
+
+#: classes/class.bFrontRegistration.php:64 classes/class.bSettings.php:326
+msgid "Please"
+msgstr "Por favor"
+
+#: classes/class.bFrontRegistration.php:64 classes/class.bSettings.php:326
+#: views/login.php:21
+msgid "Login"
+msgstr "Entrar"
+
+#: classes/class.bFrontRegistration.php:79
+#: classes/class.bFrontRegistration.php:158
+msgid "Please correct the following"
+msgstr "Corrija o seguinte"
+
+#: classes/class.bFrontRegistration.php:92
+msgid "Membership Level Couldn't be found."
+msgstr "Nível de Associação não pôde ser encontrado."
+
+#: classes/class.bFrontRegistration.php:168
+msgid "Email Address Not Valid."
+msgstr "O endereço de e-mail não é válido."
+
+#: classes/class.bFrontRegistration.php:199
+msgid "New password has been sent to your email address."
+msgstr "Nova senha foi enviada para o seu endereço de e-mail."
+
+#: classes/class.bLevelForm.php:31
+msgid "Subscriptoin duration must be > 0."
+msgstr "Duração da assinatura deve ser > 0 ."
+
+#: classes/class.bMembers.php:7
+msgid "Member"
+msgstr "Usuário"
+
+#: classes/class.bMembers.php:8 classes/class.simple-wp-membership.php:467
+msgid "Members"
+msgstr "Usuários"
+
+#: classes/class.bMembers.php:16 classes/class.bMembershipLevels.php:16
+msgid "ID"
+msgstr ""
+
+#: classes/class.bMembers.php:17 views/add.php:5 views/edit.php:4
+#: views/login.php:5
+msgid "User Name"
+msgstr "Nome de Usuário"
+
+#: classes/class.bMembers.php:18 views/add.php:21
+#: views/admin_member_form_common_part.php:2 views/edit.php:20
+msgid "First Name"
+msgstr "Primeiro Nome"
+
+#: classes/class.bMembers.php:19 views/add.php:25
+#: views/admin_member_form_common_part.php:6 views/edit.php:24
+msgid "Last Name"
+msgstr "Sobrenome"
+
+#: classes/class.bMembers.php:20 views/add.php:9 views/edit.php:8
+msgid "Email"
+msgstr "E-mail"
+
+#: classes/class.bMembers.php:21 classes/class.bMembershipLevels.php:8
+#: classes/class.bMembershipLevels.php:17 views/add.php:64
+#: views/admin_member_form_common_part.php:55 views/edit.php:52
+msgid "Membership Level"
+msgstr "Nível de Associação"
+
+#: classes/class.bMembers.php:22 views/admin_member_form_common_part.php:78
+msgid "Subscription Starts"
+msgstr "Início da Assinatura"
+
+#: classes/class.bMembers.php:23
+msgid "Account State"
+msgstr "Status da Conta"
+
+#: classes/class.bMembers.php:35 classes/class.bMembershipLevels.php:29
+msgid "Delete"
+msgstr "Excluir"
+
+#: classes/class.bMembers.php:100
+msgid "No Member found."
+msgstr "Nenhum membro encontrado."
+
+#: classes/class.bMembershipLevel.php:31
+msgid "Membership Level Creation Successful."
+msgstr "Nível de Associação criado com sucesso,"
+
+#: classes/class.bMembershipLevel.php:50
+msgid "Updated Successfully."
+msgstr "Atualizado com sucesso."
+
+#: classes/class.bMembershipLevels.php:9
+#: classes/class.simple-wp-membership.php:469
+msgid "Membership Levels"
+msgstr "Níveis de Associação"
+
+#: classes/class.bMembershipLevels.php:18
+msgid "Role"
+msgstr "A função"
+
+#: classes/class.bMembershipLevels.php:19
+msgid "Subscription Valid For"
+msgstr "Assinatura válida para"
+
+#: classes/class.bSettings.php:28
+msgid "Plugin Documentation"
+msgstr "Plugin Documentation"
+
+#: classes/class.bSettings.php:30
+msgid "General Settings"
+msgstr "Configurações Gerais"
+
+#: classes/class.bSettings.php:32
+msgid "Enable Free Membership"
+msgstr "Habilite associação grátis"
+
+#: classes/class.bSettings.php:35
+msgid "Enable/disable registration for free membership level"
+msgstr "Ativar / desativar o registro para o nível de adesão gratuita"
+
+#: classes/class.bSettings.php:36
+msgid "Free Membership Level ID"
+msgstr "Associação Livre Nível ID"
+
+#: classes/class.bSettings.php:39
+msgid "Assign free membership level ID"
+msgstr "Atribuir livre adesão nível ID"
+
+#: classes/class.bSettings.php:40
+msgid "Hide Adminbar"
+msgstr "Esconder Admin Bar"
+
+#: classes/class.bSettings.php:43
+msgid ""
+"WordPress shows an admin toolbar to the logged in users of the site. Check "
+"this box if you want to hide that admin toolbar in the fronend of your site."
+msgstr ""
+"WordPress mostra uma barra de ferramentas de administração para o site para "
+"os usuários do site. Marque esta caixa se você quer esconder essa barra de "
+"ferramentas admin no front-end do seu site."
+
+#: classes/class.bSettings.php:45
+msgid "Pages Settings"
+msgstr "Configurações de Páginas"
+
+#: classes/class.bSettings.php:47
+msgid "Login Page URL"
+msgstr "URL da página de Entrar"
+
+#: classes/class.bSettings.php:51
+msgid "Registration Page URL"
+msgstr "URL da página Registro"
+
+#: classes/class.bSettings.php:55
+msgid "Join Us Page URL"
+msgstr "URL da página Junte-se a Nós"
+
+#: classes/class.bSettings.php:59
+msgid "Edit Profile Page URL"
+msgstr "URL da página Editar Perfil"
+
+#: classes/class.bSettings.php:63
+msgid "Password Reset Page URL"
+msgstr "URL da Página Reset de Senha"
+
+#: classes/class.bSettings.php:68
+msgid "Test & Debug Settings"
+msgstr "Configurações de teste e depuração"
+
+#: classes/class.bSettings.php:74
+msgid "Enable Sandbox Testing"
+msgstr "Permitir testes Sandbox"
+
+#: classes/class.bSettings.php:77
+msgid "Enable this option if you want to do sandbox payment testing."
+msgstr "Ative essa opção se você quiser fazer o teste de pagamento sandbox."
+
+#: classes/class.bSettings.php:90
+msgid "Email Misc. Settings"
+msgstr "Configurações E-mail Misc. "
+
+#: classes/class.bSettings.php:92
+msgid "From Email Address"
+msgstr "De Endereço de Email"
+
+#: classes/class.bSettings.php:97
+msgid "Email Settings (Prompt to Complete Registration )"
+msgstr ""
+
+#: classes/class.bSettings.php:99 classes/class.bSettings.php:110
+#: classes/class.bSettings.php:129
+msgid "Email Subject"
+msgstr "Assunto do E-mail"
+
+#: classes/class.bSettings.php:103 classes/class.bSettings.php:114
+#: classes/class.bSettings.php:133
+msgid "Email Body"
+msgstr "Corpo do E-mail"
+
+#: classes/class.bSettings.php:108
+msgid "Email Settings (Registration Complete)"
+msgstr "Configurações de e-mail ( Registro Completo)"
+
+#: classes/class.bSettings.php:118
+msgid "Send Notification To Admin"
+msgstr "Enviar uma notificação ao Administrador"
+
+#: classes/class.bSettings.php:122
+msgid "Send Email to Member When Added via Admin Dashboard"
+msgstr ""
+"Enviar e-mail para membros quando adicionada via Painel de Administração"
+
+#: classes/class.bSettings.php:127
+msgid " Email Settings (Account Upgrade Notification)"
+msgstr "Configurações de e-mail ( Conta de Notificação de atualização )"
+
+#: classes/class.bSettings.php:326
+msgid "Not a Member?"
+msgstr "Não é um membro?"
+
+#: classes/class.bSettings.php:326 views/login.php:30
+msgid "Join Us"
+msgstr "Junte-se a nós"
+
+#: classes/class.bUtils.php:32 views/admin_member_form_common_part.php:66
+msgid "Active"
+msgstr "Ativa"
+
+#: classes/class.bUtils.php:33 views/admin_member_form_common_part.php:67
+msgid "Inactive"
+msgstr "Inativo"
+
+#: classes/class.bUtils.php:34 views/admin_member_form_common_part.php:68
+msgid "Pending"
+msgstr "Pendendo"
+
+#: classes/class.bUtils.php:35 views/admin_member_form_common_part.php:69
+msgid "Expired"
+msgstr "Expirado"
+
+#: classes/class.bUtils.php:225
+msgid "Never"
+msgstr "Nunca"
+
+#: classes/class.miscUtils.php:51
+msgid "Registration"
+msgstr "Inscrição"
+
+#: classes/class.miscUtils.php:74
+msgid "Member Login"
+msgstr "Login de usuário"
+
+#: classes/class.miscUtils.php:97
+msgid "Profile"
+msgstr "Perfil"
+
+#: classes/class.miscUtils.php:120
+msgid "Password Reset"
+msgstr ""
+
+#: classes/class.simple-wp-membership.php:178
+msgid "You are not logged in."
+msgstr "Você não está logado."
+
+#: classes/class.simple-wp-membership.php:209
+msgid "Simple WP Membership Protection"
+msgstr ""
+
+#: classes/class.simple-wp-membership.php:222
+msgid "Simple Membership Protection options"
+msgstr "Opções de proteção Simple Membership"
+
+#: classes/class.simple-wp-membership.php:238
+msgid "Do you want to protect this content?"
+msgstr "Você quer proteger este conteúdo?"
+
+#: classes/class.simple-wp-membership.php:243
+msgid "Select the membership level that can access this content:"
+msgstr "Selecione o nível de associação que pode acessar este conteúdo:"
+
+#: classes/class.simple-wp-membership.php:375
+msgid "Display SWPM Login."
+msgstr ""
+
+#: classes/class.simple-wp-membership.php:377
+msgid "SWPM Login"
+msgstr ""
+
+#: classes/class.simple-wp-membership.php:464
+msgid "WP Membership"
+msgstr ""
+
+#: classes/class.simple-wp-membership.php:471
+msgid "Settings"
+msgstr "Configurações"
+
+#: views/add.php:13 views/admin_member_form_common_part.php:45
+#: views/edit.php:12 views/login.php:11
+msgid "Password"
+msgstr "Senha"
+
+#: views/add.php:17 views/edit.php:16
+msgid "Repeat Password"
+msgstr "Repita a senha"
+
+#: views/add.php:29 views/admin_member_form_common_part.php:10
+msgid "Gender"
+msgstr "Sexo"
+
+#: views/add.php:36 views/admin_member_form_common_part.php:17
+#: views/edit.php:28
+msgid "Phone"
+msgstr "telefone"
+
+#: views/add.php:40 views/admin_member_form_common_part.php:21
+#: views/edit.php:32
+msgid "Street"
+msgstr "Rua"
+
+#: views/add.php:44 views/admin_member_form_common_part.php:25
+#: views/edit.php:36
+msgid "City"
+msgstr "Cidade"
+
+#: views/add.php:48 views/admin_member_form_common_part.php:29
+#: views/edit.php:40
+msgid "State"
+msgstr "Estado"
+
+#: views/add.php:52 views/admin_member_form_common_part.php:33
+#: views/edit.php:44
+msgid "Zipcode"
+msgstr "Cep"
+
+#: views/add.php:56 views/admin_member_form_common_part.php:37
+#: views/edit.php:48
+msgid "Country"
+msgstr "País"
+
+#: views/add.php:60 views/admin_member_form_common_part.php:41
+msgid "Company"
+msgstr "Empresa"
+
+#: views/add.php:71
+msgid "Register"
+msgstr "Cadastre-se"
+
+#: views/admin_add.php:6
+msgid "Add Member"
+msgstr "Adicionar membro"
+
+#: views/admin_add.php:7
+#, fuzzy
+msgid "Create a brand new user and add it to this site."
+msgstr "Crie um novo usuário e adicioná-lo a este site."
+
+#: views/admin_add.php:11
+msgid "User name"
+msgstr ""
+
+#: views/admin_add.php:11 views/admin_add.php:15 views/admin_add_level.php:11
+#: views/admin_add_level.php:15 views/admin_add_level.php:19
+#: views/admin_edit.php:9 views/admin_edit.php:13
+#: views/admin_edit_level.php:10 views/admin_edit_level.php:14
+#: views/admin_edit_level.php:18
+msgid "(required)"
+msgstr "(obrigatório)"
+
+#: views/admin_add.php:15 views/admin_edit.php:13
+msgid "E-mail"
+msgstr ""
+
+#: views/admin_add.php:19
+msgid "Add New Member "
+msgstr "Adicionar Novo Membro "
+
+#: views/admin_add_level.php:6
+msgid "Create new membership level."
+msgstr "Criar novo nível de associação."
+
+#: views/admin_add_level.php:11 views/admin_edit_level.php:10
+msgid "Membership Level Name"
+msgstr "Nome do Nível de Associação"
+
+#: views/admin_add_level.php:15 views/admin_edit_level.php:14
+msgid "Default WordPress Role"
+msgstr "WordPress Role Padrão"
+
+#: views/admin_add_level.php:19 views/admin_edit_level.php:18
+msgid "Subscription Duration"
+msgstr "Duração da Assinatura "
+
+#: views/admin_add_level.php:26 views/admin_edit_level.php:27
+msgid "No Expiry"
+msgstr "Sem validade"
+
+#: views/admin_add_level.php:55
+msgid "Add New Membership Level "
+msgstr "Adicionar Novo Nível de Associação "
+
+#: views/admin_edit.php:5
+msgid "Edit Member"
+msgstr "Editar Membro"
+
+#: views/admin_edit.php:6
+msgid "Edit existing member details."
+msgstr "Edite detalhes de membros existentes."
+
+#: views/admin_edit.php:9
+msgid "Username"
+msgstr "Usuário"
+
+#: views/admin_edit.php:18
+msgid "Edit User "
+msgstr "Editar Usuário "
+
+#: views/admin_edit_level.php:5
+msgid "Edit membership level"
+msgstr "Editar Nível de Associação"
+
+#: views/admin_edit_level.php:6
+msgid "Edit membership level."
+msgstr "Editar Nível de Associação"
+
+#: views/admin_edit_level.php:54
+msgid "Edit Membership Level "
+msgstr "Editar Nível de Associação "
+
+#: views/admin_members.php:2
+msgid "Simple WP Membership::Members"
+msgstr "Membership WP Simples :: Membros"
+
+#: views/admin_members.php:3 views/admin_members.php:19
+#: views/admin_membership_levels.php:21
+msgid "Add New"
+msgstr "Adicionar Novo"
+
+#: views/admin_members.php:9 views/admin_membership_levels.php:11
+msgid "search"
+msgstr "Pesquisa"
+
+#: views/admin_membership_levels.php:3
+msgid "Simple WP Membership::Membership Levels"
+msgstr "Membership WP Simples :: Níveis de Associação"
+
+#: views/admin_membership_level_menu.php:2
+msgid "Membership level"
+msgstr "Nível de associação"
+
+#: views/admin_membership_level_menu.php:3
+msgid "Manage Content Production"
+msgstr "Gerenciar Produção de Conteúdo"
+
+#: views/admin_membership_manage.php:17
+msgid "Example Content Protection Settings"
+msgstr "Exemplo de configurações de proteção de conteúdo"
+
+#: views/admin_member_form_common_part.php:45
+msgid "(twice, required)"
+msgstr "(duas vezes, é necessária)"
+
+#: views/admin_member_form_common_part.php:50
+msgid "Strength indicator"
+msgstr "Indicador de força"
+
+#: views/admin_member_form_common_part.php:51
+msgid ""
+"Hint: The password should be at least seven characters long. To make it "
+"stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
+"$ % ^ &amp; )."
+msgstr ""
+"Dica: A senha deve ter pelo menos sete caracteres. Para torná-lo mais forte, "
+"use letras maiúsculas e minúsculas, números e símbolos como !?"
+
+#: views/admin_member_form_common_part.php:64 views/loggedin.php:7
+#: views/login_widget_logged.php:6
+msgid "Account Status"
+msgstr "Status da Conta"
+
+#: views/admin_member_form_common_part.php:74
+msgid "Member Since"
+msgstr "Cadastrado"
+
+#: views/admin_payment_settings.php:2 views/admin_settings.php:2
+#: views/admin_tools_settings.php:2
+msgid "Simple WP Membership::Settings"
+msgstr "Membership WP Simples :: Configurações"
+
+#: views/admin_payment_settings.php:33
+msgid "PayPal Integration Settings"
+msgstr "Configurações de Integração com PayPal"
+
+#: views/admin_payment_settings.php:36
+msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
+msgstr "Gerar o Código \"Advanced Variables\" para o botão PayPal"
+
+#: views/admin_payment_settings.php:39
+msgid "Enter the Membership Level ID"
+msgstr "Digite o Nível de Associação ID"
+
+#: views/admin_payment_settings.php:41
+msgid "Generate Code"
+msgstr "Gerar código"
+
+#: views/admin_tools_settings.php:9
+msgid "Generate a Registration Completion link"
+msgstr "Gerar link de Conclusão de Registro"
+
+#: views/admin_tools_settings.php:12
+msgid ""
+"You can manually generate a registration completion link here and give it to "
+"your customer if they have missed the email that was automatically sent out "
+"to them after the payment."
+msgstr ""
+"Você pode gerar um atalho manualmente conclusão de inscrição aqui e dar a "
+"seu cliente, se eles perderam o e-mail que foi enviado automaticamente para "
+"eles após o pagamento."
+
+#: views/admin_tools_settings.php:17
+msgid "Generate Registration Completion Link"
+msgstr "Gerar link de Conclusão de Registro"
+
+#: views/admin_tools_settings.php:20
+msgid "OR"
+msgstr "OU"
+
+#: views/admin_tools_settings.php:21
+msgid "For All Pending Registrations"
+msgstr "Para todos os registos pendentes"
+
+#: views/admin_tools_settings.php:24
+msgid "Registration Completion Links Will Appear Below:"
+msgstr "Links conclusão de inscrição aparecerá abaixo:"
+
+#: views/admin_tools_settings.php:31
+msgid "Send Registration Reminder Email too"
+msgstr "Enviar Inscrição Reminder Email demais"
+
+#: views/admin_tools_settings.php:34
+msgid "Submit"
+msgstr "Enviar"
+
+#: views/edit.php:58
+msgid "Update"
+msgstr "Atualização"
+
+#: views/forgot_password.php:5
+msgid "Email Address"
+msgstr "Endereço de e-mail"
+
+#: views/forgot_password.php:12
+msgid "Reset Password"
+msgstr "Redefinir senha"
+
+#: views/loggedin.php:3 views/login_widget_logged.php:3
+msgid "Logged in as"
+msgstr "Logado como"
+
+#: views/loggedin.php:11 views/login_widget_logged.php:9
+msgid "Membership"
+msgstr "Associado"
+
+#: views/loggedin.php:15 views/login_widget_logged.php:12
+msgid "Account Expiry"
+msgstr "Validade da Conta"
+
+#: views/loggedin.php:19 views/login_widget_logged.php:16
+msgid "Logout"
+msgstr "Sair"
+
+#: views/login.php:17
+msgid "Remember Me"
+msgstr "Lembre-se de mim"
+
+#: views/login.php:26
+msgid "Forgot Password"
+msgstr "Esqueci minha senha"
diff --git a/languages/swpm-ro_RO.mo b/languages/swpm-ro_RO.mo
new file mode 100644 (file)
index 0000000..09de7a7
Binary files /dev/null and b/languages/swpm-ro_RO.mo differ
diff --git a/languages/swpm-ro_RO.po b/languages/swpm-ro_RO.po
new file mode 100644 (file)
index 0000000..eb0c520
--- /dev/null
@@ -0,0 +1,709 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: simple membership\n"
+"POT-Creation-Date: 2014-08-28 19:28+1000\n"
+"PO-Revision-Date: 2015-01-11 12:34+0200\n"
+"Last-Translator: Iulian <iulian.cazangiu@gmail.com>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.7.3\n"
+"X-Poedit-KeywordsList: __;_e\n"
+"X-Poedit-Basepath: .\n"
+"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
+"2:1));\n"
+"Language: ro_RO\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: classes/class.bAccessControl.php:23 classes/class.bAccessControl.php:40
+msgid "You are not allowed to view this content"
+msgstr "Nu aveti dreptul sa accesati aceste informatii"
+
+#: classes/class.bAccessControl.php:26 classes/class.bAccessControl.php:43
+msgid "You need to login to view this content. "
+msgstr "Trebuie sa va autentificati pentru a vedea aceste informatii."
+
+#: classes/class.bAdminRegistration.php:48
+#: classes/class.bFrontRegistration.php:64
+msgid "Registration Successful."
+msgstr "Inregistrare reusita."
+
+#: classes/class.bAdminRegistration.php:53
+#: classes/class.bAdminRegistration.php:73
+#: classes/class.bMembershipLevel.php:36 classes/class.bMembershipLevel.php:54
+msgid "Please correct the following:"
+msgstr "Te rugam sa corectezi urmatoarele:"
+
+#: classes/class.bAjax.php:16 classes/class.bAjax.php:28
+msgid "Aready taken"
+msgstr "Deja folosit"
+
+#: classes/class.bAjax.php:29
+msgid "Available"
+msgstr "Disponibil"
+
+#: classes/class.bAuth.php:48 classes/class.bFrontRegistration.php:179
+msgid "User Not Found."
+msgstr "Nu am gasit utilizatorul"
+
+#: classes/class.bAuth.php:55
+msgid "Password Empty or Invalid."
+msgstr "Parola nu este introdusa sau este gresita."
+
+#: classes/class.bAuth.php:79
+msgid "Account is inactive."
+msgstr "Cont inactiv."
+
+#: classes/class.bAuth.php:89
+msgid "You are logged in as:"
+msgstr "Esti autentificat ca si:"
+
+#: classes/class.bAuth.php:128
+msgid "Logged Out Successfully."
+msgstr "Te-ai deautentificat cu succes."
+
+#: classes/class.bAuth.php:170
+msgid "Session Expired."
+msgstr "Sesiune expirata."
+
+#: classes/class.bAuth.php:179
+msgid "Invalid User Name"
+msgstr "Utilizator incorect"
+
+#: classes/class.bAuth.php:187
+msgid "Bad Cookie Hash"
+msgstr "Prajiturica rea :) (bad cookie)"
+
+#: classes/class.bForm.php:26
+msgid ""
+"Wordpress account exists with given user name. But given email doesn't match."
+msgstr ""
+"Exista un cont wordpress cu acest nume de utilizator dar nu se potrivesc "
+"adresele de email."
+
+#: classes/class.bForm.php:31
+msgid ""
+"Wordpress account exists with given email. But given user name doesn't match."
+msgstr ""
+"Exista un cont wordpress cu aceasta adresa de email dar nu se potriveste cu "
+"numele de utilizator."
+
+#: classes/class.bForm.php:40
+msgid "User name is required"
+msgstr "Este nevoie de numele de utilizator"
+
+#: classes/class.bForm.php:49
+msgid "User name already exists."
+msgstr "Acest nume de utilizator exista deja."
+
+#: classes/class.bForm.php:72
+msgid "Password is required"
+msgstr "Este nevoie de parola"
+
+#: classes/class.bForm.php:79
+msgid "Password mismatch"
+msgstr "Parolele nu se potrivesc"
+
+#: classes/class.bForm.php:95
+msgid "Email is required"
+msgstr "Este nevoie de adresa de email"
+
+#: classes/class.bForm.php:99
+msgid "Email is invalid"
+msgstr "Adresa de email incorecta"
+
+#: classes/class.bForm.php:112
+msgid "Email is already used."
+msgstr "Adresa de email deja inregistrata in baza noastra de date"
+
+#: classes/class.bForm.php:178
+msgid "Member since field is invalid"
+msgstr "Campul de membru din este incorect"
+
+#: classes/class.bForm.php:189
+msgid "Subscription starts field is invalid"
+msgstr "Campul de start calitate membru este incorect"
+
+#: classes/class.bForm.php:199
+msgid "Gender field is invalid"
+msgstr "Campul de gen sexual este incorect"
+
+#: classes/class.bForm.php:210
+msgid "Account state field is invalid"
+msgstr "Campul de stare a contului este incorect"
+
+#: classes/class.bFrontRegistration.php:64 classes/class.bSettings.php:326
+msgid "Please"
+msgstr "Te rugam"
+
+#: classes/class.bFrontRegistration.php:64 classes/class.bSettings.php:326
+#: views/login.php:21
+msgid "Login"
+msgstr "Autentificare"
+
+#: classes/class.bFrontRegistration.php:79
+#: classes/class.bFrontRegistration.php:158
+msgid "Please correct the following"
+msgstr "Te rugam sa corectezi urmatoarele"
+
+#: classes/class.bFrontRegistration.php:92
+msgid "Membership Level Couldn't be found."
+msgstr "Nivelul de membru nu a fost gasit"
+
+#: classes/class.bFrontRegistration.php:168
+msgid "Email Address Not Valid."
+msgstr "Adresa de email incorecta"
+
+#: classes/class.bFrontRegistration.php:199
+msgid "New password has been sent to your email address."
+msgstr "O noua parola a fost trimisa pe adresa dvs. de email."
+
+#: classes/class.bLevelForm.php:31
+msgid "Subscriptoin duration must be > 0."
+msgstr "Durata abonarii trebuie sa fie mai mare ca 0"
+
+#: classes/class.bMembers.php:7
+msgid "Member"
+msgstr "Membru"
+
+#: classes/class.bMembers.php:8 classes/class.simple-wp-membership.php:467
+msgid "Members"
+msgstr "Membrii"
+
+#: classes/class.bMembers.php:16 classes/class.bMembershipLevels.php:16
+msgid "ID"
+msgstr "ID"
+
+#: classes/class.bMembers.php:17 views/add.php:5 views/edit.php:4
+#: views/login.php:5
+msgid "User Name"
+msgstr "Nume de utilizator"
+
+#: classes/class.bMembers.php:18 views/add.php:21
+#: views/admin_member_form_common_part.php:2 views/edit.php:20
+msgid "First Name"
+msgstr "Prenume"
+
+#: classes/class.bMembers.php:19 views/add.php:25
+#: views/admin_member_form_common_part.php:6 views/edit.php:24
+msgid "Last Name"
+msgstr "Nume de familie"
+
+#: classes/class.bMembers.php:20 views/add.php:9 views/edit.php:8
+msgid "Email"
+msgstr "Adresa de email"
+
+#: classes/class.bMembers.php:21 classes/class.bMembershipLevels.php:8
+#: classes/class.bMembershipLevels.php:17 views/add.php:64
+#: views/admin_member_form_common_part.php:55 views/edit.php:52
+msgid "Membership Level"
+msgstr "Nivel de abonare"
+
+#: classes/class.bMembers.php:22 views/admin_member_form_common_part.php:78
+msgid "Subscription Starts"
+msgstr "Abonarea incepe la"
+
+#: classes/class.bMembers.php:23
+msgid "Account State"
+msgstr "Starea contului"
+
+#: classes/class.bMembers.php:35 classes/class.bMembershipLevels.php:29
+msgid "Delete"
+msgstr "Stergere"
+
+#: classes/class.bMembers.php:100
+msgid "No Member found."
+msgstr "Nu am gasit membrul"
+
+#: classes/class.bMembershipLevel.php:31
+msgid "Membership Level Creation Successful."
+msgstr "Nivelul de abonare creat cu succes"
+
+#: classes/class.bMembershipLevel.php:50
+msgid "Updated Successfully."
+msgstr "Actualizat cu succes"
+
+#: classes/class.bMembershipLevels.php:9
+#: classes/class.simple-wp-membership.php:469
+msgid "Membership Levels"
+msgstr "Niveluri de abonare"
+
+#: classes/class.bMembershipLevels.php:18
+msgid "Role"
+msgstr "Rol"
+
+#: classes/class.bMembershipLevels.php:19
+msgid "Subscription Valid For"
+msgstr "Abonare valabila pana la"
+
+#: classes/class.bSettings.php:28
+msgid "Plugin Documentation"
+msgstr "Documentatie plugin"
+
+#: classes/class.bSettings.php:30
+msgid "General Settings"
+msgstr "Setari generale"
+
+#: classes/class.bSettings.php:32
+msgid "Enable Free Membership"
+msgstr "Permite Abonare gratuita"
+
+#: classes/class.bSettings.php:35
+msgid "Enable/disable registration for free membership level"
+msgstr "Permite/Nu permie inregistrarea pentru abonare gratuita"
+
+#: classes/class.bSettings.php:36
+msgid "Free Membership Level ID"
+msgstr "ID pentru Abonarea gratuita"
+
+#: classes/class.bSettings.php:39
+msgid "Assign free membership level ID"
+msgstr "Aloca ID pentru abonare gratuita"
+
+#: classes/class.bSettings.php:40
+msgid "Hide Adminbar"
+msgstr "Ascunde bara de admin"
+
+#: classes/class.bSettings.php:43
+msgid ""
+"WordPress shows an admin toolbar to the logged in users of the site. Check "
+"this box if you want to hide that admin toolbar in the fronend of your site."
+msgstr ""
+"Wordpress arata bara de administrator utilizatorilor autentificati. Bifeaza "
+"casuta pentru a ascunde aceasta bara."
+
+#: classes/class.bSettings.php:45
+msgid "Pages Settings"
+msgstr "Setari pagina"
+
+#: classes/class.bSettings.php:47
+msgid "Login Page URL"
+msgstr "URL pentru autentificare"
+
+#: classes/class.bSettings.php:51
+msgid "Registration Page URL"
+msgstr "URL pentru inregistrare"
+
+#: classes/class.bSettings.php:55
+msgid "Join Us Page URL"
+msgstr "URL pentru Pagina de Aderare"
+
+#: classes/class.bSettings.php:59
+msgid "Edit Profile Page URL"
+msgstr "URL pentru editarea profilului"
+
+#: classes/class.bSettings.php:63
+msgid "Password Reset Page URL"
+msgstr "URL pentru resetare parola"
+
+#: classes/class.bSettings.php:68
+msgid "Test & Debug Settings"
+msgstr "Setari pentru test & debug"
+
+#: classes/class.bSettings.php:74
+msgid "Enable Sandbox Testing"
+msgstr "Permite testarea in mediul Sandbox"
+
+#: classes/class.bSettings.php:77
+msgid "Enable this option if you want to do sandbox payment testing."
+msgstr "Bifeaza acesta optiune pentru testarea platilor"
+
+#: classes/class.bSettings.php:90
+msgid "Email Misc. Settings"
+msgstr "Setari diverse de email"
+
+#: classes/class.bSettings.php:92
+msgid "From Email Address"
+msgstr "Adresa de email de la care sa plece toate email-urile"
+
+#: classes/class.bSettings.php:97
+msgid "Email Settings (Prompt to Complete Registration )"
+msgstr "Setari email (Pentru a termina inregistrarea)"
+
+#: classes/class.bSettings.php:99 classes/class.bSettings.php:110
+#: classes/class.bSettings.php:129
+msgid "Email Subject"
+msgstr "Subiect Email"
+
+#: classes/class.bSettings.php:103 classes/class.bSettings.php:114
+#: classes/class.bSettings.php:133
+msgid "Email Body"
+msgstr "Continut Email"
+
+#: classes/class.bSettings.php:108
+msgid "Email Settings (Registration Complete)"
+msgstr "Setari Email (Inregistrare reusita)"
+
+#: classes/class.bSettings.php:118
+msgid "Send Notification To Admin"
+msgstr "Trimitere notificari catre Admin"
+
+#: classes/class.bSettings.php:122
+msgid "Send Email to Member When Added via Admin Dashboard"
+msgstr "Trimite email la membrii cand sunt adaugati via Admin Dashboard"
+
+#: classes/class.bSettings.php:127
+msgid " Email Settings (Account Upgrade Notification)"
+msgstr "Setari Email (Notificari pentru upgrade la abonare)"
+
+#: classes/class.bSettings.php:326
+msgid "Not a Member?"
+msgstr "Nu sunteti inca membru ?"
+
+#: classes/class.bSettings.php:326 views/login.php:30
+msgid "Join Us"
+msgstr "Inscrieti-va"
+
+#: classes/class.bUtils.php:32 views/admin_member_form_common_part.php:66
+msgid "Active"
+msgstr "Activ"
+
+#: classes/class.bUtils.php:33 views/admin_member_form_common_part.php:67
+msgid "Inactive"
+msgstr "Inactiv"
+
+#: classes/class.bUtils.php:34 views/admin_member_form_common_part.php:68
+msgid "Pending"
+msgstr "In asteptare"
+
+#: classes/class.bUtils.php:35 views/admin_member_form_common_part.php:69
+msgid "Expired"
+msgstr "Expirat"
+
+#: classes/class.bUtils.php:225
+msgid "Never"
+msgstr "Niciodata"
+
+#: classes/class.miscUtils.php:51
+msgid "Registration"
+msgstr "Inregistrare"
+
+#: classes/class.miscUtils.php:74
+msgid "Member Login"
+msgstr "Autentificare membrii"
+
+#: classes/class.miscUtils.php:97
+msgid "Profile"
+msgstr "Profil"
+
+#: classes/class.miscUtils.php:120
+msgid "Password Reset"
+msgstr "Resetare Parola"
+
+#: classes/class.simple-wp-membership.php:178
+msgid "You are not logged in."
+msgstr "Nu sunteti autentificat"
+
+#: classes/class.simple-wp-membership.php:209
+msgid "Simple WP Membership Protection"
+msgstr "Simple WP Membership Protection"
+
+#: classes/class.simple-wp-membership.php:222
+msgid "Simple Membership Protection options"
+msgstr "Optiuni Simple WP Membership Protection"
+
+#: classes/class.simple-wp-membership.php:238
+msgid "Do you want to protect this content?"
+msgstr "Vrei sa protejezi acest continut ?"
+
+#: classes/class.simple-wp-membership.php:243
+msgid "Select the membership level that can access this content:"
+msgstr "Selecteaza nivelul de abonare ce poate accesa acest continu:"
+
+#: classes/class.simple-wp-membership.php:375
+msgid "Display SWPM Login."
+msgstr "Arata autentificare SWPM ."
+
+#: classes/class.simple-wp-membership.php:377
+msgid "SWPM Login"
+msgstr "Autentificare SWPM"
+
+#: classes/class.simple-wp-membership.php:464
+msgid "WP Membership"
+msgstr "Abonare WP"
+
+#: classes/class.simple-wp-membership.php:471
+msgid "Settings"
+msgstr "Setari"
+
+#: views/add.php:13 views/admin_member_form_common_part.php:45
+#: views/edit.php:12 views/login.php:11
+msgid "Password"
+msgstr "Parola"
+
+#: views/add.php:17 views/edit.php:16
+msgid "Repeat Password"
+msgstr "Repetare Parola"
+
+#: views/add.php:29 views/admin_member_form_common_part.php:10
+msgid "Gender"
+msgstr "Sex"
+
+#: views/add.php:36 views/admin_member_form_common_part.php:17
+#: views/edit.php:28
+msgid "Phone"
+msgstr "Telefon"
+
+#: views/add.php:40 views/admin_member_form_common_part.php:21
+#: views/edit.php:32
+msgid "Street"
+msgstr "Strada"
+
+#: views/add.php:44 views/admin_member_form_common_part.php:25
+#: views/edit.php:36
+msgid "City"
+msgstr "Oras"
+
+#: views/add.php:48 views/admin_member_form_common_part.php:29
+#: views/edit.php:40
+msgid "State"
+msgstr "Judet"
+
+#: views/add.php:52 views/admin_member_form_common_part.php:33
+#: views/edit.php:44
+msgid "Zipcode"
+msgstr "Cod postal"
+
+#: views/add.php:56 views/admin_member_form_common_part.php:37
+#: views/edit.php:48
+msgid "Country"
+msgstr "Tara"
+
+#: views/add.php:60 views/admin_member_form_common_part.php:41
+msgid "Company"
+msgstr "Companie"
+
+#: views/add.php:71
+msgid "Register"
+msgstr "Inregistrare"
+
+#: views/admin_add.php:6
+msgid "Add Member"
+msgstr "Adauga membru"
+
+#: views/admin_add.php:7
+msgid "Create a brand new user and add it to this site."
+msgstr "Creeaza un utilizator nou si adauga-l pe site."
+
+#: views/admin_add.php:11
+msgid "User name"
+msgstr "Nume de utilizator"
+
+#: views/admin_add.php:11 views/admin_add.php:15 views/admin_add_level.php:11
+#: views/admin_add_level.php:15 views/admin_add_level.php:19
+#: views/admin_edit.php:9 views/admin_edit.php:13
+#: views/admin_edit_level.php:10 views/admin_edit_level.php:14
+#: views/admin_edit_level.php:18
+msgid "(required)"
+msgstr "(obligatoriu)"
+
+#: views/admin_add.php:15 views/admin_edit.php:13
+msgid "E-mail"
+msgstr "Adresa de email"
+
+#: views/admin_add.php:19
+msgid "Add New Member "
+msgstr "Adauga membru nou"
+
+#: views/admin_add_level.php:6
+msgid "Create new membership level."
+msgstr "Creeaza nivel nou de abonare"
+
+#: views/admin_add_level.php:11 views/admin_edit_level.php:10
+msgid "Membership Level Name"
+msgstr "Nume nivel de abonare"
+
+#: views/admin_add_level.php:15 views/admin_edit_level.php:14
+msgid "Default WordPress Role"
+msgstr "Rol Wordpress implicit"
+
+#: views/admin_add_level.php:19 views/admin_edit_level.php:18
+msgid "Subscription Duration"
+msgstr "Durata Abonare"
+
+#: views/admin_add_level.php:26 views/admin_edit_level.php:27
+msgid "No Expiry"
+msgstr "Fara expirare"
+
+#: views/admin_add_level.php:55
+msgid "Add New Membership Level "
+msgstr "Adauga nivel nou de abonare"
+
+#: views/admin_edit.php:5
+msgid "Edit Member"
+msgstr "Editeaza membru"
+
+#: views/admin_edit.php:6
+msgid "Edit existing member details."
+msgstr "Editeaza detalii membru existent"
+
+#: views/admin_edit.php:9
+msgid "Username"
+msgstr "Utilizator"
+
+#: views/admin_edit.php:18
+msgid "Edit User "
+msgstr "Editeaza utilizator"
+
+#: views/admin_edit_level.php:5
+msgid "Edit membership level"
+msgstr "Editeaza nivel abonare"
+
+#: views/admin_edit_level.php:6
+msgid "Edit membership level."
+msgstr "Editeaza nivel abonare."
+
+#: views/admin_edit_level.php:54
+msgid "Edit Membership Level "
+msgstr "Editeaza nivel abonare"
+
+#: views/admin_members.php:2
+msgid "Simple WP Membership::Members"
+msgstr "Simple WP Membership::Membrii"
+
+#: views/admin_members.php:3 views/admin_members.php:19
+#: views/admin_membership_levels.php:21
+msgid "Add New"
+msgstr "Adauga nou"
+
+#: views/admin_members.php:9 views/admin_membership_levels.php:11
+msgid "search"
+msgstr "cauta"
+
+#: views/admin_membership_levels.php:3
+msgid "Simple WP Membership::Membership Levels"
+msgstr "Simple WP Membership::Nivele Abonare"
+
+#: views/admin_membership_level_menu.php:2
+msgid "Membership level"
+msgstr "Nivel Abonare"
+
+#: views/admin_membership_level_menu.php:3
+msgid "Manage Content Production"
+msgstr "Gestioneaza generarea de continut"
+
+#: views/admin_membership_manage.php:17
+msgid "Example Content Protection Settings"
+msgstr "Exemplu de setari protejare continut"
+
+#: views/admin_member_form_common_part.php:45
+msgid "(twice, required)"
+msgstr "(de doua ori, obligatoriu)"
+
+#: views/admin_member_form_common_part.php:50
+msgid "Strength indicator"
+msgstr "Indicator complexitate"
+
+#: views/admin_member_form_common_part.php:51
+msgid ""
+"Hint: The password should be at least seven characters long. To make it "
+"stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
+"$ % ^ &amp; )."
+msgstr ""
+"Sfat: Parola ar trebui sa aibe macar 7 caractere. Pentru a fi cat mai "
+"complexa, folositi litere mici si mari, numere si simboluri de genul ! \" ? "
+"$ % ^ &amp;)"
+
+#: views/admin_member_form_common_part.php:64 views/loggedin.php:7
+#: views/login_widget_logged.php:6
+msgid "Account Status"
+msgstr "Status cont"
+
+#: views/admin_member_form_common_part.php:74
+msgid "Member Since"
+msgstr "Membru din"
+
+#: views/admin_payment_settings.php:2 views/admin_settings.php:2
+#: views/admin_tools_settings.php:2
+msgid "Simple WP Membership::Settings"
+msgstr "Simple WP Membership::Setari"
+
+#: views/admin_payment_settings.php:33
+msgid "PayPal Integration Settings"
+msgstr "Setari integrare plati Paypal"
+
+#: views/admin_payment_settings.php:36
+msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
+msgstr "Genereaza codul de \"Advanced Variables\" necesar butonului Paypal"
+
+#: views/admin_payment_settings.php:39
+msgid "Enter the Membership Level ID"
+msgstr "Introdu ID pentru nivelul de abonare"
+
+#: views/admin_payment_settings.php:41
+msgid "Generate Code"
+msgstr "Genereaza cod"
+
+#: views/admin_tools_settings.php:9
+msgid "Generate a Registration Completion link"
+msgstr "Genereaza link pentru Inregistrarea incheiata cu succes"
+
+#: views/admin_tools_settings.php:12
+msgid ""
+"You can manually generate a registration completion link here and give it to "
+"your customer if they have missed the email that was automatically sent out "
+"to them after the payment."
+msgstr ""
+"Poti genera manual un link pentru inregistrarea cu succes si il poti trimite "
+"clientului daca acestia nu au primit email-ul automat dupa efectuarea platii."
+
+#: views/admin_tools_settings.php:17
+msgid "Generate Registration Completion Link"
+msgstr "Genereaza link pentru inregistrarea cu succes"
+
+#: views/admin_tools_settings.php:20
+msgid "OR"
+msgstr "SAU"
+
+#: views/admin_tools_settings.php:21
+msgid "For All Pending Registrations"
+msgstr "Pentru toate inregistrarile in asteptare"
+
+#: views/admin_tools_settings.php:24
+msgid "Registration Completion Links Will Appear Below:"
+msgstr "Link-ul de inregistrare cu succes va aparea dedesubt:"
+
+#: views/admin_tools_settings.php:31
+msgid "Send Registration Reminder Email too"
+msgstr "Trimite de asemenea si un email cu reminder de inregistrare"
+
+#: views/admin_tools_settings.php:34
+msgid "Submit"
+msgstr "Trimite"
+
+#: views/edit.php:58
+msgid "Update"
+msgstr "Actualizeaza"
+
+#: views/forgot_password.php:5
+msgid "Email Address"
+msgstr "Adresa de email"
+
+#: views/forgot_password.php:12
+msgid "Reset Password"
+msgstr "Resetare Parola"
+
+#: views/loggedin.php:3 views/login_widget_logged.php:3
+msgid "Logged in as"
+msgstr "Autentificat ca"
+
+#: views/loggedin.php:11 views/login_widget_logged.php:9
+msgid "Membership"
+msgstr "Abonare"
+
+#: views/loggedin.php:15 views/login_widget_logged.php:12
+msgid "Account Expiry"
+msgstr "Expirare cont"
+
+#: views/loggedin.php:19 views/login_widget_logged.php:16
+msgid "Logout"
+msgstr "Iesire din cont"
+
+#: views/login.php:17
+msgid "Remember Me"
+msgstr "Tine-ma minte"
+
+#: views/login.php:26
+msgid "Forgot Password"
+msgstr "Am uitat parola"
diff --git a/languages/swpm-ru_RU.mo b/languages/swpm-ru_RU.mo
new file mode 100644 (file)
index 0000000..3d3be29
Binary files /dev/null and b/languages/swpm-ru_RU.mo differ
diff --git a/languages/swpm-ru_RU.po b/languages/swpm-ru_RU.po
new file mode 100644 (file)
index 0000000..05f9ca9
--- /dev/null
@@ -0,0 +1,712 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: simple membership\n"
+"POT-Creation-Date: 2014-08-28 19:28+1000\n"
+"PO-Revision-Date: 2015-01-11 02:11+0300\n"
+"Last-Translator: Vladimir Vaulin <vvaulin@hotmail.com>\n"
+"Language-Team: \n"
+"Language: ru_RU\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.7.3\n"
+"X-Poedit-KeywordsList: __;_e\n"
+"X-Poedit-Basepath: .\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: classes/class.bAccessControl.php:23 classes/class.bAccessControl.php:40
+msgid "You are not allowed to view this content"
+msgstr "У вас нет прав на просмотр этого материала."
+
+#: classes/class.bAccessControl.php:26 classes/class.bAccessControl.php:43
+msgid "You need to login to view this content. "
+msgstr "Вам необходимо войти, чтобы увидеть этот материал."
+
+#: classes/class.bAdminRegistration.php:48
+#: classes/class.bFrontRegistration.php:64
+msgid "Registration Successful."
+msgstr "Регистрация осуществлена успешно."
+
+#: classes/class.bAdminRegistration.php:53
+#: classes/class.bAdminRegistration.php:73
+#: classes/class.bMembershipLevel.php:36 classes/class.bMembershipLevel.php:54
+msgid "Please correct the following:"
+msgstr "Пожалуйста, исправьте следующие ошибки:"
+
+#: classes/class.bAjax.php:16 classes/class.bAjax.php:28
+msgid "Aready taken"
+msgstr "Уже принято"
+
+#: classes/class.bAjax.php:29
+msgid "Available"
+msgstr "Доступно"
+
+#: classes/class.bAuth.php:48 classes/class.bFrontRegistration.php:179
+msgid "User Not Found."
+msgstr "Пользователь не найден."
+
+#: classes/class.bAuth.php:55
+msgid "Password Empty or Invalid."
+msgstr "Пароль пустой или неверный."
+
+#: classes/class.bAuth.php:79
+msgid "Account is inactive."
+msgstr "Учетная запись не активна."
+
+#: classes/class.bAuth.php:89
+msgid "You are logged in as:"
+msgstr "Вы вошли как:"
+
+#: classes/class.bAuth.php:128
+msgid "Logged Out Successfully."
+msgstr "Вы успешно вышли."
+
+#: classes/class.bAuth.php:170
+msgid "Session Expired."
+msgstr "Сессия истекла."
+
+#: classes/class.bAuth.php:179
+msgid "Invalid User Name"
+msgstr "Неверное имя пользователя"
+
+#: classes/class.bAuth.php:187
+msgid "Bad Cookie Hash"
+msgstr "Неверный хэш куки"
+
+#: classes/class.bForm.php:26
+msgid ""
+"Wordpress account exists with given user name. But given email doesn't match."
+msgstr ""
+"Для указанного пользователя существует учетная запись, но e-mail не "
+"совпадает."
+
+#: classes/class.bForm.php:31
+msgid ""
+"Wordpress account exists with given email. But given user name doesn't match."
+msgstr ""
+"Для указанного e-mail существует учетная запись, но имя пользователя не "
+"совпадает."
+
+#: classes/class.bForm.php:40
+msgid "User name is required"
+msgstr "Имя пользователя обязательно."
+
+#: classes/class.bForm.php:49
+msgid "User name already exists."
+msgstr "Такой пользователь уже существует."
+
+#: classes/class.bForm.php:72
+msgid "Password is required"
+msgstr "Пароль обязателен"
+
+#: classes/class.bForm.php:79
+msgid "Password mismatch"
+msgstr "Пароль не совпадает"
+
+#: classes/class.bForm.php:95
+msgid "Email is required"
+msgstr "E-mail обязателен"
+
+#: classes/class.bForm.php:99
+msgid "Email is invalid"
+msgstr "Неверный e-mail"
+
+#: classes/class.bForm.php:112
+msgid "Email is already used."
+msgstr "Такой e-mail уже существует."
+
+#: classes/class.bForm.php:178
+msgid "Member since field is invalid"
+msgstr "Неверное поле \"дата присоединения\""
+
+#: classes/class.bForm.php:189
+msgid "Subscription starts field is invalid"
+msgstr "Неверное поле \"начало подписки\""
+
+#: classes/class.bForm.php:199
+msgid "Gender field is invalid"
+msgstr "Неверное поле \"пол\""
+
+#: classes/class.bForm.php:210
+msgid "Account state field is invalid"
+msgstr "Неверное поле \"состояние учетной записи\""
+
+#: classes/class.bFrontRegistration.php:64 classes/class.bSettings.php:326
+msgid "Please"
+msgstr "Пожалуйста,"
+
+#: classes/class.bFrontRegistration.php:64 classes/class.bSettings.php:326
+#: views/login.php:21
+msgid "Login"
+msgstr "Войдите"
+
+#: classes/class.bFrontRegistration.php:79
+#: classes/class.bFrontRegistration.php:158
+msgid "Please correct the following"
+msgstr "Пожалуйста, исправьте следующие ошибки"
+
+#: classes/class.bFrontRegistration.php:92
+msgid "Membership Level Couldn't be found."
+msgstr "Уровень доступа не найден."
+
+#: classes/class.bFrontRegistration.php:168
+msgid "Email Address Not Valid."
+msgstr "Неверный адрес e-mail."
+
+#: classes/class.bFrontRegistration.php:199
+msgid "New password has been sent to your email address."
+msgstr "На Ваш адрес e-mail выслан новый пароль."
+
+#: classes/class.bLevelForm.php:31
+msgid "Subscriptoin duration must be > 0."
+msgstr "Срок подписки должен быть больше 0."
+
+#: classes/class.bMembers.php:7
+msgid "Member"
+msgstr "Участник"
+
+#: classes/class.bMembers.php:8 classes/class.simple-wp-membership.php:467
+msgid "Members"
+msgstr "Участники"
+
+#: classes/class.bMembers.php:16 classes/class.bMembershipLevels.php:16
+msgid "ID"
+msgstr "ID"
+
+#: classes/class.bMembers.php:17 views/add.php:5 views/edit.php:4
+#: views/login.php:5
+msgid "User Name"
+msgstr "Имя пользователя"
+
+#: classes/class.bMembers.php:18 views/add.php:21
+#: views/admin_member_form_common_part.php:2 views/edit.php:20
+msgid "First Name"
+msgstr "Имя"
+
+#: classes/class.bMembers.php:19 views/add.php:25
+#: views/admin_member_form_common_part.php:6 views/edit.php:24
+msgid "Last Name"
+msgstr "Фамилия"
+
+#: classes/class.bMembers.php:20 views/add.php:9 views/edit.php:8
+msgid "Email"
+msgstr "E-mail"
+
+#: classes/class.bMembers.php:21 classes/class.bMembershipLevels.php:8
+#: classes/class.bMembershipLevels.php:17 views/add.php:64
+#: views/admin_member_form_common_part.php:55 views/edit.php:52
+msgid "Membership Level"
+msgstr "Уровень доступа"
+
+#: classes/class.bMembers.php:22 views/admin_member_form_common_part.php:78
+msgid "Subscription Starts"
+msgstr "Подписка начинается"
+
+#: classes/class.bMembers.php:23
+msgid "Account State"
+msgstr "Состояние учетной записи"
+
+#: classes/class.bMembers.php:35 classes/class.bMembershipLevels.php:29
+msgid "Delete"
+msgstr "Удалить"
+
+#: classes/class.bMembers.php:100
+msgid "No Member found."
+msgstr "Участник не найден."
+
+#: classes/class.bMembershipLevel.php:31
+msgid "Membership Level Creation Successful."
+msgstr "Уровень доступа успешно создан."
+
+#: classes/class.bMembershipLevel.php:50
+msgid "Updated Successfully."
+msgstr "Успешно обновлено."
+
+#: classes/class.bMembershipLevels.php:9
+#: classes/class.simple-wp-membership.php:469
+msgid "Membership Levels"
+msgstr "Уровни доступа"
+
+#: classes/class.bMembershipLevels.php:18
+msgid "Role"
+msgstr "Роль"
+
+#: classes/class.bMembershipLevels.php:19
+msgid "Subscription Valid For"
+msgstr "Подписка действительна до"
+
+#: classes/class.bSettings.php:28
+msgid "Plugin Documentation"
+msgstr "Документация плагина"
+
+#: classes/class.bSettings.php:30
+msgid "General Settings"
+msgstr "Общие настройки"
+
+#: classes/class.bSettings.php:32
+msgid "Enable Free Membership"
+msgstr "Включить бесплатное членство"
+
+#: classes/class.bSettings.php:35
+msgid "Enable/disable registration for free membership level"
+msgstr "Включить/отключить регистрацию для бесплатного уровня доступа"
+
+#: classes/class.bSettings.php:36
+msgid "Free Membership Level ID"
+msgstr "ID бесплатного уровня доступа"
+
+#: classes/class.bSettings.php:39
+msgid "Assign free membership level ID"
+msgstr "Присвоить ID бесплатного уровня доступа"
+
+#: classes/class.bSettings.php:40
+msgid "Hide Adminbar"
+msgstr "Спрятать панель администрирования"
+
+#: classes/class.bSettings.php:43
+msgid ""
+"WordPress shows an admin toolbar to the logged in users of the site. Check "
+"this box if you want to hide that admin toolbar in the fronend of your site."
+msgstr ""
+"Всем вошедшим пользователям WordPress показывает панель администрирования. "
+"Поставьте этот флажок, если вы хотите прятать панель администрирования со "
+"страниц вашего сайта."
+
+#: classes/class.bSettings.php:45
+msgid "Pages Settings"
+msgstr "Настройки страниц"
+
+#: classes/class.bSettings.php:47
+msgid "Login Page URL"
+msgstr "URL страницы логина"
+
+#: classes/class.bSettings.php:51
+msgid "Registration Page URL"
+msgstr "URL страницы регистрации"
+
+#: classes/class.bSettings.php:55
+msgid "Join Us Page URL"
+msgstr "URL страницы для новичков"
+
+#: classes/class.bSettings.php:59
+msgid "Edit Profile Page URL"
+msgstr "URL страницы редактирования профиля"
+
+#: classes/class.bSettings.php:63
+msgid "Password Reset Page URL"
+msgstr "URL страницы сброса пароля"
+
+#: classes/class.bSettings.php:68
+msgid "Test & Debug Settings"
+msgstr "Настройки тестирования и отладки"
+
+#: classes/class.bSettings.php:74
+msgid "Enable Sandbox Testing"
+msgstr "Разрешить тестирование в режиме песочницы"
+
+#: classes/class.bSettings.php:77
+msgid "Enable this option if you want to do sandbox payment testing."
+msgstr ""
+"Включите эту настройку, если вы хотите проводить платежи в тестовом режиме."
+
+#: classes/class.bSettings.php:90
+msgid "Email Misc. Settings"
+msgstr "Различные настройки e-mail"
+
+#: classes/class.bSettings.php:92
+msgid "From Email Address"
+msgstr "Адрес отправки писем"
+
+#: classes/class.bSettings.php:97
+msgid "Email Settings (Prompt to Complete Registration )"
+msgstr "Настройки писем (Запрос о подтверждении регистрации)"
+
+#: classes/class.bSettings.php:99 classes/class.bSettings.php:110
+#: classes/class.bSettings.php:129
+msgid "Email Subject"
+msgstr "Тема письма"
+
+#: classes/class.bSettings.php:103 classes/class.bSettings.php:114
+#: classes/class.bSettings.php:133
+msgid "Email Body"
+msgstr "Текст письма"
+
+#: classes/class.bSettings.php:108
+msgid "Email Settings (Registration Complete)"
+msgstr "Настройки писем (Успешная регистрация)"
+
+#: classes/class.bSettings.php:118
+msgid "Send Notification To Admin"
+msgstr "Отправлять уведомление администратору"
+
+#: classes/class.bSettings.php:122
+msgid "Send Email to Member When Added via Admin Dashboard"
+msgstr "Отправлять уведомление участнику, когда он добавлен администратором"
+
+#: classes/class.bSettings.php:127
+msgid " Email Settings (Account Upgrade Notification)"
+msgstr "Настройки писем (Уведомление об обновлении учетной записи)"
+
+#: classes/class.bSettings.php:326
+msgid "Not a Member?"
+msgstr "Не участник?"
+
+#: classes/class.bSettings.php:326 views/login.php:30
+msgid "Join Us"
+msgstr "Присоединяйтесь к нам"
+
+#: classes/class.bUtils.php:32 views/admin_member_form_common_part.php:66
+msgid "Active"
+msgstr "Активный"
+
+#: classes/class.bUtils.php:33 views/admin_member_form_common_part.php:67
+msgid "Inactive"
+msgstr "Неактивный"
+
+#: classes/class.bUtils.php:34 views/admin_member_form_common_part.php:68
+msgid "Pending"
+msgstr "В ожидании"
+
+#: classes/class.bUtils.php:35 views/admin_member_form_common_part.php:69
+msgid "Expired"
+msgstr "Просрочен"
+
+#: classes/class.bUtils.php:225
+msgid "Never"
+msgstr "Никогда"
+
+#: classes/class.miscUtils.php:51
+msgid "Registration"
+msgstr "Регистрация"
+
+#: classes/class.miscUtils.php:74
+msgid "Member Login"
+msgstr "Вход для участников"
+
+#: classes/class.miscUtils.php:97
+msgid "Profile"
+msgstr "Учетная запись"
+
+#: classes/class.miscUtils.php:120
+msgid "Password Reset"
+msgstr "Сброс пароля"
+
+#: classes/class.simple-wp-membership.php:178
+msgid "You are not logged in."
+msgstr "Вы не вошли на сайт."
+
+#: classes/class.simple-wp-membership.php:209
+msgid "Simple WP Membership Protection"
+msgstr "Защита Simple WP Membership"
+
+#: classes/class.simple-wp-membership.php:222
+msgid "Simple Membership Protection options"
+msgstr "Настройки защиты Simple Membership"
+
+#: classes/class.simple-wp-membership.php:238
+msgid "Do you want to protect this content?"
+msgstr "Вы хотите защитить этот материал?"
+
+#: classes/class.simple-wp-membership.php:243
+msgid "Select the membership level that can access this content:"
+msgstr ""
+"Выберите уровень доступа, которому будет разрешен доступ к этому материалу:"
+
+#: classes/class.simple-wp-membership.php:375
+msgid "Display SWPM Login."
+msgstr "Показывать вход в SWPM."
+
+#: classes/class.simple-wp-membership.php:377
+msgid "SWPM Login"
+msgstr "Вход в SWPM"
+
+#: classes/class.simple-wp-membership.php:464
+msgid "WP Membership"
+msgstr "WP Membership"
+
+#: classes/class.simple-wp-membership.php:471
+msgid "Settings"
+msgstr "Настройки"
+
+#: views/add.php:13 views/admin_member_form_common_part.php:45
+#: views/edit.php:12 views/login.php:11
+msgid "Password"
+msgstr "Пароль"
+
+#: views/add.php:17 views/edit.php:16
+msgid "Repeat Password"
+msgstr "Повторите пароль"
+
+#: views/add.php:29 views/admin_member_form_common_part.php:10
+msgid "Gender"
+msgstr "Пол"
+
+#: views/add.php:36 views/admin_member_form_common_part.php:17
+#: views/edit.php:28
+msgid "Phone"
+msgstr "Телефон"
+
+#: views/add.php:40 views/admin_member_form_common_part.php:21
+#: views/edit.php:32
+msgid "Street"
+msgstr "Улица"
+
+#: views/add.php:44 views/admin_member_form_common_part.php:25
+#: views/edit.php:36
+msgid "City"
+msgstr "Город"
+
+#: views/add.php:48 views/admin_member_form_common_part.php:29
+#: views/edit.php:40
+msgid "State"
+msgstr "Регион/Штат"
+
+#: views/add.php:52 views/admin_member_form_common_part.php:33
+#: views/edit.php:44
+msgid "Zipcode"
+msgstr "Индекс"
+
+#: views/add.php:56 views/admin_member_form_common_part.php:37
+#: views/edit.php:48
+msgid "Country"
+msgstr "Страна"
+
+#: views/add.php:60 views/admin_member_form_common_part.php:41
+msgid "Company"
+msgstr "Компания"
+
+#: views/add.php:71
+msgid "Register"
+msgstr "Зарегистрироваться"
+
+#: views/admin_add.php:6
+msgid "Add Member"
+msgstr "Добавить участника"
+
+#: views/admin_add.php:7
+msgid "Create a brand new user and add it to this site."
+msgstr "Создать нового участника и добавить его на сайт."
+
+#: views/admin_add.php:11
+msgid "User name"
+msgstr "Имя пользователя"
+
+#: views/admin_add.php:11 views/admin_add.php:15 views/admin_add_level.php:11
+#: views/admin_add_level.php:15 views/admin_add_level.php:19
+#: views/admin_edit.php:9 views/admin_edit.php:13
+#: views/admin_edit_level.php:10 views/admin_edit_level.php:14
+#: views/admin_edit_level.php:18
+msgid "(required)"
+msgstr "(обязательно)"
+
+#: views/admin_add.php:15 views/admin_edit.php:13
+msgid "E-mail"
+msgstr "E-mail"
+
+#: views/admin_add.php:19
+msgid "Add New Member "
+msgstr "Добавить нового участника"
+
+#: views/admin_add_level.php:6
+msgid "Create new membership level."
+msgstr "Создать новый уровень доступа."
+
+#: views/admin_add_level.php:11 views/admin_edit_level.php:10
+msgid "Membership Level Name"
+msgstr "Название уровня доступа"
+
+#: views/admin_add_level.php:15 views/admin_edit_level.php:14
+msgid "Default WordPress Role"
+msgstr "Роль WordPress по умолчанию"
+
+#: views/admin_add_level.php:19 views/admin_edit_level.php:18
+msgid "Subscription Duration"
+msgstr "Срок подписки"
+
+#: views/admin_add_level.php:26 views/admin_edit_level.php:27
+msgid "No Expiry"
+msgstr "Бессрочно"
+
+#: views/admin_add_level.php:55
+msgid "Add New Membership Level "
+msgstr "Добавить новый уровень доступа"
+
+#: views/admin_edit.php:5
+msgid "Edit Member"
+msgstr "Изменить участника"
+
+#: views/admin_edit.php:6
+msgid "Edit existing member details."
+msgstr "Редактировать данные существующего участника."
+
+#: views/admin_edit.php:9
+msgid "Username"
+msgstr "Имя пользователя"
+
+#: views/admin_edit.php:18
+msgid "Edit User "
+msgstr "Изменить пользователя"
+
+#: views/admin_edit_level.php:5
+msgid "Edit membership level"
+msgstr "Изменить уровень доступа"
+
+#: views/admin_edit_level.php:6
+msgid "Edit membership level."
+msgstr "Изменить уровень доступа."
+
+#: views/admin_edit_level.php:54
+msgid "Edit Membership Level "
+msgstr "Изменить уровень доступа"
+
+#: views/admin_members.php:2
+msgid "Simple WP Membership::Members"
+msgstr "Simple WP Membership::Участники"
+
+#: views/admin_members.php:3 views/admin_members.php:19
+#: views/admin_membership_levels.php:21
+msgid "Add New"
+msgstr "Добавить нового"
+
+#: views/admin_members.php:9 views/admin_membership_levels.php:11
+msgid "search"
+msgstr "поиск"
+
+#: views/admin_membership_levels.php:3
+msgid "Simple WP Membership::Membership Levels"
+msgstr "Simple WP Membership::Уровни доступа"
+
+#: views/admin_membership_level_menu.php:2
+msgid "Membership level"
+msgstr "Уровень доступа"
+
+#: views/admin_membership_level_menu.php:3
+msgid "Manage Content Production"
+msgstr "Управление доступом к материалам"
+
+#: views/admin_membership_manage.php:17
+msgid "Example Content Protection Settings"
+msgstr "Пример настроек управления доступом к материалам"
+
+#: views/admin_member_form_common_part.php:45
+msgid "(twice, required)"
+msgstr "(дважды, обязательно)"
+
+#: views/admin_member_form_common_part.php:50
+msgid "Strength indicator"
+msgstr "Индикатор сложности"
+
+#: views/admin_member_form_common_part.php:51
+msgid ""
+"Hint: The password should be at least seven characters long. To make it "
+"stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
+"$ % ^ &amp; )."
+msgstr ""
+"Подсказка: пароль должен быть не короче 7 символов. Чтобы усилить пароль, "
+"используйте заглавные и строчные буквы, цифры и символы ! \" ? $ % ^ &amp; )."
+
+#: views/admin_member_form_common_part.php:64 views/loggedin.php:7
+#: views/login_widget_logged.php:6
+msgid "Account Status"
+msgstr "Статус учетной записи"
+
+#: views/admin_member_form_common_part.php:74
+msgid "Member Since"
+msgstr "Участник с"
+
+#: views/admin_payment_settings.php:2 views/admin_settings.php:2
+#: views/admin_tools_settings.php:2
+msgid "Simple WP Membership::Settings"
+msgstr "Simple WP Membership::Настройки"
+
+#: views/admin_payment_settings.php:33
+msgid "PayPal Integration Settings"
+msgstr "Настройки интеграции с PayPal"
+
+#: views/admin_payment_settings.php:36
+msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
+msgstr "Генерировать код \"Advanced Variables\" для вашей кнопки PayPal"
+
+#: views/admin_payment_settings.php:39
+msgid "Enter the Membership Level ID"
+msgstr "Введите ID уровня доступа"
+
+#: views/admin_payment_settings.php:41
+msgid "Generate Code"
+msgstr "Генерировать код"
+
+#: views/admin_tools_settings.php:9
+msgid "Generate a Registration Completion link"
+msgstr "Генерировать ссылку для завершения регистрации"
+
+#: views/admin_tools_settings.php:12
+msgid ""
+"You can manually generate a registration completion link here and give it to "
+"your customer if they have missed the email that was automatically sent out "
+"to them after the payment."
+msgstr ""
+"Вы можете вручную сгенерировать ссылку для завершения регистрации и передать "
+"её клиенту, если он пропустил письмо, отправленное автоматически после "
+"совершения платежа."
+
+#: views/admin_tools_settings.php:17
+msgid "Generate Registration Completion Link"
+msgstr "Генерировать ссылку для завершения регистрации"
+
+#: views/admin_tools_settings.php:20
+msgid "OR"
+msgstr "ИЛИ"
+
+#: views/admin_tools_settings.php:21
+msgid "For All Pending Registrations"
+msgstr "Для всех не подтвержденных регистраций"
+
+#: views/admin_tools_settings.php:24
+msgid "Registration Completion Links Will Appear Below:"
+msgstr "Ссылки для завершения регистрации появятся ниже:"
+
+#: views/admin_tools_settings.php:31
+msgid "Send Registration Reminder Email too"
+msgstr "Отправить также письмо с напоминанием о регистрации"
+
+#: views/admin_tools_settings.php:34
+msgid "Submit"
+msgstr "Отправить"
+
+#: views/edit.php:58
+msgid "Update"
+msgstr "Обновить"
+
+#: views/forgot_password.php:5
+msgid "Email Address"
+msgstr "Адрес e-mail"
+
+#: views/forgot_password.php:12
+msgid "Reset Password"
+msgstr "Сбросить пароль"
+
+#: views/loggedin.php:3 views/login_widget_logged.php:3
+msgid "Logged in as"
+msgstr "Вход как"
+
+#: views/loggedin.php:11 views/login_widget_logged.php:9
+msgid "Membership"
+msgstr "Участие"
+
+#: views/loggedin.php:15 views/login_widget_logged.php:12
+msgid "Account Expiry"
+msgstr "Учетная запись истекает"
+
+#: views/loggedin.php:19 views/login_widget_logged.php:16
+msgid "Logout"
+msgstr "Выйти"
+
+#: views/login.php:17
+msgid "Remember Me"
+msgstr "Запомнить меня"
+
+#: views/login.php:26
+msgid "Forgot Password"
+msgstr "Забыли пароль"
diff --git a/languages/swpm-sv_SE.mo b/languages/swpm-sv_SE.mo
new file mode 100644 (file)
index 0000000..45eaa1f
Binary files /dev/null and b/languages/swpm-sv_SE.mo differ
diff --git a/languages/swpm-sv_SE.po b/languages/swpm-sv_SE.po
new file mode 100644 (file)
index 0000000..d4f0816
--- /dev/null
@@ -0,0 +1,708 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: simple membership\n"
+"POT-Creation-Date: 2014-08-28 19:28+1000\n"
+"PO-Revision-Date: 2014-10-17 09:59+0100\n"
+"Last-Translator: Geson Perry <gp@echad.se>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.6.10\n"
+"X-Poedit-KeywordsList: __;_e\n"
+"X-Poedit-Basepath: .\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Language: sv\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: classes/class.bAccessControl.php:23 classes/class.bAccessControl.php:40
+msgid "You are not allowed to view this content"
+msgstr "Du är inte tillåten att se detta innehåll"
+
+#: classes/class.bAccessControl.php:26 classes/class.bAccessControl.php:43
+msgid "You need to login to view this content. "
+msgstr "Du behöver logga in för att se innehållet"
+
+#: classes/class.bAdminRegistration.php:48
+#: classes/class.bFrontRegistration.php:64
+msgid "Registration Successful."
+msgstr "Registreringen är fullförd"
+
+#: classes/class.bAdminRegistration.php:53
+#: classes/class.bAdminRegistration.php:73
+#: classes/class.bMembershipLevel.php:36 classes/class.bMembershipLevel.php:54
+msgid "Please correct the following:"
+msgstr "Vänligen korrigera följande:"
+
+#: classes/class.bAjax.php:16 classes/class.bAjax.php:28
+msgid "Aready taken"
+msgstr "Är redan tagen"
+
+#: classes/class.bAjax.php:29
+msgid "Available"
+msgstr "Tillgänglig"
+
+#: classes/class.bAuth.php:48 classes/class.bFrontRegistration.php:179
+msgid "User Not Found."
+msgstr "Användaren finns inte."
+
+#: classes/class.bAuth.php:55
+msgid "Password Empty or Invalid."
+msgstr "Lösenordet är tomt eller felaktigt."
+
+#: classes/class.bAuth.php:79
+msgid "Account is inactive."
+msgstr "Kontot är inaktivt."
+
+#: classes/class.bAuth.php:89
+msgid "You are logged in as:"
+msgstr "Du är inloggad som:"
+
+#: classes/class.bAuth.php:128
+msgid "Logged Out Successfully."
+msgstr "Du är nu utloggad."
+
+#: classes/class.bAuth.php:170
+msgid "Session Expired."
+msgstr "Sessionen har utgått."
+
+#: classes/class.bAuth.php:179
+msgid "Invalid User Name"
+msgstr "Ogiltigt Användarnamn"
+
+#: classes/class.bAuth.php:187
+msgid "Bad Cookie Hash"
+msgstr "Felaktig Cookie Hash"
+
+#: classes/class.bForm.php:26
+msgid ""
+"Wordpress account exists with given user name. But given email doesn't match."
+msgstr ""
+"Wordpress-kontot finns med tanke på användarnamnet. Men e-posten matchar "
+"inte."
+
+#: classes/class.bForm.php:31
+msgid ""
+"Wordpress account exists with given email. But given user name doesn't match."
+msgstr ""
+"Wordpress-kontot finns med given e-post. Men matchar inte med tanke på "
+"användarnamnet."
+
+#: classes/class.bForm.php:40
+msgid "User name is required"
+msgstr "Användarnamn krävs"
+
+#: classes/class.bForm.php:49
+msgid "User name already exists."
+msgstr "Användarnamnet finns redan."
+
+#: classes/class.bForm.php:72
+msgid "Password is required"
+msgstr "Lösenord krävs"
+
+#: classes/class.bForm.php:79
+msgid "Password mismatch"
+msgstr "Lösenordet matchar inte"
+
+#: classes/class.bForm.php:95
+msgid "Email is required"
+msgstr "E-post krävs"
+
+#: classes/class.bForm.php:99
+msgid "Email is invalid"
+msgstr "E-post är ogiltlig"
+
+#: classes/class.bForm.php:112
+msgid "Email is already used."
+msgstr "E-post adressen används redan."
+
+#: classes/class.bForm.php:178
+msgid "Member since field is invalid"
+msgstr "Medlem sedan fältet är ogiltigt"
+
+#: classes/class.bForm.php:189
+msgid "Subscription starts field is invalid"
+msgstr "Prenumeration startar fältet är ogiltigt"
+
+#: classes/class.bForm.php:199
+msgid "Gender field is invalid"
+msgstr "Kön Fältet är ogiltigt"
+
+#: classes/class.bForm.php:210
+msgid "Account state field is invalid"
+msgstr "Kontots tillstånds fält är ogiltigt"
+
+#: classes/class.bFrontRegistration.php:64 classes/class.bSettings.php:326
+msgid "Please"
+msgstr "Vänligen"
+
+#: classes/class.bFrontRegistration.php:64 classes/class.bSettings.php:326
+#: views/login.php:21
+msgid "Login"
+msgstr "Logga in"
+
+#: classes/class.bFrontRegistration.php:79
+#: classes/class.bFrontRegistration.php:158
+msgid "Please correct the following"
+msgstr "Vänligen korrigera följande"
+
+#: classes/class.bFrontRegistration.php:92
+msgid "Membership Level Couldn't be found."
+msgstr "Medlemskapsnivå kunde inte hittas."
+
+#: classes/class.bFrontRegistration.php:168
+msgid "Email Address Not Valid."
+msgstr "E-postadress ogiltig."
+
+#: classes/class.bFrontRegistration.php:199
+msgid "New password has been sent to your email address."
+msgstr "Nytt lösenord har skickats till din e-postadress."
+
+#: classes/class.bLevelForm.php:31
+msgid "Subscriptoin duration must be > 0."
+msgstr "Prenumerationens längd måste vara > 0."
+
+#: classes/class.bMembers.php:7
+msgid "Member"
+msgstr "Medlem"
+
+#: classes/class.bMembers.php:8 classes/class.simple-wp-membership.php:467
+msgid "Members"
+msgstr "Medlemmar"
+
+#: classes/class.bMembers.php:16 classes/class.bMembershipLevels.php:16
+msgid "ID"
+msgstr "ID"
+
+#: classes/class.bMembers.php:17 views/add.php:5 views/edit.php:4
+#: views/login.php:5
+msgid "User Name"
+msgstr "Användarnamn"
+
+#: classes/class.bMembers.php:18 views/add.php:21
+#: views/admin_member_form_common_part.php:2 views/edit.php:20
+msgid "First Name"
+msgstr "Förnamn"
+
+#: classes/class.bMembers.php:19 views/add.php:25
+#: views/admin_member_form_common_part.php:6 views/edit.php:24
+msgid "Last Name"
+msgstr "Efternamn"
+
+#: classes/class.bMembers.php:20 views/add.php:9 views/edit.php:8
+msgid "Email"
+msgstr "E-post"
+
+#: classes/class.bMembers.php:21 classes/class.bMembershipLevels.php:8
+#: classes/class.bMembershipLevels.php:17 views/add.php:64
+#: views/admin_member_form_common_part.php:55 views/edit.php:52
+msgid "Membership Level"
+msgstr "Medlemsnivå"
+
+#: classes/class.bMembers.php:22 views/admin_member_form_common_part.php:78
+msgid "Subscription Starts"
+msgstr "Prenumerationen startar"
+
+#: classes/class.bMembers.php:23
+msgid "Account State"
+msgstr "Tillstånd på kontot"
+
+#: classes/class.bMembers.php:35 classes/class.bMembershipLevels.php:29
+msgid "Delete"
+msgstr "Ta bort"
+
+#: classes/class.bMembers.php:100
+msgid "No Member found."
+msgstr "Ingen medlem funnen."
+
+#: classes/class.bMembershipLevel.php:31
+msgid "Membership Level Creation Successful."
+msgstr "Skapande av Medlemsnivå lyckades."
+
+#: classes/class.bMembershipLevel.php:50
+msgid "Updated Successfully."
+msgstr "Uppdatering klar."
+
+#: classes/class.bMembershipLevels.php:9
+#: classes/class.simple-wp-membership.php:469
+msgid "Membership Levels"
+msgstr "Medlemsnivåer"
+
+#: classes/class.bMembershipLevels.php:18
+msgid "Role"
+msgstr "Roll"
+
+#: classes/class.bMembershipLevels.php:19
+msgid "Subscription Valid For"
+msgstr "Prenumerationen gäller"
+
+#: classes/class.bSettings.php:28
+msgid "Plugin Documentation"
+msgstr "Plugin dokumentation"
+
+#: classes/class.bSettings.php:30
+msgid "General Settings"
+msgstr "Generella inställningar"
+
+#: classes/class.bSettings.php:32
+msgid "Enable Free Membership"
+msgstr "Aktivera gratis medlemskap"
+
+#: classes/class.bSettings.php:35
+msgid "Enable/disable registration for free membership level"
+msgstr "Aktivera / inaktivera registrering för gratis medlemsnivå"
+
+#: classes/class.bSettings.php:36
+msgid "Free Membership Level ID"
+msgstr "Gratis medlemsnivå ID"
+
+#: classes/class.bSettings.php:39
+msgid "Assign free membership level ID"
+msgstr "Tilldela gratis medlemskap nivå ID"
+
+#: classes/class.bSettings.php:40
+msgid "Hide Adminbar"
+msgstr "Göm Adminbar"
+
+#: classes/class.bSettings.php:43
+msgid ""
+"WordPress shows an admin toolbar to the logged in users of the site. Check "
+"this box if you want to hide that admin toolbar in the fronend of your site."
+msgstr ""
+"Wordpress visar admin verktygsfältet för inloggade användare på webbplatsen. "
+"Markera den här rutan om du vill dölja admin verktygsfältet på din webbplats."
+
+#: classes/class.bSettings.php:45
+msgid "Pages Settings"
+msgstr "Sidinställningar"
+
+#: classes/class.bSettings.php:47
+msgid "Login Page URL"
+msgstr "Login sidans URL"
+
+#: classes/class.bSettings.php:51
+msgid "Registration Page URL"
+msgstr "Registreringssidans URL"
+
+#: classes/class.bSettings.php:55
+msgid "Join Us Page URL"
+msgstr "Gå med oss sidans URL"
+
+#: classes/class.bSettings.php:59
+msgid "Edit Profile Page URL"
+msgstr "Ändra profilsidans URL"
+
+#: classes/class.bSettings.php:63
+msgid "Password Reset Page URL"
+msgstr "Återställ lösenordssidans URL"
+
+#: classes/class.bSettings.php:68
+msgid "Test & Debug Settings"
+msgstr "Test & Debug inställningar"
+
+#: classes/class.bSettings.php:74
+msgid "Enable Sandbox Testing"
+msgstr "Aktivera Sandbox test"
+
+#: classes/class.bSettings.php:77
+msgid "Enable this option if you want to do sandbox payment testing."
+msgstr "Aktivera det här alternativet om du vill testa Sandbox betalning."
+
+#: classes/class.bSettings.php:90
+msgid "Email Misc. Settings"
+msgstr "Diverse E-post inställningar"
+
+#: classes/class.bSettings.php:92
+msgid "From Email Address"
+msgstr "Från E-post adress"
+
+#: classes/class.bSettings.php:97
+msgid "Email Settings (Prompt to Complete Registration )"
+msgstr "E-postinställningar (Uppmana att slutföra registreringen)"
+
+#: classes/class.bSettings.php:99 classes/class.bSettings.php:110
+#: classes/class.bSettings.php:129
+msgid "Email Subject"
+msgstr "E-post ämne"
+
+#: classes/class.bSettings.php:103 classes/class.bSettings.php:114
+#: classes/class.bSettings.php:133
+msgid "Email Body"
+msgstr "E-post meddelande"
+
+#: classes/class.bSettings.php:108
+msgid "Email Settings (Registration Complete)"
+msgstr "E-post inställningar (Registrering avklarad)"
+
+#: classes/class.bSettings.php:118
+msgid "Send Notification To Admin"
+msgstr "Skicka ett meddelande till Admin"
+
+#: classes/class.bSettings.php:122
+msgid "Send Email to Member When Added via Admin Dashboard"
+msgstr "Skicka e-post till medlem när de är tillagda via Admin dashboard"
+
+#: classes/class.bSettings.php:127
+msgid " Email Settings (Account Upgrade Notification)"
+msgstr "E-postinställningar (Kontouppgraderings meddelande)"
+
+#: classes/class.bSettings.php:326
+msgid "Not a Member?"
+msgstr "Inte medlem?"
+
+#: classes/class.bSettings.php:326 views/login.php:30
+msgid "Join Us"
+msgstr "Gå med oss"
+
+#: classes/class.bUtils.php:32 views/admin_member_form_common_part.php:66
+msgid "Active"
+msgstr "Aktiv"
+
+#: classes/class.bUtils.php:33 views/admin_member_form_common_part.php:67
+msgid "Inactive"
+msgstr "Inaktiv"
+
+#: classes/class.bUtils.php:34 views/admin_member_form_common_part.php:68
+msgid "Pending"
+msgstr "Väntar"
+
+#: classes/class.bUtils.php:35 views/admin_member_form_common_part.php:69
+msgid "Expired"
+msgstr "Förfallen"
+
+#: classes/class.bUtils.php:225
+msgid "Never"
+msgstr "Aldrig"
+
+#: classes/class.miscUtils.php:51
+msgid "Registration"
+msgstr "Registrering"
+
+#: classes/class.miscUtils.php:74
+msgid "Member Login"
+msgstr "Login för medlemmar"
+
+#: classes/class.miscUtils.php:97
+msgid "Profile"
+msgstr "Profil"
+
+#: classes/class.miscUtils.php:120
+msgid "Password Reset"
+msgstr "Återställ lösenord"
+
+#: classes/class.simple-wp-membership.php:178
+msgid "You are not logged in."
+msgstr "Du är inte inloggad."
+
+#: classes/class.simple-wp-membership.php:209
+msgid "Simple WP Membership Protection"
+msgstr "Simple WP Membership skydd"
+
+#: classes/class.simple-wp-membership.php:222
+msgid "Simple Membership Protection options"
+msgstr "Simple Membership Protection alternativ"
+
+#: classes/class.simple-wp-membership.php:238
+msgid "Do you want to protect this content?"
+msgstr "Vill du skydda innehållet?"
+
+#: classes/class.simple-wp-membership.php:243
+msgid "Select the membership level that can access this content:"
+msgstr "Välj den medlemsnivå som kan komma åt det här innehållet:"
+
+#: classes/class.simple-wp-membership.php:375
+msgid "Display SWPM Login."
+msgstr "Visa SWPM Login."
+
+#: classes/class.simple-wp-membership.php:377
+msgid "SWPM Login"
+msgstr "SWPM Login"
+
+#: classes/class.simple-wp-membership.php:464
+msgid "WP Membership"
+msgstr "WP medlemskap"
+
+#: classes/class.simple-wp-membership.php:471
+msgid "Settings"
+msgstr "Inställningar"
+
+#: views/add.php:13 views/admin_member_form_common_part.php:45
+#: views/edit.php:12 views/login.php:11
+msgid "Password"
+msgstr "Lösenord"
+
+#: views/add.php:17 views/edit.php:16
+msgid "Repeat Password"
+msgstr "Upprepa lösenord"
+
+#: views/add.php:29 views/admin_member_form_common_part.php:10
+msgid "Gender"
+msgstr "Kön"
+
+#: views/add.php:36 views/admin_member_form_common_part.php:17
+#: views/edit.php:28
+msgid "Phone"
+msgstr "Telefon"
+
+#: views/add.php:40 views/admin_member_form_common_part.php:21
+#: views/edit.php:32
+msgid "Street"
+msgstr "Gata"
+
+#: views/add.php:44 views/admin_member_form_common_part.php:25
+#: views/edit.php:36
+msgid "City"
+msgstr "Stad"
+
+#: views/add.php:48 views/admin_member_form_common_part.php:29
+#: views/edit.php:40
+msgid "State"
+msgstr "Stat"
+
+#: views/add.php:52 views/admin_member_form_common_part.php:33
+#: views/edit.php:44
+msgid "Zipcode"
+msgstr "Poastnummer"
+
+#: views/add.php:56 views/admin_member_form_common_part.php:37
+#: views/edit.php:48
+msgid "Country"
+msgstr "Land"
+
+#: views/add.php:60 views/admin_member_form_common_part.php:41
+msgid "Company"
+msgstr "Företag"
+
+#: views/add.php:71
+msgid "Register"
+msgstr "Registrera"
+
+#: views/admin_add.php:6
+msgid "Add Member"
+msgstr "Lägg till medlem"
+
+#: views/admin_add.php:7
+msgid "Create a brand new user and add it to this site."
+msgstr "Skapa en helt ny användare och lägga till den här webbplatsen."
+
+#: views/admin_add.php:11
+msgid "User name"
+msgstr "Användarnamn"
+
+#: views/admin_add.php:11 views/admin_add.php:15 views/admin_add_level.php:11
+#: views/admin_add_level.php:15 views/admin_add_level.php:19
+#: views/admin_edit.php:9 views/admin_edit.php:13
+#: views/admin_edit_level.php:10 views/admin_edit_level.php:14
+#: views/admin_edit_level.php:18
+msgid "(required)"
+msgstr "(krävs)"
+
+#: views/admin_add.php:15 views/admin_edit.php:13
+msgid "E-mail"
+msgstr "E.post"
+
+#: views/admin_add.php:19
+msgid "Add New Member "
+msgstr "Lägg till ny medlem"
+
+#: views/admin_add_level.php:6
+msgid "Create new membership level."
+msgstr "Skapa ny medlemsnivå."
+
+#: views/admin_add_level.php:11 views/admin_edit_level.php:10
+msgid "Membership Level Name"
+msgstr "Namn på medlemsnivå"
+
+#: views/admin_add_level.php:15 views/admin_edit_level.php:14
+msgid "Default WordPress Role"
+msgstr "Standard Wordpress roll"
+
+#: views/admin_add_level.php:19 views/admin_edit_level.php:18
+msgid "Subscription Duration"
+msgstr "Längd på prenumeration"
+
+#: views/admin_add_level.php:26 views/admin_edit_level.php:27
+msgid "No Expiry"
+msgstr "Ingen utgång"
+
+#: views/admin_add_level.php:55
+msgid "Add New Membership Level "
+msgstr "Lägg till ny medlemsnivå"
+
+#: views/admin_edit.php:5
+msgid "Edit Member"
+msgstr "Ändra medlem"
+
+#: views/admin_edit.php:6
+msgid "Edit existing member details."
+msgstr "Ändra existerande medlemsdetaljer"
+
+#: views/admin_edit.php:9
+msgid "Username"
+msgstr "Användarnamn"
+
+#: views/admin_edit.php:18
+msgid "Edit User "
+msgstr "Ändra användare"
+
+#: views/admin_edit_level.php:5
+msgid "Edit membership level"
+msgstr "Ändra medlemsnivå"
+
+#: views/admin_edit_level.php:6
+msgid "Edit membership level."
+msgstr "Ändra medlemsnivå."
+
+#: views/admin_edit_level.php:54
+msgid "Edit Membership Level "
+msgstr "Ändra medlemsnivå"
+
+#: views/admin_members.php:2
+msgid "Simple WP Membership::Members"
+msgstr "Simple WP Membership::Medlemmar"
+
+#: views/admin_members.php:3 views/admin_members.php:19
+#: views/admin_membership_levels.php:21
+msgid "Add New"
+msgstr "Lägg till ny"
+
+#: views/admin_members.php:9 views/admin_membership_levels.php:11
+msgid "search"
+msgstr "sök"
+
+#: views/admin_membership_levels.php:3
+msgid "Simple WP Membership::Membership Levels"
+msgstr "Simple WP Membership::Medlemsnivåer"
+
+#: views/admin_membership_level_menu.php:2
+msgid "Membership level"
+msgstr "Medlemsnivå"
+
+#: views/admin_membership_level_menu.php:3
+msgid "Manage Content Production"
+msgstr "Hantera innehållsproduktion"
+
+#: views/admin_membership_manage.php:17
+msgid "Example Content Protection Settings"
+msgstr "Exempel på skyddsinställningar av innehåll"
+
+#: views/admin_member_form_common_part.php:45
+msgid "(twice, required)"
+msgstr "(två gånger, krävs)"
+
+#: views/admin_member_form_common_part.php:50
+msgid "Strength indicator"
+msgstr "Indikator för styrka"
+
+#: views/admin_member_form_common_part.php:51
+msgid ""
+"Hint: The password should be at least seven characters long. To make it "
+"stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
+"$ % ^ &amp; )."
+msgstr ""
+"Tips: Lösenordet ska vara minst sju tecken långt. För att göra det starkare, "
+"använd stora och små bokstäver, siffror och symboler som! ?  \"$% ^ & Amp;)."
+
+#: views/admin_member_form_common_part.php:64 views/loggedin.php:7
+#: views/login_widget_logged.php:6
+msgid "Account Status"
+msgstr "Tillstånd på kontot"
+
+#: views/admin_member_form_common_part.php:74
+msgid "Member Since"
+msgstr "Medlem sedan"
+
+#: views/admin_payment_settings.php:2 views/admin_settings.php:2
+#: views/admin_tools_settings.php:2
+msgid "Simple WP Membership::Settings"
+msgstr "Simple WP Membership::Inställningar"
+
+#: views/admin_payment_settings.php:33
+msgid "PayPal Integration Settings"
+msgstr "PayPal integrationsinställningar"
+
+#: views/admin_payment_settings.php:36
+msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
+msgstr "Generera  \"Avancerade variabler \" Kod för din PayPal-knapp"
+
+#: views/admin_payment_settings.php:39
+msgid "Enter the Membership Level ID"
+msgstr "Ange medlemsnivå ID"
+
+#: views/admin_payment_settings.php:41
+msgid "Generate Code"
+msgstr "Skapa kod"
+
+#: views/admin_tools_settings.php:9
+msgid "Generate a Registration Completion link"
+msgstr "Skapa en Registrering klar länk"
+
+#: views/admin_tools_settings.php:12
+msgid ""
+"You can manually generate a registration completion link here and give it to "
+"your customer if they have missed the email that was automatically sent out "
+"to them after the payment."
+msgstr ""
+"Du kan manuellt skapa en registrerings slutförande länk här och ge den till "
+"din kund om de har missat den e-post som automatiskt skickades ut till dem "
+"efter betalningen."
+
+#: views/admin_tools_settings.php:17
+msgid "Generate Registration Completion Link"
+msgstr "Skapa en Registrering klar länk"
+
+#: views/admin_tools_settings.php:20
+msgid "OR"
+msgstr "ELLER"
+
+#: views/admin_tools_settings.php:21
+msgid "For All Pending Registrations"
+msgstr "För alla väntande registreringar"
+
+#: views/admin_tools_settings.php:24
+msgid "Registration Completion Links Will Appear Below:"
+msgstr "Registrering klar länk visas nedan:"
+
+#: views/admin_tools_settings.php:31
+msgid "Send Registration Reminder Email too"
+msgstr "Skicka registrerings påminnelse via E-post till"
+
+#: views/admin_tools_settings.php:34
+msgid "Submit"
+msgstr "Skicka"
+
+#: views/edit.php:58
+msgid "Update"
+msgstr "Uppdatera"
+
+#: views/forgot_password.php:5
+msgid "Email Address"
+msgstr "E-post adress"
+
+#: views/forgot_password.php:12
+msgid "Reset Password"
+msgstr "Återställ lösenord"
+
+#: views/loggedin.php:3 views/login_widget_logged.php:3
+msgid "Logged in as"
+msgstr "Inloggad som"
+
+#: views/loggedin.php:11 views/login_widget_logged.php:9
+msgid "Membership"
+msgstr "Medlemskap"
+
+#: views/loggedin.php:15 views/login_widget_logged.php:12
+msgid "Account Expiry"
+msgstr "Utgång för konto"
+
+#: views/loggedin.php:19 views/login_widget_logged.php:16
+msgid "Logout"
+msgstr "Logga ut"
+
+#: views/login.php:17
+msgid "Remember Me"
+msgstr "Kom ihåg mig"
+
+#: views/login.php:26
+msgid "Forgot Password"
+msgstr "Glömt lösenordet"
diff --git a/languages/swpm-tr_TR.mo b/languages/swpm-tr_TR.mo
new file mode 100644 (file)
index 0000000..b627f90
Binary files /dev/null and b/languages/swpm-tr_TR.mo differ
diff --git a/languages/swpm-tr_TR.po b/languages/swpm-tr_TR.po
new file mode 100644 (file)
index 0000000..79326ef
--- /dev/null
@@ -0,0 +1,709 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: simple membership\n"
+"POT-Creation-Date: 2014-08-28 19:28+1000\n"
+"PO-Revision-Date: 2014-12-18 21:42+0200\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.7.1\n"
+"X-Poedit-KeywordsList: __;_e\n"
+"X-Poedit-Basepath: .\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language: tr_TR\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: classes/class.bAccessControl.php:23 classes/class.bAccessControl.php:40
+msgid "You are not allowed to view this content"
+msgstr "Bu içeriği  görmenize izin verilmemektedir."
+
+#: classes/class.bAccessControl.php:26 classes/class.bAccessControl.php:43
+msgid "You need to login to view this content. "
+msgstr "Bu içeriği görmek  için giriş yapmanız gerekmektedir."
+
+#: classes/class.bAdminRegistration.php:48
+#: classes/class.bFrontRegistration.php:64
+msgid "Registration Successful."
+msgstr "Kayıt başarıyla son bulmuştur"
+
+#: classes/class.bAdminRegistration.php:53
+#: classes/class.bAdminRegistration.php:73
+#: classes/class.bMembershipLevel.php:36 classes/class.bMembershipLevel.php:54
+msgid "Please correct the following:"
+msgstr "Lütfen düzeltin:"
+
+#: classes/class.bAjax.php:16 classes/class.bAjax.php:28
+msgid "Aready taken"
+msgstr "Halihazırda alınmıştır"
+
+#: classes/class.bAjax.php:29
+msgid "Available"
+msgstr "Müsaittir"
+
+#: classes/class.bAuth.php:48 classes/class.bFrontRegistration.php:179
+msgid "User Not Found."
+msgstr "Kullanıcı bulunamadı"
+
+#: classes/class.bAuth.php:55
+msgid "Password Empty or Invalid."
+msgstr "Şifre boş veya geçersiz."
+
+#: classes/class.bAuth.php:79
+msgid "Account is inactive."
+msgstr "Hesap  aktif değil."
+
+#: classes/class.bAuth.php:89
+msgid "You are logged in as:"
+msgstr "Kullanıcı  hesabınız:"
+
+#: classes/class.bAuth.php:128
+msgid "Logged Out Successfully."
+msgstr "Oturum başarı ile sonlandırılmıştır."
+
+#: classes/class.bAuth.php:170
+msgid "Session Expired."
+msgstr "Oturum zamanı  doldu."
+
+#: classes/class.bAuth.php:179
+msgid "Invalid User Name"
+msgstr "Geçersiz Kullanıcı  Adı"
+
+#: classes/class.bAuth.php:187
+msgid "Bad Cookie Hash"
+msgstr "Kötü çerez kaydı"
+
+#: classes/class.bForm.php:26
+msgid ""
+"Wordpress account exists with given user name. But given email doesn't match."
+msgstr ""
+"Belirtilen kullanıcı  hesabı  mevcut.  Ama verilen  e-posta adresi  "
+"uyuşmuyor."
+
+#: classes/class.bForm.php:31
+msgid ""
+"Wordpress account exists with given email. But given user name doesn't match."
+msgstr ""
+"Belirtilen kullanıcı  hesabı  mevcut.  Ama verilen  kullanıcı adı adresi  "
+"uyuşmuyor."
+
+#: classes/class.bForm.php:40
+msgid "User name is required"
+msgstr "Kullanıcı adı gerekiyor"
+
+#: classes/class.bForm.php:49
+msgid "User name already exists."
+msgstr "Bu kullanıcı adı mevcut."
+
+#: classes/class.bForm.php:72
+msgid "Password is required"
+msgstr "Şifre gerekiyor"
+
+#: classes/class.bForm.php:79
+msgid "Password mismatch"
+msgstr "Şifre yanlış"
+
+#: classes/class.bForm.php:95
+msgid "Email is required"
+msgstr "E-Posta gereklidir"
+
+#: classes/class.bForm.php:99
+msgid "Email is invalid"
+msgstr "E-Posta geçersizdir."
+
+#: classes/class.bForm.php:112
+msgid "Email is already used."
+msgstr "E-Posta halen sistemimizde kulanılıyor."
+
+#: classes/class.bForm.php:178
+msgid "Member since field is invalid"
+msgstr "Üye  ...den beri alanı  geçersiz."
+
+#: classes/class.bForm.php:189
+msgid "Subscription starts field is invalid"
+msgstr "Kayıt Başlama alanı  geçersiz"
+
+#: classes/class.bForm.php:199
+msgid "Gender field is invalid"
+msgstr "Cinsiyet  alanı geçersiz"
+
+#: classes/class.bForm.php:210
+msgid "Account state field is invalid"
+msgstr "Hesap durumu alanı geçersiz"
+
+#: classes/class.bFrontRegistration.php:64 classes/class.bSettings.php:326
+msgid "Please"
+msgstr "Lütfen"
+
+#: classes/class.bFrontRegistration.php:64 classes/class.bSettings.php:326
+#: views/login.php:21
+msgid "Login"
+msgstr "Giriş"
+
+#: classes/class.bFrontRegistration.php:79
+#: classes/class.bFrontRegistration.php:158
+msgid "Please correct the following"
+msgstr "Lütfen Düzeltin :"
+
+#: classes/class.bFrontRegistration.php:92
+msgid "Membership Level Couldn't be found."
+msgstr "Üyelik Seviyesi bulunamıyor"
+
+#: classes/class.bFrontRegistration.php:168
+msgid "Email Address Not Valid."
+msgstr "E-Posta Geçersiz."
+
+#: classes/class.bFrontRegistration.php:199
+msgid "New password has been sent to your email address."
+msgstr "Yeni Şifre e-posta adresinize gönderildi."
+
+#: classes/class.bLevelForm.php:31
+msgid "Subscriptoin duration must be > 0."
+msgstr "Üyelik Süresi Sıfırdan Büyük Olmalıdır."
+
+#: classes/class.bMembers.php:7
+msgid "Member"
+msgstr "Üye"
+
+#: classes/class.bMembers.php:8 classes/class.simple-wp-membership.php:467
+msgid "Members"
+msgstr "Üyeler"
+
+#: classes/class.bMembers.php:16 classes/class.bMembershipLevels.php:16
+msgid "ID"
+msgstr "Kimlik No"
+
+#: classes/class.bMembers.php:17 views/add.php:5 views/edit.php:4
+#: views/login.php:5
+msgid "User Name"
+msgstr "Kullanıcı Adı"
+
+#: classes/class.bMembers.php:18 views/add.php:21
+#: views/admin_member_form_common_part.php:2 views/edit.php:20
+msgid "First Name"
+msgstr "İlk Adınız"
+
+#: classes/class.bMembers.php:19 views/add.php:25
+#: views/admin_member_form_common_part.php:6 views/edit.php:24
+msgid "Last Name"
+msgstr "Soyadınız"
+
+#: classes/class.bMembers.php:20 views/add.php:9 views/edit.php:8
+msgid "Email"
+msgstr "E-Posta"
+
+#: classes/class.bMembers.php:21 classes/class.bMembershipLevels.php:8
+#: classes/class.bMembershipLevels.php:17 views/add.php:64
+#: views/admin_member_form_common_part.php:55 views/edit.php:52
+msgid "Membership Level"
+msgstr "Üyelik Düzeyi"
+
+#: classes/class.bMembers.php:22 views/admin_member_form_common_part.php:78
+msgid "Subscription Starts"
+msgstr "Üyelik Başlama Tarihi"
+
+#: classes/class.bMembers.php:23
+msgid "Account State"
+msgstr "Hesap Durumu"
+
+#: classes/class.bMembers.php:35 classes/class.bMembershipLevels.php:29
+msgid "Delete"
+msgstr "Sil"
+
+#: classes/class.bMembers.php:100
+msgid "No Member found."
+msgstr "Üye Bulunamadı"
+
+#: classes/class.bMembershipLevel.php:31
+msgid "Membership Level Creation Successful."
+msgstr "Üyelik Derecesi Oluşturulması Başarılı."
+
+#: classes/class.bMembershipLevel.php:50
+msgid "Updated Successfully."
+msgstr "Başarıyla Güncellendi."
+
+#: classes/class.bMembershipLevels.php:9
+#: classes/class.simple-wp-membership.php:469
+msgid "Membership Levels"
+msgstr "Üyelik Düzeyleri"
+
+#: classes/class.bMembershipLevels.php:18
+msgid "Role"
+msgstr "Görev"
+
+#: classes/class.bMembershipLevels.php:19
+msgid "Subscription Valid For"
+msgstr "Üyelik Geçerli :"
+
+#: classes/class.bSettings.php:28
+msgid "Plugin Documentation"
+msgstr "Eklenti Dökümantasyonu"
+
+#: classes/class.bSettings.php:30
+msgid "General Settings"
+msgstr "Genel Ayarlar"
+
+#: classes/class.bSettings.php:32
+msgid "Enable Free Membership"
+msgstr "Ücretsiz Üyelik Mümkünmü?"
+
+#: classes/class.bSettings.php:35
+msgid "Enable/disable registration for free membership level"
+msgstr "Ücretsiz üyelik için kaydolmayı aç veya kapa"
+
+#: classes/class.bSettings.php:36
+msgid "Free Membership Level ID"
+msgstr "Ücretsiz Üyelik Seviyesi Numarası"
+
+#: classes/class.bSettings.php:39
+msgid "Assign free membership level ID"
+msgstr "Ücretsiz Üyelik Numarası Atanması"
+
+#: classes/class.bSettings.php:40
+msgid "Hide Adminbar"
+msgstr "Yönetici çubuğunu sakla"
+
+#: classes/class.bSettings.php:43
+msgid ""
+"WordPress shows an admin toolbar to the logged in users of the site. Check "
+"this box if you want to hide that admin toolbar in the fronend of your site."
+msgstr ""
+"Blog sitenin çevrimiçi kullanıcılarına yönetici çubuğunu gösterir.  Eğer  "
+"yönetim  çubuğunu saklamak  istiyorsanız bu kutucuğu işaretleyin."
+
+#: classes/class.bSettings.php:45
+msgid "Pages Settings"
+msgstr "Sayfa Ayarları"
+
+#: classes/class.bSettings.php:47
+msgid "Login Page URL"
+msgstr "Giriş Sayfası URLsi"
+
+#: classes/class.bSettings.php:51
+msgid "Registration Page URL"
+msgstr "Kayıt Sayfası URLsi"
+
+#: classes/class.bSettings.php:55
+msgid "Join Us Page URL"
+msgstr "Bize Katılın Sayfası URLsi"
+
+#: classes/class.bSettings.php:59
+msgid "Edit Profile Page URL"
+msgstr "Profil Düzenleme Sayfası URLsi"
+
+#: classes/class.bSettings.php:63
+msgid "Password Reset Page URL"
+msgstr "Şifre  Reset Sayfası URLsi"
+
+#: classes/class.bSettings.php:68
+msgid "Test & Debug Settings"
+msgstr "Test ve Debug Ayarları"
+
+#: classes/class.bSettings.php:74
+msgid "Enable Sandbox Testing"
+msgstr "Sandbox Testi Aktif Et"
+
+#: classes/class.bSettings.php:77
+msgid "Enable this option if you want to do sandbox payment testing."
+msgstr "Bu opsiyonu ,  eğer  SANDBOX ödeme testi istiyorsanız aktif edin."
+
+#: classes/class.bSettings.php:90
+msgid "Email Misc. Settings"
+msgstr "E-Posta Çeşitli Ayarları"
+
+#: classes/class.bSettings.php:92
+msgid "From Email Address"
+msgstr "Gönderen E-Posta Adresi"
+
+#: classes/class.bSettings.php:97
+msgid "Email Settings (Prompt to Complete Registration )"
+msgstr "E-Posta Ayarları ( Anında Kayıt Tamamlama) "
+
+#: classes/class.bSettings.php:99 classes/class.bSettings.php:110
+#: classes/class.bSettings.php:129
+msgid "Email Subject"
+msgstr "E-Posta Konusu"
+
+#: classes/class.bSettings.php:103 classes/class.bSettings.php:114
+#: classes/class.bSettings.php:133
+msgid "Email Body"
+msgstr "E-Posta Gövdesi"
+
+#: classes/class.bSettings.php:108
+msgid "Email Settings (Registration Complete)"
+msgstr "E-Posta Ayarları (Kayut Tamamlandı)"
+
+#: classes/class.bSettings.php:118
+msgid "Send Notification To Admin"
+msgstr "Yöneticiye Uyarı Gönder"
+
+#: classes/class.bSettings.php:122
+msgid "Send Email to Member When Added via Admin Dashboard"
+msgstr "Yönetim Panelinden Kayıt Yapıldığı  Zaman Üyeye E-Posta Gönder"
+
+#: classes/class.bSettings.php:127
+msgid " Email Settings (Account Upgrade Notification)"
+msgstr "E-Posta Ayarları ( Hesap Yükseltme Bildirimi)"
+
+#: classes/class.bSettings.php:326
+msgid "Not a Member?"
+msgstr "Üye Değilmisiniz?"
+
+#: classes/class.bSettings.php:326 views/login.php:30
+msgid "Join Us"
+msgstr "Bize Katılın"
+
+#: classes/class.bUtils.php:32 views/admin_member_form_common_part.php:66
+msgid "Active"
+msgstr "Aktif"
+
+#: classes/class.bUtils.php:33 views/admin_member_form_common_part.php:67
+msgid "Inactive"
+msgstr "Aktif Değil"
+
+#: classes/class.bUtils.php:34 views/admin_member_form_common_part.php:68
+msgid "Pending"
+msgstr "Beklemede"
+
+#: classes/class.bUtils.php:35 views/admin_member_form_common_part.php:69
+msgid "Expired"
+msgstr "Süresi Dolmuş"
+
+#: classes/class.bUtils.php:225
+msgid "Never"
+msgstr "Asla"
+
+#: classes/class.miscUtils.php:51
+msgid "Registration"
+msgstr "Kayıt"
+
+#: classes/class.miscUtils.php:74
+msgid "Member Login"
+msgstr "Üye Girişi"
+
+#: classes/class.miscUtils.php:97
+msgid "Profile"
+msgstr "Profil"
+
+#: classes/class.miscUtils.php:120
+msgid "Password Reset"
+msgstr "Şifre Reset"
+
+#: classes/class.simple-wp-membership.php:178
+msgid "You are not logged in."
+msgstr "Giriş Yapmadınız."
+
+#: classes/class.simple-wp-membership.php:209
+msgid "Simple WP Membership Protection"
+msgstr "Basit Blog Üyelik Koruması"
+
+#: classes/class.simple-wp-membership.php:222
+msgid "Simple Membership Protection options"
+msgstr "Basit Üyelik Koruması Opsiyonları"
+
+#: classes/class.simple-wp-membership.php:238
+msgid "Do you want to protect this content?"
+msgstr "Bu içeriği korumak istiyormusunuz?"
+
+#: classes/class.simple-wp-membership.php:243
+msgid "Select the membership level that can access this content:"
+msgstr "Bu içeriğe erişecek üyelik seviyesini seçiniz:"
+
+#: classes/class.simple-wp-membership.php:375
+msgid "Display SWPM Login."
+msgstr "SWPM Girişini Göster."
+
+#: classes/class.simple-wp-membership.php:377
+msgid "SWPM Login"
+msgstr "SWPM Girişi"
+
+#: classes/class.simple-wp-membership.php:464
+msgid "WP Membership"
+msgstr "Blog Üyeliği"
+
+#: classes/class.simple-wp-membership.php:471
+msgid "Settings"
+msgstr "Ayarlar"
+
+#: views/add.php:13 views/admin_member_form_common_part.php:45
+#: views/edit.php:12 views/login.php:11
+msgid "Password"
+msgstr "Şifre"
+
+#: views/add.php:17 views/edit.php:16
+msgid "Repeat Password"
+msgstr "Şifre Tekrarı"
+
+#: views/add.php:29 views/admin_member_form_common_part.php:10
+msgid "Gender"
+msgstr "Cinsiyet"
+
+#: views/add.php:36 views/admin_member_form_common_part.php:17
+#: views/edit.php:28
+msgid "Phone"
+msgstr "Telefon"
+
+#: views/add.php:40 views/admin_member_form_common_part.php:21
+#: views/edit.php:32
+msgid "Street"
+msgstr "Cadde"
+
+#: views/add.php:44 views/admin_member_form_common_part.php:25
+#: views/edit.php:36
+msgid "City"
+msgstr "Şehir"
+
+#: views/add.php:48 views/admin_member_form_common_part.php:29
+#: views/edit.php:40
+msgid "State"
+msgstr "İl"
+
+#: views/add.php:52 views/admin_member_form_common_part.php:33
+#: views/edit.php:44
+msgid "Zipcode"
+msgstr "Posta Kodu"
+
+#: views/add.php:56 views/admin_member_form_common_part.php:37
+#: views/edit.php:48
+msgid "Country"
+msgstr "Ülke"
+
+#: views/add.php:60 views/admin_member_form_common_part.php:41
+msgid "Company"
+msgstr "Şirket"
+
+#: views/add.php:71
+msgid "Register"
+msgstr "Kayıt"
+
+#: views/admin_add.php:6
+msgid "Add Member"
+msgstr "Üye Ekleme"
+
+#: views/admin_add.php:7
+msgid "Create a brand new user and add it to this site."
+msgstr "Yeni bir  kullanıcı oluşturun ve bu siteye ekleyin."
+
+#: views/admin_add.php:11
+msgid "User name"
+msgstr "Kullanıcı Adı"
+
+#: views/admin_add.php:11 views/admin_add.php:15 views/admin_add_level.php:11
+#: views/admin_add_level.php:15 views/admin_add_level.php:19
+#: views/admin_edit.php:9 views/admin_edit.php:13
+#: views/admin_edit_level.php:10 views/admin_edit_level.php:14
+#: views/admin_edit_level.php:18
+msgid "(required)"
+msgstr "(gerekli)"
+
+#: views/admin_add.php:15 views/admin_edit.php:13
+msgid "E-mail"
+msgstr "E-Posta"
+
+#: views/admin_add.php:19
+msgid "Add New Member "
+msgstr "Yeni Üye Kaydı"
+
+#: views/admin_add_level.php:6
+msgid "Create new membership level."
+msgstr "Yeni Üyelik Seviyesi Oluşturulması"
+
+#: views/admin_add_level.php:11 views/admin_edit_level.php:10
+msgid "Membership Level Name"
+msgstr "Üyelik Seviyesi İsmi"
+
+#: views/admin_add_level.php:15 views/admin_edit_level.php:14
+msgid "Default WordPress Role"
+msgstr "Varsayılan Blog Görevi"
+
+#: views/admin_add_level.php:19 views/admin_edit_level.php:18
+msgid "Subscription Duration"
+msgstr "Üyelik Süresi"
+
+#: views/admin_add_level.php:26 views/admin_edit_level.php:27
+msgid "No Expiry"
+msgstr "Süresiz"
+
+#: views/admin_add_level.php:55
+msgid "Add New Membership Level "
+msgstr "Yeni Üyelik Seviyesi Ekleyin"
+
+#: views/admin_edit.php:5
+msgid "Edit Member"
+msgstr "Üyelik Bilgileri Düzenleyin"
+
+#: views/admin_edit.php:6
+msgid "Edit existing member details."
+msgstr "Mevcut  üye detaylarını düzenleyin."
+
+#: views/admin_edit.php:9
+msgid "Username"
+msgstr "Kullanıcı Adı"
+
+#: views/admin_edit.php:18
+msgid "Edit User "
+msgstr "Kullanıcı Bilgilerini Düzenleyin"
+
+#: views/admin_edit_level.php:5
+msgid "Edit membership level"
+msgstr "Üyelik seviyesi düzenleyin"
+
+#: views/admin_edit_level.php:6
+msgid "Edit membership level."
+msgstr "Üyelik seviyesi düzenleyin."
+
+#: views/admin_edit_level.php:54
+msgid "Edit Membership Level "
+msgstr "Üyelik Seviyesi Düzenleyin"
+
+#: views/admin_members.php:2
+msgid "Simple WP Membership::Members"
+msgstr "Blog Üyelik::Üyeler"
+
+#: views/admin_members.php:3 views/admin_members.php:19
+#: views/admin_membership_levels.php:21
+msgid "Add New"
+msgstr "Yeni Ekleyin"
+
+#: views/admin_members.php:9 views/admin_membership_levels.php:11
+msgid "search"
+msgstr "ara"
+
+#: views/admin_membership_levels.php:3
+msgid "Simple WP Membership::Membership Levels"
+msgstr "Blog Üyeliği:: Üyelik Seviyeleri"
+
+#: views/admin_membership_level_menu.php:2
+msgid "Membership level"
+msgstr "Üyelik Seviyeleri"
+
+#: views/admin_membership_level_menu.php:3
+msgid "Manage Content Production"
+msgstr "İçerik Korumasını Yönet"
+
+#: views/admin_membership_manage.php:17
+msgid "Example Content Protection Settings"
+msgstr "İçerik Yönetimi Örnek Ayarları"
+
+#: views/admin_member_form_common_part.php:45
+msgid "(twice, required)"
+msgstr "(ikinci defa,  bu  gereklidir)"
+
+#: views/admin_member_form_common_part.php:50
+msgid "Strength indicator"
+msgstr "Güvenlik Seviyesi"
+
+#: views/admin_member_form_common_part.php:51
+msgid ""
+"Hint: The password should be at least seven characters long. To make it "
+"stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
+"$ % ^ &amp; )."
+msgstr ""
+"İpucu: Şifre en az 7 karakterden oluşmalıdır. Güçlü bir  şifre için küçük ve "
+"Büyük harfler, rakamlar ve  ! \" ? $ % ^ &amp; ) gibi çeşitli semboller "
+"şifrede kullanılmalıdır. "
+
+#: views/admin_member_form_common_part.php:64 views/loggedin.php:7
+#: views/login_widget_logged.php:6
+msgid "Account Status"
+msgstr "Hesap Durumu"
+
+#: views/admin_member_form_common_part.php:74
+msgid "Member Since"
+msgstr "Üyelik Başlama Tarihi"
+
+#: views/admin_payment_settings.php:2 views/admin_settings.php:2
+#: views/admin_tools_settings.php:2
+msgid "Simple WP Membership::Settings"
+msgstr "Blog Üyeliği:: Ayarlar"
+
+#: views/admin_payment_settings.php:33
+msgid "PayPal Integration Settings"
+msgstr "Paypal Entegrasyon Ayarları"
+
+#: views/admin_payment_settings.php:36
+msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
+msgstr "PayPal Düğmeniz için  \"Gelişmiş Seçenekler \" Oluşturulması"
+
+#: views/admin_payment_settings.php:39
+msgid "Enter the Membership Level ID"
+msgstr "Üyelik Numarasını Girin"
+
+#: views/admin_payment_settings.php:41
+msgid "Generate Code"
+msgstr "Kod Oluştur"
+
+#: views/admin_tools_settings.php:9
+msgid "Generate a Registration Completion link"
+msgstr "Kayıt Tamamlama Linki Oluştur"
+
+#: views/admin_tools_settings.php:12
+msgid ""
+"You can manually generate a registration completion link here and give it to "
+"your customer if they have missed the email that was automatically sent out "
+"to them after the payment."
+msgstr ""
+"Eğer müşteriniz kayıttan sonra otomatik olarak  gönderilen epostayı "
+"almadıysa,  BURADA kayıt tamamlama linkini manuel olarak  oluşturabilir ve "
+"müşterinize gönderebilirsiniz."
+
+#: views/admin_tools_settings.php:17
+msgid "Generate Registration Completion Link"
+msgstr "Kayıt Tamamlama Linki Oluştur"
+
+#: views/admin_tools_settings.php:20
+msgid "OR"
+msgstr "VEYA"
+
+#: views/admin_tools_settings.php:21
+msgid "For All Pending Registrations"
+msgstr "Bekleyen Bütün Kayıtlar İçin"
+
+#: views/admin_tools_settings.php:24
+msgid "Registration Completion Links Will Appear Below:"
+msgstr "Kayıt Tamamama Linkleri Aşağıda Görülecektir."
+
+#: views/admin_tools_settings.php:31
+msgid "Send Registration Reminder Email too"
+msgstr "Kayıt Hatırlatma E-Postası da Gönder"
+
+#: views/admin_tools_settings.php:34
+msgid "Submit"
+msgstr "Giriş Yapın"
+
+#: views/edit.php:58
+msgid "Update"
+msgstr "Güncelle"
+
+#: views/forgot_password.php:5
+msgid "Email Address"
+msgstr "E-Posta Adresi"
+
+#: views/forgot_password.php:12
+msgid "Reset Password"
+msgstr "Şifre Resetle"
+
+#: views/loggedin.php:3 views/login_widget_logged.php:3
+msgid "Logged in as"
+msgstr "Giriş yapılan hesap:"
+
+#: views/loggedin.php:11 views/login_widget_logged.php:9
+msgid "Membership"
+msgstr "Üyelik"
+
+#: views/loggedin.php:15 views/login_widget_logged.php:12
+msgid "Account Expiry"
+msgstr "Hesap süresi doldu"
+
+#: views/loggedin.php:19 views/login_widget_logged.php:16
+msgid "Logout"
+msgstr "ÇIKIŞ"
+
+#: views/login.php:17
+msgid "Remember Me"
+msgstr "Beni Hatırla"
+
+#: views/login.php:26
+msgid "Forgot Password"
+msgstr "Şifreyi Unut"
diff --git a/languages/swpm-zh_CN.mo b/languages/swpm-zh_CN.mo
new file mode 100644 (file)
index 0000000..562a19b
Binary files /dev/null and b/languages/swpm-zh_CN.mo differ
diff --git a/languages/swpm-zh_CN.po b/languages/swpm-zh_CN.po
new file mode 100644 (file)
index 0000000..4d187ba
--- /dev/null
@@ -0,0 +1,689 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Simple WordPress Membership\n"
+"POT-Creation-Date: 2014-07-30 17:30+0800\n"
+"PO-Revision-Date: 2014-07-30 23:09+0800\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: zh_Hans\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.6.7\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-KeywordsList: __;_e\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: classes/class.bAdminRegistration.php:48
+#: classes/class.bFrontRegistration.php:61
+msgid "Registration Successful."
+msgstr "注册成功"
+
+#: classes/class.bAdminRegistration.php:53
+#: classes/class.bAdminRegistration.php:72
+#: classes/class.bMembershipLevel.php:36 classes/class.bMembershipLevel.php:54
+msgid "Please correct the following:"
+msgstr "请更改以下信息"
+
+#: classes/class.bAjax.php:16 classes/class.bAjax.php:28
+msgid "Aready taken"
+msgstr "已被占用"
+
+#: classes/class.bAjax.php:29
+msgid "Available"
+msgstr "可以使用"
+
+#: classes/class.bAuth.php:47 classes/class.bFrontRegistration.php:176
+msgid "User Not Found."
+msgstr "找不到用户"
+
+#: classes/class.bAuth.php:54
+msgid "Password Empty or Invalid."
+msgstr "密码空或者无效"
+
+#: classes/class.bAuth.php:78
+msgid "Account is inactive."
+msgstr "账户未激活"
+
+#: classes/class.bAuth.php:88
+msgid "You are logged in as:"
+msgstr "您已使用以下身份登陆"
+
+#: classes/class.bAuth.php:127
+msgid "Logged Out Successfully."
+msgstr "成功退出登陆"
+
+#: classes/class.bAuth.php:169
+msgid "Session Expired."
+msgstr "登陆超时"
+
+#: classes/class.bAuth.php:178
+msgid "Invalid User Name"
+msgstr "无效的用户名"
+
+#: classes/class.bAuth.php:186
+msgid "Bad Cookie Hash"
+msgstr "坏的Cookie"
+
+#: classes/class.bForm.php:26
+msgid ""
+"Wordpress account exists with given user name. But given email doesn't match."
+msgstr "用户名正确,但邮箱错误"
+
+#: classes/class.bForm.php:31
+msgid ""
+"Wordpress account exists with given email. But given user name doesn't match."
+msgstr "邮箱正确,但用户名错误"
+
+#: classes/class.bForm.php:40
+msgid "User name is required"
+msgstr "请输入用户名"
+
+#: classes/class.bForm.php:49
+msgid "User name already exists."
+msgstr "用户名已经存在"
+
+#: classes/class.bForm.php:72
+msgid "Password is required"
+msgstr "请输入密码"
+
+#: classes/class.bForm.php:79
+msgid "Password mismatch"
+msgstr "密码不符"
+
+#: classes/class.bForm.php:95
+msgid "Email is required"
+msgstr "请输入邮箱地址"
+
+#: classes/class.bForm.php:99
+msgid "Email is invalid"
+msgstr "邮箱无效"
+
+#: classes/class.bForm.php:112
+msgid "Email is already used."
+msgstr "邮箱已经存在"
+
+#: classes/class.bForm.php:128
+msgid "Phone number is invalid"
+msgstr "电话号码无效"
+
+#: classes/class.bForm.php:174
+msgid "Member since field is invalid"
+msgstr "号码段无效"
+
+#: classes/class.bForm.php:185
+msgid "Subscription starts field is invalid"
+msgstr "开始时间字段无效"
+
+#: classes/class.bForm.php:195
+msgid "Gender field is invalid"
+msgstr "性别填写无效"
+
+#: classes/class.bForm.php:206
+msgid "Account state field is invalid"
+msgstr "账户描述无效"
+
+#: classes/class.bFrontRegistration.php:61
+msgid "Please"
+msgstr "请"
+
+#: classes/class.bFrontRegistration.php:61 views/login.php:21
+msgid "Login"
+msgstr "登陆"
+
+#: classes/class.bFrontRegistration.php:76
+#: classes/class.bFrontRegistration.php:155
+msgid "Please correct the following"
+msgstr "请修改以下信息"
+
+#: classes/class.bFrontRegistration.php:89
+msgid "Membership Level Couldn't be found."
+msgstr "会员等级不存在"
+
+#: classes/class.bFrontRegistration.php:165
+msgid "Email Address Not Valid."
+msgstr "Email地址无效"
+
+#: classes/class.bFrontRegistration.php:196
+msgid "New password has been sent to your email address."
+msgstr "新的密码已经发送到您的邮箱"
+
+#: classes/class.bLevelForm.php:31
+msgid "Subscriptoin duration must be > 0."
+msgstr "过程必须大于0"
+
+#: classes/class.bMembers.php:7
+msgid "Member"
+msgstr "会员"
+
+#: classes/class.bMembers.php:8 classes/class.simple-wp-membership.php:439
+msgid "Members"
+msgstr "会员"
+
+#: classes/class.bMembers.php:16 classes/class.bMembershipLevels.php:16
+msgid "ID"
+msgstr "ID"
+
+#: classes/class.bMembers.php:17 views/add.php:5 views/edit.php:4
+#: views/login.php:5
+msgid "User Name"
+msgstr "用户名"
+
+#: classes/class.bMembers.php:18 views/add.php:21
+#: views/admin_member_form_common_part.php:2 views/edit.php:20
+msgid "First Name"
+msgstr "名"
+
+#: classes/class.bMembers.php:19 views/add.php:25
+#: views/admin_member_form_common_part.php:6 views/edit.php:24
+msgid "Last Name"
+msgstr "姓"
+
+#: classes/class.bMembers.php:20 views/add.php:9 views/edit.php:8
+msgid "Email"
+msgstr "Email"
+
+#: classes/class.bMembers.php:21 classes/class.bMembershipLevels.php:8
+#: classes/class.bMembershipLevels.php:17 views/add.php:64
+#: views/admin_member_form_common_part.php:55 views/edit.php:52
+msgid "Membership Level"
+msgstr "会员等级"
+
+#: classes/class.bMembers.php:22 views/admin_member_form_common_part.php:78
+msgid "Subscription Starts"
+msgstr "订阅开始于"
+
+#: classes/class.bMembers.php:23
+msgid "Account State"
+msgstr "账户描述"
+
+#: classes/class.bMembers.php:35 classes/class.bMembershipLevels.php:29
+msgid "Delete"
+msgstr "删除"
+
+#: classes/class.bMembers.php:98
+msgid "No Member found."
+msgstr "会员不存在"
+
+#: classes/class.bMembershipLevel.php:31
+msgid "Membership Level Creation Successful."
+msgstr "会员等级创建成功"
+
+#: classes/class.bMembershipLevel.php:50
+msgid "Updated Successfully."
+msgstr "更新成功"
+
+#: classes/class.bMembershipLevels.php:9
+#: classes/class.simple-wp-membership.php:441
+msgid "Membership Levels"
+msgstr "会员等级"
+
+#: classes/class.bMembershipLevels.php:18
+msgid "Role"
+msgstr "角色"
+
+#: classes/class.bMembershipLevels.php:19
+msgid "Subscription Valid For"
+msgstr "订阅有效于"
+
+#: classes/class.bSettings.php:28
+msgid "Plugin Documentation"
+msgstr "插件文件"
+
+#: classes/class.bSettings.php:30
+msgid "General Settings"
+msgstr "总体设置"
+
+#: classes/class.bSettings.php:32
+msgid "Enable Free Membership"
+msgstr "启用免费会员"
+
+#: classes/class.bSettings.php:35
+msgid "Enable/disable registration for free membership level"
+msgstr "启用/不启用免费会员注册"
+
+#: classes/class.bSettings.php:36
+msgid "Free Membership Level ID"
+msgstr "免费会员等级ID"
+
+#: classes/class.bSettings.php:39
+msgid "Assign free membership level ID"
+msgstr "指定免费会员级别ID"
+
+#: classes/class.bSettings.php:40
+msgid "Hide Adminbar"
+msgstr "隐藏管理栏"
+
+#: classes/class.bSettings.php:43
+msgid ""
+"WordPress shows an admin toolbar to the logged in users of the site. Check "
+"this box if you want to hide that admin toolbar in the fronend of your site."
+msgstr ""
+"WordPress对已经登陆的用户显示管理工具栏,如果你想在网站前端隐藏管理栏请勾选这"
+"里"
+
+#: classes/class.bSettings.php:45
+msgid "Pages Settings"
+msgstr "页面设置"
+
+#: classes/class.bSettings.php:47
+msgid "Login Page URL"
+msgstr "登陆页面URL"
+
+#: classes/class.bSettings.php:51
+msgid "Registration Page URL"
+msgstr "注册页面URL"
+
+#: classes/class.bSettings.php:55
+msgid "Join Us Page URL"
+msgstr "加入页面URL"
+
+#: classes/class.bSettings.php:59
+msgid "Edit Profile Page URL"
+msgstr "修改会员信息页面URL"
+
+#: classes/class.bSettings.php:63
+msgid "Password Reset Page URL"
+msgstr "更改密码页面URL"
+
+#: classes/class.bSettings.php:68
+msgid "Test & Debug Settings"
+msgstr "测试与调试设置"
+
+#: classes/class.bSettings.php:74
+msgid "Enable Sandbox Testing"
+msgstr "启用沙盒测试"
+
+#: classes/class.bSettings.php:77
+msgid "Enable this option if you want to do sandbox payment testing."
+msgstr "如果你要测试付款方式,请启用沙盒"
+
+#: classes/class.bSettings.php:90
+msgid "Email Misc. Settings"
+msgstr "电子邮件杂项设置"
+
+#: classes/class.bSettings.php:92
+msgid "From Email Address"
+msgstr "电子邮件来路"
+
+#: classes/class.bSettings.php:97
+msgid "Email Settings (Prompt to Complete Registration )"
+msgstr "电子邮件设置(快速完成注册)"
+
+#: classes/class.bSettings.php:99 classes/class.bSettings.php:110
+#: classes/class.bSettings.php:129
+msgid "Email Subject"
+msgstr "Email标题"
+
+#: classes/class.bSettings.php:103 classes/class.bSettings.php:114
+#: classes/class.bSettings.php:133
+msgid "Email Body"
+msgstr "Email内容"
+
+#: classes/class.bSettings.php:108
+msgid "Email Settings (Registration Complete)"
+msgstr "Email设置(完成注册)"
+
+#: classes/class.bSettings.php:118
+msgid "Send Notification To Admin"
+msgstr "给管理员发送通知"
+
+#: classes/class.bSettings.php:122
+msgid "Send Email to Member When Added via Admin Dashboard"
+msgstr "管理员添加用户后给用户发送邮件"
+
+#: classes/class.bSettings.php:127
+msgid " Email Settings (Account Upgrade Notification)"
+msgstr "Email设置(账户更新信息通知)"
+
+#: classes/class.miscUtils.php:51
+msgid "Registration"
+msgstr "注册"
+
+#: classes/class.miscUtils.php:74
+msgid "Member Login"
+msgstr "会员登陆"
+
+#: classes/class.miscUtils.php:97
+msgid "Profile"
+msgstr "个人资料"
+
+#: classes/class.miscUtils.php:120
+msgid "Password Reset"
+msgstr "更改密码"
+
+#: classes/class.simple-wp-membership.php:181
+msgid "Simple WP Membership Protection"
+msgstr "会员保护"
+
+#: classes/class.simple-wp-membership.php:194
+msgid "Simple Membership Protection options"
+msgstr "会员保护选项"
+
+#: classes/class.simple-wp-membership.php:210
+msgid "Do you want to protect this content?"
+msgstr "你是否需要保护这个内容"
+
+#: classes/class.simple-wp-membership.php:215
+msgid "Select the membership level that can access this content:"
+msgstr "选择可以查看该内容的会员等级"
+
+#: classes/class.simple-wp-membership.php:347
+msgid "Display SWPM Login."
+msgstr "显示SWPM登陆"
+
+#: classes/class.simple-wp-membership.php:349
+msgid "SWPM Login"
+msgstr "SWPM登陆"
+
+#: classes/class.simple-wp-membership.php:436
+msgid "WP Membership"
+msgstr "WP会员"
+
+#: classes/class.simple-wp-membership.php:443
+msgid "Settings"
+msgstr "设置"
+
+#: views/add.php:13 views/admin_member_form_common_part.php:45
+#: views/edit.php:12 views/login.php:11
+msgid "Password"
+msgstr "密码"
+
+#: views/add.php:17 views/edit.php:16
+msgid "Repeat Password"
+msgstr "重复密码"
+
+#: views/add.php:29 views/admin_member_form_common_part.php:10
+msgid "Gender"
+msgstr "性别"
+
+#: views/add.php:36 views/admin_member_form_common_part.php:17
+#: views/edit.php:28
+msgid "Phone"
+msgstr "电话"
+
+#: views/add.php:40 views/admin_member_form_common_part.php:21
+#: views/edit.php:32
+msgid "Street"
+msgstr "街道"
+
+#: views/add.php:44 views/admin_member_form_common_part.php:25
+#: views/edit.php:36
+msgid "City"
+msgstr "城市"
+
+#: views/add.php:48 views/admin_member_form_common_part.php:29
+#: views/edit.php:40
+msgid "State"
+msgstr "省份"
+
+#: views/add.php:52 views/admin_member_form_common_part.php:33
+#: views/edit.php:44
+msgid "Zipcode"
+msgstr "邮编"
+
+#: views/add.php:56 views/admin_member_form_common_part.php:37
+#: views/edit.php:48
+msgid "Country"
+msgstr "国家"
+
+#: views/add.php:60 views/admin_member_form_common_part.php:41
+msgid "Company"
+msgstr "公司"
+
+#: views/add.php:71
+msgid "Register"
+msgstr "注册"
+
+#: views/admin_add.php:6
+msgid "Add Member"
+msgstr "添加会员"
+
+#: views/admin_add.php:7
+msgid "Create a brand new user and add it to this site."
+msgstr "给网站创建一个新用户"
+
+#: views/admin_add.php:11
+msgid "User name"
+msgstr "用户名"
+
+#: views/admin_add.php:11 views/admin_add.php:15 views/admin_add_level.php:11
+#: views/admin_add_level.php:15 views/admin_add_level.php:19
+#: views/admin_edit.php:9 views/admin_edit.php:13
+#: views/admin_edit_level.php:10 views/admin_edit_level.php:14
+#: views/admin_edit_level.php:18
+msgid "(required)"
+msgstr "必填"
+
+#: views/admin_add.php:15 views/admin_edit.php:13
+msgid "E-mail"
+msgstr "E-mail"
+
+#: views/admin_add.php:19
+msgid "Add New Member "
+msgstr "添加新会员"
+
+#: views/admin_add_level.php:6
+msgid "Create new membership level."
+msgstr "创建新会员等级"
+
+#: views/admin_add_level.php:11 views/admin_edit_level.php:10
+msgid "Membership Level Name"
+msgstr "会员等级名"
+
+#: views/admin_add_level.php:15 views/admin_edit_level.php:14
+msgid "Default WordPress Role"
+msgstr "默认的WP角色"
+
+#: views/admin_add_level.php:19 views/admin_edit_level.php:18
+msgid "Subscription Duration"
+msgstr "有效期"
+
+#: views/admin_add_level.php:26 views/admin_edit_level.php:27
+msgid "No Expiry"
+msgstr "不失效"
+
+#: views/admin_add_level.php:55
+msgid "Add New Membership Level "
+msgstr "添加新的会员等级"
+
+#: views/admin_edit.php:5
+msgid "Edit Member"
+msgstr "修改会员"
+
+#: views/admin_edit.php:6
+msgid "Edit existing member details."
+msgstr "修改已存在用户信息"
+
+#: views/admin_edit.php:9
+msgid "Username"
+msgstr "用户名"
+
+#: views/admin_edit.php:17
+msgid "Edit User "
+msgstr "修改用户"
+
+#: views/admin_edit_level.php:5
+msgid "Edit membership level"
+msgstr "修改会员等级"
+
+#: views/admin_edit_level.php:6
+msgid "Edit membership level."
+msgstr "修改会员等级"
+
+#: views/admin_edit_level.php:54
+msgid "Edit Membership Level "
+msgstr "修改会员等级"
+
+#. translators: password input field
+#: views/admin_member_form_common_part.php:45
+msgid "(twice, required)"
+msgstr "2次,必填"
+
+#: views/admin_member_form_common_part.php:50
+msgid "Strength indicator"
+msgstr "强度指示器"
+
+#: views/admin_member_form_common_part.php:51
+msgid ""
+"Hint: The password should be at least seven characters long. To make it "
+"stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
+"$ % ^ &amp; )."
+msgstr ""
+"密码最少7个字符,为保证密码强度,请使用大小写字母,数字和例如! \" ? $ % ^ "
+"&amp的符号"
+
+#: views/admin_member_form_common_part.php:64 views/loggedin.php:7
+#: views/login_widget_logged.php:6
+msgid "Account Status"
+msgstr "账户状态"
+
+#: views/admin_member_form_common_part.php:66
+msgid "Active"
+msgstr "激活"
+
+#: views/admin_member_form_common_part.php:67
+msgid "Inactive"
+msgstr "未激活"
+
+#: views/admin_member_form_common_part.php:68
+msgid "Pending"
+msgstr "待定"
+
+#: views/admin_member_form_common_part.php:69
+msgid "Expired"
+msgstr "失效"
+
+#: views/admin_member_form_common_part.php:74
+msgid "Member Since"
+msgstr "会员自"
+
+#: views/admin_members.php:2
+msgid "Simple WP Membership::Members"
+msgstr "会员等级:会员"
+
+#: views/admin_members.php:3 views/admin_members.php:19
+#: views/admin_membership_levels.php:21
+msgid "Add New"
+msgstr "添加新的"
+
+#: views/admin_members.php:9 views/admin_membership_levels.php:11
+msgid "search"
+msgstr "搜索"
+
+#: views/admin_membership_level_menu.php:2
+msgid "Membership level"
+msgstr "会员等级"
+
+#: views/admin_membership_level_menu.php:3
+msgid "Manage Content Production"
+msgstr "管理内容制作"
+
+#: views/admin_membership_levels.php:3
+msgid "Simple WP Membership::Membership Levels"
+msgstr "会员:会员等级"
+
+#: views/admin_membership_levels.php:4
+msgctxt "Level"
+msgid "Add New"
+msgstr "添加新等级"
+
+#: views/admin_membership_manage.php:17
+msgid "Example Content Protection Settings"
+msgstr "内容保护设置例子"
+
+#: views/admin_payment_settings.php:2 views/admin_settings.php:2
+#: views/admin_tools_settings.php:2
+msgid "Simple WP Membership::Settings"
+msgstr "会员:设置"
+
+#: views/admin_payment_settings.php:33
+msgid "PayPal Integration Settings"
+msgstr "Paypal集成设置"
+
+#: views/admin_payment_settings.php:36
+msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
+msgstr "您的PayPal按钮产生高级变量代码"
+
+#: views/admin_payment_settings.php:39
+msgid "Enter the Membership Level ID"
+msgstr "输入会员等级ID"
+
+#: views/admin_payment_settings.php:41
+msgid "Generate Code"
+msgstr "生成代码"
+
+#: views/admin_tools_settings.php:9
+msgid "Generate a Registration Completion link"
+msgstr "生成注册完成链接"
+
+#: views/admin_tools_settings.php:12
+msgid ""
+"You can manually generate a registration completion link here and give it to "
+"your customer if they have missed the email that was automatically sent out "
+"to them after the payment."
+msgstr ""
+"如果你的用户在完成付款后没收到自动生成的邮件,那么你可以在这里手动生成注册完"
+"成链接,并发送给你的用户"
+
+#: views/admin_tools_settings.php:17
+msgid "Generate Registration Completion Link"
+msgstr "生成注册完成链接"
+
+#: views/admin_tools_settings.php:20
+msgid "OR"
+msgstr "或者"
+
+#: views/admin_tools_settings.php:21
+msgid "For All Pending Registrations"
+msgstr "对于所有待定的注册"
+
+#: views/admin_tools_settings.php:24
+msgid "Registration Completion Links Will Appear Below:"
+msgstr "注册完成链接会出现在:"
+
+#: views/admin_tools_settings.php:31
+msgid "Send Registration Reminder Email too"
+msgstr "同时发送注册提醒邮件"
+
+#: views/admin_tools_settings.php:34
+msgid "Submit"
+msgstr "提交"
+
+#: views/edit.php:58
+msgid "Update"
+msgstr "更新"
+
+#: views/forgot_password.php:5
+msgid "Email Address"
+msgstr "Email地址"
+
+#: views/forgot_password.php:12
+msgid "Reset Password"
+msgstr "重置密码"
+
+#: views/loggedin.php:3 views/login_widget_logged.php:3
+msgid "Logged in as"
+msgstr "以以下身份登陆"
+
+#: views/loggedin.php:11 views/login_widget_logged.php:9
+msgid "Membership"
+msgstr "会员"
+
+#: views/loggedin.php:15 views/login_widget_logged.php:13
+msgid "Logout"
+msgstr "退出登陆"
+
+#: views/login.php:17
+msgid "Remember Me"
+msgstr "记住这个身份"
+
+#: views/login.php:26
+msgid "Forgot Password"
+msgstr "忘记密码"
+
+#: views/login.php:30
+msgid "Join Us"
+msgstr "加入会员"
diff --git a/languages/swpm-zh_Hans.mo b/languages/swpm-zh_Hans.mo
new file mode 100644 (file)
index 0000000..562a19b
Binary files /dev/null and b/languages/swpm-zh_Hans.mo differ
diff --git a/languages/swpm-zh_Hans.po b/languages/swpm-zh_Hans.po
new file mode 100644 (file)
index 0000000..4d187ba
--- /dev/null
@@ -0,0 +1,689 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Simple WordPress Membership\n"
+"POT-Creation-Date: 2014-07-30 17:30+0800\n"
+"PO-Revision-Date: 2014-07-30 23:09+0800\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: zh_Hans\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.6.7\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-KeywordsList: __;_e\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: classes/class.bAdminRegistration.php:48
+#: classes/class.bFrontRegistration.php:61
+msgid "Registration Successful."
+msgstr "注册成功"
+
+#: classes/class.bAdminRegistration.php:53
+#: classes/class.bAdminRegistration.php:72
+#: classes/class.bMembershipLevel.php:36 classes/class.bMembershipLevel.php:54
+msgid "Please correct the following:"
+msgstr "请更改以下信息"
+
+#: classes/class.bAjax.php:16 classes/class.bAjax.php:28
+msgid "Aready taken"
+msgstr "已被占用"
+
+#: classes/class.bAjax.php:29
+msgid "Available"
+msgstr "可以使用"
+
+#: classes/class.bAuth.php:47 classes/class.bFrontRegistration.php:176
+msgid "User Not Found."
+msgstr "找不到用户"
+
+#: classes/class.bAuth.php:54
+msgid "Password Empty or Invalid."
+msgstr "密码空或者无效"
+
+#: classes/class.bAuth.php:78
+msgid "Account is inactive."
+msgstr "账户未激活"
+
+#: classes/class.bAuth.php:88
+msgid "You are logged in as:"
+msgstr "您已使用以下身份登陆"
+
+#: classes/class.bAuth.php:127
+msgid "Logged Out Successfully."
+msgstr "成功退出登陆"
+
+#: classes/class.bAuth.php:169
+msgid "Session Expired."
+msgstr "登陆超时"
+
+#: classes/class.bAuth.php:178
+msgid "Invalid User Name"
+msgstr "无效的用户名"
+
+#: classes/class.bAuth.php:186
+msgid "Bad Cookie Hash"
+msgstr "坏的Cookie"
+
+#: classes/class.bForm.php:26
+msgid ""
+"Wordpress account exists with given user name. But given email doesn't match."
+msgstr "用户名正确,但邮箱错误"
+
+#: classes/class.bForm.php:31
+msgid ""
+"Wordpress account exists with given email. But given user name doesn't match."
+msgstr "邮箱正确,但用户名错误"
+
+#: classes/class.bForm.php:40
+msgid "User name is required"
+msgstr "请输入用户名"
+
+#: classes/class.bForm.php:49
+msgid "User name already exists."
+msgstr "用户名已经存在"
+
+#: classes/class.bForm.php:72
+msgid "Password is required"
+msgstr "请输入密码"
+
+#: classes/class.bForm.php:79
+msgid "Password mismatch"
+msgstr "密码不符"
+
+#: classes/class.bForm.php:95
+msgid "Email is required"
+msgstr "请输入邮箱地址"
+
+#: classes/class.bForm.php:99
+msgid "Email is invalid"
+msgstr "邮箱无效"
+
+#: classes/class.bForm.php:112
+msgid "Email is already used."
+msgstr "邮箱已经存在"
+
+#: classes/class.bForm.php:128
+msgid "Phone number is invalid"
+msgstr "电话号码无效"
+
+#: classes/class.bForm.php:174
+msgid "Member since field is invalid"
+msgstr "号码段无效"
+
+#: classes/class.bForm.php:185
+msgid "Subscription starts field is invalid"
+msgstr "开始时间字段无效"
+
+#: classes/class.bForm.php:195
+msgid "Gender field is invalid"
+msgstr "性别填写无效"
+
+#: classes/class.bForm.php:206
+msgid "Account state field is invalid"
+msgstr "账户描述无效"
+
+#: classes/class.bFrontRegistration.php:61
+msgid "Please"
+msgstr "请"
+
+#: classes/class.bFrontRegistration.php:61 views/login.php:21
+msgid "Login"
+msgstr "登陆"
+
+#: classes/class.bFrontRegistration.php:76
+#: classes/class.bFrontRegistration.php:155
+msgid "Please correct the following"
+msgstr "请修改以下信息"
+
+#: classes/class.bFrontRegistration.php:89
+msgid "Membership Level Couldn't be found."
+msgstr "会员等级不存在"
+
+#: classes/class.bFrontRegistration.php:165
+msgid "Email Address Not Valid."
+msgstr "Email地址无效"
+
+#: classes/class.bFrontRegistration.php:196
+msgid "New password has been sent to your email address."
+msgstr "新的密码已经发送到您的邮箱"
+
+#: classes/class.bLevelForm.php:31
+msgid "Subscriptoin duration must be > 0."
+msgstr "过程必须大于0"
+
+#: classes/class.bMembers.php:7
+msgid "Member"
+msgstr "会员"
+
+#: classes/class.bMembers.php:8 classes/class.simple-wp-membership.php:439
+msgid "Members"
+msgstr "会员"
+
+#: classes/class.bMembers.php:16 classes/class.bMembershipLevels.php:16
+msgid "ID"
+msgstr "ID"
+
+#: classes/class.bMembers.php:17 views/add.php:5 views/edit.php:4
+#: views/login.php:5
+msgid "User Name"
+msgstr "用户名"
+
+#: classes/class.bMembers.php:18 views/add.php:21
+#: views/admin_member_form_common_part.php:2 views/edit.php:20
+msgid "First Name"
+msgstr "名"
+
+#: classes/class.bMembers.php:19 views/add.php:25
+#: views/admin_member_form_common_part.php:6 views/edit.php:24
+msgid "Last Name"
+msgstr "姓"
+
+#: classes/class.bMembers.php:20 views/add.php:9 views/edit.php:8
+msgid "Email"
+msgstr "Email"
+
+#: classes/class.bMembers.php:21 classes/class.bMembershipLevels.php:8
+#: classes/class.bMembershipLevels.php:17 views/add.php:64
+#: views/admin_member_form_common_part.php:55 views/edit.php:52
+msgid "Membership Level"
+msgstr "会员等级"
+
+#: classes/class.bMembers.php:22 views/admin_member_form_common_part.php:78
+msgid "Subscription Starts"
+msgstr "订阅开始于"
+
+#: classes/class.bMembers.php:23
+msgid "Account State"
+msgstr "账户描述"
+
+#: classes/class.bMembers.php:35 classes/class.bMembershipLevels.php:29
+msgid "Delete"
+msgstr "删除"
+
+#: classes/class.bMembers.php:98
+msgid "No Member found."
+msgstr "会员不存在"
+
+#: classes/class.bMembershipLevel.php:31
+msgid "Membership Level Creation Successful."
+msgstr "会员等级创建成功"
+
+#: classes/class.bMembershipLevel.php:50
+msgid "Updated Successfully."
+msgstr "更新成功"
+
+#: classes/class.bMembershipLevels.php:9
+#: classes/class.simple-wp-membership.php:441
+msgid "Membership Levels"
+msgstr "会员等级"
+
+#: classes/class.bMembershipLevels.php:18
+msgid "Role"
+msgstr "角色"
+
+#: classes/class.bMembershipLevels.php:19
+msgid "Subscription Valid For"
+msgstr "订阅有效于"
+
+#: classes/class.bSettings.php:28
+msgid "Plugin Documentation"
+msgstr "插件文件"
+
+#: classes/class.bSettings.php:30
+msgid "General Settings"
+msgstr "总体设置"
+
+#: classes/class.bSettings.php:32
+msgid "Enable Free Membership"
+msgstr "启用免费会员"
+
+#: classes/class.bSettings.php:35
+msgid "Enable/disable registration for free membership level"
+msgstr "启用/不启用免费会员注册"
+
+#: classes/class.bSettings.php:36
+msgid "Free Membership Level ID"
+msgstr "免费会员等级ID"
+
+#: classes/class.bSettings.php:39
+msgid "Assign free membership level ID"
+msgstr "指定免费会员级别ID"
+
+#: classes/class.bSettings.php:40
+msgid "Hide Adminbar"
+msgstr "隐藏管理栏"
+
+#: classes/class.bSettings.php:43
+msgid ""
+"WordPress shows an admin toolbar to the logged in users of the site. Check "
+"this box if you want to hide that admin toolbar in the fronend of your site."
+msgstr ""
+"WordPress对已经登陆的用户显示管理工具栏,如果你想在网站前端隐藏管理栏请勾选这"
+"里"
+
+#: classes/class.bSettings.php:45
+msgid "Pages Settings"
+msgstr "页面设置"
+
+#: classes/class.bSettings.php:47
+msgid "Login Page URL"
+msgstr "登陆页面URL"
+
+#: classes/class.bSettings.php:51
+msgid "Registration Page URL"
+msgstr "注册页面URL"
+
+#: classes/class.bSettings.php:55
+msgid "Join Us Page URL"
+msgstr "加入页面URL"
+
+#: classes/class.bSettings.php:59
+msgid "Edit Profile Page URL"
+msgstr "修改会员信息页面URL"
+
+#: classes/class.bSettings.php:63
+msgid "Password Reset Page URL"
+msgstr "更改密码页面URL"
+
+#: classes/class.bSettings.php:68
+msgid "Test & Debug Settings"
+msgstr "测试与调试设置"
+
+#: classes/class.bSettings.php:74
+msgid "Enable Sandbox Testing"
+msgstr "启用沙盒测试"
+
+#: classes/class.bSettings.php:77
+msgid "Enable this option if you want to do sandbox payment testing."
+msgstr "如果你要测试付款方式,请启用沙盒"
+
+#: classes/class.bSettings.php:90
+msgid "Email Misc. Settings"
+msgstr "电子邮件杂项设置"
+
+#: classes/class.bSettings.php:92
+msgid "From Email Address"
+msgstr "电子邮件来路"
+
+#: classes/class.bSettings.php:97
+msgid "Email Settings (Prompt to Complete Registration )"
+msgstr "电子邮件设置(快速完成注册)"
+
+#: classes/class.bSettings.php:99 classes/class.bSettings.php:110
+#: classes/class.bSettings.php:129
+msgid "Email Subject"
+msgstr "Email标题"
+
+#: classes/class.bSettings.php:103 classes/class.bSettings.php:114
+#: classes/class.bSettings.php:133
+msgid "Email Body"
+msgstr "Email内容"
+
+#: classes/class.bSettings.php:108
+msgid "Email Settings (Registration Complete)"
+msgstr "Email设置(完成注册)"
+
+#: classes/class.bSettings.php:118
+msgid "Send Notification To Admin"
+msgstr "给管理员发送通知"
+
+#: classes/class.bSettings.php:122
+msgid "Send Email to Member When Added via Admin Dashboard"
+msgstr "管理员添加用户后给用户发送邮件"
+
+#: classes/class.bSettings.php:127
+msgid " Email Settings (Account Upgrade Notification)"
+msgstr "Email设置(账户更新信息通知)"
+
+#: classes/class.miscUtils.php:51
+msgid "Registration"
+msgstr "注册"
+
+#: classes/class.miscUtils.php:74
+msgid "Member Login"
+msgstr "会员登陆"
+
+#: classes/class.miscUtils.php:97
+msgid "Profile"
+msgstr "个人资料"
+
+#: classes/class.miscUtils.php:120
+msgid "Password Reset"
+msgstr "更改密码"
+
+#: classes/class.simple-wp-membership.php:181
+msgid "Simple WP Membership Protection"
+msgstr "会员保护"
+
+#: classes/class.simple-wp-membership.php:194
+msgid "Simple Membership Protection options"
+msgstr "会员保护选项"
+
+#: classes/class.simple-wp-membership.php:210
+msgid "Do you want to protect this content?"
+msgstr "你是否需要保护这个内容"
+
+#: classes/class.simple-wp-membership.php:215
+msgid "Select the membership level that can access this content:"
+msgstr "选择可以查看该内容的会员等级"
+
+#: classes/class.simple-wp-membership.php:347
+msgid "Display SWPM Login."
+msgstr "显示SWPM登陆"
+
+#: classes/class.simple-wp-membership.php:349
+msgid "SWPM Login"
+msgstr "SWPM登陆"
+
+#: classes/class.simple-wp-membership.php:436
+msgid "WP Membership"
+msgstr "WP会员"
+
+#: classes/class.simple-wp-membership.php:443
+msgid "Settings"
+msgstr "设置"
+
+#: views/add.php:13 views/admin_member_form_common_part.php:45
+#: views/edit.php:12 views/login.php:11
+msgid "Password"
+msgstr "密码"
+
+#: views/add.php:17 views/edit.php:16
+msgid "Repeat Password"
+msgstr "重复密码"
+
+#: views/add.php:29 views/admin_member_form_common_part.php:10
+msgid "Gender"
+msgstr "性别"
+
+#: views/add.php:36 views/admin_member_form_common_part.php:17
+#: views/edit.php:28
+msgid "Phone"
+msgstr "电话"
+
+#: views/add.php:40 views/admin_member_form_common_part.php:21
+#: views/edit.php:32
+msgid "Street"
+msgstr "街道"
+
+#: views/add.php:44 views/admin_member_form_common_part.php:25
+#: views/edit.php:36
+msgid "City"
+msgstr "城市"
+
+#: views/add.php:48 views/admin_member_form_common_part.php:29
+#: views/edit.php:40
+msgid "State"
+msgstr "省份"
+
+#: views/add.php:52 views/admin_member_form_common_part.php:33
+#: views/edit.php:44
+msgid "Zipcode"
+msgstr "邮编"
+
+#: views/add.php:56 views/admin_member_form_common_part.php:37
+#: views/edit.php:48
+msgid "Country"
+msgstr "国家"
+
+#: views/add.php:60 views/admin_member_form_common_part.php:41
+msgid "Company"
+msgstr "公司"
+
+#: views/add.php:71
+msgid "Register"
+msgstr "注册"
+
+#: views/admin_add.php:6
+msgid "Add Member"
+msgstr "添加会员"
+
+#: views/admin_add.php:7
+msgid "Create a brand new user and add it to this site."
+msgstr "给网站创建一个新用户"
+
+#: views/admin_add.php:11
+msgid "User name"
+msgstr "用户名"
+
+#: views/admin_add.php:11 views/admin_add.php:15 views/admin_add_level.php:11
+#: views/admin_add_level.php:15 views/admin_add_level.php:19
+#: views/admin_edit.php:9 views/admin_edit.php:13
+#: views/admin_edit_level.php:10 views/admin_edit_level.php:14
+#: views/admin_edit_level.php:18
+msgid "(required)"
+msgstr "必填"
+
+#: views/admin_add.php:15 views/admin_edit.php:13
+msgid "E-mail"
+msgstr "E-mail"
+
+#: views/admin_add.php:19
+msgid "Add New Member "
+msgstr "添加新会员"
+
+#: views/admin_add_level.php:6
+msgid "Create new membership level."
+msgstr "创建新会员等级"
+
+#: views/admin_add_level.php:11 views/admin_edit_level.php:10
+msgid "Membership Level Name"
+msgstr "会员等级名"
+
+#: views/admin_add_level.php:15 views/admin_edit_level.php:14
+msgid "Default WordPress Role"
+msgstr "默认的WP角色"
+
+#: views/admin_add_level.php:19 views/admin_edit_level.php:18
+msgid "Subscription Duration"
+msgstr "有效期"
+
+#: views/admin_add_level.php:26 views/admin_edit_level.php:27
+msgid "No Expiry"
+msgstr "不失效"
+
+#: views/admin_add_level.php:55
+msgid "Add New Membership Level "
+msgstr "添加新的会员等级"
+
+#: views/admin_edit.php:5
+msgid "Edit Member"
+msgstr "修改会员"
+
+#: views/admin_edit.php:6
+msgid "Edit existing member details."
+msgstr "修改已存在用户信息"
+
+#: views/admin_edit.php:9
+msgid "Username"
+msgstr "用户名"
+
+#: views/admin_edit.php:17
+msgid "Edit User "
+msgstr "修改用户"
+
+#: views/admin_edit_level.php:5
+msgid "Edit membership level"
+msgstr "修改会员等级"
+
+#: views/admin_edit_level.php:6
+msgid "Edit membership level."
+msgstr "修改会员等级"
+
+#: views/admin_edit_level.php:54
+msgid "Edit Membership Level "
+msgstr "修改会员等级"
+
+#. translators: password input field
+#: views/admin_member_form_common_part.php:45
+msgid "(twice, required)"
+msgstr "2次,必填"
+
+#: views/admin_member_form_common_part.php:50
+msgid "Strength indicator"
+msgstr "强度指示器"
+
+#: views/admin_member_form_common_part.php:51
+msgid ""
+"Hint: The password should be at least seven characters long. To make it "
+"stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
+"$ % ^ &amp; )."
+msgstr ""
+"密码最少7个字符,为保证密码强度,请使用大小写字母,数字和例如! \" ? $ % ^ "
+"&amp的符号"
+
+#: views/admin_member_form_common_part.php:64 views/loggedin.php:7
+#: views/login_widget_logged.php:6
+msgid "Account Status"
+msgstr "账户状态"
+
+#: views/admin_member_form_common_part.php:66
+msgid "Active"
+msgstr "激活"
+
+#: views/admin_member_form_common_part.php:67
+msgid "Inactive"
+msgstr "未激活"
+
+#: views/admin_member_form_common_part.php:68
+msgid "Pending"
+msgstr "待定"
+
+#: views/admin_member_form_common_part.php:69
+msgid "Expired"
+msgstr "失效"
+
+#: views/admin_member_form_common_part.php:74
+msgid "Member Since"
+msgstr "会员自"
+
+#: views/admin_members.php:2
+msgid "Simple WP Membership::Members"
+msgstr "会员等级:会员"
+
+#: views/admin_members.php:3 views/admin_members.php:19
+#: views/admin_membership_levels.php:21
+msgid "Add New"
+msgstr "添加新的"
+
+#: views/admin_members.php:9 views/admin_membership_levels.php:11
+msgid "search"
+msgstr "搜索"
+
+#: views/admin_membership_level_menu.php:2
+msgid "Membership level"
+msgstr "会员等级"
+
+#: views/admin_membership_level_menu.php:3
+msgid "Manage Content Production"
+msgstr "管理内容制作"
+
+#: views/admin_membership_levels.php:3
+msgid "Simple WP Membership::Membership Levels"
+msgstr "会员:会员等级"
+
+#: views/admin_membership_levels.php:4
+msgctxt "Level"
+msgid "Add New"
+msgstr "添加新等级"
+
+#: views/admin_membership_manage.php:17
+msgid "Example Content Protection Settings"
+msgstr "内容保护设置例子"
+
+#: views/admin_payment_settings.php:2 views/admin_settings.php:2
+#: views/admin_tools_settings.php:2
+msgid "Simple WP Membership::Settings"
+msgstr "会员:设置"
+
+#: views/admin_payment_settings.php:33
+msgid "PayPal Integration Settings"
+msgstr "Paypal集成设置"
+
+#: views/admin_payment_settings.php:36
+msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
+msgstr "您的PayPal按钮产生高级变量代码"
+
+#: views/admin_payment_settings.php:39
+msgid "Enter the Membership Level ID"
+msgstr "输入会员等级ID"
+
+#: views/admin_payment_settings.php:41
+msgid "Generate Code"
+msgstr "生成代码"
+
+#: views/admin_tools_settings.php:9
+msgid "Generate a Registration Completion link"
+msgstr "生成注册完成链接"
+
+#: views/admin_tools_settings.php:12
+msgid ""
+"You can manually generate a registration completion link here and give it to "
+"your customer if they have missed the email that was automatically sent out "
+"to them after the payment."
+msgstr ""
+"如果你的用户在完成付款后没收到自动生成的邮件,那么你可以在这里手动生成注册完"
+"成链接,并发送给你的用户"
+
+#: views/admin_tools_settings.php:17
+msgid "Generate Registration Completion Link"
+msgstr "生成注册完成链接"
+
+#: views/admin_tools_settings.php:20
+msgid "OR"
+msgstr "或者"
+
+#: views/admin_tools_settings.php:21
+msgid "For All Pending Registrations"
+msgstr "对于所有待定的注册"
+
+#: views/admin_tools_settings.php:24
+msgid "Registration Completion Links Will Appear Below:"
+msgstr "注册完成链接会出现在:"
+
+#: views/admin_tools_settings.php:31
+msgid "Send Registration Reminder Email too"
+msgstr "同时发送注册提醒邮件"
+
+#: views/admin_tools_settings.php:34
+msgid "Submit"
+msgstr "提交"
+
+#: views/edit.php:58
+msgid "Update"
+msgstr "更新"
+
+#: views/forgot_password.php:5
+msgid "Email Address"
+msgstr "Email地址"
+
+#: views/forgot_password.php:12
+msgid "Reset Password"
+msgstr "重置密码"
+
+#: views/loggedin.php:3 views/login_widget_logged.php:3
+msgid "Logged in as"
+msgstr "以以下身份登陆"
+
+#: views/loggedin.php:11 views/login_widget_logged.php:9
+msgid "Membership"
+msgstr "会员"
+
+#: views/loggedin.php:15 views/login_widget_logged.php:13
+msgid "Logout"
+msgstr "退出登陆"
+
+#: views/login.php:17
+msgid "Remember Me"
+msgstr "记住这个身份"
+
+#: views/login.php:26
+msgid "Forgot Password"
+msgstr "忘记密码"
+
+#: views/login.php:30
+msgid "Join Us"
+msgstr "加入会员"
diff --git a/languages/swpm.pot b/languages/swpm.pot
new file mode 100644 (file)
index 0000000..8c5e017
--- /dev/null
@@ -0,0 +1,906 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Simple Membership\n"
+"POT-Creation-Date: 2015-01-27 14:50+1000\n"
+"PO-Revision-Date: 2015-01-27 14:51+1000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.7\n"
+"X-Poedit-KeywordsList: __;_e\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: simple-membership/classes/class.bAccessControl.php:21
+#: simple-membership/classes/class.bAccessControl.php:28
+#: simple-membership/classes/class.bAccessControl.php:48
+msgid "You need to login to view this content. "
+msgstr ""
+
+#: simple-membership/classes/class.bAccessControl.php:35
+#: simple-membership/classes/class.bAccessControl.php:39
+#: simple-membership/classes/class.bAccessControl.php:54
+msgid "You are not allowed to view this content"
+msgstr ""
+
+#: simple-membership/classes/class.bAccessControl.php:72
+msgid "You do no have permission to view rest of the content"
+msgstr ""
+
+#: simple-membership/classes/class.bAccessControl.php:76
+#: simple-membership/classes/class.bAccessControl.php:94
+msgid "You need to login to view the rest of the content. "
+msgstr ""
+
+#: simple-membership/classes/class.bAdminRegistration.php:49
+msgid "Registration Successful."
+msgstr ""
+
+#: simple-membership/classes/class.bAdminRegistration.php:54
+#: simple-membership/classes/class.bAdminRegistration.php:89
+#: simple-membership/classes/class.bMembershipLevel.php:42
+#: simple-membership/classes/class.bMembershipLevel.php:60
+msgid "Please correct the following:"
+msgstr ""
+
+#: simple-membership/classes/class.bAjax.php:17
+#: simple-membership/classes/class.bAjax.php:28
+msgid "Aready taken"
+msgstr ""
+
+#: simple-membership/classes/class.bAjax.php:29
+msgid "Available"
+msgstr ""
+
+#: simple-membership/classes/class.bAuth.php:46
+#: simple-membership/classes/class.bFrontRegistration.php:173
+msgid "User Not Found."
+msgstr ""
+
+#: simple-membership/classes/class.bAuth.php:53
+msgid "Password Empty or Invalid."
+msgstr ""
+
+#: simple-membership/classes/class.bAuth.php:76
+msgid "Account is inactive."
+msgstr ""
+
+#: simple-membership/classes/class.bAuth.php:93
+msgid "Account has expired."
+msgstr ""
+
+#: simple-membership/classes/class.bAuth.php:100
+msgid "You are logged in as:"
+msgstr ""
+
+#: simple-membership/classes/class.bAuth.php:139
+msgid "Logged Out Successfully."
+msgstr ""
+
+#: simple-membership/classes/class.bAuth.php:186
+msgid "Session Expired."
+msgstr ""
+
+#: simple-membership/classes/class.bAuth.php:194
+msgid "Invalid User Name"
+msgstr ""
+
+#: simple-membership/classes/class.bAuth.php:202
+msgid "Sorry! Something went wrong"
+msgstr ""
+
+#: simple-membership/classes/class.bCategoryList.php:15
+#: simple-membership/classes/class.bMembers.php:21
+#: simple-membership/classes/class.bMembershipLevels.php:8
+#: simple-membership/classes/class.bMembershipLevels.php:17
+#: simple-membership/views/add.php:30
+#: simple-membership/views/admin_member_form_common_part.php:2
+#: simple-membership/views/edit.php:52
+msgid "Membership Level"
+msgstr ""
+
+#: simple-membership/classes/class.bCategoryList.php:16
+#: simple-membership/classes/class.bMembershipLevels.php:9
+#: simple-membership/classes/class.simple-wp-membership.php:464
+msgid "Membership Levels"
+msgstr ""
+
+#: simple-membership/classes/class.bCategoryList.php:29
+#: simple-membership/classes/class.bMembers.php:16
+#: simple-membership/classes/class.bMembershipLevels.php:16
+msgid "ID"
+msgstr ""
+
+#: simple-membership/classes/class.bCategoryList.php:30
+msgid "Name"
+msgstr ""
+
+#: simple-membership/classes/class.bCategoryList.php:31
+msgid "Description"
+msgstr ""
+
+#: simple-membership/classes/class.bCategoryList.php:32
+msgid "Count"
+msgstr ""
+
+#: simple-membership/classes/class.bCategoryList.php:63
+msgid "Updated! "
+msgstr ""
+
+#: simple-membership/classes/class.bForm.php:26
+msgid ""
+"Wordpress account exists with given user name. But given email doesn't match."
+msgstr ""
+
+#: simple-membership/classes/class.bForm.php:31
+msgid ""
+"Wordpress account exists with given email. But given user name doesn't match."
+msgstr ""
+
+#: simple-membership/classes/class.bForm.php:40
+msgid "User name is required"
+msgstr ""
+
+#: simple-membership/classes/class.bForm.php:44
+msgid "User name contains invalid character"
+msgstr ""
+
+#: simple-membership/classes/class.bForm.php:52
+msgid "User name already exists."
+msgstr ""
+
+#: simple-membership/classes/class.bForm.php:75
+msgid "Password is required"
+msgstr ""
+
+#: simple-membership/classes/class.bForm.php:82
+msgid "Password mismatch"
+msgstr ""
+
+#: simple-membership/classes/class.bForm.php:98
+msgid "Email is required"
+msgstr ""
+
+#: simple-membership/classes/class.bForm.php:102
+msgid "Email is invalid"
+msgstr ""
+
+#: simple-membership/classes/class.bForm.php:118
+msgid "Email is already used."
+msgstr ""
+
+#: simple-membership/classes/class.bForm.php:184
+msgid "Member since field is invalid"
+msgstr ""
+
+#: simple-membership/classes/class.bForm.php:195
+msgid "Access starts field is invalid"
+msgstr ""
+
+#: simple-membership/classes/class.bForm.php:205
+msgid "Gender field is invalid"
+msgstr ""
+
+#: simple-membership/classes/class.bForm.php:216
+msgid "Account state field is invalid"
+msgstr ""
+
+#: simple-membership/classes/class.bForm.php:223
+msgid "Invalid membership level"
+msgstr ""
+
+#: simple-membership/classes/class.bFrontRegistration.php:61
+msgid "Registration Successful. "
+msgstr ""
+
+#: simple-membership/classes/class.bFrontRegistration.php:61
+#: simple-membership/classes/class.bSettings.php:367
+msgid "Please"
+msgstr ""
+
+#: simple-membership/classes/class.bFrontRegistration.php:61
+#: simple-membership/classes/class.bSettings.php:367
+#: simple-membership/views/login.php:21
+msgid "Login"
+msgstr ""
+
+#: simple-membership/classes/class.bFrontRegistration.php:72
+#: simple-membership/classes/class.bFrontRegistration.php:152
+msgid "Please correct the following"
+msgstr ""
+
+#: simple-membership/classes/class.bFrontRegistration.php:106
+msgid "Membership Level Couldn't be found."
+msgstr ""
+
+#: simple-membership/classes/class.bFrontRegistration.php:162
+msgid "Email Address Not Valid."
+msgstr ""
+
+#: simple-membership/classes/class.bFrontRegistration.php:193
+msgid "New password has been sent to your email address."
+msgstr ""
+
+#: simple-membership/classes/class.bLevelForm.php:47
+msgid "Date format is not valid."
+msgstr ""
+
+#: simple-membership/classes/class.bLevelForm.php:54
+msgid "Access duration must be > 0."
+msgstr ""
+
+#: simple-membership/classes/class.bMembers.php:7
+msgid "Member"
+msgstr ""
+
+#: simple-membership/classes/class.bMembers.php:8
+#: simple-membership/classes/class.simple-wp-membership.php:462
+msgid "Members"
+msgstr ""
+
+#: simple-membership/classes/class.bMembers.php:17
+#: simple-membership/views/add.php:6 simple-membership/views/edit.php:4
+msgid "User Name"
+msgstr ""
+
+#: simple-membership/classes/class.bMembers.php:18
+#: simple-membership/views/add.php:22
+#: simple-membership/views/admin_member_form_common_part.php:15
+#: simple-membership/views/edit.php:20
+msgid "First Name"
+msgstr ""
+
+#: simple-membership/classes/class.bMembers.php:19
+#: simple-membership/views/add.php:26
+#: simple-membership/views/admin_member_form_common_part.php:19
+#: simple-membership/views/edit.php:24
+msgid "Last Name"
+msgstr ""
+
+#: simple-membership/classes/class.bMembers.php:20
+#: simple-membership/views/add.php:10 simple-membership/views/edit.php:8
+msgid "Email"
+msgstr ""
+
+#: simple-membership/classes/class.bMembers.php:22
+#: simple-membership/views/admin_member_form_common_part.php:11
+msgid "Access Starts"
+msgstr ""
+
+#: simple-membership/classes/class.bMembers.php:23
+msgid "Account State"
+msgstr ""
+
+#: simple-membership/classes/class.bMembers.php:35
+#: simple-membership/classes/class.bMembershipLevels.php:29
+msgid "Delete"
+msgstr ""
+
+#: simple-membership/classes/class.bMembers.php:101
+msgid "No Member found."
+msgstr ""
+
+#: simple-membership/classes/class.bMembershipLevel.php:37
+msgid "Membership Level Creation Successful."
+msgstr ""
+
+#: simple-membership/classes/class.bMembershipLevel.php:56
+msgid "Updated Successfully."
+msgstr ""
+
+#: simple-membership/classes/class.bMembershipLevels.php:18
+msgid "Role"
+msgstr ""
+
+#: simple-membership/classes/class.bMembershipLevels.php:19
+msgid "Access Valid For/Until"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:30
+msgid "Plugin Documentation"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:32
+msgid "General Settings"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:34
+msgid "Enable Free Membership"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:37
+msgid "Enable/disable registration for free membership level"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:38
+msgid "Free Membership Level ID"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:41
+msgid "Assign free membership level ID"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:42
+msgid "Enable More Tag Protection"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:45
+msgid ""
+"Enables or disables \"more\" tag protection in the posts and pages. Anything "
+"after the More tag is protected. Anything before the more tag is teaser "
+"content."
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:46
+msgid "Hide Adminbar"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:49
+msgid ""
+"WordPress shows an admin toolbar to the logged in users of the site. Check "
+"this box if you want to hide that admin toolbar in the fronend of your site."
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:51
+msgid "Default Account Status"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:56
+msgid ""
+"Select the default account status for newly registered users. If you want to "
+"manually approve the members then you can set the status to \"Pending\"."
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:62
+msgid "Pages Settings"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:64
+msgid "Login Page URL"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:68
+msgid "Registration Page URL"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:72
+msgid "Join Us Page URL"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:76
+msgid "Edit Profile Page URL"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:80
+msgid "Password Reset Page URL"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:85
+msgid "Test & Debug Settings"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:91
+msgid "Enable Sandbox Testing"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:94
+msgid "Enable this option if you want to do sandbox payment testing."
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:104
+msgid "Email Misc. Settings"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:106
+msgid "From Email Address"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:111
+msgid "Email Settings (Prompt to Complete Registration )"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:113
+#: simple-membership/classes/class.bSettings.php:124
+#: simple-membership/classes/class.bSettings.php:143
+msgid "Email Subject"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:117
+#: simple-membership/classes/class.bSettings.php:128
+#: simple-membership/classes/class.bSettings.php:147
+msgid "Email Body"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:122
+msgid "Email Settings (Registration Complete)"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:132
+msgid "Send Notification To Admin"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:136
+msgid "Send Email to Member When Added via Admin Dashboard"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:141
+msgid " Email Settings (Account Upgrade Notification)"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:367
+msgid "Not a Member?"
+msgstr ""
+
+#: simple-membership/classes/class.bSettings.php:367
+#: simple-membership/views/login.php:27
+msgid "Join Us"
+msgstr ""
+
+#: simple-membership/classes/class.bUtils.php:63
+msgid "Active"
+msgstr ""
+
+#: simple-membership/classes/class.bUtils.php:64
+msgid "Inactive"
+msgstr ""
+
+#: simple-membership/classes/class.bUtils.php:65
+msgid "Pending"
+msgstr ""
+
+#: simple-membership/classes/class.bUtils.php:66
+msgid "Expired"
+msgstr ""
+
+#: simple-membership/classes/class.bUtils.php:251
+msgid "Never"
+msgstr ""
+
+#: simple-membership/classes/class.miscUtils.php:51
+msgid "Registration"
+msgstr ""
+
+#: simple-membership/classes/class.miscUtils.php:74
+msgid "Member Login"
+msgstr ""
+
+#: simple-membership/classes/class.miscUtils.php:97
+msgid "Profile"
+msgstr ""
+
+#: simple-membership/classes/class.miscUtils.php:120
+msgid "Password Reset"
+msgstr ""
+
+#: simple-membership/classes/class.simple-wp-membership.php:184
+msgid "You are not logged in."
+msgstr ""
+
+#: simple-membership/classes/class.simple-wp-membership.php:215
+msgid "Simple WP Membership Protection"
+msgstr ""
+
+#: simple-membership/classes/class.simple-wp-membership.php:228
+msgid "Simple Membership Protection options"
+msgstr ""
+
+#: simple-membership/classes/class.simple-wp-membership.php:244
+msgid "Do you want to protect this content?"
+msgstr ""
+
+#: simple-membership/classes/class.simple-wp-membership.php:249
+msgid "Select the membership level that can access this content:"
+msgstr ""
+
+#: simple-membership/classes/class.simple-wp-membership.php:459
+msgid "WP Membership"
+msgstr ""
+
+#: simple-membership/classes/class.simple-wp-membership.php:466
+msgid "Settings"
+msgstr ""
+
+#: simple-membership/classes/class.simple-wp-membership.php:468
+msgid "Add-ons"
+msgstr ""
+
+#: simple-membership/views/add.php:14 simple-membership/views/admin_add.php:19
+#: simple-membership/views/admin_edit.php:17
+#: simple-membership/views/edit.php:12 simple-membership/views/login.php:11
+msgid "Password"
+msgstr ""
+
+#: simple-membership/views/add.php:18 simple-membership/views/edit.php:16
+msgid "Repeat Password"
+msgstr ""
+
+#: simple-membership/views/add.php:37
+msgid "Register"
+msgstr ""
+
+#: simple-membership/views/admin_add.php:6
+msgid "Add Member"
+msgstr ""
+
+#: simple-membership/views/admin_add.php:7
+msgid "Create a brand new user and add it to this site."
+msgstr ""
+
+#: simple-membership/views/admin_add.php:11
+msgid "User name"
+msgstr ""
+
+#: simple-membership/views/admin_add.php:11
+#: simple-membership/views/admin_add.php:15
+#: simple-membership/views/admin_add_level.php:11
+#: simple-membership/views/admin_add_level.php:15
+#: simple-membership/views/admin_add_level.php:19
+#: simple-membership/views/admin_edit.php:9
+#: simple-membership/views/admin_edit.php:13
+#: simple-membership/views/admin_edit_level.php:10
+#: simple-membership/views/admin_edit_level.php:14
+#: simple-membership/views/admin_edit_level.php:18
+msgid "(required)"
+msgstr ""
+
+#: simple-membership/views/admin_add.php:15
+#: simple-membership/views/admin_edit.php:13
+msgid "E-mail"
+msgstr ""
+
+#: simple-membership/views/admin_add.php:19
+msgid "(twice, required)"
+msgstr ""
+
+#: simple-membership/views/admin_add.php:24
+#: simple-membership/views/admin_edit.php:21
+msgid "Strength indicator"
+msgstr ""
+
+#: simple-membership/views/admin_add.php:25
+#: simple-membership/views/admin_edit.php:22
+msgid ""
+"Hint: The password should be at least seven characters long. To make it "
+"stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
+"$ % ^ &amp; )."
+msgstr ""
+
+#: simple-membership/views/admin_add.php:29
+#: simple-membership/views/admin_edit.php:26
+#: simple-membership/views/loggedin.php:7
+msgid "Account Status"
+msgstr ""
+
+#: simple-membership/views/admin_add.php:36
+msgid "Add New Member "
+msgstr ""
+
+#: simple-membership/views/admin_addon_settings.php:2
+#: simple-membership/views/admin_payment_settings.php:2
+#: simple-membership/views/admin_settings.php:2
+#: simple-membership/views/admin_tools_settings.php:2
+msgid "Simple WP Membership::Settings"
+msgstr ""
+
+#: simple-membership/views/admin_addon_settings.php:7
+msgid ""
+"Some of the simple membership plugin's addon settings and options will be "
+"displayed here (if you have them)"
+msgstr ""
+
+#: simple-membership/views/admin_add_level.php:6
+msgid "Create new membership level."
+msgstr ""
+
+#: simple-membership/views/admin_add_level.php:11
+#: simple-membership/views/admin_edit_level.php:10
+msgid "Membership Level Name"
+msgstr ""
+
+#: simple-membership/views/admin_add_level.php:15
+#: simple-membership/views/admin_edit_level.php:14
+msgid "Default WordPress Role"
+msgstr ""
+
+#: simple-membership/views/admin_add_level.php:19
+#: simple-membership/views/admin_edit_level.php:18
+msgid "Access Duration"
+msgstr ""
+
+#: simple-membership/views/admin_add_level.php:22
+msgid "No Expiry (Access for this level will not expire until cancelled"
+msgstr ""
+
+#: simple-membership/views/admin_add_level.php:23
+#: simple-membership/views/admin_add_level.php:25
+#: simple-membership/views/admin_add_level.php:27
+#: simple-membership/views/admin_add_level.php:29
+#: simple-membership/views/admin_edit_level.php:22
+#: simple-membership/views/admin_edit_level.php:25
+#: simple-membership/views/admin_edit_level.php:28
+#: simple-membership/views/admin_edit_level.php:31
+msgid "Expire After"
+msgstr ""
+
+#: simple-membership/views/admin_add_level.php:24
+#: simple-membership/views/admin_edit_level.php:23
+msgid "Days (Access expires after given number of days)"
+msgstr ""
+
+#: simple-membership/views/admin_add_level.php:26
+msgid "Weeks (Access expires after given number of weeks"
+msgstr ""
+
+#: simple-membership/views/admin_add_level.php:28
+#: simple-membership/views/admin_edit_level.php:29
+msgid "Months (Access expires after given number of months)"
+msgstr ""
+
+#: simple-membership/views/admin_add_level.php:30
+#: simple-membership/views/admin_edit_level.php:32
+msgid "Years (Access expires after given number of years)"
+msgstr ""
+
+#: simple-membership/views/admin_add_level.php:31
+#: simple-membership/views/admin_edit_level.php:34
+msgid "Fixed Date Expiry"
+msgstr ""
+
+#: simple-membership/views/admin_add_level.php:32
+#: simple-membership/views/admin_edit_level.php:35
+msgid "(Access expires on a fixed date)"
+msgstr ""
+
+#: simple-membership/views/admin_add_level.php:36
+msgid "Access to older posts."
+msgstr ""
+
+#: simple-membership/views/admin_add_level.php:39
+msgid "Only allow access to posts published after the user's join date."
+msgstr ""
+
+#: simple-membership/views/admin_add_level.php:45
+msgid "Add New Membership Level "
+msgstr ""
+
+#: simple-membership/views/admin_add_ons_page.php:6
+msgid "Simple WP Membership::Add-ons"
+msgstr ""
+
+#: simple-membership/views/admin_category_list.php:2
+msgid "Simple WP Membership::Categories"
+msgstr ""
+
+#: simple-membership/views/admin_category_list.php:7
+msgid ""
+"First of all, globally protect the category on your site by selecting "
+"\"General Protection\" from the drop-down box below and then select the "
+"categories that should be protected from non-logged in users."
+msgstr ""
+
+#: simple-membership/views/admin_category_list.php:10
+msgid ""
+"Next, select an existing membership level from the drop-down box below and "
+"then select the categories you want to grant access to (for that particular "
+"membership level)."
+msgstr ""
+
+#: simple-membership/views/admin_edit.php:5
+msgid "Edit Member"
+msgstr ""
+
+#: simple-membership/views/admin_edit.php:6
+msgid "Edit existing member details."
+msgstr ""
+
+#: simple-membership/views/admin_edit.php:9
+#: simple-membership/views/login.php:5
+msgid "Username"
+msgstr ""
+
+#: simple-membership/views/admin_edit.php:17
+msgid "(twice, leave empty to retain old password)"
+msgstr ""
+
+#: simple-membership/views/admin_edit.php:33
+msgid "Notify User"
+msgstr ""
+
+#: simple-membership/views/admin_edit.php:40
+msgid "Edit User "
+msgstr ""
+
+#: simple-membership/views/admin_edit_level.php:5
+msgid "Edit membership level"
+msgstr ""
+
+#: simple-membership/views/admin_edit_level.php:6
+msgid "Edit membership level."
+msgstr ""
+
+#: simple-membership/views/admin_edit_level.php:21
+msgid "No Expiry (Access for this level will not expire until cancelled)"
+msgstr ""
+
+#: simple-membership/views/admin_edit_level.php:26
+msgid "Weeks (Access expires after given number of weeks)"
+msgstr ""
+
+#: simple-membership/views/admin_edit_level.php:40
+msgid "Protect Older Posts (optional)"
+msgstr ""
+
+#: simple-membership/views/admin_edit_level.php:43
+msgid ""
+"Only allow access to protected posts published after the members's join date."
+msgstr ""
+
+#: simple-membership/views/admin_edit_level.php:51
+msgid "Edit Membership Level "
+msgstr ""
+
+#: simple-membership/views/admin_members.php:2
+msgid "Simple WP Membership::Members"
+msgstr ""
+
+#: simple-membership/views/admin_members.php:3
+#: simple-membership/views/admin_members.php:19
+#: simple-membership/views/admin_membership_levels.php:20
+msgid "Add New"
+msgstr ""
+
+#: simple-membership/views/admin_members.php:9
+#: simple-membership/views/admin_membership_levels.php:10
+msgid "search"
+msgstr ""
+
+#: simple-membership/views/admin_membership_levels.php:2
+msgid "Simple WP Membership::Membership Levels"
+msgstr ""
+
+#: simple-membership/views/admin_membership_level_menu.php:2
+msgid "Membership level"
+msgstr ""
+
+#: simple-membership/views/admin_membership_level_menu.php:3
+msgid "Manage Content Production"
+msgstr ""
+
+#: simple-membership/views/admin_membership_level_menu.php:4
+msgid "Category Protection"
+msgstr ""
+
+#: simple-membership/views/admin_membership_manage.php:17
+msgid "Example Content Protection Settings"
+msgstr ""
+
+#: simple-membership/views/admin_member_form_common_part.php:23
+msgid "Gender"
+msgstr ""
+
+#: simple-membership/views/admin_member_form_common_part.php:30
+#: simple-membership/views/edit.php:28
+msgid "Phone"
+msgstr ""
+
+#: simple-membership/views/admin_member_form_common_part.php:34
+#: simple-membership/views/edit.php:32
+msgid "Street"
+msgstr ""
+
+#: simple-membership/views/admin_member_form_common_part.php:38
+#: simple-membership/views/edit.php:36
+msgid "City"
+msgstr ""
+
+#: simple-membership/views/admin_member_form_common_part.php:42
+#: simple-membership/views/edit.php:40
+msgid "State"
+msgstr ""
+
+#: simple-membership/views/admin_member_form_common_part.php:46
+#: simple-membership/views/edit.php:44
+msgid "Zipcode"
+msgstr ""
+
+#: simple-membership/views/admin_member_form_common_part.php:50
+#: simple-membership/views/edit.php:48
+msgid "Country"
+msgstr ""
+
+#: simple-membership/views/admin_member_form_common_part.php:54
+msgid "Company"
+msgstr ""
+
+#: simple-membership/views/admin_member_form_common_part.php:58
+msgid "Member Since"
+msgstr ""
+
+#: simple-membership/views/admin_payment_settings.php:33
+msgid "PayPal Integration Settings"
+msgstr ""
+
+#: simple-membership/views/admin_payment_settings.php:36
+msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
+msgstr ""
+
+#: simple-membership/views/admin_payment_settings.php:39
+msgid "Enter the Membership Level ID"
+msgstr ""
+
+#: simple-membership/views/admin_payment_settings.php:41
+msgid "Generate Code"
+msgstr ""
+
+#: simple-membership/views/admin_tools_settings.php:9
+msgid "Generate a Registration Completion link"
+msgstr ""
+
+#: simple-membership/views/admin_tools_settings.php:12
+msgid ""
+"You can manually generate a registration completion link here and give it to "
+"your customer if they have missed the email that was automatically sent out "
+"to them after the payment."
+msgstr ""
+
+#: simple-membership/views/admin_tools_settings.php:17
+msgid "Generate Registration Completion Link"
+msgstr ""
+
+#: simple-membership/views/admin_tools_settings.php:20
+msgid "OR"
+msgstr ""
+
+#: simple-membership/views/admin_tools_settings.php:21
+msgid "For All Pending Registrations"
+msgstr ""
+
+#: simple-membership/views/admin_tools_settings.php:24
+msgid "Registration Completion Links Will Appear Below:"
+msgstr ""
+
+#: simple-membership/views/admin_tools_settings.php:31
+msgid "Send Registration Reminder Email too"
+msgstr ""
+
+#: simple-membership/views/admin_tools_settings.php:34
+msgid "Submit"
+msgstr ""
+
+#: simple-membership/views/edit.php:58
+msgid "Update"
+msgstr ""
+
+#: simple-membership/views/forgot_password.php:5
+msgid "Email Address"
+msgstr ""
+
+#: simple-membership/views/forgot_password.php:12
+msgid "Reset Password"
+msgstr ""
+
+#: simple-membership/views/loggedin.php:3
+msgid "Logged in as"
+msgstr ""
+
+#: simple-membership/views/loggedin.php:11
+msgid "Membership"
+msgstr ""
+
+#: simple-membership/views/loggedin.php:15
+msgid "Account Expiry"
+msgstr ""
+
+#: simple-membership/views/loggedin.php:19
+msgid "Logout"
+msgstr ""
+
+#: simple-membership/views/login.php:18
+msgid "Remember Me"
+msgstr ""
+
+#: simple-membership/views/login.php:24
+msgid "Forgot Password"
+msgstr ""
diff --git a/log.txt b/log.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/readme.txt b/readme.txt
new file mode 100644 (file)
index 0000000..2a32beb
--- /dev/null
@@ -0,0 +1,342 @@
+=== Simple Membership ===
+Contributors: smp7, wp.insider, amijanina
+Donate link: https://simple-membership-plugin.com/
+Tags: member, members, members only, membership, memberships, register, WordPress membership plugin, content, content protection, paypal, restrict, restrict access, Restrict content, admin, access control, subscription, teaser, protection, profile, login, login page,
+Requires at least: 3.3
+Tested up to: 4.2
+Stable tag: 100.2.3
+License: GPLv2 or later
+License URI: http://www.gnu.org/licenses/gpl-2.0.html
+
+Simple membership plugin adds membership functionality to your site. Protect members only content using content protection easily.
+
+== Description ==
+
+= A flexible, well-supported, and easy-to-use WordPress membership plugin for offering free and premium content from your WordPress site =
+
+**** NOTE ****
+This is a modified version of the plugin. Stable tag has been changed from 2.2.3 to 100.2.3 to block future updates.
+**************
+
+The simple membership plugin lets you protect your posts and pages so only your members can view the protected content.
+
+= Unlimited Membership Access Levels =
+Set up unlimited membership levels (example: free, silver, gold etc) and protect your posts and pages using the membership levels you create.
+
+= User Friendly Interface for Content Protection = 
+When you are editing a post or page in the WordPress editor, you can select to protect that post or page for your members.
+
+Non-members viewing a protected page will be prompted to login or become a member.
+
+= Have Free and Paid Memberships =
+You can configure it to have free and/or paid memberships on your site. Paid membership payment is handled securely via PayPal. 
+
+Both one time and recurring/subscription payments are supported.
+
+= Membership Payments Log = 
+All the payments from your members are recorded in the plugin. You can view them anytime by visiting the payments menu from the admin dashboard.
+
+= Member Login Widget on The Sidebar =
+You can easily add a member login widget on the sidebar of your site. Simply use the login form shortcode in the sidebar widget.
+
+= Documentation =
+
+Read the [setup documentation](https://simple-membership-plugin.com/simple-membership-documentation/) after you install the plugin to get started.
+
+= Plugin Support =
+
+If you have any issue with this plugin, please visit the plugin site and post it on the support forum or send us a contact:
+https://simple-membership-plugin.com/
+
+You can create a free forum user account and ask your questions.
+
+= Miscellaneous =
+
+* Works with any WordPress theme.
+* Ability to protect photo galleries.
+* Show teaser content to convert visitors into members.
+* Comments on your protected posts will also be protected automatically.
+* There is an option to enable debug logging so you can troubleshoot membership payment related issues easily (if any).
+* Ability to customize the content protection message that gets shown to non-members.
+* Membership management side is handled by the plugin.
+* Ability to manually approve your members.
+* Ability to import WordPress users as members.
+* Can be translated to any language.
+* Hide the admin toolbar from the frontend of your site.
+* Allow your members to deleter their membership accounts.
+* Send quick notification email to your members.
+* The login and registration widgets will be responsive if you are using a responsive theme.
+* Front-end member registration page.
+* Front-end member profiles.
+* Front-end member login page.
+
+= Language Translations =
+
+The following language translations are already available:
+
+* English
+* Spanish
+* German
+* French
+* Chinese
+* Portuguese (Brazil)
+* Swedish
+* Macedonian
+* Polish
+* Turkish
+* Russian
+* Dutch (Netherlands)
+* Romanian
+* Danish
+* Lithuanian
+
+You can translate the plugin using the language [translation documentation](https://simple-membership-plugin.com/translate-simple-membership-plugin/).
+
+== Installation ==
+
+Do the following to install the membership plugin:
+
+1. Upload the 'simple-wp-membership.zip' file from the Plugins->Add New page in the WordPress administration panel.
+2. Activate the plugin through the 'Plugins' menu in WordPress.
+
+== Frequently Asked Questions ==
+
+None.
+
+== Screenshots ==
+
+Please visit the memberhsip plugin page to view screenshots:
+https://simple-membership-plugin.com/
+
+== Changelog ==
+
+= 2.2.3 =
+- Updated the category protection interface to use the get_terms() function.
+- Added a new Utility class that has some helpful functions (example: check if a member is logged into the site). 
+
+= 2.2.2 =
+- All the membership payments are now recorded in the payments table.
+- Added a new menu item (Payments) to show all the membership payments and transactions.
+- Added Lithuanian language translation to the plugin. The translation was submitted by Daiva Pakalne.
+- Fixed an invalid argument error.
+
+= 2.2.1 =
+- Added a new table for logging the membership payments/transactions in the future.
+- Made some enhancements in the installer class so it can handle both the WP Multi-site and single site setup via the same function.
+
+= 2.2 =
+- Added a new feature to allow expired members to be able to log into the system (to allow easy account renewal).
+- The email address value of a member is now editable from the admin dashboard and in the profile edit form.
+- Added CSS classes around some of the messages for styling purpose.
+- Some translation updates.
+
+= 2.1.9 =
+- Improved the password reset functionality.
+- Improved the message that gets displayed after the password reset functionality is used.
+- Updated the Portuguese (Brazil) language file.
+- Improved the user login handling code.
+
+= 2.1.8 =
+- Improved the after logout redirection so it uses the home_url() value.
+- Fixed a bug in the member table sorting functionality.
+- The members table can now be sorted using ID column.
+
+
+= 2.1.7 =
+- Added a new feature to automatically delete pending membership accounts that are older than 1 or 2 months.
+- Fixed an issue with the send notification to admin email settings not saving.
+
+= 2.1.6 =
+- Fixed a bug with new membership level creation with a number of days or weeks duration value.
+
+= 2.1.5 =
+- Improved the attachment protection so it doesn't protect when viewing from the admin side also.
+- Removed a dubug dump statement.
+
+= 2.1.4 =
+- Improved the login authentication handler logic.
+- Fixed the restricted image icon URL.
+- Updated the restricted attachment icon to use a better one.
+
+= 2.1.3 =
+- Added a new feature to allow the members to delete their accounts.
+
+= 2.1.2 =
+- Updated the membership subscription payment cancellation handler and made it more robust.
+- Added an option in the settings to reset the debug log files.
+
+= 2.1.1 =
+- Enhanced the username exists function query.
+- Updated one of the notice messages.
+
+= 2.1 =
+- Changed the PHP short tags to the standard tags
+- Updated a message in the settings to make the usage instruction clear.
+- Corrected a version number value.
+
+= 2.0 =
+- Improved some of the default content protection messages.
+- Added Danish language translation to the plugin. The translation was submitted by Niels Boje Lund.
+
+= 1.9.9 =
+- WP Multi-site network activation error fix.
+
+= 1.9.8 =
+- Fixed an issue with the phone number not saving.
+- Fixed an issue with the new fixed membership expiry date feature.
+
+= 1.9.7 =
+- Minor UI fix in the add new membership level menu.
+
+= 1.9.6 =
+- Added a new feature to allow fixed expiry date for membership levels.
+- Added Russian language translation to the plugin. The translation was submitted by Vladimir Vaulin.
+- Added Dutch language translation to the plugin. The translation was submitted by Henk Rostohar.
+- Added Romanian language translation to the plugin. The translation was submitted by Iulian Cazangiu.
+- Some minor code refactoring.
+
+= 1.9.5 =
+- Added a check to show the content of a protected post/page if the admin is previewing the post or page.
+- Fixed an issue with the quick notification email feature not filtering the email shortcodes.
+- Improved the login form's HTML and CSS.
+
+= 1.9.4 =
+- Added a new feature to send an email notification to a member when you edit a user's record. This will be helpful to notify members when you activate their account.
+- Fixed an issue with "pending" member account getting set to active when the record is edited from admin side.
+
+= 1.9.3 =
+- Fixed an issue with the featured image not showing properly for some protected blog posts.
+
+= 1.9.2 =
+- Fixed the edit link in the member search interface.
+
+= 1.9.1 =
+- Added Turkish language translation to the plugin. The translation was submitted by Murat SEYISOGLU.
+- WordPrss 4.1 compatibility.
+
+= 1.9.0 =
+- Fixed a bug in the default account setting option (the option to do manual approval for membership).
+- Added Polish language translation to the plugin. The translation was submitted by Maytki.
+- Added Macedonian language translation to the plugin. The translation was submitted by I. Ivanov.
+
+= 1.8.9 =
+- Added a new feature so you can set the default account status of your members. This can useful if you want to manually approve members after they signup.
+
+= 1.8.8 =
+- Fixed an issue with the account expiry when it is set to 1 year.
+
+= 1.8.7 =
+- Updated the registration form validation code to not accept apostrophe character in the username field.
+- Added a new tab for showing addon settings options (some of the addons will be able to utilize this settings tab).
+- Added a new action hook in the addon settings tab.
+- Moved the plugin's main class initialization code outside of the plugins_loaded hook.
+
+= 1.8.6 =
+- Fixed an email validation issue with paid membership registration process.
+- Added a new free addon to customize the protected content message.
+
+= 1.8.5 =
+- Added category protection feature under the membership level menu.
+- Fixed a bug with paid membership paypal IPN processing code.
+
+= 1.8.4 =
+- The Password field won't use the browser's autofill option in the admin interface when editing a member info.
+
+= 1.8.3 =
+- Added Swedish language translation to the plugin. The translation was submitted by Geson Perry.
+- There is now a cronjob in the plugin to expire the member profiles in the background.
+- Released a new addon - https://simple-membership-plugin.com/simple-membership-registration-form-shortcode-generator/
+- Added a menu called "Add-ons" for listing all the extensions of this plugin.
+
+= 1.8.2 =
+- Updated the members expiry check code at the time of login and made it more robust.
+
+= 1.8.1 =
+- MySQL database character set and collation values are read from the system when creating the tables.
+- Added German language translation file to the plugin.
+- Some code refactoring work.
+- Added a new feature to allow admins to create a registration form for a particular membership level.
+
+= 1.8.0 =
+- Added a new feature called "more tag protection" to enable teaser content. Read the [teaser content documentation](https://simple-membership-plugin.com/creating-teaser-content-membership-site/) for more info.
+- Added Portuguese (Brazil) language translation to the plugin. The translation was submitted by Rachel Oakes.
+- Added cookiehash definition check (in case it is not defined already).
+
+= 1.7.9 =
+- Added Spanish language translation to the plugin. The translation was submitted by David Sanchez.
+- Removed some hardcoded path from the auth class.
+- WordPress 4.0 compatibility
+
+= 1.7.8 =
+- Architecture improvement for the [WP User import addon](https://simple-membership-plugin.com/import-existing-wordpress-users-simple-membership-plugin/)
+- Updated the POT file with the new translation strings
+
+= 1.7.7 =
+- The plugin will now show the member account expiry date in the login widget (when a user is logged into the site).
+- Added a couple of filters to the plugin.
+
+= 1.7.6 =
+- Fixed an issue with hiding the admin-bar. It will never be shown to non-members.
+- Renamed the chinese language file to correct the name.
+- Removed a lot of fields from the front-end registration form (after user feedback). The membership registration form is now a lot simpler with just a few fields.
+- Fixed a bug with the member search option in the admin dashboard.
+- Added a few new action hooks and filters.
+- Fixed a bug with the media attachment protection.
+
+= 1.7.5 = 
+- Fixed an issue with language file loading.
+
+= 1.7.4 =
+- Added capability to use any of the shortcodes (example: Login widget) in the sidebar text widget.
+
+= 1.7.3 =
+- Added french language translation to the plugin. The translation was submitted by Zeb.
+- Fixed a few language textdomain issue.
+- Fixed an issue with the the registration and login page shortcode (On some sites the registration form wasn't visible.)
+- Added simplified Chinese language translation to the plugin. The translation was submitted by Ben.
+
+= 1.7.2 =
+- Added a new hook after the plugin's admin menu is rendered so addons can hook into the main plugin menu.
+- Fixed another PHP 5.2 code compatibility issue.
+- Fixed an issue with the bulk member delete functionality.
+
+= 1.7.1 =
+- Fixed another PHP 5.2 code compatibility issue.
+- Updated the plugin's language file template.
+
+= 1.7 = 
+- Tweaked code to make it compatible with PHP 5.2 (previously PHP 5.3 was the requirement).
+- Added checks for checking if a WP user account already exists with the chosen username (when a member registers).
+- Fixed a few translation strings.
+
+= 1.6 =
+- Added comment protection. Comments on your protected posts will also be protected automatically.
+- Added a new feature to hide the admin toolbar for logged in users of the site.
+- Bug fix: password reset email not sent correctly
+- Bug fix: page rendering issue after the member updates the profile.
+
+= 1.5.1 = 
+- Compatibility with the after login redirection addon:
+http://wordpress.org/plugins/simple-membership-after-login-redirection/
+
+= 1.5 =
+- Fixed a bug with sending member email when added via admin dashboard.
+- Fixed a bug with general settings values resetting.
+- Added a few action hooks to the plugin.
+
+= 1.4 =
+- Refactored some code to enhance the architecture. This will help us add some good features in the future.
+- Added debug logger to help troubleshoot after membership payment tasks.
+- Added a new action hook for after paypal IPN is processed.
+
+= 1.3 =
+- Fixed a bug with premium membership registration.
+
+= 1.2 =
+- First commit to WordPress repository.
+
+== Upgrade Notice ==
+If you are using the form builder adddon, then that addon will need to be upgraded to v1.1 also.
+
+== Arbitrary section ==
+None
diff --git a/simple-wp-membership.php b/simple-wp-membership.php
new file mode 100644 (file)
index 0000000..cbcf86f
--- /dev/null
@@ -0,0 +1,44 @@
+<?php
+/*
+Plugin Name: Simple WordPress Membership
+Version: v100.2.3
+Plugin URI: https://simple-membership-plugin.com/
+Author: smp7, wp.insider
+Author URI: https://simple-membership-plugin.com/
+Description: A flexible, well-supported, and easy-to-use WordPress membership plugin for offering free and premium content from your WordPress site.
+*/
+
+//Direct access to this file is not permitted
+if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"])){
+    exit("Do not access this file directly.");
+}
+
+include_once('classes/class.simple-wp-membership.php');
+include_once('classes/class.bCronJob.php');
+
+define('SIMPLE_WP_MEMBERSHIP_VER', '100.2.3');
+define('SIMPLE_WP_MEMBERSHIP_DB_VER', '1.2');
+define('SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL', home_url());
+define('SIMPLE_WP_MEMBERSHIP_PATH', dirname(__FILE__) . '/');
+define('SIMPLE_WP_MEMBERSHIP_URL', plugins_url('',__FILE__));
+define('SIMPLE_WP_MEMBERSHIP_DIRNAME', dirname(plugin_basename(__FILE__)));
+if (!defined('COOKIEHASH')) {define('COOKIEHASH', md5(get_site_option( 'siteurl' )));}
+define('SIMPLE_WP_MEMBERSHIP_AUTH', 'simple_wp_membership_'. COOKIEHASH);
+define('SIMPLE_WP_MEMBERSHIP_SEC_AUTH', 'simple_wp_membership_sec_'. COOKIEHASH);
+
+register_activation_hook( SIMPLE_WP_MEMBERSHIP_PATH .'simple-wp-membership.php', 'SimpleWpMembership::activate' );
+register_deactivation_hook( SIMPLE_WP_MEMBERSHIP_PATH . 'simple-wp-membership.php', 'SimpleWpMembership::deactivate' );
+add_action('swpm_login','SimpleWpMembership::swpm_login', 10,3);
+
+$simple_membership = new SimpleWpMembership();
+$simple_membership_cron = new BCronJob();
+
+//Add settings link in plugins listing page
+function swpm_add_settings_link($links, $file) {
+    if ($file == plugin_basename(__FILE__)) {
+        $settings_link = '<a href="admin.php?page=simple_wp_membership_settings">Settings</a>';
+        array_unshift($links, $settings_link);
+    }
+    return $links;
+}
+add_filter('plugin_action_links', 'swpm_add_settings_link', 10, 2);
diff --git a/views/account_delete_warning.php b/views/account_delete_warning.php
new file mode 100644 (file)
index 0000000..0b796ec
--- /dev/null
@@ -0,0 +1,16 @@
+
+<header class="entry-header">
+    Delete Account
+</header>
+ <?php if (!empty($msg)) echo '<p>' . $msg . '</p>' ; ?>
+<p  style="color:red;">
+You are about to delete an account.This will delete user data associated with this account. 
+It will also delete associated wordpress account.
+(NOTE: For consistency, we do not allow deleting any associated wordpress account with administrator role).
+Continue?       
+</p>
+<form method="post">
+    <p>Password: <input name="account_delete_confirm_pass" type="password"></p>
+    <p><input type="submit" name="confirm" value="Confirm" /> </p>
+     <?php wp_nonce_field( 'swpm_account_delete_confirm', 'account_delete_confirm_nonce' ); ?>
+</form>
\ No newline at end of file
diff --git a/views/add.php b/views/add.php
new file mode 100644 (file)
index 0000000..8ab60e4
--- /dev/null
@@ -0,0 +1,49 @@
+<div class="swpm-registration-widget-form">
+<form id="swpm-registration-form" name="swpm-registration-form" method="post" action="">
+    <input type ="hidden" name="level_identifier" value="<?php echo  $level_identifier?>" />
+    <table>
+        <tr>
+            <td><label for="user_name"><?php echo  BUtils::_('User Name') ?></label></td>
+            <td><input type="text" id="user_name" class="validate[required,custom[noapostrophe],custom[SWPMUserName],minSize[4],ajax[ajaxUserCall]]" value="<?php echo $user_name;?>" tabindex="1" size="50" name="user_name" /></td>
+        </tr>
+        <tr>
+            <td><label for="email"><?php echo  BUtils::_('Email') ?></label></td>
+            <td><input type="text" id="email" class="validate[required,custom[email],ajax[ajaxEmailCall]]" value="<?php echo $email;?>" tabindex="2" size="50" name="email" /></td>
+        </tr>
+        <tr>
+            <td><label for="password"><?php echo  BUtils::_('Password') ?></label></td>
+            <td><input type="password" autocomplete="off" id="password" value="" tabindex="3" size="50" name="password" /></td>
+        </tr>
+        <tr>
+            <td><label for="password_re"><?php echo  BUtils::_('Repeat Password') ?></label></td>
+            <td><input type="password" autocomplete="off" id="password_re" value="" tabindex="4" size="50" name="password_re" /></td>
+        </tr>
+        <tr>
+            <td><label for="first_name"><?php echo  BUtils::_('First Name') ?></label></td>
+            <td><input type="text" id="first_name" value="<?php echo $first_name;?>" tabindex="5" size="50" name="first_name" /></td>
+        </tr>
+        <tr>
+            <td><label for="last_name"><?php echo  BUtils::_('Last Name') ?></label></td>
+            <td><input type="text" id="last_name" value="<?php echo $last_name;?>" tabindex="6" size="50" name="last_name" /></td>
+        </tr>
+        <tr>
+            <td><label for="membership_level"><?php echo  BUtils::_('Membership Level') ?></label></td>
+            <td>
+            <?php echo $membership_level_alias;?>
+                <input type="hidden" value="<?php echo $membership_level;?>" size="50" name="membership_level" tabindex="7" id="membership_level" />
+            </td>
+        </tr>
+    </table>
+    <p align="center"><input type="submit" value="<?php echo  BUtils::_('Register') ?>" tabindex="8" id="submit" name="swpm_registration_submit" /></p>
+    <input type="hidden" name="action" value="custom_posts" />
+    <?php wp_nonce_field( 'name_of_my_action','name_of_nonce_field' ); ?>
+</form>
+</div>
+<script>
+jQuery(document).ready(function($){
+    $.validationEngineLanguage.allRules['ajaxUserCall']['url']= '<?php echo admin_url('admin-ajax.php');?>';
+    $.validationEngineLanguage.allRules['ajaxEmailCall']['url']= '<?php echo admin_url('admin-ajax.php');?>';
+    $.validationEngineLanguage.allRules['ajaxEmailCall']['extraData'] = '&action=swpm_validate_email&member_id=<?php echo  filter_input(INPUT_GET, 'member_id');?>';
+    $("#swpm-registration-form").validationEngine('attach');
+});
+</script>
diff --git a/views/admin-includes/swpm-payments-list-table.php b/views/admin-includes/swpm-payments-list-table.php
new file mode 100644 (file)
index 0000000..4c704ef
--- /dev/null
@@ -0,0 +1,153 @@
+<?php\r
+\r
+include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'includes/class-swpm-list-table.php');\r
+\r
+class SWPM_Payments_List_Table extends SWPM_List_Table {\r
+\r
+    function __construct() {\r
+        global $status, $page;\r
+\r
+        //Set parent defaults\r
+        parent::__construct(array(\r
+            'singular' => 'transaction', //singular name of the listed records\r
+            'plural' => 'transactions', //plural name of the listed records\r
+            'ajax' => false //does this table support ajax?\r
+        ));\r
+    }\r
+\r
+    function column_default($item, $column_name) {\r
+        //Just print the data for that column\r
+        return $item[$column_name];\r
+    }\r
+\r
+    function column_id($item) {\r
+\r
+        //Build row actions\r
+        $actions = array(\r
+            /* 'edit' => sprintf('<a href="admin.php?page=simple_wp_membership_payments&edit_txn=%s">Edit</a>', $item['id']),//TODO - Will be implemented in a future date */\r
+            'delete' => sprintf('<a href="admin.php?page=simple_wp_membership_payments&action=delete_txn&id=%s" onclick="return confirm(\'Are you sure you want to delete this record?\')">Delete</a>', $item['id']),\r
+        );\r
+\r
+        //Return the refid column contents\r
+        return $item['id'] . $this->row_actions($actions);\r
+    }\r
+\r
+    function column_cb($item) {\r
+        return sprintf(\r
+                '<input type="checkbox" name="%1$s[]" value="%2$s" />',\r
+                /* $1%s */ $this->_args['singular'], //Let's reuse singular label (affiliate)\r
+                /* $2%s */ $item['id'] //The value of the checkbox should be the record's key/id\r
+        );\r
+    }\r
+\r
+    function get_columns() {\r
+        $columns = array(\r
+            'cb' => '<input type="checkbox" />', //Render a checkbox instead of text\r
+            'id' => 'Row ID',\r
+            'email' => 'Email Address',\r
+            'first_name' => 'First Name',\r
+            'last_name' => 'Last Name',\r
+            'txn_date' => 'Date',\r
+            'txn_id' => 'Transaction ID',\r
+            'payment_amount' => 'Amount',\r
+            'membership_level' => 'Membership Level'\r
+        );\r
+        return $columns;\r
+    }\r
+\r
+    function get_sortable_columns() {\r
+        $sortable_columns = array(\r
+            'id' => array('id', false), //true means its already sorted\r
+            'membership_level' => array('membership_level', false),\r
+        );\r
+        return $sortable_columns;\r
+    }\r
+\r
+    function get_bulk_actions() {\r
+        $actions = array(\r
+            'delete' => 'Delete'\r
+        );\r
+        return $actions;\r
+    }\r
+\r
+    function process_bulk_action() {\r
+        //Detect when a bulk action is being triggered... //print_r($_GET);\r
+        if ('delete' === $this->current_action()) {\r
+            $records_to_delete = $_GET['transaction'];\r
+            if (empty($records_to_delete)) {\r
+                echo '<div id="message" class="updated fade"><p>Error! You need to select multiple records to perform a bulk action!</p></div>';\r
+                return;\r
+            }\r
+            foreach ($records_to_delete as $record_id) {\r
+                global $wpdb;\r
+                $payments_table_name = $wpdb->prefix . "swpm_payments_tbl";\r
+                $updatedb = "DELETE FROM $payments_table_name WHERE id='$record_id'";\r
+                $results = $wpdb->query($updatedb);\r
+            }\r
+            echo '<div id="message" class="updated fade"><p>Selected records deleted successfully!</p></div>';\r
+        }\r
+    }\r
+\r
+    function delete_record($record_id) {\r
+        global $wpdb;\r
+        $payments_table_name = $wpdb->prefix . "swpm_payments_tbl";\r
+        $delete_command = "DELETE FROM " . $payments_table_name . " WHERE id = '$record_id'";\r
+        $result = $wpdb->query($delete_command);\r
+    }\r
+\r
+    function prepare_items() {\r
+\r
+        // Lets decide how many records per page to show         \r
+        $per_page = 50;\r
+\r
+        $columns = $this->get_columns();\r
+        $hidden = array();\r
+        $sortable = $this->get_sortable_columns();\r
+\r
+        $this->_column_headers = array($columns, $hidden, $sortable);\r
+\r
+        $this->process_bulk_action();\r
+\r
+        // This checks for sorting input and sorts the data.\r
+        $orderby_column = isset($_GET['orderby']) ? $_GET['orderby'] : '';\r
+        $sort_order = isset($_GET['order']) ? $_GET['order'] : '';\r
+        if (empty($orderby_column)) {\r
+            $orderby_column = "id";\r
+            $sort_order = "DESC";\r
+        }\r
+        global $wpdb;\r
+        $payments_table_name = $wpdb->prefix . "swpm_payments_tbl";\r
+\r
+        //pagination requirement\r
+        $current_page = $this->get_pagenum();\r
+\r
+        if (isset($_POST['swpm_txn_search'])) {//Only load the searched records\r
+            $search_term = trim(strip_tags($_POST['swpm_txn_search']));\r
+            $prepare_query = $wpdb->prepare("SELECT * FROM " . $payments_table_name . " WHERE `email` LIKE '%%%s%%' OR `txn_id` LIKE '%%%s%%' OR `first_name` LIKE '%%%s%%' OR `last_name` LIKE '%%%s%%'", $search_term, $search_term, $search_term, $search_term);\r
+            $data = $wpdb->get_results($prepare_query, ARRAY_A);\r
+            $total_items = count($data);\r
+        } else {//Load all data in an optimized way (so it is only loading data for the current page)\r
+            $query = "SELECT COUNT(*) FROM $payments_table_name";\r
+            $total_items = $wpdb->get_var($query);\r
+\r
+            //pagination requirement\r
+            $query = "SELECT * FROM $payments_table_name ORDER BY $orderby_column $sort_order";\r
+\r
+            $offset = ($current_page - 1) * $per_page;\r
+            $query.=' LIMIT ' . (int) $offset . ',' . (int) $per_page;\r
+\r
+            $data = $wpdb->get_results($query, ARRAY_A);\r
+        }\r
+\r
+        // Now we add our *sorted* data to the items property, where it can be used by the rest of the class.\r
+        $this->items = $data;\r
+\r
+        //pagination requirement\r
+        $this->set_pagination_args(array(\r
+            'total_items' => $total_items, //WE have to calculate the total number of items\r
+            'per_page' => $per_page, //WE have to determine how many items to show on a page\r
+            'total_pages' => ceil($total_items / $per_page)   //WE have to calculate the total number of pages\r
+        ));\r
+    }\r
+\r
+}\r
diff --git a/views/admin_add.php b/views/admin_add.php
new file mode 100644 (file)
index 0000000..c851a2d
--- /dev/null
@@ -0,0 +1,48 @@
+<div class="wrap" id="swpm-profile-page" type="add">
+<?php //screen_icon(); ?>
+<form action="" method="post" name="swpm-create-user" id="swpm-create-user" class="validate"<?php do_action('user_new_form_tag');?>>
+<input name="action" type="hidden" value="createuser" />
+<?php wp_nonce_field( 'create-swpmuser', '_wpnonce_create-swpmuser' ) ?>
+<h3><?php echo  BUtils::_('Add Member') ?></h3>
+<p><?php echo  BUtils::_('Create a brand new user and add it to this site.'); ?></p>
+<table class="form-table">
+    <tbody>
+       <tr class="form-required">
+            <th scope="row"><label for="user_name"><?php echo  BUtils::_('User name'); ?> <span class="description"><?php echo  BUtils::_('(required)'); ?></span></label></th>
+            <td><input class="regular-text validate[required,custom[noapostrophe],custom[SWPMUserName],minSize[4],ajax[ajaxUserCall]]" name="user_name" type="text" id="user_name" value="<?php echo esc_attr(stripslashes($user_name)); ?>" aria-required="true" /></td>
+       </tr>
+       <tr class="form-required">
+            <th scope="row"><label for="email"><?php echo  BUtils::_('E-mail'); ?> <span class="description"><?php echo  BUtils::_('(required)'); ?></span></label></th>
+            <td><input name="email"  class="regular-text validate[required,custom[email],ajax[ajaxEmailCall]]"  type="text" id="email" value="<?php echo esc_attr($email); ?>" /></td>
+       </tr>
+       <tr class="form-required">
+            <th scope="row"><label for="password"><?php echo  BUtils::_('Password'); ?> <span class="description"><?php /* translators: password input field */_e('(twice, required)'); ?></span></label></th>
+            <td><input class="regular-text"  name="password" type="password" id="pass1" autocomplete="off" />
+            <br />
+            <input class="regular-text" name="password_re" type="password" id="pass2" autocomplete="off" />
+            <br />
+            <div id="pass-strength-result"><?php echo  BUtils::_('Strength indicator'); ?></div>
+            <p class="description indicator-hint"><?php echo  BUtils::_('Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! " ? $ % ^ &amp; ).'); ?></p>
+            </td>
+       </tr> 
+       <tr>
+            <th scope="row"><label for="account_state"><?php echo  BUtils::_('Account Status'); ?></label></th>
+            <td><select class="regular-text" name="account_state" id="account_state">
+                    <?php echo  BUtils::account_state_dropdown('active');?>
+                    </select>
+            </td>
+       </tr>        
+<?php include('admin_member_form_common_part.php');?>
+</tbody>
+</table>        
+    <?php include('admin_member_form_common_js.php');?>        
+<?php submit_button( BUtils::_('Add New Member '), 'primary', 'createswpmuser', true, array( 'id' => 'createswpmusersub' ) ); ?>
+</form>
+</div>
+<script>
+jQuery(document).ready(function($){
+       $.validationEngineLanguage.allRules['ajaxUserCall']['url']= '<?php echo admin_url('admin-ajax.php');?>';
+       $.validationEngineLanguage.allRules['ajaxEmailCall']['url']= '<?php echo admin_url('admin-ajax.php');?>';
+       $("#swpm-create-user").validationEngine('attach');
+});
+</script>
diff --git a/views/admin_add_level.php b/views/admin_add_level.php
new file mode 100644 (file)
index 0000000..8be0124
--- /dev/null
@@ -0,0 +1,47 @@
+<div class="wrap" id="swpm-level-page">
+
+<form action="" method="post" name="swpm-create-level" id="swpm-create-level" class="validate"<?php do_action('level_new_form_tag');?>>
+<input name="action" type="hidden" value="createlevel" />
+<h3>Add Membership Level</h3>
+<p><?php echo  BUtils::_('Create new membership level.'); ?></p>
+<?php wp_nonce_field( 'create-swpmlevel', '_wpnonce_create-swpmlevel' ) ?>
+<table class="form-table">
+    <tbody>
+       <tr>
+            <th scope="row"><label for="alias"><?php echo  BUtils::_('Membership Level Name'); ?> <span class="description"><?php echo  BUtils::_('(required)'); ?></span></label></th>
+            <td><input class="regular-text validate[required]" name="alias" type="text" id="alias" value="" aria-required="true" /></td>
+       </tr>
+       <tr class="form-field form-required">
+            <th scope="row"><label for="role"><?php echo  BUtils::_('Default WordPress Role'); ?> <span class="description"><?php echo  BUtils::_('(required)'); ?></span></label></th>
+            <td><select  class="regular-text" name="role"><?php wp_dropdown_roles( 'subscriber' ); ?></select></td>
+       </tr>
+        <tr>
+            <th scope="row"><label for="subscription_period"><?php echo  BUtils::_('Access Duration'); ?> <span class="description"><?php echo  BUtils::_('(required)'); ?></span></label>
+            </th>
+            <td>
+                <p><input type="radio" checked="checked" value="<?php echo  BMembershipLevel::NO_EXPIRY?>" name="subscription_duration_type" /> <?php echo  BUtils::_('No Expiry (Access for this level will not expire until cancelled')?>)</p>                                
+                <p><input type="radio" value="<?php echo  BMembershipLevel::DAYS ?>" name="subscription_duration_type" /> <?php echo  BUtils::_('Expire After')?> 
+                    <input type="text" value="" name="subscription_period_<?php echo  BMembershipLevel::DAYS ?>"> <?php echo  BUtils::_('Days (Access expires after given number of days)')?></p>
+                <p><input type="radio" value="<?php echo  BMembershipLevel::WEEKS?>" name="subscription_duration_type" /> <?php echo  BUtils::_('Expire After')?> 
+                    <input type="text" value="" name="subscription_period_<?php echo  BMembershipLevel::WEEKS ?>"> <?php echo  BUtils::_('Weeks (Access expires after given number of weeks')?></p>
+                <p><input type="radio"  value="<?php echo  BMembershipLevel::MONTHS?>" name="subscription_duration_type" /> <?php echo  BUtils::_('Expire After')?> 
+                    <input type="text" value="" name="subscription_period_<?php echo  BMembershipLevel::MONTHS?>"> <?php echo  BUtils::_('Months (Access expires after given number of months)')?></p>
+                <p><input type="radio"  value="<?php echo  BMembershipLevel::YEARS?>" name="subscription_duration_type" /> <?php echo  BUtils::_('Expire After')?> 
+                    <input type="text" value="" name="subscription_period_<?php echo  BMembershipLevel::YEARS?>"> <?php echo  BUtils::_('Years (Access expires after given number of years)')?></p>                
+                <p><input type="radio" value="<?php echo  BMembershipLevel::FIXED_DATE?>" name="subscription_duration_type" /> <?php echo  BUtils::_('Fixed Date Expiry')?> 
+                    <input type="text" class="swpm-date-picker" value="<?php echo  date('Y-m-d');?>" name="subscription_period_<?php echo  BMembershipLevel::FIXED_DATE?>"> <?php echo  BUtils::_('(Access expires on a fixed date)')?></p>
+            </td>        
+        </tr>
+        <?php echo  apply_filters('swpm_admin_add_membership_level_ui', '');?>
+</tbody>
+</table>
+<?php submit_button( BUtils::_('Add New Membership Level '), 'primary', 'createswpmlevel', true, array( 'id' => 'createswpmlevelsub' ) ); ?>
+</form>
+</div>
+<script>
+jQuery(document).ready(function($){
+    $("#swpm-create-level").validationEngine('attach');
+    $('.swpm-date-picker').dateinput({'format':'yyyy-mm-dd',selectors: true,yearRange:[-100,100]});
+});
+</script>
+
diff --git a/views/admin_add_ons_page.php b/views/admin_add_ons_page.php
new file mode 100644 (file)
index 0000000..68756c9
--- /dev/null
@@ -0,0 +1,95 @@
+<?php\r
+$output = '';\r
+echo '<link type="text/css" rel="stylesheet" href="' . SIMPLE_WP_MEMBERSHIP_URL . '/css/swpm.addons.listing.css" />' . "\n";\r
+?>\r
+\r
+<h1><?php echo  BUtils::_('Simple WP Membership::Add-ons') ?></h1>\r
+<div class="wrap">\r
+\r
+    <?php\r
+    $addons_data = array();\r
+    $addon_1 = array(\r
+        'name' => 'After Login Redirection',\r
+        'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/swpm-login-redirection.png',\r
+        'description' => 'Allows you to configure after login redirection to a specific page based on the member\'s level',\r
+        'page_url' => 'https://simple-membership-plugin.com/configure-login-redirection-members/',\r
+    );\r
+    array_push($addons_data, $addon_1);\r
+\r
+    $addon_2 = array(\r
+        'name' => 'MailChimp Integration',\r
+        'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/mailchimp-integration.png',\r
+        'description' => 'Allows you to signup the member to your MailChimp list after registration',\r
+        'page_url' => 'https://simple-membership-plugin.com/signup-members-mailchimp-list/',\r
+    );\r
+    array_push($addons_data, $addon_2);\r
+    \r
+    $addon_3 = array(\r
+        'name' => 'Form Shortcode',\r
+        'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/form-shortcode-generator.png',\r
+        'description' => 'Simple Membership Addon to generate form shortcode for specific membership level.',\r
+        'page_url' => 'https://simple-membership-plugin.com/simple-membership-registration-form-shortcode-generator/',\r
+    );\r
+    array_push($addons_data, $addon_3);\r
+\r
+    $addon_4 = array(\r
+        'name' => 'WP User Import',\r
+        'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/wp-user-import.png',\r
+        'description' => 'Addon for importing existing Wordpress users to Simple Membership plugin',\r
+        'page_url' => 'https://simple-membership-plugin.com/import-existing-wordpress-users-simple-membership-plugin/',\r
+    );\r
+    array_push($addons_data, $addon_4);\r
+\r
+    $addon_5 = array(\r
+        'name' => 'Form Builder',\r
+        'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/swpm-form-builder.png',\r
+        'description' => 'Allows you to fully customize the fields that appear on the registration and edit profile forms of your membership site',\r
+        'page_url' => 'https://simple-membership-plugin.com/simple-membership-form-builder-addon/',\r
+    );\r
+    array_push($addons_data, $addon_5);\r
+    \r
+    $addon_6 = array(\r
+        'name' => 'Custom Messages',\r
+        'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/swpm-custom-messages.png',\r
+        'description' => 'Custom Messages addon allows you to customize the content protection message that gets output from the membership plugin',\r
+        'page_url' => 'https://simple-membership-plugin.com/simple-membership-custom-messages-addon/',\r
+    );\r
+    array_push($addons_data, $addon_6);\r
+    \r
+    $addon_7 = array(\r
+        'name' => 'Protect Older Posts',\r
+        'thumbnail' => SIMPLE_WP_MEMBERSHIP_URL . '/images/addons/swpm-older-posts-protection.png',\r
+        'description' => 'The protect older posts addon allows you to control protection of posts that were published before a member\'s access start date.',\r
+        'page_url' => 'https://simple-membership-plugin.com/simple-membership-protect-older-posts-addon/',\r
+    );\r
+    array_push($addons_data, $addon_7);\r
+    \r
+    foreach ($addons_data as $addon) {\r
+        $output .= '<div class="swpm_addon_item_canvas">';\r
+\r
+        $output .= '<div class="swpm_addon_item_thumb">';\r
+        $img_src = $addon['thumbnail'];\r
+        $output .= '<img src="' . $img_src . '" alt="' . $addon['name'] . '">';\r
+        $output .= '</div>'; //end thumbnail\r
+\r
+        $output .='<div class="swpm_addon_item_body">';\r
+        $output .='<div class="swpm_addon_item_name">';\r
+        $output .= '<a href="' . $addon['page_url'] . '" target="_blank">' . $addon['name'] . '</a>';\r
+        $output .='</div>'; //end name\r
+\r
+        $output .='<div class="swpm_addon_item_description">';\r
+        $output .= $addon['description'];\r
+        $output .='</div>'; //end description\r
+\r
+        $output .='<div class="swpm_addon_item_details_link">';\r
+        $output .='<a href="'.$addon['page_url'].'" class="swpm_addon_view_details" target="_blank">View Details</a>';\r
+        $output .='</div>'; //end detils link      \r
+        $output .='</div>'; //end body\r
+\r
+        $output .= '</div>'; //end canvas\r
+    }\r
+\r
+    echo $output;\r
+    ?>\r
+\r
+</div><!-- end of .wrap -->
\ No newline at end of file
diff --git a/views/admin_addon_settings.php b/views/admin_addon_settings.php
new file mode 100644 (file)
index 0000000..794534c
--- /dev/null
@@ -0,0 +1,14 @@
+<?php screen_icon( 'options-general' );?>
+<h1><?php echo  BUtils::_('Simple WP Membership::Settings')?></h1>
+<div class="wrap">
+<?php do_action("swpm-draw-tab"); ?>
+    
+    <p>
+        <?php echo  BUtils::_("Some of the simple membership plugin's addon settings and options will be displayed here (if you have them)")?>
+    </p>
+    <form action="" method="POST">
+        <input type="hidden" name="tab" value="<?php echo $current_tab;?>" />
+        <?php do_action('swpm_addon_settings_section');?>
+        <?php submit_button('Save Changes', 'primary', 'swpm-addon-settings'); ?>
+    </form>
+</div><!-- end of wrap -->
\ No newline at end of file
diff --git a/views/admin_category_list.php b/views/admin_category_list.php
new file mode 100644 (file)
index 0000000..55ee07e
--- /dev/null
@@ -0,0 +1,34 @@
+<div class="wrap">
+    <h2><?php screen_icon('users'); ?><?php echo  BUtils::_('Simple WP Membership::Categories') ?></h2>
+    <?php include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/admin_membership_level_menu.php'); ?>
+    
+    <div style="background: none repeat scroll 0 0 #FFF6D5;border: 1px solid #D1B655;color: #3F2502;margin: 10px 0;padding: 5px 5px 5px 10px;text-shadow: 1px 1px #FFFFFF;">
+    <p>
+        <?php echo  BUtils::_('First of all, globally protect the category on your site by selecting "General Protection" from the drop-down box below and then select the categories that should be protected from non-logged in users.'); ?>
+    </p>
+    <p>
+        <?php echo  BUtils::_('Next, select an existing membership level from the drop-down box below and then select the categories you want to grant access to (for that particular membership level).'); ?>
+    </p>
+    </div>
+    <form id="category_list_form" method="post">    
+        <p class="swpm-select-box-left">
+            <label for="membership_level_id">
+                Membership Level:</label>
+            
+            <select id="membership_level_id" name="membership_level_id">
+                <option <?php echo  $category_list->selected_level_id==1? "selected": "" ?> value="1">General Protection</option>
+                <?php echo  BUtils::membership_level_dropdown($category_list->selected_level_id); ?>
+            </select>                
+        </p>
+        <p class="swpm-select-box-left"><input type="submit" class="button-primary" name="update_category_list" value="Update"></p>        
+        <?php $category_list->prepare_items(); ?>   
+        <?php $category_list->display(); ?>
+    </form>
+</div><!-- end of .wrap -->
+<script type="text/javascript">
+    jQuery(document).ready(function($){
+        $('#membership_level_id').change(function(){
+            $('#category_list_form').submit();
+        });
+    });
+</script>
diff --git a/views/admin_edit.php b/views/admin_edit.php
new file mode 100644 (file)
index 0000000..93812f6
--- /dev/null
@@ -0,0 +1,73 @@
+<div class="wrap" id="swpm-profile-page" type="edit">
+    <form action="" method="post" name="swpm-edit-user" id="swpm-edit-user" class="validate"<?php do_action('user_new_form_tag');?>>
+    <input name="action" type="hidden" value="edituser" />
+    <?php wp_nonce_field( 'edit-swpmuser', '_wpnonce_edit-swpmuser' ) ?>
+    <h3><?php echo  BUtils::_('Edit Member') ?></h3>
+    <p><?php echo  BUtils::_('Edit existing member details.'); ?></p>
+    <table class="form-table">
+        <tr class="form-field form-required">
+            <th scope="row"><label for="user_name"><?php echo  BUtils::_('Username'); ?> <span class="description"><?php echo  BUtils::_('(required)'); ?></span></label></th>
+            <td><?php echo esc_attr($user_name); ?></td>
+        </tr>
+        <tr class="form-required">
+            <th scope="row"><label for="email"><?php echo  BUtils::_('E-mail'); ?> <span class="description"><?php echo  BUtils::_('(required)'); ?></span></label></th>
+            <td><input name="email"  class="regular-text validate[required,custom[email],ajax[ajaxEmailCall]]"  type="text" id="email" value="<?php echo esc_attr($email); ?>" /></td>
+        </tr>
+        <tr class="">
+            <th scope="row"><label for="password"><?php echo  BUtils::_('Password'); ?> <span class="description"><?php /* translators: password input field */_e('(twice, leave empty to retain old password)'); ?></span></label></th>
+            <td><input class="regular-text"  name="password" type="password" id="pass1" autocomplete="off" /><br />
+            <input class="regular-text" name="password_re" type="password" id="pass2" autocomplete="off" />
+            <br />
+            <div id="pass-strength-result"><?php echo  BUtils::_('Strength indicator'); ?></div>
+            <p class="description indicator-hint"><?php echo  BUtils::_('Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! " ? $ % ^ &amp; ).'); ?></p>
+            </td>
+       </tr> 
+       <tr>
+            <th scope="row"><label for="account_state"><?php echo  BUtils::_('Account Status'); ?></label></th>
+            <td><select class="regular-text" name="account_state" id="account_state">
+                        <?php echo  BUtils::account_state_dropdown($account_state);?>
+                    </select>
+            </td>
+       </tr>        
+       <tr>
+            <th scope="row"><label for="account_state_change"><?php echo  BUtils::_('Notify User'); ?></label></th>
+            <td><input type="checkbox" id="account_status_change" name="account_status_change" />
+                <p class="description indicator-hint">You can use this option to send a quick notification email to this member (the email will be sent when you hit the save button below).</p>
+            </td>
+       </tr>
+    <?php include('admin_member_form_common_part.php');?>
+        <tr>
+               <th scope="row"><label for="subscr_id"><?php echo  BUtils::_('Subscriber ID/Reference') ?> </label></th>
+               <td><input class="regular-text" name="subscr_id" type="text" id="subscr_id" value="<?php echo esc_attr($subscr_id); ?>" /></td>
+       </tr>        
+
+    </table>
+    
+    <?php include('admin_member_form_common_js.php');?>
+    <?php echo  apply_filters('swpm_admin_custom_fields', '',$membership_level);?>
+    <?php submit_button( BUtils::_('Edit User '), 'primary', 'editswpmuser', true, array( 'id' => 'createswpmusersub' ) ); ?>
+</form>
+</div>
+<script>
+jQuery(document).ready(function($){    
+    $.validationEngineLanguage.allRules['ajaxEmailCall']['url']= '<?php echo admin_url('admin-ajax.php');?>';
+    $.validationEngineLanguage.allRules['ajaxEmailCall']['extraData']= '&action=swpm_validate_email&member_id=<?php echo $member_id;?>';
+    $("#swpm-edit-user").validationEngine('attach');
+    $('#account_status_change').change(function(){
+        var target = $(this).closest('tr');
+        var $body = '<textarea rows="5" cols="60" id="notificationmailbody" name="notificationmailbody">' + SwpmSettings.statusChangeEmailBody + '</textarea>';
+        var $head = '<input type="text" size="60" id="notificationmailhead" name="notificationmailhead" value="' + SwpmSettings.statusChangeEmailHead + '" />';
+        var content = '<tr><th scope="row">Mail Subject</th><td>' + $head + '</td></tr>';
+        content += '<tr><th scope="row">Mail Body</th><td>' + $body + '</td></tr>';
+        if (this.checked) {
+            target.after(content);
+        }
+        else {
+            if (target.next('tr').find('#notificationmailhead').length > 0) {
+                target.next('tr').remove();
+                target.next('tr').remove();
+            }
+        }
+    });
+});
+</script>
diff --git a/views/admin_edit_level.php b/views/admin_edit_level.php
new file mode 100644 (file)
index 0000000..79a9bfb
--- /dev/null
@@ -0,0 +1,49 @@
+<div class="wrap" id="swpm-level-page">
+<form action="" method="post" name="swpm-edit-level" id="swpm-edit-level" class="validate"<?php do_action('level_edit_form_tag');?>>
+<input name="action" type="hidden" value="editlevel" />
+<?php wp_nonce_field( 'edit-swpmlevel', '_wpnonce_edit-swpmlevel' ) ?>
+<h3><?php echo  BUtils::_('Edit membership level'); ?></h3>
+<p><?php echo  BUtils::_('Edit membership level.'); ?></p>
+<table class="form-table">
+    <tbody>
+       <tr>
+               <th scope="row"><label for="alias"><?php echo  BUtils::_('Membership Level Name'); ?> <span class="description"><?php echo  BUtils::_('(required)'); ?></span></label></th>
+               <td><input class="regular-text validate[required]" name="alias" type="text" id="alias" value="<?php echo stripslashes($alias);?>" aria-required="true" /></td>
+       </tr>
+       <tr class="form-field form-required">
+               <th scope="row"><label for="role"><?php echo  BUtils::_('Default WordPress Role'); ?> <span class="description"><?php echo  BUtils::_('(required)'); ?></span></label></th>
+               <td><select  class="regular-text" name="role"><?php wp_dropdown_roles( $role ); ?></select></td>
+       </tr>
+    <tr>
+        <th scope="row"><label for="subscription_period"><?php echo  BUtils::_('Access Duration'); ?> <span class="description"><?php echo  BUtils::_('(required)'); ?></span></label>
+        </th>
+        <td>
+                <p><input type="radio" <?php echo  checked(BMembershipLevel::NO_EXPIRY,$subscription_duration_type,false)?> value="<?php echo  BMembershipLevel::NO_EXPIRY?>" name="subscription_duration_type" /> <?php echo  BUtils::_('No Expiry (Access for this level will not expire until cancelled)')?></p>                                
+                <p><input type="radio" <?php echo  checked(BMembershipLevel::DAYS,$subscription_duration_type,false)?> value="<?php echo  BMembershipLevel::DAYS ?>" name="subscription_duration_type" /> <?php echo  BUtils::_('Expire After')?> 
+                    <input type="text" value="<?php echo  checked(BMembershipLevel::DAYS,$subscription_duration_type,false)? $subscription_period: "";?>" name="subscription_period_<?php echo  BMembershipLevel::DAYS ?>"> <?php echo  BUtils::_('Days (Access expires after given number of days)')?></p>
+                
+                <p><input type="radio" <?php echo  checked(BMembershipLevel::WEEKS,$subscription_duration_type,false)?> value="<?php echo  BMembershipLevel::WEEKS?>" name="subscription_duration_type" /> <?php echo  BUtils::_('Expire After')?> 
+                    <input type="text" value="<?php echo  checked(BMembershipLevel::WEEKS,$subscription_duration_type,false)? $subscription_period: "";?>" name="subscription_period_<?php echo  BMembershipLevel::WEEKS ?>"> <?php echo  BUtils::_('Weeks (Access expires after given number of weeks)')?></p>
+                
+                <p><input type="radio" <?php echo  checked(BMembershipLevel::MONTHS,$subscription_duration_type,false)?> value="<?php echo  BMembershipLevel::MONTHS?>" name="subscription_duration_type" /> <?php echo  BUtils::_('Expire After')?> 
+                    <input type="text" value="<?php echo  checked(BMembershipLevel::MONTHS,$subscription_duration_type,false)? $subscription_period: "";?>" name="subscription_period_<?php echo  BMembershipLevel::MONTHS?>"> <?php echo  BUtils::_('Months (Access expires after given number of months)')?></p>
+                
+                <p><input type="radio" <?php echo  checked(BMembershipLevel::YEARS,$subscription_duration_type,false)?> value="<?php echo  BMembershipLevel::YEARS?>" name="subscription_duration_type" /> <?php echo  BUtils::_('Expire After')?> 
+                    <input type="text" value="<?php echo  checked(BMembershipLevel::YEARS,$subscription_duration_type,false)? $subscription_period: "";?>" name="subscription_period_<?php echo  BMembershipLevel::YEARS?>"> <?php echo  BUtils::_('Years (Access expires after given number of years)')?></p>                
+                
+                <p><input type="radio" <?php echo  checked(BMembershipLevel::FIXED_DATE,$subscription_duration_type,false)?> value="<?php echo  BMembershipLevel::FIXED_DATE?>" name="subscription_duration_type" /> <?php echo  BUtils::_('Fixed Date Expiry')?> 
+                    <input type="text" class="swpm-date-picker" value="<?php echo  checked(BMembershipLevel::FIXED_DATE,$subscription_duration_type,false)? $subscription_period: "";?>" name="subscription_period_<?php echo  BMembershipLevel::FIXED_DATE?>" id="subscription_period_<?php echo  BMembershipLevel::FIXED_DATE?>"> <?php echo  BUtils::_('(Access expires on a fixed date)')?></p>                                
+        </td>        
+    </tr>
+    <?php echo  apply_filters('swpm_admin_edit_membership_level_ui', '', $id);?>
+</tbody>
+</table>
+<?php submit_button(BUtils::_('Edit Membership Level '), 'primary', 'editswpmlevel', true, array( 'id' => 'editswpmlevelsub' ) ); ?>
+</form>
+</div>
+<script>
+jQuery(document).ready(function($){
+    $('.swpm-date-picker').dateinput({'format':'yyyy-mm-dd',selectors: true,yearRange:[-100,100]});
+    $("#swpm-edit-level").validationEngine('attach');
+});
+</script>
diff --git a/views/admin_member_form_common_js.php b/views/admin_member_form_common_js.php
new file mode 100644 (file)
index 0000000..e88878f
--- /dev/null
@@ -0,0 +1,6 @@
+<script>
+jQuery(document).ready(function($){
+       $('#member_since').dateinput({'format':'yyyy-mm-dd',selectors: true,yearRange:[-100,100]});
+       $('#subscription_starts').dateinput({'format':'yyyy-mm-dd',selectors: true,yearRange:[-100,100]});
+});
+</script>
diff --git a/views/admin_member_form_common_part.php b/views/admin_member_form_common_part.php
new file mode 100644 (file)
index 0000000..55626cd
--- /dev/null
@@ -0,0 +1,60 @@
+       <tr>
+               <th scope="row"><label for="membership_level"><?php echo  BUtils::_('Membership Level'); ?></label></th>
+               <td><select class="regular-text" name="membership_level" id="membership_level">
+            <?php foreach ($levels as $level):?>
+            <option <?php echo ($level['id'] == $membership_level)? "selected='selected'": "";?> value="<?php echo $level['id'];?>"> <?php echo $level['alias']?></option>
+            <?php endforeach;?>
+                       </select>
+               </td>
+       </tr>
+       <tr>
+               <th scope="row"><label for="subscription_starts"><?php echo  BUtils::_('Access Starts') ?> </label></th>
+               <td><input class="regular-text" name="subscription_starts" type="text" id="subscription_starts" value="<?php echo esc_attr($subscription_starts); ?>" /></td>
+       </tr>  
+        <tr>
+               <th scope="row"><label for="first_name"><?php echo  BUtils::_('First Name') ?> </label></th>
+               <td><input class="regular-text" name="first_name" type="text" id="first_name" value="<?php echo esc_attr($first_name); ?>" /></td>
+       </tr>
+       <tr>
+               <th scope="row"><label for="last_name"><?php echo  BUtils::_('Last Name') ?> </label></th>
+               <td><input class="regular-text" name="last_name" type="text" id="last_name" value="<?php echo esc_attr($last_name); ?>" /></td>
+       </tr>
+       <tr>
+               <th scope="row"><label for="gender"><?php echo  BUtils::_('Gender'); ?></label></th>
+               <td><select class="regular-text" name="gender" id="gender">
+                               <?php echo  BUtils::gender_dropdown($gender) ?>
+                       </select>
+               </td>
+       </tr>
+       <tr>
+               <th scope="row"><label for="phone"><?php echo  BUtils::_('Phone') ?> </label></th>
+               <td><input class="regular-text" name="phone" type="text" id="phone" value="<?php echo esc_attr($phone); ?>" /></td>
+       </tr>
+       <tr>
+               <th scope="row"><label for="address_street"><?php echo  BUtils::_('Street') ?> </label></th>
+               <td><input class="regular-text" name="address_street" type="text" id="address_street" value="<?php echo esc_attr($address_street); ?>" /></td>
+       </tr>
+       <tr>
+               <th scope="row"><label for="address_city"><?php echo  BUtils::_('City') ?> </label></th>
+               <td><input class="regular-text" name="address_city" type="text" id="address_city" value="<?php echo esc_attr($address_city); ?>" /></td>
+       </tr>
+       <tr>
+               <th scope="row"><label for="address_state"><?php echo  BUtils::_('State') ?> </label></th>
+               <td><input class="regular-text" name="address_state" type="text" id="address_state" value="<?php echo esc_attr($address_state); ?>" /></td>
+       </tr>
+       <tr>
+               <th scope="row"><label for="address_zipcode"><?php echo  BUtils::_('Zipcode') ?> </label></th>
+               <td><input class="regular-text" name="address_zipcode" type="text" id="address_zipcode" value="<?php echo esc_attr($address_zipcode); ?>" /></td>
+       </tr>
+       <tr>
+               <th scope="row"><label for="country"><?php echo  BUtils::_('Country') ?> </label></th>
+               <td><input class="regular-text" name="country" type="text" id="country" value="<?php echo esc_attr($country); ?>" /></td>
+       </tr>
+       <tr>
+               <th scope="row"><label for="company_name"><?php echo  BUtils::_('Company') ?></label></th>
+               <td><input name="company_name" type="text" id="company_name" class="code regular-text" value="<?php echo esc_attr($company_name); ?>" /></td>
+       </tr>      
+       <tr>
+               <th scope="row"><label for="member_since"><?php echo  BUtils::_('Member Since') ?> </label></th>
+               <td><input class="regular-text" name="member_since" type="text" id="member_since" value="<?php echo esc_attr($member_since); ?>" /></td>
+       </tr>
diff --git a/views/admin_members.php b/views/admin_members.php
new file mode 100644 (file)
index 0000000..55f25d2
--- /dev/null
@@ -0,0 +1,21 @@
+<div class="wrap">
+    <h2><?php screen_icon('users'); ?><?php echo  BUtils::_('Simple WP Membership::Members') ?>
+        <a href="admin.php?page=simple_wp_membership&member_action=add" class="add-new-h2"><?php echo  BUtils::_('Add New'); ?></a></h2>
+    <form method="post">
+        <p class="search-box">
+            <label class="screen-reader-text" for="search_id-search-input">
+                search:</label>
+            <input id="search_id-search-input" type="text" name="s" value="" />
+            <input id="search-submit" class="button" type="submit" name="" value="<?php echo  BUtils::_('search')?>" />
+            <input type="hidden" name="page" value="simple_wp_membership" />
+        </p>
+    </form>
+    <?php $this->prepare_items(); ?>
+    <form method="post">
+        <?php $this->display(); ?>
+    </form>
+
+    <p>
+        <a href="admin.php?page=simple_wp_membership&member_action=add" class="button-primary"><?php echo  BUtils::_('Add New')?></a>
+    </p>
+</div><!-- end of wrap -->
diff --git a/views/admin_membership_level_menu.php b/views/admin_membership_level_menu.php
new file mode 100644 (file)
index 0000000..7f1062d
--- /dev/null
@@ -0,0 +1,5 @@
+<h3 class="nav-tab-wrapper">
+    <a class="nav-tab <?php echo ($selected==1) ? 'nav-tab-active' : ''; ?>" href="admin.php?page=simple_wp_membership_levels"><?php echo  BUtils::_('Membership level') ?></a>
+    <a class="nav-tab <?php echo ($selected==2) ? 'nav-tab-active' : ''; ?>" href="admin.php?page=simple_wp_membership_levels&level_action=manage"><?php echo  BUtils::_('Manage Content Production') ?></a>
+    <a class="nav-tab <?php echo ($selected==3) ? 'nav-tab-active' : ''; ?>" href="admin.php?page=simple_wp_membership_levels&level_action=category_list"><?php echo  BUtils::_('Category Protection') ?></a>
+</h3>
\ No newline at end of file
diff --git a/views/admin_membership_levels.php b/views/admin_membership_levels.php
new file mode 100644 (file)
index 0000000..3b14277
--- /dev/null
@@ -0,0 +1,23 @@
+<div class="wrap">
+    <h2><?php screen_icon('users'); ?><?php echo  BUtils::_('Simple WP Membership::Membership Levels') ?>
+        <a href="admin.php?page=simple_wp_membership_levels&level_action=add" class="add-new-h2"><?php echo esc_html_x('Add New', 'Level'); ?></a></h2>
+    <?php include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/admin_membership_level_menu.php'); ?>
+    <form method="post">
+        <p class="search-box">
+            <label class="screen-reader-text" for="search_id-search-input">
+                search:</label>
+            <input id="search_id-search-input" type="text" name="s" value="" />
+            <input id="search-submit" class="button" type="submit" name="" value="<?php echo  BUtils::_('search')?>" />
+            <input type="hidden" name="page" value="simple_wp_membership" />
+        </p>
+    </form>
+    <?php $this->prepare_items(); ?>
+    <form method="post">
+        <?php $this->display(); ?>
+    </form>
+
+    <p>
+        <a href="admin.php?page=simple_wp_membership_levels&level_action=add" class="button-primary"><?php echo  BUtils::_('Add New') ?></a>
+    </p>
+
+</div><!-- end of .wrap -->
diff --git a/views/admin_membership_manage.php b/views/admin_membership_manage.php
new file mode 100644 (file)
index 0000000..82ca51e
--- /dev/null
@@ -0,0 +1,22 @@
+<div class="wrap">
+<h2><?php screen_icon( 'users' );?>Simple WP Membership::Manage Protection</h2>
+    <?php include_once(SIMPLE_WP_MEMBERSHIP_PATH.'views/admin_membership_level_menu.php');?>
+
+<div id="poststuff"><div id="post-body">
+<h1>How to Apply Content Protection</h1>
+
+<p>Take the following steps to apply protection your content so only members can have access to it.</p>
+
+1. Edit the Post or Page that you want to protect in WordPress editor.
+<br />2. Scroll down to the section titled 'Simple WP Membership Protection'.
+<br />3. Select 'Yes, Protect this content' option.
+<br />4. Check the membership levels that should have access to that page's content.
+<br />5. Hit the Update/Save Button to save the changes.
+
+<br /><br />
+<h3><?php echo  BUtils::_('Example Content Protection Settings')?></h3>
+
+<img src="<?php echo SIMPLE_WP_MEMBERSHIP_URL.'/images/simple-membership-content-protection-usage.png'; ?>" alt="Content protection example usage">
+
+</div></div>
+</div> <!-- end of wrap -->
\ No newline at end of file
diff --git a/views/admin_payment_settings.php b/views/admin_payment_settings.php
new file mode 100644 (file)
index 0000000..7d07c6c
--- /dev/null
@@ -0,0 +1,47 @@
+<?php screen_icon( 'options-general' );?>
+<h1><?php echo  BUtils::_('Simple WP Membership::Settings')?></h1>
+<div class="wrap">
+
+<?php do_action("swpm-draw-tab"); ?>
+
+<div id="poststuff"><div id="post-body">
+
+<?php
+global $wpdb;
+
+if(isset($_POST['swpm_generate_adv_code']))
+{
+       $paypal_ipn_url = SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL.'/?swpm_process_ipn=1';
+    $mem_level = trim($_POST['swpm_paypal_adv_member_level']);
+    $query = $wpdb->prepare("SELECT * FROM " . $wpdb->prefix . "swpm_membership_tbl WHERE id !=1 AND id =%d", $mem_level);
+    $membership_level_resultset = $wpdb->get_row($query);
+    if($membership_level_resultset){
+       $pp_av_code = 'notify_url='.$paypal_ipn_url.'<br /> '.'custom=subsc_ref='.$mem_level;
+        echo '<div id="message" class="updated fade"><p>';
+        echo '<strong>Paste the code below in the "Add advanced variables" field of your PayPal button for membership level '.$mem_level.'</strong>';
+               echo '<br /><br /><code>'.$pp_av_code.'</code>';
+        echo '</p></div>';
+    }
+    else{
+        echo '<div id="message" class="updated fade"><p><strong>';
+        BUtils::e( 'Error! The membership level ID ('.$mem_level.') you specified is incorrect. Please check this value again.');
+        echo '</strong></p></div>';
+    }
+}
+?>
+       <div class="postbox">
+       <h3><label for="title"><?php echo  BUtils::_('PayPal Integration Settings')?></label></h3>
+       <div class="inside">
+
+       <p><strong><?php echo  BUtils::_('Generate the "Advanced Variables" Code for your PayPal button')?></strong></p>
+
+        <form action="" method="post">
+        <?php echo  BUtils::_('Enter the Membership Level ID')?>
+        <input type="text" value="" size="4" name="swpm_paypal_adv_member_level">
+        <input type="submit" value="<?php echo  BUtils::_('Generate Code')?>" class="button-primary" name="swpm_generate_adv_code">
+        </form>
+
+       </div></div>
+
+</div></div><!-- end of poststuff and post-body -->
+</div><!-- end of wrap -->
diff --git a/views/admin_payments_page.php b/views/admin_payments_page.php
new file mode 100644 (file)
index 0000000..2c96b8a
--- /dev/null
@@ -0,0 +1,55 @@
+<?php\r
+$output = '';\r
+?>\r
+\r
+<h1><?php echo BUtils::_('Simple Membership::Payments') ?></h1>\r
+<div class="wrap">\r
+    <div id="poststuff"><div id="post-body">\r
+\r
+            <div style="background: #DDDDDD;border: 1px solid #CCCCCC;color: #383838;margin: 10px 0;padding: 5px 5px 5px 10px;text-shadow: 1px 1px #FFFFFF;">\r
+                <p>\r
+                    <?php echo BUtils::_('All the payments/transactions of your members are recorded here.'); ?>  \r
+                </p>\r
+            </div>\r
+            \r
+            <div class="postbox">\r
+                <h3><label for="title">Search Transaction</label></h3>\r
+                <div class="inside">\r
+                    <?php echo BUtils::_('Search for a transaction by using email or name'); ?>\r
+                    <br /><br />\r
+                    <form method="post" action="<?php echo $_SERVER["REQUEST_URI"]; ?>">\r
+                        <input name="swpm_txn_search" type="text" size="40" value="<?php echo isset($_POST['swpm_txn_search'])? $_POST['swpm_txn_search']: ''; ?>"/>\r
+                        <input type="submit" name="swpm_txn_search_btn" class="button" value="<?php echo BUtils::_('Search'); ?>" />\r
+                    </form>\r
+                </div></div>\r
+\r
+            <?php\r
+            include_once('admin-includes/swpm-payments-list-table.php');\r
+            //Create an instance of our package class...\r
+            $payments_list_table = new SWPM_Payments_List_Table();\r
+            \r
+            //Check if an action was performed\r
+            if (isset($_REQUEST['action'])) { //Do list table form row action tasks\r
+                if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'delete_txn') { //Delete link was clicked for a row in list table\r
+                    $record_id = strip_tags($_REQUEST['id']);\r
+                    $payments_list_table->delete_record($record_id);\r
+                    $success_msg = '<div id="message" class="updated"><p><strong>';\r
+                    $success_msg .= BUtils::_('The selected entry was deleted!');\r
+                    $success_msg .= '</strong></p></div>';\r
+                    echo $success_msg;\r
+                }\r
+            }\r
+            \r
+            //Fetch, prepare, sort, and filter our data...\r
+            $payments_list_table->prepare_items();\r
+            \r
+            ?>\r
+            <form id="tables-filter" method="get" onSubmit="return confirm('Are you sure you want to perform this bulk operation on the selected entries?');">\r
+                <!-- For plugins, we also need to ensure that the form posts back to our current page -->\r
+                <input type="hidden" name="page" value="<?php echo $_REQUEST['page']; ?>" />\r
+                <!-- Now we can render the completed list table -->\r
+                <?php $payments_list_table->display(); ?>\r
+            </form>\r
+            \r
+        </div></div><!-- end of poststuff and post-body -->        \r
+</div><!-- end of .wrap -->
\ No newline at end of file
diff --git a/views/admin_settings.php b/views/admin_settings.php
new file mode 100644 (file)
index 0000000..971c78f
--- /dev/null
@@ -0,0 +1,11 @@
+<?php screen_icon( 'options-general' );?>
+<h1><?php echo  BUtils::_('Simple WP Membership::Settings') ?></h1>
+ <div class="wrap">
+        <?php do_action("swpm-draw-tab"); ?>
+        <form action="options.php" method="POST">
+            <input type="hidden" name="tab" value="<?php echo $current_tab;?>" />
+            <?php settings_fields( 'swpm-settings-tab-' . $current_tab ); ?>
+            <?php do_settings_sections( 'simple_wp_membership_settings' ); ?>
+            <?php submit_button(); ?>
+        </form>
+    </div>
diff --git a/views/admin_tools_settings.php b/views/admin_tools_settings.php
new file mode 100644 (file)
index 0000000..a0ba947
--- /dev/null
@@ -0,0 +1,42 @@
+<?php screen_icon( 'options-general' );?>
+<h1><?php echo  BUtils::_('Simple WP Membership::Settings')?></h1>
+<div class="wrap">
+
+<?php do_action("swpm-draw-tab"); ?>
+
+<div id="poststuff"><div id="post-body">
+       <div class="postbox">
+       <h3><label for="title"><?php echo  BUtils::_('Generate a Registration Completion link')?></label></h3>
+       <div class="inside">
+
+       <p><strong><?php echo  BUtils::_('You can manually generate a registration completion link here and give it to your customer if they have missed the email that was automatically sent out to them after the payment.')?></strong></p>
+
+        <form action="" method="post">
+            <table>
+                <tr>
+                    <?php echo  BUtils::_('Generate Registration Completion Link')?>
+                    <br /><input type="radio" value="one" name="swpm_link_for" />For a Particular Member ID
+                    <input type="text" name="member_id" size="5" value="" />
+                    <br /> <strong> <?php echo  BUtils::_('OR')?> </strong>
+                    <br /><input type="radio" checked="checked" value="all" name="swpm_link_for" /> <?php echo  BUtils::_('For All Pending Registrations')?>
+                </tr>
+                <tr>
+                    <td><?php echo  BUtils::_('Registration Completion Links Will Appear Below:')?><br/>
+                    <?php foreach ($links as $key=>$link):?>
+                        <input type="text" size="100" readonly="readonly" name="link[<?php echo  $key?>]" value="<?php echo  $link;?>"/><br/>
+                    <?php endforeach;?>
+                    </td>
+                </tr>
+                <tr>
+                    <td><?php echo  BUtils::_('Send Registration Reminder Email too')?> <input type="checkbox" value="checked" name="swpm_reminder_email"></td>
+                </tr>
+                <tr>
+                    <td><input type="submit" name="submit" class="button-primary" value="<?php echo  BUtils::_('Submit')?>" /></td>
+                </tr>
+            </table>
+        </form>
+
+       </div></div>
+
+</div></div><!-- end of poststuff and post-body -->
+</div><!-- end of wrap -->
diff --git a/views/edit.php b/views/edit.php
new file mode 100644 (file)
index 0000000..e955dac
--- /dev/null
@@ -0,0 +1,71 @@
+<form id="swpm-editprofile-form" name="swpm-editprofile-form" method="post" action="">
+    <table>
+        <tr>
+            <td><label for="user_name"><?php echo  BUtils::_('User Name') ?></label></td>
+            <td><?php echo  $user_name ?></td>
+        </tr>
+        <tr>
+            <td><label for="email"><?php echo  BUtils::_('Email')?></label></td>
+            <td><input type="text" id="email" class="validate[required,custom[email],ajax[ajaxEmailCall]]" value="<?php echo $email;?>" tabindex="2" size="50" name="email" /></td>
+        </tr>
+        <tr>
+            <td><label for="password"><?php echo  BUtils::_('Password')?></label></td>
+            <td><input type="text" id="password" value="" tabindex="1" size="50" name="password" /></td>
+        </tr>
+        <tr>
+            <td><label for="password_re"><?php echo  BUtils::_('Repeat Password')?></label></td>
+            <td><input type="text" id="password_re" value="" tabindex="2" size="50" name="password_re" /></td>
+        </tr>
+        <tr>
+            <td><label for="first_name"><?php echo  BUtils::_('First Name')?></label></td>
+            <td><input type="text" id="first_name" value="<?php echo  $first_name; ?>" tabindex="3" size="50" name="first_name" /></td>
+        </tr>
+        <tr>
+            <td><label for="last_name"><?php echo  BUtils::_('Last Name')?></label></td>
+            <td><input type="text" id="last_name" value="<?php echo  $last_name; ?>" tabindex="4" size="50" name="last_name" /></td>
+        </tr>
+        <tr>
+            <td><label for="phone"><?php echo  BUtils::_('Phone')?></label></td>
+            <td><input type="text" id="phone" value="<?php echo  $phone; ?>" tabindex="5" size="50" name="phone" /></td>
+        </tr>
+        <tr>
+            <td><label for="address_street"><?php echo  BUtils::_('Street')?></label></td>
+            <td><input type="text" id="address_street" value="<?php echo  $address_street; ?>" tabindex="6" size="50" name="address_street" /></td>
+        </tr>
+        <tr>
+            <td><label for="address_city"><?php echo  BUtils::_('City')?></label></td>
+            <td><input type="text" id="address_city" value="<?php echo  $address_city; ?>" tabindex="7" size="50" name="address_city" /></td>
+        </tr>
+        <tr>
+            <td><label for="address_state"><?php echo  BUtils::_('State')?></label></td>
+            <td><input type="text" id="address_state" value="<?php echo  $address_state; ?>" tabindex="8" size="50" name="address_state" /></td>
+        </tr>
+        <tr>
+            <td><label for="address_zipcode"><?php echo  BUtils::_('Zipcode')?></label></td>
+            <td><input type="text" id="address_zipcode" value="<?php echo  $address_zipcode; ?>" tabindex="9" size="50" name="address_zipcode" /></td>
+        </tr>
+        <tr>
+            <td><label for="country"><?php echo  BUtils::_('Country') ?></label></td>
+            <td><input type="text" id="country" value="<?php echo  $country; ?>" tabindex="10" size="50" name="country" /></td>
+        </tr>
+        <tr>
+            <td><label for="membership_level"><?php echo  BUtils::_('Membership Level')?></label></td>
+            <td>
+                <?php echo  $membership_level_alias; ?>
+            </td>
+        </tr>
+    </table>
+    <p align="center"><input type="submit" value="<?php echo  BUtils::_('Update')?>" tabindex="11" id="submit" name="swpm_editprofile_submit" />       
+    </p>
+    <?php echo Butils::delete_account_button(); ?>
+    
+    <input type="hidden" name="action" value="custom_posts" />
+    <?php wp_nonce_field('name_of_my_action', 'name_of_nonce_field'); ?>
+</form>
+<script>
+jQuery(document).ready(function($){
+    $.validationEngineLanguage.allRules['ajaxEmailCall']['url']= '<?php echo admin_url('admin-ajax.php');?>';
+    $.validationEngineLanguage.allRules['ajaxEmailCall']['extraData'] = '&action=swpm_validate_email&member_id=<?php echo BAuth::get_instance()->get('member_id'); ?>';
+    $("#swpm-editprofile-form").validationEngine('attach');
+});
+</script>
\ No newline at end of file
diff --git a/views/forgot_password.php b/views/forgot_password.php
new file mode 100644 (file)
index 0000000..05b6ed4
--- /dev/null
@@ -0,0 +1,17 @@
+<div class="swpm-password-reset-widget-form">
+<form id="swpm-reset-form" name="swpm-reset-form" method="post" action="">
+    <table width="95%" border="0" cellpadding="3" cellspacing="5" class="forms">
+           <tr>
+               <td colspan="2"><label for="swpm_reset_email" class="swpm_label"><?php echo  BUtils::_('Email Address')?></label></td>
+           </tr>
+           <tr>
+               <td colspan="2"><input type="text" class="swpm_text_field" id="swpm_reset_email"  value="" size="40" name="swpm_reset_email" /></td>
+           </tr>
+           <tr>
+               <td colspan="2">
+               <input type="submit" name="swpm-reset" value="<?php echo  BUtils::_('Reset Password')?>"/>
+               </td>
+           </tr>
+    </table>
+</form>
+</div>
diff --git a/views/index.html b/views/index.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/views/join_us.php b/views/join_us.php
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/views/loggedin.php b/views/loggedin.php
new file mode 100644 (file)
index 0000000..6fdf6b1
--- /dev/null
@@ -0,0 +1,21 @@
+<div class="swpm-login-widget-logged">
+    <div class="swpm-logged-username">
+        <div class="swpm-logged-username-label swpm-logged-label"><?php echo  BUtils::_('Logged in as') ?></div>
+        <div class="swpm-logged-username-value swpm-logged-value"><?php echo $auth->get('user_name'); ?></div>
+    </div>
+    <div class="swpm-logged-status">
+        <div class="swpm-logged-status-label swpm-logged-label"><?php echo  BUtils::_('Account Status') ?></div>
+        <div class="swpm-logged-status-value swpm-logged-value"><?php echo ucfirst($auth->get('account_state')); ?></div>
+    </div>
+    <div class="swpm-logged-membership">
+        <div class="swpm-logged-membership-label swpm-logged-label"><?php echo  BUtils::_('Membership') ?></div>
+        <div class="swpm-logged-membership-value swpm-logged-value"><?php echo $auth->get('alias'); ?></div>
+    </div>
+    <div class="swpm-logged-expiry">
+        <div class="swpm-logged-expiry-label swpm-logged-label"><?php echo  BUtils::_('Account Expiry') ?></div>
+        <div class="swpm-logged-expiry-value swpm-logged-value"><?php echo $auth->get_expire_date(); ?></div>
+    </div>
+    <div class="swpm-logged-logout-link">
+        <a href="?swpm-logout=true"><?php echo  BUtils::_('Logout') ?></a>
+    </div>
+</div>
\ No newline at end of file
diff --git a/views/login.php b/views/login.php
new file mode 100644 (file)
index 0000000..f7a8638
--- /dev/null
@@ -0,0 +1,34 @@
+<div class="swpm-login-widget-form">
+    <form id="swpm-login-form" name="swpm-login-form" method="post" action="">
+        <div class="swpm-login-form-inner">
+            <div class="swpm-username-label">
+                <label for="swpm_user_name" class="swpm-label"><?php echo  BUtils::_('Username') ?></label>
+            </div>
+            <div class="swpm-username-input">
+                <input type="text" class="swpm-text-field swpm-username-field" id="swpm_user_name" value="" size="30" name="swpm_user_name" />
+            </div>
+            <div class="swpm-password-label">
+                <label for="swpm_password" class="swpm-label"><?php echo  BUtils::_('Password') ?></label>
+            </div>
+            <div class="swpm-password-input">
+                <input type="password" class="swpm-text-field swpm-password-field" id="swpm_password" value="" size="30" name="swpm_password" />
+            </div>
+            <div class="swpm-remember-me">
+                <span class="swpm-remember-checkbox"><input type="checkbox" name="rememberme" value="checked='checked'"></span>
+                <span class="swpm-rember-label"> <?php echo  BUtils::_('Remember Me') ?></span>
+            </div>
+            <div class="swpm-login-submit">
+                <input type="submit" name="swpm-login" value="<?php echo  BUtils::_('Login') ?>"/>
+            </div>
+            <div class="swpm-forgot-pass-link">
+                <a id="forgot_pass" href="<?php echo  $password_reset_url; ?>"><?php echo  BUtils::_('Forgot Password') ?>?</a>
+            </div>
+            <div class="swpm-join-us-link">
+                <a id="register" class="register_link" href="<?php echo  $join_url; ?>"><?php echo  BUtils::_('Join Us') ?></a>
+            </div>
+            <div class="swpm-login-action-msg">
+                <span class="swpm-login-widget-action-msg"><?php echo  $auth->get_message(); ?></span>
+            </div>
+        </div>
+    </form>
+</div>
diff --git a/views/login_widget.php b/views/login_widget.php
new file mode 100644 (file)
index 0000000..c64cf72
--- /dev/null
@@ -0,0 +1,16 @@
+<?php include('login.php');?>
+<!--<form id="swpm-login-form" name="swpm-login-form" method="post" action=""> 
+       <p>
+               <label for="swpm_user_name">User Name</label>
+               <input type="text" id="swpm_user_name"  value="" size="30" name="swpm_user_name" />
+       </p>
+       <p>
+               <label for="swpm_password">Password</label>
+               <input type="password" id="swpm_password" value="" size="30" name="swpm_password" />
+       </p>
+       <p>
+               <input type="submit" name="swpm-login" value="Login"/>
+               <input type="checkbox" name="rememberme" value="checked='checked'">Remember Me
+               <span><?php echo $auth->get_message();?></span>
+       </p>
+</form>-->
diff --git a/views/login_widget_logged.php b/views/login_widget_logged.php
new file mode 100644 (file)
index 0000000..2b21776
--- /dev/null
@@ -0,0 +1,18 @@
+
+<ul class="xoxo">
+       <li id="text-1" class="widget widget_text"><h3 class="widgettitle"><?= BUtils::_('Logged in as')?></h3>
+               <div class="textwidget"><b><?php echo $auth->get('user_name');?><b></div>
+       </li>
+       <li id="text-2" class="widget widget_text"><h3 class="widgettitle"><?= BUtils::_('Account Status')?></h3>
+               <div class="textwidget"><b><?php echo ucfirst($auth->get('account_state'));?></b></div>
+       </li>
+       <li id="text-2" class="widget widget_text"><h3 class="widgettitle"><?= BUtils::_('Membership')?></h3>
+               <div class="textwidget"><b><?php echo $auth->get('alias');?></b></div>
+       </li>
+       <li id="text-2" class="widget widget_text"><h3 class="widgettitle"><?= BUtils::_('Account Expiry')?></h3>
+               <div class="textwidget"><b><?php echo $auth->get_expire_date();?></b></div>
+       </li>
+       <li id="text-2" class="widget widget_text">
+               <a href="?swpm-logout=true"><?= BUtils::_('Logout')?></a>
+       </li>
+</ul>
\ No newline at end of file