1 (edited by aa 2018.04.24 15:48)

Topic: Export Users CSV: выгрузка email адресов пользователей

Export Users CSV - Расширение для выгрузки пользователей форума (Имя, Email, Количество сообщений, Дата регистрации) в таблицу .csv для последующей рассылки писем через сторонние почтовые сервисы.

В настройках можно указывать разделитель.

https://punbb.info/uploads/images/2018/04/7839e203dda9910cdcf415f20a023dff.png

Скачать

2

Re: Export Users CSV: выгрузка email адресов пользователей

Нет такого  PunBB_INFO_ICQ/pardon 

Напишите расширение - будет!  PunBB_INFO_ICQ/wink

3

Re: Export Users CSV: выгрузка email адресов пользователей

aa, могу помочь с созданием расширения, если вы немного разбираетесь в php.
Скажите, какие данные еще кроме e-mail нужны для экспорта?

Если вам долго не отвечают, пишите автору темы в личку или на Email.

4

Re: Export Users CSV: выгрузка email адресов пользователей

PunBB wrote:

Скажите, какие данные еще кроме e-mail нужны для экспорта?

Давайте username, количество постов, и дата регистрации

PunBB_INFO_ICQ/thumbsup

5

Re: Export Users CSV: выгрузка email адресов пользователей

Итак, поехали. Создайте каркас расширения, придумайте ID расширения, название, описание, автор и версию.

Вот информация в помощь https://punbb.info/t-541.html

Далее, будем кидать код в само расширение.

Добавлено: 2018.04.23 09:19

Можете выкладывать либо архивом прямо в теме или же сам код
Вы сами увидите на сколько просто создаются расширения в PunBB  PunBB_INFO_ICQ/ok

Если вам долго не отвечают, пишите автору темы в личку или на Email.

6 (edited by aa 2018.04.23 20:51)

Re: Export Users CSV: выгрузка email адресов пользователей

<?xml version="1.0" encoding="utf-8"?>
<extension engine="1.0">
   <id>pun_export_data</id>
   <title>Export Users Data</title>
   <version>0.1</version>
   <description>Export users from the database to .csv file</description>
   <author>PunBB.info</author>
   <minversion>1.4</minversion>
   <maxtestedon>1.4.4</maxtestedon>

   <hooks>
      Здесь будет код
   </hooks>
</extension>

7 (edited by sempai 2018.04.23 17:23)

Re: Export Users CSV: выгрузка email адресов пользователей

aa, приставку pun_ , принято использовать в оффициальных расширениях!  PunBB_INFO_ICQ/no

8

Re: Export Users CSV: выгрузка email адресов пользователей

sempai, ты ее вообще не используешь  PunBB_INFO_ICQ/bigsmile
Пусть пока будет так. Там подкорректируем. PunBB_INFO_ICQ/thumbsup

Если вам долго не отвечают, пишите автору темы в личку или на Email.

9

Re: Export Users CSV: выгрузка email адресов пользователей

Да, но бдю!  PunBB_INFO_ICQ/jokingly

10

Re: Export Users CSV: выгрузка email адресов пользователей

Ok.  Вначале нам нужно будет создать страницу настроек в админке на которой мы в будущем с помощью предустановленных параметров будем экспортировать данные.

PunBB2 → Администрирование → Управление - СТРАНИЦА РАСШИРЕН

Наброски скину позже.

Стоит добавить, что тот каркас, который мы создадим с пользователем аа, в будущем можно будет использовать для создания своих расширений, когда необходима в админке своя страница настроек.

Если вам долго не отвечают, пишите автору темы в личку или на Email.

11

Re: Export Users CSV: выгрузка email адресов пользователей

PunBB wrote:

нам нужно будет создать страницу настроек в админке

ок. жду инструкций

12 (edited by PunBB 2018.04.24 06:14)

Re: Export Users CSV: выгрузка email адресов пользователей

Почти готово! Соберите эти три файла в расширение

manifest.xml

Spoiler
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE extension SYSTEM "ext-1.0.dtd">

<extension engine="1.0">
   <id>aa_export_data</id>
   <title>Export Users Data</title>
   <version>0.1</version>
   <description>Export users from the database to .csv file</description>
   <author>aa</author>
   <minversion>1.4</minversion>
   <maxtestedon>1.4.5</maxtestedon>

   <hooks>
      
      <hook id="co_modify_url_scheme"><![CDATA[
$forum_url[$ext_info['id']] = 'admin/settings.php?section='.$ext_info['id'];
      ]]></hook>
      
      <hook id="aop_new_section"><![CDATA[
if ($section == $ext_info['id'])
   require $ext_info['path'].'/hooks/aop_new_section.php';
      ]]></hook>
      
      <hook id="ca_fn_generate_admin_menu_new_sublink"><![CDATA[
require $ext_info['path'].'/hooks/ca_fn_generate_admin_menu_new_sublink.php';
      ]]></hook>
   </hooks>
