Exemple #1
0
function mail_update_7_8()
{
    $sent_mails = MailContents::findAll(array('conditions' => "`state`=3 AND `has_attachments`=1"));
    foreach ($sent_mails as $mail) {
        if (!$mail instanceof MailContent) {
            continue;
        }
        /* @var $mail MailContent */
        $attachments = array();
        MailUtilities::parseMail($mail->getContent(), $decoded, $parsedEmail, $warnings);
        if (isset($parsedEmail['Attachments'])) {
            $attachments = $parsedEmail['Attachments'];
        } else {
            if ($mail->getHasAttachments() && !in_array($parsedEmail['Type'], array('html', 'text', 'delivery-status')) && isset($parsedEmail['FileName'])) {
                // if the email is the attachment
                $attachments = array(array('Data' => $parsedEmail['Data'], 'Type' => $parsedEmail['Type'], 'FileName' => $parsedEmail['FileName']));
            }
        }
        foreach ($attachments as $att) {
            $file = ProjectFiles::getByFilename($att['FileName']);
            /* @var $file ProjectFile */
            if ($file instanceof ProjectFile) {
                $file->setMailId($mail->getId());
                $file->setMarkTimestamps(false);
                // dont change updated_on date
                $file->save();
                $file->addToSharingTable();
            }
        }
    }
    DB::executeAll("UPDATE " . TABLE_PREFIX . "objects o INNER JOIN " . TABLE_PREFIX . "project_files f ON f.object_id=o.id\n\t\t\tSET o.updated_by_id=o.created_by_id, o.updated_on=o.created_on\n\t\t\tWHERE f.mail_id>0;");
}
function mail_do_mark_as_read_unread_objects($ids_to_mark, $read)
{
    $all_accounts = array();
    $all_accounts_ids = array();
    foreach ($ids_to_mark as $id) {
        $obj = Objects::findObject($id);
        if ($obj instanceof MailContent && logged_user() instanceof Contact) {
            //conversation set the rest of the conversation
            $uds_to_mark_from_conver = array();
            if (user_config_option('show_emails_as_conversations')) {
                $emails_in_conversation = MailContents::getMailsFromConversation($obj);
                foreach ($emails_in_conversation as $email) {
                    //$id is marked on object controller only mark the rest of the conversation
                    if ($id != $email->getId()) {
                        $email->setIsRead(logged_user()->getId(), $read);
                        $uds_to_mark_from_conver[] = $email->getUid();
                    }
                }
            }
            //make the array with accounts and uids to send to the mail server
            //accounts
            if (!in_array($obj->getAccountId(), $all_accounts_ids)) {
                $account = $obj->getAccount();
                //if logged user is owner of this account and is imap
                if ($account instanceof MailAccount && $account->getContactId() == logged_user()->getId() && $account->getIsImap()) {
                    $all_accounts_ids[] = $obj->getAccountId();
                    $all_accounts[$account->getId()]['account'] = $account;
                }
            }
            //uids
            if (in_array($obj->getAccountId(), $all_accounts_ids)) {
                //add conversations uids
                //mientras ande mal el uid de los mails enviados si estan sincronizados no usar esta parte
                /*if (user_config_option('show_emails_as_conversations')) {
                			foreach ($uds_to_mark_from_conver as $uid_conver){
                				$all_accounts[$obj->getAccountId()]['uids'][] = $uid_conver;
                			}
                		}*/
                $all_accounts[$obj->getAccountId()]['folders'][$obj->getImapFolderName()][] = $obj->getUid();
            }
        }
    }
    //foreach account send uids by folder to mark in the mail server
    foreach ($all_accounts as $account_data) {
        $account = $account_data['account'];
        $folders = $account_data['folders'];
        foreach ($folders as $key => $folder) {
            $folder_name = $key;
            $uids = $folder;
            if (!empty($folder_name)) {
                try {
                    MailUtilities::setReadUnreadImapMails($account, $folder_name, $uids, $read);
                } catch (Exception $e) {
                    Logger::log("Could not set mail as read on mail server, exception:\n" . $e->getMessage());
                }
            }
        }
    }
}
 /**
  * search according to the conditions of mail rules
  * @param string $condition
  * @return object 
  */
 function getConditionsRules($condition)
 {
     return MailContents::findAll(array('conditions' => $condition, 'join' => array('table' => MailDatas::instance()->getTableName(), 'jt_field' => 'id', 'e_field' => 'object_id')));
 }
 function countUserInboxUnreadEmails()
 {
     $tp = TABLE_PREFIX;
     $uid = logged_user()->getId();
     $sql = "SELECT count(*) `c` FROM `{$tp}mail_contents` `a`, `{$tp}read_objects` `b` WHERE `b`.`rel_object_manager` = 'MailContents' AND `b`.`rel_object_id` = `a`.`id` AND `b`.`user_id` = '{$uid}' AND `b`.`is_read` = '1' AND `a`.`trashed_on` = '0000-00-00 00:00:00' AND `a`.`is_deleted` = 0 AND `a`.`archived_by_id` = 0 AND (`a`.`state` = '0' OR `a`.`state` = '5') AND " . permissions_sql_for_listings(MailContents::instance(), ACCESS_LEVEL_READ, logged_user(), null, '`a`');
     $rows = DB::executeAll($sql);
     $read = $rows[0]['c'];
     $sql = "SELECT count(*) `c` FROM `{$tp}mail_contents` `a` WHERE `a`.`trashed_on` = '0000-00-00 00:00:00' AND `a`.`is_deleted` = 0 AND `a`.`archived_by_id` = 0 AND (`a`.`state` = '0' OR `a`.`state` = '5') AND " . permissions_sql_for_listings(MailContents::instance(), ACCESS_LEVEL_READ, logged_user(), null, '`a`');
     $rows = DB::executeAll($sql);
     $all = $rows[0]['c'];
     return $all - $read;
 }
Exemple #5
0
<?php $genid = gen_id(); ?>

<form id='formClassify' name='formClassify' style='height:100%;background-color:white'  class="internalForm" action="<?php echo get_url('mail','classify', array('id'=>$email->getId())) ?>" method="post">
	<div class="classify">
		<?php render_member_selectors(MailContents::instance()->getObjectTypeId(), $genid, $email->getMemberIds()); ?>
	</div>
	<input type="hidden" name="id" value="<?php echo $email->getId() ?>" />
	<input type="hidden" name="submit" value="1" />
	<?php echo submit_button(lang('classify'), 's', array('tabindex' => '50')) ?>
