public InfoObject moveColumn(int columnNumber)
        {
            InfoObject info = this.lastBoardClosed.moveColumn(columnNumber, getEmail());

            if (info.getIsSucceeded())
            {
                save();
            }
            return(info);
        }
        // this function forward the input to Board class to remove coulmn.
        public InfoObject removeColumn(string email, string columnName)
        {
            InfoObject info = this.lastBoardClosed.removeColumn(email, columnName);

            if (info.getIsSucceeded())
            {
                save();
            }
            return(info);
        }
        // this function forward the input to Board class to add new coulmn.
        public InfoObject addColumn(string author, string columnName)
        {
            InfoObject info = this.lastBoardClosed.addColumn(author, columnName);

            if (info.getIsSucceeded())
            {
                save();
            }
            return(info);
        }
        // this function forward the input to Board class to add new coulmn.
        public InfoObject addColumn(string author, string columnName)
        {
            InfoObject info = myBoard.addColumn(author, columnName);

            if (info.getIsSucceeded())
            {
                ExistingColumns = ExistingColumns + "+" + columnName;
                save();
            }
            return(info);
        }
        public InfoObject moveColumn(int columnNumber)
        {
            InfoObject info = myBoard.moveColumn(columnNumber);

            if (info.getIsSucceeded())
            {
                string   moveItForward   = myBoard.columnIntToName(columnNumber + 1);
                string   moveItBackwards = myBoard.columnIntToName(columnNumber);
                string[] split           = getExistingColumns().Split('+');
                string[] cleanString     = new string[split.Length];
                for (int k = 0; k < cleanString.Length; k = k + 1)
                {
                    cleanString[k] = "";
                }
                string newExistingColumns = "";
                int    i = 0;
                foreach (string s in split)
                {
                    if (!s.Equals(""))
                    {
                        cleanString[i] = s;
                        i = i + 1;
                    }
                }
                for (int j = 0; j < i; j = j + 1)
                {
                    if (cleanString[j].Equals(moveItForward))
                    {
                        string temp = cleanString[j];
                        cleanString[j]     = cleanString[j + 1];
                        cleanString[j + 1] = temp;
                        j = j + 1;
                    }
                }
                for (int j = 0; j < cleanString.Length; j = j + 1)
                {
                    if (!cleanString[j].Equals(""))
                    {
                        newExistingColumns = newExistingColumns + "+" + cleanString[j];
                    }
                }
                setExistingColumns(newExistingColumns);
            }
            save();
            return(info);
        }
        // this function moves the task from one column to another by removing it from it current column and adding it in the other
        // the add is done by Coulmn class.
        public InfoObject moveTask(int taskID, int status)
        {
            if (status < columnsHashTable.Count)
            {
                if (((Column)columnsHashTable[status]).isContainsKey(taskID))
                {
                    if (((Column)columnsHashTable[status + 1]).canAddTask())
                    {
                        Task       t    = ((Column)columnsHashTable[status]).removeTask(taskID);
                        InfoObject info = (((Column)columnsHashTable[status + 1]).moveTask(t.getTitle(), t.getDescription(), status, t.getDueDate(), t.getAuthor(), t.getTaskUID()));
                        if (info.getIsSucceeded())
                        {
                            Log.Info("Board moving task #" + taskID + " from column #" + status + " to next column.");
                            info.setMessage("Board moving task #" + taskID + " from column #" + status + " to next column.");
                            return(info);
                        }
                        else
                        {
                            info.setIsSucceeded(false);
                            return(info);
                        }
                    }
                    else
                    {
                        return(new InfoObject(false, "The next column is full."));
                    }
                }
                else
                {
                    Log.Warn("Cant find Task #" + taskID + " to move from column #" + status);
                    InfoObject info3 = new InfoObject(false, "Cant find Task #" + taskID + " to move from column #" + status);
                    return(info3);
                }
            }

            Log.Error("You are not allowed to move task #" + taskID + " because it's in column #" + status);
            InfoObject info2 = new InfoObject(false, "You are not allowed to move task #" + taskID + " because it's in the last column");

            return(info2);
        }
 // this function checks if the current user is logged in and if he is then forward it to Board class to add the task to the current column.
 public InfoObject addTask(string title, string description, string dueDate)
 {
     if (isLoggedIn())
     {
         InfoObject info = this.lastBoardClosed.addTask(title, description, this.email, dueDate);
         if (info.getIsSucceeded())
         {
             info.setMessage("Task #" + numOfTaskAdded + " added to the board by the user: "******"You are not allowed to add a task, please log in first.");
         InfoObject info2 = new InfoObject(false, "You are not allowed to add a task, please log in first.");
         return(info2);
     }
 }
        // this function forward the input to Board class to remove coulmn.
        public InfoObject removeColumn(string columnName)
        {
            InfoObject info = myBoard.removeColumn(columnName);

            if (info.getIsSucceeded())
            {
                string[] splited            = ExistingColumns.Split('+');
                string   newExistingColumns = "";
                for (int i = 0; i < splited.Length; i = i + 1)
                {
                    if (!splited[i].Equals(columnName))
                    {
                        newExistingColumns = newExistingColumns + "" + splited[i] + "+";
                    }
                    else
                    {
                        newExistingColumns = newExistingColumns + "+";
                    }
                }
                setExistingColumns(newExistingColumns);
                save();
            }
            return(info);
        }