ProcesEditor.php 24 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115
  1. <?php
  2. /*
  3. CREATE TABLE IF NOT EXISTS `CRM_VIDEO` (
  4. `VIDEO_ID` int(11) NOT NULL,
  5. `REMOTE_TABLE` int(11) NOT NULL,
  6. `REMOTE_ID` int(11) NOT NULL,
  7. `PARENT_ID` int(11) NOT NULL,
  8. `THUMBNAIL_ID` int(11) NOT NULL,
  9. `NAME` varchar(255) NOT NULL,
  10. `VIDEO_START` int(11) NOT NULL,
  11. `VIDEO_END` int(11) NOT NULL,
  12. `PATH` varchar(255) NOT NULL
  13. ) ENGINE=InnoDB DEFAULT CHARSET=latin2;
  14. ALTER TABLE `CRM_VIDEO`
  15. ADD PRIMARY KEY (`VIDEO_ID`);
  16. */
  17. Lib::loadClass('RouteBase');
  18. Lib::loadClass('ProcesHelper');
  19. Lib::loadClass('Config');
  20. Lib::loadClass('UI');
  21. Lib::loadClass('User');
  22. Lib::loadClass('Request');
  23. Lib::loadClass('Response');
  24. Lib::loadClass('Api_WfsNs');
  25. class Route_UrlAction_ProcesEditor extends RouteBase {// TODO: UrlActionBase @see Route_UrlAction
  26. public function getProcesListAjaxAction(){
  27. try {
  28. $rows = DB::getPDO()->fetchAll("
  29. SELECT * FROM `CRM_PROCES` WHERE FIND_IN_SET(`ID`, ( SELECT GROUP_CONCAT(Level SEPARATOR ',')
  30. FROM ( SELECT @Ids := ( SELECT GROUP_CONCAT(`ID` SEPARATOR ',') FROM `CRM_PROCES` WHERE FIND_IN_SET(`PARENT_ID`, @Ids)
  31. AND `TYPE` <> 'PROCES_INIT' ) Level FROM `CRM_PROCES` JOIN
  32. (SELECT @Ids := 0) temp1
  33. WHERE FIND_IN_SET(`PARENT_ID`, @Ids) ) temp2 ))
  34. AND `PARENT_ID` >= 0 AND `A_STATUS` <> 'DELETED'
  35. ");
  36. $state = array();
  37. foreach ($rows as $key => $value) {
  38. $id = intval($value["ID"]);
  39. $parent_id = intval($value["PARENT_ID"]);
  40. $state[$id]["ID"] = $value["ID"];
  41. $state[$id]["DESC"] = $value["DESC"];
  42. $state[$id]["OPIS"] = $value["OPIS"];
  43. $state[$id]["TYPE"] = $value["TYPE"];
  44. $state[$id]["IF_TRUE_GOTO"] = intval($value["IF_TRUE_GOTO"]);
  45. $state[$id]["IF_TRUE_GOTO_FLAG"] = $value["IF_TRUE_GOTO_FLAG"];
  46. $state[$id]["PARENT_ID"] = (intval($value["PARENT_ID"]) != 0) ? intval($value["PARENT_ID"]) : "#";
  47. $state[$id]["SORT_PRIO"] = $value["SORT_PRIO"];
  48. if (!isset($state[$id]["childs"])) $state[$id]["childs"] = array();
  49. if (!isset($state[$parent_id]["childs"])) $state[$parent_id]["childs"] = array();
  50. $temp = array();
  51. $temp["ID"] = $id;
  52. array_push($state[$parent_id]["childs"], $temp);
  53. }
  54. Response::sendJsonExit($state);
  55. } catch (Exception $e) {
  56. UI::alert('danger', "Error: " . $e->getMessage());
  57. }
  58. }
  59. public function getPathAjaxAction(){
  60. try {
  61. $video_id = V::get('id', 0, $_GET, 'int');
  62. $rows = DB::getPDO()->fetchAll("
  63. SELECT f.ID, f.DESC
  64. FROM (
  65. SELECT @id AS _id, (SELECT @id := PARENT_ID FROM CRM_PROCES WHERE ID = _id)
  66. FROM (SELECT @id := {$video_id}) tmp1
  67. JOIN CRM_PROCES ON @id <> 0
  68. ) tmp2
  69. JOIN CRM_PROCES f ON tmp2._id = f.ID
  70. ");
  71. $rows = array_reverse($rows);
  72. Response::sendJsonExit($rows);
  73. } catch (Exception $e) {
  74. UI::alert('danger', "Error: " . $e->getMessage());
  75. }
  76. }
  77. private function addWatermark($url){
  78. $watermark_file = "/Library/Server/Web/Data/Sites/Default/SE/stuff/images/play.png";
  79. $image = new Imagick();
  80. $image->readImage($url);
  81. $watermark = new Imagick();
  82. $watermark->readImage($watermark_file);
  83. $image->resizeImage(500,500,Imagick::FILTER_LANCZOS,1);
  84. $image->compositeImage($watermark, imagick::COMPOSITE_OVER, 0, 0);
  85. $image->writeImage($url);
  86. $image->clear();
  87. $image->destroy();
  88. $watermark->clear();
  89. $watermark->destroy();
  90. }
  91. public function uploadVideoAction() {
  92. if (!User::logged()) return;
  93. $CRM_VIDEO = "/Library/Server/Web/Data/Sites/Default/PLIKI/bartosz_procesy5_pl/CRM_VIDEO/";
  94. $url = $_FILES["files"]["tmp_name"][0];
  95. $size = $_FILES["files"]["size"][0];
  96. $name = $_FILES["files"]["name"][0];
  97. $finfo = new finfo(FILEINFO_MIME_TYPE);
  98. $type = $finfo->file($url);
  99. $ext = pathinfo($name, PATHINFO_EXTENSION);
  100. $imgExtList = array("image/png", "image/jpeg");
  101. $vidExtList = array("video/mp4");
  102. $info;
  103. $statement = DB::getPDO()->prepare("INSERT INTO CRM_IMAGE(NAME, TYPE, REMOTE_TABLE, REMOTE_ID, IMAGE, SIZE)
  104. VALUES(:NAME, :TYPE, :REMOTE_TABLE, :REMOTE_ID, :IMAGE, :SIZE)");
  105. if(in_array($type, $imgExtList)){
  106. $content = 'data:'.$type.';base64,'.base64_encode(file_get_contents($url));
  107. $statement->execute(array(
  108. ":NAME" => $name,
  109. ":TYPE" => $type,
  110. ":REMOTE_TABLE" => "ADMIN_USERS",
  111. ":REMOTE_ID" => User::getID(),
  112. ":IMAGE" => $content,
  113. ":SIZE" => $size
  114. ));
  115. $info->statusCode = 0;
  116. $info->statusText = "Plik załadowany pomyślnie" ;
  117. }elseif(in_array($type, $vidExtList)){
  118. $statement_video = DB::getPDO()->prepare("INSERT INTO CRM_VIDEO(NAME, TYPE, REMOTE_TABLE, REMOTE_ID, PARENT_ID, HAS_FILE, EXT)
  119. VALUES(:NAME, :TYPE, :REMOTE_TABLE, :REMOTE_ID, :PARENT_ID, :HAS_FILE, :EXT)");
  120. $statement_video->execute(array(
  121. ":NAME" => $name,
  122. ":TYPE" => $type,
  123. ":REMOTE_TABLE" => "ADMIN_USERS",
  124. ":PARENT_ID" => 0,
  125. ":REMOTE_ID" => User::getID(),
  126. ":EXT" => $ext,
  127. ":HAS_FILE" => 1,
  128. ));
  129. $id = DB::getPDO()->lastInsertId();
  130. echo $url."\n";
  131. echo $CRM_VIDEO.$id.$ext;
  132. $temp_file = tempnam(sys_get_temp_dir(), 'thumbnail_');
  133. rename($temp_file, $temp_file .= '.png');
  134. $cmd = '/usr/local/bin/ffmpeg -y -i '.$url.' -ss 00:00:1 -vframes 1 '.$temp_file.' 2>&1';
  135. shell_exec($cmd);
  136. $this->addWatermark($temp_file);
  137. $img_content = 'data:'."image/png".';base64,'.base64_encode(file_get_contents($temp_file));
  138. $img_size = filesize($temp_file);
  139. $statement->execute(array(
  140. ":NAME" => "Miniaturka dla ".$name,
  141. ":TYPE" => "image/png",
  142. ":REMOTE_TABLE" => "CRM_VIDEO",
  143. ":REMOTE_ID" => $id,
  144. ":IMAGE" => $img_content,
  145. ":SIZE" => $img_size
  146. ));
  147. move_uploaded_file ( $url, $CRM_VIDEO.$id.".".$ext );
  148. }else{
  149. $info->statusCode = 1;
  150. $info->statusText = "Nieobsługiwany format pliku ".$type ;
  151. }
  152. echo json_encode($info);
  153. }
  154. public function getVideoFileAjaxAction(){
  155. try {
  156. $video_id = V::get('id', 0, $_GET, 'int');
  157. if ($video_id <= 0) throw new Exception("ID is not set.");
  158. $sqlVideoId = DB::getPDO()->quote($video_id, PDO::PARAM_INT);
  159. $rows = DB::getPDO()->fetchAll("
  160. SELECT f.VIDEO_ID
  161. FROM (
  162. SELECT @id AS _id, (SELECT @id := PARENT_ID FROM CRM_VIDEO WHERE VIDEO_ID = _id)
  163. FROM (SELECT @id := {$sqlVideoId}) tmp1
  164. JOIN CRM_VIDEO ON @id <> 0
  165. ) tmp2
  166. JOIN CRM_VIDEO f ON tmp2._id = f.VIDEO_ID
  167. WHERE f.HAS_FILE = 1 and f.TYPE = 'video/mp4'
  168. ");
  169. $id = $rows[0]["VIDEO_ID"];
  170. $CRM_VIDEO = "/PLIKI/bartosz_procesy5_pl/CRM_VIDEO/";
  171. $result["src"] = $CRM_VIDEO.$id.".mp4";
  172. Response::sendJsonExit($result);
  173. } catch (Exception $e) {
  174. UI::alert('danger', "Error: " . $e->getMessage());
  175. }
  176. }
  177. public function getThumbnailAjaxAction($video_id = -1){
  178. try {
  179. $doReturn = false;
  180. if($video_id <= 0)
  181. $video_id = V::get('id', 0, $_GET, 'int');
  182. else
  183. $doReturn = true;
  184. if ($video_id <= 0) throw new Exception("ID is not set.");
  185. $sqlVideoId = DB::getPDO()->quote($video_id, PDO::PARAM_INT);
  186. $rows = DB::getPDO()->fetchAll("
  187. SELECT f.VIDEO_ID
  188. FROM (
  189. SELECT @id AS _id, (SELECT @id := PARENT_ID FROM CRM_VIDEO WHERE VIDEO_ID = _id)
  190. FROM (SELECT @id := {$sqlVideoId}) tmp1
  191. JOIN CRM_VIDEO ON @id <> 0
  192. ) tmp2
  193. JOIN CRM_VIDEO f ON tmp2._id = f.VIDEO_ID
  194. WHERE f.PARENT_ID = 0
  195. ");
  196. if(isset($rows[0]["VIDEO_ID"])){
  197. $video_parent_id = $rows[0]["VIDEO_ID"];
  198. $sqlVideoParentId = DB::getPDO()->quote($video_parent_id , PDO::PARAM_INT);
  199. $rows = DB::getPDO()->fetchAll("
  200. SELECT * FROM CRM_IMAGE WHERE REMOTE_TABLE = 'CRM_VIDEO' AND REMOTE_ID = {$sqlVideoParentId}
  201. ");
  202. if($doReturn)
  203. return $rows;
  204. else
  205. Response::sendJsonExit($rows);
  206. }
  207. } catch (Exception $e) {
  208. UI::alert('danger', "Error: " . $e->getMessage());
  209. }
  210. }
  211. public function getVideosClipboardAjaxAction(){
  212. try {
  213. $id = User::getID();
  214. if ($id <= 0) throw new Exception("ID is not set.");
  215. $sqlId = DB::getPDO()->quote($id, PDO::PARAM_INT);
  216. $rows = DB::getPDO()->fetchAll("
  217. SELECT *
  218. FROM CRM_VIDEO
  219. WHERE REMOTE_TABLE = 'ADMIN_USERS' and REMOTE_ID = {$sqlId}
  220. ");
  221. foreach($rows as $key=>$value){
  222. $rows[$key]["THUMBNAIL"] = $this->getThumbnailAjaxAction($value["VIDEO_ID"])[0];
  223. }
  224. Response::sendJsonExit($rows);
  225. } catch (Exception $e) {
  226. UI::alert('danger', "Error: " . $e->getMessage());
  227. }
  228. }
  229. public function getResByParentAjaxAction() {
  230. try {
  231. $idParent = V::get('parent_id', 0, $_GET, 'int');
  232. if ($idParent <= 0) throw new Exception("ID is not set.");
  233. $sqlIdParent = DB::getPDO()->quote($idParent, PDO::PARAM_INT);
  234. $rows = DB::getPDO()->fetchAll("
  235. select g.*, p1.ID as p1_ID, p1.DESC as p1_DESC,p2.ID as p2_ID, p2.DESC as p2_DESC, p3.ID as p3_ID, p3.DESC as p3_DESC
  236. from CRM_LISTA_ZASOBOW g
  237. left join CRM_LISTA_ZASOBOW p1 on(p1.ID = g.PARENT_ID)
  238. left join CRM_LISTA_ZASOBOW p2 on(p2.ID = p1.PARENT_ID)
  239. left join CRM_LISTA_ZASOBOW p3 on(p3.ID = p2.PARENT_ID)
  240. where g.`PARENT_ID` = {$sqlIdParent}
  241. ORDER BY g.SORT_PRIO ASC, g.ID DESC
  242. ");
  243. Response::sendJsonExit($rows);
  244. } catch (Exception $e) {
  245. UI::alert('danger', "Error: " . $e->getMessage());
  246. }
  247. }
  248. public function getResAjaxAction() {
  249. try {
  250. $word = V::get('word', '', $_GET);
  251. $filter = isset($_GET['filter']) ? (int)$_GET['filter'] : 0;
  252. $sqlFilter = "";
  253. if (!empty($word)) {
  254. $sqlWord = DB::getPDO()->quote("%{$word}%", PDO::PARAM_STR);
  255. if (is_numeric($word)) {
  256. $sqlFilter .= "AND (g.`DESC` LIKE {$sqlWord} OR g.`ID` LIKE {$sqlWord})" . "\n";
  257. } else {
  258. $sqlFilter .= "AND g.`DESC` LIKE {$sqlWord}" . "\n";
  259. }
  260. }
  261. switch ($filter) {
  262. case 2: $sqlFilter .= "AND (g.`TYPE` = 'TABELA' OR g.`TYPE` = 'KOMORKA')" . "\n"; break;
  263. case 1: $sqlFilter .= "AND (g.`TYPE` = 'STANOWISKO' OR g.`TYPE` = 'DZIAL' OR g.`TYPE` = 'PODMIOT')" . "\n"; break;
  264. }
  265. $sql = "
  266. select g.*, p1.ID as p1_ID, p1.DESC as p1_DESC,p2.ID as p2_ID, p2.DESC as p2_DESC, p3.ID as p3_ID, p3.DESC as p3_DESC
  267. from CRM_LISTA_ZASOBOW g
  268. left join CRM_LISTA_ZASOBOW p1 on(p1.ID = g.PARENT_ID)
  269. left join CRM_LISTA_ZASOBOW p2 on(p2.ID = p1.PARENT_ID)
  270. left join CRM_LISTA_ZASOBOW p3 on(p3.ID = p2.PARENT_ID)
  271. where g.`A_STATUS` not in ('DELETED')
  272. and (p1.ID is null or p1.`A_STATUS` not in ('DELETED'))
  273. and (p2.ID is null or p2.`A_STATUS` not in ('DELETED'))
  274. and (p3.ID is null or p3.`A_STATUS` not in ('DELETED'))
  275. {$sqlFilter}
  276. limit 100
  277. ";
  278. DBG::_('DBG_SQL', '>1', 'sql', $sql, __CLASS__, __FUNCTION__, __LINE__);
  279. $rows = DB::getPDO()->fetchAll($sql);
  280. Response::sendJsonExit($rows);
  281. } catch (Exception $e) {
  282. UI::alert('danger', "Error: " . $e->getMessage());
  283. }
  284. }
  285. public function getSingleResAjaxReponseCallback() {
  286. if (!isset($_POST['data'])) throw new Exception("data is not set.");
  287. $ids = V::get('data', null, $_POST, 'uint_array');
  288. if (empty($ids)) throw new Exception("data is not correct.");
  289. $sqlWhereIdIn = array();
  290. foreach ($ids as $value) {
  291. $sqlWhereIdIn[] = DB::getPDO()->quote($value, PDO::PARAM_INT);
  292. }
  293. $sqlWhereIdIn = "g.ID in(" . implode(", ", $sqlWhereIdIn) . ")";
  294. $rows = DB::getPDO()->fetchAll("
  295. select g.*, p1.ID as p1_ID, p1.DESC as p1_DESC,p2.ID as p2_ID, p2.DESC as p2_DESC, p3.ID as p3_ID, p3.DESC as p3_DESC
  296. from CRM_LISTA_ZASOBOW g
  297. left join CRM_LISTA_ZASOBOW p1 on(p1.ID = g.PARENT_ID)
  298. left join CRM_LISTA_ZASOBOW p2 on(p2.ID = p1.PARENT_ID)
  299. left join CRM_LISTA_ZASOBOW p3 on(p3.ID = p2.PARENT_ID)
  300. where {$sqlWhereIdIn}
  301. ");
  302. return $rows;
  303. }
  304. public function getSingleResAjaxAction() {
  305. Response::sendTryCatchJson(array($this, 'getSingleResAjaxReponseCallback'));
  306. }
  307. public function handleAuth() {
  308. if (!User::logged()) {
  309. //throw new HttpException('Unauthorized', 401);
  310. User::authByRequest();
  311. }
  312. // zapisać jsona w sesji
  313. }
  314. public function defaultAction() {
  315. UI::gora();
  316. UI::menu();
  317. try {
  318. $id = V::get('id', 0, $_REQUEST, 'int');
  319. if ($id <= 0) $id = -1;
  320. if($id >= 0)
  321. UI::setTitleJsTag("Edytor Procesu {{$id}}");
  322. else
  323. UI::setTitleJsTag("Tworzenie nowego procesu}");
  324. $this->showEditor($id);
  325. } catch (Exception $e) {
  326. UI::alert('danger', "Error: " . $e->getMessage());
  327. }
  328. UI::dol();
  329. }
  330. public function showEditor($id) {
  331. echo '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/9.8.1/css/bootstrap-slider.min.css" crossorigin="anonymous">';
  332. echo '<link rel="stylesheet" type="text/css" href="static/sweetalert2.min.css">';
  333. echo '<link rel="stylesheet" href="static/jstree-theme/style.min.css" />';
  334. echo '<script src="static/jstree.min.js"></script>';
  335. $this->showEditorCss();
  336. ?>
  337. <div id="wrapper" class="toggled" style="overflow:hidden">
  338. <div id='sidebar-wrapper'><div id="side"></div></div>
  339. <div id='page-content-wrapper'>
  340. <div id="left">
  341. <button class='lButton btn btn-default' id="btnZasoby" style="top:150px"><p>Zasoby</p></button>
  342. <button class='lButton btn btn-default' style="top:315px" id="btnProcesy"><p>Procesy</p></button>
  343. <!--<button class='lButton btn btn-default' id="btnPhotos" style="top:480px"><p>Media</p></button>-->
  344. </div>
  345. <div class=col-md-12 >
  346. <div class=col-md-12 ><a id=toggleMenu style=cursor:pointer;>Przełącz menu</a>
  347. </div>
  348. <hr>
  349. <div class="col-md-12 path" style=border-width:1px;text-align:center;>
  350. </div>
  351. </div>
  352. <div id="main" style="margin-left:40px">
  353. <center>Uruchamianie aplikacji.</center>
  354. </div>
  355. </div>
  356. </div>
  357. <script>var USER_ID = '<?= User::getID(); ?>';var BASE_URL = '<?= Request::getPathUri(); ?>';var BASE_WFS_URL = '<?= Api_WfsNs::getBaseWfsUri(); ?>';var mainProces_id = <?= $id; ?>;</script>
  358. <script src="static/sweetalert2.min.js"></script>
  359. <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/9.8.1/bootstrap-slider.min.js" crossorigin="anonymous"></script>
  360. <script src="static/videoPlayer.js?v=19<?php echo "&_time=" . time(); ?>"></script>
  361. <script src="static/jquery.fileupload.js"></script>
  362. <script src="static/procesEditor.js?v=21<?php if (V::get('DBG', '', $_GET)) echo "&_time=" . time(); ?>"></script>
  363. <?php
  364. }
  365. public function showEditorCss() {
  366. ?>
  367. <style type="text/css">
  368. #p5BModalBack{
  369. width:100%;
  370. position:fixed;
  371. height:100%;
  372. background-color:rgba(0,0,0,0.9);
  373. z-index:2000;
  374. text-align:center;
  375. }
  376. .p5BModalModal{
  377. display: inline-block;
  378. width:800px;
  379. opacity:1;
  380. box-shadow:0 5px 15px rgba(0,0,0,.5);
  381. background-color:white;
  382. -webkit-background-clip: padding-box;
  383. background-clip: padding-box;
  384. border: 1px solid #999;
  385. border: 1px solid rgba(0,0,0,.2);
  386. border-radius: 6px;
  387. outline: 0;
  388. }
  389. .p5BModalContent{
  390. text-align:left;
  391. padding:5px;
  392. }
  393. #pathList{
  394. min-height:400px;
  395. max-height:650px;
  396. overflow-y:scroll;
  397. overflow-x:hidden;
  398. }
  399. .p5BModalHeader{
  400. text-align:left;
  401. font-size: 18px;
  402. margin-bottom: 10px;
  403. font-family: inherit;
  404. font-weight: 500;
  405. cursor:move;
  406. height:30px;
  407. border-bottom:1px solid silver;
  408. font-size:1.5em;
  409. padding-left:10px;
  410. }
  411. .p5BModalHeader span{
  412. display:inline-block;
  413. padding-top:5px;
  414. }
  415. .p5BModalHeader div{
  416. font-family:verdana;
  417. float:right;
  418. padding-top:5px;
  419. cursor:pointer;
  420. border-color:black;
  421. font-weight:bold;
  422. padding-right:10px;
  423. padding-top:6px;
  424. color:gray;
  425. height:100%;
  426. padding-left:7px;
  427. border-top-left-radius:3px;
  428. border-bottom-left-radius:3px;
  429. font-size:0.9em;
  430. }
  431. .p5BModalHeader div:hover{
  432. color:#e74c3c;
  433. }
  434. .hide{
  435. display:none;
  436. }
  437. .p5BModalButton{
  438. float:right;
  439. margin:3px;
  440. }
  441. .pathList{
  442. max-height:700px;
  443. min-height:300px;
  444. overflow-y:scroll;
  445. }
  446. .activeDrop{
  447. background-color:#f1f1f1;
  448. }
  449. .treeInfo{
  450. overflow: hidden;
  451. text-align: right;
  452. display:inline-block;
  453. color:grey;
  454. font-size:0.9em;
  455. white-space: nowrap;
  456. max-width: 90%;
  457. }
  458. .treeInfo div{
  459. float:right;
  460. }
  461. #left{
  462. padding:0px;
  463. }
  464. .sDescAdd, .hDescAdd, .step{
  465. padding-left:10px;
  466. }
  467. #clipboard{
  468. color:black;
  469. }
  470. .attImg, .attVid{
  471. border-style:solid;
  472. display:inline-block;
  473. margin-top:5px;
  474. margin-left:10px;
  475. }
  476. .attImg .img, .attVid .img{
  477. height:165px;
  478. background-color:black;
  479. display: table-cell;
  480. vertical-align: middle;
  481. }
  482. .attImg img, .attVid img{
  483. max-width:165px;
  484. max-height:165px;
  485. width: auto;
  486. height: auto;
  487. }
  488. .attImg .imgTitle, .attVid .imgTitle{
  489. background-color:white;
  490. cursor: move;
  491. text-align:left;
  492. }
  493. .remImg{
  494. cursor:pointer;
  495. color:red;
  496. padding:2px;
  497. background-color:white;
  498. border-bottom-style:solid;
  499. border-right-style:solid;
  500. border-color:black;
  501. border-width:1px;
  502. }
  503. .attImg div, .attVid div{
  504. font-family:tahoma;
  505. text-align:center;
  506. }
  507. .lButton{
  508. -webkit-transform: translate3d(0,0,0);
  509. position:fixed;
  510. padding:0px;
  511. outline:none;
  512. margin:0px;
  513. width: 40px;
  514. height:160px;
  515. z-index:30;
  516. border-top-left-radius: 0px;
  517. border-bottom-left-radius: 0px;
  518. }
  519. .lButton p
  520. {
  521. margin-bottom:-50px;
  522. -moz-transform:rotate(-90deg);
  523. -ms-transform:rotate(-90deg);
  524. -o-transform:rotate(-90deg);
  525. -webkit-transform:rotate(-90deg);
  526. }
  527. .ico {
  528. margin-top: 3px;
  529. margin-left: 5px;
  530. cursor: pointer;
  531. }
  532. #wrapper {
  533. padding-left: 0;
  534. -webkit-transition: all 0.5s ease;
  535. -moz-transition: all 0.5s ease;
  536. -o-transition: all 0.5s ease;
  537. transition: all 0.5s ease;
  538. }
  539. #wrapper.toggled {
  540. padding-left: 600px;
  541. }
  542. #wrapper #left { width:40px }
  543. #wrapper #left .lButton {
  544. width:40px;
  545. -webkit-transition: all 0.5s ease;
  546. -moz-transition: all 0.5s ease;
  547. -o-transition: all 0.5s ease;
  548. transition: all 0.5s ease;
  549. }
  550. #wrapper.toggled #left .lButton { width:39px }
  551. #side {
  552. padding: 15px;
  553. height: 100%;
  554. border-top-style:solid;
  555. border-top-width:1px;
  556. border-right-style: solid;
  557. border-color: #A61C2E;
  558. border-width: 2px;
  559. }
  560. ul {
  561. list-style: none;
  562. }
  563. #advCon{
  564. width:870px;
  565. min-width:100%;
  566. }
  567. .detailsTable{
  568. color:grey;
  569. float:left;
  570. display:inline;
  571. text-align:center;
  572. margin-left:5px;
  573. height:23px;
  574. }
  575. .tree{
  576. color:grey;
  577. text-overflow:ellipsis;
  578. white-space:nowrap;
  579. overflow:hidden;
  580. display:block;
  581. cursor:pointer;
  582. }
  583. .detailsTable2{
  584. color:grey;
  585. display:block;
  586. font-size:0.8em;
  587. text-align:left;
  588. margin-left:5px;
  589. height:23px;
  590. }
  591. .textTable{
  592. float:left;
  593. width:200px;
  594. text-overflow:ellipsis;
  595. white-space:nowrap;
  596. overflow:hidden;
  597. cursor:pointer;
  598. display:inline-block;
  599. }
  600. #dropPic{
  601. height:250px;
  602. border-radius:5px;
  603. border-style:solid;
  604. border-color:#ededed;
  605. background-color: #fbfbfb;
  606. border-width:1px;
  607. }
  608. /* skin.css Style*/
  609. #inp {
  610. height: 100px;
  611. border-width: 2px;
  612. margin-bottom: 0px;
  613. color: #ccc;
  614. border-style: dashed;
  615. border-color: #ccc;
  616. line-height: 100px;
  617. text-align: center;
  618. display:block;
  619. width:100%;
  620. }
  621. .upload-drop-zone.drop {
  622. color: #222;
  623. border-color: #222;
  624. }
  625. .anim-refresh {
  626. -animation: spin .7s infinite linear;
  627. -webkit-animation: spin2 .7s infinite linear;
  628. }
  629. @-webkit-keyframes spin2 {
  630. from { -webkit-transform: rotate(0deg);}
  631. to { -webkit-transform: rotate(360deg);}
  632. }
  633. @keyframes spin {
  634. from { transform: scale(1) rotate(0deg);}
  635. to { transform: scale(1) rotate(360deg);}
  636. }
  637. .list-group-item{
  638. cursor:pointer;
  639. }
  640. .list-group-item:hover{
  641. background-color:#eeeeee;
  642. }
  643. .list-group-item:hover .glyphicon{
  644. opacity:1 !important;
  645. }
  646. .textTable2{
  647. float:left;
  648. width:230px;
  649. text-overflow:ellipsis;
  650. white-space:nowrap;
  651. overflow:hidden;
  652. cursor:pointer;
  653. display:inline-block;
  654. }
  655. .pbody{
  656. padding-left:20px;
  657. padding-right:20px;
  658. text-align:justify;
  659. }
  660. .singleAdv{
  661. float:left;
  662. height:100%;
  663. width:290px;
  664. }
  665. #side #adv{
  666. }
  667. #side #ulcon, #side #ulproc, #side #adv {
  668. background-color: white;
  669. overflow-y: scroll;
  670. height: 70% !important;
  671. border-style:solid;
  672. border-width:1px;
  673. border-color:grey;
  674. margin-top: 10px;
  675. border-radius: 5px;
  676. padding-bottom: 10px;
  677. border-style: solid;
  678. border-width: 1px;
  679. border-color: #e5e5e5;
  680. color: black;
  681. padding-left: 0px;
  682. font-family: tahoma;
  683. font-size: 13px;
  684. }
  685. .selectedAdv{
  686. background-color:#e4e4e4;
  687. }
  688. .selectedAdv:hover{
  689. background-color:#e4e4e4;
  690. }
  691. #side .dragStyle {
  692. padding-left: 8px;
  693. padding-top: 4px;
  694. padding-bottom: 4px;
  695. border-bottom-style: dotted;
  696. border-width: 1px;
  697. cursor: pointer;
  698. border-color: #e5e5e5;
  699. background-color: white;
  700. display: block;
  701. }
  702. #side .showMore {
  703. padding-left: 2px;
  704. padding-top: 4px;
  705. padding-bottom: 4px;
  706. border-width: 1px;
  707. border-color: #e5e5e5;
  708. }
  709. #side .gIco {
  710. padding-left: 2px;
  711. padding-top: 4px;
  712. padding-bottom: 4px;
  713. border-width: 1px;
  714. border-color: #e5e5e5;
  715. cursor: pointer;
  716. }
  717. #side .hov,
  718. #side .grad {
  719. cursor: pointer;
  720. }
  721. .vakata-context {
  722. z-index:3000 !important;
  723. }
  724. #side .click {
  725. float: left;
  726. color: grey;
  727. font-size: 10px;
  728. cursor: pointer;
  729. }
  730. .delRes,
  731. .btnEdit,
  732. .hdesc,
  733. .sdesc {
  734. cursor: pointer;
  735. }
  736. .goto{
  737. padding-left:10px;
  738. }
  739. #side .tabelaName {
  740. white-space: nowrap;
  741. margin-right: 10px;
  742. overflow: hidden;
  743. width: 350px;
  744. float: left;
  745. text-overflow: ellipsis;
  746. display: block;
  747. cursor: pointer;
  748. }
  749. #side .hov:hover {
  750. background-color: #e5e5e5;
  751. }
  752. #sidebar-wrapper {
  753. position: fixed;
  754. left: 600px;
  755. width: 0;
  756. height: 100%;
  757. color: white;
  758. margin-left: -600px;
  759. overflow-y: auto;
  760. background: #222;
  761. -webkit-transition: all 0.5s ease;
  762. -moz-transition: all 0.5s ease;
  763. -o-transition: all 0.5s ease;
  764. transition: all 0.5s ease;
  765. }
  766. #wrapper.toggled #sidebar-wrapper {
  767. width: 600px;
  768. }
  769. #page-content-wrapper {
  770. width: 100%;
  771. position: absolute;
  772. z-index:0 !important;
  773. padding-top: 15px;
  774. padding-left:0px !important;
  775. }
  776. #wrapper.toggled #page-content-wrapper {
  777. position: absolute;
  778. margin-right: -600px;
  779. }
  780. #wrapper {
  781. padding-left: 600px;
  782. }
  783. #wrapper.toggled {
  784. padding-left: 0 !important;
  785. }
  786. #sidebar-wrapper {
  787. width: 600px;
  788. }
  789. #wrapper.toggled #sidebar-wrapper {
  790. width: 0 !important;
  791. }
  792. #page-content-wrapper {
  793. padding: 20px;
  794. position: relative;
  795. }
  796. #wrapper.toggled #page-content-wrapper {
  797. position: relative;
  798. margin-right: 0;
  799. }
  800. .drop {
  801. margin-top: 10px;
  802. }
  803. .sdesc{
  804. margin-bottom:10px;
  805. }
  806. .hdesc textarea,
  807. .sdesc textarea {
  808. min-width: 100%;
  809. padding: 10px;
  810. }
  811. .step,
  812. .sDescAdd {
  813. margin-top:5px;
  814. color: grey;
  815. cursor: pointer;
  816. display:block;
  817. font-size:10px;
  818. }
  819. .sDescAdd:hover{
  820. color:black;
  821. }
  822. .goto{
  823. }
  824. .editGoto{
  825. cursor:pointer;
  826. }
  827. .sdesc {
  828. display: block;
  829. }
  830. .hDescAdd {
  831. cursor: pointer;
  832. }
  833. #saveBtn {} .changable {
  834. padding-left: 10px;
  835. }
  836. .export{
  837. min-height:200px;
  838. }
  839. .changed {
  840. border-left-style: solid;
  841. border-width: 3px;
  842. border-color: #ffc107;
  843. padding-left: 7px;
  844. }
  845. .del {
  846. }
  847. .liRes:hover{
  848. background-color:#fafafa;
  849. }
  850. span.glyphicon{
  851. opacity:0.6;
  852. cursor:pointer;
  853. margin-left:3px;
  854. }
  855. span.glyphicon:hover{
  856. opacity:1;
  857. }
  858. .delRes:hover{
  859. color:red;
  860. }
  861. .delGoto:hover{
  862. color:red;
  863. cursor:pointer;
  864. }
  865. .del:hover{
  866. color:red;
  867. }
  868. .ids {
  869. color: grey;
  870. font-size: 12px;
  871. }
  872. .more {
  873. margin-left: 15px;
  874. }
  875. .resSelected {
  876. background-color: #d3d3d3;
  877. }
  878. .slider .slider-handle {
  879. background-color: red;
  880. width: 8px;
  881. margin-left: -4px !important;
  882. }
  883. .slider .slider-handle {} .p5VideoPlayer_vid {
  884. background-color: black;
  885. height: calc(100% - 20px);
  886. width: 100%;
  887. }
  888. .p5VideoPlayer {
  889. width:165px;
  890. height:165px;
  891. }
  892. .p5VideoPlayer .ico {
  893. font-size: 12px;
  894. margin-left: 4px;
  895. margin-right: 4px;
  896. cursor: pointer;
  897. opacity: 0.8;
  898. }
  899. .ico:hover {
  900. opacity: 1;
  901. }
  902. .p5VideoPlayer_video-controls {
  903. background-color: powderblue;
  904. margin-top:-5px;
  905. }
  906. .p5VideoPlayer_video-controls .only_fullscreen{
  907. display:none;
  908. }
  909. .p5VideoPlayer_video-controls-fs .only_fullscreen{
  910. display:table-cell;
  911. }
  912. .p5VideoPlayer_video-controls-fs {
  913. opacity: 0;
  914. position: absolute;
  915. bottom: 0;
  916. left: 0;
  917. right: 0;
  918. color: white;
  919. font-size: .8em;
  920. color:black;
  921. width: 100%;
  922. height: 20px;
  923. z-index: 2147483647;
  924. }
  925. .p5VideoPlayer:hover .p5VideoPlayer_video-controls-fs {
  926. opacity: 1;
  927. }
  928. .p5VideoPlayer_video-controls td {
  929. padding: 0px;
  930. padding-left:5px;
  931. padding-right:5px;
  932. }
  933. .p5VideoPlayer_video-controls .slider {
  934. width: 100%;
  935. }
  936. .przycinanie .slider {
  937. width: 100%;
  938. }
  939. .slider .slider-selection {
  940. background: #01b7ce;
  941. }
  942. video::-webkit-media-controls {
  943. display: none !important;
  944. }
  945. video::-webkit-media-controls-enclosure {
  946. display: none !important;
  947. }
  948. </style>
  949. <?php
  950. }
  951. }