WordPress.org

Plugin Directory

Changeset 906495


Ignore:
Timestamp:
05/01/14 19:32:12 (3 years ago)
Author:
stratoponjak
Message:

Version 0.9.2

Location:
project-tasks
Files:
1 deleted
11 edited

Legend:

Unmodified
Added
Removed
  • project-tasks/trunk/Readme.txt

    r527949 r906495  
    44Tags: project, project management, task, tasks, bugs, gtd 
    55Requires at least: 3.0 
    6 Tested up to: 3.3.1 
    7 Stable tag: 0.9.1 
     6Tested up to: 3.9 
     7Stable tag: 0.9.2 
    88 
    99This Wordpress plugin is a complete flexible Projekt Task Management System. It's a very easy to use, but yet a powerful plugin. 
     
    3333More information can be found at [klasehnemark.com/project-tasks](http://klasehnemark.com/project-tasks "Documentation of Project Tasks") 
    3434 
    35 = Can I make custom task types and other adjustments? = 
     35= Can I make custom task types? = 
    3636 
    37 Yes, you can make many adjustments using Wordpress Hooks. Read more at [klasehnemark.com/project-tasks](http://klasehnemark.com/project-tasks "Documentation of Project Tasks") 
     37Yes, you can by using Wordpress Hooks. Read more at [klasehnemark.com/project-tasks](http://klasehnemark.com/project-tasks "Documentation of Project Tasks") 
     38 
     39= Can I customize this plugin? Where are the settings? = 
     40 
     41There are plenty of customizations available! Read instructions at how to use Wordpress Hooks at [klasehnemark.com/project-tasks](http://klasehnemark.com/project-tasks "Documentation of Project Tasks") 
    3842 
    3943= Will deactivating the plugin remove all data? = 
     
    5862== Changelog == 
    5963 
     64= 0.9.2 = 
     65* Bugfixes and some adjustments to current Wordpress version 
     66 
     67== Changelog == 
     68 
    6069= 0.9.1 = 
    6170* Changed how plugin-directory is detected, previous method caused the plugin not to work properly in some Wordpress installations 
  • project-tasks/trunk/files/project-tasks-admin-bar.php

    r488592 r906495  
    44Project Tasks 
    55 
    6 Copyright (C) 2011 Klas Ehnemark (http://klasehnemark.com) 
     6Copyright (C) 2011-2014 Klas Ehnemark (http://klasehnemark.com) 
    77 
    88This program is free software; you can redistribute it and/or modify 
     
    3636 
    3737            // Initialization stuff 
    38             add_action('init', array(&$this, 'wordpress_init')); 
     38             
     39            add_action('wp_enqueue_scripts', array(&$this, 'wordpress_init')); 
     40             
    3941            add_action( 'wp_before_admin_bar_render', array(&$this, 'render_admin_bar' )); 
    4042             
     
    5254 
    5355            global $wp_admin_bar; 
    54             if ( !empty($wp_admin_bar )) { 
     56             
     57            if ( !empty( $wp_admin_bar )) { 
    5558             
    5659                // enqueue scripts used then adminbar is on 
     60                 
    5761                wp_enqueue_script ( 'jquery' ); 
     62                 
    5863                project_tasks_general::load_scripts_and_styles (); 
     64                 
    5965                add_action('wp_head', array( $this, 'set_params_for_public_javascript' )); 
    60          
    6166            } 
    6267        } 
    6368         
    6469        function set_params_for_public_javascript() {  
     70         
    6571            global $post; ?> 
     72             
    6673            <script type="text/javascript">  
     74             
    6775                var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>"; 
     76                 
    6877                var wp_post_id = "<?php if ( !empty($post)) echo $post->ID; else echo '0' ?>"; 
     78                 
    6979            </script><?php 
    7080        } 
    7181         
    7282         
    73  
    74          
    75  
    76  
    7783         
    7884        //////////////////////////////////////////////////////////////////////////////// 
     
    8288        ////////////////////////////////////////////////////////////////////////////////         
    8389         
    84         function wordpress_admin_menu () { 
     90        /*function wordpress_admin_menu () { 
     91         
    8592            add_menu_page('Project Tasks', 'Project Tasks', 'administrator', 'project_tasks', array ( &$this, 'project_task_admin_page') ,plugins_url('/theme-project-task-icon-small.png', __FILE__)); 
     93             
    8694            //add_submenu_page ( 'project_tasks', 'Add New', 'Add New', 'administrator', 'project_tasks_add_new', array ( &$this, 'project_task_add_new_admin_page')); 
    8795        } 
     
    113121        function project_task_add_new_admin_page () { 
    114122         
    115         } 
     123        }*/ 
    116124         
    117125         
     
    127135             
    128136                global $wp_admin_bar; 
     137                 
    129138                global $post; 
     139                 
    130140                if ( !empty( $post ) ) { $post_id = $post->ID; } 
     141                 
    131142                else { $post_id = ''; } 
    132143                 
    133                 $wp_admin_bar->add_menu( array( 
    134                 //'parent' => 'new-content', 
    135                 'id' => 'project_tasks', 
    136                 'title' => __('Project Tasks') . ' <span id="spt_number_of_list_items_span" class="pending-count spt_hidden">&nbsp;</span><span id="spt_post_id" class="spt_hidden">' . $post_id . '</span>', 
    137                 'href' => admin_url( 'admin.php?page=project_tasks') 
     144                $wp_admin_bar->add_menu( array ( 
     145                 
     146                    //'parent' => 'new-content', 
     147                     
     148                    'id' => 'project_tasks', 
     149                     
     150                    'title' => __('Project Tasks') . ' <span id="spt_number_of_list_items_span" class="pending-count spt_hidden">&nbsp;</span><span id="spt_post_id" class="spt_hidden">' . $post_id . '</span>', 
     151                     
     152                    'href' => admin_url( 'admin.php?page=project_tasks') 
    138153                )); 
    139154                 
    140                 $wp_admin_bar->add_menu( array( 
    141                 'parent' => 'project_tasks', 
    142                 'id' => 'project_tasks_content', 
    143                 'title' => __('Loading'), 
    144                 'href' => 'javascript:void();' 
     155                $wp_admin_bar->add_menu( array ( 
     156                 
     157                    'parent' => 'project_tasks', 
     158                     
     159                    'id' => 'project_tasks_content', 
     160                     
     161                    'title' => __('Loading'), 
     162                     
     163                    'href' => 'javascript:void();' 
     164                     
    145165                )); 
    146166            };  
    147167        } 
    148168 
    149     }  
    150      
    151 } //End Class 
     169    } //End Class 
     170}  
    152171 
    153172?> 
  • project-tasks/trunk/files/project-tasks-admin.php

    r488592 r906495  
    44Project Tasks 
    55 
    6 Copyright (C) 2011 Klas Ehnemark (http://klasehnemark.com) 
     6Copyright (C) 2011-2014 Klas Ehnemark (http://klasehnemark.com) 
    77 
    88This program is free software; you can redistribute it and/or modify 
     
    3737 
    3838            // Initialization stuff 
     39             
    3940            add_action('admin_init', array(&$this, 'wordpress_admin_init')); 
     41             
    4042            add_action('admin_menu', array (&$this, 'wordpress_admin_menu' ) ); 
    4143                         
     
    5052     
    5153        function wordpress_admin_init() { 
    52             if( isset($_GET['page']) &&  $_GET['page'] == 'project_tasks' ) project_tasks_general::load_scripts_and_styles (); 
     54         
     55            $page = isset($_GET['page'])? $_GET['page'] : ''; 
     56         
     57            if( $page == 'project_tasks' || $page == 'project_tasks_processes' ) project_tasks_general::load_scripts_and_styles (); 
     58             
    5359        } 
    5460 
     
    5662        //////////////////////////////////////////////////////////////////////////////// 
    5763        // 
    58         // RENDER ADMIN MENU AND ADMIN OPTIONS PAGE 
     64        // RENDER ADMIN MENUS 
    5965        // 
    6066        ////////////////////////////////////////////////////////////////////////////////         
    6167         
    6268        function wordpress_admin_menu () { 
    63             add_menu_page('Project Tasks', 'Project Tasks', 'administrator', 'project_tasks', array ( &$this, 'project_task_admin_page') ,plugins_url('/project-task-icon-small.png', __FILE__)); 
     69         
     70            add_menu_page( 'Project Tasks', 'Project Tasks', 'administrator', 'project_tasks', array ( &$this, 'project_task_admin_page') , plugins_url('project-tasks' ) . '/files/project-task-icon-small.png' ); 
     71             
     72            //add_submenu_page( 'project_tasks', 'Processes', 'Processes', 'administrator', 'project_tasks_processes', array ( &$this, 'project_tasks_processes_page') );  
     73             
     74            //add_submenu_page( 'project_tasks', 'Agile Development', 'Agile Development', 'administrator', 'project_tasks_agile', array ( &$this, 'project_tasks_agile_page') );  
     75             
     76            //add_submenu_page( 'project_tasks', 'Settings', 'Settings', 'administrator', 'project_tasks_settings', array ( &$this, 'project_tasks_settings_page') ); 
     77             
    6478        } 
     79 
     80 
     81        //////////////////////////////////////////////////////////////////////////////// 
     82        // 
     83        // RENDER ADMIN PROJECT TASKS PAGE 
     84        // 
     85        //////////////////////////////////////////////////////////////////////////////// 
    6586         
    6687        function project_task_admin_page () { 
     
    6889            echo ' 
    6990                <div class="wrap"> 
    70                     <div id="icon-themes" class="icon32" style="background: url(' . plugins_url('/project-tasks/files/project-task-icon-large.png') . ') no-repeat;"><br/></div> 
     91                    <div id="icon-themes" class="icon32" style="background: url(' . plugins_url('project-tasks' ) . '/files/project-task-icon-large.png' . ') no-repeat;"><br/></div> 
    7192                    <h2>Project Tasks</h2> 
    7293                    <div id="project_tasks_content">'; 
    7394                     
    7495            $task_list = new project_tasks_list(); 
     96             
    7597            $task_list->render_list(); 
    7698             
    7799            echo '  </div></div> 
    78100            '; 
    79         }        
    80     }  
    81      
    82 } //End Class 
     101        }    
     102         
     103         
     104        //////////////////////////////////////////////////////////////////////////////// 
     105        // 
     106        // RENDER ADMIN PROCESSES PAGE 
     107        // 
     108        //////////////////////////////////////////////////////////////////////////////// 
     109         
     110        function project_tasks_processes_page () { 
     111         
     112            global $project_tasks; 
     113         
     114            $project_tasks->data->update_database (); 
     115         
     116            echo ' 
     117                <div class="wrap"> 
     118                    <div id="icon-themes" class="icon32" style="background: url(' . plugins_url('project-tasks' ) . '/files/project-task-icon-large.png' . ') no-repeat;"><br/></div> 
     119                    <h2>Processes</h2> 
     120                    <div id="project_tasks_content">'; 
     121                     
     122            $process = new project_tasks_process(); 
     123             
     124            $process->render_process_map( 3 ); 
     125             
     126            echo '  </div></div> 
     127            '; 
     128        }    
     129         
     130         
     131         
     132         
     133        //////////////////////////////////////////////////////////////////////////////// 
     134        // 
     135        // RENDER ADMIN AGILE PAGE 
     136        // 
     137        //////////////////////////////////////////////////////////////////////////////// 
     138         
     139        function project_tasks_agile_page () { 
     140         
     141            echo ' 
     142                <div class="wrap"> 
     143                    <div id="icon-themes" class="icon32" style="background: url(' . plugins_url('project-tasks' ) . '/files/project-task-icon-large.png' . ') no-repeat;"><br/></div> 
     144                    <h2>Agile Development</h2> 
     145                    <div id="project_tasks_content">'; 
     146             
     147            echo '  </div></div> 
     148            '; 
     149        }    
     150         
     151         
     152         
     153         
     154        //////////////////////////////////////////////////////////////////////////////// 
     155        // 
     156        // RENDER ADMIN SETTINGS PAGE 
     157        // 
     158        //////////////////////////////////////////////////////////////////////////////// 
     159         
     160        function project_tasks_settings_page () { 
     161         
     162            echo ' 
     163                <div class="wrap"> 
     164                    <div id="icon-themes" class="icon32" style="background: url(' . plugins_url('project-tasks' ) . '/files/project-task-icon-large.png' . ') no-repeat;"><br/></div> 
     165                    <h2>Project Tasks Settings</h2> 
     166                    <div id="project_tasks_content">'; 
     167             
     168            echo '  </div></div> 
     169            '; 
     170        }    
     171         
     172    } //End Class 
     173}  
    83174?> 
  • project-tasks/trunk/files/project-tasks-ajax.php

    r488592 r906495  
    44Project Tasks 
    55 
    6 Copyright (C) 2011 Klas Ehnemark (http://klasehnemark.com) 
     6Copyright (C) 2011-2014 Klas Ehnemark (http://klasehnemark.com) 
    77 
    88This program is free software; you can redistribute it and/or modify 
     
    3434     
    3535        public function __construct() { 
    36  
    37             $this->data = new project_tasks_data (); 
    3836             
    3937            // add ajax functions 
     38             
    4039            add_action('wp_ajax_render_task_list_ajax', array ( $this, 'render_task_list_ajax' )); 
     40             
    4141            add_action('wp_ajax_render_task_form_ajax', array ( $this, 'render_task_form_ajax' )); 
     42             
    4243            add_action('wp_ajax_render_task_form_targets_ajax', array ( $this, 'render_task_form_targets_ajax' )); 
     44             
    4345            add_action('wp_ajax_render_task_form_subtasks_ajax', array ( $this, 'render_task_form_subtasks_ajax' )); 
     46             
    4447            add_action('wp_ajax_get_number_page_tasks_ajax', array ( $this, 'get_number_page_tasks_ajax' )); 
     48             
    4549            add_action('wp_ajax_save_task_form_ajax', array ( $this, 'save_task_form_ajax' )); 
    4650 
     
    5357        function get_number_page_tasks_ajax () { 
    5458         
     59            global $project_tasks; 
     60             
    5561            global $wpdb; 
     62             
    5663            $post_id = isset( $_POST[ 'post_id' ] )? $_POST[ 'post_id' ] : 0; 
    5764             
    58             $post_where_sql = $this->data->get_sql_where_for_post_tasks ( $post_id ); 
     65            $post_where_sql = $project_tasks->data->get_sql_where_for_post_tasks ( $post_id ); 
     66             
    5967            if ( $post_where_sql == '' ) echo '0'; 
     68             
    6069            else { 
    61                 //$sql = 'SELECT COUNT( DISTINCT ' . $this->tasks_table_name . '.ID) FROM ' . $this->tasks_table_name . ' JOIN ' .  $this->task_relation_table_name . ' WHERE ' . $post_where_sql . ';'; 
    62                 $sql = 'SELECT COUNT( DISTINCT ' . $this->data->tasks_table_name . '.ID) FROM ' . $this->data->tasks_table_name . ' WHERE ' . $this->data->tasks_table_name . '.ID IN ( SELECT task FROM ' .  $this->data->task_relation_table_name . ' WHERE ' . $post_where_sql . ');'; 
    63                 //echo $sql; 
    64                 $num_posts = $wpdb->get_var($wpdb->prepare( $sql )); 
     70                 
     71                $sql = 'SELECT COUNT( DISTINCT ' . $project_tasks->data->tasks_table_name . '.ID) FROM ' . $project_tasks->data->tasks_table_name . ' WHERE ' . $project_tasks->data->tasks_table_name . '.ID IN ( SELECT task FROM ' .  $project_tasks->data->task_relation_table_name . ' WHERE ' . $post_where_sql . ');'; 
     72                 
     73                $num_posts = $wpdb->get_var( $sql ); 
     74                 
    6575                echo $num_posts != '' ? $num_posts : '0'; 
    6676            } 
     
    7484     
    7585        function render_task_list_ajax () {  
     86         
    7687            $task_list = new project_tasks_list(); 
     88             
    7789            $task_list->render_list(); 
     90             
    7891            die(); 
    7992        } 
     
    8598         
    8699        function render_task_form_ajax () { 
     100         
    87101            $task_form = new project_tasks_form (); 
     102             
    88103            $task_form->render_form (); 
     104             
    89105            die();  
    90106        } 
     
    96112                 
    97113        function render_task_form_targets_ajax () { 
     114         
    98115            $task_form = new project_tasks_form (); 
     116             
    99117            $task_form->render_task_target_list ();  
     118             
    100119            die();       
    101120        } 
     
    107126                 
    108127        function render_task_form_subtasks_ajax () { 
     128         
    109129            $task_form = new project_tasks_form (); 
     130             
    110131            $task_form->render_subtasks_list ();  
     132             
    111133            die();       
    112134        } 
     
    118140         
    119141        function save_task_form_ajax () {  
     142         
    120143            $task_form = new project_tasks_form (); 
     144             
    121145            $task_form->save_task_form();  
     146             
    122147            die();  
    123148        } 
    124149         
    125  
    126  
    127     }  
    128      
    129 } //End Class 
     150    } //End Class 
     151} 
    130152?> 
  • project-tasks/trunk/files/project-tasks-data.php

    r488592 r906495  
    44Project Tasks 
    55 
    6 Copyright (C) 2011 Klas Ehnemark (http://klasehnemark.com) 
     6Copyright (C) 2011-2014 Klas Ehnemark (http://klasehnemark.com) 
    77 
    88This program is free software; you can redistribute it and/or modify 
     
    2828    class project_tasks_data { 
    2929 
     30 
    3031        public $tasks_table_name; 
     32         
    3133        public $task_relation_table_name; 
     34         
     35        public $process_table_name; 
     36         
     37        public $process_objects_table_name; 
     38         
    3239        public $use_all_post_types = false; 
    3340         
    34         private $project_tasks_db_version = '0.17'; 
     41         
     42        private $project_tasks_db_version = '0.1714'; 
     43         
    3544        private $found_shortcodes_in_post; 
    3645         
     
    4857 
    4958            // set variables 
     59             
    5060            global $wpdb; 
    51             $this->tasks_table_name = $wpdb->prefix . "theme_project_tasks"; 
    52             $this->task_relation_table_name = $wpdb->prefix . "theme_project_task_targets"; 
     61             
     62            $this->tasks_table_name             = $wpdb->prefix . "project_tasks"; 
     63             
     64            $this->task_relation_table_name     = $wpdb->prefix . "project_task_targets"; 
     65             
     66            $this->process_table_name       = $wpdb->prefix . "project_tasks_process"; 
     67             
     68            $this->process_objects_table_name   = $wpdb->prefix . "project_task_process_objects"; 
     69             
    5370             
    5471            // add filter so we can use "apply_filters( 'spt_page_target', spt_TARGET_TYPE )" on a  
     
    7087 
    7188            // creating a database table 
     89             
    7290            global $wpdb; 
    7391 
    7492            $sql = "CREATE TABLE " . $this->tasks_table_name . " ( 
     93             
    7594            id mediumint(9) NOT NULL AUTO_INCREMENT, 
     95             
     96            process mediumint(9) DEFAULT '0', 
     97             
     98            process_object mediumint(9) DEFAULT '0', 
     99             
    76100            parent_task mediumint(9) DEFAULT '0', 
     101             
    77102            created_date bigint(11) DEFAULT '0' NOT NULL, 
     103             
    78104            last_action_date bigint(11) DEFAULT '0' NOT NULL, 
     105             
    79106            creator mediumint(9) DEFAULT '0', 
     107             
    80108            assigned_to mediumint(9) DEFAULT '0',  
     109             
    81110            type varchar(80) DEFAULT 'TASK', 
     111             
    82112            title tinytext DEFAULT '' NOT NULL, 
     113             
    83114            description text DEFAULT '' NOT NULL, 
     115             
    84116            notes text DEFAULT '' NOT NULL, 
     117             
    85118            status varchar(255) DEFAULT 'CREATED', 
     119             
    86120            priority mediumint(9) DEFAULT 5,  
     121             
    87122            due_date bigint(11) DEFAULT '0' NOT NULL, 
     123             
    88124            progress mediumint(9) DEFAULT '0', 
     125             
    89126            log text DEFAULT '', 
     127             
    90128            UNIQUE KEY id (id) 
    91129            ); 
    92130             
     131             
    93132            CREATE TABLE " . $this->task_relation_table_name . " ( 
     133             
    94134            id mediumint(9) NOT NULL AUTO_INCREMENT, 
     135             
    95136            task mediumint(9) NOT NULL DEFAULT '0', 
     137             
    96138            target_type varchar(30) NOT NULL DEFAULT '', 
     139             
    97140            target_id varchar(30) DEFAULT '', 
     141             
    98142            UNIQUE KEY id (id) 
    99             );";             
    100  
    101             // create table of no one exist 
     143             
     144            ); 
     145             
     146             
     147            CREATE TABLE " . $this->process_table_name . " ( 
     148             
     149            id mediumint(9) NOT NULL AUTO_INCREMENT, 
     150             
     151            builtin_name varchar(30) DEFAULT '', 
     152             
     153            parent_process_object mediumint(9) DEFAULT '0', 
     154             
     155            name varchar(30) NOT NULL DEFAULT '', 
     156             
     157            description text DEFAULT '', 
     158             
     159            created_date bigint(11) DEFAULT '0' NOT NULL, 
     160             
     161            last_action_date bigint(11) DEFAULT '0' NOT NULL, 
     162             
     163            creator mediumint(9) DEFAULT '0', 
     164             
     165            log text DEFAULT '', 
     166             
     167            UNIQUE KEY id (id) 
     168             
     169            );           
     170 
     171 
     172            CREATE TABLE " . $this->process_objects_table_name . " ( 
     173             
     174            id mediumint(9) NOT NULL AUTO_INCREMENT, 
     175             
     176            builtin_name varchar(30) DEFAULT '', 
     177             
     178            process mediumint(9) DEFAULT '0', 
     179             
     180            type varchar(15) NOT NULL DEFAULT 'ACTIVITY', 
     181             
     182            instance_of mediumint(9) DEFAULT '0', 
     183             
     184            connected_to mediumint(9) DEFAULT '0', 
     185             
     186            connected_type varchar(15) NOT NULL DEFAULT '', 
     187             
     188            position varchar(255) DEFAULT '', 
     189             
     190            name varchar(30) NOT NULL DEFAULT '', 
     191             
     192            description text DEFAULT '', 
     193             
     194            created_date bigint(11) DEFAULT '0' NOT NULL, 
     195             
     196            last_action_date bigint(11) DEFAULT '0' NOT NULL, 
     197             
     198            creator mediumint(9) DEFAULT '0', 
     199             
     200            log text DEFAULT '', 
     201             
     202            UNIQUE KEY id (id) 
     203             
     204            );";     
     205             
     206 
     207            // create table if no one exist 
     208             
    102209            if($wpdb->get_var("show tables like '$this->tasks_table_name'") != $this->tasks_table_name) { 
    103210               
    104211                require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); 
     212                 
    105213                dbDelta($sql); 
     214                 
    106215                //$rows_affected = $wpdb->insert( $table_name, array( 'time' => current_time('mysql'), 'name' => 'first ticket', 'ticket' => '1234-5678-9012-3456-5357' ) ); 
     216                 
    107217                add_option("project_tasks_db_version", $this->project_tasks_db_version ); 
    108218         
     
    111221            
    112222            // updates table of there is an old version 
     223             
    113224            $installed_ver = get_option( "project_tasks_db_version" ); 
    114225 
     
    116227         
    117228                require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); 
     229                 
    118230                dbDelta($sql); 
     231                 
    119232                //$rows_affected = $wpdb->insert( $table_name, array( 'time' => current_time('mysql'), 'name' => 'third ticket', 'ticket' => 'update' ) ); 
     233                 
    120234                update_option( "project_tasks_db_version", $this->project_tasks_db_version ); 
    121235                 
    122236            } 
    123         } 
    124          
     237             
     238             
     239            // create default processes in the database 
     240             
     241            project_tasks_process::create_default_processes(); 
     242             
     243        } 
     244 
     245 
     246        //////////////////////////////////////////////////////////////////////////////// 
     247        // 
     248        // DELETE DATABASE 
     249        // 
     250        //////////////////////////////////////////////////////////////////////////////// 
     251                 
    125252        public static function delete_database () { 
    126253                     
    127254            // deleting the database table and options 
     255             
    128256            global $wpdb; 
     257             
    129258            $tasks_table_name = $wpdb->prefix . "theme_project_tasks"; 
     259             
    130260            $task_relation_table_name = $wpdb->prefix . "theme_project_task_targets"; 
     261             
    131262            $wpdb->query("DROP TABLE IF EXISTS $tasks_table_name"); 
     263             
    132264            $wpdb->query("DROP TABLE IF EXISTS $task_relation_table_name"); 
     265             
    133266            delete_option( "project_tasks_db_version" ); 
    134  
    135267        }    
    136268         
    137269         
    138270         
     271        //////////////////////////////////////////////////////////////////////////////// 
     272        // 
     273        //  
     274        // 
     275        //////////////////////////////////////////////////////////////////////////////// 
     276                 
    139277        public function get_sql_where_for_post_tasks ( $post_id ) { 
    140278 
    141279            $sql = ''; 
    142             $post = wp_get_single_post( $post_id ); 
     280             
     281            $post = get_post ( $post_id ); 
     282             
    143283            $active_targets = $this->get_active_targets_on_post ( $post ); 
     284             
    144285            foreach ( $active_targets as $active_target ) { 
     286             
    145287                if ( $sql != '' ) $sql .= ' OR '; 
     288                 
    146289                $sql .= '(' . $this->task_relation_table_name . '.target_type = \'' . $active_target['target_type'] . '\' AND ' . $this->task_relation_table_name . '.target_id = \'' . $active_target['target_id'] . '\')'; 
    147290            } 
     291             
    148292            return $sql; 
    149  
    150293        } 
    151294 
     
    170313 
    171314        // Get task types 
    172         function get_task_types () { 
     315         
     316        public function get_task_types () { 
     317         
    173318            return apply_filters ('projekt_tasks_task_types', array( array ( 'id' => 'spt_task_type_project_task', 'name' => 'Project Task', 'plural' => 'Project Tasks' ), array ( 'id' => 'spt_task_type_bug', 'name' => 'Bug', 'plural' => 'Bugs' ), array ( 'id' => 'spt_task_type_wish', 'name' => 'Wish', 'plural' => 'Wishes' ) ) ); 
    174         } 
     319         
     320        } 
     321         
    175322         
    176323        // Get target categories 
    177         function get_target_categories () { 
     324         
     325        public function get_target_categories () { 
     326             
    178327            return apply_filters ('projekt_tasks_task_types', array( array ( 'id' => 'spt_target_category_content', 'name' => 'Content' ), array ( 'id' => 'spt_target_theme_development', 'name' => 'Theme Development' ) ) );      
    179         } 
     328         
     329        } 
     330         
    180331         
    181332        // Get task status 
    182         function get_status () { 
     333         
     334        public function get_status () { 
     335         
    183336            return apply_filters ('projekt_tasks_task_status', array( array ( 'id' => 'spt_status_created', 'name' => 'CREATED' ), array ( 'id' => 'spt_status_open', 'name' => 'OPEN' ), array ( 'id' => 'spt_status_idle', 'name' => 'IDLE' ), array ( 'id' => 'spt_status_closed', 'name' => 'CLOSED' ), array ( 'id' => 'spt_status_removed', 'name' => 'REMOVED' ) ) );                 
    184         } 
     337         
     338        } 
     339         
    185340         
    186341        // Get users 
    187         function get_users () { 
     342         
     343        public function get_users () { 
     344         
    188345            global $wpdb; 
     346             
    189347            $user_array = array(); 
    190             $user_ids = $wpdb->get_col( $wpdb->prepare( "SELECT $wpdb->users.ID FROM $wpdb->users ORDER BY $wpdb->users.ID ASC" )); 
     348             
     349            $user_ids = $wpdb->get_col( "SELECT $wpdb->users.ID FROM $wpdb->users ORDER BY $wpdb->users.ID ASC" ); 
     350             
    191351            foreach ( $user_ids as $user_id ) { 
     352                 
    192353                $user = get_userdata( $user_id ); 
     354                 
    193355                if ( $user->first_name ) array_push ( $user_array, array ('id' => $user_id, 'name' => ucwords( strtolower( $user->first_name . ' ' . $user->last_name ) ), 'email' => $user->user_email ) ); 
    194356            } 
     357             
    195358            return $user_array; 
    196359        }                    
    197360         
     361         
    198362        // Get targets 
    199         function get_targets () { 
     363         
     364        public function get_targets () { 
     365 
    200366 
    201367            // add standard targets. target_id = * means target can have any target id set in active targets on post 
    202368            $num_targets = 0; 
     369             
    203370            $all_targets = array (); 
     371             
    204372            $post_types = get_post_types('','objects'); 
    205373             
    206374            // add all pages and posts 
     375             
    207376            $all_posts = new WP_Query( array( 'post_type' => 'page', 'post_status' => 'any', 'showposts' => '-1' ) ); 
     377             
    208378            foreach ($all_posts->posts as $single_post ) { 
     379             
    209380                array_push ( $all_targets, array ( 'target_type' => 'spt_target_content', 'target_id' => $single_post->ID, 'target_category' => 'Content', 'name' => ucfirst( $single_post->post_type ), 'shortening' => 'C', 'item_name'   => ucfirst( $single_post->post_title ), 'order' => ( $num_targets++ ), 'description' => 'Connect task to the admin generated content of ' . $single_post->post_title . '.' )); 
     381             
    210382            } 
    211383             
    212384            $all_posts = new WP_Query( array( 'post_type' => 'post', 'post_status' => 'any', 'showposts' => '-1' ) ); 
     385             
    213386            foreach ($all_posts->posts as $single_post ) { 
     387                 
    214388                array_push ( $all_targets, array ( 'target_type' => 'spt_target_content', 'target_id' => $single_post->ID, 'target_category' => 'Content', 'name' => ucfirst( $single_post->post_type ), 'shortening' => 'C', 'item_name'   => ucfirst( $single_post->post_title ), 'order' => ( $num_targets++ ), 'description' => 'Connect task to the admin generated content of ' . $single_post->post_title . '.' )); 
    215             } 
     389             
     390            } 
     391             
    216392             
    217393            // add all other post types instances 
     394             
    218395            if ( $this->use_all_post_types === true ) { 
     396             
    219397                foreach ($post_types as $post_type ) { 
     398                 
    220399                    if ( $post_type->_builtin != true ) { 
     400                     
    221401                        $all_posts = new WP_Query( array( 'post_type' => $post_type->name, 'post_status' => 'any', 'showposts' => '-1' ) ); 
     402                         
    222403                        foreach ($all_posts->posts as $single_post ) { 
     404                             
    223405                            array_push ( $all_targets, array ( 'target_type' => 'spt_target_content', 'target_id' => $single_post->ID, 'target_category' => 'Content', 'name' => ucfirst( $single_post->post_type ), 'shortening' => 'C', 'item_name'   => ucfirst( $single_post->post_title ), 'order' => ( $num_targets++ ), 'description' => 'Connect task to the admin generated content of ' . $single_post->post_title . '.' )); 
     406                         
    224407                        }    
    225408                    }  
     
    227410            } 
    228411 
     412 
    229413            // add all available post types 
     414             
    230415            //$post_types = get_post_types('','objects'); 
     416             
    231417            foreach ($post_types as $post_type ) { 
     418                 
    232419                if ( $post_type->_builtin != true ) { 
     420                     
    233421                    array_push ( $all_targets, array ( 'target_type' => 'spt_target_post_type', 'target_id' => $post_type->name, 'target_category' => 'Theme Development', 'name' => 'Post type', 'shortening' => 'PT', 'item_name'     => ucfirst( $post_type->label ), 'order' => ( $num_targets++ ), 'description' => 'Connect this task to the post type  "' . $post_type->label  . '". This task will appear on every page/post of this post type.' )); 
     422                 
    234423                } 
    235424            } 
    236425             
     426             
    237427            // add all available page templates 
     428             
    238429            $page_templates = get_page_templates(); 
     430             
    239431            foreach ( $page_templates as $page_template_key => $page_template_value ) { 
     432                 
    240433                array_push ( $all_targets, array ( 'target_type' => 'spt_target_page_template', 'target_id' => $page_template_key, 'target_category' => 'Theme Development', 'name' => 'Page Template', 'shortening' => 'T', 'item_name' => $page_template_key, 'order' => ( $num_targets++ ), 'description' => 'Connect this task to the page template  "' . $page_template_key . '". This task will appear on every page using this page template.' )); 
    241             } 
    242                          
     434             
     435            } 
     436                     
     437                     
    243438            // add all available shortcodes 
     439             
    244440            global $shortcode_tags; 
     441             
    245442            foreach ( $shortcode_tags as $shortcode_tag_key => $shortcode_tag_value ) { 
     443                 
    246444                array_push ( $all_targets, array ( 'target_type' => 'spt_target_shortcode', 'target_id' => $shortcode_tag_key, 'target_category' => 'Theme Development', 'name' => 'Shortcode', 'shortening' => 'S', 'item_name'    => ucfirst( $shortcode_tag_key ), 'order' => ( $num_targets++ ), 'description' => 'Connect this task to the shortcode  "' . $shortcode_tag_key . '". This task will appear on every page/post using this shortcode.' )); 
     445             
    247446            } 
    248447 
     
    253452         
    254453        // Get active targets on post 
    255         function get_active_targets_on_post ( $post ) { 
     454         
     455        public function get_active_targets_on_post ( $post ) { 
    256456         
    257457            // add standard targets 
    258             $active_targets = array(  
     458             
     459            $active_targets = array( 
     460             
    259461                array ( 'target_type' => 'spt_target_content',   'target_id' => $post->ID,                                   'item_name' => ucfirst( $post->post_title ), 'description' => 'Connect this task to the <i>content</i> on this ' . $post->post_type . '. The content is changed in Wordpress admin and does not affect the Theme development.' ) ,  
     462                 
    260463                array ( 'target_type' => 'spt_target_post',         'target_id' => $post->ID,     'name' => ucfirst( $post->post_type ), 'item_name' => ucfirst( $post->post_title ), 'description' => 'Connect this task to the ' . $post->post_type . ' "' . $post->post_title . '" and no particular other function on this ' . $post->post_type . '. Try to be as specific as possible, only choose this if nothing else below will do.' ),  
     464                 
    261465                array ( 'target_type' => 'spt_target_post_type', 'target_id' => $post->post_type,                                'item_name' => ucfirst( $post->post_type ),  'description' => 'Connect this task to the post type "' . $post->post_type . '". This task generally targets this ' . $post->post_type . ' and all other with the same post type.' ) 
    262466            ); 
    263467             
     468             
    264469            // add page template if this post is a page 
     470             
    265471            if ( $post->post_type == 'page' ) { 
     472             
    266473                $page_template_name = get_post_meta( $post->ID, '_wp_page_template' ,true ); 
     474                 
    267475                array_push ( $active_targets, array ( 'target_type' => 'spt_target_page_template', 'target_id' => $page_template_name, 'item_name' => ucfirst( $page_template_name ), 'description' => 'Connect this task to the page template "' . $page_template_name . '". This task will appear on every page/post that uses this page template.' )); 
    268             } 
     476             
     477            } 
     478             
    269479             
    270480            // add shortcodes used in this post 
     481             
    271482            global $shortcode_tags; 
     483             
    272484            if (!empty($shortcode_tags) || is_array($shortcode_tags)) { 
     485             
    273486                $pattern = get_shortcode_regex(); 
     487                 
    274488                $this->found_shortcodes_in_post = array(); 
     489                 
    275490                preg_replace_callback('/'.$pattern.'/s', array($this, 'do_shortcode_tag'), $post->post_content); 
     491                 
    276492                foreach ( $this->found_shortcodes_in_post as $found_shortcode ) { 
     493                 
    277494                    array_push ( $active_targets, array (  
     495                     
    278496                        'target_type'   => 'spt_target_shortcode', 
     497                         
    279498                        'target_id' => $found_shortcode['name'], 
     499                         
    280500                        'item_name'     => ucfirst( $found_shortcode['name'] ),  
     501                         
    281502                        'description'   => 'Connect this task to the shortcode  "' . $found_shortcode['name'] . '". This task will appear on every page/post that uses this shortcode.' . ( $found_shortcode['params'] != '' ? ' On this ' . $post->post_type . ' ' . $found_shortcode['name']  . ' had parameters <b>' . $found_shortcode['params'] . '</b>' : '' ) )); 
    282503                } 
     
    284505                         
    285506            // make the array adjustable for others 
     507             
    286508            return apply_filters ('projekt_tasks_active_targets_on_post', $active_targets, $post ); 
    287509        } 
    288510         
    289511         
     512         
    290513        // Internal: detect shortcodes in regular expression 
    291         function do_shortcode_tag ( $m ) { global $shortcode_tags; array_push( $this->found_shortcodes_in_post, array( 'name' => $m[2], 'params' => $m[3] )); } 
    292          
    293  
    294          
    295     }  
    296      
    297 } //End Class 
     514         
     515        public function do_shortcode_tag ( $m ) {  
     516         
     517            global $shortcode_tags;  
     518             
     519            array_push( $this->found_shortcodes_in_post, array( 'name' => $m[2], 'params' => $m[3] ));  
     520             
     521        } 
     522         
     523    } //End Class 
     524}  
    298525 
    299526?> 
  • project-tasks/trunk/files/project-tasks-form.php

    r527949 r906495  
    44Project Tasks 
    55 
    6 Copyright (C) 2011 Klas Ehnemark (http://klasehnemark.com) 
     6Copyright (C) 2011-2014 Klas Ehnemark (http://klasehnemark.com) 
    77 
    88This program is free software; you can redistribute it and/or modify 
     
    2727    class project_tasks_form { 
    2828 
    29         private $data; 
    30          
    31  
    3229        //////////////////////////////////////////////////////////////////////////////// 
    3330        // 
     
    3734     
    3835        public function __construct() { 
    39             $this->data = new project_tasks_data ();     
     36             
    4037        } 
    4138         
     
    5249        function render_form () { 
    5350         
     51            global $project_tasks; 
     52             
    5453            global $wpdb; 
    5554             
    5655            $task_id        = project_tasks_general::get_var_from_request ( 'task_id', '0' ); 
     56             
    5757            $post_id        = project_tasks_general::get_var_from_request ( 'post_id', '0' ); 
     58             
    5859            $parent_task    = project_tasks_general::get_var_from_request ( 'parent_task', '0' ); 
     60             
    5961            if ( !isset($post_id) || $post_id == '' ) { echo ('Error: No post ID in the reguest.'); die(); } 
    6062             
     63             
    6164            // get arrays of content 
    62             $post                   = wp_get_single_post ( $post_id ); 
    63             $users                  = $this->data->get_users (); 
    64             $all_status                 = $this->data->get_status ();    
    65             $task_types                 = $this->data->get_task_types(); 
     65             
     66            $post                   = get_post ( $post_id ); 
     67             
     68            $users                  = $project_tasks->data->get_users (); 
     69             
     70            $all_status                 = $project_tasks->data->get_status ();   
     71             
     72            $task_types                 = $project_tasks->data->get_task_types(); 
    6673             
    6774 
    6875            // default values 
     76             
    6977            $task_notes = $task_description = $task_status = $task_deadline = $parent_task_title = $task_type_name = ''; 
     78             
    7079            $task_action_type = $task_action_step = $task_action_responder = $task_action_created_by = $action_content = $parent_task_type = ''; 
     80             
    7181            $task_creator = get_current_user_id(); 
     82             
    7283            $task_time = time(); 
     84             
    7385            $task_closed = $task_global  = false; 
     86             
    7487            $num_subtasks = 0; 
     88             
    7589            $task_assigned_to = $task_progress = '0'; 
     90             
    7691            $assigned_user_name = 'NOT ASSIGNED'; 
     92             
    7793            $status_name = 'CREATING'; 
     94             
    7895            $task_type  = 'TASK'; 
     96             
    7997            $task_title = 'New Task'; 
     98             
    8099            $select_class = $type_select_class = ''; 
     100             
    81101            $readonly_class = $type_readonly_class = 'spt_hidden'; 
     102             
    82103            $task_log = 'Nothing yet'; 
     104             
    83105            $task_priority = 5; 
     106             
    84107            $task_due_date_day = 'DD'; 
     108             
    85109            $task_due_date_month = 'MM'; 
     110             
    86111            $task_due_date_year = 'YYYY'; 
    87112             
     113             
    88114            // get values from database if this is a saved task 
     115             
    89116            if ( $task_id != '0' ) { 
    90117             
    91118                global $wpdb; 
    92                 $task = $wpdb->get_results('SELECT *, (select count(*) from ' . $this->data->tasks_table_name . ' where parent_task = ' . $task_id  . ') as num_subtasks FROM ' . $this->data->tasks_table_name . ' WHERE ID = ' . $task_id ); 
     119                 
     120                $task = $wpdb->get_results('SELECT *, (select count(*) from ' . $project_tasks->data->tasks_table_name . ' where parent_task = ' . $task_id  . ') as num_subtasks FROM ' . $project_tasks->data->tasks_table_name . ' WHERE ID = ' . $task_id ); 
     121                 
    93122                if ( empty( $task ) || empty ($task[0]) ) wp_die ('Error: Cannot find task #' . $task_id .' in the database'); 
    94123                                 
    95124                $parent_task                = $task[0]->parent_task; 
     125                 
    96126                $num_subtasks               = $task[0]->num_subtasks; 
     127                 
    97128                $task_time              = $task[0]->created_date; 
     129                 
    98130                $task_creator               = $task[0]->creator; 
     131                 
    99132                $task_assigned_to           = $task[0]->assigned_to; 
     133                 
    100134                $task_type              = $task[0]->type; 
     135                 
    101136                $task_title                 = $task[0]->title; 
     137                 
    102138                $task_description           = $task[0]->description; 
     139                 
    103140                $task_notes                 = $task[0]->notes; 
     141                 
    104142                $task_priority              = $task[0]->priority; 
     143                 
    105144                $task_status                = $task[0]->status; 
     145                 
    106146                $task_due_date          = $task[0]->due_date; 
     147                 
    107148                $task_progress          = $task[0]->progress; 
     149                 
    108150                $task_log                   = $task[0]->log; 
    109151                 
     152                 
    110153                $select_class = $type_select_class = 'spt_hidden'; 
     154                 
    111155                $readonly_class = $type_readonly_class = ''; 
    112156                 
    113157                if ( $task_due_date != 0 ) { 
     158                 
    114159                    $task_due_date_day = date('d', $task_due_date); 
     160                     
    115161                    $task_due_date_month = date('m', $task_due_date); 
     162                     
    116163                    $task_due_date_year = date('Y',  $task_due_date); 
    117164                } 
    118165                 
    119                 //$task_targets = $wpdb->get_results('SELECT * FROM ' . $this->data->task_relation_table_name . ' WHERE task = ' . $task_id ); 
     166                //$task_targets = $wpdb->get_results('SELECT * FROM ' . $project_tasks->data->task_relation_table_name . ' WHERE task = ' . $task_id ); 
    120167            }  
    121168             
    122169            $task_action_type_selected  = 'spt_task_action_type_confirmtype'; 
     170             
    123171            $user_creator               = get_userdata ($task_creator); 
     172             
    124173            $task_creator_name          = $user_creator->display_name; 
     174             
    125175            $task_time_clear            = date ( 'd/m/Y', $task_time ); 
     176             
    126177            $task_deadline_clear        = ''; 
     178             
    127179            $task_priority              = ( $task_priority > 0 && $task_priority < 11 ) ? $task_priority : 5; ?> 
    128180         
    129             <html><head> 
    130                 <link rel="stylesheet" type="text/css" href="<?php echo '/wp-content/plugins/' . str_replace( '.php', '.css', plugin_basename(__FILE__)) ?>" /> 
    131                 <script type='text/javascript' src='/wp-admin/load-scripts.php?c=0&amp;load=jquery,utils&amp;ver=fb5c271ac01e8186b23ece33d5ce4961'></script> 
    132                 <script type='text/javascript' src='<?php echo '/wp-content/plugins/' . str_replace( '.php', '.js', plugin_basename(__FILE__)) ?>'></script> 
     181            <html><head><?php 
     182            if ( project_tasks_general::get_var_from_request ( 'css', '0' ) != '0' ) {?> 
     183                <link rel="stylesheet" type="text/css" href="<?php echo WP_PLUGIN_URL . '/' . dirname( plugin_basename(__FILE__) ) . '/project-tasks.css' ?>" /> 
     184                <script type='text/javascript' src='/wp-admin/load-scripts.php?c=1&load%5B%5D=jquery-core,jquery-migrate,utils&ver=3.8.1'></script> 
     185                <link media="all" type="text/css" href="/wp-admin/load-styles.php?c=1&dir=ltr&load=dashicons,admin-bar,wp-admin,buttons,wp-auth-check&ver=3.8.1" rel="stylesheet"> 
     186                <script type='text/javascript' src='<?php echo WP_PLUGIN_URL . '/' . dirname( plugin_basename(__FILE__) ) . '/project-tasks.js' ?>'></script><?php 
     187            }?> 
    133188            </head> 
    134189            <body id="theme_project_tasks_edit"> 
     
    158213                            <select name="sptask_tasktype" id="sptask_tasktype" class="<?php echo $type_select_class;?>"><?php 
    159214                             
     215                             
    160216                                // display dropdown of task types 
     217                                 
    161218                                foreach ( $task_types as $the_task_type ) { 
     219                                 
    162220                                    if ( $parent_task_type == '' && $task_type ==  $the_task_type['id'] ) $task_type_name = $the_task_type['name']; 
     221                                     
    163222                                    else if ( $parent_task_type != '' && $parent_task_type ==  $the_task_type['id'] ) $task_type_name = $the_task_type['name']; 
     223                                     
    164224                                    echo '<option value="' . $the_task_type['id'] . '"' . ( $task_type_name ==  $the_task_type['name'] ? ' selected="selected"' : '' ) . '>' .  $the_task_type['name']  . '</option>'; 
     225                                     
    165226                                }?> 
    166227                            </select> 
    167228                            <div id="sptask_tasktype_readonly" class="spt_read_only_field <?php echo $type_readonly_class;?>"><?php  
     229                             
    168230                                echo $task_type_name; 
    169                                 if ( $parent_task_type == '' ) echo '<span class="spt_change_read_only">Change</span>';?> 
     231                                 
     232                                if ( $parent_task_type == '' ) echo '<span class="spt_change_read_only">Change</span>'; 
     233                                 
     234                                ?> 
    170235                            </div> 
    171236                            <div class="spt_secondfield"><label for="sptask_duedate">Due Date:</label> 
     
    181246                                <option value="0">[NOT ASSIGNED]</option>'<?php 
    182247                                 
     248                                 
    183249                                // display a dropdown of users 
     250                                 
    184251                                foreach ( $users as $user ) { 
     252                                 
    185253                                    if ( $user['id'] == $task_assigned_to ) $assigned_user_name = $user['name'] ; 
     254                                     
    186255                                    if ( $user['id'] == $task_action_responder ) $task_action_responder_name = $user['name']; 
     256                                     
    187257                                    if ( $user['id'] == $task_action_created_by ) $task_action_created_by_name = $user['name']; 
     258                                     
    188259                                    echo '<option value="' . $user['id'] . '"' . ( $user['id'] == $task_assigned_to ? ' selected="selected"' : '' ) . '>' . $user['name'] . '</option>'; 
     260                                     
    189261                                }?> 
    190262                            </select> 
     
    200272                            <select name="sptask_status" id="sptask_status" class="<?php echo $select_class;?>"><?php 
    201273                             
     274                             
    202275                                // display a drop down with all status 
     276                                 
    203277                                foreach ( $all_status as $status ) { 
     278                                 
    204279                                    if ( $task_status ==  $status['id'] ) $status_name = $status['name']; 
     280                                     
    205281                                    echo '<option value="' . $status['id'] . '"' . ( $task_status ==  $status['id'] ? ' selected="selected"' : '' ) . '>' .  $status['name']  . '</option>'; 
     282                                     
    206283                                }?> 
    207284                            </select> 
     
    234311                        <div id="spt_sub_target_field" class="spt_relations_field spt_sub_target_field">Loading</div> 
    235312                        <div class="spt_sub_tasks_buttons"> 
    236                             <span id="spt_add_new_subtask_button" class="spt_action_button align_left">Add New Sub Task...</span> 
    237                             <span id="spt_edit_subtask_button" class="spt_action_button">Edit...</span> 
    238                             <span id="spt_delete_subtask_button" class="spt_action_button">Delete</span> 
     313                            <span id="spt_add_new_subtask_button" class="button align_left">Add New Sub Task...</span> 
     314                            <span id="spt_edit_subtask_button" class="button">Edit...</span> 
     315                            <span id="spt_delete_subtask_button" class="button">Delete</span> 
    239316                        </div> 
    240317                        <div class="spt_sub_tasks_buttons"> 
    241                             <span id="spt_make_to_subtask" class="spt_action_button align_left">Make this a Sub Task</span> 
    242                          
     318                            <span id="spt_make_to_subtask" class="button align_left">Make this a Sub Task</span> 
    243319                        </div> 
    244320                    </div>--> 
     
    249325                <div id="spt_edit_buttons"> 
    250326                    <span id="spt_previous_task" class="spt_action_button align_left spt_hidden">Previous</span><span id="spt_next_task" class="spt_action_button align_left spt_hidden">Next</span> 
    251                     <span id="spt_save_task" class="spt_action_button">Save Task</span><span id="spt_cancel_task" class="spt_action_button">Cancel</span> 
     327                    <span id="spt_save_task" class="spt_action_button spt_button_primary">Save Task</span><span id="spt_cancel_task" class="spt_action_button">Cancel</span> 
    252328                    <!--<span id="spt_show_sub_tasks" class="spt_action_button align_left">More...</span>--> 
    253329                </div> 
     
    262338 
    263339 
     340 
    264341        //////////////////////////////////////////////////////////////////////////////// 
    265342        // 
     
    271348        public function render_task_target_list () { 
    272349         
     350            global $project_tasks; 
     351             
    273352            global $wpdb; 
    274353             
    275354            // get variables 
     355             
    276356            $task_id = project_tasks_general::get_var_from_request ( 'task_id', '0' ); 
     357             
    277358            $post_id = project_tasks_general::get_var_from_request ( 'post_id', '0' ); 
    278359             
    279360            if ( !isset($post_id) || $post_id == '' ) { echo ('Error: No post ID in the reguest.'); die(); } 
    280361             
     362             
    281363            // get arrays of content 
    282             $post                   = wp_get_single_post ( $post_id ); 
    283             $all_targets                = $this->data->get_targets (); 
     364             
     365            $post                   = get_post ( $post_id ); 
     366             
     367            $all_targets                = $project_tasks->data->get_targets (); 
     368             
    284369            $task_targets               = false; 
    285             $active_targets             = !empty($post) ? $this->data->get_active_targets_on_post ( $post ) : null; 
    286             $target_categories          = $this->data->get_target_categories (); 
     370             
     371            $active_targets             = !empty($post) ? $project_tasks->data->get_active_targets_on_post ( $post ) : null; 
     372             
     373            $target_categories          = $project_tasks->data->get_target_categories (); 
     374             
    287375             
    288376            // list all targets 
    289377            $this->list_previous_category       = ''; 
     378             
    290379            $this->list_category_class      = ' spt_r_firstrow'; 
     380             
    291381            $this->num_targets              = 0; 
    292382             
     383             
    293384            if ( $task_id != '0' ) { 
    294                 $task_targets = $wpdb->get_results('SELECT * FROM ' . $this->data->task_relation_table_name . ' WHERE task = ' . $task_id ); 
     385             
     386                $task_targets = $wpdb->get_results('SELECT * FROM ' . $project_tasks->data->task_relation_table_name . ' WHERE task = ' . $task_id ); 
     387                 
    295388            } else { 
     389             
     390             
    296391                // if this is a new task and created from a post, add the post as active 
     392                 
    297393                $post_selected = new stdClass(); 
     394                 
    298395                $post_selected->id = ''; 
     396                 
    299397                $post_selected->task = 0; 
     398                 
    300399                $post_selected->target_type = 'spt_target_content'; 
     400                 
    301401                $post_selected->target_id = $post_id; 
     402                 
    302403                $task_targets = array ($post_selected); 
    303404            } 
     
    305406            echo '<table cellpadding="0" cellspacing="0"><thead><tr><td class="spt_rtd_1">Select</td><td class="spt_rtd_2">Type</td><td class="spt_rtd_3">Item</td></tr></thead><tbody>'; 
    306407             
     408             
    307409            // first render all selected targets 
     410             
    308411            $this->render_task_targets ( $all_targets, $task_targets, $active_targets, $post, $target_categories, true ); 
    309412             
     413             
    310414            // then render all non selected targets 
     415             
    311416            $this->render_task_targets ( $all_targets, $task_targets, $active_targets, $post, $target_categories, false, true ); 
     417             
    312418             
    313419            echo '<input type="hidden" name="spt_num_target" id="spt_num_target" value="' . $this->num_targets . '" />'; 
     
    332438                                         
    333439                if ( $post )  $active_target = project_tasks_general::find_item_in_array ( $active_targets, 'target_type', $target['target_type'], 'target_id', $target['target_id'] ); 
     440                 
    334441                else $active_target = array(); 
     442                 
    335443                $active_category = project_tasks_general::find_item_in_array ( $target_categories, 'name', $target['target_category'] ); 
     444                 
    336445                $this->num_targets++; 
     446                 
    337447                if ( !empty( $active_category ) && ( empty( $post ) || !empty( $active_target ))) { 
    338448                 
    339449                    $target_tr = $this->render_task_target ( $target, $active_target, $task_targets, $only_selected, $only_nonselected ); 
     450                     
    340451                    if ( $target_tr != '' ) { 
     452                     
    341453                        if ( $this->list_previous_category != $target['target_category'] ) { 
     454                         
    342455                            echo '<tr class="spt_task_type_row' . $this->list_category_class . '"><td colspan="4">' . $target['target_category'] . '</td></tr>'; 
     456                             
    343457                            $this->list_previous_category = $target['target_category']; 
     458                             
    344459                            $this->list_category_class = ''; 
    345                         }                                            
     460                             
     461                        }            
     462                         
    346463                        echo $target_tr; 
    347464                    } 
     
    350467        } 
    351468         
     469         
     470         
    352471        //////////////////////////////////////////////////////////////////////////////// 
    353472        // RENDER TASK TARGET 
     
    358477         
    359478            $target_type_name       = isset( $active_target['name'] )?      $active_target['name']      : ( isset ( $target['name'] ) ?         $target['name']     : ' - missing name -' ); 
     479             
    360480            $target_item_name       = isset( $active_target['item_name'] )?     $active_target['item_name']     : ( isset ( $target['item_name'] ) ?    $target['item_name']    : ' - missing item_name -' ); 
     481             
    361482            $target_item_description = isset( $active_target['description'] )?  $active_target['description'] : ( isset ( $target['description'] ) ?    $target['description']  : ' - missing description -' ); 
     483             
    362484            $target_id          = isset( $active_target['target_id'] )?     $active_target['target_id']     : ( isset ( $target['target_id'] ) ?    $target['target_id']    : ' - missing target_id -' ); 
     485             
    363486            $target_selected        = false; 
    364487             
    365488            if ( $db_task_targets !== false ) { 
     489             
    366490                foreach ( $db_task_targets as $db_task_target ) { 
     491                 
    367492                    //echo '<br>.....$db_task_target->target_type: ' . $db_task_target->target_type . ', $target[target_type]: ' . $target['target_type']; 
     493                     
    368494                    if ( $db_task_target->target_type ==  $target['target_type'] && $db_task_target->target_id == $target_id ) { 
     495                     
    369496                        $target_selected = true; 
     497                         
    370498                        continue; 
    371499                    } 
     
    373501            } 
    374502             
     503             
    375504            if ( ( $target_selected === true && $only_selected === true ) || 
     505             
    376506                ( $target_selected === false && $only_nonselected === true ) || 
     507                 
    377508                ( $only_selected === false &&  $only_nonselected === false )) { 
     509                 
    378510             
    379511                $start_link = $end_link = ''; 
     512                 
    380513                if ( $target_selected == true && $target['target_type'] == 'spt_target_content' ) { 
     514                 
    381515                    $start_link = '<a href="' . get_permalink ( $target_id ) . '">'; 
     516                     
    382517                    $end_link = '</a>'; 
    383518                } 
     
    407542         
    408543        public function render_subtasks_list () { 
     544         
    409545            $task_id = project_tasks_general::get_var_from_request ( 'task_id', '0' ); 
     546             
    410547            if ( $task_id == '0' ) die('You must save this task before adding a sub task'); 
     548             
    411549            $task_list = new project_tasks_list(); 
     550             
    412551            $task_list->render_list( array ( 
     552             
    413553                'parent_task'       => project_tasks_general::get_var_from_request ( 'task_id', $task_id ), 
     554                 
    414555                'columns'       => array ( 'title', 'assigned_to', 'status' ), 
     556                 
    415557                'show_controls' => '0', 
     558                 
    416559                'embed_selectors'   => '1' 
    417560            )); 
     
    431574        function save_task_form () { 
    432575         
     576            global $project_tasks; 
     577             
    433578            global $wpdb; 
     579             
    434580            $current_user = wp_get_current_user(); 
    435581                         
     582                         
    436583            $task_id = isset( $_POST[ 'task_id' ] )? $_POST[ 'task_id' ] : 0; 
     584             
    437585            $num_targets = isset( $_POST[ 'num_targets' ] )? intval($_POST[ 'num_targets' ]) : 0; 
     586             
    438587            $num_subtasks = isset( $_POST[ 'num_subtasks' ] )? intval($_POST[ 'num_subtasks' ]) : 0; 
     588             
    439589            $ignore_targets = isset( $_POST[ 'ignore_targets' ] )? true : false; 
     590             
    440591            $do_update = false; 
     592             
    441593            $task_log = ''; 
     594             
    442595            $new_log_entry_intro = date('d-m-Y') . ': ' . $current_user->display_name; 
    443596             
     597             
    444598            $db_task_item_columns = array ( 
     599             
    445600                'created_date'      => time(), 
     601                 
    446602                'last_action_date'  => time(), 
     603                 
    447604                'creator'           => get_current_user_id(), 
     605                 
    448606                'parent_task'       => isset( $_POST[ 'parent_task' ] )? $_POST[ 'parent_task' ] : '0',  
     607                 
    449608                'assigned_to'       => isset( $_POST[ 'task_taskassignedto' ] )? $_POST[ 'task_taskassignedto' ] : '',  
     609                 
    450610                'priority'      => isset( $_POST[ 'task_priority' ] )? $_POST[ 'task_priority' ] : '5', 
     611                 
    451612                'due_date'      => isset( $_POST[ 'task_duedate' ] )? trim ( $_POST[ 'task_duedate' ] ) : '', 
     613                 
    452614                'progress'      => isset( $_POST[ 'task_progress' ] )? trim( $_POST[ 'task_progress' ] ) : '',   
     615                 
    453616                'type'          => isset( $_POST[ 'task_tasktype' ] )? $_POST[ 'task_tasktype' ] : '', 
     617                 
    454618                'title'         => isset( $_POST[ 'task_title' ] )? $_POST[ 'task_title' ] : '', 
     619                 
    455620                'description'       => isset( $_POST[ 'task_description' ] )? $_POST[ 'task_description' ] : '', 
     621                 
    456622                'notes'         => isset( $_POST[ 'task_notes' ] )? $_POST[ 'task_notes' ] : '', 
     623                 
    457624                'status'            => isset( $_POST[ 'task_status' ] )? $_POST[ 'task_status' ] : '', 
     625                 
    458626                'log'           => ''        
    459627            ); 
     628             
    460629            //$db_task_item_columns_format = array ( '%d', '%d', '%d', '%d', '%d','%d', '%d', '%d', '%s', '%s', '%s', '%s', '%s', '%s' ); 
    461630 
    462631             
    463632            // Some validation and checks 
    464             project_tasks_general::validate_field ( $db_task_item_columns['title'],     'mandatory',    '- You must write something in the title field.' ); 
     633             
     634            project_tasks_general::validate_field ( $db_task_item_columns['title'],         'mandatory',    '- You must write something in the title field.' ); 
     635             
    465636            project_tasks_general::validate_field ( $db_task_item_columns['progress'],  'number',   '- Progress must be a number.' ); 
     637             
    466638            if ( $db_task_item_columns['due_date'] == 'DD-MM-YYYY' ) $db_task_item_columns['due_date'] = '0'; 
     639             
    467640            else if ( $db_task_item_columns['due_date'] != '' ) { 
     641             
    468642                project_tasks_general::validate_field ( $db_task_item_columns['due_date'], 'date', '- Due date must be a valid date (DD-MM-YYYY).' ); 
     643                 
    469644                $db_task_item_columns['due_date']  = strtotime( $db_task_item_columns['due_date'] ); // Translate due date into a unix time stamp 
     645                 
    470646            } 
    471647 
    472648             
    473649            // insert the task item into database (%s as string; %d as decimal number and %f as float) 
     650             
    474651            if ( $task_id == 0 ) { 
     652             
    475653                $db_task_item_columns['log'] = $new_log_entry_intro . ' created this task'; 
    476                 $wpdb->insert( $this->data->tasks_table_name, $db_task_item_columns, array ( '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%s', '%s', '%s', '%s', '%s', '%s' ) ); 
     654                 
     655                $wpdb->insert( $project_tasks->data->tasks_table_name, $db_task_item_columns, array ( '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%s', '%s', '%s', '%s', '%s', '%s' ) ); 
     656                 
    477657                $task_id = $wpdb->insert_id; 
    478658             
     659             
    479660            // or get the previous saved task and compare what has been changed to write to the log 
     661             
    480662            } else { 
     663             
    481664                $do_update = true; 
    482                 $task = $wpdb->get_results('SELECT * FROM ' . $this->data->tasks_table_name . ' WHERE ID = ' . $task_id ); 
     665                 
     666                $task = $wpdb->get_results('SELECT * FROM ' . $project_tasks->data->tasks_table_name . ' WHERE ID = ' . $task_id ); 
     667                 
    483668                if ( isset( $task[0] )) { 
    484                     if ( $task[0]->assigned_to != $db_task_item_columns['assigned_to'] ) $task_log .= '\n' . $new_log_entry_intro . ' changed "assigned to" to ' . $db_task_item_columns['assigned_to'] == '0'? 'NOT ASSIGNED' : project_tasks_general::find_name_in_array ( $this->data->get_users (),  $db_task_item_columns['assigned_to'] ); 
    485                     if ( $task[0]->type != $db_task_item_columns['type'] ) $task_log .= '\n' . $new_log_entry_intro . ' changed "type" to ' . $db_task_item_columns['type']; 
    486                     if ( $task[0]->title != $db_task_item_columns['title'] ) $task_log .= '\n' . $new_log_entry_intro . ' changed "title" to "' . $db_task_item_columns['title'] . '"'; 
    487                     if ( $task[0]->description != $db_task_item_columns['description'] ) $task_log .= '\n' . $new_log_entry_intro . ' changed "description"'; 
    488                     if ( $task[0]->notes != $db_task_item_columns['notes'] ) $task_log .= '\n' . $new_log_entry_intro . ' changed "notes"'; 
    489                     if ( $task[0]->due_date != $db_task_item_columns['due_date'] ) $task_log .= '\n' . $new_log_entry_intro . ' changed "due date" to ' .  date ( 'd/m/Y', $db_task_item_columns['due_date'] ); 
    490                     if ( $task[0]->progress != $db_task_item_columns['progress'] ) $task_log .= '\n' . $new_log_entry_intro . ' changed "progress" to ' . $db_task_item_columns['progress']; 
    491                     if ( $task[0]->status != $db_task_item_columns['status'] ) $task_log .= '\n' . $new_log_entry_intro . ' changed "status" to ' . $db_task_item_columns['status']; 
    492                     if ( $task[0]->priority != $db_task_item_columns['priority'] ) $task_log .= '\n' . $new_log_entry_intro . ' changed "priority" to ' . $db_task_item_columns['priority']; 
     669                 
     670                    if ( $task[0]->assigned_to != $db_task_item_columns['assigned_to'] )    $task_log .= '\n' . $new_log_entry_intro . ' changed "assigned to" to ' . $db_task_item_columns['assigned_to'] == '0'? 'NOT ASSIGNED' : project_tasks_general::find_name_in_array ( $project_tasks->data->get_users (),  $db_task_item_columns['assigned_to'] ); 
     671                     
     672                    if ( $task[0]->type != $db_task_item_columns['type'] )          $task_log .= '\n' . $new_log_entry_intro . ' changed "type" to ' . $db_task_item_columns['type']; 
     673                     
     674                    if ( $task[0]->title != $db_task_item_columns['title'] )            $task_log .= '\n' . $new_log_entry_intro . ' changed "title" to "' . $db_task_item_columns['title'] . '"'; 
     675                     
     676                    if ( $task[0]->description != $db_task_item_columns['description'] )    $task_log .= '\n' . $new_log_entry_intro . ' changed "description"'; 
     677                     
     678                    if ( $task[0]->notes != $db_task_item_columns['notes'] )            $task_log .= '\n' . $new_log_entry_intro . ' changed "notes"'; 
     679                     
     680                    if ( $task[0]->due_date != $db_task_item_columns['due_date'] )      $task_log .= '\n' . $new_log_entry_intro . ' changed "due date" to ' .  date ( 'd/m/Y', $db_task_item_columns['due_date'] ); 
     681                     
     682                    if ( $task[0]->progress != $db_task_item_columns['progress'] )      $task_log .= '\n' . $new_log_entry_intro . ' changed "progress" to ' . $db_task_item_columns['progress']; 
     683                     
     684                    if ( $task[0]->status != $db_task_item_columns['status'] )          $task_log .= '\n' . $new_log_entry_intro . ' changed "status" to ' . $db_task_item_columns['status']; 
     685                     
     686                    if ( $task[0]->priority != $db_task_item_columns['priority'] )      $task_log .= '\n' . $new_log_entry_intro . ' changed "priority" to ' . $db_task_item_columns['priority']; 
     687                     
    493688                    if ( $task[0]->parent_task != $db_task_item_columns['parent_task'] ) { 
    494                         if ( $db_task_item_columns['parent_task'] == '0' ) $task_log .= '\n' . $new_log_entry_intro . ' removed connection to parent task'; 
    495                         else $task_log .= '\n' . $new_log_entry_intro . ' set this task as a child task to task no ' . $db_task_item_columns['parent_task'] ; 
     689                     
     690                        if ( $db_task_item_columns['parent_task'] == '0' )          $task_log .= '\n' . $new_log_entry_intro . ' removed connection to parent task'; 
     691                         
     692                        else                                                $task_log .= '\n' . $new_log_entry_intro . ' set this task as a child task to task no ' . $db_task_item_columns['parent_task'] ; 
     693                         
    496694                    } 
    497695                } 
    498696            } 
    499697             
     698             
    500699            // loop thru every target and save it to the database 
     700             
    501701            if ( $ignore_targets == false ) { 
     702             
    502703                for ( $itarget = 1; $itarget <= $num_targets; $itarget++ ) { 
    503704                 
    504705                    $targets_type =         isset( $_POST[ 'spt_target_' . $itarget . '_type' ] )?  $_POST[ 'spt_target_' . $itarget . '_type' ]    : ''; 
     706                     
    505707                    $targets_id =           isset( $_POST[ 'spt_target_' . $itarget . '_id' ] )?        $_POST[ 'spt_target_' . $itarget . '_id' ]      : ''; 
     708                     
    506709                    $targets_checked =      isset( $_POST[ 'spt_target_' . $itarget . '_selected' ] )?  $_POST[ 'spt_target_' . $itarget . '_selected' ]    : '0'; 
     710                     
    507711                    $targets_item_name =    isset( $_POST[ 'spt_target_' . $itarget . '_name' ] )? $_POST[ 'spt_target_' . $itarget . '_name' ] : ''; 
     712                     
    508713                     
    509714                    //echo '<br>$targets_type: ' . $targets_type . ', $targets_id: ' . $targets_id . ', $targets_checked: ' . $targets_checked . ', $targets_item_name: ' . $targets_item_name; 
    510715                      
    511716                    // check wheather the connection between task and target allready exists in the database 
    512                     $target_exists = $wpdb->get_var($wpdb->prepare('SELECT COUNT(*) FROM ' . $this->data->task_relation_table_name . ' WHERE task=' . $task_id . ' AND target_type=\'' . $targets_type . '\' AND target_id=\'' . $targets_id . '\';')); 
     717                     
     718                    $target_exists = $wpdb->get_var( 'SELECT COUNT(*) FROM ' . $project_tasks->data->task_relation_table_name . ' WHERE task=' . $task_id . ' AND target_type=\'' . $targets_type . '\' AND target_id=\'' . $targets_id . '\';' ); 
    513719                     
    514720                    // insert or update database 
     721                     
    515722                    if ( $targets_checked == '1' ) { 
    516723                     
    517724                        // prepare data for target 
     725                         
    518726                        $db_task_target_columns = array ( 'task' => $task_id, 'target_type' => $targets_type, 'target_id'   => $targets_id ); 
     727                         
    519728                        $db_task_target_columns_format = array ( '%d', '%s', '%s' ); 
    520729     
    521730                        if ( $target_exists ) { 
    522731                            // Update database, NOT IMPLEMENTED NOW BECAUSE THERE ARE NO FIELDS TO UPDATE 
     732                         
    523733                        } else { 
    524                             $wpdb->insert( $this->data->task_relation_table_name, $db_task_target_columns, $db_task_target_columns_format ); 
    525                             $task_log .= '\n' . $new_log_entry_intro . ' added target ' . project_tasks_general::find_name_in_array ( $this->data->get_targets (), $targets_type, 'target_type' ) . ' ' . $targets_item_name ; 
     734                         
     735                            $wpdb->insert( $project_tasks->data->task_relation_table_name, $db_task_target_columns, $db_task_target_columns_format ); 
     736                             
     737                            $task_log .= '\n' . $new_log_entry_intro . ' added target ' . project_tasks_general::find_name_in_array ( $project_tasks->data->get_targets (), $targets_type, 'target_type' ) . ' ' . $targets_item_name ; 
    526738                        } 
    527739                     
    528740                    // delete target from database 
     741                     
    529742                    } else { 
     743                         
    530744                        if ( $target_exists ) { 
    531                             $rows_affected = $wpdb->query('DELETE FROM ' . $this->data->task_relation_table_name . ' WHERE task=' . $task_id . ' AND target_type=\'' . $targets_type . '\' AND target_id=\'' . $targets_id . '\''); 
    532                             if ( $rows_affected ) $task_log .= '\n' . $new_log_entry_intro . ' removed target ' . project_tasks_general::find_name_in_array ( $this->data->get_targets (), $targets_type, 'target_type' ) . ' ' . $targets_item_name ; 
     745                             
     746                            $rows_affected = $wpdb->query('DELETE FROM ' . $project_tasks->data->task_relation_table_name . ' WHERE task=' . $task_id . ' AND target_type=\'' . $targets_type . '\' AND target_id=\'' . $targets_id . '\''); 
     747                             
     748                            if ( $rows_affected ) $task_log .= '\n' . $new_log_entry_intro . ' removed target ' . project_tasks_general::find_name_in_array ( $project_tasks->data->get_targets (), $targets_type, 'target_type' ) . ' ' . $targets_item_name ; 
    533749                        } 
    534750                    } 
     
    536752            } 
    537753             
     754             
    538755            // or, update the task item in the database ( and don't update when the task was created and who was the creator ) 
     756             
    539757            if ( $do_update == true ) { 
     758             
    540759                unset( $db_task_item_columns['created_date'] );  
     760                 
    541761                unset( $db_task_item_columns['creator'] ); 
    542                 $db_task_item_columns['log'] = $wpdb->get_var($wpdb->prepare('SELECT log FROM ' . $this->data->tasks_table_name . ' WHERE id=' . $task_id . ';')) . $task_log; 
    543                 $wpdb->update( $this->data->tasks_table_name, $db_task_item_columns, array( 'id' => $task_id ),  array ( '%d', '%d', '%d','%d', '%d', '%d', '%s', '%s', '%s', '%s', '%s', '%s' ), array( '%d' ) );                   
     762                 
     763                $db_task_item_columns['log'] = $wpdb->get_var( 'SELECT log FROM ' . $project_tasks->data->tasks_table_name . ' WHERE id=' . $task_id . ';' ) . $task_log; 
     764                 
     765                $wpdb->update( $project_tasks->data->tasks_table_name, $db_task_item_columns, array( 'id' => $task_id ),  array ( '%d', '%d', '%d','%d', '%d', '%d', '%s', '%s', '%s', '%s', '%s', '%s' ), array( '%d' ) );  
     766                 
    544767            } 
    545768            echo 'OK'; 
    546769        } 
    547     } 
    548  
    549      
    550 } //End Class 
     770         
     771    } //End Class 
     772} 
    551773 
    552774?> 
  • project-tasks/trunk/files/project-tasks-general.php

    r527949 r906495  
    44Project Tasks 
    55 
    6 Copyright (C) 2011 Klas Ehnemark (http://klasehnemark.com) 
     6Copyright (C) 2011-2014 Klas Ehnemark (http://klasehnemark.com) 
    77 
    88This program is free software; you can redistribute it and/or modify 
     
    4848         
    4949        public static function load_scripts_and_styles () { 
     50     
    5051            wp_enqueue_script ( 'thickbox' ); 
    51             wp_register_script ( 'project_tasks', WP_PLUGIN_URL . '/' . dirname( plugin_basename(__FILE__) ) . '/project-tasks.js' ); 
     52             
     53            wp_register_script  ( 'project_tasks',  plugins_url('project-tasks') . '/files/project-tasks.js' ); 
     54             
    5255            wp_enqueue_script ( 'project_tasks' ); 
     56             
    5357            wp_enqueue_style ( 'thickbox' ); 
    54             wp_register_style ( 'project_tasks', WP_PLUGIN_URL . '/' . dirname( plugin_basename(__FILE__) ) . '/project-tasks.css' ); 
     58             
     59            wp_register_style   ( 'project_tasks',  plugins_url('project-tasks') . '/files/project-tasks.css' ); 
     60             
    5561            wp_enqueue_style ( 'project_tasks' );        
    5662        } 
     
    5864 
    5965        // find item in array based on item key value ( and optional another item key value ) 
     66         
    6067        public static function find_item_in_array ( $array, $item_key, $item_key_value, $item_key2 = null, $item_key2_value  = null) { 
     68         
    6169            foreach ( $array as $item ) {  
     70             
    6271                if ( isset($item[$item_key]) && $item[$item_key] == $item_key_value ) {  
     72                 
    6373                    if ( ( $item_key2 == null && $item_key2_value == null ) || $item_key2_value== '*' ) { return $item; break; } 
     74                     
    6475                    else { 
     76                     
    6577                        if ( isset($item[$item_key2]) && $item[$item_key2] == $item_key2_value ) { return $item; break; } 
     78                         
    6679                    } 
    6780                } 
     
    6982        } 
    7083         
     84         
    7185        // find name value in a array based on id value 
     86         
    7287        public static function find_name_in_array ( $array, $id, $id_key = 'id', $name_key = 'name', $return_if_empty = '' ) { 
     88         
    7389            foreach ( $array as $item ) { if ( $item[ $id_key ] == $id ) { 
     90             
    7491                return $item[ $name_key ]; break; }  
     92             
    7593            } 
     94             
    7695            return $return_if_empty; 
    7796        } 
    7897         
     98         
    7999        // validate field and if not validated, echo error message and die (oooch!) 
     100         
    80101        public static function validate_field ( $field_value, $validate, $error_message ) { 
     102         
    81103            switch ($validate) { 
     104             
    82105                case 'mandatory'    : if ( $field_value == '' ) { echo $error_message; die(); } break; 
     106                 
    83107                case 'number'       : if ( !is_numeric ( $field_value ) ) { echo $error_message; die(); } break;  
     108                 
    84109                case 'date'         : if ( !( date( 'd-m-Y', strtotime( $field_value ) ) == $field_value ) ) { echo $error_message; die(); } break;  
    85110            } 
    86111        } 
    87112         
     113         
    88114        // get value from post or get variable 
     115         
    89116        public static function get_var_from_request ( $var_name, $default_value ) { 
     117         
    90118            $var_value; 
     119             
    91120            if ( isset( $_GET[ $var_name ] ) ) $var_value = $_GET[ $var_name ]; 
     121             
    92122            if ( empty ( $var_value ) && isset( $_POST[ $var_name ] )) $var_value = $_POST[ $var_name ]; 
     123             
    93124            if ( empty ( $var_value) || $var_value == '' ) $var_value = $default_value; 
     125             
    94126            return $var_value; 
    95127        } 
    96128         
     129         
    97130        // send mail 
     131         
    98132        public static function send_mail ( $to, $subject, $message ) { 
     133         
    99134            $headers  = 'MIME-Version: 1.0' . "\r\n"; 
     135             
    100136            $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n"; 
     137             
    101138            $headers .= 'From: ' . get_option('blogname') . ' <noreply@' . str_replace( 'https://' , '', str_replace( 'http://' , '', get_option('siteurl') )) . '>' . "\r\n"; 
     139             
    102140            $headers .= 'Content-Transfer-Encoding: 8bit' . '\r\n\r\n'; 
    103             mail( $to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $headers);       
     141             
     142            mail( $to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $headers);  
     143             
    104144        } 
    105145         
    106146        // set nbsp if no content 
     147         
    107148        public static function nbsp ( $content, $if_empty = '&nbsp;' ) { 
     149         
    108150            return $content == '' ? $if_empty : $content; 
    109151        } 
    110152 
    111153         
    112     }  
    113      
    114 } //End Class 
     154    } //End Class 
     155} 
    115156?> 
  • project-tasks/trunk/files/project-tasks-list.php

    r488592 r906495  
    44Project Tasks 
    55 
    6 Copyright (C) 2011 Klas Ehnemark (http://klasehnemark.com) 
     6Copyright (C) 2011-2014 Klas Ehnemark (http://klasehnemark.com) 
    77 
    88This program is free software; you can redistribute it and/or modify 
     
    2929 
    3030        private $list_previous_category = ''; 
     31         
    3132        private $list_category_class = ''; 
     33         
    3234        //private $num_targets = 0; 
    3335         
    34         private $data; 
    3536 
    3637        //////////////////////////////////////////////////////////////////////////////// 
     
    4142     
    4243        public function __construct() { 
    43             $this->data = new project_tasks_data ();         
     44             
    4445        } 
    4546         
     47 
    4648 
    4749        //////////////////////////////////////////////////////////////////////////////// 
     
    5557 
    5658            $defaults = array ( 
     59             
    5760                'post_id'               => isset( $_POST[ 'post_id' ] )? $_POST[ 'post_id' ] : '0', 
     61                 
    5862                'parent_task'           => '0', 
     63                 
    5964                'show_subtasks'     => '1', 
     65                 
    6066                'show_controls'     => '1', 
     67                 
    6168                'list_id'               => 'project_tasks_list', 
     69                 
    6270                'num_tasks_per_page'    => isset( $_POST[ 'num_tasks_per_page' ] )? $_POST[ 'num_tasks_per_page' ] : '20', 
     71                 
    6372                'page_num'          => isset( $_POST[ 'page_num' ] )? $_POST[ 'page_num' ] : '1', 
     73                 
    6474                'show_only_type'        => isset($_COOKIE['show_only_type']) && $_COOKIE['show_only_type'] != '' ? $_COOKIE['show_only_type'] : 'Everything', 
     75                 
    6576                'show_only_mine'        => isset($_COOKIE['show_only_mine']) && $_COOKIE['show_only_mine'] != '' ? $_COOKIE['show_only_mine'] : '0', 
     77                 
    6678                'show_only_open'        => isset($_COOKIE['show_only_open']) && $_COOKIE['show_only_open'] != '' ? $_COOKIE['show_only_open'] : '0', 
     79                 
    6780                'columns'               => array ( 'title', 'targets', 'priority', 'creator', 'assigned_to', 'progress', 'status', 'due_date' ) 
    6881            ); 
     
    7083            $r = wp_parse_args( $args, $defaults ); 
    7184             
     85            global $project_tasks; 
     86             
    7287            global $wpdb; 
    7388             
    74             $num_columns            = count($r['columns']); 
    75             $offset                 = ( $r['page_num']-1 ) * $r['num_tasks_per_page']; 
    76             $users              = $this->data->get_users (); 
    77             $all_targets            = $this->data->get_targets (); 
    78             $all_status             = $this->data->get_status (); 
    79             $task_types             = $this->data->get_task_types (); 
    80             $the_list               = array(); 
    81             $this_list_ids          = ''; 
     89            $num_columns                = count($r['columns']); 
     90             
     91            $offset                     = ( $r['page_num']-1 ) * $r['num_tasks_per_page']; 
     92             
     93            $users                  = $project_tasks->data->get_users (); 
     94             
     95            $all_targets                = $project_tasks->data->get_targets (); 
     96             
     97            $all_status                 = $project_tasks->data->get_status (); 
     98             
     99            $task_types                 = $project_tasks->data->get_task_types (); 
     100             
     101            $the_list                   = array(); 
     102             
     103            $this_list_ids              = ''; 
    82104            ?> 
    83105             
     
    86108                    <thead> 
    87109                        <tr><?php 
     110                         
    88111                        foreach ( $r['columns'] as $column ) { 
     112                         
    89113                            switch ( $column ) { 
     114                             
    90115                                case 'title': 
     116                                 
    91117                                    echo '<td class="spt_title">'; 
     118                                     
    92119                                    if ( $r['show_only_type'] == 'Everything' ) echo 'Title'; 
     120                                     
    93121                                    else { foreach ( $task_types as $the_task_type ) { if ( $r['show_only_type'] ==  $the_task_type['id'] ) echo $the_task_type['name']; }} 
     122                                     
    94123                                    echo '</td>'; 
     124                                     
    95125                                    break; 
     126                                     
    96127                                case 'targets':     echo '<td class="spt_targets" id="spt_targets_hd">Targets</td>'; break; 
     128                                 
    97129                                case 'assigned_to': echo '<td class="spt_assigned_to" id="spt_assigned_to_hd">Assigned to</td>'; break; 
     130                                 
    98131                                case 'progress':    echo '<td class="spt_progress" id="spt_progress_hd">Progress</td>'; break; 
     132                                 
    99133                                case 'status':  echo '<td class="spt_status" id="spt_status_hd">Status</td>'; break; 
     134                                 
    100135                                case 'due_date':    echo '<td class="spt_due_date" id="spt_due_date_hd">Due Date</td>'; break; 
     136                                 
    101137                                case 'creator': echo '<td class="spt_creator" id="spt_creator_hd">Created by</td>'; break; 
     138                                 
    102139                                case 'priority':    echo '<td class="spt_priority" id="spt_priority_hd">Priority</td>'; break; 
     140                                 
    103141                            } 
    104142                        }?> 
     
    107145                     
    108146                        $previous_target_type = ''; 
     147                         
    109148                        $sql_where = ''; 
     149                         
    110150                        $target_count = 0; 
     151                         
    111152                        $last_type = ''; 
     153                         
    112154                        $first_row = true; 
     155                         
    113156                        $task_count = 0; 
    114157                         
    115158                         
    116159                        // Build ths SQL String 
     160                         
    117161                        $sql = 'SELECT * '; 
     162                         
    118163                        foreach ( $all_targets as $target ) { 
     164                         
    119165                            if ( $previous_target_type != $target['target_type'] ) { 
     166                             
    120167                                $target_count++; 
    121                                 $sql .= ', (select count(*) from ' . $this->data->task_relation_table_name . ' where task = ' . $this->data->tasks_table_name . '.id AND target_type = "' . $target['target_type'] . '") as target' . $target_count . ' '; 
     168                                 
     169                                $sql .= ', (select count(*) from ' . $project_tasks->data->task_relation_table_name . ' where task = ' . $project_tasks->data->tasks_table_name . '.id AND target_type = "' . $target['target_type'] . '") as target' . $target_count . ' '; 
     170                                 
    122171                                $previous_target_type  = $target['target_type']; 
    123172                            } 
    124173                        } 
    125                         $sql .= ' FROM ' . $this->data->tasks_table_name; 
     174                         
     175                        $sql .= ' FROM ' . $project_tasks->data->tasks_table_name; 
    126176                         
    127177                        if ( $r['show_only_mine'] != '0' )      $sql_where .= ' assigned_to = ' . get_current_user_id(); 
     178                         
    128179                        if ( $r['show_only_open'] != '0' )      $sql_where .= ( $sql_where != '' ? ' AND ' : '' ) . ' status <> \'spt_status_closed\' AND status <> \'spt_status_removed\''; 
    129                         if ( $r['show_only_type'] != 'Everything' )     $sql_where .= ( $sql_where != '' ? ' AND ' : '' ) . ' type = \'' . $r['show_only_type'] . '\'';      
    130                         if ( $r['post_id'] != '0' )                 $sql_where .= ( $sql_where != '' ? ' AND ' : '' ) . $this->data->tasks_table_name . '.ID IN ( SELECT task FROM ' .  $this->data->task_relation_table_name . ' WHERE ' . $this->data->get_sql_where_for_post_tasks ( $r['post_id'] ) . ')'; 
     180                         
     181                        if ( $r['show_only_type'] != 'Everything' )     $sql_where .= ( $sql_where != '' ? ' AND ' : '' ) . ' type = \'' . $r['show_only_type'] . '\''; 
     182                         
     183                        if ( $r['post_id'] != '0' )                 $sql_where .= ( $sql_where != '' ? ' AND ' : '' ) . $project_tasks->data->tasks_table_name . '.ID IN ( SELECT task FROM ' .  $project_tasks->data->task_relation_table_name . ' WHERE ' . $project_tasks->data->get_sql_where_for_post_tasks ( $r['post_id'] ) . ')'; 
     184                         
    131185                         
    132186                        $sql_where .= ( $sql_where != '' ? ' AND ' : '' ) . ' parent_task = ' . $r['parent_task']; 
     
    137191                         
    138192                        $all_tasks = $wpdb->get_results($sql); 
     193                         
    139194                        $num_all_tasks = count ( $all_tasks ); 
    140195 
    141196 
    142197                        // Get data from database, get all tasks 
     198                         
    143199                        $tasks = $wpdb->get_results( $sql . ' LIMIT ' . $offset . ', ' . $r['num_tasks_per_page'] . '' ); 
    144200                         
    145201                         
    146202                        // loop thru all task in the list and store them in an array and the id's in a comma separated string 
     203                         
    147204                        foreach ( $tasks as $task ) { 
     205                         
    148206                            $task_count ++; 
     207                             
    149208                            $the_list_html = ''; 
     209                             
    150210                            if ( $task->type != $last_type && $r['show_only_type'] == 'Everything' ) { 
     211                             
    151212                                $the_list_html .= '<tr class="spt_task_type_row' . ( $first_row === true ? ' spt_r_firstrow' : '' ) . '"><td colspan="' . $num_columns . '">'; 
     213                                 
    152214                                $the_list_html .= project_tasks_general::find_name_in_array ( $task_types, $task->type, 'id', 'plural', '[Unknown Type]'); 
     215                                 
    153216                                $the_list_html .= '</td></tr>'; 
     217                                 
    154218                                $last_type = $task->type; 
     219                                 
    155220                                $first_row = false; 
    156221                            } 
     222                             
    157223                            $taskstatus = project_tasks_general::find_name_in_array ( $all_status, $task->status ); 
     224                             
    158225                            $the_list_html .= '<tr class="spt_task_row spt_task_status_' . $taskstatus . ( $first_row === true ? ' spt_r_firstrow' : '' ) . '" taskid="' . $task->id . '">'; 
     226                             
    159227                            $first_row = false; 
     228                             
    160229                            foreach ( $r['columns'] as $column ) { 
     230                             
    161231                                switch ( $column ) { 
     232                                 
    162233                                    case 'title': $the_list_html .= '<td class="spt_title">' . $task->id . '. ' . $task->title . '</td>'; break; 
     234                                     
    163235                                    case 'targets':      
     236                                     
    164237                                        $targets_html = ''; 
     238                                         
    165239                                        $previous_target_type = ''; 
     240                                         
    166241                                        $target_count = 0; 
     242                                         
    167243                                        foreach ( $all_targets as $target ) { 
     244                                         
    168245                                            if ( $previous_target_type != $target['target_type'] ) { 
     246                                             
    169247                                                $target_count++; 
     248                                                 
    170249                                                if ( $task->{'target' . $target_count} ) $targets_html .= '<span title="' . $target['name'] . '">' . $target['shortening'] . '</span>'; 
     250                                                 
    171251                                                $previous_target_type  = $target['target_type']; 
     252                                             
    172253                                            } 
     254                                         
    173255                                        } 
    174256                                        $the_list_html .= '<td class="spt_targets">' . ( $targets_html == '' ? '&nbsp;' : $targets_html ) . '</td>'; 
     257                                         
    175258                                        break; 
     259                                         
    176260                                    case 'assigned_to': $the_list_html .= '<td>' . project_tasks_general::nbsp ( project_tasks_general::find_name_in_array ( $users, $task->assigned_to ), '- none -' ) . '</td>'; break; 
     261                                     
    177262                                    case 'progress':    $the_list_html .= '<td>' . project_tasks_general::nbsp ( $task->progress ) . '%</td>'; break; 
     263                                     
    178264                                    case 'status':  $the_list_html .= '<td>' . project_tasks_general::nbsp ( $taskstatus ) . '</td>'; break; 
     265                                     
    179266                                    case 'due_date':    $the_list_html .= '<td>' . project_tasks_general::nbsp (( $task->due_date != '0' ? date( 'd', $task->due_date ) . '/' .  date( 'm', $task->due_date ) . '/' . date( 'Y',  $task->due_date ) : '' ) ) . '</td>'; break;  
     267                                     
    180268                                    case 'creator': $the_list_html .= '<td>' . project_tasks_general::nbsp ( project_tasks_general::find_name_in_array ( $users, $task->creator ) ) . '</td>'; break; 
     269                                     
    181270                                    case 'priority':    $the_list_html .= '<td>' . project_tasks_general::nbsp ( $task->priority ) . '</td>'; break; 
    182                                      
    183271                                } 
    184272                            } 
     273                             
    185274                            $the_list_html .= '</tr>'; 
     275                             
    186276                            $the_list[ $task->id ] = array ( 'task' => $the_list_html, 'subtasks' => '' ); 
     277                             
    187278                            $this_list_ids .= $task->id . ','; 
    188279                        } 
     
    192283                        /*if ( $r['show_subtasks'] != '0' ) { 
    193284                            if ( count($this_list_ids) > 0 ) $this_list_ids = substr( $this_list_ids, 0, -1 ); 
    194                             $sub_tasks = $wpdb->get_results( 'SELECT title, id, parent_task, assigned_to from ' . $this->data->tasks_table_name . ' where parent_task in (' . $this_list_ids . ') ORDER BY parent_task ' ); 
     285                            $sub_tasks = $wpdb->get_results( 'SELECT title, id, parent_task, assigned_to from ' . $project_tasks->data->tasks_table_name . ' where parent_task in (' . $this_list_ids . ') ORDER BY parent_task ' ); 
    195286                            echo $this_list_ids; 
    196287                            var_dump($sub_tasks); 
    197288                            foreach ( $sub_tasks as $sub_task ) { 
    198289                                if ( isset( $the_list[ $sub_task->parent_task ] ) ) { 
    199                                     $the_list[ $sub_task->parent_task ]['subtasks'] .= '<span class="" taskid="' . $sub_task->id . '">' . $sub_task->title . ' (' . project_tasks_general::find_name_in_array ( $this->data->get_users (),  $sub_task->assigned_to ) . ')</span>'; 
     290                                    $the_list[ $sub_task->parent_task ]['subtasks'] .= '<span class="" taskid="' . $sub_task->id . '">' . $sub_task->title . ' (' . project_tasks_general::find_name_in_array ( $project_tasks->data->get_users (),  $sub_task->assigned_to ) . ')</span>'; 
    200291                                } 
    201292                            } 
     
    204295                         
    205296                        // loop thru the list and output it 
     297                         
    206298                        foreach ( $the_list as $list_item ) { 
     299                         
    207300                            echo $list_item['task']; 
     301                             
    208302                            // SUB TASKS IS NOT IMPLEMENTED YET 
    209303                            /*if ( $list_item['subtasks'] != '' ) { 
     
    211305                            }*/ 
    212306                        } 
     307                         
    213308                        ?> 
    214309                    </tbody> 
    215310                </table><?php 
     311                 
    216312                if ( $r['show_controls'] == '1' ) {?> 
     313                 
    217314                    <div class="spt_action_buttons"><?php 
     315                     
    218316                        $num_pages = ceil( $num_all_tasks / $r['num_tasks_per_page'] ); 
     317                         
    219318                        if ( $num_pages > 1 ) { 
     319                         
    220320                            echo '<div id="spt_list_pagination">'; 
     321                             
    221322                            for ( $ipage = 1; $ipage <= $num_pages; $ipage++ ) { 
     323                             
    222324                                echo '<span' . ($r['page_num'] == $ipage ? ' class="active"' : '' ) .' id="spt_list_page_' . $ipage . '">' . $ipage . '</span>'; 
    223                             } 
     325                                 
     326                            } 
     327                             
    224328                            echo '</div>'; 
    225329                        } ?> 
    226                         <span id="spt_add_new_task" class="spt_action_button">Add New Task</span> 
    227                         <span id="spt_refresh_list" class="spt_action_button">Refresh</span> 
     330                        <span id="spt_add_new_task" class="spt_action_button spt_button_primary">Add New Task</span> 
     331                        <span id="spt_refresh_list" class="spt_action_button">Refresh</span><!--spt_action_button --> 
    228332                        <div id="spt_action_alts"> 
    229333                            <div id="spt_action_altchecks"> 
     
    237341                                     
    238342                                        // display dropdown of task types 
     343                                         
    239344                                        foreach ( $task_types as $the_task_type ) { 
     345                                         
    240346                                            echo '<option value="' . $the_task_type['id'] . '"' . ( $r['show_only_type'] ==  $the_task_type['id'] ? ' selected="selected"' : '' ) . '>' .  $the_task_type['plural']  . '</option>'; 
    241347                                        }?> 
     
    250356            <script language="javascript">spt_number_of_items_in_list = <?php echo count($tasks)?>;</script><?php 
    251357        } 
    252     }  
    253      
    254 } //End Class 
     358         
     359    } //End Class 
     360}  
    255361 
    256362?> 
  • project-tasks/trunk/files/project-tasks.css

    r488592 r906495  
    1515.project_tasks_list *                           { color: #333 !important; } 
    1616.project_tasks_list table                       {  } 
    17 .project_tasks_list thead td                        { padding: 0px; height: 30px; color: #000; font-weight: bold !important; padding-left: 10px; border-bottom: 1px solid #999; border-left: 1px solid #eee; background-color: #eaeaea; font-size: 12px; } 
     17.project_tasks_list thead td                        { padding: 0px; padding-left: 10px !important; white-space: nowrap; height: 30px; color: #000; font-weight: bold !important; padding-left: 10px; border-bottom: 1px solid #999; border-left: 1px solid #eee; background-color: #eaeaea; font-size: 12px; } 
    1818.project_tasks_list tbody td                        { background-color: #f9f9f9; padding-left: 10px; color: #555 !important; font-size: 12px !important; border-left: 1px solid #fdfdfd; border-bottom: 1px solid #eee; white-space:nowrap; overflow: hidden;} 
    1919.project_tasks_list .spt_task_row td                { cursor:pointer; cursor:hand; height: 30px; } 
     
    7070#project_tasks_list .spt_targets span               { margin-right: 2px; } 
    7171 
    72 .spt_action_buttons                             { padding: 20px 10px 12px 10px !important; xheight: 20px !important; background-color: #fff; border-top: 1px solid #ddd; } 
    73 .spt_action_button                              { line-height: 15px; 
     72.spt_action_buttons                             { padding: 10px 10px 12px 10px !important; xheight: 20px !important; background-color: #fff; border-top: 1px solid #ddd; } 
     73/*.spt_action_button                                { line-height: 15px; 
    7474                                                  padding: 4px 10px !important; white-space: nowrap !important; background: url("/wp-admin/images/white-grad.png") repeat-x scroll left; text-shadow: 0 1px 0 #FFFFFF !important; border-color: #BBBBBB; 
    7575                                                  color: #000; -moz-box-sizing: content-box; border-radius: 11px 11px 11px 11px; border-style: solid; border-width: 1px; cursor: pointer; font-size: 11px !important; text-decoration: none; 
    76                                                   margin: 0; outline: 0 none; font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif; } 
     76                                                  margin: 0; outline: 0 none; font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif; }*/ 
     77 
     78.spt_action_button                              { background: none repeat scroll 0 0 #F7F7F7; border-color: #CCCCCC; box-shadow: 0 1px 0 #FFFFFF inset, 0 1px 0 rgba(0, 0, 0, 0.08); color: #555555; vertical-align: top; -moz-box-sizing: border-box; border-radius: 3px; border-style: solid; border-width: 1px; cursor: pointer; display: inline-block; font-size: 13px; height: 28px; ine-height: 26px; padding: 3px 10px 1px !important; text-decoration: none; white-space: nowrap; } 
     79     
     80.spt_action_button.spt_button_primary               { background: none repeat scroll 0 0 #2EA2CC; border-color: #0074A2; box-shadow: 0 1px 0 rgba(120, 200, 230, 0.5) inset, 0 1px 0 rgba(0, 0, 0, 0.15); color: #FFFFFF; text-decoration: none; } 
    7781                                                   
    7882.spt_action_button.disabled                     { color: #aaa; } 
     
    8084#wp-admin-bar-project_tasks_content  
    8185    .spt_action_buttons                         { background-color: #f9f9f9; } 
    82 #spt_action_alts                                { float: right; } 
     86#wp-admin-bar-project_tasks_content  
     87    .spt_action_button                          { line-height: 22px; }  
     88#spt_action_alts                                { float: right; margin-top: 10px; } 
    8389 
    8490#spt_action_altchecks,  #spt_action_altdrop         { height: 20px !important; float: right; position: relative; top: -10px; margin-left: 20px; } 
     
    149155 
    150156.spt_datespanner                                { position: absolute; top: 0px; height: 24px; border: 1px solid #000; xpadding-left: 2px; background-color: #fff; font-size: 14px; padding-left: 5px; } 
    151 .spt_datespanner span                           { position: relative; top: -2px; left: 0px;  padding: 0px 2px;} 
     157.spt_datespanner span                           { position: relative; top: -5px; left: 0px;  padding: 0px 2px;} 
    152158.spt_datespanner input[type=text]                   { border: 0px !important; position: relative; top: 0px; height: 20px !important; background: none !important; padding-left: 0px !important; } 
    153159.spt_datespanner input[type=text].spt_date_day      { width: 20px; left: 2px; } 
     
    156162.spt_secondfield .spt_datespanner                   { left: 70px; width: 100px; } 
    157163 
    158 #spt_edit_buttons                               { padding: 8px 30px 10px 10px; height: 22px; position: absolute; background-color: #f1f1f1; border-top: 1px solid #eaeaea; top: 452px; left: 0px; width: 550px; } 
     164#spt_edit_buttons                               { padding: 5px 30px 10px 10px; height: 22px; position: absolute; background-color: #f1f1f1; border-top: 1px solid #eaeaea; top: 452px; left: 0px; width: 550px; } 
    159165#spt_edit_buttons div#spt_status                    { position: absolute; left: 30px; font-size: 12px; width: 145px; top: 14px; overflow: hidden; font-weight: bold; } 
    160166#spt_edit_buttons span                          { float: right; margin-left: 10px; } 
     
    213219.spt_relations_field table .spt_row_T td            { background-color: #f7f6fe; } 
    214220.spt_relations_field table .spt_row_X td            { background-color: #fef6fd; } 
     221 
    215222 
    216223 
     
    250257#sptask_action_email_copy                       { margin-left: 50px; margin-right: 4px; } 
    251258*/ 
     259 
     260 
     261 
     262.spt_process_objects                            { list-style: none; position: relative; } 
     263 
     264.spt_process_objects a                          { text-decoration: none; color: #444; text-shadow: 0 1px 0 rgba(255,255,255,.5); } 
     265 
     266.spt_process_objects > li                       { position: absolute; z-index: 2; } 
     267 
     268.spt_process_objects > li.spt_deliverable           { xdisplay: none; }  
     269                                             /* transition: 0.1s; -moz-transition: 0.1s; -webkit-transition: 0.1s; -o-transition: 0.1s; }*/ 
     270/* 
     271.spt_process_objects > li.xspt_activity, 
     272.spt_process_objects > li.spt_deliverable:before        { box-shadow: 0px 2px 4px 0px rgba(0,0,0,0.2); -moz-box-shadow: 2px 2px 4px 2px #aaa; -webkit-box-shadow: 2px 2px 4px 2px #EEEEEE; } 
     273 
     274.spt_process_objects > li.spt_activity              { font-size: 10px; border-bottom: 1px solid #bbb; width: 120px; height: 80px; position: relative; border: 4px solid #c2e1f5; 
     275                                            background-color: #fbfbfb; background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fbfbfb), to(#EBEBEB)); background: -webkit-linear-gradient(top, #fbfbfb, #EBEBEB);  
     276                                            background: -moz-linear-gradient(top, #f8f8f8, #EBEBEB); background: -ms-linear-gradient(top, #fbfbfb, #EBEBEB); background: -o-linear-gradient(top, #fbfbfb, #EBEBEB); } 
     277 
     278.spt_process_objects > li.spt_activity:after, 
     279.spt_process_objects > li.spt_activity:before       { left: 100%; top: 50%; border: solid transparent; content: " "; height: 0px; width: 0px; position: absolute; pointer-events: none; }  
     280 
     281.spt_process_objects > li.spt_activity:after        { border-color: rgba(136, 183, 213, 0); border-left-color: #88b7d5; border-width: 40px; margin-top: -40px; }  
     282.spt_process_objects > li.spt_activity:before       { border-color: rgba(194, 225, 245, 0); border-left-color: #c2e1f5; border-width: 46px; margin-top: -46px; } 
     283*/ 
     284 
     285.spt_process_objects > li.spt_deliverable a         { display: table-cell; text-align: center; vertical-align: middle; width: 80px;padding-top: 32px; } 
     286 
     287.spt_process_objects > li.spt_deliverable a:before  { content: ''; display: block; width: 30px; height: 30px; border: 2px solid #000; position: relative; left: 23px;  
     288                                            background-color: #fbfbfb; background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#3867ff), to(#5179fa)); background: -webkit-linear-gradient(top, #3867ff, #5179fa);  
     289                                            background: -moz-linear-gradient(top, #3867ff, #5179fa); background: -ms-linear-gradient(top, #3867ff, #5179fa); background: -o-linear-gradient(top, #3867ff, #5179fa); } 
     290 
     291 
     292.spt_process_objects                            { background: #F1F1F1; } 
     293 
     294.spt_process_objects .spt_activity a                { padding: .7em 1em .7em 2em; position: relative;   
     295                                              background-color: #ddd; background-image: linear-gradient(to right, #F1F1F1, #ddd);  display: table-cell; vertical-align: middle; text-align: center; height: 85px;  width: 100px;  } 
     296 
     297.spt_process_objects .spt_activity a:hover          { background: #fff; } 
     298 
     299.spt_process_objects .spt_activity a::after, 
     300.spt_process_objects .spt_activity a::before            { border-bottom: 4em solid rgba(0, 0, 0, 0); border-left: 1.5em solid; border-top: 4em solid rgba(0, 0, 0, 0); content: ""; margin-top: -1.5em; position: absolute; right: -1.4em; top: 1.5em; } 
     301 
     302.spt_process_objects .spt_activity a::after         { z-index: 2; border-left-color: #ddd; } 
     303 
     304.spt_process_objects .spt_activity a::before            { border-left-color: #ccc;   right: -1.45em; z-index: 1; } 
     305 
     306.spt_process_objects .spt_activity a:hover::after       { border-left-color: #fff; } 
     307 
     308 
  • project-tasks/trunk/files/project-tasks.js

    r488592 r906495  
    55Project Tasks 
    66 
    7 Copyright (C) 2011 Klas Ehnemark (http://klasehnemark.com) 
     7Copyright (C) 2011-2014 Klas Ehnemark (http://klasehnemark.com) 
    88 
    99This program is free software; you can redistribute it and/or modify 
     
    2828 
    2929    mode : 'admin_view', 
     30     
    3031    post_id : 0, 
     32     
    3133    list_page : 1, 
     34     
    3235    open_task_id : 0, 
     36     
    3337    previous_task_id : 0, 
     38     
    3439    next_task_id : 0, 
     40     
    3541    task_list_has_loaded : false, 
    3642     
     43     
    3744    init: function () { 
    3845     
    3946        // init list if it appears on admin bar 
     47         
    4048        jQuery("#wp-admin-bar-project_tasks").bind("mouseenter", function() { 
     49         
    4150            project_tasks.get_post_id(); 
     51             
    4252            project_tasks.mode = 'admin_bar'; 
     53             
    4354            jQuery("#wp-admin-bar-project_tasks_content").removeClass('spt_hidden'); 
     55             
    4456            if ( project_tasks.task_list_has_loaded == false ) { 
     57             
    4558                project_tasks.task_list_has_loaded = true; 
     59                 
    4660                project_tasks.update_task_list(); 
     61                 
    4762            } 
    4863        }); 
    4964         
     65         
    5066        // init list if it appears on admin page 
     67         
    5168        project_tasks.init_task_list_actions(); 
    5269         
     70         
    5371        // if it is in adminbar, update number of tasks on this page  
     72         
    5473        if ( jQuery("#wp-admin-bar-project_tasks").length ) { 
     74         
    5575            project_tasks.get_post_id(); 
     76             
    5677            if ( project_tasks.post_id != '' ) { 
     78             
    5779                project_tasks.mode = 'admin_bar'; 
     80                 
    5881                project_tasks.ajax ( 
     82                 
    5983                    { action : 'get_number_page_tasks_ajax', post_id : project_tasks.post_id }, function ( data ) {  
     84                     
    6085                        jQuery("#spt_number_of_list_items_span").html(data); 
     86                         
    6187                        jQuery("#spt_number_of_list_items_span").removeClass('spt_hidden'); 
     88                         
    6289                    } 
    6390                ); 
    6491            } else { 
     92             
    6593                jQuery("#spt_number_of_list_items_span").remove(); 
     94                 
    6695            } 
    6796        } 
     
    6998    }, 
    7099     
     100     
    71101    // get current page id if there is one 
     102     
    72103    get_post_id : function () { 
     104     
    73105        if ( jQuery("#spt_post_id").length ) { 
     106         
    74107            project_tasks.post_id = jQuery("#spt_post_id").html(); 
     108             
    75109            //alert(project_tasks.post_id); 
     110             
    76111            jQuery("#spt_post_id").remove(); 
    77         } 
    78     }, 
     112             
     113        } 
     114    }, 
     115 
    79116 
    80117    update_task_list : function () { 
    81118     
    82119        var load_list = true; 
     120         
    83121        if ( project_tasks.mode == 'admin_bar' ) { 
     122         
    84123            if ( project_tasks.post_id != '' ) { 
     124             
    85125                post_id = project_tasks.post_id; 
     126                 
    86127                jQuery("#wp-admin-bar-project_tasks_content").html('<a href="javascript:void(0);">Loading...</a>'); 
     128                 
    87129            } else { 
     130             
    88131                load_list = false; 
     132                 
    89133                jQuery("#wp-admin-bar-project_tasks_content").html('<a href="/wp-admin/admin.php?page=project_tasks">Goto Project Tasks to view all Project Tasks</a>'); 
     134             
    90135            } 
    91136        } else { 
     137         
    92138            jQuery("#project_tasks_content").html('Loading...'); 
     139             
    93140            post_id = 0; 
    94141        } 
    95142     
    96143        if ( load_list == true ) { 
     144         
    97145            project_tasks.ajax ( 
     146             
    98147                { action : 'render_task_list_ajax', post_id: post_id, page_num: project_tasks.list_page }, function ( data ) {  
     148                 
    99149                    if ( project_tasks.mode == 'admin_view' ) { 
     150                     
    100151                        jQuery("#project_tasks_content").html(data); 
     152                         
    101153                    } else if ( project_tasks.mode == 'admin_bar' ) { 
     154                     
    102155                        jQuery("#wp-admin-bar-project_tasks_content").html(data); 
     156                         
    103157                        project_tasks.task_list_has_loaded = true; 
    104                         if ( spt_number_of_items_in_list ) jQuery("#spt_number_of_list_items_span").text(spt_number_of_items_in_list);               
     158                         
     159                        if ( spt_number_of_items_in_list ) jQuery("#spt_number_of_list_items_span").text(spt_number_of_items_in_list); 
     160                         
    105161                    } 
     162                     
    106163                    project_tasks.init_task_list_actions (); 
    107164                } 
     
    110167    }, 
    111168     
     169     
    112170    init_task_list_actions : function () { 
    113171     
    114172        jQuery("#project_tasks_list").find("tbody").find(".spt_task_row").find("td").bind("click", function() { 
     173         
    115174            jQuery("#wp-admin-bar-project_tasks").removeClass( 'hover' ); 
     175             
    116176            jQuery("#wp-admin-bar-project_tasks_content").removeClass( 'hover' ); 
    117             project_tasks.display_task_window ( jQuery(this).parent().attr('taskid') ); 
     177             
     178            project_tasks.display_task_window ( jQuery(this).parent().attr('taskid'), 0 ); 
     179             
    118180        }); 
    119181         
    120         jQuery("#spt_add_new_task").bind("click", function (e) { project_tasks.display_task_window (0); }); 
     182        jQuery("#spt_add_new_task").bind("click", function (e) { project_tasks.display_task_window (0, 0); }); 
     183         
    121184        jQuery("#spt_refresh_list").bind("click", function (e) { project_tasks.update_task_list(); }); 
     185         
    122186        jQuery("#show_onlye_type").change( function() { project_tasks.change_show_only('type', jQuery(this).val());}); 
     187         
    123188        jQuery("#show_only_mine").bind("click", function (e) { project_tasks.change_show_only ('mine', jQuery('#show_only_mine:checked').val() == '1' ? '1' : '0' );}); 
     189         
    124190        jQuery("#show_only_open").bind("click", function (e) { project_tasks.change_show_only ('open', jQuery('#show_only_open:checked').val() == '1' ? '1' : '0' );}); 
     191         
    125192        jQuery("#spt_list_pagination span").bind("click", function(e) {  
     193         
    126194            if ( !jQuery(this).hasClass('active')) {  
     195             
    127196                project_tasks.goto_list_page( jQuery(this).attr('id').replace('spt_list_page_', '') ); 
     197                 
    128198            }  
    129199        }); 
    130200    }, 
    131201     
     202     
    132203    goto_list_page : function ( page_num_el ) { 
     204     
    133205        project_tasks.list_page = page_num_el; 
     206         
    134207        project_tasks.update_task_list(); 
    135208    }, 
    136209     
     210     
    137211    change_show_only :  function ( show_only_type, show_only_value ) { 
    138212     
    139213        // when user clicks on task list settings, change settings and reload list 
     214         
    140215        project_tasks.set_cookie ( 'show_only_' + show_only_type, show_only_value ); 
     216         
    141217        project_tasks.update_task_list(); 
    142218    }, 
    143219     
     220     
    144221    set_cookie : function ( name, value ) { 
    145222     
    146223        // set cookie, expires in one year 
     224         
    147225        var date = new Date(); 
     226         
    148227        date.setTime(date.getTime()+(365*24*60*60*1000)); 
     228         
    149229        var expires = "; expires="+date.toGMTString(); 
     230         
    150231        document.cookie = name+"="+value+expires+"; path=/";     
    151232    }, 
    152233     
     234     
    153235    display_task_window : function ( taskid, parent_task ) { 
    154236     
    155237        // hide the task list and open the task form in a thickbox window 
     238         
    156239        project_tasks.open_task_id = taskid; 
     240         
    157241        jQuery("#wp-admin-bar-project_tasks_content").addClass('spt_hidden'); 
     242         
    158243        var newURL = ajaxurl + '?action=render_task_form_ajax&height=456&width=560&post_id=' + project_tasks.post_id + '&task_id=' + taskid + '&parent_task=' + parent_task; 
    159         if ( taskid != 0 ) tb_show("Edit Task #" + taskid, newURL);  
     244 
     245        if ( taskid != 0 ) tb_show("Edit Task #" + taskid, newURL); 
     246         
    160247        else tb_show("New Task", newURL);  
    161248    }, 
    162249     
     250     
    163251    task_window_is_loaded : function () {  
    164252         
    165253        project_tasks.open_task_id = jQuery("#sptask_id").val(); 
    166254         
     255         
    167256        // when task form is loaded, bind actions to events in the form 
     257         
    168258        jQuery("#spt_save_task").bind("click", function() { project_tasks.save_task_window(); }); 
     259         
    169260        jQuery("#spt_cancel_task").bind("click", function() { project_tasks.close_task(); }); 
     261         
    170262        jQuery('#TB_window').bind("unload", function() { project_tasks.reset_list(); }); 
     263         
    171264        jQuery("#sptask_content_button_1").bind ("click", function() { project_tasks.switch_tab( 1 ); }); 
     265         
    172266        jQuery("#sptask_content_button_2").bind( "click", function() { project_tasks.switch_tab( 2 ); }); 
     267         
    173268        jQuery("#sptask_content_button_3").bind( "click", function() { project_tasks.switch_tab( 3 ); }); 
     269         
    174270        jQuery("#sptask_content_button_4").bind( "click", function() { project_tasks.switch_tab( 4 ); }); 
     271         
    175272        jQuery("#sptask_content_button_5").bind( "click", function() { project_tasks.switch_tab( 5 ); }); 
     273         
    176274        jQuery("#spt_complete_button").bind( "click", function() { project_tasks.set_progress_to_complete(); }); 
     275         
    177276        jQuery(".spt_datespanner").find('input').bind( "click", function() { project_tasks.focus_and_highlight_el ( this ); }); 
     277         
    178278        jQuery(".spt_datespanner").find('input').keyup( function(event) { if ( event.keyCode != 9 ) project_tasks.validate_number_field ( event.target, false, true ); }); 
    179         jQuery(".spt_datespanner").find('input').bind('focusout', function(event) { project_tasks.validate_number_field ( this, true, false ); })  
     279         
     280        jQuery(".spt_datespanner").find('input').bind('focusout', function(event) { project_tasks.validate_number_field ( this, true, false ); }); 
     281         
    180282        jQuery("#sptask_progress").bind( "click", function() { project_tasks.focus_and_highlight_el ( this ); }); 
     283         
    181284        jQuery("#sptask_progress").keyup( function(event) { if ( event.keyCode != 9 ) project_tasks.validate_number_field ( event.target, false, true ); }); 
     285         
    182286        jQuery("#sptask_progress").bind('focusout', function(event) { project_tasks.validate_number_field ( this, true, false ); });  
     287         
    183288        jQuery("#spt_subtasks_info").bind("click", function() { project_tasks.switch_tab( 4 ) }); 
    184289 
    185290        // lock certain input fields 
     291         
    186292        jQuery("#sptask_tasktype.spt_hidden ~ .spt_read_only_field .spt_change_read_only").bind( "click", function() { project_tasks.view_read_only_select_field ( "#sptask_tasktype" ); }); 
     293         
    187294        jQuery("#sptask_taskassignedto.spt_hidden ~ .spt_read_only_field .spt_change_read_only").bind( "click", function() { project_tasks.view_read_only_select_field ( "#sptask_taskassignedto" ); }); 
     295         
    188296        jQuery("#sptask_status.spt_hidden ~ .spt_read_only_field .spt_change_read_only").bind( "click", function() { project_tasks.view_read_only_select_field ( "#sptask_status" ); }); 
     297         
    189298        jQuery("#sptask_priority.spt_hidden ~ .spt_read_only_field .spt_change_read_only").bind( "click", function() { project_tasks.view_read_only_select_field ( "#sptask_priority" ); }); 
    190299         
     300         
    191301        // dispable sub tasks if this is a new task 
     302         
    192303        if ( project_tasks.open_task_id == '0' ) jQuery("#sptask_content_button_4").addClass('spt_hidden'); 
    193304         
     305         
    194306        // find next and previous task in list 
     307         
    195308        task_tr = jQuery('#project_tasks_list [taskid="' + project_tasks.open_task_id + '"]'); 
     309         
    196310        jQuery(task_tr).parent().children().removeClass('spt_list_selected'); 
     311         
    197312        if (task_tr) { 
     313         
    198314            jQuery(task_tr).addClass('spt_list_selected'); 
     315             
    199316            project_tasks.previous_task_id = jQuery(task_tr).prev().attr('taskid'); 
     317             
    200318            project_tasks.next_task_id = jQuery(task_tr).next().attr('taskid'); 
     319             
    201320            if ( project_tasks.previous_task_id && project_tasks.previous_task_id != 0 && project_tasks.previous_task_id != 'undefined' ) { 
     321             
    202322                jQuery('#spt_previous_task').removeClass( 'spt_hidden' ); 
     323                 
    203324                jQuery("#spt_previous_task").bind ("click", function() { project_tasks.close_and_open_new_task ( project_tasks.previous_task_id, 0 ); }); 
     325                 
    204326            } 
     327             
    205328            if ( project_tasks.next_task_id && project_tasks.next_task_id != 0 && project_tasks.next_task_id != 'undefined' ) { 
     329             
    206330                jQuery('#spt_next_task').removeClass( 'spt_hidden' ); 
     331                 
    207332                jQuery("#spt_next_task").bind ("click", function() { project_tasks.close_and_open_new_task ( project_tasks.next_task_id, 0 ); }); 
     333                 
    208334            } 
    209335        } else { 
     336         
    210337            project_tasks.previous_task_id = 0; 
     338             
    211339            project_tasks.next_task_id = 0; 
    212340        } 
     341         
    213342        // SUB TASKS IS NOT IMPLEMENTED YET 
    214343        // project_tasks.switch_tab( 4 ); 
     
    216345     
    217346    reset_task_window : function () { 
     347     
    218348        project_tasks.open_task_id = '0'; 
     349         
    219350        project_tasks.action_panel_has_loaded = false; 
     351         
    220352        jQuery("#spt_save_task").unbind("click"); 
     353         
    221354        jQuery("#spt_cancel_task").unbind("click"); 
     355         
    222356        //jQuery('#TB_window').trigger("unload").unbind().remove(); 
     357         
    223358        jQuery("#sptask_content_button_1").unbind("click"); 
     359         
    224360        jQuery("#sptask_content_button_2").unbind("click"); 
     361         
    225362        jQuery("#sptask_content_button_3").unbind("click"); 
     363         
    226364        jQuery("#sptask_content_button_4").unbind("click"); 
     365         
    227366        jQuery("#sptask_content_button_5").unbind("click"); 
     367         
    228368        jQuery("#spt_complete_button").unbind("click"); 
     369         
    229370        jQuery(".spt_datespanner").find('input').unbind("click"); 
     371         
    230372        jQuery(".spt_datespanner").find('input').unbind("keyup"); 
     373         
    231374        jQuery(".spt_datespanner").find('input').unbind("focusout"); 
     375         
    232376        jQuery("#sptask_progress").unbind("click"); 
     377         
    233378        jQuery("#sptask_progress").unbind("keyup"); 
     379         
    234380        jQuery("#sptask_progress").unbind("focusout"); 
     381         
    235382        jQuery("#spt_subtasks_info").unbind("click"); 
     383         
    236384        jQuery("#sptask_tasktype.spt_hidden ~ .spt_read_only_field .spt_change_read_only").unbind("click"); 
     385         
    237386        jQuery("#sptask_taskassignedto.spt_hidden ~ .spt_read_only_field .spt_change_read_only").unbind("click"); 
     387         
    238388        jQuery("#sptask_status.spt_hidden ~ .spt_read_only_field .spt_change_read_only").unbind("click"); 
     389         
    239390        jQuery("#sptask_priority.spt_hidden ~ .spt_read_only_field .spt_change_read_only").unbind("click"); 
    240     }, 
     391         
     392    }, 
     393 
    241394 
    242395    close_task : function () { 
     396     
    243397        project_tasks.reset_task_window (); 
     398         
    244399        tb_remove(); 
    245400    }, 
    246401     
     402     
    247403    reset_list : function () { 
     404     
    248405        jQuery('#project_tasks_list [taskid="' + project_tasks.open_task_id + '"]').parent().children().removeClass('spt_list_selected'); 
    249406    }, 
    250407     
     408     
    251409    close_and_open_new_task : function ( task_id, parent_task ) { 
     410     
    252411        project_tasks.reset_task_window (); 
     412         
    253413        jQuery("#TB_imageOff").unbind("click"); 
     414         
    254415        jQuery("#TB_closeWindowButton").unbind("click"); 
     416         
    255417        jQuery('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove(); 
     418         
    256419        jQuery("#TB_load").remove(); 
     420         
    257421        if (typeof document.body.style.maxHeight == "undefined") {//if IE 6 
     422         
    258423            jQuery("body","html").css({height: "auto", width: "auto"}); 
     424             
    259425            jQuery("html").css("overflow",""); 
    260426        } 
     427         
    261428        document.onkeydown = ""; 
     429         
    262430        document.onkeyup = ""; 
     431         
    263432        project_tasks.display_task_window ( task_id, parent_task ); 
    264433    }, 
     
    266435      
    267436    focus_and_highlight_el : function ( el ) { 
     437     
    268438        jQuery( el ).focus(); 
     439         
    269440        jQuery( el ).select(); 
    270441    }, 
    271442     
     443     
    272444    view_read_only_select_field : function ( select_el_str ) { 
     445     
    273446        jQuery( select_el_str + " ~ .spt_read_only_field" ).addClass ( 'spt_hidden' ); 
     447         
    274448        jQuery( select_el_str ).removeClass ( 'spt_hidden' ); 
     449         
    275450        jQuery( select_el_str ).focus(); 
    276     }, 
     451         
     452    }, 
     453      
    277454      
    278455    validate_number_field : function ( number_field, force_validate_number_range, can_refocus ) { 
    279456     
     457     
    280458        // only keep numbers in the input that have had a key up 
     459         
    281460        jQuery( number_field ).val( project_tasks.only_keep_numbers_in_string ( jQuery( number_field ).val() )); 
    282461         
    283462        switch (jQuery( number_field ).attr('class')) { 
     463         
    284464            case 'spt_date_day': 
     465             
    285466                if ( jQuery( number_field ).val().length >= 2 || force_validate_number_range == true ) { 
     467                 
    286468                    jQuery( number_field ).val( project_tasks.only_keep_numbers_in_range ( jQuery( number_field ).val(), 0, 31, 'DD' )); 
     469                     
    287470                    if ( can_refocus == true ) project_tasks.focus_and_highlight_el (jQuery('.spt_date_month')); 
    288                 }; break; 
     471                     
     472                };  
     473                 
     474                break; 
     475                 
     476                 
    289477            case 'spt_date_month': 
     478             
    290479                if ( jQuery( number_field ).val().length >= 2 || force_validate_number_range == true ) { 
     480                 
    291481                    jQuery( number_field ).val( project_tasks.only_keep_numbers_in_range ( jQuery( number_field ).val(), 0, 12, 'MM' )); 
     482                     
    292483                    if ( can_refocus == true ) project_tasks.focus_and_highlight_el (jQuery('.spt_date_year')); 
    293                 }; break; 
     484                     
     485                };  
     486                 
     487                break; 
     488                 
     489                 
    294490            case 'spt_date_year': 
     491             
    295492                if ( jQuery( number_field ).val().length >= 4 || force_validate_number_range == true ) { 
     493                 
    296494                    jQuery( number_field ).val( project_tasks.only_keep_numbers_in_range ( jQuery( number_field ).val(), 2011, 2016, 'YYYY' )); 
     495                     
    297496                    if ( can_refocus == true ) project_tasks.focus_and_highlight_el (jQuery('#sptask_notes')); 
    298                 }; break; 
     497                     
     498                };  
     499                 
     500                break; 
     501                 
     502                 
    299503            case 'spt_progress': 
     504             
    300505                if ( jQuery( number_field ).val().length >= 3 || force_validate_number_range == true ) { 
     506                 
    301507                    jQuery( number_field ).val( project_tasks.only_keep_numbers_in_range ( jQuery( number_field ).val(), 0, 100, '0' )); 
     508                     
    302509                    if ( can_refocus == true ) project_tasks.focus_and_highlight_el (jQuery('.spt_date_day')); 
    303                 }; break;            
    304              
    305         } 
    306     }, 
     510                     
     511                };  
     512                 
     513                break;   
     514        } 
     515    }, 
     516       
    307517       
    308518    only_keep_numbers_in_string : function ( string_with_numbers ) { 
     519     
    309520        var new_string_with_numbers = ''; 
     521         
    310522        var i = string_with_numbers.length; 
     523         
    311524        while ( i-- ) { if ( parseInt( string_with_numbers[i] ) == string_with_numbers[i] ) new_string_with_numbers = string_with_numbers[i] + new_string_with_numbers; } 
     525         
    312526        return new_string_with_numbers; 
    313527    }, 
    314528     
     529     
    315530    only_keep_numbers_in_range : function ( number_in_range, low_number, high_number, return_if_offside ) { 
     531     
    316532        if ( parseInt( number_in_range ) >= low_number && parseInt( number_in_range ) <= high_number ) return number_in_range; 
     533         
    317534        else return return_if_offside; 
    318535    }, 
     536       
    319537       
    320538     switch_tab : function ( to_tab ) { 
     
    322540        // set new tab and tab window to active an old ones not active 
    323541        jQuery('.sptask_content_button').removeClass('active'); 
     542         
    324543        jQuery('#sptask_content_button_' + to_tab ).addClass('active'); 
     544         
    325545        jQuery('.sptask_edit_page').removeClass('active'); 
     546         
    326547        jQuery('#sptask_edit_page_' + to_tab ).addClass('active'); 
     548         
    327549        switch ( to_tab ) { 
     550         
    328551            case 2: project_tasks.load_targets (); break; 
     552             
    329553            case 4: project_tasks.load_subtasks (); break;  
    330554        } 
    331555     }, 
    332556      
     557      
    333558     load_targets : function () { 
     559      
    334560        targets_field = jQuery('#spt_relations_field'); 
     561         
    335562        if ( jQuery(targets_field).html() == 'Loading' ) { 
     563         
    336564            jQuery(targets_field).html('Loading...'); 
     565             
    337566            project_tasks.ajax ( 
     567             
    338568                { action: 'render_task_form_targets_ajax', task_id: project_tasks.open_task_id, post_id: project_tasks.post_id }, 
     569                 
    339570                function ( data ) { jQuery(targets_field).html(data); } 
    340571            ); 
     
    342573     }, 
    343574      
     575      
    344576     load_subtasks : function () { 
     577      
    345578        subtask_field = jQuery('#spt_relations_field'); 
     579         
    346580        if ( jQuery(subtask_field).html() == 'Loading' ) { 
     581         
    347582            jQuery(subtask_field).html('Loading...'); 
     583             
    348584            project_tasks.ajax ( 
     585             
    349586                { action: 'render_task_form_subtasks_ajax', task_id: project_tasks.open_task_id }, 
     587                 
    350588                function ( data ) {  
     589                 
    351590                    jQuery(subtask_field).html(data);  
     591                     
    352592                    jQuery("#spt_delete_subtask_button").addClass('disabled'); 
     593                     
    353594                    jQuery("#spt_edit_subtask_button").addClass('disabled'); 
     595                     
    354596                    jQuery("#spt_add_new_subtask_button").bind('click', function() {  
     597                     
    355598                        project_tasks.close_and_open_new_task ( 0, project_tasks.open_task_id ); 
    356599                    }); 
     
    364607      
    365608        // set progress to 100% and change status to closed 
     609         
    366610        jQuery("#sptask_progress").val('100'); 
     611         
    367612        project_tasks.view_read_only_select_field ( "#sptask_status" ); 
     613         
    368614     }, 
    369615      
    370616     ajax : function ( data, fn_success, fn_error ) { 
     617      
    371618        jQuery.ajax({ 
     619         
    372620            type: "POST", url: ajaxurl, dataType: 'html', data: data, context: document.body, 
     621             
    373622            success: function( data) { fn_success ( data ); }, 
     623             
    374624            error: function ( jqXHR, textStatus, errorThrown )  { if ( fn_error ) { fn_error(); } else { alert(textStatus + ' ' + errorThrown ); }} 
    375625        });       
     
    377627      
    378628     toggle_buttons_active : function ( doActive ) { 
     629      
    379630        if ( doActive == true ) { 
     631         
    380632            jQuery("#spt_save_task").attr("disabled", ""); 
     633             
    381634            jQuery("#spt_save_task").removeClass("disabled"); 
     635             
    382636            jQuery("#spt_cancel_task").attr("disabled", "");  
    383             jQuery("#spt_save_task").removeClass("disabled");        
     637             
     638            jQuery("#spt_save_task").removeClass("disabled");  
     639             
    384640        } else { 
     641         
    385642            jQuery("#spt_save_task").attr("disabled", "disabled"); 
     643             
    386644            jQuery("#spt_save_task").addClass("disabled"); 
     645             
    387646            jQuery("#spt_cancel_task").attr("disabled", "disabled");  
     647             
    388648            jQuery("#spt_save_task").addClass("disabled"); 
     649             
    389650        } 
    390651     }, 
     
    394655        data_ok = false; 
    395656     
     657     
    396658        // disable save and cancel buttons 
    397659        project_tasks.toggle_buttons_active( false ); 
     660 
    398661 
    399662        // store data in a object 
    400663        savedata = {  
    401664            action              : 'save_task_form_ajax',  
     665             
    402666            task_id                 : jQuery("input[name=sptask_id]").val(),  
     667             
    403668            parent_task         : jQuery("input[name=sptparent_task_id]").val(), 
     669             
    404670            task_title          : jQuery("input[name=sptask_title]").val(),  
     671             
    405672            task_tasktype           : jQuery("select[name=sptask_tasktype]").val(),  
     673             
    406674            task_taskassignedto     : jQuery("select[name=sptask_taskassignedto]").val(),  
    407             task_description        : jQuery("textarea[name=sptask_description]").val(),  
     675             
     676            task_description        : jQuery("textarea[name=sptask_description]").val(), 
     677             
    408678            task_relation           : jQuery("select[name=sptask_relation]").val(),  
     679             
    409680            task_progress           : jQuery("input[name=sptask_progress]").val(),  
     681             
    410682            task_duedate            : jQuery("#sptask_duedate_day").val() + '-' + jQuery("#sptask_duedate_month").val() + '-' + jQuery("#sptask_duedate_year").val(),  
     683             
    411684            task_notes          : jQuery("textarea[name=sptask_notes]").val(), 
     685             
    412686            task_priority           : jQuery("select[name=sptask_priority]").val(), 
     687             
    413688            task_status         : jQuery("select[name=sptask_status]").val() 
     689             
    414690        }; 
    415691         
    416692        if ( savedata.task_title == '' ) { 
     693         
    417694            alert("Title-field cannot be emtpy."); 
     695             
    418696            project_tasks.toggle_buttons_active( true ); 
     697             
    419698        } else { 
    420699 
    421700 
    422701            // if target window is not loaded, set ignore targets flag into savedata-object 
     702             
    423703            subtask_field = jQuery('#spt_relations_field'); 
     704             
    424705            if ( ( jQuery(subtask_field).html() == 'Loading' || jQuery(subtask_field).html() == 'Loading...' ) && savedata.task_id != '0' ) { 
     706             
    425707                savedata.ignore_targets = 1; 
     708                 
    426709                data_ok = true; 
    427710                 
     711                 
    428712            } else { 
    429713 
    430714                // get info from the targets list 
     715                 
    431716                task_has_target = false; 
     717                 
    432718                savedata.num_targets = jQuery("#spt_num_target").val(); 
     719                 
    433720                for (itarget = 1; itarget <= savedata.num_targets; itarget++) { 
     721                 
    434722                    target_type = jQuery("input[name=spt_target_" + itarget + "_type]").val(); 
     723                     
    435724                    target_id = jQuery("input[name=spt_target_" + itarget + "_id]").val(); 
     725                     
    436726                    target_name = jQuery("input[name=spt_target_" + itarget + "_name]").val(); 
     727                     
    437728                    target_selected = jQuery("#spt_target_" + itarget + "_selected:checked").val(); 
     729                     
    438730                    if ( !target_selected ) target_selected = 0; 
     731                     
    439732                    if ( target_selected != 0 ) task_has_target = true; 
     733                     
    440734                    eval('savedata.spt_target_' + itarget + '_type = target_type'); 
     735                     
    441736                    eval('savedata.spt_target_' + itarget + '_id = target_id'); 
     737                     
    442738                    eval('savedata.spt_target_' + itarget + '_name = target_name'); 
     739                     
    443740                    eval('savedata.spt_target_' + itarget + '_selected = target_selected'); 
    444                 }            
     741                     
     742                }        
     743                 
    445744                if ( task_has_target == false && savedata.task_id == '0' ) { 
     745                 
    446746                    project_tasks.switch_tab( 2 ); 
     747                     
    447748                    if (confirm("You have'nt connected this task to a target. Are you sure about this? \n\nWithout connecting the task to a target it might be hard to know what to do."))  
     749                     
    448750                        data_ok = true; 
    449                 } else { data_ok = true; } 
     751                         
     752                } else {  
     753                 
     754                    data_ok = true;  
     755                     
     756                } 
    450757            }  
    451758             
    452759            if ( data_ok == true ) { 
     760             
    453761                project_tasks.ajax ( 
     762                 
    454763                    savedata, 
     764                     
    455765                    function ( data ) {  
     766                     
    456767                        if ( data != 'OK' ) {  
     768                         
    457769                            alert ( 'The task could not be saved!\n\n' + data); 
     770                             
    458771                            project_tasks.toggle_buttons_active( true ); 
    459                         } else { tb_remove(); project_tasks.update_task_list(); } 
     772                             
     773                        } else {  
     774                         
     775                            tb_remove();  
     776                             
     777                            project_tasks.update_task_list();  
     778                             
     779                        } 
    460780                    } 
    461                 );               
     781                ); 
     782                 
    462783            } else { 
     784             
    463785                project_tasks.toggle_buttons_active( true ); 
    464786            } 
  • project-tasks/trunk/project-tasks.php

    r527949 r906495  
    55Description: A complete project task management system, perfect for when developing a Wordpress theme as a team. Tasks can be connected to pages, posts, post_types, plugins, templates and custom tasks, and accessed within the Wordpress Bar and Wordpress Admin. It also has a simple process-based information collecting system. 
    66Author: Klas Ehnemark 
    7 Version: 0.9.1 
     7Version: 0.9.2 
    88Author URI: http://klasehnemark.com 
    99 
    10 Copyright (C) 2011 Klas Ehnemark (http://klasehnemark.com) 
     10Copyright (C) 2011-2014 Klas Ehnemark (http://klasehnemark.com) 
    1111 
    1212This program is free software; you can redistribute it and/or modify 
     
    2828 
    2929require_once("files/project-tasks-admin-bar.php"); 
     30 
    3031require_once("files/project-tasks-admin.php"); 
     32 
    3133require_once("files/project-tasks-ajax.php"); 
     34 
    3235require_once("files/project-tasks-data.php"); 
     36 
    3337require_once("files/project-tasks-form.php"); 
     38 
    3439require_once("files/project-tasks-general.php"); 
     40 
    3541require_once("files/project-tasks-list.php"); 
    3642 
     43// require_once("files/project-tasks-process.php"); 
    3744 
    38 add_action('activated_plugin','save_error'); 
    39 function save_error(){ 
    40     update_option('plugin_error',  ob_get_contents()); 
     45 
     46add_action('activated_plugin','save_project_task_error'); 
     47 
     48function save_project_task_error(){ 
     49 
     50    update_option('project_tasks_plugin_error',  ob_get_contents()); 
    4151} 
    42 update_option('plugin_error',  ''); 
     52update_option('project_tasks_plugin_error',  ''); 
    4353 
    4454 
     
    4858     
    4959        public $admin_bar; 
     60         
    5061        public $admin; 
     62         
    5163        public $ajax; 
     64         
    5265        public $data; 
    53         //public $form; 
    54         //public $list; 
     66         
    5567 
    5668        //////////////////////////////////////////////////////////////////////////////// 
     
    6678            // start initializing 
    6779            /////////////////////////////////////////////////////// 
     80             
    6881            $this->admin_bar    = new project_tasks_admin_bar (); 
     82             
    6983            $this->admin        = new project_tasks_admin (); 
     84             
    7085            $this->ajax         = new project_tasks_ajax (); 
     86             
    7187            $this->data         = new project_tasks_data (); 
    7288 
     
    7692            /////////////////////////////////////////////////////// 
    7793             
    78             register_activation_hook (__FILE__, array(&$this, 'on_activate_plugin')); 
    79             register_deactivation_hook ( __FILE__, array(&$this, 'on_deactivate_plugin')); 
    80             register_uninstall_hook ( __FILE__, 'project_tasks::on_uninstall_plugin'); 
     94            register_activation_hook    ( __FILE__, array(&$this, 'on_activate_plugin')); 
     95             
     96            register_deactivation_hook  ( __FILE__, array(&$this, 'on_deactivate_plugin')); 
     97             
     98            register_uninstall_hook         ( __FILE__, 'project_tasks::on_uninstall_plugin'); 
    8199 
    82              
    83100        } 
    84101         
     
    91108         
    92109        public function on_activate_plugin() { 
     110         
    93111            $this->data->update_database (); 
    94112        } 
    95113         
    96114        public function on_deactivate_plugin() { 
     115         
    97116            // leave data if user deactivates plugin 
    98117        } 
    99118         
    100119        public static function on_uninstall_plugin() { 
     120         
    101121            project_tasks_data::delete_database (); 
    102122        }    
     123         
     124         
     125        ////////////////////////////////////////////////////////////////////////////// 
     126        // 
     127        // DEBUG 
     128        // 
     129        //////////////////////////////////////////////////////////////////////////////       
     130     
     131        public static function debug ( $what, $die = false ) { 
     132         
     133            if ( $what == 'mem' ) $what = memory_get_peak_usage()/1000000; 
     134         
     135            $output = '<pre>' . print_r ( $what, true ) . '</pre>'; 
     136             
     137            if ( $die === true ) wp_die ( $output ); 
     138            else echo $output; 
     139         
     140        } 
    103141 
    104142         
    105     }  
    106      
    107 } //End Class 
     143    } //End Class 
     144} 
    108145 
    109146 
    110147if (class_exists("project_tasks")) { $project_tasks = new project_tasks(); } 
    111 echo get_option('plugin_error'); 
     148 
     149echo get_option('project_tasks_plugin_error'); 
    112150 
    113151?> 
Note: See TracChangeset for help on using the changeset viewer.