ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
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, ilDBInterface $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  $ilAtomQuery = $this->db->buildAtomQuery();
88  $ilAtomQuery->addTableLock('wiki_user_html_export');
89 
90  $ilAtomQuery->addQueryCallable(function(ilDBInterface $ilDB) use ($last_change, &$ret){
91 
92  $this->log->debug("atom query start");
93 
94  $this->read();
95  $ts = ilUtil::now();
96 
97  if ($this->data["start_ts"] != "" &&
98  $this->data["start_ts"] > $last_change)
99  {
100  $ret = self::PROCESS_UPTODATE;
101  $this->log->debug("return: ".self::PROCESS_UPTODATE);
102  return;
103  }
104 
105  if (!isset($this->data["wiki_id"]))
106  {
107  $this->log->debug("insert, wiki id: ".$this->wiki->getId().", user id: ".$this->user->getId().", ts: ".$ts);
108  $ilDB->manipulate("INSERT INTO wiki_user_html_export ".
109  "(wiki_id, usr_id, progress, start_ts, status) VALUES (".
110  $ilDB->quote($this->wiki->getId(), "integer").",".
111  $ilDB->quote($this->user->getId(), "integer").",".
112  $ilDB->quote(0, "integer").",".
113  $ilDB->quote($ts, "timestamp").",".
114  $ilDB->quote(self::RUNNING, "integer").
115  ")");
116  }
117  else
118  {
119  $this->log->debug("update, wiki id: ".$this->wiki->getId().", user id: ".$this->user->getId().", ts: ".$ts);
120  $ilDB->manipulate("UPDATE wiki_user_html_export SET ".
121  " start_ts = ".$ilDB->quote($ts, "timestamp").",".
122  " usr_id = ".$ilDB->quote($this->user->getId(), "integer").",".
123  " progress = ".$ilDB->quote(0, "integer").",".
124  " status = ".$ilDB->quote(self::RUNNING, "integer").
125  " WHERE status = ".$ilDB->quote(self::NOT_RUNNING, "integer").
126  " AND wiki_id = ".$ilDB->quote($this->wiki->getId(), "integer")
127  );
128  $this->read();
129  }
130 
131  if ($this->data["start_ts"] == $ts && $this->data["usr_id"] == $this->user->getId())
132  {
133  // we started the process
134  $ret = self::PROCESS_STARTED;
135  $this->log->debug("return: ".self::PROCESS_STARTED);
136  return;
137  }
138 
139  // process was already running
140  $ret = self::PROCESS_OTHER_USER;
141  $this->log->debug("return: ".self::PROCESS_OTHER_USER);
142  });
143 
144  $ilAtomQuery->run();
145 
146  $this->log->debug("outer return: ".$ret);
147 
148  return $ret;
149  }
150 
157  public function updateStatus($a_progress, $a_status)
158  {
159  $this->db->manipulate("UPDATE wiki_user_html_export SET ".
160  " progress = ".$this->db->quote((int) $a_progress, "integer").",".
161  " status = ".$this->db->quote((int) $a_status, "integer").
162  " WHERE wiki_id = ".$this->db->quote($this->wiki->getId(), "integer").
163  " AND usr_id = ".$this->db->quote($this->user->getId(), "integer")
164  );
165 
166  $this->read();
167  }
168 
175  function getProgress()
176  {
177  $set = $this->db->query("SELECT progress, status FROM wiki_user_html_export ".
178  " WHERE wiki_id = ".$this->db->quote($this->wiki->getId(), "integer")
179  );
180  $rec = $this->db->fetchAssoc($set);
181 
182  return array("progress" => (int) $rec["progress"], "status" => (int) $rec["status"]);
183  }
184 
185 
192  public function initUserHTMLExport()
193  {
194  // get process, if not already running or export is up-to-date, return corresponding status
195  echo $this->getProcess();
196  exit;
197  }
198 
203  {
204  ignore_user_abort(true);
205  // do the export
206  include_once("./Modules/Wiki/classes/class.ilWikiHTMLExport.php");
207  $exp = new ilWikiHTMLExport($this->wiki);
208  $exp->setMode(ilWikiHTMLExport::MODE_USER);
209  $exp->buildExportFile();
210  // reset user export status
211  $this->updateStatus(100, self::NOT_RUNNING);
212  exit;
213  }
214 
218  function deliverFile()
219  {
220  $this->log->debug("deliver");
221  include_once("./Modules/Wiki/classes/class.ilWikiHTMLExport.php");
222  $exp = new ilWikiHTMLExport($this->wiki);
223  $exp->setMode(ilWikiHTMLExport::MODE_USER);
224  $file = $exp->getUserExportFile();
225  $this->log->debug("file: ".$file);
226  ilUtil::deliverFile($file, pathinfo($file, PATHINFO_BASENAME));
227  }
228 
229 
230 }
231 
232 ?>
Add some data
updateStatus($a_progress, $a_status)
Update status.
__construct(ilObjWiki $a_wiki, ilDBInterface $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.
user()
Definition: user.php:4
Class manages user html export.
Interface ilDBInterface.
quote($value, $type)
Class ilObjWiki.
static deliverFile($a_file, $a_filename, $a_mime='', $isInline=false, $removeAfterDelivery=false, $a_exit_after=true)
deliver file for download via browser.
Create styles array
The data for the language used.
startUserHTMLExport()
Start user html export.
global $ilDB
$ret
Definition: parser.php:6
Wiki HTML exporter class.
static getLogger($a_component_id)
Get component logger.
if(!file_exists("$old.txt")) if($old===$new) if(file_exists("$new.txt")) $file
manipulate($query)