1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/noalyss_ynh.git synced 2024-09-03 19:46:20 +02:00
noalyss_ynh/sources/include/lib/progress_bar.class.php

129 lines
4.1 KiB
PHP
Raw Normal View History

<?php
/*
* Copyright (C) 2018 Dany De Bontridder <dany@alchimerys.be>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/**
* @file
* @brief Manage the progress bar and display it with javascript
*
*/
/**
* @brief Use one db for tracking progress bar value, the task id must be unique
* and let you follow the progress of a task.
* how it works : when calling an ajax , you have to create the task id and start
* the monitoring of it (js function = progress_bar_start).
* In your php script called by ajax you call Progress_Bar->set_value to show
* the progress. The timer created by progress_bar_start will check regularly the
* progress in the db.
* The ajax parameter for following the task is task_id
*
*@note you have to use session_write_close(); in the ajax file , otherwise,
* the function progress_bar_check will be blocked and won't update the progress
* bar
*
*@see progress_bar_start
*@see progress_bar_check
*
*
*/
class Progress_Bar
{
private $db ; //!< database connexion
private $task_id ; //! task id (progress_bar.p_id)
private $value; //!< value of progress (between 0 & 100)
/**
* @example progress-bar.test.php test of this class
* @param type $p_task_id
*/
function __construct($p_task_id)
{
$this->db=new Database();
$this->task_id=$p_task_id;
// Find value from db
$this->value = $this->db->exec_sql("select p_value from progress where p_id=$1",
[$p_task_id]);
// if task doesn't exists, create it
if ( $this->db->size()==0)
{
$this->value=0;
$this->db->exec_sql("insert into progress(p_id,p_value) values ($1,0)",
[$p_task_id]);
$this->db->exec_sql("delete from progress where p_created < now() - interval '3 hours' ");
}
}
/**
* Store the progress value into the db
* @param integer $p_value value of the progress between 0 & 100
*@exceptions code 1005 - if p_value is not in between 0 & 100
*/
function set_value($p_value)
{
if ( $p_value > 100 || $p_value < 0 ) {
throw new Exception("Invalid value",EXC_PARAM_VALUE);
}
$this->value=$p_value;
$this->db->start();
$this->db->exec_sql("update progress set p_value=$1 where p_id=$2",
[$this->value,$this->task_id]);
$this->db->commit();
}
/**
* Get the progress value from db
* @return integer between 0 & 100
*/
function get_value()
{
$this->value = $this->db->get_value("select p_value from progress where p_id=$1",
[$this->task_id]);
return $this->value;
}
/**
* Json answer of the task progressing
* if value is equal or greater than 100 , delete the row
* @return type
*/
function answer()
{
$this->get_value();
header('Content-Type: application/json');
echo json_encode(["value"=>$this->value]);
if ($this->value>=100) {
$this->db->exec_sql("delete from progress where p_id=$1",[$this->task_id]);
}
return;
}
/**
* increment value with $p_step
* @param int $p_step
*/
function increment($p_step)
{
if ($this->value+$p_step > 100 ) {
$this->set_value(100);
return;
}
$this->set_value($this->value+$p_step);
}
}