</extension>

/hooks/ca_fn_generate_admin_menu_new_sublink.php

Spoiler
<?php

if (!defined('FORUM')) die();

if ($forum_user['g_id'] == FORUM_ADMIN && FORUM_PAGE_SECTION == 'management')
{
   $forum_page['admin_submenu'][$ext_info['id']] = '<li class="'.((FORUM_PAGE == 'admin-'.$ext_info['id']) ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url[$ext_info['id']]).'">'.$ext_info['id'].'</a></li>';
}

/hooks/aop_new_section.php

Spoiler
<?php

if (!defined('FORUM')) die();

if (isset($_POST[$ext_info['id']]))
{
   @set_time_limit(0);
   $users_info = $output = array();
   $sep = isset($_POST['separator']) ? forum_trim($_POST['separator']) : ',';
   $file_name = 'file_'.time().'.csv';
   
   $query = array(
      'SELECT'   =>   'id, username, email, num_posts, registered',
      'FROM'      =>   'users',
      'WHERE'      =>   'id>2'
   );
   $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
   while ($rows = $forum_db->fetch_assoc($result)) {
      $users_info[$rows['id']] = $rows['username'].$sep.$rows['email'].$sep.$rows['num_posts'].$sep.format_time($rows['registered'], 1);
   }
   
   foreach ($users_info as $id => $val) {
      $output .= $val."\n";
   }
   
   if (is_writable($ext_info['path']))
   {
      $fh = @fopen($ext_info['path'].'/'.$file_name, 'wb');
      if ($fh)
      {
         fwrite($fh, $output);
         fclose($fh);
      }
   }
   

/*   echo '<pre>';
   print_r($users_info);
   echo '</pre>';*/
   
  if (file_exists($ext_info['path'].'/'.$file_name)) {
    // сбрасываем буфер вывода PHP, чтобы избежать переполнения памяти выделенной под скрипт
    // если этого не сделать файл будет читаться в память полностью!
    if (ob_get_level()) {
      ob_end_clean();
    }
    // заставляем браузер показать окно сохранения файла
    header('Content-Description: File Transfer');
    header("Content-type: text/csv");
    header('Content-Disposition: attachment; filename=' . basename($ext_info['path'].'/'.$file_name));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header("Pragma: no-cache");
    header('Content-Length: ' . filesize($ext_info['path'].'/'.$file_name));
    // читаем файл и отправляем его пользователю
    readfile($ext_info['path'].'/'.$file_name);
 
    unlink($ext_info['path'].'/'.$file_name);
    exit;
  }
   
//   redirect(forum_link($forum_url[$ext_info['id']]), '');
}

$forum_page = array();
$forum_page['group_count'] = $forum_page['item_count'] = $forum_page['fld_count'] = 0;

define('FORUM_PAGE_SECTION', 'management');
define('FORUM_PAGE', 'admin-'.$ext_info['id']);
require FORUM_ROOT.'header.php';

// START SUBST - <!-- forum_main -->
ob_start();

?>
   <div class="main-content main-frm">
      
      <form class="frm-form" method="post" accept-charset="utf-8" action="<?php echo forum_link($forum_url[$ext_info['id']]) ?>">
         <div class="hidden">
            <input type="hidden" name="csrf_token" value="<?php echo generate_form_token(forum_link($forum_url[$ext_info['id']])) ?>" />
         </div>
         
         <div class="main-subhead">
            <h2 class="hn"><span>Настойки расширения <?php echo $ext_info['id'] ?></span></h2>
         </div>
         
         <div class="ct-box warn-box">
            <p class="warn"><strong>Внимание!</strong> Это страница различных настроек данного расширения. Создайте тебуемыее поля для сохранения настроек.</p>
         </div>
         
         <div class="sf-set set13">
            <div class="sf-box text">
               <label for="fld"><span>Разделитель</span><small>В оснлвном CSV файлы используют знак ',' но могут использовать и другие разделители, установите требуемый</small></label><br>
               <span class="fld-input"><input type="text" name="separator" size="6" maxlength="6" value=","></span>
            </div>
         </div>
         
         <div class="frm-buttons">
            <span class="submit primary"><input type="submit" name="<?php echo $ext_info['id'] ?>" value="Соханить" /></span>
         </div>
      </form>
      
   </div>
