aboutsummaryrefslogtreecommitdiff
path: root/lib/sfIsisImporterLog.class.php
blob: 2dcd4a3a4ae937d0c4409aaeec750896938d715d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?php

/**
 * Logger.
 *
 * @todo $this->caller, $this->section
 */
class sfIsisImporterLog
{
  /**
   * @var object $instance The singleton instance.
   */
  private static $instance = null;

  /**
   * @var object $instance Default loglevel.
   */
  public static $loglevel;

  /**
   * @var int $processed Number of processed entries.
   */
  var $processed = 0;

  /**
   * Get the singleton instance.
   *
   * @param string $loglevel Log level to use
   */
  public static function getInstance($loglevel = 'info')
  {
    if(self::$instance == null) {
      self::$instance = new self($loglevel);
    }

    return self::$instance;
  }

  /**
   * Constructor.
   */
  private function __construct($loglevel = 'info')
  {
    $this->level($loglevel);
  }

  /**
   * Set the log level.
   *
   * @param string $loglevel Log level to use
   */
  public function level($loglevel)
  {
    $this->loglevel = $loglevel;
  }

  /**
   * Get the available log levels ordered by verbosity.
   *
   * @return array Log levels
   */
  public function levels()
  {
    return array_flip(array('notice', 'fatal', 'info', 'warn', 'error', 'debug'));
  }

  /**
   * Log dispatcher.
   *
   * @param string $message Log message
   * @param string $level   Log level
   */
  public function log($message, $level = 'info')
  {
    // Get the available log levels.
    $levels = $this->levels();

    // Log level checking.
    if (array_search($level, $levels) === FALSE)
    {
      $this->log("Invalid log level $level.", 'error');
      return;
    }
    elseif ($levels[$level] > $levels[$this->loglevel])
    {
      return;
    }

    // Dispatch.
    if ($this->section == 'action')
    {
      $this->caller->logMessage($message, $level);
    }
    else
    {
      $this->caller->logSection('isisImporter', "[$level] $message");
    }
  }

  /**
   * Progress notifier.
   *
   * @param int $entry   Entry number
   * @param int $entries Total number of entries
   */
  public function progress($entry, $entries)
  {
    $this->processed = $entry;
    $levels          = $this->levels();

    if ($this->section == 'action')
    {
      $this->caller->output .= "Saved item $entry\n";
    }
    else
    {
      // Progress bar is just shown if loglevel is 'fatal' or lower.
      if ($levels['fatal'] >= $levels[$this->loglevel])
      {
        $this->caller->progressBar($entry, $entries);
      }
    }

    return $this->processed;
  }
}