public function __construct(array $urlParams = []) { // Static saved the application name $appName = Helper::setAppName('owncollab_talks'); parent::__construct($appName, $urlParams); $container = $this->getContainer(); /** * Checks the configuration file, if it does not match the server parameters, * updates the configuration file */ $container->registerService('Configurator', function (IAppContainer $c) use($appName) { $configurator = new Configurator(); $this->updateConfig($configurator); return $configurator; }); /** * Core for application registers service */ $container->registerService('UserId', function (IContainer $c) { /** @var \OC\Server $server */ /** @var \OCP\IUser $user */ $server = $c->query('ServerContainer'); $user = $server->getUserSession()->getUser(); return $user ? $user->getUID() : ''; }); $container->registerService('isAdmin', function (DIContainer $c) { /** @var \OC\Server $server */ /** @var \OCP\IUser $user */ $server = $c->query('ServerContainer'); $user = $server->getUserSession()->getUser(); if ($user) { return $c->getServer()->getGroupManager()->isAdmin($user->getUID()); } else { return false; } }); $container->registerService('L10N', function (IAppContainer $c) use($appName) { return $c->getServer()->getL10N($appName); }); /** * Database Layer */ $container->registerService('Connect', function (DIContainer $c) { return new Connect(\OC::$server->getDatabaseConnection()); }); /** * Controllers */ $container->registerService('ApiController', function (DIContainer $c) { return new ApiController($c->query('AppName'), $c->query('Request'), $c->query('UserId'), $c->query('isAdmin'), $c->query('L10N'), $c->query('Connect'), $c->query('Configurator')); }); $container->registerService('MainController', function (DIContainer $c) { return new MainController($c->query('AppName'), $c->query('Request'), $c->query('UserId'), $c->query('isAdmin'), $c->query('L10N'), $c->query('Connect'), $c->query('Configurator')); }); }
/** * MainController constructor. */ public function __construct($userid) { $this->connect = new Connect(Helper::getConnection()); $this->Messages = $this->connect->messages(); $this->Users = $this->connect->users(); $this->Files = $this->connect->files(); $this->userId = $userid; $this->datadir = $_SERVER['DOCUMENT_ROOT'] . "/data"; $this->readTmpDir('tmp'); if (!empty($this->filesList)) { $this->readFiles(); } if (!empty($this->sharedList)) { $this->addFilesToMessage(); } }
/** * [GROUP_ID]-group@[MAIL_HOST_NAME] (Example: "*****@*****.**") * @param $gid */ public function onPreCreateGroup($gid) { if (!empty($gid)) { $prefix = $this->configurator->get('group_prefix'); $email = $this->encodeUidToEmail($gid . $prefix); $result = $this->mtaConnector->insertVirtualUser($email, 'pass' . strtolower($gid)); if (!$result) { $errorMessage = 'Error adding user data in the MTA database, '; if ($result === false) { $errorMessage .= 'the domain specified in the configuration can not be found'; } else { $errorMessage .= 'possible SQL query error'; } Helper::mailParserLogerError($errorMessage); } else { Helper::mailParserLoger('Added new virtual user: ' . $email); } } }
/** * @param array $message * @param array $subscribers * Send the message to each user * in subscribers list */ public function sendMessage($message, $subscribers, $from = '', $messagedata = NULL) { //if (!is_array($subscribers) && is_string($subscribers)) { // $subscribers = explode(',', $subscribers); //} $um = $this->connect->userMessage(); $users = $this->connect->users(); //$isgroup = $users->isGroupSelected($subscribers); foreach ($subscribers as $s => $subscriber) { if (is_string($s) && !empty($s)) { $data = ['uid' => $s, 'mid' => $message, 'status' => 0]; $um->save($data); } } if (!empty($messagedata)) { foreach ($subscribers as $s => $subscriber) { $sent = Helper::messageSend($subscriber, $from, $messagedata, $this->getProjectName(), true); } } return $sent; }
?> </span> </span> <span currentuploads="0" class="uploadtext"></span> </a> <?php if ($file['mimetype'] == 2) { // If folder ?> <div id="folder-files"></div> <?php } ?> </td> <td style="color:rgb(160,160,160); text-align:right;" class="filesize"><?php echo \OCA\Owncollab_Talks\Helper::sizeRoundedString($file['size']); ?> </td> <td class="date"> <span data-original-title="<?php echo date('F d, Y h:i A', $file['mtime']); ?> " style="color:rgb(51,51,51)" title="" class="modified"><?php p($l->t($modified['key'], $modified['value'])); ?> </span> </td> </tr> <?php } ?>
/read/<?php echo $talk['id']; ?> "><?php echo $talk['title']; ?> </a></div> <div class="talk-author">started from <?php echo $startedfrom; ?> on <?php echo date("d.m.Y H:i", strtotime($talk['date'])); ?> </div> <div class="talk-preview"><?php echo \OCA\Owncollab_Talks\Helper::firstWords($talk['text'], 10); ?> </div> <div class="talk-answers"> <?php foreach ($_['answers'] as $a => $answer) { ?> <div class="talk-author">user <?php echo $answer['author']; ?> answered on <?php echo date("d.m.Y H:i", strtotime($answer['date'])); ?> </div> <div class="talk-title"><a href="/index.php/apps/<?php echo $_['appname'];
/** * Share selected files with selected users */ public function shareFiles() { $this->prepareUsersForShare(); $files = array(); foreach ($this->files as $id) { $files[] = $file = $this->files->getById($id)[0]; $fileOwner = \OC\Files\Filesystem::getOwner($file['path']); $sharetype = $file['mimetype'] == 2 ? 'folder' : 'file'; $sharedWith = \OCP\Share::getUsersItemShared($sharetype, $file['fileid'], $fileOwner, false, true); foreach ($this->subscriberToShare as $userid) { if (isset($file['fileid']) && is_array($file) && !in_array($userid, $sharedWith) && !($userid == $this->author) && ($fileOwner == $this->author || $file['permissions'] >= 16)) { \OCP\Share::shareItem($sharetype, $file['fileid'], \OCP\Share::SHARE_TYPE_USER, $userid, 1); } } } $this->forSend['messagedata']['attachlinks'] = Helper::makeAttachLinks($this->files, $files); }
/** * @NoAdminRequired * @NoCSRFRequired * @return TemplateResponse */ public function read($id) { $attachements_info = []; $message = $this->connect->messages()->getById((int) $id); $parent = $this->connect->messages()->getById((int) $message['rid']); if (!empty($message['attachements'])) { $attach = []; try { $attach = json_decode($message['attachements'], true); } catch (\Exception $e) { var_dump('Exception: ' . $e->getMessage()); } foreach ($attach as $at) { $file = $this->connect->files()->getInfoById($at); $fileInfo = false; $filePath = str_replace('files/', '', $file['path']); try { $fileInfo = \OC\Files\Filesystem::getFileInfo($filePath); } catch (\Exception $e) { } //var_dump($file); if (!$fileInfo) { $itemSource = \OCP\Share::getItemSharedWithBySource('file', $at); if (is_array($itemSource) && !empty($itemSource)) { $fileInfo = \OC\Files\Filesystem::getFileInfo($itemSource['file_target']); $filePath = $itemSource['file_target']; } } if (!$fileInfo) { continue; } $icon = '/core/img/filetypes/image.svg'; // \OCA\Files\Helper::determineIcon($fileInfo); $attachements_info[] = ['preview' => $icon, 'link' => "/remote.php/webdav/{$filePath}", 'file' => $file, 'info' => \OCA\Files\Helper::formatFileInfo($fileInfo)]; } } Helper::cookies('goto_message', $message['rid'] == 0 ? $message['id'] : $parent['id'], 0, '/'); $data = ['menu' => 'all', 'content' => 'read', 'message' => $message, 'parent' => $parent, 'attachements_info' => $attachements_info]; return new TemplateResponse($this->appName, 'main', $data); }
$l = \OC::$server->getL10N('owncollab_talks'); return ['id' => $appName, 'order' => 10, 'href' => $urlGenerator->linkToRoute($appName . '.main.index'), 'icon' => $urlGenerator->imagePath($appName, 'app.svg'), 'name' => $l->t('Talks')]; }); /** * Loading translations * The string has to match the app's folder name */ Util::addTranslations($appName); /** * Common styles and scripts */ if (Helper::isAppPage($appName)) { Util::addStyle($appName, 'common'); Util::addScript($appName, 'inc'); Util::addScript($appName, 'application'); } /** * Detect and appoints styles and scripts for particular app page */ $currentUri = Helper::getCurrentUri($appName); if ($currentUri == '/') { } /** * Set timezone to 'Berlin' * It must be set in the ownCloud config */ date_default_timezone_set('Europe/Berlin'); /** * Checking and saving the files send by email */ //$checkFiles = new TempFiles();
/** * Share selected files with selected users */ public function shareFiles() { $this->prepareUsersForShare(); $files = array(); foreach ($this->files as $id) { $file = $this->Files->getById($id)[0]; $fileOwner = \OC\Files\Filesystem::getOwner($file['path']); $sharetype = $file['mimetype'] == 2 ? 'folder' : 'file'; $sharedWith = \OCP\Share::getUsersItemShared($sharetype, $file['fileid'], $fileOwner, false, true); $isenabled = \OCP\Share::isEnabled(); $isallowed = \OCP\Share::isResharingAllowed(); foreach ($this->subscriberToShare as $userid) { if (isset($file['fileid']) && is_array($file) && !in_array($userid, $sharedWith) && !($userid == $this->author) && ($fileOwner == $this->author || $file['permissions'] >= 16) && $isenabled && $isallowed) { //try { \OCP\Share::shareItem($sharetype, $file['fileid'], \OCP\Share::SHARE_TYPE_USER, $userid, 1); $files[] = $file['fileid']; //} //catch (\Exception $e) { // echo $e->getMessage(); //} } } } $this->forSaveData['attachements'] = $files; $this->fileLinks = Helper::makeAttachLinks($files, $this->Files); //print_r($this->fileLinks); //file_put_contents('/tmp/inb.log', "\n\nfileLinks : "print_r($this->fileLinks, true)."\n", FILE_APPEND); /* foreach ($_POST['select-files'] as $id => $on) { if ($on == 'on') { $file = $files->getById($id)[0]; $fileOwner = \OC\Files\Filesystem::getOwner($file['path']); $sharetype = $file['mimetype'] == 2 ? 'folder' : 'file'; $sharedWith = \OCP\Share::getUsersItemShared($sharetype, $file['fileid'], $fileOwner, false, true); foreach ($allusers as $userid => $user) { if (isset($file['fileid']) && is_array($file) && isset($file['fileid']) && !in_array($userid, $sharedWith) && !($userid == $this->userId)) { //Helper::shareFile($file['name'], $user, $userid); \OCP\Share::shareItem($sharetype, $file['fileid'], \OCP\Share::SHARE_TYPE_USER, $userid, 1); $filesid[] = $id; } } } } */ }
</div> <?php if ($children) { ?> <div id="messages_children"> <?php foreach ($children as $child) { ?> <div class="item_msg linker" data-id="toreadmsg" data-link="<?php echo $child['id']; ?> "> <div class="msg_title"><a href="<?php echo Helper::linkToRoute('owncollab_talks.main.read', ['id' => $child['id']]); ?> "><?php p($child['title']); ?> </a></div> <div class="msg_desc"><?php echo $child['author']; ?> <?php p(date("d.m.Y H:i:s", strtotime($child['date']))); ?> </div> <div class="msg_text"><?php p(substr(strip_tags(htmlspecialchars_decode($child['text'])), 0, 50)); ?>
Helper::mailParserLogerError($mtaErrors); } else { $aliaser = new Aliaser($appName, $configurator, $mta); // Sync MailServer virtual users with OwnCloud users $connect = new Connect(\OC::$server->getDatabaseConnection()); $users = []; $usersArr = $connect->users()->getAll(); foreach ($usersArr as $ua) { $users[] = strtolower($ua['uid']); } $groups = []; $groupsArr = $connect->users()->getAllGroups(); foreach ($groupsArr as $ga) { $groups[] = strtolower($ga['gid']); } $aliaser->syncVirtualAliasesWithUsers($users, $groups); } } /** * Loading translations * The string has to match the app's folder name */ Util::addTranslations($appName); /** * Common styles and scripts */ if (Helper::isAppPage($appName)) { Util::addStyle($appName, 'common'); Util::addScript($appName, 'libs/ns.application'); Util::addScript($appName, 'application/init'); }
private function parserFileHandler($files, $userForSharing) { $saveFiles = ['file_fileid' => [], 'shared_with' => []]; if ($this->loginVirtualUser()) { $innerDir = date("Ymd", time()); foreach ($files as $file) { if (!\OC\Files\Filesystem::is_dir('/Talks')) { \OC\Files\Filesystem::mkdir('/Talks'); } if (!\OC\Files\Filesystem::is_dir('/Talks/' . $innerDir)) { \OC\Files\Filesystem::mkdir('/Talks/' . $innerDir); } if (is_file($file['tmpfile'])) { try { chmod($file['tmpfile'], 0755); } catch (\Exception $e) { } $filePathTo = '/Talks/' . $innerDir . '/' . $file['filename']; $fileInfoExist = \OC\Files\Filesystem::getFileInfo($filePathTo, false); if ($fileInfoExist) { $filePathTo = '/Talks/' . $innerDir . '/' . time() . '-' . $file['filename']; } $saved = \OC\Files\Filesystem::file_put_contents($filePathTo, file_get_contents($file['tmpfile'])); if ($saved) { unlink($file['tmpfile']); $saveFilesInfo = \OC\Files\Filesystem::getFileInfo($filePathTo); Helper::mailParserLoger('FILES INFO: ' . json_encode($saveFilesInfo)); $saveFiles['file_fileid'][] = $saveFilesInfo['fileid']; $saveFiles['shared_with'][] = $this->shareFileToUsers($saveFilesInfo, $userForSharing); //todo mails sands } } } } return $saveFiles; }
?> <?php } ?> <tfoot> <tr class="summary" style="height: 50px;"> <td> <span class="info"> <span class="dirinfo"><?php p($l->t('%s folders', $countfolders)); ?> </span> <span class="connector"> <?php p($l->t('and')); ?> </span> <span class="fileinfo"><?php p($l->t('%s files', $countfiles)); ?> </span> <span class="filter hidden"></span> </span> </td> <td class="filesize" style="text-align:right;"><?php echo \OCA\Owncollab_Talks\Helper::sizeRoundedString($totalsize); ?> </td> <td class="date"></td> </tr> </tfoot> </table>
<?php if (!empty($_['talk'])) { $id = $_['talk']['id']; $messageid = $_['talk']['mid']; $title = "Re:" . $_['talk']['title']; $text = \OCA\Owncollab_Talks\Helper::generateRepliedText($_['talk']['text'], $_['talk']['author'], date("D, d M Y H:i:s", strtotime($_['talk']['date']))); //TODO: Написати функцію обробки вхідного тексту $selectedsubscribers = explode(',', $_['talk']['subscribers']); if (!($_['talk']['author'] == $_['user'])) { $selectedsubscribers[] = $_['talk']['author']; } $userstatus = $_['userstatus']; } $cancheckusers = $_['user'] == $_['talk']['author'] || in_array($_['user'], array_column($_['subscribers']['Managers'], 'uid')) ? true : false; ?> <div class="begin-talk"> <form action="/index.php/apps/owncollab_talks/send" method="post" id="begin-talk" enctype="multipart/form-data"> <div class="left"><h2> <span data-original-title="Start s Talk" class="has-tooltip" title=""><?php p($l->t('Start a Talk')); ?> </span> </h2></div> <div class="right claer"><input type="submit" value="Submit"></div> <div class="talk-title"> <input type="text" name="title" value="<?php echo $title; ?>
/** * @param array $message * @param array $subscribers * Send the message to each user * in subscribers list */ public function sendMessage($message, $subscribers, $from = '', $messagedata = NULL) { $um = $this->connect->userMessage(); $users = $this->connect->users(); //$isgroup = $users->isGroupSelected($subscribers); //$groups = $messagedata['groupsid']; foreach ($subscribers as $s => $subscriber) { if (is_string($s) && !empty($s)) { $data = ['uid' => $s, 'mid' => $message, 'status' => 0]; $um->save($data); } } //print_r($messagedata); if (!empty($messagedata)) { foreach ($subscribers as $s => $subscriber) { $sent = Helper::messageSend($subscriber, $from, $messagedata, $this->getProjectName()); } } }
public function syncVirtualAliasesWithUsers(array $users, array $groups) { $deleteVirtualUsersIds = []; $virtualUsers = $this->mtaConnector->getCurrentVirtualUsers(false); $groupPrefix = $this->configurator->get('group_prefix'); $groupPrefixLength = strlen($groupPrefix); // delete fake user unset($users[array_search($this->configurator->get('collab_user'), $users)]); foreach ($virtualUsers as $virtualUser) { $vUid = explode('@', $virtualUser['email'])[0]; // -group if (strlen($vUid) > $groupPrefixLength && substr($vUid, -$groupPrefixLength) === $groupPrefix) { $gvUid = substr($vUid, 0, -$groupPrefixLength); if (!in_array($gvUid, $groups)) { $deleteVirtualUsersIds[] = $virtualUser['id']; } else { unset($groups[array_search($gvUid, $groups)]); } } else { if (!in_array($vUid, $users)) { $deleteVirtualUsersIds[] = $virtualUser['id']; } else { unset($users[array_search($vUid, $users)]); } } } // Delete virtual_users . var_dump('Delete: ', $deleteVirtualUsersIds); if (!empty($deleteVirtualUsersIds)) { $deleteVirtualUsersIdsStr = join(',', $deleteVirtualUsersIds); $result = $this->mtaConnector->deleteVirtualUserIn($deleteVirtualUsersIdsStr); if ($result) { Helper::mailParserLoger('Deleted virtual user id: ' . $deleteVirtualUsersIdsStr); } } // Add new virtual_users Users . var_dump('Add users:', $users); if (!empty($users)) { foreach ($users as $user) { $this->onPreCreateUser($user, Helper::randomString(8)); } } // Add new virtual_users Groups . var_dump('Add groups:', $groups); if (!empty($groups)) { foreach ($groups as $group) { $this->onPreCreateGroup($group); } } }