monster_menus-9.0.x-dev/src/GetTreeIterator/CSVDumpIter.php

src/GetTreeIterator/CSVDumpIter.php
<?php
namespace Drupal\monster_menus\GetTreeIterator;

use Drupal\Core\Database\Database;
use Drupal\Core\Database\Connection;
use Drupal\monster_menus\Constants;
use Drupal\monster_menus\GetTreeIterator;

class CSVDumpIter extends GetTreeIterator {

  /**
   * Database Service Object.
   *
   * @var Connection
   */
  protected $database;

  protected $fp;

  /**
   * Constructs a CSVDumpIter object.
   */
  public function __construct() {
    $this->fp = fopen('php://output', 'w');
    fputcsv($this->fp, [
      'visname', 'mmtid', 'level', 'name', 'alias', 'ctime', 'mtime', 'default_mode', 'owner', 'theme',
      'alw_theme', 'alw_type', 'hidden', 'groups_w', 'users_w', 'groups_a',
      'users_a', 'groups_u', 'users_u', 'groups_r', 'users_r', 'flags', 'block']);
    $this->database = Database::getConnection();
  }

  /**
   * {@inheritdoc}
   */
  public function iterate($item) {
    $visname = str_repeat('>', $item->level) . ' ' . $item->name;

    $allowed_themes = [];
    $allowed_node_types = [];
    $result = $this->database->select('mm_cascaded_settings', 's')
      ->fields('s')
      ->condition('mmtid', $item->mmtid)
      ->condition('data_type', ['allowed_themes', 'allowed_node_types'], 'IN')
      ->execute();
    foreach ($result as $r) {
      if ($r->data_type == 'allowed_themes') {
        $allowed_themes[] = $r->data;
      }
      elseif ($r->data_type == 'allowed_node_types') {
        $allowed_node_types[] = $r->data;
      }
    }

    $groups = $users = [
      Constants::MM_PERMS_READ  => [],
      Constants::MM_PERMS_WRITE => [],
      Constants::MM_PERMS_SUB   => [],
      Constants::MM_PERMS_APPLY => [],
    ];
    $select = $this->database->select('mm_tree', 't');
    $select->join('mm_tree_access', 'a', 'a.mmtid=t.mmtid');
    $select->leftJoin('mm_tree', 't2', 'a.gid=t2.mmtid');
    $select->addExpression('MAX(t2.mmtid)', 'mmtid');
    $select->addExpression('MAX(t2.name)', 'name');
    $select->addExpression('MAX(a.mode)', 'mode');
    $result = $select->condition('t2.mmtid', '0', '>=')
      ->condition('a.mmtid', $item->mmtid)
      ->orderBy('t2.name')
      ->execute();
    foreach ($result as $r) {
      $groups[$r->mode][$r->mmtid] = $r->name;
    }

    $select = $this->database->select('mm_tree', 't');
    $select->join('mm_tree_access', 'a', 'a.mmtid=t.mmtid');
    $select->leftJoin('mm_tree_revision', 'r', 'r.mmtid=t.mmtid');
    $select->addExpression('MAX(r.mtime)', 'mtime');
    $select->addExpression('MAX(a.mode)', 'mode');
    $select->addExpression('MAX(a.gid)', 'gid');
    $result = $select->condition('a.gid', '0', '<')
      ->condition('a.mmtid', $item->mmtid)
      ->groupBy('t.mmtid')
      ->execute();
    $mtime = NULL;
    foreach ($result as $r) {
      $u = mm_content_get_users_in_group($r->gid, NULL, TRUE, 5);
      if (!is_null($u)) $users[$r->mode] = $u;
      $mtime = $r->mtime;
    }
    $owner = [$item->uid => mm_content_uid2name($item->uid, 'lfmu')];
    $ctime = !empty($item->ctime) ? date('Y-m-d H:i:s', $item->ctime) : '';
    $mtime = !empty($mtime) ? date('Y-m-d H:i:s', $mtime) : '';

    fputcsv($this->fp, [
        $visname, $item->mmtid, $item->level, $item->name,
        $item->alias, $ctime, $mtime, $item->default_mode, $this->dump($owner), $item->theme,
        join(', ', $allowed_themes), join(', ', $allowed_node_types), $item->hidden,
        $this->dump($groups[Constants::MM_PERMS_WRITE]), $this->dump($users[Constants::MM_PERMS_WRITE]),
        $this->dump($groups[Constants::MM_PERMS_SUB]), $this->dump($users[Constants::MM_PERMS_SUB]),
        $this->dump($groups[Constants::MM_PERMS_APPLY]), $this->dump($users[Constants::MM_PERMS_APPLY]),
        $this->dump($groups[Constants::MM_PERMS_READ]), $this->dump($users[Constants::MM_PERMS_READ]
      ),
      join(',', array_keys($item->flags)), $item->bid]
    );

    return 1;
  }

  protected function dump($arr) {
    $out = [];
    foreach ($arr as $id => $name) {
      $out[] = $id ? "$name [$id]" : $name;
    }
    return join(', ', $out);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc