Plugin Directory

Changeset 1172885


Ignore:
Timestamp:
06/02/2015 03:35:23 PM (11 years ago)
Author:
expresscurate
Message:

new version v2.1.0 with changes:

  • New Feature: Social Widget for Social Media Promotion
  • Miscellaneous bug fixes and improvements.
Location:
expresscurate/trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • expresscurate/trunk/ExpressCurate.php

    r1165793 r1172885  
    55  Plugin URI: http://www.expresscurate.com/products
    66  Description: ExpressCurate plugin is a content curation tool for WordPress. It enables you to create and publish high quality content within minutes.
    7   Version: 2.0.16
     7  Version: 2.1.0
    88  Author: ExpressCurate
    99  Author URI: http://www.expresscurate.com
  • expresscurate/trunk/ExpressCurate_Actions.php

    r1165793 r1172885  
    304304        }
    305305        array_push($buttons, 'addKeyword');
    306         array_push($buttons, 'clearContent');
     306        if (get_option('expresscurate_social_publishing', '') == "on" && strlen(get_option('expresscurate_buffer_access_token')) > 2){
     307            array_push($buttons, 'addSocialPost');
     308        }
    307309        return $buttons;
    308310    }
     
    726728            update_post_meta($post_id, '_expresscurate_advanced_seo_social_desc', esc_attr($expresscurate_advanced_seo_social_desc));
    727729
     730            //social posts
     731          //  $expresscurate_social_post_messages = isset($_POST['expresscurate_social_post_messages']) ? $_POST['expresscurate_social_post_messages'] : '';
     732
     733           // update_post_meta($post_id, '_expresscurate_social_post_messages', esc_attr($expresscurate_social_post_messages));
     734
    728735            //post analysis notification
    729736            $expresscurate_post_analysis_notification = isset($_POST['expresscurate_post_analysis_notification']) ? $_POST['expresscurate_post_analysis_notification'] : '';
     
    963970        //$postStatus = get_post_status($post_id);
    964971
    965         /*if('publish' == $post->post_status) {
    966             $social = ExpressCurate_SocialManager::getInstance();
    967             $social->publishPostMessages($post_id);
    968         }*/
     972        if (get_option('expresscurate_social_publishing', '') == "on" && strlen(get_option('expresscurate_buffer_access_token')) > 2) {
     973            if ('publish' == $post->post_status) {
     974                $social = ExpressCurate_SocialManager::getInstance();
     975                $social->publishPostMessages($post_id);
     976            }
     977        }
    969978    }
    970979
     
    10391048    {
    10401049        $seo = get_option('expresscurate_seo', '') == 'on';
    1041         $social = get_option('expresscurate_social_publishing', '') == 'on';
     1050        $social = get_option('expresscurate_social_publishing', '') == "on" && strlen(get_option('expresscurate_buffer_access_token')) > 2;
    10421051        $post_types = array('post', 'page');
    10431052        $post_types = array_merge($post_types, get_post_types(array('_builtin' => false, 'public' => true), 'names'));
     
    10481057                add_meta_box('expresscurate_advanced_seo', ' Advanced SEO', array(&$this, 'advanced_seo'), $post_type, 'normal', 'high');
    10491058            }
    1050             /*if($social) {
     1059            if($social) {
    10511060                add_meta_box('expresscurate_social_publishing', ' Social Posts', array(&$this, 'social_posts'), $post_type, 'normal', 'high');
    1052             }*/
     1061            }
    10531062        }
    10541063    }
     
    14991508        }
    15001509       
    1501        /* if (get_option('expresscurate_social_publishing', '') == "on" && strlen(get_option('expresscurate_buffer_access_token')) > 2) {
     1510        if (get_option('expresscurate_social_publishing', '') == "on" && strlen(get_option('expresscurate_buffer_access_token')) > 2) {
    15021511            add_meta_box('dashboard_widget_social_publishing', 'Social Publishing Overview', array(&$this, 'social_publishing_widget'), get_current_screen(), 'side', 'high');
    1503         }*/
     1512        }
    15041513
    15051514        add_meta_box('dashboard_widget_feed', 'Feed', array(&$this, 'feed_widget'), get_current_screen(), 'side', 'high');
  • expresscurate/trunk/ExpressCurate_SocialManager.php

    r1162493 r1172885  
    1010 */
    1111
    12 class ExpressCurate_SocialManager {
     12class ExpressCurate_SocialManager
     13{
    1314
    1415    const SOCIAL_PUBLISHED_POST_MESSAGES_META = '_expresscurate_social_published_post_messages';
     
    1920    const PUBLISHED = 'published';
    2021    const MESSAGE_ID = 'id';
     22    const PROFILE = 'profile_ids';
     23    const MESSAGE = 'message';
    2124
    2225    private static $instance;
    2326
    24     function __construct() {
     27    function __construct()
     28    {
    2529        // action shall be added from actions controller
    2630    }
    2731
    28     public static function getInstance() {
    29         if ( ! ( self::$instance instanceof self ) ) {
     32    public static function getInstance()
     33    {
     34        if (!(self::$instance instanceof self)) {
    3035            self::$instance = new self();
    3136        }
     
    3439    }
    3540
    36     public static function saveActiveProfiles() {
     41    public static function saveActiveProfiles()
     42    {
    3743        $profiles = $_REQUEST['profiles'];
    3844        update_option('expresscurate_social_publishing_profiles', $profiles);
    3945    }
    40    
    41     public static function getActiveProfiles() {
     46
     47    public static function getActiveProfiles()
     48    {
    4249        return get_option('expresscurate_social_publishing_profiles', null);
    4350    }
    44    
    45     public function getPublishedPostMessages($post_id) {
    46         if(empty($post_id)) {
     51
     52    public function getPublishedPostMessages($post_id)
     53    {
     54        if (empty($post_id)) {
    4755            return null;
    4856        }
    49        
     57
    5058        $messages = get_post_meta($post_id, self::SOCIAL_PUBLISHED_POST_MESSAGES_META);
    51         if(empty($messages)) {
     59        if (empty($messages)) {
    5260            return array();
    5361        }
    54        
    55         return $messages[0];
    56     }
    57    
    58     public function getApprovedPostMessages($post_id) {
    59         if(empty($post_id)) {
    60             return null;
    61         }
    62        
    63         $messages = get_post_meta($post_id, self::SOCIAL_APPROVED_POST_MESSAGES_META);
    64         if(empty($messages)) {
    65             return array();
    66         }
    67        
     62
    6863        return $messages[0];
    6964    }
    7065
    71     public function getPostMessages($post_id) {
    72         if(empty($post_id)) {
    73             return null;
    74         }
    75        
    76         $messages = get_post_meta($post_id, self::SOCIAL_POST_MESSAGES_META);
    77         if(empty($messages)) {
    78             return array();
    79         }
    80        
    81         return $messages[0];
    82     }
    83    
    84     public function savePostMessages() {
    85         $data=$_REQUEST;
    86         $post_id = $data['post_id'];
    87         $messages=json_decode(stripslashes($data['messages']));
    88 
    89         if(empty($post_id) || empty($messages)) {
     66    public function getApprovedPostMessages($post_id)
     67    {
     68        if (empty($post_id)) {
    9069            return null;
    9170        }
    9271
    93         $approved = $this->getApprovedPostMessages($post_id);
    94         foreach($messages as $messageId => $message) {
     72        $messages = get_post_meta($post_id, self::SOCIAL_APPROVED_POST_MESSAGES_META);
     73        if (empty($messages)) {
     74            return array();
     75        }
    9576
     77        return $messages[0];
     78    }
    9679
    97             $messageIdIndex=self::MESSAGE_ID;
    98             $messageStatus=self::APPROVED;
    99             if(!isset($message->$messageIdIndex)) {
    100                 $messageId = uniqid();
    101                 $message->$messageIdIndex = $messageId;
     80    public function getPostMessages($post_id)
     81    {
     82        if (empty($post_id)) {
     83            return null;
     84        }
     85
     86        $messages = get_post_meta($post_id, self::SOCIAL_POST_MESSAGES_META);
     87        if (empty($messages)) {
     88            return array();
     89        }
     90
     91        return $messages[0];
     92    }
     93
     94    public function savePostMessages()
     95    {
     96
     97        $data = $_REQUEST;
     98        $post_id = $data['post_id'];
     99        $messages = json_decode(stripslashes($data['messages']), true);
     100
     101        if (empty($post_id)) {
     102            return null;
     103        }
     104
     105        $approved = array();
     106        $allMessages = array();
     107        foreach ($messages as $messageId => $message) {
     108            /*if (!isset($message[self::MESSAGE_ID])) {
     109                $messageId = uniqid('', true);
     110                $message[self::MESSAGE_ID] = $messageId;
     111            }*/
     112
     113            $messageId=$message[self::MESSAGE_ID];
     114            if (isset($message[self::APPROVED]) && $message[self::APPROVED] === true) {
     115                $approved[$messageId] = $message;
     116            } else {
     117                $allMessages[$messageId] = $message;
    102118            }
    103 
    104             $key = ExpressCurate_BufferClient::POST_FIELD_PROFILE;
    105             $message->$key = "5540b4e3dc302f2a02a9c09d";
    106 
    107             $messages[$messageId] = $message;
    108 
    109        
    110             if(isset($message->$messageStatus)) {
    111                 $approved[$messageId] = $message;
    112             }
    113 
    114119
    115120        }
    116121
    117122        update_post_meta($post_id, self::SOCIAL_APPROVED_POST_MESSAGES_META, $approved);
    118         update_post_meta($post_id, self::SOCIAL_POST_MESSAGES_META, $messages);
     123        update_post_meta($post_id, self::SOCIAL_POST_MESSAGES_META, $allMessages);
     124    }
    119125
    120         $this->publishPostMessages($post_id);
    121     }
    122    
    123     public function publishPostMessages($post_id = null) {
     126    public function publishPostMessages($post_id = null)
     127    {
    124128        $approvedPostMessages = $this->getApprovedPostMessages($post_id);
    125129        $publishedPostMessages = $this->getPublishedPostMessages($post_id);
    126        
     130
    127131        $buffer = new ExpressCurate_BufferClient();
    128132
    129         foreach($approvedPostMessages as $messageId => $message) {
    130            // var_dump($message);
    131             $result=$buffer->createPost(array(
    132                 'text' => $message->message,
    133                 'profile_ids' => $message->profile_ids
    134             ));
    135            // var_dump($result);die;
     133        foreach ($approvedPostMessages as $messageId => $message) {
     134            $data = array();
     135            $data[ExpressCurate_BufferClient::POST_FIELD_TEXT] = $message[self::MESSAGE] . ' ' . get_permalink($post_id);
     136            $data[ExpressCurate_BufferClient::POST_FIELD_PROFILE] = $message[self::PROFILE];
     137
     138            $result = $buffer->createPost($data);
    136139            // mark as published
    137             $publishedPostMessages[] = $message;
     140            $publishedPostMessages[$messageId] = $message;
    138141        }
    139 
    140142        // save the new statuses
    141143        update_post_meta($post_id, self::SOCIAL_PUBLISHED_POST_MESSAGES_META, $publishedPostMessages);
    142         update_post_meta($post_id, self::SOCIAL_APPROVED_POST_MESSAGES_META, array());
     144        update_post_meta($post_id, self::SOCIAL_APPROVED_POST_MESSAGES_META, '');
    143145    }
    144146}
  • expresscurate/trunk/css/expresscurate.css

    r1162493 r1172885  
    49924992    padding-top: 10px;
    49934993}
    4994     .expresscurate_tweetBlock{
     4994    .expresscurate_socialPostBlock{
    49954995        border-radius: 2px;
    49964996        padding: 0 10px;
     
    50005000        border: solid 1px #E6E6E6;
    50015001        margin: 10px 0;
     5002        position: relative;
     5003        z-index: 100;
     5004    }
     5005    .expresscurate_socialPostBlock .socialWidgetOverlay{
     5006        position: absolute;
     5007        width: 100%;
     5008        height: 100%;
     5009        top:0;
     5010        left: 0;
     5011        background: #000;
     5012        opacity: .3;
     5013    }
     5014    .expresscurate_socialPostBlock .edit{
     5015        position: relative;
     5016        z-index: 102;
     5017        background-color: #fff;
     5018        padding: 0 12px;
    50025019    }
    50035020    .expresscurate_social_post_widget .mainControls{
    50045021        margin: 0 0 10px 0;
    50055022    }
    5006             .expresscurate_tweetBlock .topControls,
    5007             .expresscurate_tweetBlock .bottomControls{
     5023            .expresscurate_socialPostBlock .topControls,
     5024            .expresscurate_socialPostBlock .bottomControls{
    50085025                margin: 5px 0;
    50095026                padding: 0;
    50105027            }
    5011                 .expresscurate_tweetBlock .topControls li,
    5012                 .expresscurate_tweetBlock .bottomControls li{
     5028                .expresscurate_socialPostBlock .topControls li,
     5029                .expresscurate_socialPostBlock .bottomControls li{
    50135030                    display: inline-block;
    50145031                    height: 25px;
    5015                     margin: 0;
     5032                    margin: 0 2px;
    50165033                }
    5017                 .expresscurate_tweetBlock .topControls li.close:hover{
     5034                .expresscurate_socialPostBlock .topControls li.close:hover{
    50185035                    background: url("../images/feed_icons.svg") no-repeat -48px -21px;
    50195036                    background-size: auto 68px;
    50205037                }
    5021                 .expresscurate_tweetBlock .topControls li.close{
     5038                .expresscurate_socialPostBlock .topControls li.close{
    50225039                    background: url("../images/feed_icons.svg") no-repeat -48px 6px;
    50235040                    background-size: auto 68px;
     
    50265043                }
    50275044
    5028             .expresscurate_social_post_content{
     5045            .expresscurate_social_post_content,
     5046            .expresscurate_social_post_content_published{
    50295047                display: block;
    50305048                resize: none;
     
    50425060                border: solid 1px #E6E6E6;
    50435061            }
     5062            .expresscurate_social_post_content_published{
     5063                box-sizing: border-box;
     5064                -moz-box-sizing: border-box;
     5065                -webkit-box-sizing: border-box;
     5066                overflow: auto;
     5067            }
    50445068            .expresscurate_social_widget_buttons{
    50455069                display: inline-block;
     
    50545078                -moz-transition: all .3s ease-out;
    50555079                -webkit-transition: all .3s ease-out;
    5056                 margin: 0;
     5080                margin: 0 0 3px 0;
    50575081                cursor: pointer;
    50585082            }
     
    50615085                     color: #ffffff;
    50625086                 }
     5087
     5088            .expresscurate_socialPostBlock .topControls .expresscurate_social_widget_buttons,
     5089            .expresscurate_socialPostBlock .bottomControls .expresscurate_social_widget_buttons{
     5090                color: #fff;
     5091                background-color: #1cbb9f;
     5092                border: none !important;
     5093            }
     5094            .expresscurate_socialPostBlock .topControls .expresscurate_social_widget_buttons:hover,
     5095            .expresscurate_socialPostBlock .bottomControls .expresscurate_social_widget_buttons:hover{
     5096                background-color: #20d0b1;
     5097            }
     5098            .expresscurate_socialPostBlock .expresscurate_socialPostLength{
     5099                color: #1cbb9f;
     5100                line-height: 25px;
     5101            }
     5102            .expresscurate_socialPostBlock .expresscurate_socialPostLength.error{
     5103                color:#e85e50;
     5104            }
    50635105/*dashboard social widget*/
    50645106    .expresscurate_social_box{
     
    50735115        padding-left: 40px;
    50745116        background: url("../images/socials_box.svg") no-repeat;
    5075         background-size: auto 100px;
     5117        background-size: auto 200px;
     5118        background-position: -30px -30px;
     5119        background-color: #bdbdbd;
    50765120        max-height: 30px;
    50775121        position: relative;
     
    50795123    .expresscurate_social_box_Twitter{
    50805124        background-color: rgba(0,172,273,1);
    5081         background-position: 0 -72px;
     5125        background-position: 6px -64px;
    50825126    }
    50835127    .expresscurate_social_box_Twitter:hover{
     
    50865130    .expresscurate_social_box_Facebook{
    50875131        background-color: rgba(59,89,152,1);
    5088         background-position: 0 -2px;
     5132        background-position: 5px 0;
    50895133    }
    50905134    .expresscurate_social_box_Facebook:hover{
    50915135        background-color: rgba(59,89,152,0.8);
     5136    }
     5137    .expresscurate_social_box_LinkedIn{
     5138        background-color: rgba(30,135,189,1);
     5139        background-position: 6px -173px;
     5140    }
     5141    .expresscurate_social_box_LinkedIn:hover{
     5142        background-color: rgba(30,135,189,0.8);
     5143    }
     5144    .expresscurate_social_box_Google{
     5145        background-color: rgba(212,65,50,1);
     5146        background-position: 7px -120px;
     5147    }
     5148    .expresscurate_social_box_Google:hover{
     5149        background-color: rgba(212,65,50,0.8);
    50925150    }
    50935151        .expresscurate_social_box .dailySuggestions{
     
    52305288    background-position: center -317px !important;
    52315289}
     5290.mce-expresscurateSocialPost{
     5291    background-position: center -393px !important;
     5292}
     5293.mce-expresscurateSocialPost.mce-disabled{
     5294    background-position: center -433px !important;
     5295}
    52325296.expresscurateSocial{
    52335297    background-position: center -78px !important;
  • expresscurate/trunk/images/socials_box.svg

    r1162493 r1172885  
    33<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    44<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
    5      width="150.5px" height="450px" viewBox="0 0 150.5 450" enable-background="new 0 0 150.5 450" xml:space="preserve">
    6 <path id="facebook-icon" fill="#FFFFFF" d="M63.107,58.669h-9.882v16.128h9.882v47.38h18.999V74.596h13.256l1.411-15.927H82.106
    7     c0,0,0-5.947,0-9.073c0-3.754,0.757-5.241,4.385-5.241c2.924,0,10.282,0,10.282,0V27.822c0,0-10.839,0-13.155,0
    8     c-14.138,0-20.511,6.224-20.511,18.144C63.107,56.35,63.107,58.669,63.107,58.669z"/>
    9 <path id="twitter-icon" fill="#FFFFFF" d="M121.053,363.62c-3.416,1.69-7.114,2.896-11.022,3.534
    10     c3.905-2.575,6.821-6.514,8.078-11.108c-3.658,2.386-7.744,4.178-12.132,5.24c-3.7-3.623-8.848-5.765-14.432-5.522
    11     c-12.533,0.534-21.246,12.628-17.893,24.653c-16.172-0.121-30.813-7.237-40.892-18.574c-4.711,8.941-1.772,20.258,7.119,25.662
    12     c-3.184,0.039-6.217-0.705-8.896-2.049c0.176,9.004,6.981,17.143,16.399,18.614c-2.701,0.864-5.688,1.163-8.756,0.709
    13     c2.803,7.608,10.213,12.915,18.715,12.706c-7.887,6.746-18.045,10.045-28.397,9.273c8.828,5.14,19.172,7.918,30.137,7.447
    14     c36.047-1.545,55.109-32.863,52.713-60.123C115.471,371.185,118.613,367.622,121.053,363.62z"/>
     5     width="94.414px" height="946.427px" viewBox="0 0 94.414 946.427" enable-background="new 0 0 94.414 946.427"
     6     xml:space="preserve">
     7<g>
     8    <g>
     9        <path id="facebook-icon" fill="#FFFFFF" d="M35.314,30.847h-9.883v16.128h9.883v47.38h18.998V46.774h13.256l1.412-15.927H54.312
     10            c0,0,0-5.947,0-9.073c0-3.754,0.758-5.241,4.387-5.241c2.924,0,10.281,0,10.281,0V0c0,0-10.84,0-13.154,0
     11            C41.688,0,35.314,6.224,35.314,18.144C35.314,28.528,35.314,30.847,35.314,30.847z"/>
     12        <path id="twitter-icon" fill="#FFFFFF" d="M93.261,335.798c-3.416,1.688-7.113,2.896-11.021,3.534
     13            c3.904-2.575,6.82-6.516,8.078-11.108c-3.658,2.386-7.744,4.178-12.133,5.24c-3.699-3.623-8.848-5.767-14.432-5.522
     14            c-12.533,0.534-21.247,12.628-17.894,24.653c-16.172-0.121-30.813-7.237-40.891-18.574c-4.712,8.941-1.772,20.258,7.118,25.662
     15            c-3.184,0.039-6.217-0.705-8.896-2.049c0.176,9.004,6.98,17.143,16.398,18.614c-2.7,0.862-5.688,1.163-8.756,0.709
     16            c2.804,7.606,10.213,12.915,18.715,12.706c-7.887,6.746-18.045,10.045-28.396,9.271c8.828,5.142,19.172,7.918,30.137,7.447
     17            c36.046-1.545,55.107-32.863,52.712-60.123C87.679,343.362,90.822,339.8,93.261,335.798z"/>
     18        <g id="google-plus-icon">
     19            <path fill="#FFFFFF" d="M94.412,620.904H81.894v12.52H75.64v-12.52h-12.52v-6.259h12.52v-12.519h6.256v12.519h12.518v6.259
     20                H94.412z M59.027,672.675c0,9.382-8.568,20.805-30.121,20.805C13.144,693.479,0,686.682,0,675.245
     21                c0-8.823,5.586-20.282,31.698-20.282c-3.88-3.161-4.83-7.581-2.462-12.365c-15.288,0-23.116-8.987-23.116-20.4
     22                c0-11.166,8.306-21.318,25.241-21.318c4.277,0,27.132,0,27.132,0l-6.063,6.363h-7.121c5.023,2.879,7.697,8.809,7.697,15.343
     23                c0,5.998-3.301,10.855-8.019,14.503c-8.365,6.465-6.221,10.077,2.542,16.468C56.167,660.026,59.027,665.024,59.027,672.675z
     24                 M42.105,622.99c-1.264-9.604-7.519-17.48-14.83-17.702c-7.311-0.216-12.214,7.133-10.953,16.738
     25                c1.263,9.603,8.21,16.31,15.523,16.53C39.158,638.775,43.366,632.595,42.105,622.99z M49.642,673.639
     26                c0-7.901-7.207-15.428-19.294-15.428c-10.894-0.12-20.124,6.886-20.124,15.004c0,8.285,7.865,15.181,18.761,15.181
     27                C42.912,688.396,49.642,681.923,49.642,673.639z"/>
     28        </g>
     29    </g>
     30    <path id="linkedin-icon" fill="#FFFFFF" d="M27.122,877.541c0,5.337-4.29,9.662-9.585,9.662s-9.586-4.325-9.586-9.662
     31        c0-5.336,4.291-9.663,9.586-9.663S27.122,872.205,27.122,877.541z M25.719,894.062H9.512v52.365h16.207V894.062z M51.628,894.062
     32        H36.082v52.365h15.546c0,0,0-19.424,0-27.488c0-7.364,3.391-11.747,9.879-11.747c5.959,0,8.824,4.208,8.824,11.747
     33        s0,27.488,0,27.488h16.131c0,0,0-19.131,0-33.156c0-14.028-7.949-20.807-19.055-20.807c-11.104,0-15.779,8.648-15.779,8.648
     34        V894.062L51.628,894.062z"/>
     35</g>
    1536</svg>
  • expresscurate/trunk/images/wp_icons.svg

    r1129694 r1172885  
    33<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    44<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
    5      width="60.073px" height="1124.203px" viewBox="0 0 60.073 1124.203" enable-background="new 0 0 60.073 1124.203"
     5     width="60.074px" height="1354.854px" viewBox="-0.5 0 60.074 1354.854" enable-background="new -0.5 0 60.074 1354.854"
    66     xml:space="preserve">
    77<g>
    88    <g>
    9         <rect x="36.076" y="20.639" fill="#2BA886" width="6.205" height="18.295"/>
    10         <rect x="27.312" y="26.078" fill="#2BA886" width="6.204" height="12.856"/>
    11         <rect x="18.547" y="31.517" fill="#2BA886" width="6.205" height="7.417"/>
     9        <g>
     10            <rect x="35.576" y="20.639" fill="#2BA886" width="6.205" height="18.295"/>
     11            <rect x="26.812" y="26.078" fill="#2BA886" width="6.204" height="12.856"/>
     12            <rect x="18.046" y="31.517" fill="#2BA886" width="6.205" height="7.417"/>
     13        </g>
     14        <path fill="#2BA886" d="M-0.5,488.746v51h60v-51H-0.5L-0.5,488.746z M19.5,498.746h20v7h-20V498.746z M39.5,529.746h-20v-7h20
     15            V529.746z M49.5,517.746h-40v-7h40V517.746z"/>
     16        <path fill="#2BA886" d="M-0.5,368.746v51h60v-51H-0.5z M9.5,378.746h27v7h-27V378.746z M36.5,409.746h-27v-7h27V409.746z
     17             M46.5,397.746h-37v-7h37V397.746z"/>
     18        <path fill="#2BA886" d="M-0.5,247.746v51h60v-51H-0.5z M9.5,263.746h26v7h-26V263.746z M45.5,282.746h-36v-7h36V282.746z"/>
     19        <polygon fill="#2BA886" points="27.68,249.746 38.675,239.746 49.673,249.746         "/>
     20        <path fill="#2BA886" d="M-0.5,608.746v51h60v-51H-0.5z M49.5,649.746h-27v-7h27V649.746z M49.5,637.746h-37v-7h37V637.746z
     21             M49.5,625.746h-27v-7h27V625.746z"/>
     22        <g>
     23            <path id="link-icon_4_" fill="#2BA886" d="M41.742,875.447c-0.979,0.988-2.07,1.81-3.229,2.456
     24                c-6.465,3.592-14.779,1.727-18.97-4.57l5.021-5.059c1.457,3.288,5.049,5.148,8.617,4.34c1.344-0.308,2.618-0.983,3.657-2.031
     25                l9.621-9.695c2.92-2.94,2.904-7.713-0.041-10.635c-2.94-2.92-7.713-2.902-10.635,0.041l-2.967,2.988
     26                c-2.711-1.063-5.617-1.48-8.482-1.256l6.547-6.598c5.611-5.654,14.748-5.688,20.402-0.075c5.658,5.61,5.693,14.744,0.08,20.401
     27                L41.742,875.447z M26.466,890.849l6.548-6.598c-2.867,0.225-5.775-0.195-8.486-1.259l-2.967,2.989
     28                c-2.922,2.942-7.689,2.963-10.638,0.04c-2.938-2.92-2.961-7.69-0.036-10.637l9.62-9.693c2.931-2.954,7.707-2.946,10.636-0.04
     29                c0.683,0.677,1.271,1.52,1.64,2.351l5.021-5.058c-0.533-0.802-1.085-1.49-1.798-2.195c-1.83-1.818-4.153-3.167-6.823-3.797
     30                c-3.466-0.82-7.168-0.344-10.345,1.424c-1.162,0.646-2.25,1.461-3.231,2.451l-9.621,9.695
     31                c-5.615,5.651-5.578,14.791,0.076,20.399C11.716,896.539,20.855,896.503,26.466,890.849z"/>
     32            <path id="arrow-16-icon_4_" fill="#28A885" d="M47.848,884.938v-3.728l8.764,8.75l-8.764,8.751v-3.729H28.673l10.031-10.046
     33                L47.848,884.938L47.848,884.938z"/>
     34        </g>
     35        <g>
     36            <path id="link-icon_3_" fill="#C2C2C2" d="M41.742,995.447c-0.979,0.988-2.07,1.81-3.229,2.456
     37                c-6.465,3.592-14.779,1.727-18.97-4.57l5.021-5.059c1.457,3.288,5.049,5.148,8.617,4.34c1.344-0.308,2.618-0.983,3.657-2.031
     38                l9.621-9.695c2.92-2.94,2.904-7.713-0.041-10.635c-2.94-2.92-7.713-2.902-10.635,0.041l-2.967,2.988
     39                c-2.711-1.063-5.617-1.48-8.482-1.256l6.547-6.598c5.611-5.654,14.748-5.688,20.402-0.075c5.658,5.61,5.693,14.744,0.08,20.401
     40                L41.742,995.447z M26.466,1010.849l6.548-6.598c-2.867,0.225-5.775-0.195-8.486-1.259l-2.967,2.989
     41                c-2.922,2.942-7.689,2.963-10.638,0.04c-2.938-2.92-2.961-7.69-0.036-10.637l9.62-9.693c2.931-2.954,7.707-2.946,10.636-0.04
     42                c0.683,0.677,1.271,1.52,1.64,2.351l5.021-5.058c-0.533-0.802-1.085-1.49-1.798-2.195c-1.83-1.818-4.153-3.167-6.823-3.797
     43                c-3.466-0.82-7.168-0.344-10.345,1.424c-1.162,0.646-2.25,1.461-3.231,2.451l-9.621,9.695
     44                c-5.615,5.651-5.578,14.791,0.076,20.399C11.716,1016.539,20.855,1016.503,26.466,1010.849z"/>
     45            <path id="arrow-16-icon_3_" fill="#C2C2C2" d="M47.848,1004.938v-3.728l8.764,8.75l-8.764,8.751v-3.729H28.673l10.031-10.046
     46                L47.848,1004.938L47.848,1004.938z"/>
     47        </g>
     48        <g>
     49            <path fill="#28A885" d="M22.652,768.877l-4.268-4.181l16.009-15.962c-2.162-1.496-3.979-3.314-4.847-4.888L4.364,769.043
     50                l4.876,4.882l4.252-4.249l4.271,4.269L22.652,768.877z"/>
     51            <path fill="#28A885" d="M48.197,730.098c-6.043-6.043-15.16-6.727-20.362-1.522c-5.201,5.202-4.521,14.317,1.523,20.362
     52                c6.044,6.044,15.159,6.726,20.36,1.521C54.921,745.257,54.242,736.141,48.197,730.098z M34.031,744.264
     53                c-3.045-3.046-3.389-7.639-0.767-10.26s7.214-2.278,10.259,0.768s3.389,7.639,0.768,10.26
     54                C41.669,747.65,37.076,747.308,34.031,744.264z"/>
     55        </g>
     56        <path fill="#2BA886" d="M33.5,0.03v12.673c7.996,1.806,13.869,8.895,13.869,17.388c0,8.493-5.873,15.583-13.869,17.388v12.063
     57            c14.994-1.936,26.074-14.498,26.074-29.757C59.574,14.528,48.494,1.966,33.5,0.03z"/>
     58        <path fill="#2BA886" d="M19.892,15.445c1.927-1.373,4.002-2.355,6.607-2.843V0c-5.95,0.735-11.44,3.233-15.811,6.938
     59            L19.892,15.445z"/>
     60        <path fill="#2BA886" d="M13.553,36.771l-12.02,2.171C5.053,49.918,14.716,58.131,26.5,59.569V47.541
     61            C20.686,46.304,15.766,42.203,13.553,36.771z"/>
     62        <path fill="#2BA886" d="M5.83,11.978c-3.696,4.979-5.898,11.126-5.898,17.808c0,0.78,0.039,1.551,0.104,2.313l12.11-2.188
     63            c0.035-3.489,1.088-6.723,2.854-9.456L5.83,11.978z"/>
     64        <g>
     65            <ellipse fill="#28A885" cx="29.676" cy="136.379" rx="5.495" ry="4.731"/>
     66            <path fill="#28A885" d="M29.673,119.92c-13.545,0-24.534,10.99-24.534,24.539c0,13.761,11.934,22.838,24.534,35.461
     67                c12.611-12.623,24.543-21.699,24.543-35.461C54.216,130.91,43.234,119.92,29.673,119.92z M32.076,145.532l-0.029,13.558
     68                l4.211-0.04l0.082,4.963l-4.254-0.002l-0.006,4.236l-4.861-0.007l0.012-22.72c-4.846-0.959-8.461-4.689-8.458-9.149
     69                c0.004-5.185,4.891-9.385,10.914-9.379c6.022,0.004,10.901,4.211,10.897,9.396C40.582,140.859,36.941,144.592,32.076,145.532z"/>
     70        </g>
     71        <g>
     72            <path fill="#28A885" d="M54.384,1109.918c-0.002-0.064,0-0.127-0.006-0.191c-0.021-1.112-0.51-2.206-1.459-2.94l-13.36-10.354
     73                c-1.664-1.288-4.058-0.984-5.347,0.678l-0.34,0.438c-1.289,1.665-0.985,4.059,0.68,5.348l9.064,7.024l-9.064,7.024
     74                c-1.665,1.289-1.969,3.683-0.68,5.348l0.34,0.438c1.289,1.662,3.683,1.966,5.347,0.678l13.36-10.354
     75                c0.949-0.735,1.438-1.828,1.459-2.94C54.384,1110.045,54.382,1109.982,54.384,1109.918z"/>
     76            <path fill="#28A885" d="M4.296,1109.918c0.002-0.064,0.001-0.127,0.007-0.191c0.021-1.112,0.511-2.206,1.459-2.94l13.36-10.354
     77                c1.664-1.288,4.058-0.984,5.346,0.678l0.341,0.438c1.289,1.665,0.985,4.059-0.68,5.348l-9.063,7.024l9.063,7.024
     78                c1.665,1.289,1.969,3.683,0.68,5.348l-0.341,0.438c-1.288,1.662-3.682,1.966-5.346,0.678l-13.36-10.354
     79                c-0.948-0.735-1.438-1.828-1.459-2.94C4.297,1110.045,4.298,1109.982,4.296,1109.918z"/>
     80        </g>
    1281    </g>
    13     <path fill="#2BA886" d="M0,488.746v51h60v-51H0z M20,498.746h20v7H20V498.746z M40,529.746H20v-7h20V529.746z M50,517.746H10v-7h40
    14         V517.746z"/>
    15     <path fill="#2BA886" d="M0,368.746v51h60v-51H0z M10,378.746h27v7H10V378.746z M37,409.746H10v-7h27V409.746z M47,397.746H10v-7h37
    16         V397.746z"/>
    17     <path fill="#2BA886" d="M0,247.746v51h60v-51H0z M10,263.746h26v7H10V263.746z M46,282.746H10v-7h36V282.746z"/>
    18     <polygon fill="#2BA886" points="28.18,249.746 39.176,239.746 50.173,249.746     "/>
    19     <path fill="#2BA886" d="M0,608.746v51h60v-51H0z M50,649.746H23v-7h27V649.746z M50,637.746H13v-7h37V637.746z M50,625.746H23v-7
    20         h27V625.746z"/>
    21     <g>
    22         <path id="link-icon_4_" fill="#2BA886" d="M42.242,875.447c-0.98,0.989-2.07,1.81-3.229,2.456
    23             c-6.465,3.592-14.779,1.727-18.969-4.57l5.021-5.059c1.457,3.289,5.049,5.149,8.617,4.34c1.344-0.307,2.619-0.983,3.658-2.031
    24             l9.621-9.695c2.92-2.941,2.904-7.713-0.041-10.635c-2.941-2.92-7.713-2.902-10.635,0.041l-2.967,2.988
    25             c-2.711-1.063-5.617-1.48-8.482-1.256l6.547-6.597c5.611-5.655,14.748-5.688,20.402-0.075c5.658,5.61,5.693,14.744,0.08,20.401
    26             L42.242,875.447z M26.967,890.849l6.547-6.598c-2.867,0.225-5.775-0.195-8.486-1.259l-2.967,2.989
    27             c-2.922,2.943-7.689,2.963-10.637,0.04c-2.939-2.919-2.961-7.69-0.037-10.636l9.621-9.694c2.93-2.954,7.707-2.946,10.635-0.04
    28             c0.682,0.677,1.271,1.52,1.639,2.351l5.021-5.058c-0.533-0.802-1.084-1.49-1.797-2.195c-1.83-1.818-4.154-3.167-6.824-3.797
    29             c-3.465-0.82-7.168-0.344-10.344,1.424c-1.162,0.646-2.25,1.461-3.232,2.451l-9.621,9.695c-5.615,5.652-5.578,14.791,0.076,20.4
    30             C12.217,896.539,21.355,896.503,26.967,890.849z"/>
    31         <path id="arrow-16-icon_4_" fill="#28A885" d="M48.348,884.938v-3.728l8.764,8.75l-8.764,8.751v-3.729H29.174l10.031-10.045
    32             H48.348z"/>
    33     </g>
    34     <g>
    35         <path id="link-icon_3_" fill="#C2C2C2" d="M42.242,995.447c-0.98,0.989-2.07,1.81-3.229,2.456
    36             c-6.465,3.592-14.779,1.727-18.969-4.57l5.021-5.059c1.457,3.289,5.049,5.149,8.617,4.34c1.344-0.307,2.619-0.983,3.658-2.031
    37             l9.621-9.695c2.92-2.941,2.904-7.713-0.041-10.635c-2.941-2.92-7.713-2.902-10.635,0.041l-2.967,2.988
    38             c-2.711-1.063-5.617-1.48-8.482-1.256l6.547-6.597c5.611-5.655,14.748-5.688,20.402-0.075c5.658,5.61,5.693,14.744,0.08,20.401
    39             L42.242,995.447z M26.967,1010.849l6.547-6.598c-2.867,0.225-5.775-0.195-8.486-1.259l-2.967,2.989
    40             c-2.922,2.943-7.689,2.963-10.637,0.04c-2.939-2.919-2.961-7.69-0.037-10.636l9.621-9.694c2.93-2.954,7.707-2.946,10.635-0.04
    41             c0.682,0.677,1.271,1.52,1.639,2.351l5.021-5.058c-0.533-0.802-1.084-1.49-1.797-2.195c-1.83-1.818-4.154-3.167-6.824-3.797
    42             c-3.465-0.82-7.168-0.344-10.344,1.424c-1.162,0.646-2.25,1.461-3.232,2.451l-9.621,9.695c-5.615,5.652-5.578,14.791,0.076,20.4
    43             C12.217,1016.539,21.355,1016.503,26.967,1010.849z"/>
    44         <path id="arrow-16-icon_3_" fill="#C2C2C2" d="M48.348,1004.938v-3.728l8.764,8.75l-8.764,8.751v-3.729H29.174l10.031-10.045
    45             H48.348z"/>
    46     </g>
    47     <g>
    48         <path fill="#28A885" d="M23.152,768.877l-4.267-4.181l16.008-15.962c-2.162-1.496-3.979-3.314-4.846-4.887L4.864,769.043
    49             l4.876,4.882l4.252-4.249l4.27,4.268L23.152,768.877z"/>
    50         <path fill="#28A885" d="M48.697,730.098c-6.043-6.043-15.16-6.727-20.362-1.523c-5.201,5.202-4.521,14.318,1.523,20.363
    51             c6.044,6.043,15.159,6.725,20.361,1.521C55.422,745.257,54.741,736.141,48.697,730.098z M34.531,744.264
    52             c-3.045-3.046-3.389-7.639-0.767-10.26s7.214-2.278,10.259,0.767c3.045,3.046,3.389,7.639,0.767,10.26
    53             C42.17,747.65,37.576,747.308,34.531,744.264z"/>
    54     </g>
    55     <path fill="#2BA886" d="M34,0.03v12.673c7.996,1.806,13.868,8.895,13.868,17.388S41.996,45.674,34,47.479v12.063
    56         c14.994-1.936,26.073-14.498,26.073-29.757C60.073,14.528,48.994,1.966,34,0.03z"/>
    57     <path fill="#2BA886" d="M20.392,15.445c1.927-1.373,4.002-2.355,6.608-2.843V0c-5.95,0.735-11.441,3.233-15.811,6.938
    58         L20.392,15.445z"/>
    59     <path fill="#2BA886" d="M14.053,36.771L2.034,38.942C5.553,49.918,15.217,58.131,27,59.569V47.541
    60         C21.186,46.304,16.266,42.203,14.053,36.771z"/>
    61     <path fill="#2BA886" d="M6.33,11.978c-3.696,4.979-5.899,11.126-5.899,17.808c0,0.78,0.039,1.551,0.105,2.313l12.11-2.188
    62         c0.035-3.489,1.088-6.723,2.854-9.456L6.33,11.978z"/>
    63     <g>
    64         <ellipse fill="#28A885" cx="30.177" cy="136.379" rx="5.494" ry="4.731"/>
    65         <path fill="#28A885" d="M30.174,119.92c-13.545,0-24.535,10.99-24.535,24.539c0,13.761,11.934,22.838,24.535,35.461
    66             c12.611-12.623,24.543-21.699,24.543-35.461C54.717,130.91,43.734,119.92,30.174,119.92z M32.576,145.532l-0.029,13.558l4.21-0.04
    67             l0.083,4.963l-4.255-0.002l-0.005,4.236l-4.861-0.007l0.011-22.72c-4.845-0.959-8.461-4.689-8.458-9.149
    68             c0.004-5.185,4.891-9.385,10.914-9.379c6.023,0.004,10.902,4.211,10.898,9.396C41.081,140.859,37.441,144.592,32.576,145.532z"/>
    69     </g>
    70     <g>
    71         <path fill="#28A885" d="M54.885,1109.918c-0.002-0.064-0.001-0.127-0.006-0.191c-0.021-1.113-0.511-2.206-1.459-2.941
    72             l-13.361-10.354c-1.664-1.288-4.057-0.985-5.346,0.678l-0.34,0.437c-1.289,1.665-0.986,4.059,0.679,5.348l9.064,7.024
    73             l-9.064,7.024c-1.665,1.289-1.968,3.683-0.679,5.348l0.34,0.437c1.289,1.663,3.682,1.966,5.346,0.678l13.361-10.354
    74             c0.948-0.736,1.438-1.828,1.459-2.941C54.884,1110.045,54.883,1109.982,54.885,1109.918z"/>
    75         <path fill="#28A885" d="M4.797,1109.918c0.002-0.064,0.001-0.127,0.006-0.191c0.021-1.113,0.511-2.206,1.459-2.941l13.361-10.354
    76             c1.664-1.288,4.057-0.985,5.346,0.678l0.34,0.437c1.289,1.665,0.986,4.059-0.679,5.348l-9.064,7.024l9.064,7.024
    77             c1.665,1.289,1.968,3.683,0.679,5.348l-0.34,0.437c-1.289,1.663-3.682,1.966-5.346,0.678l-13.361-10.354
    78             c-0.948-0.736-1.438-1.828-1.459-2.941C4.798,1110.045,4.799,1109.982,4.797,1109.918z"/>
    79     </g>
     82    <path fill="#28A885" d="M2.201,1234.854c6.108-26.601,36.529-32.792,36.529-32.792v-8.189l18.143,18.112l-18.143,18.113v-8.189
     83        C38.73,1221.908,15.206,1220.93,2.201,1234.854z"/>
     84    <path fill="#C2C2C2" d="M2.201,1354.854c6.108-26.601,36.529-32.792,36.529-32.792v-8.189l18.143,18.112l-18.143,18.113v-8.189
     85        C38.73,1341.908,15.206,1340.93,2.201,1354.854z"/>
    8086</g>
    8187</svg>
  • expresscurate/trunk/js/Buttons.js

    r1140784 r1172885  
    166166        var arrOutboundLinks = false,
    167167            arrInboundLink = false;
    168         $(content).find('a').each(
    169             function () {
    170                 var link = getRootUrl($(this).attr("href")),
    171                     patIfRelative = /^https?:\/\//i;
     168        $(content).find('a').each(function (index, value) {
     169
     170            var link = $(value).attr("href");
     171            if (link) {
     172                link = getRootUrl(link);
     173                var patIfRelative = /^https?:\/\//i;
    172174                if (!patIfRelative.test(link) || link == getRootUrl(window.location)) {
    173175                    arrInboundLink = true;
     
    175177                    arrOutboundLinks = true;
    176178                }
    177             });
     179            }
     180
     181        });
    178182        messageHtml += arrInboundLink ? '' : '<p class="lengthSuggestion blue">This page contains no inbound links, add some where appropriate.</p>';
    179183        messageHtml += arrOutboundLinks ? '' : '<p class="lengthSuggestion blue">This page contains no outbound links, add some where appropriate.</p>';
     
    467471                    classes: "btn expresscurateCostom expresscurateAddKeyword"
    468472                });
    469                 /*console.log(tinymce.EditorManager.get('expresscurate_dialog_content_editor'));
    470                 tinymce.EditorManager.get('expresscurate_dialog_content_editor').addButton('clearContent', {
    471                     title: 'Clear editor content',
    472                     cmd: 'clearContent',
    473                     classes: "btn expresscurateCostom expresscurateAnnotate"
    474                 });*/
     473                ed.addButton('addSocialPost', {
     474                    title: 'Add Social Post',
     475                    cmd: 'addSocialPost',
     476                    classes: "btn expresscurateCostom expresscurateSocialPost"
     477                });
     478
    475479                ed.onKeyDown.add(function (ed, e) {
    476480                    if (e.altKey && e.keyCode === 75) {
     
    570574                        }
    571575                    }
     576
    572577                    ed.controlManager.setDisabled('noFollow', ed.selection.getNode().nodeName !== 'A');
     578
     579                    ed.controlManager.setDisabled('addSocialPost', tinymce.activeEditor.selection.getContent().length < 1);
    573580
    574581                    var cssClass = $node.attr('class'),
     
    624631                    ed.addCommand('addKeyword', function () {
    625632                        addKeyword();
     633                    });
     634                    ed.addCommand('addSocialPost', function () {
     635                        if (tinymce.activeEditor.selection.getContent().length > 1) {
     636                            var text = tinymce.activeEditor.selection.getContent(),
     637                                myRegExp = new RegExp('(<([^>]+)>)', 'ig');
     638
     639                            text = text.replace(myRegExp, ' ').trim();
     640                            var data = {
     641                                message: text
     642                            };
     643                            ExpressCurateSocialPostWidget.createSocialPost(data);
     644                            $('html, body').animate({
     645                                scrollTop: $("#expresscurate_social_publishing").offset().top - 40
     646                            }, 700);
     647                        }
    626648                    });
    627649                }
  • expresscurate/trunk/js/socialPostWidget.js

    r1162493 r1172885  
    11var ExpressCurateSocialPostWidget = (function ($) {
    2     var widget;
    3 
    4     function parseContent(block) {
     2    var widget,
     3        maxLength = 110,
     4        posts = [];
     5
     6    function uniqueId() {
     7        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
     8            var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
     9            return v.toString(16);
     10        });
     11    }
     12
     13    function parseContent() {
    514        var $contentWrap = $('#content'),
    615            content = (($contentWrap.css("display") === "block") ? $contentWrap.val() : tinyMCE.get("content").getContent()),
    7             myRegExp = new RegExp('(<([^>]+)>)', 'ig'),
    8         //$input = block.find('.expresscurate_social_post_content'),
    9             $cloneContent = $(content).clone().wrapAll('<span></span>');
    10         //console.log($cloneContent/*.find('h'+i).html()*/);
    11 
    12         content = content.replace(myRegExp, "\n\r");
    13         content = content.replace(/ {2,}/g, ' ');
    14         content = $("<div/>").html(content).text();
     16            myRegExp = new RegExp('(<([^>]+)>)', 'ig');
     17
     18        content = content.split('<p>');
     19        for (var i = 0; i < content.length; i++) {
     20            content[i] = content[i].replace(myRegExp, ' ').trim();
     21        }
     22        content = content.filter(function (el) {
     23            return el.length !== 0;
     24        });
     25
    1526        return content;
    1627    }
     
    1930        var $contentWrap = $('#content'),
    2031            content = (($contentWrap.css("display") === "block") ? $contentWrap.val() : tinyMCE.get("content").getContent()),
    21             text = $(content).find(header).text();
    22         if (text.length > 1) {
    23             return ExpressCurateUtils.getTemplate('socialPostWidget', text);
     32            data = {
     33                message: $(content).find(header).text()
     34            };
     35        if (data.message.length > 1) {
     36            createSocialPost(data);
    2437        } else {
    2538            return false;
     
    2740    }
    2841
     42    function createSocialPost(data) {
     43
     44        var blockId = (data && data.id) ? data.id : uniqueId(),
     45            message = data ? data.message : '',
     46            messageCounter = maxLength - message.length,
     47            post = {
     48                id: blockId,
     49                message: message,
     50                approved: false,
     51                postLength: messageCounter,
     52                errorColor: (messageCounter < 0) ? 'error' : ''
     53            };
     54        posts.push(post);
     55        updatePosts(posts);
     56        $('.mainControls').after(ExpressCurateUtils.getTemplate('socialPostWidget', post));
     57
     58    }
     59
     60    function postLengthValidation($block) {
     61        var $textarea = $block.find('textarea'),
     62            $countWrap = $block.find('.expresscurate_socialPostLength'),
     63            textLength = $textarea.val().length,
     64            count = maxLength - textLength;
     65
     66        if (count < 0) {
     67            $countWrap.addClass('error');
     68        } else {
     69            $countWrap.removeClass('error');
     70        }
     71        return count;
     72    }
     73
     74    function updatePosts(posts) {
     75        $.ajax({
     76            type: 'POST',
     77            url: 'admin-ajax.php?action=expresscurate_save_post_messages',
     78            data: {
     79                post_id: $('#expresscurate_postId').val(),
     80                messages: JSON.stringify(posts)
     81            }
     82        });
     83    }
     84
    2985    function setupSocial() {
     86        var $metaTag = $('#expresscurate_social_post_messages');
     87
     88        if ($metaTag.length) {
     89            var savedPosts = $metaTag.val();
     90            var data = (savedPosts.length > 1) ? $.parseJSON(savedPosts) : [];
     91            $.each(data, function (index, value) {
     92                posts.push(value);
     93            });
     94        }
    3095        widget = $('.expresscurate_social_post_widget');
    31         widget.on('click', '.expresscurate_social_get_content', function (e) {
    32             e.preventDefault();
    33             var $this = $(this),
    34                 data = parseContent($this.parents('.expresscurate_tweetBlock')),
    35                 tweetHTML = ExpressCurateUtils.getTemplate('socialPostWidget', data);
    36             $this.parent('ul').after(tweetHTML);
    37         });
    38         $('#expresscurate_addTweet').on('click', function (e) {
    39             e.preventDefault();
    40             var tweetHTML = ExpressCurateUtils.getTemplate('socialPostWidget', '');
    41             $(this).parent('ul').after(tweetHTML);
    42         });
    43         $('.expresscurate_headerTweet').on('click', function (e) {
    44             e.preventDefault();
    45             var tweetHTML = getHeader($(this).data('header'));
    46             if (tweetHTML) {
    47                 $(this).parent('ul').after(tweetHTML);
    48             }
    49         });
    50         widget.on('click', '.expresscurate_tweetBlock .approve', function () {
    51             var $block = $(this).parent('.expresscurate_tweetBlock'),
    52                 messages=[],
    53                 message = {
    54                     id: '5540b4e3dc302f2a02a9c09d',
    55                     message: 'last test',
    56                     approved: true
    57                 };
    58             messages.push(message);
    59            /* console.log($('#expresscurate_postId').val());
    60             console.log(JSON.stringify(messages));*/
    61             $.ajax({
    62                 type: 'POST',
    63                 url: 'admin-ajax.php?action=expresscurate_save_post_messages',
    64                 data: {
    65                     post_id: $('#expresscurate_postId').val(),
    66                     messages: JSON.stringify(messages)
    67                 }
    68             });
    69 
    70 
    71             ///
    72           /*  var items = [],
    73                 item = {};
    74             $.each(els, function (index, el) {
    75                 item['link'] = $(el).find('.url').attr('href');
    76                 items.push(item);
    77                 item = {};
    78             });
    79 
    80             $.ajax({
    81                 type: 'POST',
    82                 url: 'admin-ajax.php?action=expresscurate_bookmarks_delete',
    83                 data: {items: JSON.stringify(items)}
    84             });*/
    85         });
     96
     97        /*delete*/
     98        widget.on('click', '.expresscurate_socialPostBlock .close', function () {
     99            var $block = $(this).parents('.expresscurate_socialPostBlock'),
     100                id = $block.attr('id');
     101            $block.remove();
     102            posts = posts.filter(function (el) {
     103                return el.id !== id;
     104            });
     105            updatePosts(posts);
     106        });
     107        /*post edit*/
     108        widget.on('blur', '.expresscurate_socialPostBlock textarea', function () {
     109            var $this = $(this),
     110                $block = $this.parents('.expresscurate_socialPostBlock'),
     111                blockId = $block.attr('id'),
     112                text = $this.val();
     113            $.each(posts, function (index, value) {
     114                if (value.id == blockId) {
     115                    value.message = text;
     116                    updatePosts(posts);
     117                }
     118            });
     119        });
     120        widget.on('change', '.expresscurate_socialPostBlock select', function () {
     121            var $this = $(this),
     122                $block = $this.parents('.expresscurate_socialPostBlock'),
     123                blockId = $block.attr('id'),
     124                selectedAccount = $this.val(),
     125                username = $this.text();
     126
     127            $.each(posts, function (index, value) {
     128                if (value.id == blockId) {
     129                    value.profile_ids = selectedAccount;
     130                    value.formatted_username = username;
     131                    updatePosts(posts);
     132                }
     133            });
     134        });
     135        /*length validation*/
     136        widget.on('keyup', '.expresscurate_socialPostBlock textarea', function () {
     137            var $this = $(this),
     138                $postLengthWrap = $this.parents('.expresscurate_socialPostBlock').find('.expresscurate_socialPostLength');
     139
     140            $postLengthWrap.text(postLengthValidation($(this).parents('.expresscurate_socialPostBlock')));
     141        });
     142        /*get content*/
     143        widget.on('click', '.expresscurate_social_get_content', function () {
     144            var $this = $(this),
     145                content = parseContent();
     146            $.each(content, function (index, value) {
     147                var data = {
     148                    message: value
     149                };
     150                createSocialPost(data);
     151            });
     152        });
     153        /*add new*/
     154        $('#expresscurate_addTweet').on('click', function () {
     155            createSocialPost(null);
     156        });
     157        /*post from headers*/
     158        $('.expresscurate_headerTweet').on('click', function () {
     159            getHeader($(this).data('header'));
     160        });
     161        /*get social title*/
     162        widget.on('click', '#expresscurate_socialTitlePost', function () {
     163            var $this = $(this);
     164            if ($('#expresscurate_advanced_seo')) {
     165                var data = {
     166                    message: $('#expresscurate_advanced_seo_social_title').val()
     167                };
     168                createSocialPost(data);
     169            }
     170        });
     171        /*get social description*/
     172        widget.on('click', '#expresscurate_socialDescriptionPost', function () {
     173            var $this = $(this);
     174            if ($('#expresscurate_advanced_seo')) {
     175                var data = {
     176                    message: $('#expresscurate_advanced_seo_social_desc').val()
     177                };
     178                createSocialPost(data);
     179            }
     180        });
     181        /*get social short description*/
     182        widget.on('click', '#expresscurate_socialShortDescriptionPost', function () {
     183            var $this = $(this);
     184            if ($('#expresscurate_advanced_seo')) {
     185                var data = {
     186                    message: $('#expresscurate_advanced_seo_social_shortdesc').val()
     187                };
     188                createSocialPost(data);
     189            }
     190        });
     191        /*approve*/
     192        widget.on('click', '.expresscurate_socialPostBlock .approve', function () {
     193            var $block = $(this).parents('.expresscurate_socialPostBlock'),
     194                blockId = $block.attr('id'),
     195                $edit = $block.find('.edit'),
     196                option = $block.find('#profile option:selected'),
     197                profileId = option.val(),
     198                username = option.text();
     199
     200            $.each(posts, function (index, value) {
     201                if (value.id == blockId) {
     202                    value.approved = true;
     203                    value.profile_ids = profileId;
     204                    value.formatted_username = username;
     205                    value.message = value.message.slice(0, maxLength);
     206                }
     207            });
     208
     209            updatePosts(posts);
     210
     211            $block.find('li').addClass('expresscurate_displayNone');
     212            $block.find('textarea').attr('readonly', 'true');
     213            $block.find('select').attr('disabled', 'true');
     214            $edit.removeClass('expresscurate_displayNone');
     215        });
     216        /*edit*/
     217        widget.on('click', '.expresscurate_socialPostBlock .edit', function () {
     218
     219            var $block = $(this).parents('.expresscurate_socialPostBlock'),
     220                blockId = $block.attr('id'),
     221                $edit = $block.find('.edit');
     222
     223            $.each(posts, function (index, value) {
     224                if (value.id == blockId) {
     225                    value.approved = false;
     226                }
     227            });
     228
     229            updatePosts(posts);
     230
     231            $block.find('li').removeClass('expresscurate_displayNone');
     232            $block.find('textarea').removeAttr('readonly');
     233            $block.find('select').removeAttr('disabled');
     234            $edit.addClass('expresscurate_displayNone');
     235        });
     236        /*clone*/
     237        widget.on('click', '.expresscurate_socialPostBlock .clone', function () {
     238            var $block = $(this).parents('.expresscurate_socialPostBlock'),
     239                post = null,
     240                blockId = $block.attr('id');
     241
     242            $.each(posts, function (index, value) {
     243                if (value.id == blockId) {
     244                    post = value;
     245                }
     246            });
     247            var clone = $.extend({}, post);
     248            clone.id = uniqueId();
     249            posts.push(clone);
     250
     251            updatePosts(posts);
     252            $('.mainControls').after(ExpressCurateUtils.getTemplate('socialPostWidget', post));
     253
     254
     255        });
     256
    86257    }
    87258
     
    96267                });
    97268            }
    98         }
    99     }
    100 })(window.jQuery);
     269        },
     270        createSocialPost: createSocialPost
     271    }
     272})
     273(window.jQuery);
    101274
    102275ExpressCurateSocialPostWidget.setup();
  • expresscurate/trunk/readme.txt

    r1165793 r1172885  
    55Requires at least: 3.9
    66Tested up to: 4.2.2
    7 Stable tag: 2.0.16
     7Stable tag: 2.1.0
    88License: GPLv3 or later
    99License URI: http://www.gnu.org/licenses/gpl.html
     
    6868
    6969* **Publishing Options** - ExpressCurate provides you with flexibility to publish your curated post immediately, schedule it for a later time, or smart-publish automatically based on time intervals specified by you.
    70 
     70* **Social Media Promotion** - The Social Media Widget integrates your Social Media Publishing efforts with ExpressCurate. This is a single complex for social media promotions, content optimization and sharing.
    7171
    7272
     
    8181
    8282= How To Get Started =
    83 [Download ExpressCurate plugin](http://downloads.wordpress.org/plugin/expresscurate.2.0.16.zip "Your favorite content marketing tools") for WordPress. 
     83[Download ExpressCurate plugin](http://downloads.wordpress.org/plugin/expresscurate.2.1.0.zip "Your favorite content marketing tools") for WordPress. 
    8484You can also [download](http://www.expresscurate.com/p/products/wordpress-theme "Your favorite WordPress Theme") a **free** [ExpressCurate WordPress theme](http://www.expresscurate.com/p/products/wordpress-theme "Your favorite WordPress Theme"). It will give your curated content a modern online news look.
    8585
     
    131131== Changelog ==
    132132
     133= 2.1.0 =
     134* New Feature: Social Widget for Social Media Promotion
     135* Miscellaneous bug fixes and improvements.
     136
    133137= 2.0.16 =
    134138* Miscellaneous bug fixes and improvements.
  • expresscurate/trunk/templates/dashboard.php

    r1162493 r1172885  
    2424
    2525        <h2>ExpressCurate</h2>
    26         <label></label>
    2726    </div>
    2827    <div class="expresscurate_blocksContainer expresscurate_masonryWrap">
  • expresscurate/trunk/templates/dashboard/social_publishing_widget.php

    r1162493 r1172885  
    1111                foreach ($profiles as $i => $profile) {
    1212                    $counts = $profile->counts;
     13                    $formatedService= (strpos($profile->formatted_service,'Google') !== false)? 'Google' :$profile->formatted_service;
    1314                    ?>
    1415                    <li class="expresscurate_background_wrap">
    15                         <div class="expresscurate_social_box expresscurate_social_box_<?php echo $profile->formatted_service ?>">
     16                        <div class="expresscurate_social_box expresscurate_social_box_<?php echo $formatedService; ?>">
    1617                            <span class="text"><?php echo $profile->formatted_username ?></span>
    1718                            <span class="dailySuggestions"><span class="tooltip">daily suggestions</span><?php echo $counts->daily_suggestions; ?></span>
  • expresscurate/trunk/templates/settings.php

    r1162493 r1172885  
    301301                            </select>
    302302                    </li>
    303              <!--       <li>
     303                    <li>
    304304                        <p class="title">Social publishing </p>
    305305                        <input class="expresscurate_displayNone" type="checkbox" id="expresscurate_social_publishing"
    306306                               name="expresscurate_social_publishing" <?php
    307 /*                        if (get_option('expresscurate_social_publishing', '') == "on") {
     307                        if (get_option('expresscurate_social_publishing', '') == "on") {
    308308                            echo 'checked';
    309309                        }
    310                         */?> />
     310                        ?> />
    311311                        <label class="controls checkboxLabel" for="expresscurate_social_publishing"></label>
    312312
    313313                        <?php
    314 /*                        $blogName = urlencode(urlencode(get_bloginfo('url')));
    315                         */?>
    316                         <a class="getApiKey  <?php /*if (strlen(get_option('expresscurate_buffer_access_token')) > 2) {
     314                        $blogName = urlencode(urlencode(get_bloginfo('url')));
     315                        ?>
     316                        <a class="getApiKey  <?php if (strlen(get_option('expresscurate_buffer_access_token')) > 2) {
    317317                            echo 'expresscurate_displayNone';
    318                         } */?>"
    319                            href="https://www.expresscurate.com/api/connector/buffer/accesstoken/<?php /*echo $blogName */?>">Authorize
     318                        } ?>"
     319                           href="https://www.expresscurate.com/api/connector/buffer/accesstoken/<?php echo $blogName ?>">Authorize
    320320                            access to Buffer</a>
    321321                    </li>
    322                     <div
    323                         class="socialPublishingWrap <?php /*if (get_option('expresscurate_social_publishing', '') !== "on") {
     322                    <div class="socialPublishingWrap <?php if (get_option('expresscurate_social_publishing', '') !== "on") {
    324323                            echo 'expresscurate_displayNone';
    325                         } */?> ">
     324                        } ?> ">
    326325
    327326                        <?php
    328 /*                        $buffer = new ExpressCurate_BufferClient();
     327                        $buffer = new ExpressCurate_BufferClient();
    329328                        $profiles = $buffer->getProfiles();
    330329                        if (!empty($profiles)) {
     
    336335                            foreach ($profiles as $i => $profile) {
    337336                                $profileId = $profile->id;
    338                                 */?>
     337                                ?>
    339338                                <li>
    340                                     <p class="title"><?php /*echo $profile->formatted_service; */?>
    341                                         / <?php /*echo $profile->formatted_username; */?></p>
    342                                     <input data-id="<?php /*echo $profileId; */?>"
     339                                    <p class="title"><?php echo $profile->formatted_service; ?>
     340                                        / <?php echo $profile->formatted_username; ?></p>
     341                                    <input data-id="<?php echo $profileId; ?>"
    343342                                           class="expresscurate_displayNone expresscurate_social_publishing_profile"
    344343                                           type="checkbox"
    345                                            id="expresscurate_social_publishing_<?php /*echo $profileId; */?>"
    346                                            name="expresscurate_social_publishing_<?php /*echo $profileId; */?>" <?php /*if ($profilesStatus->$profileId == 'on' || empty($profilesStatus->$profileId)) {
     344                                           id="expresscurate_social_publishing_<?php echo $profileId; ?>"
     345                                           name="expresscurate_social_publishing_<?php echo $profileId; ?>" <?php if ($profilesStatus->$profileId == 'on' || empty($profilesStatus->$profileId)) {
    347346                                        echo 'checked="checked"';
    348                                     }  */?> />
     347                                    }  ?> />
    349348                                    <label class="controls checkboxLabel"
    350                                            for="expresscurate_social_publishing_<?php /*echo $profileId; */?>"></label>
     349                                           for="expresscurate_social_publishing_<?php echo $profileId; ?>"></label>
    351350                                </li>
    352351                            <?php
    353 /*                            }
    354                             */?>
    355                             <input type="hidden" value="<?php /*echo stripslashes(get_option('expresscurate_social_publishing_profiles', '')); */?>" id="expresscurate_social_publishing_profiles" name="expresscurate_social_publishing_profiles"/>
     352                            }
     353                            ?>
     354                            <input type="hidden" value="<?php echo stripslashes(get_option('expresscurate_social_publishing_profiles', '')); ?>" id="expresscurate_social_publishing_profiles" name="expresscurate_social_publishing_profiles"/>
    356355                        <?php
    357 /*                        }
    358                         */?>
    359                     </div>-->
     356                        }
     357                        ?>
     358                    </div>
    360359
    361360                </ul>
  • expresscurate/trunk/templates/social_posts_widget.php

    r1162493 r1172885  
    11<?php
     2global $post;
    23$buffer = new ExpressCurate_BufferClient();
    34$profiles = $buffer->getProfiles();
     5
     6$profilesStatus = array();
     7if (get_option('expresscurate_social_publishing_profiles', '')) {
     8    $profilesStatus = json_decode(stripslashes(urldecode(get_option('expresscurate_social_publishing_profiles', ''))));
     9}
     10
     11$publishedPosts = get_post_meta($post->ID, '_expresscurate_social_published_post_messages', true);
     12$posts = get_post_meta($post->ID, '_expresscurate_social_post_messages', true);
     13$postLength = 110;
    414?>
    515<div class="expresscurate_social_post_widget">
     16    <input id="expresscurate_postId" type="hidden" value="<?php echo $post->ID; ?>"/>
     17
     18    <input type="hidden" id="expresscurate_social_post_messages" name="expresscurate_social_post_messages"
     19           value="<?php echo htmlspecialchars(json_encode($posts),ENT_QUOTES); ?>"/>
     20
     21
    622    <ul class="mainControls">
    7         <li id="expresscurate_addTweet" class="expresscurate_social_widget_buttons">Create</li>
     23        <li id="expresscurate_addTweet" class="expresscurate_social_widget_buttons">New</li>
    824        <li class="expresscurate_social_widget_buttons expresscurate_social_get_content">Get content</li>
    925        <li data-header="h1" class="expresscurate_headerTweet expresscurate_social_widget_buttons">H1</li>
    1026        <li data-header="h2" class="expresscurate_headerTweet expresscurate_social_widget_buttons">H2</li>
    1127        <li data-header="h3" class="expresscurate_headerTweet expresscurate_social_widget_buttons">H3</li>
     28
     29        <li id="expresscurate_socialTitlePost" class="expresscurate_social_widget_buttons">Social Title</li>
     30        <li id="expresscurate_socialDescriptionPost" class="expresscurate_social_widget_buttons">Social Description</li>
     31        <li id="expresscurate_socialShortDescriptionPost" class="expresscurate_social_widget_buttons">Social Short
     32            Description
     33        </li>
    1234    </ul>
    13     <input id="expresscurate_postId" type="hidden" value="<?php echo the_ID(); ?>"/>
    1435
     36    <?php
     37    if (!empty($posts)) {
     38        foreach ($posts as $i => $data) {
     39            $postLengthCount = $postLength - strlen($data['message']);
     40            $approved=$data['approved'];?>
     41            <div class="expresscurate_socialPostBlock" id="<?php echo $data['id']; ?>">
     42                <ul class="topControls">
     43
     44                    <?php if (!empty($profiles)) { ?>
     45                        <select name="profile" id="profile" <?php if($approved) echo 'disabled="disabled"' ?> >
     46                            <?php
     47                            foreach ($profiles as $profile) {
     48                                $profileId = $profile->id;
     49                                if ($profilesStatus->$profileId == 'on' || empty($profilesStatus->$profileId)) {
     50                                    ?>
     51                                    <option <?php
     52                                    if ($profileId == $data['profile_ids']) {
     53                                        echo 'selected="selected"';
     54                                    }
     55                                    ?> value="<?php echo $profileId; ?>"><?php echo $profile->formatted_service; ?> / <?php echo $profile->formatted_username; ?></option>
     56                                <?php }
     57                            } ?>
     58                        </select>
     59                    <?php } ?>
     60
     61                    <li class="close expresscurate_floatRight <?php if($approved) echo 'expresscurate_displayNone' ?> "></li>
     62                    <div class="expresscurate_clear"></div>
     63                </ul>
     64                <textarea name="" class="expresscurate_social_post_content expresscurate_disableInputStyle" <?php if($approved) echo 'readonly="readonly"' ?>
     65                          id=""><?php echo $data['message']; ?></textarea>
     66                <ul class="bottomControls">
     67                    <li class="expresscurate_social_widget_buttons expresscurate_floatRight <?php if($approved) echo 'expresscurate_displayNone' ?> approve">Approve</li>
     68                    <li class="expresscurate_social_widget_buttons expresscurate_floatRight <?php if($approved) echo 'expresscurate_displayNone' ?> clone">Copy</li>
     69                    <li class="expresscurate_socialPostLength <?php if($approved) echo 'expresscurate_displayNone' ?> expresscurate_floatRight <?php if ($postLengthCount < 0) echo 'error'; ?>"><?php echo $postLengthCount; ?></li>
     70                    <li class="expresscurate_social_widget_buttons <?php if(!$approved) echo 'expresscurate_displayNone' ?> edit">Edit</li>
     71                    <div class="expresscurate_clear"></div>
     72                </ul>
     73            </div>
     74        <?php }
     75    }
     76
     77    if (!empty($publishedPosts)) {
     78        foreach ($publishedPosts as $i => $data) {
     79            ?>
     80            <div class="expresscurate_socialPostBlock" id="<?php echo $data['id']; ?>">
     81                <ul class="topControls">
     82                    <li><?php echo $data['formatted_username']; ?></li>
     83                </ul>
     84                <span class="expresscurate_social_post_content_published"><?php echo $data['message']; ?></span>
     85                <ul class="bottomControls">
     86                    <li class="expresscurate_socialPostLength expresscurate_floatRight">Scheduled</li>
     87                    <div class="expresscurate_clear"></div>
     88                </ul>
     89            </div>
     90        <?php }
     91    }
     92    ?>
    1593</div>
    1694
    1795<script type="text/html" id="tmpl-socialPostWidget">
    18     <div class="expresscurate_tweetBlock">
     96    <div class="expresscurate_socialPostBlock" id="{{data.id}}">
    1997        <ul class="topControls">
    20             <li class="close expresscurate_floatRight" ></li>
     98            <?php if (!empty($profiles)) { ?>
     99                <select name="profile" id="profile">
     100                    <?php
     101                    foreach ($profiles as $profile) {
     102                        $profileId = $profile->id;
     103                        if ($profilesStatus->$profileId == 'on' || empty($profilesStatus->$profileId)) {
     104                            ?>
     105                            <option value="<?php echo $profileId; ?>"><?php echo $profile->formatted_service; ?> / <?php echo $profile->formatted_username; ?></option>
     106                        <?php }
     107                    } ?>
     108                </select>
     109            <?php } ?>
     110            <li class="close expresscurate_floatRight"></li>
    21111            <div class="expresscurate_clear"></div>
    22112        </ul>
    23         <textarea name="" class="expresscurate_social_post_content expresscurate_disableInputStyle" id="">{{data}}</textarea>
     113        <textarea name="" class="expresscurate_social_post_content expresscurate_disableInputStyle"
     114                  id="">{{data.message}}</textarea>
    24115        <ul class="bottomControls">
    25             <li class="expresscurate_social_widget_buttons approve">Approve</li>
     116            <li class="expresscurate_social_widget_buttons approve expresscurate_floatRight">Approve</li>
     117            <li class="expresscurate_social_widget_buttons clone expresscurate_floatRight">Copy</li>
     118            <li class="expresscurate_socialPostLength expresscurate_floatRight {{data.errorColor}}">
     119                {{data.postLength}}
     120            </li>
     121            <li class="expresscurate_social_widget_buttons expresscurate_displayNone edit">Edit</li>
     122            <div class="expresscurate_clear"></div>
    26123        </ul>
    27124    </div>
Note: See TracChangeset for help on using the changeset viewer.