/**
     * Renders the page 
     * 
     * @sinve 1.0.0
     * @return void
     */
    public function indexAction()
    {
        global $bizpanda;
        $current = isset($_GET['opanda_screen']) ? $_GET['opanda_screen'] : null;
        $screens = array();
        $subscriptionOptions = array('title' => __('Subscription Options', 'bizpanda'), 'class' => 'OPanda_SubscriptionSettings', 'path' => OPANDA_BIZPANDA_DIR . '/admin/settings/class.subscription.php');
        $socialOptions = array();
        if (BizPanda::hasFeature('social') || BizPanda::hasPlugin('sociallocker')) {
            $socialOptions = array('title' => __('Social Options', 'bizpanda'), 'class' => 'OPanda_SocialSettings', 'path' => OPANDA_BIZPANDA_DIR . '/admin/settings/class.social.php');
        }
        // for the plugin Opt-In Panda, the subscription options should be the first
        if (BizPanda::isSinglePlugin() && BizPanda::hasPlugin('optinpanda')) {
            if (empty($current)) {
                $current = 'subscription';
            }
            $screens['subscription'] = $subscriptionOptions;
            if (!empty($socialOptions)) {
                $screens['social'] = $socialOptions;
            }
        } else {
            if (empty($current)) {
                $current = 'social';
            }
            if (!empty($socialOptions)) {
                $screens['social'] = $socialOptions;
            }
            if (BizPanda::hasFeature('subscription')) {
                $screens['subscription'] = $subscriptionOptions;
            }
        }
        if (BizPanda::hasFeature('lockers')) {
            $screens['lock'] = array('title' => __('Lock Options', 'bizpanda'), 'class' => 'OPanda_AdvancedSettings', 'path' => OPANDA_BIZPANDA_DIR . '/admin/settings/class.lock.php');
        }
        $screens['stats'] = array('title' => __('Stats Options', 'bizpanda'), 'class' => 'OPanda_StatsSettings', 'path' => OPANDA_BIZPANDA_DIR . '/admin/settings/class.stats.php');
        $screens['text'] = array('title' => __('Front-end Text', 'bizpanda'), 'class' => 'OPanda_TextSettings', 'path' => OPANDA_BIZPANDA_DIR . '/admin/settings/class.text.php');
        if (BizPanda::hasFeature('terms')) {
            $screens['terms'] = array('title' => __('Terms & Policies', 'bizpanda'), 'class' => 'OPanda_TermsSettings', 'path' => OPANDA_BIZPANDA_DIR . '/admin/settings/class.terms.php');
        }
        $screens = apply_filters('opanda_settings_screens', $screens);
        if (!isset($screens[$current])) {
            $current = 'social';
        }
        require_once OPANDA_BIZPANDA_DIR . '/admin/settings/class.settings.php';
        require_once $screens[$current]['path'];
        $screen = new $screens[$current]['class']($this);
        $action = isset($_GET['opanda_action']) ? $_GET['opanda_action'] : null;
        if (!empty($action)) {
            $methodName = $action . 'Action';
            $screen->{$methodName}();
            return;
        }
        // getting options
        $options = $screen->getOptions();
        $options = apply_filters("opanda_{$current}_settings", $options);
        // creating a form
        $form = new FactoryForms328_Form(array('scope' => 'opanda', 'name' => 'setting'), $bizpanda);
        $form->setProvider(new FactoryForms328_OptionsValueProvider(array('scope' => 'opanda')));
        $form->add($options);
        if (isset($_POST['save-action'])) {
            do_action("opanda_{$current}_settings_saving");
            $form->save();
            do_action("opanda_{$current}_settings_saved");
            $redirectArgs = apply_filters("opanda_{$current}_settings_redirect_args", array('opanda_saved' => 1, 'opanda_screen' => $current));
            return $this->redirectToAction('index', $redirectArgs);
        }
        $formAction = add_query_arg(array('post_type' => OPANDA_POST_TYPE, 'page' => 'settings-' . $bizpanda->pluginName, 'opanda_screen' => $current), admin_url('edit.php'));
        ?>
        <div class="wrap ">
            
            <h2 class="nav-tab-wrapper">
                <?php 
        foreach ($screens as $screenName => $screenData) {
            ?>
<a href="<?php 
            $this->actionUrl('index', array('opanda_screen' => $screenName));
            ?>
" class="nav-tab <?php 
            if ($screenName === $current) {
                echo 'nav-tab-active';
            }
            ?>
">
                    <?php 
            echo $screenData['title'];
            ?>
                </a><?php 
        }
        ?>
            </h2>
            
            <?php 
        $screen->header();
        ?>
            
            <div class="factory-bootstrap-329 opanda-screen-<?php 
        echo $current;
        ?>
">
            <form method="post" class="form-horizontal" action="<?php 
        echo $formAction;
        ?>
">

                <?php 
        if (isset($_GET['opanda_saved']) && empty($screen->error)) {
            ?>
                <div id="message" class="alert alert-success">
                    <p><?php 
            _e('The settings have been updated successfully!', 'bizpanda');
            ?>
</p>
                </div>
                <?php 
        }
        ?>
                
                <?php 
        if (!empty($screen->success)) {
            ?>
                <div id="message" class="alert alert-success">
                    <p><?php 
            echo $screen->success;
            ?>
</p>
                </div>
                <?php 
        }
        ?>
                
                <?php 
        if (!empty($screen->error)) {
            ?>
                <div id="message" class="alert alert-danger">
                    <p><?php 
            echo $screen->error;
            ?>
</p>
                </div>
                <?php 
        }
        ?>
                
                <?php 
        do_action('onp_sl_settings_options_notices');
        ?>

                <div style="padding-top: 10px;">
                <?php 
        $form->html();
        ?>
                </div>
                
                <div class="form-group form-horizontal">
                    <label class="col-sm-2 control-label"> </label>
                    <div class="control-group controls col-sm-10">
                        <input name="save-action" class="btn btn-primary" type="submit" value="<?php 
        _e('Save Changes', 'bizpanda');
        ?>
"/>
                    </div>
                </div>
            
            </form>
            </div>  
                
        </div>
        <?php 
    }
