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();
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
130 }
131
132 // process was already running
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
Database Wrapper.
Definition: class.ilDB.php:29
const LOCK_WRITE
Definition: class.ilDB.php:30
static getLogger($a_component_id)
Get component logger.
Class ilObjWiki.
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.
static deliverFile($a_file, $a_filename, $a_mime='', $isInline=false, $removeAfterDelivery=false, $a_exit_after=true)
deliver file for download via browser.
Wiki HTML exporter class.
Class manages user html export.
updateStatus($a_progress, $a_status)
Update status.
startUserHTMLExport()
Start user html export.
__construct(ilObjWiki $a_wiki, ilDB $a_db, ilObjUser $a_user)
Construct.
initUserHTMLExport()
Init user html export.
exit
Definition: login.php:54