Source of file api.stickynotes.php
Size: 44,263 Bytes - Last Modified: 2024-04-27T15:26:05+03:00
/tmp/current_snapshot/api/libs/api.stickynotes.php
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163 | <?php /** * Administator reminders and notes implementation */ class StickyNotes { /** * Contains available user notes * * @var array */ protected $allnotes = array(); /** * Contains all available revelations * * @var array */ protected $allRevelations = array(); /** * Is revelations enabled? * * @var bool */ protected $revelationsFlag = false; /** * Contains active user notes which may require notification * * @var array */ protected $activenotes = array(); /** * Contains current instance user login * * @var string */ protected $myLogin = ''; /** * System caching object placeholder * * @var object */ protected $cache = ''; /** * Just a flag of preview functionality in notes grid list * * @var bool */ protected $notesPreview = true; /** * Default taskbar notifications caching timeout in seconds */ const CACHE_TIMEOUT = 3600; /** * Default cache key name for personal notes */ const CACHE_KEY_NOTES = 'STICKYNOTES'; /** * Default cache key name for revelations */ const CACHE_KEY_REVELATIONS = 'STICKYREVELATIONS'; /** * Default notes management module URL */ const URL_ME = '?module=stickynotes'; /** * Default revelations management module URL */ const URL_REVELATIONS = '?module=stickynotes&revelations=true'; /** * Sets max uncutted note text size */ const PREVIEW_LEN = 190; /** * Routes and other predefined stuff */ const ROUTE_CALENDAR = 'calendarview'; const ROUTE_BACK = 'backurl'; const ROUTE_SHOW_NOTE = 'shownote'; const ROUTE_EDIT_FORM = 'editform'; const ROUTE_DEL_NOTE = 'delete'; const PROUTE_NEW_NOTE = 'newtext'; const PROUTE_EDIT_NOTE_TEXT = 'edittext'; const PROUTE_EDIT_NOTE_ID = 'editnoteid'; const PROUTE_NEW_REVELATION = 'newrevelationtext'; const ROUTE_DEL_REV = 'deleterev'; const PROUTE_EDIT_REV_TEXT = 'editrevelationtext'; const PROUTE_EDIT_REV_ID = 'editrevelationid'; const ROUTE_EDIT_REV_FORM = 'editrev'; const ROUTE_REVELATIONS = 'revelations'; const PROUTE_REMIND_DATE = 'reminddate'; const PROUTE_REMIND_TIME = 'remindtime'; /** * Creates new sticky notes instance * * @param bool $onlyActive * * @return void */ public function __construct($onlyActive) { $this->setLogin(); $this->loadConfig(); $this->initCache(); if ($onlyActive) { $this->loadActiveNotes(); if ($this->revelationsFlag) { $this->loadRevelations(true); } } else { $this->loadAllNotes(); if ($this->revelationsFlag) { $this->loadRevelations(false); } } } /** * Loads required options * * @global object $ubillingConfig * * @return void */ protected function loadConfig() { global $ubillingConfig; $this->revelationsFlag = $ubillingConfig->getAlterParam('STICKY_REVELATIONS_ENABLED'); $noPreviewOption = $ubillingConfig->getAlterParam('STICKY_NOTES_NOPREVIEW'); if ($noPreviewOption) { $this->notesPreview = false; } } /** * Sets current instance user login into protected property * * @return void */ protected function setLogin() { $this->myLogin = whoami(); } /** * Inits system caching object instance * * @return void */ protected function initCache() { $this->cache = new UbillingCache(); } /** * Flushes cache keys on sticky notes or revelations changes * * @return void */ protected function flushCache() { $this->cache->delete(self::CACHE_KEY_NOTES); $this->cache->delete(self::CACHE_KEY_REVELATIONS); } /** * Loads notes from database into private property * * @return void */ protected function loadAllNotes() { $query = "SELECT * from `stickynotes` WHERE `owner`= '" . $this->myLogin . "' ORDER BY `id` DESC"; $tmpArr = simple_queryall($query); //map id=>id if (!empty($tmpArr)) { foreach ($tmpArr as $io => $each) { $this->allnotes[$each['id']] = $each; } } } /** * Loads active/remind notes from database into private property * * @return void */ protected function loadActiveNotes() { $cachedNotes = $this->cache->get(self::CACHE_KEY_NOTES, self::CACHE_TIMEOUT); if (empty($cachedNotes)) { $cachedNotes = array(); } if (isset($cachedNotes[$this->myLogin])) { $this->activenotes = $cachedNotes[$this->myLogin]; } else { $query = "SELECT * from `stickynotes` WHERE `owner`= '" . $this->myLogin . "' AND `active`='1' ORDER BY `id` ASC"; $tmpArr = simple_queryall($query); //map id=>id if (!empty($tmpArr)) { foreach ($tmpArr as $io => $each) { $this->activenotes[$each['id']] = $each; } } $cachedNotes[$this->myLogin] = $this->activenotes; $this->cache->set(self::CACHE_KEY_NOTES, $cachedNotes, self::CACHE_TIMEOUT); } } /** * Loads all revelations from database * * @param bool $onlyForMe * * @return void */ protected function loadRevelations($onlyForMe = false) { if ($onlyForMe) { $cachedRevelations = $this->cache->get(self::CACHE_KEY_REVELATIONS, self::CACHE_TIMEOUT); if (empty($cachedRevelations)) { $cachedRevelations = array(); } if (isset($cachedRevelations[$this->myLogin])) { $this->allRevelations = $cachedRevelations[$this->myLogin]; } else { //yeah, logins must be space-separated $query = "SELECT * from `stickyrevelations` WHERE `showto` LIKE '% " . $this->myLogin . " %' AND `active`='1' ORDER BY `id` ASC"; $all = simple_queryall($query); if (!empty($all)) { foreach ($all as $io => $each) { $this->allRevelations[$each['id']] = $each; } } $cachedRevelations[$this->myLogin] = $this->allRevelations; $this->cache->set(self::CACHE_KEY_REVELATIONS, $cachedRevelations, self::CACHE_TIMEOUT); } } else { $query = "SELECT * from `stickyrevelations` ORDER BY `id` DESC"; $all = simple_queryall($query); if (!empty($all)) { foreach ($all as $io => $each) { $this->allRevelations[$each['id']] = $each; } } } } /** * Returns note data extracted from private allnotes property * * @param int $noteId * * @return array */ public function getNoteData($noteId) { $result = array(); if (!empty($this->allnotes)) { if (isset($this->allnotes[$noteId])) { $result = $this->allnotes[$noteId]; } } return ($result); } /** * Returns revelation data * * @param int $revelationId * * @return array */ protected function getRevelationData($revelationId) { $result = array(); if (!empty($this->allRevelations)) { if (isset($this->allRevelations[$revelationId])) { $result = $this->allRevelations[$revelationId]; } } return ($result); } /** * Returns cutted string if needed * * @param string $string * @param int $size * * @return string */ protected function cutString($string, $size) { if ((mb_strlen($string, 'UTF-8') > $size)) { $string = mb_substr($string, 0, $size, 'utf-8') . '...'; } return ($string); } /** * Returns list of available sticky notes with it controls as grid * * @return string */ public function renderListGrid() { $messages = new UbillingMessageHelper(); $result = ''; $cells = wf_TableCell(__('Creation date')); $cells .= wf_TableCell(__('Remind date')); $cells .= wf_TableCell(__('Time')); $cells .= wf_TableCell(__('Status')); $cells .= wf_TableCell(__('Text')); $cells .= wf_TableCell(__('Actions')); $rows = wf_TableRow($cells, 'row1'); /** * Amadare wa chi no shizuku to natte hoho wo * Tsutaiochiru * Mou doko ni mo kaeru basho ga nai nara */ if (!empty($this->allnotes)) { foreach ($this->allnotes as $io => $each) { $cells = wf_TableCell($each['createdate']); $cells .= wf_TableCell($each['reminddate']); $cells .= wf_TableCell($each['remindtime']); $cells .= wf_TableCell(web_bool_led($each['active']), '', '', 'sorttable_customkey="' . $each['active'] . '"'); $viewLink = wf_Link(self::URL_ME . '&shownote=' . $each['id'], $this->cutString(htmlentities($each['text'], ENT_COMPAT, "UTF-8"), 100), false, ''); $cells .= wf_TableCell($viewLink); $actLinks = ''; if ($this->notesPreview) { //deletion dialog $deletingPreview = nl2br($this->cutString(strip_tags($each['text']), 50)); $deletingPreview .= wf_delimiter(); $deletingPreview .= wf_JSAlert(self::URL_ME . '&delete=' . $each['id'], web_delete_icon() . ' ' . __('Delete'), $messages->getDeleteAlert(), '', 'ubButton') . ' '; $deletingPreview .= wf_Link(self::URL_ME, wf_img('skins/back.png') . ' ' . __('Cancel'), false, 'ubButton'); $deletingDialog = wf_modalAuto(web_delete_icon(), __('Delete'), $deletingPreview); $actLinks .= $deletingDialog; } //edit control $actLinks .= wf_Link(self::URL_ME . '&editform=' . $each['id'], web_edit_icon(), false) . ' '; if ($this->notesPreview) { //preview dialog $previewContent = nl2br($this->makeFullNoteLink($this->cutString(strip_tags(htmlentities($each['text'], ENT_COMPAT, "UTF-8")), self::PREVIEW_LEN), $each['id'])); $actLinks .= wf_modal(wf_img('skins/icon_search_small.gif', __('Preview')), __('Preview'), $previewContent, '', '640', '480'); } $cells .= wf_TableCell($actLinks); $rows .= wf_TableRow($cells, 'row5'); } } $result .= wf_TableBody($rows, '100%', 0, 'sortable'); return ($result); } /** * Returns available sticky notes list as full calendar * * @return string */ public function renderListCalendar() { $calendarData = ''; if (!empty($this->allnotes)) { foreach ($this->allnotes as $io => $each) { $timestamp = strtotime($each['createdate']); $date = date("Y, n-1, j", $timestamp); $remindTime = ''; if ($each['active'] == 1) { $coloring = "className : 'undone',"; } else { $coloring = ''; } if (!empty($each['reminddate'])) { $remindtimestamp = strtotime($each['reminddate']); $reminddate = date("Y, n-1, j", $remindtimestamp); $remindTime = (!empty($each['remindtime'])) ? date("H:i", strtotime($each['remindtime'])) : ''; $textLenght = 48; } else { $reminddate = $date; $textLenght = 24; } $shortText = $each['text']; $shortText = str_replace("\n", '', $shortText); $shortText = str_replace("\r", '', $shortText); $shortText = str_replace("'", '`', $shortText); $shortText = strip_tags($shortText); $shortText = $this->cutString($shortText, $textLenght); $calendarData .= " { title: '" . $remindTime . " " . $shortText . " ', url: '" . self::URL_ME . "&backurl=calendar&shownote=" . $each['id'] . "', start: new Date(" . $reminddate . "), end: new Date(" . $reminddate . "), " . $coloring . " }, "; } } $result = wf_FullCalendar($calendarData); return ($result); } /** * Renders existing revelations list with some controls * * @return string */ public function renderRevelationsList() { $result = ''; $messages = new UbillingMessageHelper(); $daysOfWeek = daysOfWeek(true); if (!empty($this->allRevelations)) { $cells = wf_TableCell(__('Creation date')); $cells .= wf_TableCell(__('Day') . ' ' . __('From')); $cells .= wf_TableCell(__('Day') . ' ' . __('To')); $cells .= wf_TableCell(__('Day of week')); $cells .= wf_TableCell(__('Status')); $cells .= wf_TableCell(__('Text')); $cells .= wf_TableCell(__('Actions')); $rows = wf_TableRow($cells, 'row1'); foreach ($this->allRevelations as $io => $each) { $cells = wf_TableCell($each['createdate']); $dayFrom = (!empty($each['dayfrom'])) ? $each['dayfrom'] : ''; $dayTo = (!empty($each['dayto'])) ? $each['dayto'] : ''; $dayWeek = (!empty($each['dayweek'])) ? $each['dayweek'] : 1488; //any day of week $cells .= wf_TableCell($dayFrom); $cells .= wf_TableCell($dayTo); $cells .= wf_TableCell($daysOfWeek[$dayWeek]); $cells .= wf_TableCell(web_bool_led($each['active'])); $previewContent = nl2br($this->cutString(strip_tags($each['text']), self::PREVIEW_LEN)); $cells .= wf_TableCell($previewContent); $actiLinks = wf_JSAlert(self::URL_REVELATIONS . '&deleterev=' . $each['id'], web_delete_icon(), $messages->getDeleteAlert()) . ' '; $actiLinks .= wf_Link(self::URL_REVELATIONS . '&editrev=' . $each['id'], web_edit_icon()); $cells .= wf_TableCell($actiLinks); $rows .= wf_TableRow($cells, 'row5'); } $result .= wf_TableBody($rows, '100%', 0, 'sortable'); } else { $result .= $messages->getStyledMessage(__('Nothing to show'), 'info'); } return ($result); } /** * Creates new note in database * * @param string $remindDate * @param int $activity * @param string $text */ protected function createNote($remindDate, $remindTime, $activity, $text) { $createDate = curdatetime(); $owner = mysql_real_escape_string($this->myLogin); $text = strip_tags($text); $text = mysql_real_escape_string($text); $activity = vf($activity, 3); $createDate = mysql_real_escape_string($createDate); if (!empty($remindDate)) { $remindDate = "'" . mysql_real_escape_string($remindDate) . "'"; } else { $remindDate = 'NULL'; } if (!empty($remindTime)) { $remindTime = "'" . mysql_real_escape_string($remindTime) . "'"; } else { $remindTime = 'NULL'; } $query = "INSERT INTO `stickynotes` (`id`, `owner`, `createdate`, `reminddate`,`remindtime`, `active`, `text`) " . "VALUES (NULL, '" . $owner . "', '" . $createDate . "', " . $remindDate . ", " . $remindTime . " , '" . $activity . "', '" . $text . "');"; nr_query($query); $this->flushCache(); } /** * Creates new sticky revelation in database * * @param int $dayFrom * @param int $dayTo * @param int $activity * @param string $text * @param string $showTo * @param int $dayWeek * * @return void */ protected function createRevelation($dayFrom, $dayTo, $activity, $text, $showTo, $dayWeek) { $owner = $this->myLogin; $createDate = curdatetime(); $text = strip_tags($text); $text = mysql_real_escape_string($text); $activity = vf($activity, 3); if (!empty($dayFrom)) { $dayFrom = "'" . mysql_real_escape_string($dayFrom) . "'"; } else { $dayFrom = 'NULL'; } if (!empty($dayTo)) { $dayTo = "'" . mysql_real_escape_string($dayTo) . "'"; } else { $dayTo = 'NULL'; } if ($dayWeek == 1488) { $dayWeek = 0; //replace any day of week to zero } $query = "INSERT INTO `stickyrevelations` (`id`, `owner`, `showto`,`createdate`, `dayfrom`,`dayto`,`dayweek` ,`active`, `text`) " . "VALUES (NULL, '" . $owner . "', '" . $showTo . "' ,'" . $createDate . "', " . $dayFrom . ", " . $dayTo . " , '" . $dayWeek . "', '" . $activity . "', '" . $text . "');"; nr_query($query); $this->flushCache(); } /** * Renders notify container with some text inside * * @param string $text * @param int $offsetLeft * @param bool $isRevelation * * @return string */ protected function renderStickyNote($text, $offsetLeft = 0, $isRevelation = false) { $result = ''; if (!empty($text)) { if ($offsetLeft) { $offsetLeft = 35 + $offsetLeft . 'px'; $dividedLeftOffset = vf($offsetLeft, 3) / 5; $roundedLeftOffset = round($dividedLeftOffset); $offsetTop = 25 + $roundedLeftOffset . 'px'; } else { $offsetLeft = '35px'; $offsetTop = '30px'; } $result .= wf_tag('div', false, 'stickynote', 'style="margin:' . $offsetTop . ' ' . $offsetLeft . ' 20px 20px;"'); if ($isRevelation) { $result .= wf_img('skins/pigeon_icon.png') . wf_tag('br'); } else { $result .= wf_Link(self::URL_ME, wf_img('skins/pushpin.png'), false, '') . wf_tag('br'); } $result .= wf_tag('div', false, 'stickynotetext'); $result .= $text; $result .= wf_tag('div', true); $result .= wf_tag('div', true); } return ($result); } /** * Returns control panel * * @return string */ public function panel() { $result = ''; if (!wf_CheckGet(array('revelations'))) { $result .= wf_modalAuto(wf_img('skins/pushpin.png') . ' ' . __('Create new personal note'), __('Create new personal note'), $this->createForm(), 'ubButton'); if (wf_CheckGet(array('calendarview'))) { $result .= wf_Link(self::URL_ME, wf_img('skins/icon_table.png') . ' ' . __('Grid view'), false, 'ubButton'); } else { $result .= wf_Link(self::URL_ME . '&calendarview=true', wf_img('skins/icon_calendar.gif') . ' ' . __('As calendar'), false, 'ubButton'); } if ($this->revelationsFlag) { if (cfr('REVELATIONS')) { $result .= wf_link(self::URL_REVELATIONS, wf_img('skins/pigeon_icon.png') . ' ' . __('Revelations'), false, 'ubButton'); } } } else { if (!wf_CheckGet(array('editrev'))) { if (ubRouting::get('backurl') == 'calendar') { $result .= wf_BackLink(self::URL_ME . '&calendarview=true'); } else { $result .= wf_BackLink(self::URL_ME); } } else { $result .= wf_BackLink(self::URL_REVELATIONS); } if (cfr('REVELATIONS')) { $result .= wf_modalAuto(web_icon_create() . ' ' . __('Create'), __('Create'), $this->revelationCreateForm(), 'ubButton'); } } return ($result); } /** * Returns note create form * * @return string */ protected function createForm() { $inputs = wf_tag('label') . __('Text') . ': ' . wf_tag('br') . wf_tag('label', true); $inputs .= wf_TextArea('newtext', '', '', true, '50x15'); $inputs .= wf_CheckInput('newactive', __('Create note as active'), true, true); $inputs .= wf_DatePickerPreset('newreminddate', ''); $inputs .= wf_tag('label') . __('Remind only after this date') . wf_tag('label', true); $inputs .= wf_tag('br'); $inputs .= wf_TimePickerPreset('newremindtime', '', __('Remind time'), false); $inputs .= wf_tag('br'); $inputs .= wf_tag('br'); $inputs .= wf_Submit(__('Create')); $result = wf_Form('', 'POST', $inputs, 'glamour'); return ($result); } /** * Returns revelation creation form * * @return string */ protected function revelationCreateForm() { $daysWeek = daysOfWeek(true); $days = array('' => '-'); for ($i = 1; $i <= 31; $i++) { $days[$i] = $i; } $alladmins = rcms_scandir(USERS_PATH); $adminNames = ts_GetAllEmployeeLoginsCached(); $adminNames = unserialize($adminNames); $inputs = wf_tag('label') . __('Text') . ': ' . wf_tag('br') . wf_tag('label', true); $inputs .= wf_TextArea('newrevelationtext', '', '', true, '50x15'); $inputs .= wf_CheckInput('newrevelationactive', __('Active'), true, true); $inputs .= wf_tag('label') . __('Remind only between this days of month') . ' ' . wf_tag('label', true) . ' '; $inputs .= wf_Selector('newrevelationdayfrom', $days, __('From'), '', false) . ' '; $inputs .= wf_Selector('newrevelationdayto', $days, __('To'), '', true) . ' '; $inputs .= wf_Selector('newrevelationdayweek', $daysWeek, __('Day of week'), '', true); $inputs .= wf_tag('br'); if (!empty($alladmins)) { foreach ($alladmins as $io => $eachAdmin) { $eachAdminName = (isset($adminNames[$eachAdmin])) ? $adminNames[$eachAdmin] : $eachAdmin; $inputs .= wf_CheckInput('newrevelationshowto[' . $eachAdmin . ']', $eachAdminName, false, false) . ' ' . wf_tag('br'); } } $inputs .= wf_tag('br'); $inputs .= wf_Submit(__('Create')); $result = wf_Form('', 'POST', $inputs, 'glamour'); return ($result); } /** * Returns revelation editing form * * @return string */ public function revelationEditForm($id) { $id = vf($id, 3); $result = ''; $messages = new UbillingMessageHelper(); if (isset($this->allRevelations[$id])) { $daysWeek = daysOfWeek(true); $days = array('' => '-'); for ($i = 1; $i <= 31; $i++) { $days[$i] = $i; } $revData = $this->allRevelations[$id]; $revDayWeek = (!empty($revData['dayweek'])) ? $revData['dayweek'] : 1488; //zero value in database $alladmins = rcms_scandir(USERS_PATH); $adminNames = ts_GetAllEmployeeLoginsCached(); $adminNames = unserialize($adminNames); $inputs = wf_tag('label') . __('Text') . ': ' . wf_tag('br') . wf_tag('label', true); $inputs .= wf_HiddenInput('editrevelationid', $id); $inputs .= wf_TextArea('editrevelationtext', '', $revData['text'], true, '50x15'); $inputs .= wf_CheckInput('editrevelationactive', __('Active'), true, $revData['active']); $inputs .= wf_tag('label') . __('Remind only between this days of month') . ' ' . wf_tag('label', true) . ' '; $inputs .= wf_Selector('editrevelationdayfrom', $days, __('From'), $revData['dayfrom'], false) . ' '; $inputs .= wf_Selector('editrevelationdayto', $days, __('To'), $revData['dayto'], true) . ' '; $inputs .= wf_Selector('editrevelationdayweek', $daysWeek, __('Day of week'), $revData['dayweek'], true); $inputs .= wf_tag('br'); if (!empty($alladmins)) { foreach ($alladmins as $io => $eachAdmin) { $stateFlag = (ispos($revData['showto'], ' ' . $eachAdmin . ' ')) ? true : false; $eachAdminName = (isset($adminNames[$eachAdmin])) ? $adminNames[$eachAdmin] : $eachAdmin; $inputs .= wf_CheckInput('editrevelationshowto[' . $eachAdmin . ']', $eachAdminName, false, $stateFlag) . ' '; } } $inputs .= wf_tag('br'); $inputs .= wf_tag('br'); $inputs .= wf_Submit(__('Save')); $result .= wf_Form('', 'POST', $inputs, 'glamour'); } else { $result .= $messages->getStyledMessage(__('Something went wrong') . ': EX_ID_NOT_EXISTS', 'error'); } return ($result); } /** * Saves changes of revelation in database * * @return void */ public function saveMyRevelation() { if (wf_CheckPost(array('editrevelationtext', 'editrevelationid'))) { $revelationId = vf($_POST['editrevelationid'], 3); $revelationData = $this->getRevelationData($revelationId); if (!empty($revelationData)) { $where = "WHERE `id`='" . $revelationId . "';"; //text $text = strip_tags($_POST['editrevelationtext']); $oldText = $revelationData['text']; if ($text != $oldText) { simple_update_field('stickyrevelations', 'text', $text, $where); log_register("REVELATION CHANGED TEXT [" . $revelationId . "]"); } //days intervals $dayFrom = $_POST['editrevelationdayfrom']; $oldDayFrom = $revelationData['dayfrom']; if ($dayFrom != $oldDayFrom) { simple_update_field('stickyrevelations', 'dayfrom', $dayFrom, $where); log_register("REVELATION CHANGED DAYFROM [" . $revelationId . "] ON " . $dayFrom . ""); } $dayTo = $_POST['editrevelationdayto']; $oldDayTo = $revelationData['dayto']; if ($dayTo != $oldDayTo) { simple_update_field('stickyrevelations', 'dayto', $dayTo, $where); log_register("REVELATION CHANGED DAYTO [" . $revelationId . "] ON " . $dayTo . ""); } $dayWeek = ubRouting::post('editrevelationdayweek', 'int'); if ($dayWeek == 1488) { $dayWeek = 0; //any day of week } $oldDayWeek = $revelationData['dayweek']; if ($dayWeek != $oldDayWeek) { simple_update_field('stickyrevelations', 'dayweek', $dayWeek, $where); log_register("REVELATION CHANGED DAYWEEK [" . $revelationId . "] ON " . $dayWeek . ""); } //activity flag $activity = (isset($_POST['editrevelationactive'])) ? 1 : 0; $oldActivity = $revelationData['active']; if ($activity != $oldActivity) { simple_update_field('stickyrevelations', 'active', $activity, $where); log_register("REVELATION CHANGED ACTIVE [" . $revelationId . "] ON " . $activity . ""); } //admins selection $showTo = ''; $oldsShowTo = $revelationData['showto']; if (!empty($_POST['editrevelationshowto'])) { foreach ($_POST['editrevelationshowto'] as $io => $each) { $showTo .= ' ' . $io . ' '; } } if ($showTo != $oldsShowTo) { simple_update_field('stickyrevelations', 'showto', $showTo, $where); log_register("REVELATION CHANGED SHOWTO [" . $revelationId . "]"); } $this->flushCache(); } } } /** * Creates new revelation in database * * @return void */ public function addMyRevelation() { if (wf_CheckPost(array('newrevelationtext'))) { $dayFrom = (!empty($_POST['newrevelationdayfrom'])) ? $_POST['newrevelationdayfrom'] : ''; $dayTo = (!empty($_POST['newrevelationdayto'])) ? $_POST['newrevelationdayto'] : ''; $dayWeek = ubRouting::post('newrevelationdayweek', 'int'); if ($dayWeek == 1488) { $dayWeek = 0; //any day of week } $showTo = ''; if (!empty($_POST['newrevelationshowto'])) { foreach ($_POST['newrevelationshowto'] as $io => $each) { $showTo .= ' ' . $io . ' '; } } $activity = (isset($_POST['newrevelationactive'])) ? 1 : 0; $text = $_POST['newrevelationtext']; $this->createRevelation($dayFrom, $dayTo, $activity, $text, $showTo, $dayWeek); $newId = simple_get_lastid('stickyrevelations'); log_register("REVELATION CREATE [" . $newId . "]"); } } /** * Returns edit form for some sticky note * * @param int $noteId * @param bool $wideForm * * @return string */ public function editForm($noteId, $wideForm = false) { $noteData = $this->getNoteData($noteId); if (!empty($noteData)) { $noteText = htmlentities($noteData['text'], ENT_COMPAT, "UTF-8"); $textAreaDimensions = ($wideForm) ? '80x25' : '50x15'; $inputs = wf_HiddenInput('editnoteid', $noteId); $inputs .= wf_tag('label') . __('Text') . ': ' . wf_tag('br') . wf_tag('label', true); $inputs .= wf_TextArea('edittext', '', $noteText, true, $textAreaDimensions); $checkState = ($noteData['active'] == 1) ? true : false; $inputs .= wf_CheckInput('editactive', __('Personal note active'), true, $checkState); $inputs .= wf_DatePickerPreset('editreminddate', $noteData['reminddate']); $inputs .= wf_tag('label') . __('Remind only after this date') . wf_tag('label', true); $inputs .= wf_tag('br'); $inputs .= wf_TimePickerPreset('editremindtime', $noteData['remindtime'], __('Remind time'), true); $inputs .= wf_tag('br'); $inputs .= wf_tag('br'); $inputs .= wf_Submit(__('Save')); $result = wf_Form('', 'POST', $inputs, 'glamour'); } else { $result = __('Strange exeption'); } return ($result); } /** * Returns sticky note deletion dialog to render below of editing form * * @param int $noteId * * @return string */ public function getEditFormDeleteControls($noteId) { $result = ''; if (!$this->notesPreview) { $messages = new UbillingMessageHelper(); $noteData = $this->getNoteData($noteId); if (!empty($noteData)) { $deletingPreview = nl2br($this->cutString(strip_tags($noteData['text']), 50)); $deletingPreview .= wf_delimiter(); $deletingPreview .= wf_JSAlert(self::URL_ME . '&delete=' . $noteData['id'], web_delete_icon() . ' ' . __('Delete'), $messages->getDeleteAlert(), '', 'ubButton') . ' '; $deletingPreview .= wf_Link(self::URL_ME . '&editform=' . $noteId, wf_img('skins/back.png') . ' ' . __('Cancel'), false, 'ubButton'); $deletingDialog = wf_modalAuto(web_delete_icon() . ' ' . __('Delete'), __('Delete'), $deletingPreview, 'ubButton'); $result .= $deletingDialog; } } return($result); } /** * Creates new personal note in database * * @return void */ public function addMyNote() { if (wf_CheckPost(array('newtext'))) { $remindDate = (!empty($_POST['newreminddate'])) ? $_POST['newreminddate'] : ''; $remindTime = (!empty($_POST['newremindtime'])) ? $_POST['newremindtime'] : ''; $activity = (isset($_POST['newactive'])) ? 1 : 0; $text = $_POST['newtext']; $this->createNote($remindDate, $remindTime, $activity, $text); $newId = simple_get_lastid('stickynotes'); log_register("STICKY CREATE [" . $newId . "]"); } } /** * Saves changes of note in database * * @return void */ public function saveMyNote() { if (wf_CheckPost(array('edittext', 'editnoteid'))) { $noteId = vf($_POST['editnoteid'], 3); $noteData = $this->getNoteData($noteId); if (!empty($noteData)) { $where = "WHERE `id`='" . $noteId . "';"; //text $text = strip_tags($_POST['edittext']); $oldText = $noteData['text']; if ($text != $oldText) { simple_update_field('stickynotes', 'text', $text, $where); log_register("STICKY CHANGED TEXT [" . $noteId . "]"); $this->flushCache(); } //remind date $remindDate = $_POST['editreminddate']; $oldRemindDate = $noteData['reminddate']; if ($remindDate != $oldRemindDate) { if (!empty($remindDate)) { $remindDate = "'" . mysql_real_escape_string($remindDate) . "'"; } else { $remindDate = 'NULL'; } $query = "UPDATE `stickynotes` SET `reminddate` = " . $remindDate . " " . $where; // ugly hack, i know nr_query($query); log_register("STICKY CHANGED REMINDDATE [" . $noteId . "] ON " . $remindDate . ""); $this->flushCache(); } //remind time $remindTime = $_POST['editremindtime']; $oldRemindTime = $noteData['remindtime']; if (ispos($oldRemindTime, ':')) { $oldRemindTime = explode(':', $oldRemindTime); $oldRemindTime = $oldRemindTime[0] . ':' . $oldRemindTime[1]; } if ($remindTime != $oldRemindTime) { if (!empty($remindTime)) { $remindTime = "'" . mysql_real_escape_string($remindTime) . "'"; } else { $remindTime = 'NULL'; } $query = "UPDATE `stickynotes` SET `remindtime` = " . $remindTime . " " . $where; nr_query($query); log_register("STICKY CHANGED REMINDTIME [" . $noteId . "] ON " . $remindTime . ""); $this->flushCache(); } //activity flag $activity = (isset($_POST['editactive'])) ? 1 : 0; $oldActivity = $noteData['active']; if ($activity != $oldActivity) { simple_update_field('stickynotes', 'active', $activity, $where); log_register("STICKY CHANGED ACTIVE [" . $noteId . "] ON " . $activity . ""); $this->flushCache(); } } } } /** * Deletes some note by its ID * * @param int $id * * @return void */ public function deleteNote($id) { $id = vf($id, 3); if (!empty($id)) { $query = "DELETE FROM `stickynotes` WHERE `id`='" . $id . "';"; nr_query($query); log_register("STICKY DELETE [" . $id . "]"); $this->flushCache(); } } /** * Deletes some revelation by its ID * * @param int $id * * @return void */ public function deleteRevelation($id) { $id = vf($id, 3); if (!empty($id)) { $query = "DELETE FROM `stickyrevelations` WHERE `id`='" . $id . "';"; nr_query($query); log_register("REVELATION DELETE [" . $id . "]"); $this->flushCache(); } } /** * Returns full text of sticky note with check of owner * * @param int $noteId * * @return string */ public function renderNote($noteId) { $noteId = vf($noteId, 3); $result = ''; $noteData = $this->getNoteData($noteId); if (!empty($noteData)) { $messages = new UbillingMessageHelper(); if ($noteData['owner'] == $this->myLogin) { $result = htmlentities($noteData['text'], ENT_COMPAT, "UTF-8"); $result = strip_tags($result); $result = nl2br($result); $result .= wf_delimiter(2); $backUrl = ''; $customLink = ''; if (ubRouting::get('backurl') == 'calendar') { $backUrl .= '&calendarview=true'; $customLink .= '&backurl=calendar'; } $result .= wf_BackLink(self::URL_ME . $backUrl); $result .= wf_modalAuto(web_edit_icon() . ' ' . __('Edit'), __('Edit'), $this->editForm($noteId), 'ubButton') . ' '; $deletingPreview = nl2br($this->cutString(strip_tags($noteData['text']), 50)); $deletingPreview .= wf_delimiter(); $deletingPreview .= wf_JSAlert(self::URL_ME . $customLink . '&delete=' . $noteData['id'], web_delete_icon() . ' ' . __('Delete'), $messages->getDeleteAlert(), '', 'ubButton') . ' '; $deletingPreview .= wf_Link(self::URL_ME . $customLink . '&shownote=' . $noteData['id'], wf_img('skins/back.png') . ' ' . __('Cancel'), false, 'ubButton'); $deletingDialog = wf_modalAuto(web_delete_icon() . ' ' . __('Delete'), __('Delete'), $deletingPreview, 'ubButton'); $result .= $deletingDialog; } else { $result = __('Access denied'); } } else { $result = __('Strange exeption'); } return ($result); } /** * Returns note text with link to full note view if required * * @param int $text * @param int $noteId * * @return string */ protected function makeFullNoteLink($text, $noteId) { $ending = substr($text, -3); $result = $text; if ($ending == '...') { $noteId = vf($noteId, 3); if (!empty($noteId)) { $noteViewLink = wf_link(self::URL_ME . '&shownote=' . $noteId, '...', false, '', 'title="' . __('View full note') . '"'); $result = substr_replace($text, $noteViewLink, -3, 3); } } return ($result); } /** * Returns available taskbar notifications as floating widget * * @return string */ public function renderTaskbarNotify() { $result = ''; $output = ''; $delimiterId = '{' . zb_rand_string(8) . '}'; $delimiterCode = ''; $offsetLeft = 0; if (!empty($this->activenotes)) { foreach ($this->activenotes as $io => $each) { $noteDate = $each['reminddate']; $noteTime = $each['remindtime']; if (!empty($noteTime)) { if (!empty($noteDate)) { $noteDate = $noteDate . ' ' . $noteTime; } else { $noteDate = curdate() . ' ' . $noteTime; } } if (empty($noteDate) OR ( strtotime($noteDate) <= time())) { $tmpText = $each['text']; $tmpText = htmlentities($tmpText, ENT_COMPAT, "UTF-8"); $tmpText = strip_tags($tmpText); $output = $tmpText; $output .= $delimiterId; $output = str_replace($delimiterId, $delimiterCode, $output); $output = $this->cutString($output, self::PREVIEW_LEN); $output = $this->makeFullNoteLink($output, $each['id']); $output = nl2br($output); $result .= $this->renderStickyNote($output, $offsetLeft); $offsetLeft = $offsetLeft + 10; } } } if (!empty($this->allRevelations)) { foreach ($this->allRevelations as $io => $each) { $needToShow = false; $curDay = date("j"); $curDayOfWeek = date("w"); if ($curDayOfWeek == 0) { $curDayOfWeek = 7; //thats is sunday! } if (!empty($each['dayfrom']) AND (!empty($each['dayto']))) { if (($curDay >= $each['dayfrom']) AND ( $curDay <= $each['dayto'])) { $needToShow = true; } } if (!empty($each['dayfrom']) AND ( empty($each['dayto']))) { if ($curDay >= $each['dayfrom']) { $needToShow = true; } } if (empty($each['dayfrom']) AND (!empty($each['dayto']))) { if ($curDay <= $each['dayto']) { $needToShow = true; } } if (empty($each['dayfrom']) AND ( empty($each['dayto']))) { $needToShow = true; } if (!empty($each['dayweek'])) { if (empty($each['dayfrom']) AND empty($each['dayto'])) { //just check for day of week on empty dates if ($curDayOfWeek == $each['dayweek']) { $needToShow = true; } else { $needToShow = false; } } else { //or guess is day-time interval valid if ($needToShow) { if ($curDayOfWeek == $each['dayweek']) { $needToShow = true; } else { $needToShow = false; //now is wrong day :( } } } } if ($needToShow) { $tmpText = $each['text']; $tmpText = strip_tags($tmpText); $output = $tmpText; $output .= $delimiterId; $output = str_replace($delimiterId, $delimiterCode, $output); $output = $this->cutString($output, self::PREVIEW_LEN); $output = nl2br($output); $result .= $this->renderStickyNote($output, $offsetLeft, true); $offsetLeft = $offsetLeft + 10; } } } if (!empty($result)) { $result .= wf_tag('script'); $result .= '$( function() { $( ".stickynote" ).draggable({ scroll: false, cancel: ".stickynotetext" }); } );'; $result .= wf_tag('script', true); } return ($result); } } |