Если вам долго не отвечают, пишите автору темы в личку или на Email.

13 (edited by aa 2018.04.24 11:06)

Re: Export Users CSV: выгрузка email адресов пользователей

Собрал (на английском языке).  PunBB_INFO_ICQ/dance

Низкий поклон Вам PunBB и Вашему форуму. PunBB_INFO_ICQ/yes

exportuserscsv.zip  3.6 Kb  (5)

Так выглядит расширение из админки:

https://punbb.info/uploads/images/2018/04/c5803bcc0c2b4bf645b243a3201cd673.png

Добавлено: 2018.04.24 11:56

Вопрос следующий:

Как правильно изменить название расширения для отображения в админке? Хотел поставить название Export Users CSV , пробовал в коде .$ext_info['id'] изменять на .$ext_info['title'], но расширение ломается PunBB_INFO_ICQ/help

https://punbb.info/uploads/images/2018/04/c0cdf361278edfecd1c03f6563400963.png

Добавлено: 2018.04.24 12:04

И нашел момент следующий:

Первый username в таблице .csv содержит лишнюю приставку Array

https://punbb.info/uploads/images/2018/04/a1e9a64fe2b9c7be92ca831ed23c4fcd.png

14 (edited by PunBB 2018.04.24 11:13)

Re: Export Users CSV: выгрузка email адресов пользователей

aa wrote:

пробовал в коде .$ext_info['id'] изменять на .$ext_info['title'], но расширение ломается

$ext_info['title'] такого параметра нет. Просто в файле ca_fn_generate_admin_menu_new_sublink.php замените на слово
    $forum_page['admin_submenu'][$ext_info['id']] = '<li class="'.((FORUM_PAGE == 'admin-'.$ext_info['id']) ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url[$ext_info['id']]).'">Мое расширение</a></li>';

Добавлено: 2018.04.24 12:12

aa wrote:

Первый username в таблице .csv содержит лишнюю приставку Array

в другом хуке поменяйте строчку

$users_info = $output = array();

на

$users_info = array();
$output = '';
Если вам долго не отвечают, пишите автору темы в личку или на Email.

15 (edited by aa 2018.04.24 11:32)

Re: Export Users CSV: выгрузка email адресов пользователей

Готовое идеальное расширение версия 0.2:

exportuserscsv.zip  3.6 Kb  (5)

Скриншот:

https://punbb.info/uploads/images/2018/04/2302e9e6c2a9697ae541acd04eaf6f97.png

16

Re: Export Users CSV: выгрузка email адресов пользователей

Перенес тему  PunBB_INFO_ICQ/ok
Добро пожаловать в команду разработчиков.  PunBB_INFO_ICQ/hi

Если вам долго не отвечают, пишите автору темы в личку или на Email.

17

Re: Export Users CSV: выгрузка email адресов пользователей

PunBB wrote:

Добро пожаловать в команду разработчиков.

PunBB_INFO_ICQ/crasy

18

Re: Export Users CSV: выгрузка email адресов пользователей

У вас имеется также доступ к нашему репозиторию. Можете загружать расширение в одном месте и своевременно обновлять их.
Это лучше чем когда в постах загружены тестовые архивы.

Также у вас есть право редактирования своих постов, можете отредактировать первый пост и описать подробно что делает это расширение. Думаю многим еще пригодится  PunBB_INFO_ICQ/thumbsup

Если вам долго не отвечают, пишите автору темы в личку или на Email.

19

Re: Export Users CSV: выгрузка email адресов пользователей

PunBB wrote:

также доступ к нашему репозиторию

как туда зайти?

20

Re: Export Users CSV: выгрузка email адресов пользователей

Вверху страницы ссылка: Downloads.

Затем на странице списка расширений прокрутить страницу вниз и нажать на кнопку: Добавить расширение

Выбрать архив в формате .Zip
Ссылка на тему расширения.
Если не тестировалось на SQLite3, то ничего не трогаем, добавляем расширение.

После добавления копируем ссылку на загрузку и вставляем в тему расширения, или еще куда нибудь, где потребуется.

При появлении обновления, просто отредактируйте загрузку, приложив новый архив в формате .Zip, система сама заполнит все поля.

Если вам долго не отвечают, пишите автору темы в личку или на Email.