コード例 #1
0
 // Return the openkm document path
 public static String getOpenKMPath(String localFilename, MSOpenKMCore.ws.folder fld)
 {
     try
     {
         return(fld.path + "/" + localFilename.Substring(localFilename.LastIndexOf(@"\") + 1));
     }
     catch (Exception e)
     {
         throw e;
     }
 }
コード例 #2
0
 // Evaluates enabled buttons by permisions
 private void evaluateEnabledButtonByPermissions(MSOpenKMCore.ws.folder fld)
 {
     if (Util.hasWritePermission(fld))
     {
         accept.Enabled = true;
     }
     else
     {
         accept.Enabled = false;
     }
 }
コード例 #3
0
 // Return if a user has folder has write permissions
 public static bool hasWritePermission(MSOpenKMCore.ws.folder fld)
 {
     try
     {
         return((fld.permissions & OKMPermissions.WRITE) == OKMPermissions.WRITE);
     }
     catch (Exception e)
     {
         throw e;
     }
 }
コード例 #4
0
 // Evaluates enabled buttons by permisions
 private void evaluateEnabledButtonByPermissions(MSOpenKMCore.ws.folder fld, MSOpenKMCore.ws.document doc)
 {
     if (Util.hasWritePermission(fld, doc) && !doc.locked && !doc.checkedOut)
     {
         edit.Enabled = true;
     }
     else
     {
         edit.Enabled = false;
     }
 }
コード例 #5
0
 // Return the folder name, text before last "/" character
 public static String getFolderName(MSOpenKMCore.ws.folder folderNode)
 {
     try
     {
         return(folderNode.path.Substring(folderNode.path.LastIndexOf("/") + 1));
     }
     catch (Exception e)
     {
         throw e;
     }
 }
コード例 #6
0
 // Return if a user document has write permissions
 public static bool hasWritePermission(MSOpenKMCore.ws.folder fatherFld, MSOpenKMCore.ws.document doc)
 {
     try
     {
         // Must have permission to write in folders and in document
         return(((fatherFld.permissions & OKMPermissions.WRITE) == OKMPermissions.WRITE) &
                ((doc.permissions & OKMPermissions.WRITE) == OKMPermissions.WRITE));
     }
     catch (Exception e)
     {
         throw e;
     }
 }
コード例 #7
0
        // mouse click
        private void nodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            try
            {
                // Init values
                rootNode   = null;
                actualNode = null;

                // OpenKM authentication
                token = authService.login(configXML.getUser(), configXML.getPassword());

                MSOpenKMCore.ws.folder folderNode = (MSOpenKMCore.ws.folder)e.Node.Tag;
                actualNode = e.Node;

                // Gets folder childs
                getChilds();
                actualNode.ExpandAll();

                // Gets document childs
                getDocumentChilds();

                // Evaluates buttons enabled
                if (dataGridView.RowCount > 0 && dataGridView.SelectedRows.Count > 0)
                {
                    MSOpenKMCore.ws.folder   fld = (MSOpenKMCore.ws.folder)actualNode.Tag;
                    MSOpenKMCore.ws.document doc = (MSOpenKMCore.ws.document)dataGridView.Rows[dataGridView.SelectedRows[0].Index].Tag;
                    evaluateEnabledButtonByPermissions(fld, doc);
                }
                else
                {
                    enableDefaultButtons();
                }

                // Logout OpenKM
                authService.logout(token);
                token = "";
            } catch (Exception ex)
            {
                if (!token.Equals(""))
                {
                    String errorMsg = "ExplorerForm - (nodeMouseClick)\n" + ex.Message + "\n\n" + ex.StackTrace;
                    MessageBox.Show(errorMsg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

                    // Logout OpenKM
                    authService.logout(token);
                    token = "";
                }
            }
        }
コード例 #8
0
 // Gets the root folder
 private void getRootFolder()
 {
     try
     {
         MSOpenKMCore.ws.folder rootFolder = repositoryService.getRootFolder(token);
         int selectedImage = imageList.selectImageIndex(rootFolder);
         rootNode      = new TreeNode(Util.getFolderName(rootFolder), selectedImage, selectedImage);
         rootNode.Tag  = rootFolder;
         rootNode.Name = rootNode.Text;
         tree.Nodes.Add(rootNode);
         actualNode = rootNode;
     }
     catch (Exception e)
     {
         throw e;
     }
 }
コード例 #9
0
 // mouse click
 private void dataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
 {
     try
     {
         // Evaluates buttons enabled
         if (dataGridView.RowCount > 0 && dataGridView.SelectedRows.Count > 0)
         {
             MSOpenKMCore.ws.folder   fld = (MSOpenKMCore.ws.folder)actualNode.Tag;
             MSOpenKMCore.ws.document doc = (MSOpenKMCore.ws.document)dataGridView.Rows[dataGridView.SelectedRows[0].Index].Tag;
             evaluateEnabledButtonByPermissions(fld, doc);
         }
         else
         {
             enableDefaultButtons();
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
コード例 #10
0
        // mouse click
        private void nodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            try
            {
                // Init values
                rootNode   = null;
                actualNode = null;

                // OpenKM authentication
                token = authService.login(configXML.getUser(), configXML.getPassword());

                MSOpenKMCore.ws.folder folderNode = (MSOpenKMCore.ws.folder)e.Node.Tag;
                actualNode = e.Node;

                // Gets folder childs
                getChilds();
                actualNode.ExpandAll();

                // Evaluate enabled buttons
                evaluateEnabledButtonByPermissions((MSOpenKMCore.ws.folder)actualNode.Tag);

                // Logout OpenKM
                authService.logout(token);
                token = "";
            }
            catch (Exception ex)
            {
                String errorMsg = "TreeForm - (nodeMouseClick)\n" + ex.Message + "\n\n" + ex.StackTrace;
                MessageBox.Show(errorMsg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

                if (!token.Equals(""))
                {
                    // Logout OpenKM
                    authService.logout(token);
                    token = "";
                }
            }
        }
コード例 #11
0
        public void ImportMail(Outlook.Explorers explorers, ConfigXML configXML)
        {
            ComponentResourceManager resources = new ComponentResourceManager(typeof(OpenKMAddIn));

            int mailCount = 0;
            int mailAttach = 0;

            for (int y = 1; y <= explorers.Count; y++)
            {
                Outlook.Explorer openWindow = explorers.Item(y);
                String token = "";
                OKMAuth authService = new OKMAuth(configXML.getHost());
                OKMFolder folderService = new OKMFolder(configXML.getHost());
                OKMRepository repositoryService = new OKMRepository(configXML.getHost());
                OKMMail mailService = new OKMMail(configXML.getHost());
                OKMDocument documentService = new OKMDocument(configXML.getHost());

                try
                {
                    if (configXML.getUser().Equals("") || configXML.getPassword().Equals("") ||
                        configXML.getHost().Equals(""))
                    {
                        throw new Exception(resources.GetString("error_configuration_empty"));
                    }

                    token = authService.login(configXML.getUser(), configXML.getPassword());

                    for (int i = 1; i<=openWindow.Selection.Count; i++) {
                        Object selObject = openWindow.Selection.Item(i);
                        if (selObject is Outlook.MailItem)
                        {
                            mailCount++;
                            Outlook.MailItem mailItem = (selObject as Outlook.MailItem);
                            DateTime receivedTime = mailItem.ReceivedTime;
                            String user = configXML.getUser();
                            String basePath = "/okm:mail/" + user + "/";
                            String year = "" + receivedTime.Year;
                            String month = "" + receivedTime.Month;
                            String day = "" + receivedTime.Day;

                            // Only creating folders when it's needed
                            if (repositoryService.hasNode(token, basePath + year))
                            {
                                if (repositoryService.hasNode(token, basePath + year + "/" + month))
                                {
                                    if (!repositoryService.hasNode(token, basePath + year + "/" + month + "/" + day))
                                    {
                                        folder dayFolder = new folder();
                                        dayFolder.path = basePath + year + "/" + month + "/" + day;
                                        folderService.create(token, dayFolder);
                                    }
                                }
                                else
                                {
                                    folder monthFolder = new folder();
                                    folder dayFolder = new folder();
                                    monthFolder.path = basePath + year + "/" + month;
                                    dayFolder.path = basePath + year + "/" + month + "/" + day;
                                    folderService.create(token, monthFolder);
                                    folderService.create(token, dayFolder);
                                }
                            }
                            else
                            {
                                folder yearFolder = new folder();
                                folder monthFolder = new folder();
                                folder dayFolder = new folder();
                                yearFolder.path = basePath + year;
                                monthFolder.path = basePath + year + "/" + month;
                                dayFolder.path = basePath + year + "/" + month + "/" + day;
                                folderService.create(token, yearFolder);
                                folderService.create(token, monthFolder);
                                folderService.create(token, dayFolder);
                            }

                            // Adding mail values
                            mail newMail = new mail();
                            newMail.path = basePath + year + "/" + month + "/" + day + "/" + mailItem.Subject;
                            newMail.subject = mailItem.Subject;

                            newMail.from = mailItem.GetType().InvokeMember("SenderEmailAddress", System.Reflection.BindingFlags.GetProperty, null, mailItem, null).ToString();
                            //newMail.from = mailItem.SenderEmailAddress; // SenderEmailAddress was introduced in outlook 2002
                            newMail.sentDate = mailItem.SentOn;
                            newMail.sentDateSpecified = true;
                            newMail.receivedDate = mailItem.ReceivedTime;
                            newMail.receivedDateSpecified = true;

                            // Setting mail context and type

                            BodyFormat format = (BodyFormat) mailItem.GetType().InvokeMember("BodyFormat", System.Reflection.BindingFlags.GetProperty, null, mailItem, null);
                            if (format.Equals(BodyFormat.olFormatPlain))
                            {
                                newMail.mimeType = "text/plain";
                                newMail.content = mailItem.Body;
                            }
                            else
                            {
                                newMail.mimeType = "text/html";
                                newMail.content = mailItem.HTMLBody;
                            }

                            // Initialize count recipient address variables
                            int count = 0;
                            int countTo = 0;
                            int countCC = 0;
                            int countBCC = 0;
                            int actualCountTo = 0;
                            int actualCountCC = 0;
                            int actualCountBCC = 0;

                            // Count each mail addresss type to / cc / bcc
                            for (int x=1; x<=mailItem.Recipients.Count; x++) {
                                Outlook.Recipient recipient = mailItem.Recipients.Item(x);
                                switch (recipient.Type)
                                {
                                    case 1:
                                        countTo++;
                                        break;

                                    case 2:
                                        countCC++;
                                        break;

                                    case 3:
                                        countBCC++;
                                        break;

                                    default:
                                        countTo++;
                                        break;
                                }
                                count++;
                            }

                            // Initialize variables
                            String[] mailTo = new String[(countTo > 0) ? countTo : 1];
                            String[] mailCC = new String[(countCC > 0) ? countCC : 1];
                            String[] mailBCC = new String[(countBCC > 0) ? countBCC : 1];

                            // All string[] must have at least one value, it¡s mandatory in webservices
                            if (countTo == 0)
                            {
                                mailTo[0] = "";
                            }
                            if (countCC == 0)
                            {
                                mailCC[0] = "";
                            }
                            if (countBCC == 0)
                            {
                                mailBCC[0] = "";
                            }

                            // Depending mail type each mail is assignede to it own type String[]
                            for (int x=1; x<=mailItem.Recipients.Count; x++) {
                                Outlook.Recipient recipient = mailItem.Recipients.Item(x);
                                switch (recipient.Type)
                                {
                                    case 1:
                                        mailTo[actualCountTo] = recipient.Address;
                                        actualCountTo++;
                                        break;

                                    case 2:
                                        mailCC[actualCountCC] = recipient.Address;
                                        actualCountCC++;
                                        break;

                                    case 3:
                                        mailBCC[actualCountBCC] = recipient.Address;
                                        actualCountBCC++;
                                        break;

                                    default:
                                        mailTo[actualCountTo] = recipient.Address;
                                        actualCountTo++;
                                        break;
                                }

                            }

                            // Assign mail recipients by type
                            newMail.bcc = mailBCC;
                            newMail.cc = mailCC;
                            newMail.to = mailTo;

                            // Creating mail
                            newMail = mailService.create(token, newMail);

                            // Setting attachments
                            if (mailItem.Attachments.Count > 0)
                            {
                                for (int x=1; x<=mailItem.Attachments.Count; x++) {
                                    Outlook.Attachment attachment = mailItem.Attachments.Item(x);

                                    mailAttach++;
                                    document doc = new document();
                                    doc.path = newMail.path + "/" + attachment.FileName;

                                    // save as tempfile for reading
                                    String filename = Environment.GetEnvironmentVariable("TEMP") + "\\" + DateTime.Now.ToString("yymmddHHMMss-") + attachment.FileName;
                                    // save the attachment
                                    attachment.SaveAsFile(filename);

                                    // Uploading document
                                    documentService.create(token, doc, ReadFile(filename));

                                    // Delete a file by using File class static method...
                                    if (File.Exists(filename))
                                    {
                                        // Use a try block to catch IOExceptions, to
                                        // handle the case of the file already being
                                        // opened by another process.
                                        try
                                        {
                                            File.Delete(filename);
                                        }
                                        catch (System.IO.IOException ex)
                                        {
                                            MessageBox.Show(String.Format(resources.GetString("error_deleting_tmp_file"), filename, ex.Message), "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                                        }
                                    }

                                    // Releasing com object
                                    Marshal.ReleaseComObject(attachment);
                                }
                            }

                            // Releasing com object
                            Marshal.ReleaseComObject(mailItem);
                        }

                        // Releasing com object
                        Marshal.ReleaseComObject(selObject);
                    }

                    if (!token.Equals(""))
                    {
                        authService.logout(token);  // Always we logout
                        token = "";                 // Reseting token value
                    }

                    if (mailCount > 0)
                    {
                        MessageBox.Show(String.Format(resources.GetString("email_successful_imported"), mailCount, mailAttach));
                    }
                    else
                    {
                        MessageBox.Show(resources.GetString("error_mail_not_selected"), "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    if (!token.Equals(""))
                    {
                        authService.logout(token); // Always we logout
                    }
                }

            }
        }
コード例 #12
0
        // Starting up drawing folder tree
        public void startUp()
        {
            try
            {
                // Refreshing config file
                configXML.ReadConfig();

                // Init services
                initServices();

                // Default buttons enabled
                enableDefaultButtons();

                // OpenKM authentication
                token = authService.login(configXML.getUser(), configXML.getPassword());

                // Suppress repainting the TreeView until all the objects have been created.
                tree.BeginUpdate();

                // Clear the TreeView each time the method is called.
                tree.Nodes.Clear();

                // Draws the root folder
                getRootFolder();

                // Draws the root folder childs
                getChilds();

                // Draws document childs
                getDocumentChilds();

                // Expand all nodes
                tree.ExpandAll();

                // Begin repainting the TreeView.
                tree.EndUpdate();

                // Evaluates buttons enabled
                if (dataGridView.RowCount > 0 && dataGridView.SelectedRows.Count > 0)
                {
                    MSOpenKMCore.ws.folder   fld = (MSOpenKMCore.ws.folder)actualNode.Tag;
                    MSOpenKMCore.ws.document doc = (MSOpenKMCore.ws.document)dataGridView.Rows[dataGridView.SelectedRows[0].Index].Tag;
                    evaluateEnabledButtonByPermissions(fld, doc);
                }
                else
                {
                    enableDefaultButtons();
                }

                // Logout OpenKM
                authService.logout(token);
                token = "";
            }
            catch (Exception ex)
            {
                String errorMsg = "ExplorerForm - (startUp)\n" + ex.Message;
                MessageBox.Show(errorMsg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

                if (!token.Equals(""))
                {
                    // Logout OpenKM
                    authService.logout(token);
                    token = "";
                }
            }
        }
コード例 #13
0
        // Selects the image index depending some folder values
        public int selectImageIndex(folder folderNode)
        {
            try
            {
                bool hasWritePermission = ((folderNode.permissions & OKMPermissions.WRITE) == OKMPermissions.WRITE);

                if (folderNode.hasChildren)
                {
                    if (folderNode.subscribed)
                    {
                        if (hasWritePermission)
                        {
                            return IMG_FOLDER_CHILDS_SUBSCRIBED;
                        }
                        else
                        {
                            return IMG_FOLDER_CHILDS_READ_ONLY_SUBSCRIBED;
                        }
                    }
                    else
                    {
                        if (hasWritePermission)
                        {
                            return IMG_FOLDER_CHILDS;
                        }
                        else
                        {
                            return IMG_FOLDER_CHILDS_READ_ONLY;
                        }
                    }
                }
                else
                {
                    if (folderNode.subscribed)
                    {
                        if (hasWritePermission)
                        {
                            return IMG_FOLDER_EMPTY_SUBSCRIBED;
                        }
                        else
                        {
                            return IMG_FOLDER_EMPTY_READ_ONLY_SUBSCRIBED;
                        }
                    }
                    else
                    {
                        if (hasWritePermission)
                        {
                            return IMG_FOLDER_EMPTY;
                        }
                        else
                        {
                            return IMG_FOLDER_EMPTY_READ_ONLY;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }