Plugin Directory

Changeset 3449105


Ignore:
Timestamp:
01/28/2026 11:43:13 PM (2 months ago)
Author:
10up
Message:

Update to version 2.3.2 from GitHub

Location:
autoshare-for-twitter
Files:
2 added
18 edited
1 copied

Legend:

Unmodified
Added
Removed
  • autoshare-for-twitter/tags/2.3.2/autoshare-for-twitter.php

    r3327663 r3449105  
    44 * Description:       Automatically shares the post title or custom message and a link to the post to X/Twitter.
    55 * Disclaimer:        TWITTER, TWEET, RETWEET and the Twitter logo are trademarks of Twitter, Inc. or its affiliates.
    6  * Version:           2.3.1
    7  * Requires at least: 6.6
     6 * Version:           2.3.2
     7 * Requires at least: 6.8
    88 * Requires PHP:      7.4
    99 * Author:            10up
     
    2323
    2424define( 'AUTOSHARE_FOR_TWITTER', __FILE__ );
    25 define( 'AUTOSHARE_FOR_TWITTER_VERSION', '2.3.1' );
     25define( 'AUTOSHARE_FOR_TWITTER_VERSION', '2.3.2' );
    2626define( 'AUTOSHARE_FOR_TWITTER_URL', plugin_dir_url( __FILE__ ) );
    2727define( 'AUTOSHARE_FOR_TWITTER_PATH', plugin_dir_path( __FILE__ ) );
  • autoshare-for-twitter/tags/2.3.2/dist/autoshare-for-twitter.asset.php

    r3327663 r3449105  
    1 <?php return array('dependencies' => array('lodash', 'react-jsx-runtime', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-edit-post', 'wp-element', 'wp-i18n', 'wp-plugins', 'wp-primitives'), 'version' => 'd9b56b74e9cf28181dfd');
     1<?php return array('dependencies' => array('lodash', 'react-jsx-runtime', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-edit-post', 'wp-element', 'wp-i18n', 'wp-plugins', 'wp-primitives'), 'version' => 'da37bd91155b3fa9601f');
  • autoshare-for-twitter/tags/2.3.2/dist/autoshare-for-twitter.js

    r3327663 r3449105  
    1 (()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var s in r)e.o(r,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:r[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{setAllowTweetImage:()=>P,setAutoshareEnabled:()=>j,setErrorMessage:()=>v,setLoaded:()=>A,setOverriding:()=>S,setSaving:()=>y,setTweetAccounts:()=>L,setTweetText:()=>E});var r={};e.r(r),e.d(r,{getAllowTweetImage:()=>D,getAutoshareEnabled:()=>k,getErrorMessage:()=>N,getOverriding:()=>C,getSaving:()=>I,getTweetAccounts:()=>O,getTweetText:()=>M});const s=window.wp.element,a=window.wp.plugins,o=window.wp.editPost,i=window.wp.data,n=window.wp.components,l=window.wp.i18n,c="SET_AUTOSHARE_FOR_TWITTER_ENABLED",u="SET_ERROR_MESSAGE",d="SET_LOADED",h="SET_OVERRIDING",w="SET_SAVING",g="SET_TWEET_TEXT",m="SET_ALLOW_TWEET_IMAGE",p="SET_TWEET_ACCOUNTS",{enabled:_,allowTweetImage:f,tweetAccounts:x,customTweetBody:T}=adminAutoshareForTwitter,b={autoshareEnabled:!!_&&"0"!==_,errorMessage:"",loaded:!1,overriding:!!T,overrideLength:0,tweetText:T||"",allowTweetImage:!!f,tweetAccounts:x||[]};const j=e=>({type:c,autoshareEnabled:e}),v=e=>({type:u,errorMessage:e}),A=()=>({type:d}),S=e=>({type:h,overriding:e}),y=e=>({type:w,saving:e}),E=e=>({type:g,tweetText:e}),P=e=>({type:m,allowTweetImage:e}),L=e=>({type:p,tweetAccounts:e}),k=e=>e.autoshareEnabled,N=e=>e.errorMessage,C=e=>e.overriding,I=e=>e.saving,M=e=>e.tweetText,D=e=>e.allowTweetImage,O=e=>e.tweetAccounts||[],F="10up/autoshare",X=window.wp.primitives,R=window.ReactJSXRuntime,z=e=>(0,R.jsx)(X.SVG,{version:"1.1",xmlSpace:"preserve",width:256,height:256,viewBox:"0 0 256 256",children:(0,R.jsxs)("g",{style:{stroke:"none",strokeWidth:0,strokeDasharray:"none",strokeLinecap:"butt",strokeLinejoin:"miter",strokeMiterlimit:10,fill:"none",fillRule:"nonzero",opacity:1},children:[(0,R.jsx)("path",{d:"M45 90C20.147 90 0 69.853 0 45S20.147 0 45 0s45 20.147 45 45-20.147 45-45 45z",style:{stroke:"none",strokeWidth:1,strokeDasharray:"none",strokeLinecap:"butt",strokeLinejoin:"miter",strokeMiterlimit:10,fill:e,fillRule:"nonzero",opacity:1},transform:"matrix(2.33 0 0 2.33 22.612 22.612)"}),(0,R.jsx)("path",{d:"M17.884 19.496 38.925 47.63 17.751 70.504h4.765l18.538-20.027 14.978 20.027h16.217L50.024 40.788l19.708-21.291h-4.765L47.895 37.94 34.101 19.496H17.884zm7.008 3.51h7.45L65.24 66.993h-7.45L24.892 23.006z",style:{stroke:"none",strokeWidth:1,strokeDasharray:"none",strokeLinecap:"butt",strokeLinejoin:"miter",strokeMiterlimit:10,fill:"#fff",fillRule:"nonzero",opacity:1},transform:"matrix(2.33 0 0 2.33 22.612 22.612)"})]})}),B=z("#1B1C20"),U=z("#1DA1F2"),W=z("#787E88"),$=z("#D0494A"),G=z("#7FD051"),H=e=>{let t=B;return e&&(t="published"===e?G:"error"===e?$:B),(0,R.jsx)(n.Icon,{className:"autoshare-for-twitter-icon",icon:t,size:48})},K=window.wp.apiFetch;var q=e.n(K);const V=window.lodash,{enableAutoshareKey:J,errorText:Y,restUrl:Q,tweetBodyKey:Z,allowTweetImageKey:ee,tweetAccountsKey:te}=adminAutoshareForTwitter;function re(){const{tweetText:e}=(0,i.useSelect)((e=>({tweetText:e(F).getTweetText()}))),{setTweetText:t}=(0,i.useDispatch)(F);return[e,t]}function se(){const{autoshareEnabled:e}=(0,i.useSelect)((e=>({autoshareEnabled:e(F).getAutoshareEnabled()}))),{setAutoshareEnabled:t}=(0,i.useDispatch)(F);return[e,t]}function ae(){const{allowTweetImage:e}=(0,i.useSelect)((e=>({allowTweetImage:e(F).getAllowTweetImage()}))),{setAllowTweetImage:t}=(0,i.useDispatch)(F);return[e,t]}function oe(){const{tweetAccounts:e}=(0,i.useSelect)((e=>({tweetAccounts:e(F).getTweetAccounts()}))),{setTweetAccounts:t}=(0,i.useDispatch)(F);return[e,t]}function ie(){const{errorMessage:e}=(0,i.useSelect)((e=>({errorMessage:e(F).getErrorMessage()}))),{setErrorMessage:t}=(0,i.useDispatch)(F);return[e,t]}function ne(){const{imageId:e}=(0,i.useSelect)((e=>({imageId:e("core/editor").getEditedPostAttribute("featured_media")})));return e>0}function le(){const[e]=se(),[t]=ae(),[r]=oe(),[a]=re(),[,o]=ie(),[,n]=function(){const{saving:e}=(0,i.useSelect)((e=>({saving:e(F).getSaving()})));return[e,function(e){(0,i.dispatch)(F).setSaving(e),e?(0,i.dispatch)("core/editor").lockPostSaving():(0,i.dispatch)("core/editor").unlockPostSaving()}]}(),{hasFeaturedImage:c}=(0,i.useSelect)((e=>({hasFeaturedImage:e("core/editor").getEditedPostAttribute("featured_media")>0}))),u=(0,s.useCallback)((0,V.debounce)((async function(e,t,r,s){const a={};a[J]=e,a[Z]=t,a[ee]=r,a[te]=s||[];try{n(!0);const e=await q()({url:Q,data:a,method:"POST",parse:!1});if(!e.ok)throw e;await e.json(),o(""),n(!1)}catch(e){o(e.statusText?`${Y} ${e.status}: ${e.statusText}`:(0,l.__)("An error occurred.","autoshare-for-twitter")),n(!1)}}),250),[]);(0,s.useEffect)((()=>{u(e,a,t,r)}),[e,a,c,t,r,u])}const{siteUrl:ce,isLocalSite:ue,twitterURLLength:de}=adminAutoshareForTwitter;function he(){const e=e=>{if(!ue&&!isNaN(de))return Number(de);const t=e("core/editor").getPermalink();if(t)return t.length;const r=e("core/editor").getEditedPostAttribute("title");return r&&"rendered"in r?(ce+r.rendered).length:ce.length},{permalinkLength:t,maxLength:r}=(0,i.useSelect)((t=>({permalinkLength:e(t),maxLength:275-e(t)}))),[a,o]=re(),{tweetLength:c,overrideLengthClass:u}=(()=>{const e=t+a.length+5;return 280<=e?{tweetLength:(0,l.sprintf)(/* translators: %d is tweet message character count */ /* translators: %d is tweet message character count */
     1(()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var s in r)e.o(r,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:r[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{setAllowTweetImage:()=>P,setAutoshareEnabled:()=>j,setErrorMessage:()=>v,setLoaded:()=>A,setOverriding:()=>S,setSaving:()=>y,setTweetAccounts:()=>L,setTweetText:()=>E});var r={};e.r(r),e.d(r,{getAllowTweetImage:()=>D,getAutoshareEnabled:()=>k,getErrorMessage:()=>N,getOverriding:()=>C,getSaving:()=>I,getTweetAccounts:()=>O,getTweetText:()=>M});const s=window.wp.element,o=window.wp.plugins,a=window.wp.editPost,i=window.wp.data,n=window.wp.components,l=window.wp.i18n,c="SET_AUTOSHARE_FOR_TWITTER_ENABLED",u="SET_ERROR_MESSAGE",d="SET_LOADED",h="SET_OVERRIDING",w="SET_SAVING",g="SET_TWEET_TEXT",m="SET_ALLOW_TWEET_IMAGE",p="SET_TWEET_ACCOUNTS",{enabled:_,allowTweetImage:f,tweetAccounts:x,customTweetBody:T}=adminAutoshareForTwitter,b={autoshareEnabled:!!_&&"0"!==_,errorMessage:"",loaded:!1,overriding:!!T,overrideLength:0,tweetText:T||"",allowTweetImage:!!f,tweetAccounts:x||[]};const j=e=>({type:c,autoshareEnabled:e}),v=e=>({type:u,errorMessage:e}),A=()=>({type:d}),S=e=>({type:h,overriding:e}),y=e=>({type:w,saving:e}),E=e=>({type:g,tweetText:e}),P=e=>({type:m,allowTweetImage:e}),L=e=>({type:p,tweetAccounts:e}),k=e=>e.autoshareEnabled,N=e=>e.errorMessage,C=e=>e.overriding,I=e=>e.saving,M=e=>e.tweetText,D=e=>e.allowTweetImage,O=e=>e.tweetAccounts||[],F="10up/autoshare",R=window.wp.primitives,X=window.ReactJSXRuntime,z=e=>(0,X.jsx)(R.SVG,{version:"1.1",xmlSpace:"preserve",width:256,height:256,viewBox:"0 0 256 256",children:(0,X.jsxs)("g",{style:{stroke:"none",strokeWidth:0,strokeDasharray:"none",strokeLinecap:"butt",strokeLinejoin:"miter",strokeMiterlimit:10,fill:"none",fillRule:"nonzero",opacity:1},children:[(0,X.jsx)("path",{d:"M45 90C20.147 90 0 69.853 0 45S20.147 0 45 0s45 20.147 45 45-20.147 45-45 45z",style:{stroke:"none",strokeWidth:1,strokeDasharray:"none",strokeLinecap:"butt",strokeLinejoin:"miter",strokeMiterlimit:10,fill:e,fillRule:"nonzero",opacity:1},transform:"matrix(2.33 0 0 2.33 22.612 22.612)"}),(0,X.jsx)("path",{d:"M17.884 19.496 38.925 47.63 17.751 70.504h4.765l18.538-20.027 14.978 20.027h16.217L50.024 40.788l19.708-21.291h-4.765L47.895 37.94 34.101 19.496H17.884zm7.008 3.51h7.45L65.24 66.993h-7.45L24.892 23.006z",style:{stroke:"none",strokeWidth:1,strokeDasharray:"none",strokeLinecap:"butt",strokeLinejoin:"miter",strokeMiterlimit:10,fill:"#fff",fillRule:"nonzero",opacity:1},transform:"matrix(2.33 0 0 2.33 22.612 22.612)"})]})}),B=z("#1B1C20"),U=z("#1DA1F2"),W=z("#787E88"),$=z("#D0494A"),G=z("#7FD051"),H=e=>{let t=B;return e&&(t="published"===e?G:"error"===e?$:B),(0,X.jsx)(n.Icon,{className:"autoshare-for-twitter-icon",icon:t,size:48})},K=window.wp.apiFetch;var q=e.n(K);const V=window.lodash,{enableAutoshareKey:J,errorText:Y,restUrl:Q,tweetBodyKey:Z,allowTweetImageKey:ee,tweetAccountsKey:te}=adminAutoshareForTwitter;function re(){const{tweetText:e}=(0,i.useSelect)(e=>({tweetText:e(F).getTweetText()})),{setTweetText:t}=(0,i.useDispatch)(F);return[e,t]}function se(){const{autoshareEnabled:e}=(0,i.useSelect)(e=>({autoshareEnabled:e(F).getAutoshareEnabled()})),{setAutoshareEnabled:t}=(0,i.useDispatch)(F);return[e,t]}function oe(){const{allowTweetImage:e}=(0,i.useSelect)(e=>({allowTweetImage:e(F).getAllowTweetImage()})),{setAllowTweetImage:t}=(0,i.useDispatch)(F);return[e,t]}function ae(){const{tweetAccounts:e}=(0,i.useSelect)(e=>({tweetAccounts:e(F).getTweetAccounts()})),{setTweetAccounts:t}=(0,i.useDispatch)(F);return[e,t]}function ie(){const{errorMessage:e}=(0,i.useSelect)(e=>({errorMessage:e(F).getErrorMessage()})),{setErrorMessage:t}=(0,i.useDispatch)(F);return[e,t]}function ne(){const{imageId:e}=(0,i.useSelect)(e=>({imageId:e("core/editor").getEditedPostAttribute("featured_media")}));return e>0}function le(){const[e]=se(),[t]=oe(),[r]=ae(),[o]=re(),[,a]=ie(),[,n]=function(){const{saving:e}=(0,i.useSelect)(e=>({saving:e(F).getSaving()}));return[e,function(e){(0,i.dispatch)(F).setSaving(e),e?(0,i.dispatch)("core/editor").lockPostSaving():(0,i.dispatch)("core/editor").unlockPostSaving()}]}(),{hasFeaturedImage:c}=(0,i.useSelect)(e=>({hasFeaturedImage:e("core/editor").getEditedPostAttribute("featured_media")>0})),u=(0,s.useCallback)((0,V.debounce)(async function(e,t,r,s){const o={};o[J]=e,o[Z]=t,o[ee]=r,o[te]=s||[];try{n(!0);const e=await q()({url:Q,data:o,method:"POST",parse:!1});if(!e.ok)throw e;await e.json(),a(""),n(!1)}catch(e){a(e.statusText?`${Y} ${e.status}: ${e.statusText}`:(0,l.__)("An error occurred.","autoshare-for-twitter")),n(!1)}},250),[]);(0,s.useEffect)(()=>{u(e,o,t,r)},[e,o,c,t,r,u])}const{siteUrl:ce,isLocalSite:ue,twitterURLLength:de}=adminAutoshareForTwitter;function he(){const e=e=>{if(!ue&&!isNaN(de))return Number(de);const t=e("core/editor").getPermalink();if(t)return t.length;const r=e("core/editor").getEditedPostAttribute("title");return r&&"rendered"in r?(ce+r.rendered).length:ce.length},{permalinkLength:t,maxLength:r}=(0,i.useSelect)(t=>({permalinkLength:e(t),maxLength:275-e(t)})),[o,a]=re(),{tweetLength:c,overrideLengthClass:u}=(()=>{const e=t+o.length+5;return 280<=e?{tweetLength:(0,l.sprintf)(/* translators: %d is tweet message character count */ /* translators: %d is tweet message character count */
    22(0,l.__)("%d - Too Long!","autoshare-for-twitter"),e),overrideLengthClass:"over-limit"}:240<=e?{tweetLength:(0,l.sprintf)(/* translators: %d is tweet message character count */ /* translators: %d is tweet message character count */
    3 (0,l.__)("%d - Getting Long!","autoshare-for-twitter"),e),overrideLengthClass:"near-limit"}:{tweetLength:`${e}`,overrideLengthClass:""}})(),d=(0,i.useSelect)((e=>e("core/editor").getEditedPostAttribute("status"))),[h,w]=(0,s.useState)("publish"===d);(0,s.useEffect)((()=>{"publish"!==d||h||(o(""),w(!0))}),[d,h]);const g=()=>(0,R.jsx)(n.Tooltip,{text:(0,l.__)("Count is inclusive of the post permalink which will be included in the final tweet.","autoshare-for-twitter"),children:(0,R.jsx)("div",{children:c})});return(0,R.jsx)(n.TextareaControl,{value:a,onChange:e=>{o(e)},className:"autoshare-for-twitter-tweet-text",maxLength:r,label:(0,R.jsxs)("span",{style:{marginTop:"0.5rem",display:"block"},className:"autoshare-for-twitter-prepublish__message-label",children:[(0,R.jsxs)("span",{children:[(0,l.__)("Custom message:","autoshare-for-twitter")," "]}),(0,R.jsx)("span",{id:"autoshare-for-twitter-counter-wrap",className:`alignright ${u}`,children:(0,R.jsx)(g,{})})]})})}const we=window.wp.date,{connectedAccounts:ge,connectAccountUrl:me}=adminAutoshareForTwitter,pe=(0,we.getSettings)();function _e(){const e=ge?Object.values(ge):[],[t]=e,[r]=oe();return(0,R.jsxs)("div",{className:"autoshare-for-twitter-accounts-wrapper",children:[e.map((e=>(0,R.jsx)(fe,{...e},e.id))),t&&r?.length>0&&(0,R.jsx)(Te,{...t}),r?.length>0&&(0,R.jsx)("div",{className:"autoshare-for-twitter-rate-monitor__disclaimer",children:(0,R.jsxs)("p",{children:[(0,R.jsx)("strong",{children:(0,l.__)("Note:","autoshare-for-twitter")})," ",(0,l.__)("The displayed API rate limits are updated only when a tweet is posted. Since there is no dedicated endpoint for real-time usage data, the information provided may not fully reflect the current API usage, especially if other tweets are made through the same app.","autoshare-for-twitter")]})}),(0,R.jsx)("span",{className:"connect-account-link",children:(0,R.jsx)(n.ExternalLink,{href:me,children:(0,l.__)("Connect an account","autoshare-for-twitter")})})]})}function fe(e){const[t,r]=oe(),{id:s,name:a,username:o,profile_image_url:i}=e;return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsxs)("div",{className:"twitter-account-wrapper",children:[(0,R.jsx)("img",{src:i,alt:a,className:"twitter-account-profile-image"}),(0,R.jsxs)("span",{className:"account-details",children:[(0,R.jsxs)("strong",{children:["@",o]}),(0,R.jsx)("br",{}),a]}),(0,R.jsx)(n.ToggleControl,{checked:t&&t.includes(s),onChange:e=>{r(e?[...t,s]:t.filter((e=>e!==s)))},className:"autoshare-for-twitter-account-toggle"})]}),t&&t.includes(s)&&(0,R.jsx)(xe,{...e})]})}function xe({rate_limits:e}){return!e||!e.user_limit_24hour_limit||e?.user_limit_24hour_reset<Math.floor(Date.now()/1e3)?(0,R.jsx)("p",{children:(0,l.__)("No X/Twitter rate limit available yet. Make a post to X/Twitter first.","autoshare-for-twitter")}):(0,R.jsx)("div",{className:"autoshare-for-twitter-rate-monitor__user",children:(0,R.jsx)(be,{title:(0,l.__)("User 24-Hour Limit:","autoshare-for-twitter"),remaining:e?.user_limit_24hour_remaining,limit:e?.user_limit_24hour_limit,reset:e?.user_limit_24hour_reset,tooltip:(0,l.__)("The maximum number of requests a single user can make across all API endpoints within a 24-hour period.","autoshare-for-twitter")})})}function Te({rate_limits:e}){return!e||!e.app_limit_24hour_limit||e?.app_limit_24hour_reset<Math.floor(Date.now()/1e3)?null:(0,R.jsx)("div",{className:"autoshare-for-twitter-rate-monitor__app",children:(0,R.jsx)(be,{title:(0,l.__)("App 24-Hour Limit:","autoshare-for-twitter"),remaining:e?.app_limit_24hour_remaining,limit:e?.app_limit_24hour_limit,reset:e?.app_limit_24hour_reset,tooltip:(0,l.__)("The total number of API calls your app can make across all users within a 24-hour period.","autoshare-for-twitter")})})}function be({title:e,remaining:t,limit:r,reset:s,tooltip:a}){let o=(0,l.__)("N/A","autoshare-for-twitter");return s&&pe?.formats?.datetime&&(o=(0,we.dateI18n)(pe.formats.datetime,1e3*s),o=(0,l.sprintf)("Resets on %1$s",o)),(0,R.jsxs)("div",{className:"autoshare-for-twitter-rate-monitor__rate",children:[(0,R.jsxs)("p",{className:"autoshare-for-twitter-rate-monitor__rate-limit",children:[(0,R.jsx)(n.Tooltip,{text:a,children:(0,R.jsx)("strong",{children:e})})," ",(0,l.sprintf)(/* translators: %1$s: Remaining, %2$s: Limit */ /* translators: %1$s: Remaining, %2$s: Limit */
    4 (0,l.__)("%1$s of %2$s requests remaining","autoshare-for-twitter"),null!=t?t:(0,l.__)("N/A","autoshare-for-twitter"),null!=r?r:(0,l.__)("N/A","autoshare-for-twitter"))]}),(0,R.jsx)("p",{className:"autoshare-for-twitter-rate-monitor__rate-reset",children:o})]})}const je=({errorMessage:e})=>(0,R.jsxs)("span",{children:[e," ",e?.includes("When authenticating requests to the Twitter API v2 endpoints, you must use keys and tokens from a Twitter developer App that is attached to a Project. You can create a project via the developer portal.")&&(0,R.jsx)(n.ExternalLink,{href:"https://developer.twitter.com/en/docs/twitter-api/migrate/ready-to-migrate",children:(0,l.__)("Learn more here.","autoshare-for-twitter")})]});function ve({messages:e}){return e&&e.message.length?(0,R.jsxs)("div",{className:"autoshare-for-twitter-post-status",children:[e.message.map(((e,t)=>{const r=H(e.status);return(0,R.jsxs)("div",{className:"autoshare-for-twitter-log",children:[r,(0,R.jsxs)("span",{children:[e.url?(0,R.jsx)(n.ExternalLink,{href:e.url,children:e.message}):(0,R.jsx)(je,{errorMessage:e.message}),!!e.handle&&(0,R.jsx)("strong",{children:" - @"+e.handle})]})]},t)})),(0,R.jsx)(n.CardDivider,{})]}):null}function Ae(){const[e,t]=se(),[r,s]=function(){const{overriding:e}=(0,i.useSelect)((e=>({overriding:e(F).getOverriding()}))),{setOverriding:t}=(0,i.useDispatch)(F);return[e,t]}(),[a,o]=ae(),[c]=ie(),u=ne(),d=(0,i.select)("core/editor").getCurrentPostAttribute("autoshare_for_twitter_status");return le(),(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(ve,{messages:d}),(0,R.jsx)(n.ToggleControl,{label:e?(0,l.__)("Post to X/Twitter when published","autoshare-for-twitter"):(0,l.__)("Don't post to X/Twitter","autoshare-for-twitter"),checked:e,onChange:e=>{t(e)},className:"autoshare-for-twitter-toggle-control"}),e&&u&&(0,R.jsx)(n.ToggleControl,{label:(0,l.__)("Use featured image in Post to X/Twitter","autoshare-for-twitter"),checked:a,onChange:()=>{o(!a)},className:"autoshare-for-twitter-toggle-control"}),e&&(0,R.jsx)(_e,{}),e&&(0,R.jsxs)("div",{className:"autoshare-for-twitter-prepublish__override-row",children:[r&&(0,R.jsx)(he,{}),(0,R.jsx)(n.Button,{isLink:!0,onClick:()=>{s(!r)},children:r?(0,l.__)("Hide","autoshare-for-twitter"):(0,l.__)("Edit","autoshare-for-twitter")})]}),(0,R.jsx)("div",{children:c})]})}const Se=(0,window.wp.compose.compose)((0,i.withSelect)((e=>({statusMessage:e("core/editor").getCurrentPostAttribute("autoshare_for_twitter_status")}))))((function(){const e=ne(),[t,r]=ae(),[,a]=re(),[o,c]=(0,s.useState)(!1),[u,d]=(0,s.useState)(!1),{messages:h}=(0,i.useSelect)((e=>({messages:e("core/editor").getCurrentPostAttribute("autoshare_for_twitter_status")}))),[w,g]=(0,s.useState)(h);if(le(),w&&!w.message.length)return null;const m=(0,R.jsx)(n.Icon,{icon:(0,R.jsx)("svg",{viewBox:"0 0 28 28",xmlns:"http://www.w3.org/2000/svg",width:"28",height:"28","aria-hidden":"true",focusable:"false",children:(0,R.jsx)("path",{d:"M6.5 12.4L12 8l5.5 4.4-.9 1.2L12 10l-4.5 3.6-1-1.2z"})})}),p=(0,R.jsx)(n.Icon,{icon:(0,R.jsx)("svg",{viewBox:"0 0 28 28",xmlns:"http://www.w3.org/2000/svg",width:"28",height:"28","aria-hidden":"true",focusable:"false",children:(0,R.jsx)("path",{d:"M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z"})})});return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(ve,{messages:w}),(0,R.jsx)(n.Button,{className:"autoshare-for-twitter-tweet-now",variant:"link",text:(0,l.__)("Post to X/Twitter now","autoshare-for-twitter"),onClick:()=>d(!u),iconPosition:"right",icon:u?m:p}),u&&(0,R.jsxs)(R.Fragment,{children:[e&&(0,R.jsx)(n.ToggleControl,{label:(0,l.__)("Use featured image in Post to X/Twitter","autoshare-for-twitter"),checked:t,onChange:()=>{r(!t)},className:"autoshare-for-twitter-toggle-control"}),(0,R.jsx)(_e,{}),(0,R.jsx)(he,{}),(0,R.jsx)(n.Button,{variant:"primary",className:"autoshare-for-twitter-re-tweet",text:o?(0,l.__)("Posting to X/Twitter…","autoshare-for-twitter"):(0,l.__)("Post to X/Twitter","autoshare-for-twitter"),onClick:()=>{(async()=>{c(!0);const e=await(0,i.select)("core/editor").getCurrentPostId(),t=new FormData;t.append("action",adminAutoshareForTwitter.retweetAction),t.append("nonce",adminAutoshareForTwitter.nonce),t.append("post_id",e);const r=await fetch(ajaxurl,{method:"POST",body:t}),{data:s}=await r.json();s.is_retweeted&&a(""),g(s),c(!1)})()}})]})]})}));(0,i.registerStore)(F,{reducer:function(e=b,t){switch(t.type){case c:return{...e,autoshareEnabled:t.autoshareEnabled};case u:return{...e,errorMessage:t.errorMessage};case d:return{...e,loaded:!0};case h:return{...e,overriding:t.overriding};case w:return{...e,saving:t.saving};case g:return{...e,tweetText:t.tweetText};case m:return{...e,allowTweetImage:t.allowTweetImage};case p:return{...e,tweetAccounts:t.tweetAccounts}}},actions:t,selectors:r});class ye extends s.Component{constructor(e){super(e),this.state={enabledText:""},this.maybeSetEnabledText=this.maybeSetEnabledText.bind(this)}componentDidMount(){(0,i.dispatch)(F).setLoaded(),(0,i.subscribe)(this.maybeSetEnabledText)}maybeSetEnabledText(){try{const e=(0,i.select)(F).getAutoshareEnabled(),t=e?(0,l.__)("This post will be posted to X/Twitter","autoshare-for-twitter"):(0,l.__)("This post will not be posted to X/Twitter","autoshare-for-twitter");t!==this.state.enabledText&&this.setState({enabled:e,enabledText:t})}catch(e){}}render(){const{enabled:e,enabledText:t}=this.state,r=e?U:W,s=(0,R.jsx)(n.Icon,{className:"autoshare-for-twitter-icon components-panel__icon",icon:r,size:24});return(0,R.jsx)(o.PluginPrePublishPanel,{title:t,icon:s,className:"autoshare-for-twitter-pre-publish-panel",children:(0,R.jsx)(Ae,{})})}}class Ee extends s.Component{constructor(e){super(e),this.state={enabledText:""},this.maybeSetEnabledText=this.maybeSetEnabledText.bind(this)}componentDidMount(){(0,i.dispatch)(F).setLoaded(),(0,i.subscribe)(this.maybeSetEnabledText)}maybeSetEnabledText(){try{const e=(0,i.select)(F).getAutoshareEnabled(),t=e?(0,l.__)("Autopost to X/Twitter enabled","autoshare-for-twitter"):(0,l.__)("Autopost to X/Twitter disabled","autoshare-for-twitter");t!==this.state.enabledText&&this.setState({enabledText:t,enabled:e})}catch(e){}}render(){if("publish"===(0,i.select)("core/editor").getCurrentPostAttribute("status")){const e=(0,i.select)("core/editor").getCurrentPostAttribute("autoshare_for_twitter_status");let t="";return e&&e.message&&e.message.length&&(t=e.message[e.message.length-1].status||""),(0,R.jsx)(o.PluginDocumentSettingPanel,{title:(0,l.__)("Autopost to X/Twitter","autoshare-for-twitter"),icon:H(t),className:"autoshare-for-twitter-editor-panel",children:(0,R.jsx)(Se,{})})}const{enabled:e,enabledText:t}=this.state,r=e?U:W,s=(0,R.jsx)(n.Icon,{className:"autoshare-for-twitter-icon components-panel__icon",icon:r,size:24});return(0,R.jsx)(o.PluginDocumentSettingPanel,{title:t,icon:s,className:"autoshare-for-twitter-editor-panel",children:(0,R.jsx)(Ae,{})})}}(0,a.registerPlugin)("autoshare-for-twitter-editor-panel",{render:Ee}),(0,a.registerPlugin)("autoshare-for-twitter-pre-publish-panel",{render:ye}),(0,a.registerPlugin)("autoshare-for-twitter-post-publish-panel",{render:()=>(0,R.jsx)(o.PluginPostPublishPanel,{className:"my-plugin-post-status-info",children:(0,R.jsx)(Se,{})})})})();
     3(0,l.__)("%d - Getting Long!","autoshare-for-twitter"),e),overrideLengthClass:"near-limit"}:{tweetLength:`${e}`,overrideLengthClass:""}})(),d=(0,i.useSelect)(e=>e("core/editor").isPublishingPost()),h=(0,i.useSelect)(e=>"publish"===e("core/editor").getEditedPostAttribute("status")),w=(0,s.useRef)(d);(0,s.useEffect)(()=>{w.current&&!d&&h&&a(""),w.current=d},[d,h]);const g=()=>(0,X.jsx)(n.Tooltip,{text:(0,l.__)("Count is inclusive of the post permalink which will be included in the final tweet.","autoshare-for-twitter"),children:(0,X.jsx)("div",{children:c})});return(0,X.jsx)(n.TextareaControl,{value:o,onChange:e=>{a(e)},className:"autoshare-for-twitter-tweet-text",maxLength:r,label:(0,X.jsxs)("span",{style:{marginTop:"0.5rem",display:"block"},className:"autoshare-for-twitter-prepublish__message-label",children:[(0,X.jsxs)("span",{children:[(0,l.__)("Custom message:","autoshare-for-twitter")," "]}),(0,X.jsx)("span",{id:"autoshare-for-twitter-counter-wrap",className:`alignright ${u}`,children:(0,X.jsx)(g,{})})]})})}const we=window.wp.date,{connectedAccounts:ge,connectAccountUrl:me}=adminAutoshareForTwitter,pe=(0,we.getSettings)();function _e(){const e=ge?Object.values(ge):[],[t]=e,[r]=ae();return(0,X.jsxs)("div",{className:"autoshare-for-twitter-accounts-wrapper",children:[e.map(e=>(0,X.jsx)(fe,{...e},e.id)),t&&r?.length>0&&(0,X.jsx)(Te,{...t}),r?.length>0&&(0,X.jsx)("div",{className:"autoshare-for-twitter-rate-monitor__disclaimer",children:(0,X.jsxs)("p",{children:[(0,X.jsx)("strong",{children:(0,l.__)("Note:","autoshare-for-twitter")})," ",(0,l.__)("The displayed API rate limits are updated only when a tweet is posted. Since there is no dedicated endpoint for real-time usage data, the information provided may not fully reflect the current API usage, especially if other tweets are made through the same app.","autoshare-for-twitter")]})}),(0,X.jsx)("span",{className:"connect-account-link",children:(0,X.jsx)(n.ExternalLink,{href:me,children:(0,l.__)("Connect an account","autoshare-for-twitter")})})]})}function fe(e){const[t,r]=ae(),{id:s,name:o,username:a,profile_image_url:i}=e;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)("div",{className:"twitter-account-wrapper",children:[(0,X.jsx)("img",{src:i,alt:o,className:"twitter-account-profile-image"}),(0,X.jsxs)("span",{className:"account-details",children:[(0,X.jsxs)("strong",{children:["@",a]}),(0,X.jsx)("br",{}),o]}),(0,X.jsx)(n.ToggleControl,{checked:t&&t.includes(s),onChange:e=>{r(e?[...t,s]:t.filter(e=>e!==s))},className:"autoshare-for-twitter-account-toggle"})]}),t&&t.includes(s)&&(0,X.jsx)(xe,{...e})]})}function xe({rate_limits:e}){return!e||!e.user_limit_24hour_limit||e?.user_limit_24hour_reset<Math.floor(Date.now()/1e3)?(0,X.jsx)("p",{children:(0,l.__)("No X/Twitter rate limit available yet. Make a post to X/Twitter first.","autoshare-for-twitter")}):(0,X.jsx)("div",{className:"autoshare-for-twitter-rate-monitor__user",children:(0,X.jsx)(be,{title:(0,l.__)("User 24-Hour Limit:","autoshare-for-twitter"),remaining:e?.user_limit_24hour_remaining,limit:e?.user_limit_24hour_limit,reset:e?.user_limit_24hour_reset,tooltip:(0,l.__)("The maximum number of requests a single user can make across all API endpoints within a 24-hour period.","autoshare-for-twitter")})})}function Te({rate_limits:e}){return!e||!e.app_limit_24hour_limit||e?.app_limit_24hour_reset<Math.floor(Date.now()/1e3)?null:(0,X.jsx)("div",{className:"autoshare-for-twitter-rate-monitor__app",children:(0,X.jsx)(be,{title:(0,l.__)("App 24-Hour Limit:","autoshare-for-twitter"),remaining:e?.app_limit_24hour_remaining,limit:e?.app_limit_24hour_limit,reset:e?.app_limit_24hour_reset,tooltip:(0,l.__)("The total number of API calls your app can make across all users within a 24-hour period.","autoshare-for-twitter")})})}function be({title:e,remaining:t,limit:r,reset:s,tooltip:o}){let a=(0,l.__)("N/A","autoshare-for-twitter");return s&&pe?.formats?.datetime&&(a=(0,we.dateI18n)(pe.formats.datetime,1e3*s),a=(0,l.sprintf)("Resets on %1$s",a)),(0,X.jsxs)("div",{className:"autoshare-for-twitter-rate-monitor__rate",children:[(0,X.jsxs)("p",{className:"autoshare-for-twitter-rate-monitor__rate-limit",children:[(0,X.jsx)(n.Tooltip,{text:o,children:(0,X.jsx)("strong",{children:e})})," ",(0,l.sprintf)(/* translators: %1$s: Remaining, %2$s: Limit */ /* translators: %1$s: Remaining, %2$s: Limit */
     4(0,l.__)("%1$s of %2$s requests remaining","autoshare-for-twitter"),null!=t?t:(0,l.__)("N/A","autoshare-for-twitter"),null!=r?r:(0,l.__)("N/A","autoshare-for-twitter"))]}),(0,X.jsx)("p",{className:"autoshare-for-twitter-rate-monitor__rate-reset",children:a})]})}const je=({errorMessage:e})=>(0,X.jsxs)("span",{children:[e," ",e?.includes("When authenticating requests to the Twitter API v2 endpoints, you must use keys and tokens from a Twitter developer App that is attached to a Project. You can create a project via the developer portal.")&&(0,X.jsx)(n.ExternalLink,{href:"https://developer.twitter.com/en/docs/twitter-api/migrate/ready-to-migrate",children:(0,l.__)("Learn more here.","autoshare-for-twitter")})]});function ve({messages:e}){return e&&e.message.length?(0,X.jsxs)("div",{className:"autoshare-for-twitter-post-status",children:[e.message.map((e,t)=>{const r=H(e.status);return(0,X.jsxs)("div",{className:"autoshare-for-twitter-log",children:[r,(0,X.jsxs)("span",{children:[e.url?(0,X.jsx)(n.ExternalLink,{href:e.url,children:e.message}):(0,X.jsx)(je,{errorMessage:e.message}),!!e.handle&&(0,X.jsx)("strong",{children:" - @"+e.handle})]})]},t)}),(0,X.jsx)(n.CardDivider,{})]}):null}function Ae(){const[e,t]=se(),[r,s]=function(){const{overriding:e}=(0,i.useSelect)(e=>({overriding:e(F).getOverriding()})),{setOverriding:t}=(0,i.useDispatch)(F);return[e,t]}(),[o,a]=oe(),[c]=ie(),u=ne(),d=(0,i.select)("core/editor").getCurrentPostAttribute("autoshare_for_twitter_status");return le(),(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(ve,{messages:d}),(0,X.jsx)(n.ToggleControl,{label:e?(0,l.__)("Post to X/Twitter when published","autoshare-for-twitter"):(0,l.__)("Don't post to X/Twitter","autoshare-for-twitter"),checked:e,onChange:e=>{t(e)},className:"autoshare-for-twitter-toggle-control"}),e&&u&&(0,X.jsx)(n.ToggleControl,{label:(0,l.__)("Use featured image in Post to X/Twitter","autoshare-for-twitter"),checked:o,onChange:()=>{a(!o)},className:"autoshare-for-twitter-toggle-control"}),e&&(0,X.jsx)(_e,{}),e&&(0,X.jsxs)("div",{className:"autoshare-for-twitter-prepublish__override-row",children:[r&&(0,X.jsx)(he,{}),(0,X.jsx)(n.Button,{isLink:!0,onClick:()=>{s(!r)},children:r?(0,l.__)("Hide","autoshare-for-twitter"):(0,l.__)("Edit","autoshare-for-twitter")})]}),(0,X.jsx)("div",{children:c})]})}const Se=(0,window.wp.compose.compose)((0,i.withSelect)(e=>({statusMessage:e("core/editor").getCurrentPostAttribute("autoshare_for_twitter_status")})))(function(){const e=ne(),[t,r]=oe(),[,o]=re(),[a,c]=(0,s.useState)(!1),[u,d]=(0,s.useState)(!1),{messages:h}=(0,i.useSelect)(e=>({messages:e("core/editor").getCurrentPostAttribute("autoshare_for_twitter_status")})),[w,g]=(0,s.useState)(h);if(le(),w&&!w.message.length)return null;const m=(0,X.jsx)(n.Icon,{icon:(0,X.jsx)("svg",{viewBox:"0 0 28 28",xmlns:"http://www.w3.org/2000/svg",width:"28",height:"28","aria-hidden":"true",focusable:"false",children:(0,X.jsx)("path",{d:"M6.5 12.4L12 8l5.5 4.4-.9 1.2L12 10l-4.5 3.6-1-1.2z"})})}),p=(0,X.jsx)(n.Icon,{icon:(0,X.jsx)("svg",{viewBox:"0 0 28 28",xmlns:"http://www.w3.org/2000/svg",width:"28",height:"28","aria-hidden":"true",focusable:"false",children:(0,X.jsx)("path",{d:"M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z"})})});return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(ve,{messages:w}),(0,X.jsx)(n.Button,{className:"autoshare-for-twitter-tweet-now",variant:"link",text:(0,l.__)("Post to X/Twitter now","autoshare-for-twitter"),onClick:()=>d(!u),iconPosition:"right",icon:u?m:p}),u&&(0,X.jsxs)(X.Fragment,{children:[e&&(0,X.jsx)(n.ToggleControl,{label:(0,l.__)("Use featured image in Post to X/Twitter","autoshare-for-twitter"),checked:t,onChange:()=>{r(!t)},className:"autoshare-for-twitter-toggle-control"}),(0,X.jsx)(_e,{}),(0,X.jsx)(he,{}),(0,X.jsx)(n.Button,{variant:"primary",className:"autoshare-for-twitter-re-tweet",text:a?(0,l.__)("Posting to X/Twitter…","autoshare-for-twitter"):(0,l.__)("Post to X/Twitter","autoshare-for-twitter"),onClick:()=>{(async()=>{c(!0);const e=await(0,i.select)("core/editor").getCurrentPostId(),t=new FormData;t.append("action",adminAutoshareForTwitter.retweetAction),t.append("nonce",adminAutoshareForTwitter.nonce),t.append("post_id",e);const r=await fetch(ajaxurl,{method:"POST",body:t}),{data:s}=await r.json();s.is_retweeted&&o(""),g(s),c(!1)})()}})]})]})});(0,i.registerStore)(F,{reducer:function(e=b,t){switch(t.type){case c:return{...e,autoshareEnabled:t.autoshareEnabled};case u:return{...e,errorMessage:t.errorMessage};case d:return{...e,loaded:!0};case h:return{...e,overriding:t.overriding};case w:return{...e,saving:t.saving};case g:return{...e,tweetText:t.tweetText};case m:return{...e,allowTweetImage:t.allowTweetImage};case p:return{...e,tweetAccounts:t.tweetAccounts}}},actions:t,selectors:r});class ye extends s.Component{constructor(e){super(e),this.state={enabledText:""},this.maybeSetEnabledText=this.maybeSetEnabledText.bind(this)}componentDidMount(){(0,i.dispatch)(F).setLoaded(),(0,i.subscribe)(this.maybeSetEnabledText)}maybeSetEnabledText(){try{const e=(0,i.select)(F).getAutoshareEnabled(),t=e?(0,l.__)("This post will be posted to X/Twitter","autoshare-for-twitter"):(0,l.__)("This post will not be posted to X/Twitter","autoshare-for-twitter");t!==this.state.enabledText&&this.setState({enabled:e,enabledText:t})}catch(e){}}render(){const{enabled:e,enabledText:t}=this.state,r=e?U:W,s=(0,X.jsx)(n.Icon,{className:"autoshare-for-twitter-icon components-panel__icon",icon:r,size:24});return(0,X.jsx)(a.PluginPrePublishPanel,{title:t,icon:s,className:"autoshare-for-twitter-pre-publish-panel",children:(0,X.jsx)(Ae,{})})}}class Ee extends s.Component{constructor(e){super(e),this.state={enabledText:""},this.maybeSetEnabledText=this.maybeSetEnabledText.bind(this)}componentDidMount(){(0,i.dispatch)(F).setLoaded(),(0,i.subscribe)(this.maybeSetEnabledText)}maybeSetEnabledText(){try{const e=(0,i.select)(F).getAutoshareEnabled(),t=e?(0,l.__)("Autopost to X/Twitter enabled","autoshare-for-twitter"):(0,l.__)("Autopost to X/Twitter disabled","autoshare-for-twitter");t!==this.state.enabledText&&this.setState({enabledText:t,enabled:e})}catch(e){}}render(){if("publish"===(0,i.select)("core/editor").getCurrentPostAttribute("status")){const e=(0,i.select)("core/editor").getCurrentPostAttribute("autoshare_for_twitter_status");let t="";return e&&e.message&&e.message.length&&(t=e.message[e.message.length-1].status||""),(0,X.jsx)(a.PluginDocumentSettingPanel,{title:(0,l.__)("Autopost to X/Twitter","autoshare-for-twitter"),icon:H(t),className:"autoshare-for-twitter-editor-panel",children:(0,X.jsx)(Se,{})})}const{enabled:e,enabledText:t}=this.state,r=e?U:W,s=(0,X.jsx)(n.Icon,{className:"autoshare-for-twitter-icon components-panel__icon",icon:r,size:24});return(0,X.jsx)(a.PluginDocumentSettingPanel,{title:t,icon:s,className:"autoshare-for-twitter-editor-panel",children:(0,X.jsx)(Ae,{})})}}(0,o.registerPlugin)("autoshare-for-twitter-editor-panel",{render:Ee}),(0,o.registerPlugin)("autoshare-for-twitter-pre-publish-panel",{render:ye}),(0,o.registerPlugin)("autoshare-for-twitter-post-publish-panel",{render:()=>(0,X.jsx)(a.PluginPostPublishPanel,{className:"my-plugin-post-status-info",children:(0,X.jsx)(Se,{})})})})();
  • autoshare-for-twitter/tags/2.3.2/includes/admin/post-transition.php

    r2956880 r3449105  
    102102    $post = get_post( $post_id );
    103103
     104    // Ensure we have a valid $post object.
     105    if ( ! $post ) {
     106        return false;
     107    }
     108
     109    // Ensure the user has edit permissions on the post.
     110    if ( ! current_user_can( 'edit_post', $post->ID ) ) {
     111        return false;
     112    }
     113
    104114    /*
    105115     * Don't bother enqueuing assets if the post type hasn't opted into autosharing
     
    111121    // Don't publish tweets from staging/testing sites.
    112122    if ( ! AST_Staging::is_production_site() ) {
    113         return false;
    114     }
    115 
    116     // Ensure we have a $post object.
    117     if ( ! $post ) {
    118123        return false;
    119124    }
     
    190195 */
    191196function retweet() {
     197    // Ensure the nonce is valid.
    192198    if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'wp_rest' ) ) {
    193199        wp_send_json_error( __( 'Nonce verification failed.', 'autoshare-for-twitter' ) );
    194200    }
    195201
    196     $post_id      = isset( $_POST['post_id'] ) ? absint( $_POST['post_id'] ) : 0;
     202    // Ensure we have a post ID.
     203    $post_id = isset( $_POST['post_id'] ) ? absint( $_POST['post_id'] ) : 0;
     204
     205    if ( 0 === $post_id ) {
     206        wp_send_json_error( __( 'Invalid post ID.', 'autoshare-for-twitter' ) );
     207    }
     208
     209    // Ensure the user has edit permissions on the post.
     210    if ( ! current_user_can( 'edit_post', $post_id ) ) {
     211        wp_send_json_error( __( 'You do not have permission to retweet this post.', 'autoshare-for-twitter' ) );
     212    }
     213
     214    // Publish the tweet.
    197215    $is_retweeted = publish_tweet( $post_id, true );
    198216
  • autoshare-for-twitter/tags/2.3.2/readme.txt

    r3432284 r3449105  
    22Contributors:      10up, johnwatkins0, adamsilverstein, scottlee, dinhtungdu, jeffpaul, dharm1025
    33Tags:              twitter, tweet, share, social media, posse
    4 Requires at least: 6.6
     4Requires at least: 6.8
    55Tested up to:      6.9
    6 Stable tag:        2.3.1
     6Stable tag:        2.3.2
    77License:           GPL-2.0-or-later
    88License URI:       https://spdx.org/licenses/GPL-2.0-or-later.html
     
    102102To avoid encountering this error in the future and to have higher usage limits, we recommend considering a subscription to either the Basic or Pro access level. These access levels provide increased quotas and additional benefits to accommodate your needs. For more information on X/Twitter API access levels, you can visit this link: https://developer.x.com/en/products/x-api.
    103103
     104= Where do I report security bugs found in this plugin? =
     105
     106Please report security bugs found in the source code of the Autoshare for Twitter plugin through the [Patchstack Vulnerability Disclosure  Program](https://patchstack.com/database/vdp/9e5fba6a-26c2-4dd7-a2ae-b8628c65835e).  The Patchstack team will assist you with verification, CVE assignment, and notify the developers of this plugin.
     107
    104108== Screenshots ==
    105109
     
    110114
    111115== Changelog ==
     116
     117= 2.3.2 - 2026-01-29 =
     118**Note that this version bumps the WordPress minimum supported version from 6.6 to 6.8.**
     119
     120* **Security:** Fix access control issue for retweeting (props [@nblirwn](https://github.com/nblirwn), [@dkotter](https://github.com/dkotter), [@peterwilsoncc](https://github.com/peterwilsoncc), [@jeffpaul](https://github.com/jeffpaul) via [GHSA-9j39-fp7c-5453](https://github.com/10up/autoshare-for-twitter/security/advisories/GHSA-9j39-fp7c-5453)).
     121* **Added:** Support for the WordPress.org plugin preview (props [@dkotter](https://github.com/dkotter), [@iamdharmesh](https://github.com/iamdharmesh), [@jeffpaul](https://github.com/jeffpaul) via [#297](https://github.com/10up/autoshare-for-twitter/pull/297)).
     122* **Changed:** Bumped WordPress "tested up to" version 6.9 (props [@peterwilsoncc](https://github.com/peterwilsoncc), [@dkotter](https://github.com/dkotter) via [#390](https://github.com/10up/autoshare-for-twitter/pull/390)).
     123* **Changed:** Bumped WordPress minimum supported version from 6.6 to 6.8 (props [@jeffpaul](https://github.com/jeffpaul) via [#397](https://github.com/10up/autoshare-for-twitter/pull/397)).
     124* **Changed:** Updated npm dependencies via `npm audit fix` (props [@peterwilsoncc](https://github.com/peterwilsoncc), [@dkotter](https://github.com/dkotter) via [#392](https://github.com/10up/autoshare-for-twitter/pull/392)).
     125* **Fixed:** Clear tweet text field only after post publish completes in block editor (props [@chandrapatel](https://github.com/chandrapatel), [@iamdharmesh](https://github.com/iamdharmesh) via [#378](https://github.com/10up/autoshare-for-twitter/pull/378)).
    112126
    113127= 2.3.1 - 2025-07-14 =
     
    136150* **Security:** Bump `ws` from 7.5.10 to 8.18.0, `serve-static` from 1.15.0 to 1.16.2 and `express` from 4.19.2 to 4.21.0 (props [@dependabot](https://github.com/apps/dependabot), [@Sidsector9](https://github.com/Sidsector9) via [#343](https://github.com/10up/autoshare-for-twitter/pull/343)).
    137151
    138 = 2.2.1 - 2024-07-08 =
    139 * **Changed:** Bump WordPress "tested up to" version 6.5 (props [@iamdharmesh](https://github.com/iamdharmesh), [@dkotter](https://github.com/dkotter), [@sudip-md](https://github.com/sudip-md), [@jeffpaul](https://github.com/jeffpaul) via [#319](https://github.com/10up/autoshare-for-twitter/pull/319)).
    140 * **Fixed:** Ampersands no longer converted to HTML entities when adding query parameters to the post URL with the `autoshare_for_twitter_post_url` filter (props [@justinmaurerdotdev](https://github.com/justinmaurerdotdev), [@iamdharmesh](https://github.com/iamdharmesh) via [#324](https://github.com/10up/autoshare-for-twitter/pull/324)).
    141 * **Security:** Bump `express` from 4.18.2 to 4.19.2 (props [@dependabot](https://github.com/apps/dependabot), [@iamdharmesh](https://github.com/iamdharmesh) via [#321](https://github.com/10up/autoshare-for-twitter/pull/321)).
    142 * **Security:** Bump `follow-redirects` from 1.15.5 to 1.15.6 (props [@dependabot](https://github.com/apps/dependabot), [@iamdharmesh](https://github.com/iamdharmesh) via [#321](https://github.com/10up/autoshare-for-twitter/pull/321)).
    143 * **Security:** Bump `ip` from 1.1.8 to 1.1.9 (props [@dependabot](https://github.com/apps/dependabot), [@iamdharmesh](https://github.com/iamdharmesh) via [#321](https://github.com/10up/autoshare-for-twitter/pull/321)).
    144 * **Security:** Bump `webpack-dev-middleware` from 5.3.3 to 5.3.4 (props [@dependabot](https://github.com/apps/dependabot), [@iamdharmesh](https://github.com/iamdharmesh) via [#321](https://github.com/10up/autoshare-for-twitter/pull/321)).
    145 
    146152Further changelog entries can be found in the [CHANGELOG.md](https://github.com/10up/autoshare-for-twitter/blob/trunk/CHANGELOG.md) file.
    147153
    148154== Upgrade Notice ==
     155
     156= 2.3.2 =
     157Security release: this patches an access control issue with retweets. Please upgrade promptly. This release bumps the WordPress minimum from 6.6 to 6.8.
    149158
    150159= 2.3.1 =
  • autoshare-for-twitter/tags/2.3.2/vendor/autoload.php

    r3327663 r3449105  
    2020require_once __DIR__ . '/composer/autoload_real.php';
    2121
    22 return ComposerAutoloaderInit10upAutoshareForTwitterV231::getLoader();
     22return ComposerAutoloaderInit10upAutoshareForTwitterV232::getLoader();
  • autoshare-for-twitter/tags/2.3.2/vendor/composer/autoload_real.php

    r3327663 r3449105  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInit10upAutoshareForTwitterV231
     5class ComposerAutoloaderInit10upAutoshareForTwitterV232
    66{
    77    private static $loader;
     
    2323        }
    2424
    25         spl_autoload_register(array('ComposerAutoloaderInit10upAutoshareForTwitterV231', 'loadClassLoader'), true, true);
     25        spl_autoload_register(array('ComposerAutoloaderInit10upAutoshareForTwitterV232', 'loadClassLoader'), true, true);
    2626        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
    27         spl_autoload_unregister(array('ComposerAutoloaderInit10upAutoshareForTwitterV231', 'loadClassLoader'));
     27        spl_autoload_unregister(array('ComposerAutoloaderInit10upAutoshareForTwitterV232', 'loadClassLoader'));
    2828
    2929        require __DIR__ . '/autoload_static.php';
    30         call_user_func(\Composer\Autoload\ComposerStaticInit10upAutoshareForTwitterV231::getInitializer($loader));
     30        call_user_func(\Composer\Autoload\ComposerStaticInit10upAutoshareForTwitterV232::getInitializer($loader));
    3131
    3232        $loader->register(true);
  • autoshare-for-twitter/tags/2.3.2/vendor/composer/autoload_static.php

    r3327663 r3449105  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInit10upAutoshareForTwitterV231
     7class ComposerStaticInit10upAutoshareForTwitterV232
    88{
    99    public static $prefixLengthsPsr4 = array (
    10         'C' => 
     10        'C' =>
    1111        array (
    1212            'Composer\\CaBundle\\' => 18,
    1313        ),
    14         'A' => 
     14        'A' =>
    1515        array (
    1616            'Abraham\\TwitterOAuth\\' => 21,
     
    1919
    2020    public static $prefixDirsPsr4 = array (
    21         'Composer\\CaBundle\\' => 
     21        'Composer\\CaBundle\\' =>
    2222        array (
    2323            0 => __DIR__ . '/..' . '/composer/ca-bundle/src',
    2424        ),
    25         'Abraham\\TwitterOAuth\\' => 
     25        'Abraham\\TwitterOAuth\\' =>
    2626        array (
    2727            0 => __DIR__ . '/..' . '/abraham/twitteroauth/src',
     
    4848    {
    4949        return \Closure::bind(function () use ($loader) {
    50             $loader->prefixLengthsPsr4 = ComposerStaticInit10upAutoshareForTwitterV231::$prefixLengthsPsr4;
    51             $loader->prefixDirsPsr4 = ComposerStaticInit10upAutoshareForTwitterV231::$prefixDirsPsr4;
    52             $loader->classMap = ComposerStaticInit10upAutoshareForTwitterV231::$classMap;
     50            $loader->prefixLengthsPsr4 = ComposerStaticInit10upAutoshareForTwitterV232::$prefixLengthsPsr4;
     51            $loader->prefixDirsPsr4 = ComposerStaticInit10upAutoshareForTwitterV232::$prefixDirsPsr4;
     52            $loader->classMap = ComposerStaticInit10upAutoshareForTwitterV232::$classMap;
    5353
    5454        }, null, ClassLoader::class);
  • autoshare-for-twitter/tags/2.3.2/vendor/composer/installed.php

    r3327663 r3449105  
    22    'root' => array(
    33        'name' => '10up/autoshare-for-twitter',
    4         'pretty_version' => '2.3.1',
    5         'version' => '2.3.1.0',
    6         'reference' => 'f0ac633ecc04caa191eeccadfe1edb40c4151344',
     4        'pretty_version' => '2.3.2',
     5        'version' => '2.3.2.0',
     6        'reference' => '2bc26a29159a83a1ce4388a71ef21b2369f22382',
    77        'type' => 'wordpress-plugin',
    88        'install_path' => __DIR__ . '/../../',
     
    1212    'versions' => array(
    1313        '10up/autoshare-for-twitter' => array(
    14             'pretty_version' => '2.3.1',
    15             'version' => '2.3.1.0',
    16             'reference' => 'f0ac633ecc04caa191eeccadfe1edb40c4151344',
     14            'pretty_version' => '2.3.2',
     15            'version' => '2.3.2.0',
     16            'reference' => '2bc26a29159a83a1ce4388a71ef21b2369f22382',
    1717            'type' => 'wordpress-plugin',
    1818            'install_path' => __DIR__ . '/../../',
  • autoshare-for-twitter/trunk/autoshare-for-twitter.php

    r3327663 r3449105  
    44 * Description:       Automatically shares the post title or custom message and a link to the post to X/Twitter.
    55 * Disclaimer:        TWITTER, TWEET, RETWEET and the Twitter logo are trademarks of Twitter, Inc. or its affiliates.
    6  * Version:           2.3.1
    7  * Requires at least: 6.6
     6 * Version:           2.3.2
     7 * Requires at least: 6.8
    88 * Requires PHP:      7.4
    99 * Author:            10up
     
    2323
    2424define( 'AUTOSHARE_FOR_TWITTER', __FILE__ );
    25 define( 'AUTOSHARE_FOR_TWITTER_VERSION', '2.3.1' );
     25define( 'AUTOSHARE_FOR_TWITTER_VERSION', '2.3.2' );
    2626define( 'AUTOSHARE_FOR_TWITTER_URL', plugin_dir_url( __FILE__ ) );
    2727define( 'AUTOSHARE_FOR_TWITTER_PATH', plugin_dir_path( __FILE__ ) );
  • autoshare-for-twitter/trunk/dist/autoshare-for-twitter.asset.php

    r3327663 r3449105  
    1 <?php return array('dependencies' => array('lodash', 'react-jsx-runtime', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-edit-post', 'wp-element', 'wp-i18n', 'wp-plugins', 'wp-primitives'), 'version' => 'd9b56b74e9cf28181dfd');
     1<?php return array('dependencies' => array('lodash', 'react-jsx-runtime', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-edit-post', 'wp-element', 'wp-i18n', 'wp-plugins', 'wp-primitives'), 'version' => 'da37bd91155b3fa9601f');
  • autoshare-for-twitter/trunk/dist/autoshare-for-twitter.js

    r3327663 r3449105  
    1 (()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var s in r)e.o(r,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:r[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{setAllowTweetImage:()=>P,setAutoshareEnabled:()=>j,setErrorMessage:()=>v,setLoaded:()=>A,setOverriding:()=>S,setSaving:()=>y,setTweetAccounts:()=>L,setTweetText:()=>E});var r={};e.r(r),e.d(r,{getAllowTweetImage:()=>D,getAutoshareEnabled:()=>k,getErrorMessage:()=>N,getOverriding:()=>C,getSaving:()=>I,getTweetAccounts:()=>O,getTweetText:()=>M});const s=window.wp.element,a=window.wp.plugins,o=window.wp.editPost,i=window.wp.data,n=window.wp.components,l=window.wp.i18n,c="SET_AUTOSHARE_FOR_TWITTER_ENABLED",u="SET_ERROR_MESSAGE",d="SET_LOADED",h="SET_OVERRIDING",w="SET_SAVING",g="SET_TWEET_TEXT",m="SET_ALLOW_TWEET_IMAGE",p="SET_TWEET_ACCOUNTS",{enabled:_,allowTweetImage:f,tweetAccounts:x,customTweetBody:T}=adminAutoshareForTwitter,b={autoshareEnabled:!!_&&"0"!==_,errorMessage:"",loaded:!1,overriding:!!T,overrideLength:0,tweetText:T||"",allowTweetImage:!!f,tweetAccounts:x||[]};const j=e=>({type:c,autoshareEnabled:e}),v=e=>({type:u,errorMessage:e}),A=()=>({type:d}),S=e=>({type:h,overriding:e}),y=e=>({type:w,saving:e}),E=e=>({type:g,tweetText:e}),P=e=>({type:m,allowTweetImage:e}),L=e=>({type:p,tweetAccounts:e}),k=e=>e.autoshareEnabled,N=e=>e.errorMessage,C=e=>e.overriding,I=e=>e.saving,M=e=>e.tweetText,D=e=>e.allowTweetImage,O=e=>e.tweetAccounts||[],F="10up/autoshare",X=window.wp.primitives,R=window.ReactJSXRuntime,z=e=>(0,R.jsx)(X.SVG,{version:"1.1",xmlSpace:"preserve",width:256,height:256,viewBox:"0 0 256 256",children:(0,R.jsxs)("g",{style:{stroke:"none",strokeWidth:0,strokeDasharray:"none",strokeLinecap:"butt",strokeLinejoin:"miter",strokeMiterlimit:10,fill:"none",fillRule:"nonzero",opacity:1},children:[(0,R.jsx)("path",{d:"M45 90C20.147 90 0 69.853 0 45S20.147 0 45 0s45 20.147 45 45-20.147 45-45 45z",style:{stroke:"none",strokeWidth:1,strokeDasharray:"none",strokeLinecap:"butt",strokeLinejoin:"miter",strokeMiterlimit:10,fill:e,fillRule:"nonzero",opacity:1},transform:"matrix(2.33 0 0 2.33 22.612 22.612)"}),(0,R.jsx)("path",{d:"M17.884 19.496 38.925 47.63 17.751 70.504h4.765l18.538-20.027 14.978 20.027h16.217L50.024 40.788l19.708-21.291h-4.765L47.895 37.94 34.101 19.496H17.884zm7.008 3.51h7.45L65.24 66.993h-7.45L24.892 23.006z",style:{stroke:"none",strokeWidth:1,strokeDasharray:"none",strokeLinecap:"butt",strokeLinejoin:"miter",strokeMiterlimit:10,fill:"#fff",fillRule:"nonzero",opacity:1},transform:"matrix(2.33 0 0 2.33 22.612 22.612)"})]})}),B=z("#1B1C20"),U=z("#1DA1F2"),W=z("#787E88"),$=z("#D0494A"),G=z("#7FD051"),H=e=>{let t=B;return e&&(t="published"===e?G:"error"===e?$:B),(0,R.jsx)(n.Icon,{className:"autoshare-for-twitter-icon",icon:t,size:48})},K=window.wp.apiFetch;var q=e.n(K);const V=window.lodash,{enableAutoshareKey:J,errorText:Y,restUrl:Q,tweetBodyKey:Z,allowTweetImageKey:ee,tweetAccountsKey:te}=adminAutoshareForTwitter;function re(){const{tweetText:e}=(0,i.useSelect)((e=>({tweetText:e(F).getTweetText()}))),{setTweetText:t}=(0,i.useDispatch)(F);return[e,t]}function se(){const{autoshareEnabled:e}=(0,i.useSelect)((e=>({autoshareEnabled:e(F).getAutoshareEnabled()}))),{setAutoshareEnabled:t}=(0,i.useDispatch)(F);return[e,t]}function ae(){const{allowTweetImage:e}=(0,i.useSelect)((e=>({allowTweetImage:e(F).getAllowTweetImage()}))),{setAllowTweetImage:t}=(0,i.useDispatch)(F);return[e,t]}function oe(){const{tweetAccounts:e}=(0,i.useSelect)((e=>({tweetAccounts:e(F).getTweetAccounts()}))),{setTweetAccounts:t}=(0,i.useDispatch)(F);return[e,t]}function ie(){const{errorMessage:e}=(0,i.useSelect)((e=>({errorMessage:e(F).getErrorMessage()}))),{setErrorMessage:t}=(0,i.useDispatch)(F);return[e,t]}function ne(){const{imageId:e}=(0,i.useSelect)((e=>({imageId:e("core/editor").getEditedPostAttribute("featured_media")})));return e>0}function le(){const[e]=se(),[t]=ae(),[r]=oe(),[a]=re(),[,o]=ie(),[,n]=function(){const{saving:e}=(0,i.useSelect)((e=>({saving:e(F).getSaving()})));return[e,function(e){(0,i.dispatch)(F).setSaving(e),e?(0,i.dispatch)("core/editor").lockPostSaving():(0,i.dispatch)("core/editor").unlockPostSaving()}]}(),{hasFeaturedImage:c}=(0,i.useSelect)((e=>({hasFeaturedImage:e("core/editor").getEditedPostAttribute("featured_media")>0}))),u=(0,s.useCallback)((0,V.debounce)((async function(e,t,r,s){const a={};a[J]=e,a[Z]=t,a[ee]=r,a[te]=s||[];try{n(!0);const e=await q()({url:Q,data:a,method:"POST",parse:!1});if(!e.ok)throw e;await e.json(),o(""),n(!1)}catch(e){o(e.statusText?`${Y} ${e.status}: ${e.statusText}`:(0,l.__)("An error occurred.","autoshare-for-twitter")),n(!1)}}),250),[]);(0,s.useEffect)((()=>{u(e,a,t,r)}),[e,a,c,t,r,u])}const{siteUrl:ce,isLocalSite:ue,twitterURLLength:de}=adminAutoshareForTwitter;function he(){const e=e=>{if(!ue&&!isNaN(de))return Number(de);const t=e("core/editor").getPermalink();if(t)return t.length;const r=e("core/editor").getEditedPostAttribute("title");return r&&"rendered"in r?(ce+r.rendered).length:ce.length},{permalinkLength:t,maxLength:r}=(0,i.useSelect)((t=>({permalinkLength:e(t),maxLength:275-e(t)}))),[a,o]=re(),{tweetLength:c,overrideLengthClass:u}=(()=>{const e=t+a.length+5;return 280<=e?{tweetLength:(0,l.sprintf)(/* translators: %d is tweet message character count */ /* translators: %d is tweet message character count */
     1(()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var s in r)e.o(r,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:r[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{setAllowTweetImage:()=>P,setAutoshareEnabled:()=>j,setErrorMessage:()=>v,setLoaded:()=>A,setOverriding:()=>S,setSaving:()=>y,setTweetAccounts:()=>L,setTweetText:()=>E});var r={};e.r(r),e.d(r,{getAllowTweetImage:()=>D,getAutoshareEnabled:()=>k,getErrorMessage:()=>N,getOverriding:()=>C,getSaving:()=>I,getTweetAccounts:()=>O,getTweetText:()=>M});const s=window.wp.element,o=window.wp.plugins,a=window.wp.editPost,i=window.wp.data,n=window.wp.components,l=window.wp.i18n,c="SET_AUTOSHARE_FOR_TWITTER_ENABLED",u="SET_ERROR_MESSAGE",d="SET_LOADED",h="SET_OVERRIDING",w="SET_SAVING",g="SET_TWEET_TEXT",m="SET_ALLOW_TWEET_IMAGE",p="SET_TWEET_ACCOUNTS",{enabled:_,allowTweetImage:f,tweetAccounts:x,customTweetBody:T}=adminAutoshareForTwitter,b={autoshareEnabled:!!_&&"0"!==_,errorMessage:"",loaded:!1,overriding:!!T,overrideLength:0,tweetText:T||"",allowTweetImage:!!f,tweetAccounts:x||[]};const j=e=>({type:c,autoshareEnabled:e}),v=e=>({type:u,errorMessage:e}),A=()=>({type:d}),S=e=>({type:h,overriding:e}),y=e=>({type:w,saving:e}),E=e=>({type:g,tweetText:e}),P=e=>({type:m,allowTweetImage:e}),L=e=>({type:p,tweetAccounts:e}),k=e=>e.autoshareEnabled,N=e=>e.errorMessage,C=e=>e.overriding,I=e=>e.saving,M=e=>e.tweetText,D=e=>e.allowTweetImage,O=e=>e.tweetAccounts||[],F="10up/autoshare",R=window.wp.primitives,X=window.ReactJSXRuntime,z=e=>(0,X.jsx)(R.SVG,{version:"1.1",xmlSpace:"preserve",width:256,height:256,viewBox:"0 0 256 256",children:(0,X.jsxs)("g",{style:{stroke:"none",strokeWidth:0,strokeDasharray:"none",strokeLinecap:"butt",strokeLinejoin:"miter",strokeMiterlimit:10,fill:"none",fillRule:"nonzero",opacity:1},children:[(0,X.jsx)("path",{d:"M45 90C20.147 90 0 69.853 0 45S20.147 0 45 0s45 20.147 45 45-20.147 45-45 45z",style:{stroke:"none",strokeWidth:1,strokeDasharray:"none",strokeLinecap:"butt",strokeLinejoin:"miter",strokeMiterlimit:10,fill:e,fillRule:"nonzero",opacity:1},transform:"matrix(2.33 0 0 2.33 22.612 22.612)"}),(0,X.jsx)("path",{d:"M17.884 19.496 38.925 47.63 17.751 70.504h4.765l18.538-20.027 14.978 20.027h16.217L50.024 40.788l19.708-21.291h-4.765L47.895 37.94 34.101 19.496H17.884zm7.008 3.51h7.45L65.24 66.993h-7.45L24.892 23.006z",style:{stroke:"none",strokeWidth:1,strokeDasharray:"none",strokeLinecap:"butt",strokeLinejoin:"miter",strokeMiterlimit:10,fill:"#fff",fillRule:"nonzero",opacity:1},transform:"matrix(2.33 0 0 2.33 22.612 22.612)"})]})}),B=z("#1B1C20"),U=z("#1DA1F2"),W=z("#787E88"),$=z("#D0494A"),G=z("#7FD051"),H=e=>{let t=B;return e&&(t="published"===e?G:"error"===e?$:B),(0,X.jsx)(n.Icon,{className:"autoshare-for-twitter-icon",icon:t,size:48})},K=window.wp.apiFetch;var q=e.n(K);const V=window.lodash,{enableAutoshareKey:J,errorText:Y,restUrl:Q,tweetBodyKey:Z,allowTweetImageKey:ee,tweetAccountsKey:te}=adminAutoshareForTwitter;function re(){const{tweetText:e}=(0,i.useSelect)(e=>({tweetText:e(F).getTweetText()})),{setTweetText:t}=(0,i.useDispatch)(F);return[e,t]}function se(){const{autoshareEnabled:e}=(0,i.useSelect)(e=>({autoshareEnabled:e(F).getAutoshareEnabled()})),{setAutoshareEnabled:t}=(0,i.useDispatch)(F);return[e,t]}function oe(){const{allowTweetImage:e}=(0,i.useSelect)(e=>({allowTweetImage:e(F).getAllowTweetImage()})),{setAllowTweetImage:t}=(0,i.useDispatch)(F);return[e,t]}function ae(){const{tweetAccounts:e}=(0,i.useSelect)(e=>({tweetAccounts:e(F).getTweetAccounts()})),{setTweetAccounts:t}=(0,i.useDispatch)(F);return[e,t]}function ie(){const{errorMessage:e}=(0,i.useSelect)(e=>({errorMessage:e(F).getErrorMessage()})),{setErrorMessage:t}=(0,i.useDispatch)(F);return[e,t]}function ne(){const{imageId:e}=(0,i.useSelect)(e=>({imageId:e("core/editor").getEditedPostAttribute("featured_media")}));return e>0}function le(){const[e]=se(),[t]=oe(),[r]=ae(),[o]=re(),[,a]=ie(),[,n]=function(){const{saving:e}=(0,i.useSelect)(e=>({saving:e(F).getSaving()}));return[e,function(e){(0,i.dispatch)(F).setSaving(e),e?(0,i.dispatch)("core/editor").lockPostSaving():(0,i.dispatch)("core/editor").unlockPostSaving()}]}(),{hasFeaturedImage:c}=(0,i.useSelect)(e=>({hasFeaturedImage:e("core/editor").getEditedPostAttribute("featured_media")>0})),u=(0,s.useCallback)((0,V.debounce)(async function(e,t,r,s){const o={};o[J]=e,o[Z]=t,o[ee]=r,o[te]=s||[];try{n(!0);const e=await q()({url:Q,data:o,method:"POST",parse:!1});if(!e.ok)throw e;await e.json(),a(""),n(!1)}catch(e){a(e.statusText?`${Y} ${e.status}: ${e.statusText}`:(0,l.__)("An error occurred.","autoshare-for-twitter")),n(!1)}},250),[]);(0,s.useEffect)(()=>{u(e,o,t,r)},[e,o,c,t,r,u])}const{siteUrl:ce,isLocalSite:ue,twitterURLLength:de}=adminAutoshareForTwitter;function he(){const e=e=>{if(!ue&&!isNaN(de))return Number(de);const t=e("core/editor").getPermalink();if(t)return t.length;const r=e("core/editor").getEditedPostAttribute("title");return r&&"rendered"in r?(ce+r.rendered).length:ce.length},{permalinkLength:t,maxLength:r}=(0,i.useSelect)(t=>({permalinkLength:e(t),maxLength:275-e(t)})),[o,a]=re(),{tweetLength:c,overrideLengthClass:u}=(()=>{const e=t+o.length+5;return 280<=e?{tweetLength:(0,l.sprintf)(/* translators: %d is tweet message character count */ /* translators: %d is tweet message character count */
    22(0,l.__)("%d - Too Long!","autoshare-for-twitter"),e),overrideLengthClass:"over-limit"}:240<=e?{tweetLength:(0,l.sprintf)(/* translators: %d is tweet message character count */ /* translators: %d is tweet message character count */
    3 (0,l.__)("%d - Getting Long!","autoshare-for-twitter"),e),overrideLengthClass:"near-limit"}:{tweetLength:`${e}`,overrideLengthClass:""}})(),d=(0,i.useSelect)((e=>e("core/editor").getEditedPostAttribute("status"))),[h,w]=(0,s.useState)("publish"===d);(0,s.useEffect)((()=>{"publish"!==d||h||(o(""),w(!0))}),[d,h]);const g=()=>(0,R.jsx)(n.Tooltip,{text:(0,l.__)("Count is inclusive of the post permalink which will be included in the final tweet.","autoshare-for-twitter"),children:(0,R.jsx)("div",{children:c})});return(0,R.jsx)(n.TextareaControl,{value:a,onChange:e=>{o(e)},className:"autoshare-for-twitter-tweet-text",maxLength:r,label:(0,R.jsxs)("span",{style:{marginTop:"0.5rem",display:"block"},className:"autoshare-for-twitter-prepublish__message-label",children:[(0,R.jsxs)("span",{children:[(0,l.__)("Custom message:","autoshare-for-twitter")," "]}),(0,R.jsx)("span",{id:"autoshare-for-twitter-counter-wrap",className:`alignright ${u}`,children:(0,R.jsx)(g,{})})]})})}const we=window.wp.date,{connectedAccounts:ge,connectAccountUrl:me}=adminAutoshareForTwitter,pe=(0,we.getSettings)();function _e(){const e=ge?Object.values(ge):[],[t]=e,[r]=oe();return(0,R.jsxs)("div",{className:"autoshare-for-twitter-accounts-wrapper",children:[e.map((e=>(0,R.jsx)(fe,{...e},e.id))),t&&r?.length>0&&(0,R.jsx)(Te,{...t}),r?.length>0&&(0,R.jsx)("div",{className:"autoshare-for-twitter-rate-monitor__disclaimer",children:(0,R.jsxs)("p",{children:[(0,R.jsx)("strong",{children:(0,l.__)("Note:","autoshare-for-twitter")})," ",(0,l.__)("The displayed API rate limits are updated only when a tweet is posted. Since there is no dedicated endpoint for real-time usage data, the information provided may not fully reflect the current API usage, especially if other tweets are made through the same app.","autoshare-for-twitter")]})}),(0,R.jsx)("span",{className:"connect-account-link",children:(0,R.jsx)(n.ExternalLink,{href:me,children:(0,l.__)("Connect an account","autoshare-for-twitter")})})]})}function fe(e){const[t,r]=oe(),{id:s,name:a,username:o,profile_image_url:i}=e;return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsxs)("div",{className:"twitter-account-wrapper",children:[(0,R.jsx)("img",{src:i,alt:a,className:"twitter-account-profile-image"}),(0,R.jsxs)("span",{className:"account-details",children:[(0,R.jsxs)("strong",{children:["@",o]}),(0,R.jsx)("br",{}),a]}),(0,R.jsx)(n.ToggleControl,{checked:t&&t.includes(s),onChange:e=>{r(e?[...t,s]:t.filter((e=>e!==s)))},className:"autoshare-for-twitter-account-toggle"})]}),t&&t.includes(s)&&(0,R.jsx)(xe,{...e})]})}function xe({rate_limits:e}){return!e||!e.user_limit_24hour_limit||e?.user_limit_24hour_reset<Math.floor(Date.now()/1e3)?(0,R.jsx)("p",{children:(0,l.__)("No X/Twitter rate limit available yet. Make a post to X/Twitter first.","autoshare-for-twitter")}):(0,R.jsx)("div",{className:"autoshare-for-twitter-rate-monitor__user",children:(0,R.jsx)(be,{title:(0,l.__)("User 24-Hour Limit:","autoshare-for-twitter"),remaining:e?.user_limit_24hour_remaining,limit:e?.user_limit_24hour_limit,reset:e?.user_limit_24hour_reset,tooltip:(0,l.__)("The maximum number of requests a single user can make across all API endpoints within a 24-hour period.","autoshare-for-twitter")})})}function Te({rate_limits:e}){return!e||!e.app_limit_24hour_limit||e?.app_limit_24hour_reset<Math.floor(Date.now()/1e3)?null:(0,R.jsx)("div",{className:"autoshare-for-twitter-rate-monitor__app",children:(0,R.jsx)(be,{title:(0,l.__)("App 24-Hour Limit:","autoshare-for-twitter"),remaining:e?.app_limit_24hour_remaining,limit:e?.app_limit_24hour_limit,reset:e?.app_limit_24hour_reset,tooltip:(0,l.__)("The total number of API calls your app can make across all users within a 24-hour period.","autoshare-for-twitter")})})}function be({title:e,remaining:t,limit:r,reset:s,tooltip:a}){let o=(0,l.__)("N/A","autoshare-for-twitter");return s&&pe?.formats?.datetime&&(o=(0,we.dateI18n)(pe.formats.datetime,1e3*s),o=(0,l.sprintf)("Resets on %1$s",o)),(0,R.jsxs)("div",{className:"autoshare-for-twitter-rate-monitor__rate",children:[(0,R.jsxs)("p",{className:"autoshare-for-twitter-rate-monitor__rate-limit",children:[(0,R.jsx)(n.Tooltip,{text:a,children:(0,R.jsx)("strong",{children:e})})," ",(0,l.sprintf)(/* translators: %1$s: Remaining, %2$s: Limit */ /* translators: %1$s: Remaining, %2$s: Limit */
    4 (0,l.__)("%1$s of %2$s requests remaining","autoshare-for-twitter"),null!=t?t:(0,l.__)("N/A","autoshare-for-twitter"),null!=r?r:(0,l.__)("N/A","autoshare-for-twitter"))]}),(0,R.jsx)("p",{className:"autoshare-for-twitter-rate-monitor__rate-reset",children:o})]})}const je=({errorMessage:e})=>(0,R.jsxs)("span",{children:[e," ",e?.includes("When authenticating requests to the Twitter API v2 endpoints, you must use keys and tokens from a Twitter developer App that is attached to a Project. You can create a project via the developer portal.")&&(0,R.jsx)(n.ExternalLink,{href:"https://developer.twitter.com/en/docs/twitter-api/migrate/ready-to-migrate",children:(0,l.__)("Learn more here.","autoshare-for-twitter")})]});function ve({messages:e}){return e&&e.message.length?(0,R.jsxs)("div",{className:"autoshare-for-twitter-post-status",children:[e.message.map(((e,t)=>{const r=H(e.status);return(0,R.jsxs)("div",{className:"autoshare-for-twitter-log",children:[r,(0,R.jsxs)("span",{children:[e.url?(0,R.jsx)(n.ExternalLink,{href:e.url,children:e.message}):(0,R.jsx)(je,{errorMessage:e.message}),!!e.handle&&(0,R.jsx)("strong",{children:" - @"+e.handle})]})]},t)})),(0,R.jsx)(n.CardDivider,{})]}):null}function Ae(){const[e,t]=se(),[r,s]=function(){const{overriding:e}=(0,i.useSelect)((e=>({overriding:e(F).getOverriding()}))),{setOverriding:t}=(0,i.useDispatch)(F);return[e,t]}(),[a,o]=ae(),[c]=ie(),u=ne(),d=(0,i.select)("core/editor").getCurrentPostAttribute("autoshare_for_twitter_status");return le(),(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(ve,{messages:d}),(0,R.jsx)(n.ToggleControl,{label:e?(0,l.__)("Post to X/Twitter when published","autoshare-for-twitter"):(0,l.__)("Don't post to X/Twitter","autoshare-for-twitter"),checked:e,onChange:e=>{t(e)},className:"autoshare-for-twitter-toggle-control"}),e&&u&&(0,R.jsx)(n.ToggleControl,{label:(0,l.__)("Use featured image in Post to X/Twitter","autoshare-for-twitter"),checked:a,onChange:()=>{o(!a)},className:"autoshare-for-twitter-toggle-control"}),e&&(0,R.jsx)(_e,{}),e&&(0,R.jsxs)("div",{className:"autoshare-for-twitter-prepublish__override-row",children:[r&&(0,R.jsx)(he,{}),(0,R.jsx)(n.Button,{isLink:!0,onClick:()=>{s(!r)},children:r?(0,l.__)("Hide","autoshare-for-twitter"):(0,l.__)("Edit","autoshare-for-twitter")})]}),(0,R.jsx)("div",{children:c})]})}const Se=(0,window.wp.compose.compose)((0,i.withSelect)((e=>({statusMessage:e("core/editor").getCurrentPostAttribute("autoshare_for_twitter_status")}))))((function(){const e=ne(),[t,r]=ae(),[,a]=re(),[o,c]=(0,s.useState)(!1),[u,d]=(0,s.useState)(!1),{messages:h}=(0,i.useSelect)((e=>({messages:e("core/editor").getCurrentPostAttribute("autoshare_for_twitter_status")}))),[w,g]=(0,s.useState)(h);if(le(),w&&!w.message.length)return null;const m=(0,R.jsx)(n.Icon,{icon:(0,R.jsx)("svg",{viewBox:"0 0 28 28",xmlns:"http://www.w3.org/2000/svg",width:"28",height:"28","aria-hidden":"true",focusable:"false",children:(0,R.jsx)("path",{d:"M6.5 12.4L12 8l5.5 4.4-.9 1.2L12 10l-4.5 3.6-1-1.2z"})})}),p=(0,R.jsx)(n.Icon,{icon:(0,R.jsx)("svg",{viewBox:"0 0 28 28",xmlns:"http://www.w3.org/2000/svg",width:"28",height:"28","aria-hidden":"true",focusable:"false",children:(0,R.jsx)("path",{d:"M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z"})})});return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(ve,{messages:w}),(0,R.jsx)(n.Button,{className:"autoshare-for-twitter-tweet-now",variant:"link",text:(0,l.__)("Post to X/Twitter now","autoshare-for-twitter"),onClick:()=>d(!u),iconPosition:"right",icon:u?m:p}),u&&(0,R.jsxs)(R.Fragment,{children:[e&&(0,R.jsx)(n.ToggleControl,{label:(0,l.__)("Use featured image in Post to X/Twitter","autoshare-for-twitter"),checked:t,onChange:()=>{r(!t)},className:"autoshare-for-twitter-toggle-control"}),(0,R.jsx)(_e,{}),(0,R.jsx)(he,{}),(0,R.jsx)(n.Button,{variant:"primary",className:"autoshare-for-twitter-re-tweet",text:o?(0,l.__)("Posting to X/Twitter…","autoshare-for-twitter"):(0,l.__)("Post to X/Twitter","autoshare-for-twitter"),onClick:()=>{(async()=>{c(!0);const e=await(0,i.select)("core/editor").getCurrentPostId(),t=new FormData;t.append("action",adminAutoshareForTwitter.retweetAction),t.append("nonce",adminAutoshareForTwitter.nonce),t.append("post_id",e);const r=await fetch(ajaxurl,{method:"POST",body:t}),{data:s}=await r.json();s.is_retweeted&&a(""),g(s),c(!1)})()}})]})]})}));(0,i.registerStore)(F,{reducer:function(e=b,t){switch(t.type){case c:return{...e,autoshareEnabled:t.autoshareEnabled};case u:return{...e,errorMessage:t.errorMessage};case d:return{...e,loaded:!0};case h:return{...e,overriding:t.overriding};case w:return{...e,saving:t.saving};case g:return{...e,tweetText:t.tweetText};case m:return{...e,allowTweetImage:t.allowTweetImage};case p:return{...e,tweetAccounts:t.tweetAccounts}}},actions:t,selectors:r});class ye extends s.Component{constructor(e){super(e),this.state={enabledText:""},this.maybeSetEnabledText=this.maybeSetEnabledText.bind(this)}componentDidMount(){(0,i.dispatch)(F).setLoaded(),(0,i.subscribe)(this.maybeSetEnabledText)}maybeSetEnabledText(){try{const e=(0,i.select)(F).getAutoshareEnabled(),t=e?(0,l.__)("This post will be posted to X/Twitter","autoshare-for-twitter"):(0,l.__)("This post will not be posted to X/Twitter","autoshare-for-twitter");t!==this.state.enabledText&&this.setState({enabled:e,enabledText:t})}catch(e){}}render(){const{enabled:e,enabledText:t}=this.state,r=e?U:W,s=(0,R.jsx)(n.Icon,{className:"autoshare-for-twitter-icon components-panel__icon",icon:r,size:24});return(0,R.jsx)(o.PluginPrePublishPanel,{title:t,icon:s,className:"autoshare-for-twitter-pre-publish-panel",children:(0,R.jsx)(Ae,{})})}}class Ee extends s.Component{constructor(e){super(e),this.state={enabledText:""},this.maybeSetEnabledText=this.maybeSetEnabledText.bind(this)}componentDidMount(){(0,i.dispatch)(F).setLoaded(),(0,i.subscribe)(this.maybeSetEnabledText)}maybeSetEnabledText(){try{const e=(0,i.select)(F).getAutoshareEnabled(),t=e?(0,l.__)("Autopost to X/Twitter enabled","autoshare-for-twitter"):(0,l.__)("Autopost to X/Twitter disabled","autoshare-for-twitter");t!==this.state.enabledText&&this.setState({enabledText:t,enabled:e})}catch(e){}}render(){if("publish"===(0,i.select)("core/editor").getCurrentPostAttribute("status")){const e=(0,i.select)("core/editor").getCurrentPostAttribute("autoshare_for_twitter_status");let t="";return e&&e.message&&e.message.length&&(t=e.message[e.message.length-1].status||""),(0,R.jsx)(o.PluginDocumentSettingPanel,{title:(0,l.__)("Autopost to X/Twitter","autoshare-for-twitter"),icon:H(t),className:"autoshare-for-twitter-editor-panel",children:(0,R.jsx)(Se,{})})}const{enabled:e,enabledText:t}=this.state,r=e?U:W,s=(0,R.jsx)(n.Icon,{className:"autoshare-for-twitter-icon components-panel__icon",icon:r,size:24});return(0,R.jsx)(o.PluginDocumentSettingPanel,{title:t,icon:s,className:"autoshare-for-twitter-editor-panel",children:(0,R.jsx)(Ae,{})})}}(0,a.registerPlugin)("autoshare-for-twitter-editor-panel",{render:Ee}),(0,a.registerPlugin)("autoshare-for-twitter-pre-publish-panel",{render:ye}),(0,a.registerPlugin)("autoshare-for-twitter-post-publish-panel",{render:()=>(0,R.jsx)(o.PluginPostPublishPanel,{className:"my-plugin-post-status-info",children:(0,R.jsx)(Se,{})})})})();
     3(0,l.__)("%d - Getting Long!","autoshare-for-twitter"),e),overrideLengthClass:"near-limit"}:{tweetLength:`${e}`,overrideLengthClass:""}})(),d=(0,i.useSelect)(e=>e("core/editor").isPublishingPost()),h=(0,i.useSelect)(e=>"publish"===e("core/editor").getEditedPostAttribute("status")),w=(0,s.useRef)(d);(0,s.useEffect)(()=>{w.current&&!d&&h&&a(""),w.current=d},[d,h]);const g=()=>(0,X.jsx)(n.Tooltip,{text:(0,l.__)("Count is inclusive of the post permalink which will be included in the final tweet.","autoshare-for-twitter"),children:(0,X.jsx)("div",{children:c})});return(0,X.jsx)(n.TextareaControl,{value:o,onChange:e=>{a(e)},className:"autoshare-for-twitter-tweet-text",maxLength:r,label:(0,X.jsxs)("span",{style:{marginTop:"0.5rem",display:"block"},className:"autoshare-for-twitter-prepublish__message-label",children:[(0,X.jsxs)("span",{children:[(0,l.__)("Custom message:","autoshare-for-twitter")," "]}),(0,X.jsx)("span",{id:"autoshare-for-twitter-counter-wrap",className:`alignright ${u}`,children:(0,X.jsx)(g,{})})]})})}const we=window.wp.date,{connectedAccounts:ge,connectAccountUrl:me}=adminAutoshareForTwitter,pe=(0,we.getSettings)();function _e(){const e=ge?Object.values(ge):[],[t]=e,[r]=ae();return(0,X.jsxs)("div",{className:"autoshare-for-twitter-accounts-wrapper",children:[e.map(e=>(0,X.jsx)(fe,{...e},e.id)),t&&r?.length>0&&(0,X.jsx)(Te,{...t}),r?.length>0&&(0,X.jsx)("div",{className:"autoshare-for-twitter-rate-monitor__disclaimer",children:(0,X.jsxs)("p",{children:[(0,X.jsx)("strong",{children:(0,l.__)("Note:","autoshare-for-twitter")})," ",(0,l.__)("The displayed API rate limits are updated only when a tweet is posted. Since there is no dedicated endpoint for real-time usage data, the information provided may not fully reflect the current API usage, especially if other tweets are made through the same app.","autoshare-for-twitter")]})}),(0,X.jsx)("span",{className:"connect-account-link",children:(0,X.jsx)(n.ExternalLink,{href:me,children:(0,l.__)("Connect an account","autoshare-for-twitter")})})]})}function fe(e){const[t,r]=ae(),{id:s,name:o,username:a,profile_image_url:i}=e;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)("div",{className:"twitter-account-wrapper",children:[(0,X.jsx)("img",{src:i,alt:o,className:"twitter-account-profile-image"}),(0,X.jsxs)("span",{className:"account-details",children:[(0,X.jsxs)("strong",{children:["@",a]}),(0,X.jsx)("br",{}),o]}),(0,X.jsx)(n.ToggleControl,{checked:t&&t.includes(s),onChange:e=>{r(e?[...t,s]:t.filter(e=>e!==s))},className:"autoshare-for-twitter-account-toggle"})]}),t&&t.includes(s)&&(0,X.jsx)(xe,{...e})]})}function xe({rate_limits:e}){return!e||!e.user_limit_24hour_limit||e?.user_limit_24hour_reset<Math.floor(Date.now()/1e3)?(0,X.jsx)("p",{children:(0,l.__)("No X/Twitter rate limit available yet. Make a post to X/Twitter first.","autoshare-for-twitter")}):(0,X.jsx)("div",{className:"autoshare-for-twitter-rate-monitor__user",children:(0,X.jsx)(be,{title:(0,l.__)("User 24-Hour Limit:","autoshare-for-twitter"),remaining:e?.user_limit_24hour_remaining,limit:e?.user_limit_24hour_limit,reset:e?.user_limit_24hour_reset,tooltip:(0,l.__)("The maximum number of requests a single user can make across all API endpoints within a 24-hour period.","autoshare-for-twitter")})})}function Te({rate_limits:e}){return!e||!e.app_limit_24hour_limit||e?.app_limit_24hour_reset<Math.floor(Date.now()/1e3)?null:(0,X.jsx)("div",{className:"autoshare-for-twitter-rate-monitor__app",children:(0,X.jsx)(be,{title:(0,l.__)("App 24-Hour Limit:","autoshare-for-twitter"),remaining:e?.app_limit_24hour_remaining,limit:e?.app_limit_24hour_limit,reset:e?.app_limit_24hour_reset,tooltip:(0,l.__)("The total number of API calls your app can make across all users within a 24-hour period.","autoshare-for-twitter")})})}function be({title:e,remaining:t,limit:r,reset:s,tooltip:o}){let a=(0,l.__)("N/A","autoshare-for-twitter");return s&&pe?.formats?.datetime&&(a=(0,we.dateI18n)(pe.formats.datetime,1e3*s),a=(0,l.sprintf)("Resets on %1$s",a)),(0,X.jsxs)("div",{className:"autoshare-for-twitter-rate-monitor__rate",children:[(0,X.jsxs)("p",{className:"autoshare-for-twitter-rate-monitor__rate-limit",children:[(0,X.jsx)(n.Tooltip,{text:o,children:(0,X.jsx)("strong",{children:e})})," ",(0,l.sprintf)(/* translators: %1$s: Remaining, %2$s: Limit */ /* translators: %1$s: Remaining, %2$s: Limit */
     4(0,l.__)("%1$s of %2$s requests remaining","autoshare-for-twitter"),null!=t?t:(0,l.__)("N/A","autoshare-for-twitter"),null!=r?r:(0,l.__)("N/A","autoshare-for-twitter"))]}),(0,X.jsx)("p",{className:"autoshare-for-twitter-rate-monitor__rate-reset",children:a})]})}const je=({errorMessage:e})=>(0,X.jsxs)("span",{children:[e," ",e?.includes("When authenticating requests to the Twitter API v2 endpoints, you must use keys and tokens from a Twitter developer App that is attached to a Project. You can create a project via the developer portal.")&&(0,X.jsx)(n.ExternalLink,{href:"https://developer.twitter.com/en/docs/twitter-api/migrate/ready-to-migrate",children:(0,l.__)("Learn more here.","autoshare-for-twitter")})]});function ve({messages:e}){return e&&e.message.length?(0,X.jsxs)("div",{className:"autoshare-for-twitter-post-status",children:[e.message.map((e,t)=>{const r=H(e.status);return(0,X.jsxs)("div",{className:"autoshare-for-twitter-log",children:[r,(0,X.jsxs)("span",{children:[e.url?(0,X.jsx)(n.ExternalLink,{href:e.url,children:e.message}):(0,X.jsx)(je,{errorMessage:e.message}),!!e.handle&&(0,X.jsx)("strong",{children:" - @"+e.handle})]})]},t)}),(0,X.jsx)(n.CardDivider,{})]}):null}function Ae(){const[e,t]=se(),[r,s]=function(){const{overriding:e}=(0,i.useSelect)(e=>({overriding:e(F).getOverriding()})),{setOverriding:t}=(0,i.useDispatch)(F);return[e,t]}(),[o,a]=oe(),[c]=ie(),u=ne(),d=(0,i.select)("core/editor").getCurrentPostAttribute("autoshare_for_twitter_status");return le(),(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(ve,{messages:d}),(0,X.jsx)(n.ToggleControl,{label:e?(0,l.__)("Post to X/Twitter when published","autoshare-for-twitter"):(0,l.__)("Don't post to X/Twitter","autoshare-for-twitter"),checked:e,onChange:e=>{t(e)},className:"autoshare-for-twitter-toggle-control"}),e&&u&&(0,X.jsx)(n.ToggleControl,{label:(0,l.__)("Use featured image in Post to X/Twitter","autoshare-for-twitter"),checked:o,onChange:()=>{a(!o)},className:"autoshare-for-twitter-toggle-control"}),e&&(0,X.jsx)(_e,{}),e&&(0,X.jsxs)("div",{className:"autoshare-for-twitter-prepublish__override-row",children:[r&&(0,X.jsx)(he,{}),(0,X.jsx)(n.Button,{isLink:!0,onClick:()=>{s(!r)},children:r?(0,l.__)("Hide","autoshare-for-twitter"):(0,l.__)("Edit","autoshare-for-twitter")})]}),(0,X.jsx)("div",{children:c})]})}const Se=(0,window.wp.compose.compose)((0,i.withSelect)(e=>({statusMessage:e("core/editor").getCurrentPostAttribute("autoshare_for_twitter_status")})))(function(){const e=ne(),[t,r]=oe(),[,o]=re(),[a,c]=(0,s.useState)(!1),[u,d]=(0,s.useState)(!1),{messages:h}=(0,i.useSelect)(e=>({messages:e("core/editor").getCurrentPostAttribute("autoshare_for_twitter_status")})),[w,g]=(0,s.useState)(h);if(le(),w&&!w.message.length)return null;const m=(0,X.jsx)(n.Icon,{icon:(0,X.jsx)("svg",{viewBox:"0 0 28 28",xmlns:"http://www.w3.org/2000/svg",width:"28",height:"28","aria-hidden":"true",focusable:"false",children:(0,X.jsx)("path",{d:"M6.5 12.4L12 8l5.5 4.4-.9 1.2L12 10l-4.5 3.6-1-1.2z"})})}),p=(0,X.jsx)(n.Icon,{icon:(0,X.jsx)("svg",{viewBox:"0 0 28 28",xmlns:"http://www.w3.org/2000/svg",width:"28",height:"28","aria-hidden":"true",focusable:"false",children:(0,X.jsx)("path",{d:"M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z"})})});return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(ve,{messages:w}),(0,X.jsx)(n.Button,{className:"autoshare-for-twitter-tweet-now",variant:"link",text:(0,l.__)("Post to X/Twitter now","autoshare-for-twitter"),onClick:()=>d(!u),iconPosition:"right",icon:u?m:p}),u&&(0,X.jsxs)(X.Fragment,{children:[e&&(0,X.jsx)(n.ToggleControl,{label:(0,l.__)("Use featured image in Post to X/Twitter","autoshare-for-twitter"),checked:t,onChange:()=>{r(!t)},className:"autoshare-for-twitter-toggle-control"}),(0,X.jsx)(_e,{}),(0,X.jsx)(he,{}),(0,X.jsx)(n.Button,{variant:"primary",className:"autoshare-for-twitter-re-tweet",text:a?(0,l.__)("Posting to X/Twitter…","autoshare-for-twitter"):(0,l.__)("Post to X/Twitter","autoshare-for-twitter"),onClick:()=>{(async()=>{c(!0);const e=await(0,i.select)("core/editor").getCurrentPostId(),t=new FormData;t.append("action",adminAutoshareForTwitter.retweetAction),t.append("nonce",adminAutoshareForTwitter.nonce),t.append("post_id",e);const r=await fetch(ajaxurl,{method:"POST",body:t}),{data:s}=await r.json();s.is_retweeted&&o(""),g(s),c(!1)})()}})]})]})});(0,i.registerStore)(F,{reducer:function(e=b,t){switch(t.type){case c:return{...e,autoshareEnabled:t.autoshareEnabled};case u:return{...e,errorMessage:t.errorMessage};case d:return{...e,loaded:!0};case h:return{...e,overriding:t.overriding};case w:return{...e,saving:t.saving};case g:return{...e,tweetText:t.tweetText};case m:return{...e,allowTweetImage:t.allowTweetImage};case p:return{...e,tweetAccounts:t.tweetAccounts}}},actions:t,selectors:r});class ye extends s.Component{constructor(e){super(e),this.state={enabledText:""},this.maybeSetEnabledText=this.maybeSetEnabledText.bind(this)}componentDidMount(){(0,i.dispatch)(F).setLoaded(),(0,i.subscribe)(this.maybeSetEnabledText)}maybeSetEnabledText(){try{const e=(0,i.select)(F).getAutoshareEnabled(),t=e?(0,l.__)("This post will be posted to X/Twitter","autoshare-for-twitter"):(0,l.__)("This post will not be posted to X/Twitter","autoshare-for-twitter");t!==this.state.enabledText&&this.setState({enabled:e,enabledText:t})}catch(e){}}render(){const{enabled:e,enabledText:t}=this.state,r=e?U:W,s=(0,X.jsx)(n.Icon,{className:"autoshare-for-twitter-icon components-panel__icon",icon:r,size:24});return(0,X.jsx)(a.PluginPrePublishPanel,{title:t,icon:s,className:"autoshare-for-twitter-pre-publish-panel",children:(0,X.jsx)(Ae,{})})}}class Ee extends s.Component{constructor(e){super(e),this.state={enabledText:""},this.maybeSetEnabledText=this.maybeSetEnabledText.bind(this)}componentDidMount(){(0,i.dispatch)(F).setLoaded(),(0,i.subscribe)(this.maybeSetEnabledText)}maybeSetEnabledText(){try{const e=(0,i.select)(F).getAutoshareEnabled(),t=e?(0,l.__)("Autopost to X/Twitter enabled","autoshare-for-twitter"):(0,l.__)("Autopost to X/Twitter disabled","autoshare-for-twitter");t!==this.state.enabledText&&this.setState({enabledText:t,enabled:e})}catch(e){}}render(){if("publish"===(0,i.select)("core/editor").getCurrentPostAttribute("status")){const e=(0,i.select)("core/editor").getCurrentPostAttribute("autoshare_for_twitter_status");let t="";return e&&e.message&&e.message.length&&(t=e.message[e.message.length-1].status||""),(0,X.jsx)(a.PluginDocumentSettingPanel,{title:(0,l.__)("Autopost to X/Twitter","autoshare-for-twitter"),icon:H(t),className:"autoshare-for-twitter-editor-panel",children:(0,X.jsx)(Se,{})})}const{enabled:e,enabledText:t}=this.state,r=e?U:W,s=(0,X.jsx)(n.Icon,{className:"autoshare-for-twitter-icon components-panel__icon",icon:r,size:24});return(0,X.jsx)(a.PluginDocumentSettingPanel,{title:t,icon:s,className:"autoshare-for-twitter-editor-panel",children:(0,X.jsx)(Ae,{})})}}(0,o.registerPlugin)("autoshare-for-twitter-editor-panel",{render:Ee}),(0,o.registerPlugin)("autoshare-for-twitter-pre-publish-panel",{render:ye}),(0,o.registerPlugin)("autoshare-for-twitter-post-publish-panel",{render:()=>(0,X.jsx)(a.PluginPostPublishPanel,{className:"my-plugin-post-status-info",children:(0,X.jsx)(Se,{})})})})();
  • autoshare-for-twitter/trunk/includes/admin/post-transition.php

    r2956880 r3449105  
    102102    $post = get_post( $post_id );
    103103
     104    // Ensure we have a valid $post object.
     105    if ( ! $post ) {
     106        return false;
     107    }
     108
     109    // Ensure the user has edit permissions on the post.
     110    if ( ! current_user_can( 'edit_post', $post->ID ) ) {
     111        return false;
     112    }
     113
    104114    /*
    105115     * Don't bother enqueuing assets if the post type hasn't opted into autosharing
     
    111121    // Don't publish tweets from staging/testing sites.
    112122    if ( ! AST_Staging::is_production_site() ) {
    113         return false;
    114     }
    115 
    116     // Ensure we have a $post object.
    117     if ( ! $post ) {
    118123        return false;
    119124    }
     
    190195 */
    191196function retweet() {
     197    // Ensure the nonce is valid.
    192198    if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'wp_rest' ) ) {
    193199        wp_send_json_error( __( 'Nonce verification failed.', 'autoshare-for-twitter' ) );
    194200    }
    195201
    196     $post_id      = isset( $_POST['post_id'] ) ? absint( $_POST['post_id'] ) : 0;
     202    // Ensure we have a post ID.
     203    $post_id = isset( $_POST['post_id'] ) ? absint( $_POST['post_id'] ) : 0;
     204
     205    if ( 0 === $post_id ) {
     206        wp_send_json_error( __( 'Invalid post ID.', 'autoshare-for-twitter' ) );
     207    }
     208
     209    // Ensure the user has edit permissions on the post.
     210    if ( ! current_user_can( 'edit_post', $post_id ) ) {
     211        wp_send_json_error( __( 'You do not have permission to retweet this post.', 'autoshare-for-twitter' ) );
     212    }
     213
     214    // Publish the tweet.
    197215    $is_retweeted = publish_tweet( $post_id, true );
    198216
  • autoshare-for-twitter/trunk/readme.txt

    r3432284 r3449105  
    22Contributors:      10up, johnwatkins0, adamsilverstein, scottlee, dinhtungdu, jeffpaul, dharm1025
    33Tags:              twitter, tweet, share, social media, posse
    4 Requires at least: 6.6
     4Requires at least: 6.8
    55Tested up to:      6.9
    6 Stable tag:        2.3.1
     6Stable tag:        2.3.2
    77License:           GPL-2.0-or-later
    88License URI:       https://spdx.org/licenses/GPL-2.0-or-later.html
     
    102102To avoid encountering this error in the future and to have higher usage limits, we recommend considering a subscription to either the Basic or Pro access level. These access levels provide increased quotas and additional benefits to accommodate your needs. For more information on X/Twitter API access levels, you can visit this link: https://developer.x.com/en/products/x-api.
    103103
     104= Where do I report security bugs found in this plugin? =
     105
     106Please report security bugs found in the source code of the Autoshare for Twitter plugin through the [Patchstack Vulnerability Disclosure  Program](https://patchstack.com/database/vdp/9e5fba6a-26c2-4dd7-a2ae-b8628c65835e).  The Patchstack team will assist you with verification, CVE assignment, and notify the developers of this plugin.
     107
    104108== Screenshots ==
    105109
     
    110114
    111115== Changelog ==
     116
     117= 2.3.2 - 2026-01-29 =
     118**Note that this version bumps the WordPress minimum supported version from 6.6 to 6.8.**
     119
     120* **Security:** Fix access control issue for retweeting (props [@nblirwn](https://github.com/nblirwn), [@dkotter](https://github.com/dkotter), [@peterwilsoncc](https://github.com/peterwilsoncc), [@jeffpaul](https://github.com/jeffpaul) via [GHSA-9j39-fp7c-5453](https://github.com/10up/autoshare-for-twitter/security/advisories/GHSA-9j39-fp7c-5453)).
     121* **Added:** Support for the WordPress.org plugin preview (props [@dkotter](https://github.com/dkotter), [@iamdharmesh](https://github.com/iamdharmesh), [@jeffpaul](https://github.com/jeffpaul) via [#297](https://github.com/10up/autoshare-for-twitter/pull/297)).
     122* **Changed:** Bumped WordPress "tested up to" version 6.9 (props [@peterwilsoncc](https://github.com/peterwilsoncc), [@dkotter](https://github.com/dkotter) via [#390](https://github.com/10up/autoshare-for-twitter/pull/390)).
     123* **Changed:** Bumped WordPress minimum supported version from 6.6 to 6.8 (props [@jeffpaul](https://github.com/jeffpaul) via [#397](https://github.com/10up/autoshare-for-twitter/pull/397)).
     124* **Changed:** Updated npm dependencies via `npm audit fix` (props [@peterwilsoncc](https://github.com/peterwilsoncc), [@dkotter](https://github.com/dkotter) via [#392](https://github.com/10up/autoshare-for-twitter/pull/392)).
     125* **Fixed:** Clear tweet text field only after post publish completes in block editor (props [@chandrapatel](https://github.com/chandrapatel), [@iamdharmesh](https://github.com/iamdharmesh) via [#378](https://github.com/10up/autoshare-for-twitter/pull/378)).
    112126
    113127= 2.3.1 - 2025-07-14 =
     
    136150* **Security:** Bump `ws` from 7.5.10 to 8.18.0, `serve-static` from 1.15.0 to 1.16.2 and `express` from 4.19.2 to 4.21.0 (props [@dependabot](https://github.com/apps/dependabot), [@Sidsector9](https://github.com/Sidsector9) via [#343](https://github.com/10up/autoshare-for-twitter/pull/343)).
    137151
    138 = 2.2.1 - 2024-07-08 =
    139 * **Changed:** Bump WordPress "tested up to" version 6.5 (props [@iamdharmesh](https://github.com/iamdharmesh), [@dkotter](https://github.com/dkotter), [@sudip-md](https://github.com/sudip-md), [@jeffpaul](https://github.com/jeffpaul) via [#319](https://github.com/10up/autoshare-for-twitter/pull/319)).
    140 * **Fixed:** Ampersands no longer converted to HTML entities when adding query parameters to the post URL with the `autoshare_for_twitter_post_url` filter (props [@justinmaurerdotdev](https://github.com/justinmaurerdotdev), [@iamdharmesh](https://github.com/iamdharmesh) via [#324](https://github.com/10up/autoshare-for-twitter/pull/324)).
    141 * **Security:** Bump `express` from 4.18.2 to 4.19.2 (props [@dependabot](https://github.com/apps/dependabot), [@iamdharmesh](https://github.com/iamdharmesh) via [#321](https://github.com/10up/autoshare-for-twitter/pull/321)).
    142 * **Security:** Bump `follow-redirects` from 1.15.5 to 1.15.6 (props [@dependabot](https://github.com/apps/dependabot), [@iamdharmesh](https://github.com/iamdharmesh) via [#321](https://github.com/10up/autoshare-for-twitter/pull/321)).
    143 * **Security:** Bump `ip` from 1.1.8 to 1.1.9 (props [@dependabot](https://github.com/apps/dependabot), [@iamdharmesh](https://github.com/iamdharmesh) via [#321](https://github.com/10up/autoshare-for-twitter/pull/321)).
    144 * **Security:** Bump `webpack-dev-middleware` from 5.3.3 to 5.3.4 (props [@dependabot](https://github.com/apps/dependabot), [@iamdharmesh](https://github.com/iamdharmesh) via [#321](https://github.com/10up/autoshare-for-twitter/pull/321)).
    145 
    146152Further changelog entries can be found in the [CHANGELOG.md](https://github.com/10up/autoshare-for-twitter/blob/trunk/CHANGELOG.md) file.
    147153
    148154== Upgrade Notice ==
     155
     156= 2.3.2 =
     157Security release: this patches an access control issue with retweets. Please upgrade promptly. This release bumps the WordPress minimum from 6.6 to 6.8.
    149158
    150159= 2.3.1 =
  • autoshare-for-twitter/trunk/vendor/autoload.php

    r3327663 r3449105  
    2020require_once __DIR__ . '/composer/autoload_real.php';
    2121
    22 return ComposerAutoloaderInit10upAutoshareForTwitterV231::getLoader();
     22return ComposerAutoloaderInit10upAutoshareForTwitterV232::getLoader();
  • autoshare-for-twitter/trunk/vendor/composer/autoload_real.php

    r3327663 r3449105  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInit10upAutoshareForTwitterV231
     5class ComposerAutoloaderInit10upAutoshareForTwitterV232
    66{
    77    private static $loader;
     
    2323        }
    2424
    25         spl_autoload_register(array('ComposerAutoloaderInit10upAutoshareForTwitterV231', 'loadClassLoader'), true, true);
     25        spl_autoload_register(array('ComposerAutoloaderInit10upAutoshareForTwitterV232', 'loadClassLoader'), true, true);
    2626        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
    27         spl_autoload_unregister(array('ComposerAutoloaderInit10upAutoshareForTwitterV231', 'loadClassLoader'));
     27        spl_autoload_unregister(array('ComposerAutoloaderInit10upAutoshareForTwitterV232', 'loadClassLoader'));
    2828
    2929        require __DIR__ . '/autoload_static.php';
    30         call_user_func(\Composer\Autoload\ComposerStaticInit10upAutoshareForTwitterV231::getInitializer($loader));
     30        call_user_func(\Composer\Autoload\ComposerStaticInit10upAutoshareForTwitterV232::getInitializer($loader));
    3131
    3232        $loader->register(true);
  • autoshare-for-twitter/trunk/vendor/composer/autoload_static.php

    r3327663 r3449105  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInit10upAutoshareForTwitterV231
     7class ComposerStaticInit10upAutoshareForTwitterV232
    88{
    99    public static $prefixLengthsPsr4 = array (
    10         'C' => 
     10        'C' =>
    1111        array (
    1212            'Composer\\CaBundle\\' => 18,
    1313        ),
    14         'A' => 
     14        'A' =>
    1515        array (
    1616            'Abraham\\TwitterOAuth\\' => 21,
     
    1919
    2020    public static $prefixDirsPsr4 = array (
    21         'Composer\\CaBundle\\' => 
     21        'Composer\\CaBundle\\' =>
    2222        array (
    2323            0 => __DIR__ . '/..' . '/composer/ca-bundle/src',
    2424        ),
    25         'Abraham\\TwitterOAuth\\' => 
     25        'Abraham\\TwitterOAuth\\' =>
    2626        array (
    2727            0 => __DIR__ . '/..' . '/abraham/twitteroauth/src',
     
    4848    {
    4949        return \Closure::bind(function () use ($loader) {
    50             $loader->prefixLengthsPsr4 = ComposerStaticInit10upAutoshareForTwitterV231::$prefixLengthsPsr4;
    51             $loader->prefixDirsPsr4 = ComposerStaticInit10upAutoshareForTwitterV231::$prefixDirsPsr4;
    52             $loader->classMap = ComposerStaticInit10upAutoshareForTwitterV231::$classMap;
     50            $loader->prefixLengthsPsr4 = ComposerStaticInit10upAutoshareForTwitterV232::$prefixLengthsPsr4;
     51            $loader->prefixDirsPsr4 = ComposerStaticInit10upAutoshareForTwitterV232::$prefixDirsPsr4;
     52            $loader->classMap = ComposerStaticInit10upAutoshareForTwitterV232::$classMap;
    5353
    5454        }, null, ClassLoader::class);
  • autoshare-for-twitter/trunk/vendor/composer/installed.php

    r3327663 r3449105  
    22    'root' => array(
    33        'name' => '10up/autoshare-for-twitter',
    4         'pretty_version' => '2.3.1',
    5         'version' => '2.3.1.0',
    6         'reference' => 'f0ac633ecc04caa191eeccadfe1edb40c4151344',
     4        'pretty_version' => '2.3.2',
     5        'version' => '2.3.2.0',
     6        'reference' => '2bc26a29159a83a1ce4388a71ef21b2369f22382',
    77        'type' => 'wordpress-plugin',
    88        'install_path' => __DIR__ . '/../../',
     
    1212    'versions' => array(
    1313        '10up/autoshare-for-twitter' => array(
    14             'pretty_version' => '2.3.1',
    15             'version' => '2.3.1.0',
    16             'reference' => 'f0ac633ecc04caa191eeccadfe1edb40c4151344',
     14            'pretty_version' => '2.3.2',
     15            'version' => '2.3.2.0',
     16            'reference' => '2bc26a29159a83a1ce4388a71ef21b2369f22382',
    1717            'type' => 'wordpress-plugin',
    1818            'install_path' => __DIR__ . '/../../',
Note: See TracChangeset for help on using the changeset viewer.