ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilWikiUserHTMLExport.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2014 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
13 {
14  const PROCESS_OTHER_USER = 0; // another user has started a running export
15  const PROCESS_STARTED = 1; // export has been started by current user
16  const PROCESS_UPTODATE = 2; // no export necessary, current export is up-to-date
17 
18 
19  const NOT_RUNNING = 0;
20  const RUNNING = 1;
21 
22  protected $data;
23 
27  protected $db;
28 
32  protected $wiki;
33 
37  protected $user;
38 
42  protected $log;
43 
50  function __construct(ilObjWiki $a_wiki, ilDB $a_db, ilObjUser $a_user)
51  {
52  $this->db = $a_db;
53  $this->wiki = $a_wiki;
54  $this->user = $a_user;
55  $this->read();
56  $this->log = ilLoggerFactory::getLogger('wiki');
57  }
58 
65  protected function read()
66  {
67  $set = $this->db->query("SELECT * FROM wiki_user_html_export ".
68  " WHERE wiki_id = ".$this->db->quote($this->wiki->getId(), "integer")
69  );
70  if (!$this->data = $this->db->fetchAssoc($set))
71  {
72  $this->data = array();
73  }
74  }
75 
82  protected function getProcess()
83  {
84  $this->log->debug("getProcess");
85  $last_change = ilPageObject::getLastChangeByParent("wpg", $this->wiki->getId());
86 
87  $this->db->lockTables(
88  array(
89  0 => array('name' => 'wiki_user_html_export', 'type' => ilDB::LOCK_WRITE)));
90  $this->read();
91  $ts = ilUtil::now();
92 
93  if ($this->data["start_ts"] != "" &&
94  $this->data["start_ts"] > $last_change)
95  {
96 
97  $this->db->unlockTables();
98  return self::PROCESS_UPTODATE;
99  }
100 
101  if (!isset($this->data["wiki_id"]))
102  {
103  $this->db->manipulate("INSERT INTO wiki_user_html_export ".
104  "(wiki_id, usr_id, progress, start_ts, status) VALUES (".
105  $this->db->quote($this->wiki->getId(), "integer").",".
106  $this->db->quote($this->user->getId(), "integer").",".
107  $this->db->quote(0, "integer").",".
108  $this->db->quote($ts, "timestamp").",".
109  $this->db->quote(self::RUNNING, "integer").
110  ")");
111  }
112  else
113  {
114  $this->db->manipulate("UPDATE wiki_user_html_export SET ".
115  " start_ts = ".$this->db->quote($ts, "timestamp").",".
116  " usr_id = ".$this->db->quote($this->user->getId(), "integer").",".
117  " progress = ".$this->db->quote(0, "integer").",".
118  " status = ".$this->db->quote(self::RUNNING, "integer").
119  " WHERE status = ".$this->db->quote(self::NOT_RUNNING, "integer").
120  " AND wiki_id = ".$this->db->quote($this->wiki->getId(), "integer")
121  );
122  }
123  $this->read();
124  $this->db->unlockTables();
125 
126  if ($this->data["start_ts"] == $ts && $this->data["usr_id"] == $this->user->getId())
127  {
128  // we started the process
129  return self::PROCESS_STARTED;
130  }
131 
132  // process was already running
133  return self::PROCESS_OTHER_USER;
134  }
135 
142  public function updateStatus($a_progress, $a_status)
143  {
144  $this->db->manipulate("UPDATE wiki_user_html_export SET ".
145  " progress = ".$this->db->quote((int) $a_progress, "integer").",".
146  " status = ".$this->db->quote((int) $a_status, "integer").
147  " WHERE wiki_id = ".$this->db->quote($this->wiki->getId(), "integer").
148  " AND usr_id = ".$this->db->quote($this->user->getId(), "integer")
149  );
150 
151  $this->read();
152  }
153 
160  function getProgress()
161  {
162  $set = $this->db->query("SELECT progress, status FROM wiki_user_html_export ".
163  " WHERE wiki_id = ".$this->db->quote($this->wiki->getId(), "integer")
164  );
165  $rec = $this->db->fetchAssoc($set);
166 
167  return array("progress" => (int) $rec["progress"], "status" => (int) $rec["status"]);
168  }
169 
170 
177  public function initUserHTMLExport()
178  {
179  // get process, if not already running or export is up-to-date, return corresponding status
180  echo $this->getProcess();
181  exit;
182  }
183 
188  {
189  ignore_user_abort(true);
190  // do the export
191  include_once("./Modules/Wiki/classes/class.ilWikiHTMLExport.php");
192  $exp = new ilWikiHTMLExport($this->wiki);
193  $exp->setMode(ilWikiHTMLExport::MODE_USER);
194  $exp->buildExportFile();
195  // reset user export status
196  $this->updateStatus(100, self::NOT_RUNNING);
197  exit;
198  }
199 
203  function deliverFile()
204  {
205  $this->log->debug("deliver");
206  include_once("./Modules/Wiki/classes/class.ilWikiHTMLExport.php");
207  $exp = new ilWikiHTMLExport($this->wiki);
208  $exp->setMode(ilWikiHTMLExport::MODE_USER);
209  $file = $exp->getUserExportFile();
210  $this->log->debug("file: ".$file);
211  ilUtil::deliverFile($file, pathinfo($file, PATHINFO_BASENAME));
212  }
213 
214 
215 }
216 
217 ?>
print $file
exit
Definition: login.php:54
updateStatus($a_progress, $a_status)
Update status.
__construct(ilObjWiki $a_wiki, ilDB $a_db, ilObjUser $a_user)
Construct.
initUserHTMLExport()
Init user html export.
static getLastChangeByParent($a_parent_type, $a_parent_id, $a_lang="")
Get all pages for parent object.
static now()
Return current timestamp in Y-m-d H:i:s format.
Class manages user html export.
Class ilObjWiki.
const LOCK_WRITE
Definition: class.ilDB.php:30
static deliverFile($a_file, $a_filename, $a_mime='', $isInline=false, $removeAfterDelivery=false, $a_exit_after=true)
deliver file for download via browser.
startUserHTMLExport()
Start user html export.
Database Wrapper.
Definition: class.ilDB.php:28
Wiki HTML exporter class.
static getLogger($a_component_id)
Get component logger.