</form>
  
 /**
  * Add new task
  *
  * @access public
  * @param void
  * @return null
  */
 function add_task()
 {
     if (logged_user()->isGuest()) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     $notAllowedMember = '';
     if (!ProjectTask::canAdd(logged_user(), active_context(), $notAllowedMember)) {
         if (str_starts_with($notAllowedMember, '-- req dim --')) {
             flash_error(lang('must choose at least one member of', str_replace_first('-- req dim --', '', $notAllowedMember, $in)));
         } else {
             flash_error(lang('no context permissions to add', lang("tasks"), $notAllowedMember));
         }
         ajx_current("empty");
         return;
     }
     // if
     $task = new ProjectTask();
     $task_data = array_var($_POST, 'task');
     if (!is_array($task_data)) {
         $dd = getDateValue(array_var($_POST, 'task_due_date', ''));
         if ($dd instanceof DateTimeValue) {
             $duetime = getTimeValue(array_var($_POST, 'task_due_time'));
             if (is_array($duetime)) {
                 $dd->setHour(array_var($duetime, 'hours'));
                 $dd->setMinute(array_var($duetime, 'mins'));
             }
             $task->setUseDueTime(is_array($duetime));
         }
         $sd = getDateValue(array_var($_POST, 'task_start_date', ''));
         if ($sd instanceof DateTimeValue) {
             $starttime = getTimeValue(array_var($_POST, 'task_start_time'));
             if (is_array($starttime)) {
                 $sd->setHour(array_var($starttime, 'hours'));
                 $sd->setMinute(array_var($starttime, 'mins'));
             }
             $task->setUseStartTime(is_array($starttime));
         }
         $time_estimate = array_var($_POST, 'hours', 0) * 60 + array_var($_POST, 'minutes', 0);
         $task_data = array('milestone_id' => array_var($_POST, 'milestone_id', 0), 'project_id' => 1, 'name' => array_var($_POST, 'name', ''), 'assigned_to_contact_id' => array_var($_POST, 'assigned_to_contact_id', '0'), 'parent_id' => array_var($_POST, 'parent_id', 0), 'priority' => array_var($_POST, 'priority', ProjectTasks::PRIORITY_NORMAL), 'text' => array_var($_POST, 'text', ''), 'start_date' => $sd, 'due_date' => $dd, 'time_estimate' => $time_estimate, 'is_template' => array_var($_POST, "is_template", array_var($_GET, "is_template", false)), 'percent_completed' => array_var($_POST, "percent_completed", ''), 'object_subtype' => array_var($_POST, "object_subtype", config_option('default task co type')), 'send_notification' => array_var($_POST, 'notify') && array_var($_POST, 'notify') == 'true');
         // array
         if (Plugins::instance()->isActivePlugin('mail')) {
             $from_email = array_var($_GET, 'from_email');
             $email = MailContents::findById($from_email);
             if ($email instanceof MailContent) {
                 $task_data['name'] = $email->getSubject();
                 $task_data['text'] = lang('create task from email description', $email->getSubject(), $email->getFrom(), $email->getTextBody());
                 tpl_assign('from_email', $email);
             }
         }
     }
     // if
     if (array_var($_GET, 'replace')) {
         ajx_replace(true);
     }
     tpl_assign('task_data', $task_data);
     tpl_assign('task', $task);
     tpl_assign('pending_task_id', 0);
     $subtasks = array();
     if (array_var($_POST, 'multi_assignment')) {
         $json_subtasks = json_decode(array_var($_POST, 'multi_assignment'));
         $line = 0;
         if (count($json_subtasks) > 0) {
             foreach ($json_subtasks as $json_subtask) {
                 $subtasks[$line]['assigned_to_contact_id'] = $json_subtask->assigned_to_contact_id;
                 $subtasks[$line]['name'] = $json_subtask->name;
                 $subtasks[$line]['time_estimate_hours'] = $json_subtask->time_estimate_hours;
                 $subtasks[$line]['time_estimate_minutes'] = $json_subtask->time_estimate_minutes;
                 $line++;
             }
         }
     }
     tpl_assign('multi_assignment', $subtasks);
     if (is_array(array_var($_POST, 'task'))) {
         // order
         $task->setOrder(ProjectTasks::maxOrder(array_var($task_data, "parent_id", 0), array_var($task_data, "milestone_id", 0)));
         $task_data['due_date'] = getDateValue(array_var($_POST, 'task_due_date'));
         $task_data['start_date'] = getDateValue(array_var($_POST, 'task_start_date'));
         if ($task_data['due_date'] instanceof DateTimeValue) {
             $duetime = getTimeValue(array_var($_POST, 'task_due_time'));
             if (is_array($duetime)) {
                 $task_data['due_date']->setHour(array_var($duetime, 'hours'));
                 $task_data['due_date']->setMinute(array_var($duetime, 'mins'));
             }
             $task_data['due_date']->advance(logged_user()->getTimezone() * -3600);
             $task_data['use_due_time'] = is_array($duetime);
         }
         if ($task_data['start_date'] instanceof DateTimeValue) {
             $starttime = getTimeValue(array_var($_POST, 'task_start_time'));
             if (is_array($starttime)) {
                 $task_data['start_date']->setHour(array_var($starttime, 'hours'));
                 $task_data['start_date']->setMinute(array_var($starttime, 'mins'));
             }
             $task_data['start_date']->advance(logged_user()->getTimezone() * -3600);
             $task_data['use_start_time'] = is_array($starttime);
         }
         try {
             $err_msg = $this->setRepeatOptions($task_data);
             if ($err_msg) {
                 flash_error($err_msg);
                 ajx_current("empty");
                 return;
             }
             if (config_option("wysiwyg_tasks")) {
                 $task_data['type_content'] = "html";
                 $task_data['text'] = preg_replace("/[\n|\r|\n\r]/", '', array_var($task_data, 'text'));
             } else {
                 $task_data['type_content'] = "text";
             }
             $task_data['object_type_id'] = $task->getObjectTypeId();
             $member_ids = json_decode(array_var($_POST, 'members'));
             $task->setFromAttributes($task_data);
             if (!can_task_assignee(logged_user())) {
                 flash_error(lang('no access permissions'));
                 ajx_current("empty");
                 return;
             }
             $totalMinutes = array_var($task_data, 'time_estimate_hours', 0) * 60 + array_var($task_data, 'time_estimate_minutes', 0);
             $task->setTimeEstimate($totalMinutes);
             $id = array_var($_GET, 'id', 0);
             $parent = ProjectTasks::findById($id);
             if ($parent instanceof ProjectTask) {
                 $task->setParentId($id);
                 $member_ids = $parent->getMemberIds();
                 if ($parent->getIsTemplate()) {
                     $task->setIsTemplate(true);
                 }
             }
             if ($task->getParentId() > 0 && $task->hasChild($task->getParentId())) {
                 flash_error(lang('task child of child error'));
                 ajx_current("empty");
                 return;
             }
             DB::beginWork();
             $task->save();
             // dependencies
             if (config_option('use tasks dependencies')) {
                 $previous_tasks = array_var($task_data, 'previous');
                 if (is_array($previous_tasks)) {
                     foreach ($previous_tasks as $ptask) {
                         if ($ptask == $task->getId()) {
                             continue;
                         }
                         $dep = ProjectTaskDependencies::findById(array('previous_task_id' => $ptask, 'task_id' => $task->getId()));
                         if (!$dep instanceof ProjectTaskDependency) {
                             $dep = new ProjectTaskDependency();
                             $dep->setPreviousTaskId($ptask);
                             $dep->setTaskId($task->getId());
                             $dep->save();
                         }
                     }
                 }
             }
             if (array_var($_GET, 'copyId', 0) > 0) {
                 // copy remaining stuff from the task with id copyId
                 $toCopy = ProjectTasks::findById(array_var($_GET, 'copyId'));
                 if ($toCopy instanceof ProjectTask) {
                     ProjectTasks::copySubTasks($toCopy, $task, array_var($task_data, 'is_template', false));
                 }
             }
             // if task is added from task view -> add subscribers
             if (array_var($task_data, 'inputtype') == 'taskview') {
                 if (!isset($_POST['subscribers'])) {
                     $_POST['subscribers'] = array();
                 }
                 $_POST['subscribers']['user_' . logged_user()->getId()] = 'checked';
                 if ($task->getAssignedToContactId() > 0 && Contacts::instance()->findById($task->getAssignedToContactId())->getUserType()) {
                     $_POST['subscribers']['user_' . $task->getAssignedToContactId()] = 'checked';
                 }
             }
             // Add assigned user to the subscibers list
             if (isset($_POST['subscribers']) && $task->getAssignedToContactId() > 0 && Contacts::instance()->findById($task->getAssignedToContactId())) {
                 $_POST['subscribers']['user_' . $task->getAssignedToContactId()] = 'checked';
             }
             //Link objects
             $object_controller = new ObjectController();
             $object_controller->add_to_members($task, $member_ids);
             $object_controller->add_subscribers($task);
             $object_controller->link_to_new_object($task);
             $object_controller->add_custom_properties($task);
             $object_controller->add_reminders($task);
             ApplicationLogs::createLog($task, ApplicationLogs::ACTION_ADD);
             if (config_option('repeating_task') == 1) {
                 $opt_rep_day['saturday'] = false;
                 $opt_rep_day['sunday'] = false;
                 if (array_var($task_data, 'repeat_saturdays', false)) {
                     $opt_rep_day['saturday'] = true;
                 }
                 if (array_var($task_data, 'repeat_sundays', false)) {
                     $opt_rep_day['sunday'] = true;
                 }
                 $this->repetitive_task($task, $opt_rep_day);
             }
             if (config_option('multi_assignment') && Plugins::instance()->isActivePlugin('crpm')) {
                 $subtasks = array_var($_POST, 'multi_assignment');
                 Hook::fire('save_subtasks', $task, $subtasks);
             }
             DB::commit();
             // notify asignee
             if (array_var($task_data, 'send_notification') == 'checked') {
                 try {
                     Notifier::taskAssigned($task);
                 } catch (Exception $e) {
                     evt_add("debug", $e->getMessage());
                 }
                 // try
             }
             if ($task->getIsTemplate()) {
                 flash_success(lang('success add template', $task->getObjectName()));
             } else {
                 flash_success(lang('success add task list', $task->getObjectName()));
             }
             if (array_var($task_data, 'inputtype') != 'taskview') {
                 ajx_current("back");
             } else {
                 ajx_current("reload");
             }
         } catch (Exception $e) {
             DB::rollback();
             flash_error($e->getMessage());
             ajx_current("empty");
         }
         // try
     }
     // if
 }
    echo yes_no_widget('mailAccount[mark_read_on_server]', 'mailAccountMarkReadOnServer', $mark_read_on_server > 0, lang('yes'), lang('no'), 130);
    ?>
			
		</div>
		
		<div class="mail-account-item dataBlock">
			<label>
				<?php 
    echo lang('classify mails on workspace');
    ?>
			</label>
				<?php 
    if ($mailAccount->isNew()) {
        render_member_selectors(MailContents::instance()->getObjectTypeId(), $genid, null, array('select_current_context' => true, 'hide_label' => true));
    } else {
        render_member_selectors(MailContents::instance()->getObjectTypeId(), $genid, explode(',', $mailAccount->getMemberId()));
    }
    ?>
			<span class="desc"><?php 
    echo lang('classify mails on workspace desc');
    ?>
 </span>
		</div>
		
		<div class="clear"></div>
		
	</div>

	<div id="<?php 
    echo $genid;
    ?>
 function deleteMailsFromServer(MailAccount $account)
 {
     $count = 0;
     if ($account->getDelFromServer() > 0) {
         $max_date = DateTimeValueLib::now();
         $max_date->add('d', -1 * $account->getDelFromServer());
         if ($account->getIsImap()) {
             if ($account->getIncomingSsl()) {
                 $imap = new Net_IMAP($ret, "ssl://" . $account->getServer(), $account->getIncomingSslPort());
             } else {
                 $imap = new Net_IMAP($ret, "tcp://" . $account->getServer());
             }
             if (PEAR::isError($ret)) {
                 Logger::log($ret->getMessage());
                 throw new Exception($ret->getMessage());
             }
             $ret = $imap->login($account->getEmail(), self::ENCRYPT_DECRYPT($account->getPassword()));
             $result = array();
             if ($ret === true) {
                 $mailboxes = MailAccountImapFolders::getMailAccountImapFolders($account->getId());
                 if (is_array($mailboxes)) {
                     foreach ($mailboxes as $box) {
                         if ($box->getCheckFolder()) {
                             $numMessages = $imap->getNumberOfMessages(utf8_decode($box->getFolderName()));
                             for ($i = 1; $i <= $numMessages; $i++) {
                                 $summary = $imap->getSummary($i);
                                 if (is_array($summary)) {
                                     $m_date = DateTimeValueLib::makeFromString($summary[0]['INTERNALDATE']);
                                     if ($m_date instanceof DateTimeValue && $max_date->getTimestamp() > $m_date->getTimestamp()) {
                                         if (MailContents::mailRecordExists($account->getId(), $summary[0]['UID'], $box->getFolderName(), null)) {
                                             $imap->deleteMessages($i);
                                             $count++;
                                         }
                                     } else {
                                         break;
                                     }
                                 }
                             }
                             $imap->expunge();
                         }
                     }
                 }
             }
         } else {
             //require_once "Net/POP3.php";
             $pop3 = new Net_POP3();
             // Connect to mail server
             if ($account->getIncomingSsl()) {
                 $pop3->connect("ssl://" . $account->getServer(), $account->getIncomingSslPort());
             } else {
                 $pop3->connect($account->getServer());
             }
             if (PEAR::isError($ret = $pop3->login($account->getEmail(), self::ENCRYPT_DECRYPT($account->getPassword()), 'USER'))) {
                 throw new Exception($ret->getMessage());
             }
             $emails = $pop3->getListing();
             foreach ($emails as $email) {
                 if (MailContents::mailRecordExists($account->getId(), $email['uidl'], null, null)) {
                     $headers = $pop3->getParsedHeaders($email['msg_id']);
                     $date = DateTimeValueLib::makeFromString(array_var($headers, 'Date'));
                     if ($date instanceof DateTimeValue && $max_date->getTimestamp() > $date->getTimestamp()) {
                         $pop3->deleteMsg($email['msg_id']);
                         $count++;
                     }
                 }
             }
             $pop3->disconnect();
         }
     }
     return $count;
 }
 /**
  * This function will return all mails in project
  *
  * @param void
  * @return array
  */
 function getAllMails()
 {
     if (is_null($this->all_mails)) {
         $this->all_mails = MailContents::getProjectMails($this);
     }
     // if
     return $this->all_mails;
 }
Exemple #10
0
<?php

