Как импортировать задачи из email от незарегистрированых пользователей

Нашим клиентам потребовалось импортировать задачи из почты, в том числе и от незарегистрированных пользователей. В TrackStudio 3.5 такая функциональность была, но вызывала массу проблем, поэтому мы от нее избавились. В TrackStudio 4.0 всё то же самое можно сделать с помощью одного триггера.

Внимание! Этот скрипт работает правильно в TrackStudio начиная с версии 4.0.6

Предварительно вам следует настроить импорт задач от существующих пользователей.
Мы будем создавать задачи из электронных писем с помощью встроенного механизма импорта, но при этом проверять наличие указанного пользователя в системе и, при необходимости, регистрировать нового пользователя, прописывать ему права на проект и создавать задачу от его имени.

package scripts.before_create_task;

import com.trackstudio.app.adapter.AdapterManager;
import com.trackstudio.exception.GranException;
import com.trackstudio.external.TaskTrigger;
import com.trackstudio.kernel.manager.KernelManager;
import com.trackstudio.kernel.manager.UserManager;
import com.trackstudio.secured.SecuredTaskTriggerBean;
import com.trackstudio.tools.Null;

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class CreateUserFromEmail implements TaskTrigger {
    public SecuredTaskTriggerBean execute(SecuredTaskTriggerBean task) throws GranException {
        String s = task.getDescription();

        //String userStatusId = "d14883c11eef1ae9011eef360b6f0045"; //внешние пользователи
        String userStatusId = task.getSubmitter().getPrstatusId();
        if (s != null && s.length() > 0) {
            String emailPattern = "From:\\s*\\\"?(\\S+\\s*\\S+[^\\\"])?\\\"?\\s+(<|&lt;)?(([-a-z0-9!#$%&'*+/=?^_`{|}~]+(\\.[-a-z0-9!#$%&'*+/=?^_`{|}~]+)*)@([a-z0-9.]+))(&gt;|>)?";
            // From: max.vasenkov@gmail.com
            // From: Maxim Vasenkov <max.vasenkov@gmail.com>
            // From: Maxim Vasenkov &lt;max.vasenkov@gmail.com&gt;
            // From: Winzard <i@winzard.ru>
            // From: Admin <admin@localhost>
            // From: "Максим Васенков" <vasenkov@any.place.com>
            // From: "Максим Васенков" &lt;vasenkov@any.place.com&gt;
            Pattern pat = Pattern.compile(emailPattern);
            Matcher mat = pat.matcher(s);

            if (mat.find()) {
                String userName = mat.group(1);
                String userEmail = mat.group(3);
                if (userName == null) userName = mat.group(4);
                String fId = KernelManager.getUser().findUserIdByEmailNameProject(userEmail, userName, task.getParentId());
                if (fId==null){
                String id = AdapterManager.getInstance().getSecuredUserAdapterManager().createUser(task.getSecure(),
                        Null.beNull(task.getSubmitterId()), userEmail, userName, Null.beNull(userStatusId));
                    AdapterManager.getInstance().getSecuredUserAdapterManager().updateUser(task.getSecure(), id, 
                    userEmail, userName, null, userEmail, userStatusId, task.getSubmitterId(), 
                    task.getSecure().getUser().getTimezone(), task.getSecure().getUser().getLocale(),
                      task.getSecure().getUser().getCompany(), null, null, null, null, true);
                String aclid = AdapterManager.getInstance().getSecuredAclAdapterManager().createAcl(task.getSecure(),
                        task.getParentId(), null, id, null);
                AdapterManager.getInstance().getSecuredAclAdapterManager().updateTaskAcl(task.getSecure(),
                        aclid, userStatusId, false);
                if (id != null) task.setSubmitterId(id);
                }
            }

        }
        return task;
    }
}

Здесь пользователь создается с той же ролью, что и указанный в правилах импорта пользователь, через которого осуществляется импорт. Пользователю даются права на вышестоящую по отношению к импортируемой задачу.
Этот Create Task/Before Trigger нужно подключить в настройках категорий тех задач, которые планируется импортировать.

AttachmentSize
CreateUserFromEmail.java2.85 KB
CreateUserFromEmail.class3.71 KB