Example #2
0
    public function exportAction()
    {
        global $bizpanda;
        $error = null;
        $warning = null;
        // getting a list of lockers
        $lockerIds = array();
        global $wpdb;
        $data = $wpdb->get_results("SELECT l.lead_item_id AS locker_id, COUNT(l.ID) AS count, p.post_title AS locker_title " . "FROM {$wpdb->prefix}opanda_leads AS l " . "LEFT JOIN {$wpdb->prefix}posts AS p ON p.ID = l.lead_item_id " . "GROUP BY l.lead_item_id", ARRAY_A);
        $lockerList = array(array('all', __('Mark All', 'bizpanda')));
        foreach ($data as $items) {
            $lockerList[] = array($items['locker_id'], $items['locker_title'] . ' (' . $items['count'] . ')');
            $lockerIds[] = $items['locker_id'];
        }
        // default values
        $status = 'all';
        $fields = array('lead_email', 'lead_name', 'lead_family');
        $delimiter = ',';
        // custom fields
        $customFields = OPanda_Leads::getCustomFields();
        $selectedCustomFields = array();
        $customFieldsForList = array();
        foreach ($customFields as $customField) {
            $customFieldsForList[] = array($customField->field_name, $customField->field_name);
        }
        // exporting
        if (isset($_POST['opanda_export'])) {
            // - delimiter
            $delimiter = isset($_POST['opanda_delimiter']) ? $_POST['opanda_delimiter'] : ',';
            if (!in_array($status, array(',', ';'))) {
                $status = ',';
            }
            // - channels
            $lockers = isset($_POST['opanda_lockers']) ? $_POST['opanda_lockers'] : array();
            $lockerIds = array();
            foreach ($lockers as $lockerId) {
                if ('all' == $lockerId) {
                    continue;
                }
                $lockerIds[] = intval($lockerId);
            }
            // - status
            $status = isset($_POST['opanda_status']) ? $_POST['opanda_status'] : 'all';
            if (!in_array($status, array('all', 'confirmed', 'not-confirmed'))) {
                $status = 'all';
            }
            // - fields
            $rawFields = isset($_POST['opanda_fields']) ? $_POST['opanda_fields'] : array();
            $fields = array();
            foreach ($rawFields as $field) {
                if (!in_array($field, array('lead_email', 'lead_display_name', 'lead_name', 'lead_family', 'lead_ip'))) {
                    continue;
                }
                $fields[] = $field;
            }
            // - custom fields
            $rawCustomFields = isset($_POST['opanda_custom_fields']) ? $_POST['opanda_custom_fields'] : array();
            $selectedCustomFields = array();
            foreach ($rawCustomFields as $customField) {
                $selectedCustomFields[] = $customField;
            }
            if (empty($lockers) || empty($fields)) {
                $error = __('Please make sure that you selected at least one channel and field.', 'bizpanda');
            } else {
                $sql = 'SELECT leads.ID,';
                $sqlFields = array();
                foreach ($fields as $field) {
                    $sqlFields[] = 'leads.' . $field;
                }
                $sql .= implode(',', $sqlFields);
                if (!empty($selectedCustomFields)) {
                    $sql .= ',fields.field_name,fields.field_value';
                }
                $sql .= ' FROM ' . $wpdb->prefix . 'opanda_leads AS leads ';
                if (!empty($selectedCustomFields)) {
                    $sql .= 'LEFT JOIN ' . $wpdb->prefix . 'opanda_leads_fields AS fields ON fields.lead_id = leads.ID ';
                }
                $sql .= 'WHERE leads.lead_item_id IN (' . implode(',', $lockerIds) . ')';
                if ('all' != $status) {
                    $sql .= ' AND leads.lead_email_confirmed = ' . ('confirmed' == $status ? '1' : '0');
                }
                $result = $wpdb->get_results($sql, ARRAY_A);
                $leads = array();
                foreach ($result as $item) {
                    $id = $item['ID'];
                    if (!isset($leads[$id])) {
                        $leads[$id] = array();
                        foreach ($fields as $field) {
                            $leads[$id][$field] = $item[$field];
                        }
                        foreach ($selectedCustomFields as $field) {
                            $leads[$id][$field] = null;
                        }
                    }
                    if (!empty($item['field_name']) && in_array($item['field_name'], $selectedCustomFields)) {
                        $leads[$id][$item['field_name']] = $item['field_value'];
                    }
                }
                if (empty($leads)) {
                    $warning = __('No leads found. Please try to change the settings of exporting.', 'bizpanda');
                } else {
                    $filename = 'leads-' . date('Y-m-d-H-i-s') . '.csv';
                    header("Content-Type: text/csv");
                    header("Content-Disposition: attachment; filename=" . $filename);
                    header("Cache-Control: no-cache, no-store, must-revalidate");
                    header("Pragma: no-cache");
                    header("Expires: 0");
                    $output = fopen("php://output", "w");
                    foreach ($leads as $row) {
                        fputcsv($output, $row, $delimiter);
                    }
                    fclose($output);
                    exit;
                }
            }
        }
        // creating a form
        $form = new FactoryForms328_Form(array('scope' => 'opanda', 'name' => 'exporting'), $bizpanda);
        $form->setProvider(new FactoryForms328_OptionsValueProvider(array('scope' => 'opanda')));
        $options = array(array('type' => 'separator'), array('type' => 'radio', 'name' => 'format', 'title' => __('Format', 'bizpanda'), 'hint' => __('Only the CSV format is available currently.'), 'data' => array(array('csv', __('CSV File', 'bizpanda'))), 'default' => 'csv'), array('type' => 'radio', 'name' => 'delimiter', 'title' => __('Delimiter', 'bizpanda'), 'hint' => __('Choose a delimiter for a CSV document.'), 'data' => array(array(',', __('Comma', 'bizpanda')), array(';', __('Semicolon', 'bizpanda'))), 'default' => $delimiter), array('type' => 'separator'), array('type' => 'list', 'way' => 'checklist', 'name' => 'lockers', 'title' => __('Channels', 'bizpanda'), 'hint' => __('Mark lockers which attracted leads you wish to export.'), 'data' => $lockerList, 'default' => implode(',', $lockerIds)), array('type' => 'radio', 'name' => 'status', 'title' => __('Email Status', 'bizpanda'), 'hint' => __('Choose the email status of leads to export.'), 'data' => array(array('all', __('All', 'bizpanda')), array('confirmed', __('Only Confirmed Emails', 'bizpanda')), array('not-confirmed', __('Only Not Confirmed', 'bizpanda'))), 'default' => $status), array('type' => 'separator'), array('type' => 'list', 'way' => 'checklist', 'name' => 'fields', 'title' => __('Fields To Export', 'bizpanda'), 'data' => array(array('lead_email', __('Email', 'bizpanda')), array('lead_display_name', __('Display Name', 'bizpanda')), array('lead_name', __('Firstname', 'bizpanda')), array('lead_family', __('Lastname', 'bizpanda')), array('lead_ip', __('IP', 'bizpanda'))), 'default' => implode(',', $fields)));
        if (!empty($customFieldsForList)) {
            $options[] = array('type' => 'list', 'way' => 'checklist', 'name' => 'custom_fields', 'title' => __('Custom Fields', 'bizpanda'), 'data' => $customFieldsForList, 'default' => implode(',', $selectedCustomFields));
        }
        $options[] = array('type' => 'separator');
        $form->add($options);
        ?>
            <div class="wrap" id="opanda-export-page">

                <h2>
                    <?php 
        _e('Exporting Leads', 'bizpanda');
        ?>
                </h2>

                <p style="margin-top: 0px;"> <?php 
        _e('Select leads you would like to export and click the button "Export Leads".', 'bizpanda');
        ?>
</p>

                <div class="factory-bootstrap-329 factory-fontawesome-320">

                    <?php 
        if ($error) {
            ?>
                    <div class="alert alert-danger"><?php 
            echo $error;
            ?>
</div>
                    <?php 
        }
        ?>

                    <?php 
        if ($warning) {
            ?>
                    <div class="alert alert-normal"><?php 
            echo $warning;
            ?>
</div>
                    <?php 
        }
        ?>
 

                    <form method="post" class="form-horizontal">
                        <?php 
        $form->html();
        ?>

                        <div class="form-group form-horizontal">
                            <label class="col-sm-2 control-label"> </label>
                            <div class="control-group controls col-sm-10">
                                <input name="opanda_export" class="btn btn-primary" type="submit" value="<?php 
        _e('Export Leads', 'bizpanda');
        ?>
"/>
                            </div>
                        </div>
                    </form> 
                </div>
            </div>
            <?php 
    }