if (logged_user()->hasMailAccounts()) {
    $limit = 10;
    $result = MailContents::instance()->listing(array("order" => "sent_date", "order_dir" => "desc", "start" => 0, "limit" => $limit));
    $active_members = array();
    $context = active_context();
    foreach ($context as $selection) {
        if ($selection instanceof Member) {
            $active_members[] = $selection;
        }
    }
    if (count($active_members) > 0) {
        $mnames = array();
        $allowed_contact_ids = array();
        foreach ($active_members as $member) {
            $mnames[] = clean($member->getName());
        }
        $widget_title = lang('unread emails') . ' ' . lang('in') . ' ' . implode(", ", $mnames);
    }
    $total = $result->total;
    $emails = $result->objects;
    $genid = gen_id();
    if ($total > 0) {
        include_once 'template.php';
    }
}
Exemple #11
0
			<label>
				<?php 
    echo lang('classify mails on workspace');
    ?>
				<span class="desc"><?php 
    echo lang('classify mails on workspace desc');
    ?>
 </span>
			</label>
				<?php 
    //alert_r($mailAccount);
    // TODO context PEPE
    if ($mailAccount->isNew()) {
        render_dimension_trees(MailContents::instance()->getObjectTypeId(), $genid, null, array('select_current_context' => true));
    } else {
        render_dimension_trees(MailContents::instance()->getObjectTypeId(), $genid, $mailAccount->getMemberIds());
    }
    ?>
		</div>
		
	</fieldset>

	<fieldset id="<?php 
    echo $genid;
    ?>
smtp_settings_div">
		<legend><?php 
    echo lang('smtp settings');
    ?>
</legend>
		<div class="mail-account-item">
 /**
  * 
  * 
  */
 function addToSharingTable()
 {
     // if classified or not belongs to an email
     $member_ids = array();
     $members = $this->getMembers();
     foreach ($members as $m) {
         $d = $m->getDimension();
         if ($d instanceof Dimension && $d->getIsManageable()) {
             $member_ids[] = $m->getId();
         }
     }
     if ($this->getMailId() == 0 || count($member_ids) > 0) {
         $revisions = $this->getRevisions();
         if (is_array($revisions)) {
             foreach ($revisions as $revision) {
                 $revision->addToSharingTable();
             }
         }
         parent::addToSharingTable();
     } else {
         // if not classified and belongs to an email
         $mail = MailContents::findById($this->getMailId());
         if ($mail instanceof MailContent) {
             DB::execute("DELETE FROM " . TABLE_PREFIX . "sharing_table WHERE object_id=" . $this->getId());
             $macs = MailAccountContacts::findAll(array('conditions' => array('`account_id` = ?', $mail->getAccountId())));
             foreach ($macs as $mac) {
                 $c = Contacts::findById($mac->getContactId());
                 if ($c instanceof Contact) {
                     $values = "(" . $c->getPermissionGroupId() . "," . $this->getId() . ")";
                     DB::execute("INSERT INTO " . TABLE_PREFIX . "sharing_table (group_id, object_id) VALUES {$values} ON DUPLICATE KEY UPDATE group_id=group_id;");
                 }
             }
         }
     }
 }
 function untag()
 {
     if (logged_user()->isGuest()) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     ajx_current("empty");
     $csvids = array_var($_GET, 'ids');
     $tag = trim(array_var($_GET, 'tag', ''));
     $all = array_var($_GET, 'all');
     if (!$tag && !$all) {
         flash_error(lang("no tag specified"));
         return;
     }
     $ids = explode(",", $csvids);
     $count = 0;
     $err = 0;
     foreach ($ids as $id) {
         try {
             $parts = explode(":", $id);
             $object = get_object_by_manager_and_id($parts[1], $parts[0]);
             if ($object instanceof ProjectDataObject && $object->canEdit(logged_user())) {
                 if ($object instanceof MailContent && user_config_option('show_emails_as_conversations', true, logged_user()->getId())) {
                     $emails = MailContents::getMailsFromConversation($object);
                     foreach ($emails as $email) {
                         if ($all) {
                             $email->clearTags();
                         } else {
                             $email->deleteTag($tag);
                         }
                         ApplicationLogs::createLog($email, $email->getWorkspaces(), ApplicationLogs::ACTION_UNTAG);
                     }
                 } else {
                     if ($all) {
                         $object->clearTags();
                     } else {
                         $object->deleteTag($tag);
                     }
                     ApplicationLogs::createLog($object, $object->getWorkspaces(), ApplicationLogs::ACTION_UNTAG);
                 }
                 $count++;
             } else {
                 $err++;
             }
         } catch (Exception $e) {
             $err++;
         }
     }
     if ($err > 0) {
         flash_error(lang("error untag objects", $err));
     } else {
         flash_success(lang("success untag objects", $count));
     }
 }
            ?>
						<select name="<?php 
            echo 'parameterValues[' . $parameter['name'] . ']';
            ?>
