@@ -198,6 +198,69 @@ public static function postShowItem($params): void
198198 * @return void
199199 */
200200 public function modalForm (string $ itemtype , int $ items_id ): void
201+ {
202+ $ config = PluginActualtimeConfig::getInstance ();
203+ $ actualtimes = [];
204+ $ userdata = [];
205+ $ duration = 0 ;
206+
207+ foreach (self ::getActualtimes ($ itemtype , $ items_id ) as $ rows_id => $ data ) {
208+ if (empty ($ userdata )) {
209+ $ href = User::getFormURLWithID ($ data ['users_id ' ]);
210+ $ username = User::getFriendlyNameById ($ data ['users_id ' ]);
211+ $ userdata ['user ' ] = "<a href= \"{$ href }\" target= \"_blank \"> {$ username }</a> " ;
212+ }
213+ $ actualtimes [$ rows_id ] = $ data ;
214+ }
215+
216+ $ max_hour = $ config ->fields ['daily_limit ' ];
217+ if ($ max_hour == 0 ) {
218+ $ max_hour = 24 ;
219+ }
220+
221+ $ previous_row = 0 ;
222+ foreach ($ actualtimes as $ rows_id => $ data ) {
223+ $ data ['rand ' ] = mt_rand ();
224+ $ data ['min_date ' ] = $ data ['actual_begin ' ];
225+ $ max_seconds = $ max_hour * 60 * 60 - $ duration ;
226+ $ limit = strtotime ($ data ['min_date ' ] . " + {$ max_seconds } seconds " );
227+ $ a_limit = date ('Y-m-d H:i:s ' , $ limit );
228+ if (isset ($ actualtimes [$ previous_row ])) {
229+ $ max_date = $ data ['actual_begin ' ];
230+ if ($ max_date > $ a_limit ) {
231+ $ max_date = $ a_limit ;
232+ }
233+ $ actualtimes [$ previous_row ]['max_date ' ] = $ max_date ;
234+ $ previous_max_seconds = strtotime ($ max_date ) - strtotime ($ actualtimes [$ previous_row ]['actual_end ' ]);
235+ $ actualtimes [$ previous_row ]['limit ' ] = Html::timestampToString ($ previous_max_seconds );
236+ }
237+ $ data ['max_date ' ] = $ a_limit ;
238+ $ data ['limit ' ] = Html::timestampToString ($ max_seconds );
239+ $ data ['stamp_actiontime ' ] = Html::timestampToString ($ data ['actual_actiontime ' ]);
240+ $ actualtimes [$ rows_id ] = $ data ;
241+ $ duration += (int ) $ data ['actual_actiontime ' ];
242+ $ previous_row = $ rows_id ;
243+ }
244+ $ userdata ['duration ' ] = Html::timestampToString ($ duration );
245+ $ userdata ['limit ' ] = Html::timestampToString ($ max_hour * 60 * 60 );
246+
247+ $ template = "@actualtime/forms/modify_timers.html.twig " ;
248+ TemplateRenderer::getInstance ()->display ($ template , [
249+ 'itemtype ' => $ itemtype ,
250+ 'items_id ' => $ items_id ,
251+ 'actualtimes ' => $ actualtimes ,
252+ 'userdata ' => $ userdata ,
253+ 'target ' => $ this ->getFormURL (),
254+ ]);
255+ }
256+
257+ /**
258+ * @param string $itemtype
259+ * @param int $items_id
260+ *
261+ * @return \DBmysqlIterator
262+ */
263+ private static function getActualtimes (string $ itemtype , int $ items_id ): \DBmysqlIterator
201264 {
202265 /** @var \DBmysql $DB */
203266 global $ DB ;
@@ -211,25 +274,27 @@ public function modalForm(string $itemtype, int $items_id): void
211274 ],
212275 ];
213276
214- $ actualtimes = [];
215- $ userdata = [];
216- foreach ($ DB ->request ($ query ) as $ rows_id => $ data ) {
217- if (empty ($ userdata )) {
218- $ href = User::getFormURLWithID ($ data ['users_id ' ]);
219- $ username = User::getFriendlyNameById ($ data ['users_id ' ]);
220- $ userdata ['user ' ] = "<a href= \"{$ href }\" target= \"_blank \"> {$ username }</a> " ;
221- }
222- $ actualtimes [$ rows_id ] = $ data ;
223- }
277+ return $ DB ->request ($ query );
278+ }
224279
280+ /**
281+ * @param string $itemtype
282+ * @param int $items_id
283+ *
284+ * @return array
285+ */
286+ public static function getTaskLimits (string $ itemtype , int $ items_id ): array
287+ {
225288 $ config = PluginActualtimeConfig::getInstance ();
289+ $ limits = [];
226290 $ duration = 0 ;
227291 $ max_hour = $ config ->fields ['daily_limit ' ];
228292 if ($ max_hour == 0 ) {
229293 $ max_hour = 24 ;
230294 }
295+
296+ $ actualtimes = self ::getActualtimes ($ itemtype , $ items_id );
231297 foreach ($ actualtimes as $ rows_id => $ data ) {
232- $ data ['rand ' ] = mt_rand ();
233298 $ data ['min_date ' ] = $ data ['actual_begin ' ];
234299 $ next_row = $ rows_id + 1 ;
235300 $ max_seconds = $ max_hour * 60 * 60 - $ duration ;
@@ -249,17 +314,8 @@ public function modalForm(string $itemtype, int $items_id): void
249314 $ actualtimes [$ rows_id ] = $ data ;
250315 $ duration += (int ) $ data ['actual_actiontime ' ];
251316 }
252- $ userdata ['duration ' ] = Html::timestampToString ($ duration );
253- $ userdata ['limit ' ] = Html::timestampToString ($ max_hour * 60 * 60 );
254317
255- $ template = "@actualtime/forms/modify_timers.html.twig " ;
256- TemplateRenderer::getInstance ()->display ($ template , [
257- 'itemtype ' => $ itemtype ,
258- 'items_id ' => $ items_id ,
259- 'actualtimes ' => $ actualtimes ,
260- 'userdata ' => $ userdata ,
261- 'target ' => $ this ->getFormURL (),
262- ]);
318+ return $ limits ;
263319 }
264320
265321 /**
0 commit comments