private function getForm($post_id = null) { // creating a value provider $this->provider = new FactoryForms328_MetaValueProvider(array('scope' => $this->scope)); $this->provider->init($post_id); // creating a form $form = new FactoryForms328_Form(array('scope' => $this->scope, 'name' => $this->id), $this->plugin); $form->setProvider($this->provider); $this->form($form); return $form; }
/** * 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 }
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 }