">
						<?php 
            $context = active_context();
            if (isset($member_id) && $member_id > 0) {
                // filter by context passed by parameter
                $additional_member = Members::findById($member_id);
                if ($additional_member instanceof Member) {
                    $context = array($additional_member);
                }
            }
            if (array_var($_REQUEST, 'from_email')) {
                $from_email = MailContents::findById(array_var($_REQUEST, 'from_email'));
                if ($from_email instanceof MailContent) {
                    $context = $from_email->getMembers();
                }
            }
            $companies = allowed_users_to_assign($context);
            foreach ($companies as $c) {
                if (config_option('can_assign_tasks_to_companies')) {
                    ?>
								<option value="<?php 
                    echo $c['id'];
                    ?>
"> <?php 
                    echo $c['name'];
                    ?>
</option>
	/**
	 * Used for Drag & Drop, adds objects to a member
	 * @author alvaro
	 */
	function add_objects_to_member() {
		$ids = json_decode(array_var($_POST, 'objects'));
		$mem_id = array_var($_POST, 'member');
		
		if (!is_array($ids) || count($ids) == 0) {
			ajx_current("empty");
			return;
		}
                
		$member = Members::findById($mem_id);
		
		try {
			DB::beginWork();
			
			$objects = array();
			$from = array();
			foreach ($ids as $oid) {
				/* @var $obj ContentDataObject */
				$obj = Objects::findObject($oid);
				if ($obj instanceof ContentDataObject && $obj->canAddToMember(logged_user(), $member, active_context())) {
					
					$dim_obj_type_content = DimensionObjectTypeContents::findOne(array('conditions' => array('`dimension_id`=? AND `dimension_object_type_id`=? AND `content_object_type_id`=?', $member->getDimensionId(), $member->getObjectTypeId(), $obj->getObjectTypeId())));
					if (!($dim_obj_type_content instanceof DimensionObjectTypeContent)) continue;
					if (!$dim_obj_type_content->getIsMultiple() || array_var($_POST, 'remove_prev')) {
						$db_res = DB::execute("SELECT group_concat(om.member_id) as old_members FROM ".TABLE_PREFIX."object_members om INNER JOIN ".TABLE_PREFIX."members m ON om.member_id=m.id WHERE m.dimension_id=".$member->getDimensionId()." AND om.object_id=".$obj->getId());
						$row = $db_res->fetchRow();
						if (array_var($row, 'old_members') != "") $from[$obj->getId()] = $row['old_members'];
						// remove from previous members
						ObjectMembers::delete('`object_id` = ' . $obj->getId() . ' AND `member_id` IN (SELECT `m`.`id` FROM `'.TABLE_PREFIX.'members` `m` WHERE `m`.`dimension_id` = '.$member->getDimensionId().')');
					}
					
					$obj->addToMembers(array($member));
					$obj->addToSharingTable();
					$objects[] = $obj;
					
					if ($obj->allowsTimeslots()) {
						$timeslots = $obj->getTimeslots();
						foreach ($timeslots as $timeslot) {
							$ts_mids = ObjectMembers::getMemberIdsByObject($timeslot->getId());
							// if classified then reclassify
							if (count($ts_mids)) {
								if (array_var($_POST, 'remove_prev')) {
									ObjectMembers::delete('`object_id` = ' . $timeslot->getId() . ' AND `member_id` IN (SELECT `m`.`id` FROM `'.TABLE_PREFIX.'members` `m` WHERE `m`.`dimension_id` = '.$member->getDimensionId().')');
								}
								$timeslot->addToMembers(array($member));
								$timeslot->addToSharingTable();
								$objects[] = $timeslot;
							}
						}
					}
					
					if ($obj instanceof MailContent) {
						$conversation = MailContents::getMailsFromConversation($obj);
						foreach ($conversation as $conv_email) {
							if (array_var($_POST, 'attachment') && $conv_email->getHasAttachments()) {
								MailUtilities::parseMail($conv_email->getContent(), $decoded, $parsedEmail, $warnings);
								$classification_data = array();
								for ($j=0; $j < count(array_var($parsedEmail, "Attachments", array())); $j++) {
									$classification_data["att_".$j] = true;
								}
								MailController::classifyFile($classification_data, $conv_email, $parsedEmail, array($member), array_var($_POST, 'remove_prev'));
							}
						}
					}
				} else {
					throw new Exception(lang('you dont have permissions to classify object in member', $obj->getName(), $member->getName()));
				}
			}
			
			Hook::fire('after_dragdrop_classify', $objects, $member);
			
			DB::commit();
			
			// add to application logs
			foreach ($objects as $object) {
				$action = array_var($from, $obj->getId()) ? ApplicationLogs::ACTION_MOVE : ApplicationLogs::ACTION_COPY;
				$log_data = (array_var($from, $obj->getId()) ? "from:" . array_var($from, $obj->getId()) . ";" : "") . "to:" . $member->getId();
				ApplicationLogs::instance()->createLog($object, $action, false, true, true, $log_data);
			}
			
			$lang_key = count($ids)>1 ? 'objects moved to member success' : 'object moved to member success';
			flash_success(lang($lang_key, $member->getName()));
			if (array_var($_POST, 'reload')) ajx_current('reload');
			else ajx_current('empty');
			
		} catch (Exception $e) {
			DB::rollback();
			ajx_current("empty");
			flash_error($e->getMessage());
		}
	}
 function download()
 {
     $this->setTemplate(get_template_path('back'));
     $id = array_var($_GET, 'id');
     $email = MailContents::findById($id);
     if (!$email instanceof MailContent) {
         flash_error(lang('email dnx'));
         return;
     }
     if (!$email->canView(logged_user())) {
         flash_error(lang('no access permissions'));
         return;
     }
     if ($email->getContent()) {
         download_contents($email->getContent(), 'message/rfc822', $email->getSubject() . ".eml", strlen($email->getContent()), true);
         die;
     } else {
         download_from_repository($email->getContentFileId(), 'message/rfc822', $email->getSubject() . ".eml", true);
         die;
     }
 }
	/**
	 * This function will return paginated result. Result is an array where first element is
	 * array of returned object and second populated pagination object that can be used for
	 * obtaining and rendering pagination data using various helpers.
	 *
	 * Items and pagination array vars are indexed with 0 for items and 1 for pagination
	 * because you can't use associative indexing with list() construct
	 *
	 * @access public
	 * @param array $arguments Query argumens (@see find()) Limit and offset are ignored!
	 * @param integer $items_per_page Number of items per page
	 * @param integer $current_page Current page number
	 * @return array
	 */
	function paginate($arguments = null, $items_per_page = 10, $current_page = 1, $count = null) {		
		if(isset($this) && instance_of($this, 'MailContents')) {
			return parent::paginate($arguments, $items_per_page, $current_page, $count);
		} else {
			return MailContents::instance()->paginate($arguments, $items_per_page, $current_page, $count);
		} // if
	} // paginate
 static function prepareTrashAndArchivedConditions($trashed, $archived){
     $trashed_cond = "`o`.`trashed_on` " .($trashed ? ">" : "="). " " . DB::escape(EMPTY_DATETIME);
 	if ($trashed) {
 		$archived_cond = "";
 	} else {
 		$archived_cond = "AND `o`.`archived_on` " .($archived ? ">" : "="). " " . DB::escape(EMPTY_DATETIME);
 	}
 	if ($trashed && Plugins::instance()->isActivePlugin('mail')) {
 		$mcot_id = MailContents::instance()->getObjectTypeId();
 		$trashed_cond .= " AND IF(o.object_type_id=$mcot_id, NOT (SELECT mcx.is_deleted FROM ".TABLE_PREFIX."mail_contents mcx WHERE mcx.object_id=o.id), 1)";
 	}
 	return array($trashed_cond, $archived_cond);
 }
 function do_mark_as_read_unread_objects($ids, $read, $mark_conversation = false)
 {
     $err = 0;
     // count errors
     $succ = 0;
     // count updated objects
     foreach ($ids as $id) {
         try {
             $obj = Objects::findObject($id);
             if ($obj instanceof ContentDataObject && logged_user() instanceof Contact) {
                 $obj->setIsRead(logged_user()->getId(), $read);
                 if (Plugins::instance()->isActivePlugin('mail')) {
                     if ($obj instanceof MailContent && $mark_conversation) {
                         $emails_in_conversation = MailContents::getMailsFromConversation($obj);
                         foreach ($emails_in_conversation as $email) {
                             $email->setIsRead(logged_user()->getId(), $read);
                         }
                     }
                 }
             }
             $succ++;
         } catch (Exception $e) {
             $err++;
         }
         // try
     }
     return array($succ, $err);
 }
 function delete($deleteMails = false)
 {
     MailAccountUsers::deleteByAccount($this);
     if ($deleteMails) {
         session_commit();
         LinkedObjects::delete(array("(`object_id` IN (SELECT `id` FROM `" . TABLE_PREFIX . "mail_contents` WHERE `account_id` = " . DB::escape($this->getId()) . ") and `object_manager` = 'MailContents') \n\t\t\t\tor (`rel_object_id` IN (SELECT `id` FROM `" . TABLE_PREFIX . "mail_contents` WHERE `account_id` = " . DB::escape($this->getId()) . ") and `rel_object_manager` = 'MailContents')"));
         SearchableObjects::delete(array("`rel_object_manager` = 'MailContents' AND `rel_object_id` IN (SELECT `id` FROM `" . TABLE_PREFIX . "mail_contents` WHERE `account_id` = " . DB::escape($this->getId()) . ") "));
         ReadObjects::delete("`rel_object_manager` = 'MailContents' AND `rel_object_id` IN (SELECT `id` FROM `" . TABLE_PREFIX . "mail_contents` WHERE `account_id` = " . DB::escape($this->getId()) . ") ");
         $account_emails = MailContents::findAll(array('conditions' => '`account_id` = ' . DB::escape($this->getId()), 'include_trashed' => true));
         foreach ($account_emails as $email) {
             $email->delete();
         }
         //MailContents::delete('`account_id` = ' . DB::escape($this->getId()));
     }
     if ($this->getIsImap()) {
         MailAccountImapFolders::delete('account_id = ' . $this->getId());
     }
     parent::delete();
 }
    /**
     * Used for Drag & Drop, adds objects to a member
     * @author alvaro
     */
    function add_objects_to_member()
    {
        $ids = json_decode(array_var($_POST, 'objects'));
        $mem_id = array_var($_POST, 'member');
        if (!is_array($ids) || count($ids) == 0) {
            ajx_current("empty");
            return;
        }
        try {
            DB::beginWork();
            if ($mem_id) {
                $user_ids = array();
                $member = Members::findById($mem_id);
                $objects = array();
                $from = array();
                foreach ($ids as $oid) {
                    /* @var $obj ContentDataObject */
                    $obj = Objects::findObject($oid);
                    if ($obj instanceof ContentDataObject && $obj->canAddToMember(logged_user(), $member, active_context())) {
                        $dim_obj_type_content = DimensionObjectTypeContents::findOne(array('conditions' => array('`dimension_id`=? AND `dimension_object_type_id`=? AND `content_object_type_id`=?', $member->getDimensionId(), $member->getObjectTypeId(), $obj->getObjectTypeId())));
                        if (!$dim_obj_type_content instanceof DimensionObjectTypeContent) {
                            continue;
                        }
                        if (!$dim_obj_type_content->getIsMultiple() || array_var($_POST, 'remove_prev')) {
                            $db_res = DB::execute("SELECT group_concat(om.member_id) as old_members FROM " . TABLE_PREFIX . "object_members om INNER JOIN " . TABLE_PREFIX . "members m ON om.member_id=m.id WHERE m.dimension_id=" . $member->getDimensionId() . " AND om.object_id=" . $obj->getId());
                            $row = $db_res->fetchRow();
                            if (array_var($row, 'old_members') != "") {
                                $from[$obj->getId()] = $row['old_members'];
                            }
                            // remove from previous members
                            ObjectMembers::delete('`object_id` = ' . $obj->getId() . ' AND `member_id` IN (SELECT `m`.`id` FROM `' . TABLE_PREFIX . 'members` `m` WHERE `m`.`dimension_id` = ' . $member->getDimensionId() . ')');
                        }
                        $obj->addToMembers(array($member));
                        $obj->addToSharingTable();
                        $objects[] = $obj;
                        if (Plugins::instance()->isActivePlugin('mail') && $obj instanceof MailContent) {
                            $conversation = MailContents::getMailsFromConversation($obj);
                            foreach ($conversation as $conv_email) {
                                if (array_var($_POST, 'attachment') && $conv_email->getHasAttachments()) {
                                    MailUtilities::parseMail($conv_email->getContent(), $decoded, $parsedEmail, $warnings);
                                    $classification_data = array();
                                    for ($j = 0; $j < count(array_var($parsedEmail, "Attachments", array())); $j++) {
                                        $classification_data["att_" . $j] = true;
                                    }
                                    MailController::classifyFile($classification_data, $conv_email, $parsedEmail, array($member), array_var($_POST, 'remove_prev'), false);
                                }
                            }
                        }
                        // if object is contact ask to add default permissions in member
                        if ($obj instanceof Contact && $obj->isUser() && can_manage_security(logged_user())) {
                            $user_ids[] = $obj->getId();
                        }
                    } else {
                        throw new Exception(lang('you dont have permissions to classify object in member', $obj->getName(), $member->getName()));
                    }
                }
                // if object is contact ask to add default permissions in member
                if (can_manage_security(logged_user()) && count($user_ids) > 0 && $member->getDimension()->getDefinesPermissions()) {
                    evt_add('ask to assign default permissions', array('user_ids' => $user_ids, 'member' => array('id' => $member->getId(), 'name' => clean($member->getName())), ''));
                }
                Hook::fire('after_dragdrop_classify', $objects, $member);
                $display_name = $member->getName();
                $lang_key = count($ids) > 1 ? 'objects moved to member success' : 'object moved to member success';
                $log_datas = array();
                $actions = array();
                // add to application logs
                foreach ($objects as $obj) {
                    $actions[$obj->getId()] = array_var($from, $obj->getId()) ? ApplicationLogs::ACTION_MOVE : ApplicationLogs::ACTION_COPY;
                    $log_datas[$obj->getId()] = (array_var($from, $obj->getId()) ? "from:" . array_var($from, $obj->getId()) . ";" : "") . "to:" . $member->getId();
                }
            } else {
                if ($dim_id = array_var($_POST, 'dimension')) {
                    $dimension = Dimensions::getDimensionById($dim_id);
                    $from = array();
                    foreach ($ids as $oid) {
                        /* @var $obj ContentDataObject */
                        $obj = Objects::findObject($oid);
                        if ($obj instanceof ContentDataObject) {
                            $db_res = DB::execute("SELECT group_concat(om.member_id) as old_members FROM " . TABLE_PREFIX . "object_members om INNER JOIN " . TABLE_PREFIX . "members m ON om.member_id=m.id WHERE m.dimension_id=" . $dim_id . " AND om.object_id=" . $obj->getId());
                            $row = $db_res->fetchRow();
                            if (array_var($row, 'old_members') != "") {
                                $from[$obj->getId()] = $row['old_members'];
                            }
                            // remove from previous members
                            ObjectMembers::delete('`object_id` = ' . $obj->getId() . ' AND `member_id` IN (
							SELECT `m`.`id` FROM `' . TABLE_PREFIX . 'members` `m` WHERE `m`.`dimension_id` = ' . $dim_id . ')');
                        }
                        $obj->addToMembers(array());
                        $obj->addToSharingTable();
                        $objects[] = $obj;
                    }
                    $display_name = $dimension->getName();
                    $lang_key = count($ids) > 1 ? 'objects removed from' : 'object removed from';
                    $log_datas = array();
                    $actions = array();
                    // add to application logs
                    foreach ($objects as $obj) {
                        $actions[$obj->getId()] = array_var($from, $obj->getId()) ? ApplicationLogs::ACTION_MOVE : ApplicationLogs::ACTION_COPY;
                        $log_datas[$obj->getId()] = array_var($from, $obj->getId()) ? "from:" . array_var($from, $obj->getId()) . ";" : "";
                    }
                }
            }
            DB::commit();
            foreach ($objects as $object) {
                ApplicationLogs::instance()->createLog($object, $actions[$object->getId()], false, true, true, $log_datas[$object->getId()]);
            }
            flash_success(lang($lang_key, $display_name));
            if (array_var($_POST, 'reload')) {
                ajx_current('reload');
            } else {
                ajx_current('empty');
            }
        } catch (Exception $e) {
            DB::rollback();
            ajx_current("empty");
            flash_error($e->getMessage());
        }
    }
 /**
  * 
  * 
  */
 public function activity_feed()
 {
     ajx_set_no_back(true);
     require_javascript("og/modules/dashboardComments.js");
     require_javascript("jquery/jquery.scrollTo-min.js");
     /* get query parameters */
     $filesPerPage = config_option('files_per_page');
     $start = array_var($_GET, 'start') ? (int) array_var($_GET, 'start') : 0;
     $limit = array_var($_GET, 'limit') ? array_var($_GET, 'limit') : $filesPerPage;
     $order = array_var($_GET, 'sort');
     $orderdir = array_var($_GET, 'dir');
     $page = (int) ($start / $limit) + 1;
     $hide_private = !logged_user()->isMemberOfOwnerCompany();
     $typeCSV = array_var($_GET, 'type');
     $types = null;
     if ($typeCSV) {
         $types = explode(",", $typeCSV);
     }
     $name_filter = array_var($_GET, 'name');
     $linked_obj_filter = array_var($_GET, 'linkedobject');
     $object_ids_filter = '';
     if (!is_null($linked_obj_filter)) {
         $linkedObject = Objects::findObject($linked_obj_filter);
         $objs = $linkedObject->getLinkedObjects();
         foreach ($objs as $obj) {
             $object_ids_filter .= ($object_ids_filter == '' ? '' : ',') . $obj->getId();
         }
     }
     $filters = array();
     if (!is_null($types)) {
         $filters['types'] = $types;
     }
     if (!is_null($name_filter)) {
         $filters['name'] = $name_filter;
     }
     if ($object_ids_filter != '') {
         $filters['object_ids'] = $object_ids_filter;
     }
     $user = array_var($_GET, 'user');
     $trashed = array_var($_GET, 'trashed', false);
     $archived = array_var($_GET, 'archived', false);
     /* if there's an action to execute, do so */
     if (array_var($_GET, 'action') == 'delete') {
         $ids = explode(',', array_var($_GET, 'objects'));
         $result = Objects::getObjectsFromContext(active_context(), null, null, false, false, array('object_ids' => implode(",", $ids)));
         $objects = $result->objects;
         list($succ, $err) = $this->do_delete_objects($objects);
         if ($err > 0) {
             flash_error(lang('error delete objects', $err));
         } else {
             flash_success(lang('success delete objects', $succ));
         }
     } else {
         if (array_var($_GET, 'action') == 'delete_permanently') {
             $ids = explode(',', array_var($_GET, 'objects'));
             $result = Objects::getObjectsFromContext(active_context(), null, null, true, false, array('object_ids' => implode(",", $ids)));
             $objects = $result->objects;
             list($succ, $err) = $this->do_delete_objects($objects, true);
             if ($err > 0) {
                 flash_error(lang('error delete objects', $err));
             }
             if ($succ > 0) {
                 flash_success(lang('success delete objects', $succ));
             }
         } else {
             if (array_var($_GET, 'action') == 'markasread') {
                 $ids = explode(',', array_var($_GET, 'objects'));
                 list($succ, $err) = $this->do_mark_as_read_unread_objects($ids, true);
             } else {
                 if (array_var($_GET, 'action') == 'markasunread') {
                     $ids = explode(',', array_var($_GET, 'objects'));
                     list($succ, $err) = $this->do_mark_as_read_unread_objects($ids, false);
                 } else {
                     if (array_var($_GET, 'action') == 'empty_trash_can') {
                         $result = Objects::getObjectsFromContext(active_context(), 'trashed_on', 'desc', true);
                         $objects = $result->objects;
                         list($succ, $err) = $this->do_delete_objects($objects, true);
                         if ($err > 0) {
                             flash_error(lang('error delete objects', $err));
                         }
                         if ($succ > 0) {
                             flash_success(lang('success delete objects', $succ));
                         }
                     } else {
                         if (array_var($_GET, 'action') == 'archive') {
                             $ids = explode(',', array_var($_GET, 'objects'));
                             list($succ, $err) = $this->do_archive_unarchive_objects($ids, 'archive');
                             if ($err > 0) {
                                 flash_error(lang('error archive objects', $err));
                             } else {
                                 flash_success(lang('success archive objects', $succ));
                             }
                         } else {
                             if (array_var($_GET, 'action') == 'unarchive') {
                                 $ids = explode(',', array_var($_GET, 'objects'));
                                 list($succ, $err) = $this->do_archive_unarchive_objects($ids, 'unarchive');
                                 if ($err > 0) {
                                     flash_error(lang('error unarchive objects', $err));
                                 } else {
                                     flash_success(lang('success unarchive objects', $succ));
                                 }
                             } else {
                                 if (array_var($_GET, 'action') == 'unclassify') {
                                     $ids = explode(',', array_var($_GET, 'objects'));
                                     $err = 0;
                                     $succ = 0;
                                     foreach ($ids as $id) {
                                         $split = explode(":", $id);
                                         $type = $split[0];
                                         if ($type == 'MailContents') {
                                             $email = MailContents::findById($split[1]);
                                             if (isset($email) && !$email->isDeleted() && $email->canEdit(logged_user())) {
                                                 if (MailController::do_unclassify($email)) {
                                                     $succ++;
                                                 } else {
                                                     $err++;
                                                 }
                                             } else {
                                                 $err++;
                                             }
                                         }
                                     }
                                     if ($err > 0) {
                                         flash_error(lang('error unclassify emails', $err));
                                     } else {
                                         flash_success(lang('success unclassify emails', $succ));
                                     }
                                 } else {
                                     if (array_var($_GET, 'action') == 'restore') {
                                         $errorMessage = null;
                                         $ids = explode(',', array_var($_GET, 'objects'));
                                         $success = 0;
                                         $error = 0;
                                         foreach ($ids as $id) {
                                             $obj = Objects::findObject($id);
                                             if ($obj->canDelete(logged_user())) {
                                                 try {
                                                     $obj->untrash($errorMessage);
                                                     ApplicationLogs::createLog($obj, ApplicationLogs::ACTION_UNTRASH);
                                                     $success++;
                                                 } catch (Exception $e) {
                                                     $error++;
                                                 }
                                             } else {
                                                 $error++;
                                             }
                                         }
                                         if ($success > 0) {
                                             flash_success(lang("success untrash objects", $success));
                                         }
                                         if ($error > 0) {
                                             $errorString = is_null($errorMessage) ? lang("error untrash objects", $error) : $errorMessage;
                                             flash_error($errorString);
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     /*FIXME else if (array_var($_GET, 'action') == 'move') {
     			$wsid = array_var($_GET, "moveTo");
     			$destination = Projects::findById($wsid);
     			if (!$destination instanceof Project) {
     				$resultMessage = lang('project dnx');
     				$resultCode = 1;
     			} else if (!can_add(logged_user(), $destination, 'ProjectMessages')) {
     				$resultMessage = lang('no access permissions');
     				$resultCode = 1;
     			} else {
     				$ids = explode(',', array_var($_GET, 'objects'));
     				$count = 0;
     				DB::beginWork();
     				foreach ($ids as $id) {
     					$split = explode(":", $id);
     					$type = $split[0];
     					$obj = Objects::findObject($split[1]);
     					$mantainWs = array_var($_GET, "mantainWs");
     					if ($type != 'Projects' && $obj->canEdit(logged_user())) {
     						if ($type == 'MailContents') {
     							$email = MailContents::findById($split[1]);
     							$conversation = MailContents::getMailsFromConversation($email);
     							foreach ($conversation as $conv_email) {
     								$count += MailController::addEmailToWorkspace($conv_email->getId(), $destination, $mantainWs);
     								if (array_var($_GET, 'classify_atts') && $conv_email->getHasAttachments()) {
     									MailUtilities::parseMail($conv_email->getContent(), $decoded, $parsedEmail, $warnings);
     									$classification_data = array();
     									for ($j=0; $j < count(array_var($parsedEmail, "Attachments", array())); $j++) {
     										$classification_data["att_".$j] = true;		
     									}
     									$tags = implode(",", $conv_email->getTagNames());
     									MailController::classifyFile($classification_data, $conv_email, $parsedEmail, array($destination), $mantainWs, $tags);
     								}								
     							}
     							$count++;
     						} else {
     							if (!$mantainWs || $type == 'ProjectTasks' || $type == 'ProjectMilestones') {
     								$removed = "";
     								$ws = $obj->getWorkspaces();
     								foreach ($ws as $w) {
     									if (can_add(logged_user(), $w, $type)) {
     										$obj->removeFromWorkspace($w);
     										$removed .= $w->getId() . ",";
     									}
     								}
     								$removed = substr($removed, 0, -1);
     								$log_action = ApplicationLogs::ACTION_MOVE;
     								$log_data = ($removed == "" ? "" : "from:$removed;") . "to:$wsid";
     							} else {
     								$log_action = ApplicationLogs::ACTION_COPY;
     								$log_data = "to:$wsid";
     							}
     							$obj->addToWorkspace($destination);
     							ApplicationLogs::createLog($obj, $log_action, false, null, true, $log_data);
     							$count++;
     						}
     					}
     				}
     				if ($count > 0) {
     					$reload = true;
     					DB::commit();
     					flash_success(lang("success move objects", $count));
     				} else {
     					DB::rollback();
     				}
     			}
     		}*/
     $filterName = array_var($_GET, 'name');
     $result = null;
     $context = active_context();
     $obj_type_types = array('content_object');
     if (array_var($_GET, 'include_comments')) {
         $obj_type_types[] = 'comment';
     }
     $pagination = Objects::getObjects($context, $start, $limit, $order, $orderdir, $trashed, $archived, $filters, $start, $limit, $obj_type_types);
     $result = $pagination->objects;
     $total_items = $pagination->total;
     if (!$result) {
         $result = array();
     }
     /* prepare response object */
     $info = array();
     foreach ($result as $obj) {
         $info_elem = $obj->getArrayInfo($trashed, $archived);
         $instance = Objects::instance()->findObject($info_elem['object_id']);
         $info_elem['url'] = $instance->getViewUrl();
         if (method_exists($instance, "getText")) {
             $info_elem['content'] = $instance->getText();
         }
         $info_elem['picture'] = $instance->getCreatedBy()->getPictureUrl();
         $info_elem['friendly_date'] = friendly_date($instance->getCreatedOn());
         $info_elem['comment'] = $instance->getComments();
         /* @var $instance Contact  */
         if ($instance instanceof Contact) {
             if ($instance->isCompany()) {
                 $info_elem['icon'] = 'ico-company';
                 $info_elem['type'] = 'company';
             }
         }
         $info_elem['isRead'] = $instance->getIsRead(logged_user()->getId());
         $info_elem['manager'] = get_class($instance->manager());
         $info[] = $info_elem;
     }
     $listing = array("totalCount" => $total_items, "start" => $start, "objects" => $info);
     tpl_assign("feeds", $listing);
 }
Exemple #23
0
		$pass = $account->getSyncPass();		
		$server = $account->getSyncServer();
		$folder = $account->getSyncFolder();
		$address = $account->getSyncAddr();		
		if($pass == null || $server == null || $folder == null || $address == null) {		
			echo(lang('cant sync account'));	
		    ?><br><a href="<?php echo ROOT_URL?>/index.php?c=access&a=index" target="_top">Go back to Feng Office</a><?php
			return;
		}			
		$conditions = array("conditions" => array("`sync`=0 AND `state` = 3 AND `account_id` =".$account->getId()));			
		
		$check_sync_box = MailUtilities::checkSyncMailbox($server, $account->getSyncSsl(), $account->getOutgoingTrasnportType(), $account->getSyncSslPort(), $folder, $address, $pass);		
				
		if ($check_sync_box){
			$sent_mails = MailContents::findAll($conditions);			
			if (count($sent_mails)==0){
				echo(lang('mails on imap acc already sync'));											
				?><br><a href="<?php echo ROOT_URL?>/index.php?c=access&a=index" target="_top">Go back to Feng Office</a><?php
				return;
			}		
			foreach ($sent_mails as $mail){			
				try{
					DB::beginWork();				
					$content = $mail->getContent();		
					MailUtilities::sendToServerThroughIMAP($server, $account->getSyncSsl(), $account->getOutgoingTrasnportType(), $account->getSyncSslPort(), $folder, $address, $pass, $content);			
					$mail->setSync(true);
					$mail->save();
					DB::commit();				
				}
				catch(Exception $e){			
	function delete($deleteMails = false){
		MailAccountContacts::deleteByAccount($this);
		if ($deleteMails) {
			session_commit();
			ini_set('memory_limit', '1024M');
			
			LinkedObjects::delete(array("(`object_id` IN (SELECT `object_id` FROM `".TABLE_PREFIX."mail_contents` WHERE `account_id` = " . DB::escape($this->getId()).")) 
				or (`rel_object_id` IN (SELECT `object_id` FROM `".TABLE_PREFIX."mail_contents` WHERE `account_id` = " . DB::escape($this->getId())."))")); 
			
      		SearchableObjects::delete(array("`rel_object_id` IN (SELECT `object_id` FROM `".TABLE_PREFIX."mail_contents` WHERE `account_id` = " . DB::escape($this->getId()).") "));
			ReadObjects::delete("`rel_object_id` IN (SELECT `object_id` FROM `".TABLE_PREFIX."mail_contents` WHERE `account_id` = " . DB::escape($this->getId()).") ");
			
			$account_email_ids = MailContents::findAll(array('id' => true, 'conditions' => '`account_id` = ' . DB::escape($this->getId()), 'include_trashed' => true));
			if (count($account_email_ids) > 0) {
				MailDatas::delete('id IN ('.implode(',', $account_email_ids).')');
				MailContents::delete('`account_id` = ' . DB::escape($this->getId()));
			}
		}
		if ($this->getIsImap()) {
			MailAccountImapFolders::delete('account_id = ' . $this->getId());
		}
		parent::delete();
	}
 static function prepareTrashAndArchivedConditions($trashed, $archived)
 {
     $trashed_cond = "`o`.`trashed_on` " . ($trashed ? ">" : "=") . " " . DB::escape(EMPTY_DATETIME);
     if ($trashed) {
         $archived_cond = "";
     } else {
         $archived_cond = "AND `o`.`archived_on` " . ($archived ? ">" : "=") . " " . DB::escape(EMPTY_DATETIME);
     }
     if ($trashed && Plugins::instance()->isActivePlugin('mail')) {
         $mail_accounts = MailAccounts::getMailAccountsByUser(logged_user());
         $mail_account_ids = array();
         foreach ($mail_accounts as $account) {
             $mail_account_ids[] = $account->getId();
         }
         $mcot_id = MailContents::instance()->getObjectTypeId();
         if (empty($mail_account_ids)) {
             $trashed_cond .= " AND IF(o.object_type_id={$mcot_id}, 0, 1)";
         } else {
             $trashed_cond .= " AND IF(o.object_type_id={$mcot_id}, NOT (SELECT mcx.is_deleted FROM " . TABLE_PREFIX . "mail_contents mcx WHERE mcx.object_id=o.id) AND EXISTS (SELECT mct.object_id FROM " . TABLE_PREFIX . "mail_contents mct WHERE mct.object_id=o.id AND mct.account_id IN(" . implode(',', $mail_account_ids) . ")), 1)";
         }
     }
     return array($trashed_cond, $archived_cond);
 }
 /**
  * Add new task
  *
  * @access public
  * @param void
  * @return null
  */
 function add_task()
 {
     //is template task?
     $isTemplateTask = false;
     if (array_var($_REQUEST, 'template_task') == true) {
         $isTemplateTask = true;
         if (array_var($_REQUEST, 'template_id')) {
             $template_id = array_var($_REQUEST, 'template_id');
         } else {
             $template_id = 0;
         }
         tpl_assign('template_id', $template_id);
         tpl_assign('additional_tt_params', array_var($_REQUEST, 'additional_tt_params'));
     }
     if (logged_user()->isGuest()) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     $email = null;
     $context = active_context();
     $member_ids = json_decode(array_var($_POST, 'members', null));
     if (is_array($member_ids) && count($member_ids) > 0) {
         $context = Members::findAll(array('conditions' => 'id IN (' . implode(',', $member_ids) . ')'));
     }
     $notAllowedMember = '';
     if (!ProjectTask::canAdd(logged_user(), $context, $notAllowedMember) && !$isTemplateTask && is_array(array_var($_POST, 'task'))) {
         if (str_starts_with($notAllowedMember, '-- req dim --')) {
             $msg = lang('must choose at least one member of', str_replace_first('-- req dim --', '', $notAllowedMember, $in));
         } else {
             trim($notAllowedMember) == "" ? $msg = lang('you must select where to keep', lang('the task')) : ($msg = lang('no context permissions to add', lang("tasks"), $notAllowedMember));
         }
         if (array_var($_REQUEST, 'modal')) {
             $this->setLayout("json");
             $this->setTemplate(get_template_path("empty"));
             $params = array('errorMessage' => $msg, 'errorCode' => 1, 'showMessage' => 1, 'reload' => array_var($_REQUEST, 'reload'));
             print_modal_json_response($params, true, array_var($_REQUEST, 'use_ajx'));
         } else {
             flash_success($msg);
         }
         ajx_current("empty");
         return;
     }
     //is template task?
     if (array_var($_REQUEST, 'template_task') == true) {
         $task = new TemplateTask();
         $this->setTemplate(get_template_path('add_template_task', 'template_task'));
     } else {
         $task = new ProjectTask();
     }
     $task_data = array_var($_POST, 'task');
     if (is_array($task_data)) {
         foreach ($task_data as $k => &$v) {
             $v = remove_scripts($v);
         }
     }
     if (!is_array($task_data)) {
         // set layout for modal form
         if (array_var($_REQUEST, 'modal')) {
             $this->setLayout("json");
             tpl_assign('modal', true);
         }
         $dd = getDateValue(array_var($_POST, 'task_due_date', ''));
         if ($dd instanceof DateTimeValue) {
             $duetime = getTimeValue(array_var($_POST, 'task_due_time'));
             if (is_array($duetime)) {
                 $dd->setHour(array_var($duetime, 'hours'));
                 $dd->setMinute(array_var($duetime, 'mins'));
             }
             $task->setUseDueTime(is_array($duetime));
         }
         $sd = getDateValue(array_var($_POST, 'task_start_date', ''));
         if ($sd instanceof DateTimeValue) {
             $starttime = getTimeValue(array_var($_POST, 'task_start_time'));
             if (is_array($starttime)) {
                 $sd->setHour(array_var($starttime, 'hours'));
                 $sd->setMinute(array_var($starttime, 'mins'));
             }
             $task->setUseStartTime(is_array($starttime));
         }
         $time_estimate = array_var($_POST, 'hours', 0) * 60 + array_var($_POST, 'minutes', 0);
         if (config_option("wysiwyg_tasks")) {
             $text_post = preg_replace("/[\n|\r|\n\r]/", '', array_var($_POST, 'text', ''));
         } else {
             $text_post = array_var($_POST, 'text', '');
         }
         $task_data = array('milestone_id' => array_var($_REQUEST, 'milestone_id', 0), 'project_id' => 1, 'name' => array_var($_REQUEST, 'name', ''), 'assigned_to_contact_id' => array_var($_REQUEST, 'assigned_to_contact_id', '0'), 'selected_members_ids' => json_decode(array_var($_POST, 'members', null)), 'parent_id' => array_var($_REQUEST, 'parent_id', 0), 'priority' => array_var($_POST, 'priority', ProjectTasks::PRIORITY_NORMAL), 'text' => $text_post, 'start_date' => $sd, 'due_date' => $dd, 'time_estimate' => $time_estimate, 'is_template' => array_var($_POST, "is_template", array_var($_GET, "is_template", false)), 'percent_completed' => array_var($_POST, "percent_completed", ''), 'object_subtype' => array_var($_POST, "object_subtype", config_option('default task co type')), 'send_notification_subscribers' => user_config_option("can notify subscribers"));
         // array
         if (Plugins::instance()->isActivePlugin('mail')) {
             $from_email = array_var($_GET, 'from_email');
             $email = MailContents::findById($from_email);
             if ($email instanceof MailContent) {
                 $task_data['name'] = $email->getSubject();
                 $task_data['text'] = lang('create task from email description', $email->getSubject(), $email->getFrom(), $email->getTextBody());
                 $task_data['selected_members_ids'] = $email->getMemberIds();
                 tpl_assign('from_email', $email);
             }
         }
         tpl_assign('additional_onsubmit', array_var($_REQUEST, 'additional_onsubmit'));
     }
     // if
     if (array_var($_GET, 'replace')) {
         ajx_replace(true);
     }
     tpl_assign('task_data', $task_data);
     tpl_assign('task', $task);
     tpl_assign('pending_task_id', 0);
     $subtasks = array();
     if (array_var($_POST, 'multi_assignment')) {
         $subtasks = json_decode(array_var($_POST, 'multi_assignment'), true);
     }
     tpl_assign('multi_assignment', $subtasks);
     if (is_array(array_var($_POST, 'task'))) {
         try {
             // order
             $task->setOrder(ProjectTasks::maxOrder(array_var($task_data, "parent_id", 0), array_var($task_data, "milestone_id", 0)));
             try {
                 $task_data['due_date'] = getDateValue(array_var($_POST, 'task_due_date'));
                 $task_data['start_date'] = getDateValue(array_var($_POST, 'task_start_date'));
             } catch (Exception $e) {
                 throw new Exception(lang('date format error', date_format_tip(user_config_option('date_format'))));
             }
             if ($task_data['due_date'] instanceof DateTimeValue) {
                 $duetime = getTimeValue(array_var($_POST, 'task_due_time'));
                 if (is_array($duetime)) {
                     $task_data['due_date']->setHour(array_var($duetime, 'hours'));
                     $task_data['due_date']->setMinute(array_var($duetime, 'mins'));
                     $task_data['due_date']->advance(logged_user()->getTimezone() * -3600);
                 }
                 $task_data['use_due_time'] = is_array($duetime);
             }
             if ($task_data['start_date'] instanceof DateTimeValue) {
                 $starttime = getTimeValue(array_var($_POST, 'task_start_time'));
                 if (is_array($starttime)) {
                     $task_data['start_date']->setHour(array_var($starttime, 'hours'));
                     $task_data['start_date']->setMinute(array_var($starttime, 'mins'));
                     $task_data['start_date']->advance(logged_user()->getTimezone() * -3600);
                 }
                 $task_data['use_start_time'] = is_array($starttime);
             }
             $err_msg = $this->setRepeatOptions($task_data);
             if ($err_msg) {
                 throw new Exception($err_msg);
             }
             if (config_option("wysiwyg_tasks")) {
                 $task_data['type_content'] = "html";
                 $task_data['text'] = str_replace(array("\r", "\n", "\r\n"), array('', '', ''), array_var($task_data, 'text'));
             } else {
                 $task_data['type_content'] = "text";
             }
             $task_data['object_type_id'] = $task->getObjectTypeId();
             $member_ids = json_decode(array_var($_POST, 'members'));
             $task->setFromAttributes($task_data);
             if (!can_task_assignee(logged_user())) {
                 flash_error(lang('no access permissions'));
                 ajx_current("empty");
                 return;
             }
             $totalMinutes = array_var($task_data, 'time_estimate_hours', 0) * 60 + array_var($task_data, 'time_estimate_minutes', 0);
             $task->setTimeEstimate($totalMinutes);
             $id = array_var($_GET, 'id', 0);
             if ($task instanceof TemplateTask) {
                 //evt_add("template task added", array("id_template_task" => $file->getId()));
                 $parent = TemplateTasks::findById($id);
                 if ($parent instanceof TemplateTask) {
                     $task->setParentId($id);
                     $member_ids = $parent->getMemberIds();
                 }
                 //template id
                 $task->setTemplateId($template_id);
             } else {
                 $parent = ProjectTasks::findById($id);
                 if ($parent instanceof ProjectTask) {
                     $task->setParentId($id);
                     $member_ids = $parent->getMemberIds();
                 }
             }
             if ($task->getParentId() > 0 && $task->hasChild($task->getParentId())) {
                 flash_error(lang('task child of child error'));
                 ajx_current("empty");
                 return;
             }
             if ($task instanceof TemplateTask) {
                 $task->setSessionId(logged_user()->getId());
             }
             DB::beginWork();
             $task->save();
             // dependencies
             if (config_option('use tasks dependencies')) {
                 $previous_tasks = array_var($task_data, 'previous');
                 if (is_array($previous_tasks)) {
                     foreach ($previous_tasks as $ptask) {
                         if ($ptask == $task->getId()) {
                             continue;
                         }
                         $dep = ProjectTaskDependencies::findById(array('previous_task_id' => $ptask, 'task_id' => $task->getId()));
                         if (!$dep instanceof ProjectTaskDependency) {
                             $dep = new ProjectTaskDependency();
                             $dep->setPreviousTaskId($ptask);
                             $dep->setTaskId($task->getId());
                             $dep->save();
                         }
                     }
                 }
             }
             if (array_var($_GET, 'copyId', 0) > 0) {
                 // copy remaining stuff from the task with id copyId
                 $toCopy = ProjectTasks::findById(array_var($_GET, 'copyId'));
                 if ($toCopy instanceof ProjectTask) {
                     ProjectTasks::copySubTasks($toCopy, $task, array_var($task_data, 'is_template', false));
                 }
             }
             // if task is added from task view -> add subscribers
             if (array_var($task_data, 'inputtype') == 'taskview') {
                 if (!isset($_POST['subscribers'])) {
                     $_POST['subscribers'] = array();
                 }
                 $_POST['subscribers']['user_' . logged_user()->getId()] = '1';
                 if ($task->getAssignedToContactId() > 0 && Contacts::instance()->findById($task->getAssignedToContactId())->getUserType()) {
                     $_POST['subscribers']['user_' . $task->getAssignedToContactId()] = '1';
                 }
             }
             // Add assigned user to the subscibers list
             if (isset($_POST['subscribers']) && $task->getAssignedToContactId() > 0 && Contacts::instance()->findById($task->getAssignedToContactId())) {
                 $_POST['subscribers']['user_' . $task->getAssignedToContactId()] = '1';
             }
             //Link objects
             $object_controller = new ObjectController();
             if ($task instanceof TemplateTask) {
                 //if(!empty($member_ids)){
                 $object_controller->add_to_members($task, $member_ids, null, false);
                 //}
             } else {
                 $object_controller->add_to_members($task, $member_ids);
             }
             $is_template = $task instanceof TemplateTask;
             $object_controller->add_subscribers($task, null, !$is_template);
             $object_controller->link_to_new_object($task);
             $object_controller->add_custom_properties($task);
             $object_controller->add_reminders($task);
             if (config_option('repeating_task') == 1) {
                 $opt_rep_day['saturday'] = false;
                 $opt_rep_day['sunday'] = false;
                 if (array_var($task_data, 'repeat_saturdays', false)) {
                     $opt_rep_day['saturday'] = true;
                 }
                 if (array_var($task_data, 'repeat_sundays', false)) {
                     $opt_rep_day['sunday'] = true;
                 }
                 $this->repetitive_task($task, $opt_rep_day);
             }
             if (config_option('multi_assignment') && Plugins::instance()->isActivePlugin('crpm')) {
                 $subtasks = array_var($_POST, 'multi_assignment');
                 Hook::fire('save_subtasks', $task, $subtasks);
             }
             //for calculate member status we save de task again after the object have the members
             $task->save();
             DB::commit();
             // save subtasks added in 'subtasks' tab
             DB::beginWork();
             $sub_tasks_to_log = $this->saveSubtasks($task, array_var($task_data, 'subtasks'), $member_ids);
             DB::commit();
             foreach ($sub_tasks_to_log['add'] as $st_to_log) {
                 ApplicationLogs::createLog($st_to_log, ApplicationLogs::ACTION_ADD);
             }
             foreach ($sub_tasks_to_log['edit'] as $st_to_log) {
                 ApplicationLogs::createLog($st_to_log, ApplicationLogs::ACTION_EDIT);
             }
             foreach ($sub_tasks_to_log['trash'] as $st_to_log) {
                 ApplicationLogs::createLog($st_to_log, ApplicationLogs::ACTION_TRASH);
             }
             //Send Template task to view
             if ($task instanceof TemplateTask) {
                 $objectId = $task->getObjectId();
                 $id = $task->getId();
                 $objectTypeName = $task->getObjectTypeName();
                 $objectName = $task->getObjectName();
                 $manager = get_class($task->manager());
                 $milestoneId = $task instanceof TemplateTask ? $task->getMilestoneId() : '0';
                 $subTasks = array();
                 $parentId = $task->getParentId();
                 $ico = "ico-task";
                 $action = "add";
                 $object = TemplateController::prepareObject($objectId, $id, $objectName, $objectTypeName, $manager, $action, $milestoneId, $subTasks, $parentId, $ico);
                 $template_task_data = array('object' => $object);
                 if (array_var($_REQUEST, 'additional_tt_params')) {
                     $additional_tt_params = json_decode(str_replace("'", '"', array_var($_REQUEST, 'additional_tt_params')), true);
                     foreach ($additional_tt_params as $k => $v) {
                         $template_task_data[$k] = $v;
                     }
                 }
                 if (!array_var($_REQUEST, 'modal')) {
                     evt_add("template object added", $template_task_data);
                 }
             }
             // notify asignee
             if (array_var($task_data, 'send_notification')) {
                 if ($task instanceof ProjectTask && $task->getAssignedToContactId() != $task->getAssignedById()) {
                     try {
                         Notifier::taskAssigned($task);
                     } catch (Exception $e) {
                         evt_add("debug", $e->getMessage());
                     }
                     // try
                 }
                 // notify asignee for subtasks
                 foreach ($sub_tasks_to_log['assigned'] as $st_to_log) {
                     if ($st_to_log instanceof ProjectTask && $st_to_log->getAssignedToContactId() != $st_to_log->getAssignedById()) {
                         try {
                             Notifier::taskAssigned($st_to_log);
                         } catch (Exception $e) {
                             evt_add("debug", $e->getMessage());
                         }
                         // try
                     }
                 }
             }
             //notify subscribers
             $isSilent = true;
             if (array_var($task_data, 'send_notification_subscribers')) {
                 $isSilent = false;
             }
             ApplicationLogs::createLog($task, ApplicationLogs::ACTION_ADD, null, $isSilent);
             if (array_var($_REQUEST, 'modal')) {
                 ajx_current("empty");
                 $this->setLayout("json");
                 $this->setTemplate(get_template_path("empty"));
                 // reload task info because plugins may have updated some task info (for example: name prefix)
                 if ($is_template) {
                     $task = TemplateTasks::findById($task->getId());
                 } else {
                     $task = ProjectTasks::findById($task->getId());
                 }
                 $params = array('msg' => lang('success add task list', $task->getObjectName()), 'task' => $task->getArrayInfo(), 'reload' => array_var($_REQUEST, 'reload'));
                 if ($task instanceof TemplateTask) {
                     $params['msg'] = lang('success add template', $task->getObjectName());
                     $params['object'] = $template_task_data['object'];
                 }
                 print_modal_json_response($params, true, array_var($_REQUEST, 'use_ajx'));
             } else {
                 if ($task instanceof TemplateTask) {
                     flash_success(lang('success add template', $task->getObjectName()));
                 } else {
                     flash_success(lang('success add task list', $task->getObjectName()));
                 }
                 if (array_var($task_data, 'inputtype') != 'taskview') {
                     ajx_current("back");
                 } else {
                     ajx_current("reload");
                 }
             }
         } catch (Exception $e) {
             DB::rollback();
             if (array_var($_REQUEST, 'modal')) {
                 $this->setLayout("json");
                 $this->setTemplate(get_template_path("empty"));
                 print_modal_json_response(array('errorCode' => 1, 'errorMessage' => $e->getMessage(), 'showMessage' => 1), true, array_var($_REQUEST, 'use_ajx'));
             } else {
                 flash_error($e->getMessage());
             }
             ajx_current("empty");
         }
         // try
     }
     // if
 }
Exemple #27
0
					$icon = "unknown.png";
				$download_url = get_url('mail', 'download_attachment', array('email_id' => $email->getId(), 'attachment_id' => $c));
				include_once ROOT . "/library/browser/Browser.php";
				if (Browser::instance()->getBrowser() == Browser::BROWSER_IE) {
					$download_url = "javascript:location.href = '$download_url';";
				}
	      		$description .=	'<img src="' . get_image_url("filetypes/" . $icon) .'"></td>
				<td><a target="_self" href="' . $download_url . '">' . clean($fName) . " ($size)" . '</a></td></tr>';
			}
      		$c++;
		}
		$description .= '</table></div></fieldset></td></tr>';
  } //if
  $description .= '</table></div>';
		if (($email_count = MailContents::countMailsInConversation($email)) > 1) {
			$emails_info = MailContents::getMailsFromConversation($email);
			$conversation_block = '';
			$conversation_block .= '<div id="'.$genid.'conversation" style="margin-bottom:10px;' . 
				(count($emails_info) > 6 ? 'max-height:101px;overflow:auto' : ''  ) . '"><table style="width:100%;">';
			
			$unread = 0;
			foreach($emails_info as $count => $info) { 
				$row_cls = $count % 2 ? 'odd' : 'even';
				$is_current = $info->getId() == $email->getId();
				$style = $is_current ? "style='background-color:#FFDD78'" : "";
				$conversation_block .= '<tr class="'.$row_cls.'" ' . $style . '>';
				
				$state = $info->getState();
				$show_user_icon = false;
				if ($state == 1 || $state == 3 || $state == 5) {
					if ($info->getCreatedById() == logged_user()->getId()) {
 /**
  * Add new task
  *
  * @access public
  * @param void
  * @return null
  */
 function add_task()
 {
     if (logged_user()->isGuest()) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     $project = active_or_personal_project();
     if (!ProjectTask::canAdd(logged_user(), $project)) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     // if
     $task = new ProjectTask();
     $task_data = array_var($_POST, 'task');
     if (!is_array($task_data)) {
         $task_data = array('milestone_id' => array_var($_POST, 'milestone_id', 0), 'project_id' => array_var($_POST, 'project_id', active_or_personal_project()->getId()), 'title' => array_var($_POST, 'title', ''), 'assigned_to' => array_var($_POST, 'assigned_to', '0:0'), 'parent_id' => array_var($_POST, 'parent_id', 0), 'priority' => array_var($_POST, 'priority', ProjectTasks::PRIORITY_NORMAL), 'text' => array_var($_POST, 'text', ''), 'start_date' => getDateValue(array_var($_POST, 'task_start_date', '')), 'due_date' => getDateValue(array_var($_POST, 'task_due_date', '')), 'is_template' => array_var($_POST, "is_template", array_var($_GET, "is_template", false)), 'tags' => array_var($_POST, "tags", ''), 'object_subtype' => array_var($_POST, "object_subtype", config_option('default task co type')), 'send_notification' => array_var($_POST, 'notify') && array_var($_POST, 'notify') == 'true');
         // array
         $from_email = array_var($_GET, 'from_email');
         $email = MailContents::findById($from_email);
         if ($email instanceof MailContent) {
             $task_data['title'] = $email->getSubject();
             $task_data['text'] = lang('create task from email description', $email->getSubject(), $email->getFrom(), $email->getTextBody());
             $task_data['tags'] = implode(", ", $email->getTagNames());
             tpl_assign('from_email', $email);
         }
     }
     // if
     if (array_var($_GET, 'replace')) {
         ajx_replace(true);
     }
     tpl_assign('task_data', $task_data);
     tpl_assign('task', $task);
     if (is_array(array_var($_POST, 'task'))) {
         $proj = Projects::findById(array_var($task_data, 'project_id'));
         if ($proj instanceof Project) {
             $project = $proj;
         }
         // order
         $task->setOrder(ProjectTasks::maxOrder(array_var($task_data, "parent_id", 0), array_var($task_data, "milestone_id", 0)));
         $task_data['due_date'] = getDateValue(array_var($_POST, 'task_due_date'));
         $task_data['start_date'] = getDateValue(array_var($_POST, 'task_start_date'));
         try {
             $err_msg = $this->setRepeatOptions($task_data);
             if ($err_msg) {
                 flash_error($err_msg);
                 ajx_current("empty");
                 return;
             }
             $task->setFromAttributes($task_data);
             $totalMinutes = array_var($task_data, 'time_estimate_hours', 0) * 60 + array_var($task_data, 'time_estimate_minutes', 0);
             $task->setTimeEstimate($totalMinutes);
             $task->setIsPrivate(false);
             // Not used, but defined as not null.
             // Set assigned to
             $assigned_to = explode(':', array_var($task_data, 'assigned_to', ''));
             $company_id = array_var($assigned_to, 0, 0);
             $user_id = array_var($assigned_to, 1, 0);
             $can_assign = can_assign_task_to_company_user(logged_user(), $task, $company_id, $user_id);
             if ($can_assign !== true) {
                 flash_error($can_assign);
                 ajx_current("empty");
                 return;
             }
             $task->setAssignedToCompanyId($company_id);
             $task->setAssignedToUserId($user_id);
             $id = array_var($_GET, 'id', 0);
             $parent = ProjectTasks::findById($id);
             if ($parent instanceof ProjectTask) {
                 $task->setParentId($id);
                 if ($parent->getIsTemplate()) {
                     $task->setIsTemplate(true);
                 }
             }
             if ($task->getParentId() > 0 && $task->hasChild($task->getParentId())) {
                 flash_error(lang('task child of child error'));
                 ajx_current("empty");
                 return;
             }
             //Add handins
             $handins = array();
             for ($i = 0; $i < 4; $i++) {
                 if (isset($task_data["handin{$i}"]) && is_array($task_data["handin{$i}"]) && trim(array_var($task_data["handin{$i}"], 'title')) != '') {
                     $assigned_to = explode(':', array_var($task_data["handin{$i}"], 'assigned_to', ''));
                     $handins[] = array('title' => array_var($task_data["handin{$i}"], 'title'), 'responsible_company_id' => array_var($assigned_to, 0, 0), 'responsible_user_id' => array_var($assigned_to, 1, 0));
                     // array
                 }
                 // if
             }
             // for
             DB::beginWork();
             $task->save();
             //$task->setProject($project);
             //echo 'pepe'; DB::rollback(); die();
             $task->setTagsFromCSV(array_var($task_data, 'tags'));
             foreach ($handins as $handin_data) {
                 $handin = new ObjectHandin();
                 $handin->setFromAttributes($handin_data);
                 $handin->setObjectId($task->getId());
                 $handin->setObjectManager(get_class($task->manager()));
                 $handin->save();
             }
             // foreach*/
             if (array_var($_GET, 'copyId', 0) > 0) {
                 // copy remaining stuff from the task with id copyId
                 $toCopy = ProjectTasks::findById(array_var($_GET, 'copyId'));
                 if ($toCopy instanceof ProjectTask) {
                     ProjectTasks::copySubTasks($toCopy, $task, array_var($task_data, 'is_template', false));
                 }
             }
             //Link objects
             $object_controller = new ObjectController();
             if ($parent instanceof ProjectTask) {
                 // task is being added as subtask of another, so place in same workspace
                 $task->addToWorkspace($parent->getProject());
             } else {
                 $object_controller->add_to_workspaces($task);
             }
             $object_controller->link_to_new_object($task);
             $object_controller->add_subscribers($task);
             $object_controller->add_custom_properties($task);
             $object_controller->add_reminders($task);
             ApplicationLogs::createLog($task, $task->getWorkspaces(), ApplicationLogs::ACTION_ADD);
             DB::commit();
             // notify asignee
             if (array_var($task_data, 'send_notification') == 'checked') {
                 try {
                     Notifier::taskAssigned($task);
                 } catch (Exception $e) {
                     evt_add("debug", $e->getMessage());
                 }
                 // try
             }
             if ($task->getIsTemplate()) {
                 flash_success(lang('success add template', $task->getTitle()));
             } else {
                 flash_success(lang('success add task list', $task->getTitle()));
             }
             if (array_var($task_data, 'inputtype') != 'taskview') {
                 ajx_current("back");
             } else {
                 ajx_current("reload");
             }
         } catch (Exception $e) {
             DB::rollback();
             flash_error($e->getMessage());
             ajx_current("empty");
         }
         // try
     }
     // if
 }
	function getLinkedObjects() {
		$conv_emails = MailContents::getMailsFromConversation($this);
		$objects = array();
		foreach ($conv_emails as $mail){
			if(logged_user()->isMemberOfOwnerCompany()) {
				$mail_objects = $mail->getAllLinkedObjects();
			} else {
				if (is_null($mail->linked_objects)) {
					$mail->linked_objects = LinkedObjects::getLinkedObjectsByObject($this, true);
				}
				$mail_objects = $mail->linked_objects;
			}
			if (is_array($mail_objects)){
				foreach ($mail_objects as $mo){
					$objects[] = $mo;
				}
			}
		}
		
		if ($this->isTrashed()) {
			$include_trashed = true;
		} else {
			$include_trashed = false;
		}
		
		if ($include_trashed) {
			return $objects;
		} else {
			$ret = array();
			if (is_array($objects) && count($objects)) {
				foreach ($objects as $o) {
					if (!$o instanceof ContentDataObject || !$o->isTrashed()) {
						$ret[] = $o;
					}
				}
			}
			return $ret;
		}
	}
Exemple #30
0
<?php 
$icon_class = $linked_object->getObjectTypeName();

$belongs_to_conversation = MailContents::countMailsInConversation($linked_object) > 1;

?>
<tr class="<?php echo $counter % 2 ? 'even' : 'odd' ?>">
	<td style="padding-left:1px;vertical-align:middle;width:22px">
		<a class="internalLink" href="<?php echo $linked_object->getObjectUrl() ?>">
		<div class="db-ico unknown ico-<?php echo clean($icon_class) ?>" title="<?php echo clean($linked_object->getObjectTypeName()) ?>"></div>
	</a></td>
	
	<td><a class="internalLink" href="<?php echo $linked_object->getObjectUrl() ?>" title="<?php echo clean($linked_object->getObjectName()) ?>">
	<span><?php if ($linked_object->getState() == 2) {?><span style="color:red;font-weight:bold"><?php echo lang('draft') ?></span> - <?php } ?><?php echo clean($linked_object->getObjectName()) ?></span></a></td>
	
	<td><span class="desc"><?php echo lang('from')?>: </span><?php echo $linked_object->getFrom()?></td>
	
	<?php $date_str = $linked_object->getSentDate() instanceof DateTimeValue ? ($linked_object->getSentDate()->isToday() ? format_time($linked_object->getSentDate(), null, logged_user()->getTimezone()) : format_datetime($linked_object->getSentDate(), $date_format, logged_user()->getTimezone())) : lang('n/a') ?>
	<td><span class="desc"><?php echo lang('date')?>: </span><?php echo $date_str ?></td>
	
	<td>
	<?php if ($belongs_to_conversation) { ?>
		<div onclick="og.loadConversation('<?php echo $genid ?>', <?php echo $linked_object->getId()?>);" class="db-ico ico-comment" style="cursor: pointer;"></div>
	<?php } ?>
	</td>
	
	<td style="text-align:right;">
	<?php
	if ($linked_objects_object->canUnlinkObject(logged_user(), $linked_object)) { 
		echo '<a class="internalLink" href="' . $linked_objects_object->getUnlinkObjectUrl($linked_object) . '" onclick="return confirm(\'' . escape_single_quotes(lang('confirm unlink object')) . '\')" title="' . lang('unlink object') . '">' . lang('unlink') . '</a>';
	} ?>